110 : Algorithm( name, pSvcLocator ) {
114 m_kkseed.push_back( 123456 );
115 m_kkseed.push_back( 1 );
116 m_kkseed.push_back( 0 );
118 declareProperty(
"NumberOfEventPrinted", m_numberEventPrint = 100 );
119 declareProperty(
"InitializedSeed", m_kkseed );
120 declareProperty(
"CMSEnergy", m_cmsEnergy = 3.773 );
121 declareProperty(
"ReadMeasuredEcms",
122 m_RdMeasuredEcms =
false );
123 declareProperty(
"BeamEnergySpread",
126 declareProperty(
"GenerateResonance", m_generateResonance =
true );
127 declareProperty(
"GenerateContinuum", m_generateContinuum =
true );
128 declareProperty(
"GenerateDownQuark", m_generateDownQuark =
true );
129 declareProperty(
"GenerateUpQuark", m_generateUpQuark =
true );
130 declareProperty(
"GenerateStrangeQuark", m_generateStrangeQuark =
true );
131 declareProperty(
"GenerateCharmQuark", m_generateCharmQuark =
true );
132 declareProperty(
"GenerateBottomQuark", m_generateBottomQuark =
false );
133 declareProperty(
"GenerateMuonPair", m_generateMuonPair =
true );
134 declareProperty(
"GenerateTauPair", m_generateTauPair =
true );
135 declareProperty(
"GenerateRho", m_generateRho =
true );
136 declareProperty(
"GenerateOmega", m_generateOmega =
true );
137 declareProperty(
"GeneratePhi", m_generatePhi =
true );
138 declareProperty(
"GenerateJPsi", m_generateJPsi =
true );
139 declareProperty(
"GeneratePsiPrime", m_generatePsiPrime =
true );
140 declareProperty(
"GeneratePsi3770", m_generatePsi3770 =
true );
141 declareProperty(
"GeneratePsi4030", m_generatePsi4030 =
true );
142 declareProperty(
"GeneratePsi4160", m_generatePsi4160 =
true );
143 declareProperty(
"GeneratePsi4415", m_generatePsi4415 =
true );
144 declareProperty(
"GeneratePsi4260", m_generatePsi4260 =
true );
145 declareProperty(
"ThresholdCut",
146 m_DdbarCutPsi3770 = -3.0 );
147 declareProperty(
"TagISR", m_isrtag =
false );
149 declareProperty(
"TagFSR", m_fsrtag =
false );
151 declareProperty(
"ModeIndexExpXS",
154 declareProperty(
"IHVP", m_ihvp = 1 );
159 m_paramRho.push_back( 0.77457e0 );
160 m_paramRho.push_back( 147.65e-3 );
161 m_paramRho.push_back( 6.89e-6 );
163 m_paramRh2.push_back( 1.465e0 );
164 m_paramRh2.push_back( 310e-3 );
165 m_paramRh2.push_back( 0.0e-6 );
167 m_paramRh3.push_back( 1.700e0 );
168 m_paramRh3.push_back( 240e-3 );
169 m_paramRh3.push_back( 0.0e-6 );
171 m_paramOme.push_back( 0.78194e0 );
172 m_paramOme.push_back( 8.41e-3 );
173 m_paramOme.push_back( 0.60e-6 );
175 m_paramOm2.push_back( 1.419e0 );
176 m_paramOm2.push_back( 174e-3 );
177 m_paramOm2.push_back( 0.00e-6 );
179 m_paramOm3.push_back( 1.649e0 );
180 m_paramOm3.push_back( 220e-3 );
181 m_paramOm3.push_back( 0.00e-6 );
183 m_paramPhi.push_back( 1.01942e0 );
184 m_paramPhi.push_back( 4.46e-3 );
185 m_paramPhi.push_back( 1.33e-6 );
187 m_paramPh2.push_back( 1.680e0 );
188 m_paramPh2.push_back( 150e-3 );
189 m_paramPh2.push_back( 0.00e-6 );
191 m_paramPsi.push_back( 3.096916e0 );
192 m_paramPsi.push_back( 0.0929e-3 );
193 m_paramPsi.push_back( 5.40e-6 );
195 m_paramPs2.push_back( 3.686109e0 );
196 m_paramPs2.push_back( 0.304e-3 );
197 m_paramPs2.push_back( 2.12e-6 );
199 m_paramPs3.push_back( 3.77315e0 );
200 m_paramPs3.push_back( 27.2e-3 );
201 m_paramPs3.push_back( 0.26e-6 );
203 m_paramPs4.push_back( 4.039e0 );
204 m_paramPs4.push_back( 80e-3 );
205 m_paramPs4.push_back( 0.86e-6 );
207 m_paramPs5.push_back( 4.153e0 );
208 m_paramPs5.push_back( 103e-3 );
209 m_paramPs5.push_back( 0.83e-6 );
211 m_paramPs6.push_back( 4.421e0 );
212 m_paramPs6.push_back( 62e-3 );
213 m_paramPs6.push_back( 0.58e-6 );
215 m_paramPs7.push_back( 4.263e0 );
216 m_paramPs7.push_back( 95e-3 );
217 m_paramPs7.push_back( 0.47e-6 );
219 m_paramPs8.push_back( 3.872e0 );
220 m_paramPs8.push_back( 100e-3 );
221 m_paramPs8.push_back( 0.00e-6 );
223 m_paramUps.push_back( 9.46030e0 );
224 m_paramUps.push_back( 0.0525e-3 );
225 m_paramUps.push_back( 1.32e-6 );
227 m_paramUp2.push_back( 10.02326e0 );
228 m_paramUp2.push_back( 0.044e-3 );
229 m_paramUp2.push_back( 0.52e-6 );
231 m_paramUp3.push_back( 10.3552e0 );
232 m_paramUp3.push_back( 0.026e-3 );
233 m_paramUp3.push_back( 0.00e-6 );
235 m_paramUp4.push_back( 10.580e0 );
236 m_paramUp4.push_back( 14e-3 );
237 m_paramUp4.push_back( 0.248e-6 );
239 m_paramUp5.push_back( 10.865e0 );
240 m_paramUp5.push_back( 110e-3 );
241 m_paramUp5.push_back( 0.31e-6 );
243 m_paramUp6.push_back( 11.019 );
244 m_paramUp6.push_back( 79e-3 );
245 m_paramUp6.push_back( 0.13e-6 );
247 m_paramZeta.push_back( 91.1876e0 );
248 m_paramZeta.push_back( 2.4952e0 );
249 m_paramZeta.push_back( 0.08391e0 );
251 m_paramW.push_back( 80.43 );
252 m_paramW.push_back( 2.11e0 );
254 declareProperty(
"ResParameterRho", m_paramRho );
255 declareProperty(
"ResParameterRh2", m_paramRh2 );
256 declareProperty(
"ResParameterRh3", m_paramRh3 );
257 declareProperty(
"ResParameterOme", m_paramOme );
258 declareProperty(
"ResParameterOm2", m_paramOm2 );
259 declareProperty(
"ResParameterOm3", m_paramOm3 );
260 declareProperty(
"ResParameterPhi", m_paramPhi );
261 declareProperty(
"ResParameterPh2", m_paramPh2 );
262 declareProperty(
"ResParameterPsi", m_paramPsi );
263 declareProperty(
"ResParameterPs2", m_paramPs2 );
264 declareProperty(
"ResParameterPs3", m_paramPs3 );
265 declareProperty(
"ResParameterPs4", m_paramPs4 );
266 declareProperty(
"ResParameterPs5", m_paramPs5 );
267 declareProperty(
"ResParameterPs6", m_paramPs6 );
268 declareProperty(
"ResParameterPs7", m_paramPs7 );
269 declareProperty(
"ResParameterPs8", m_paramPs8 );
270 declareProperty(
"ResParameterUps", m_paramUps );
271 declareProperty(
"ResParameterUp2", m_paramUp2 );
272 declareProperty(
"ResParameterUp3", m_paramUp3 );
273 declareProperty(
"ResParameterUp4", m_paramUp4 );
274 declareProperty(
"ResParameterUp5", m_paramUp5 );
275 declareProperty(
"ResParameterUp6", m_paramUp6 );
276 declareProperty(
"ResParameterZeta", m_paramZeta );
277 declareProperty(
"ResParameterW", m_paramW );
280 declareProperty(
"Psi3770toNonDDb", m_ps3toNonDDb = 0.0 );
281 declareProperty(
"Psi3770RatioOfD0toDp", m_ps3D0toDp = 0.563 );
283 declareProperty(
"Psi4030toD0D0b", m_ps4toD0D0b = 0.0227 );
284 declareProperty(
"Psi4030toDpDm", m_ps4toDpDm = 0.0167 );
285 declareProperty(
"Psi4030toDsDs", m_ps4toDsDs = 0.0383 );
286 declareProperty(
"Psi4030toD0D0Star", m_ps4toD0D0Star = 0.2952 );
287 declareProperty(
"Psi4030toDpDmStar", m_ps4toDpDmStar = 0.2764 );
288 declareProperty(
"Psi4030toD0StarD0Star", m_ps4toD0StarD0Star = 0.2476 );
289 declareProperty(
"Psi4030toDpStarDmStar", m_ps4toDpStarDmStar = 0.1041 );
291 declareProperty(
"Psi4160toD0D0b", m_ps5toD0D0b = 0.0190 );
292 declareProperty(
"Psi4160toDpDm", m_ps5toDpDm = 0.0180 );
293 declareProperty(
"Psi4160toDsDs", m_ps5toDsDs = 0.0488 );
294 declareProperty(
"Psi4160toD0D0Star", m_ps5toD0D0Star = 0.1248 );
295 declareProperty(
"Psi4160toDpDmStar", m_ps5toDpDmStar = 0.1240 );
296 declareProperty(
"Psi4160toDsDsStar", m_ps5toDsDsStar = 0.0820 );
297 declareProperty(
"Psi4160toD0StarD0Star", m_ps5toD0StarD0Star = 0.3036 );
298 declareProperty(
"Psi4160toDpStarDmStar", m_ps5toDpStarDmStar = 0.2838 );
301 m_beam1PolVec.clear();
302 m_beam2PolVec.clear();
303 declareProperty(
"Beam1PolVec", m_beam1PolVec );
305 declareProperty(
"Beam2PolVec", m_beam2PolVec );
307 declareProperty(
"ParticleDecayThroughEvtGen", m_evtGenDecay =
true );
308 declareProperty(
"RadiationCorrection", m_radiationCorrection =
true );
311 declareProperty(
"setPythiaPars", m_pypars );
316 MsgStream log(
msgSvc(), name() );
318 log << MSG::INFO <<
"KKMC in initialize()" << endmsg;
321 static const bool CREATEIFNOTTHERE(
true );
322 StatusCode RndmStatus = service(
"BesRndmGenSvc", p_BesRndmGenSvc, CREATEIFNOTTHERE );
323 if ( !RndmStatus.isSuccess() || 0 == p_BesRndmGenSvc )
325 log << MSG::ERROR <<
" Could not initialize Random Number Service" << endmsg;
328 CLHEP::HepRandomEngine* engine = p_BesRndmGenSvc->GetEngine(
"KKMC" );
331 if ( m_ich == -2 || m_ich >= 0 )
333 m_generatePsi4260 =
true;
335 m_generatePsiPrime = 0;
336 m_generatePsi3770 = 0;
337 m_generatePsi4030 = 0;
338 m_generatePsi4160 = 0;
339 m_generatePsi4415 = 0;
343 xwpar[0] = m_cmsEnergy;
344 xwpar[1] = m_cmsEnergySpread;
350 if ( m_beam1PolVec.size() == 3 )
352 xwpar[61] = m_beam1PolVec[0];
353 xwpar[62] = m_beam1PolVec[1];
354 xwpar[63] = m_beam1PolVec[2];
358 if ( m_beam2PolVec.size() == 3 )
360 xwpar[64] = m_beam2PolVec[0];
361 xwpar[65] = m_beam2PolVec[1];
362 xwpar[66] = m_beam2PolVec[2];
366 if ( m_generateResonance )
368 else xwpar[12] = 0.0;
370 if ( m_generateContinuum )
372 else xwpar[3000] = 0.0;
374 if ( m_generateDownQuark )
376 else xwpar[400] = 0.0;
378 if ( m_generateUpQuark )
380 else xwpar[401] = 0.0;
382 if ( m_generateStrangeQuark )
384 else xwpar[402] = 0.0;
386 if ( m_generateCharmQuark )
388 else xwpar[403] = 0.0;
390 if ( m_generateBottomQuark )
392 else xwpar[404] = 0.0;
394 if ( m_generateMuonPair )
396 else xwpar[412] = 0.0;
398 if ( m_generateTauPair )
400 else xwpar[414] = 0.0;
402 if ( m_generateRho ) keyuds |= 1;
403 if ( m_generateOmega ) keyuds |= 2;
404 if ( m_generatePhi ) keyuds |= 4;
407 if ( m_generateJPsi ) keycharm |= 1;
408 if ( m_generatePsiPrime ) keycharm |= 2;
409 if ( m_generatePsi3770 ) keycharm |= 4;
410 if ( m_generatePsi4030 ) keycharm |= 8;
411 if ( m_generatePsi4160 ) keycharm |= 16;
412 if ( m_generatePsi4415 ) keycharm |= 32;
413 if ( m_generatePsi4260 ) keycharm |= 64;
417 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramRho[i];
419 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramRh2[i];
421 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramRh3[i];
423 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramOme[i];
425 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramOm2[i];
427 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramOm3[i];
429 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPhi[i];
431 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPh2[i];
433 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPsi[i];
435 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPs2[i];
437 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPs3[i];
439 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPs4[i];
441 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPs5[i];
443 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPs6[i];
445 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPs7[i];
447 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramPs8[i];
449 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramUps[i];
451 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramUp2[i];
453 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramUp3[i];
455 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramUp4[i];
457 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramUp5[i];
459 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramUp6[i];
461 for (
int i = 0; i < 3; i++ ) xwpar[offset + i] = m_paramZeta[i];
463 for (
int i = 0; i < 2; i++ ) xwpar[offset + i] = m_paramW[i];
466 xwpar[3001] = keyuds + 0.0;
467 xwpar[3002] = keycharm + 0.0;
471 xwpar[offset + 0] = m_ps3toNonDDb;
472 xwpar[offset + 1] = m_ps3D0toDp;
473 DDBARMASS.ddbarmassCUT = m_DdbarCutPsi3770;
476 if ( m_isrtag ) {
PHOTONTAG.isrtag = 1; }
478 if ( m_fsrtag ) {
PHOTONTAG.fsrtag = 1; }
483 xwpar[offset + 0] = m_ps4toD0D0b;
484 xwpar[offset + 1] = m_ps4toDpDm;
485 xwpar[offset + 2] = m_ps4toDsDs;
486 xwpar[offset + 3] = m_ps4toD0D0Star;
487 xwpar[offset + 4] = m_ps4toDpDmStar;
488 xwpar[offset + 5] = m_ps4toD0StarD0Star;
489 xwpar[offset + 6] = m_ps4toDpStarDmStar;
492 xwpar[offset + 0] = m_ps5toD0D0b;
493 xwpar[offset + 1] = m_ps5toDpDm;
494 xwpar[offset + 2] = m_ps5toDsDs;
495 xwpar[offset + 3] = m_ps5toD0D0Star;
496 xwpar[offset + 4] = m_ps5toDpDmStar;
497 xwpar[offset + 5] = m_ps5toDsDsStar;
498 xwpar[offset + 6] = m_ps5toD0StarD0Star;
499 xwpar[offset + 7] = m_ps5toDpStarDmStar;
501 if ( !m_radiationCorrection )
512 for (
int i = 0; i < m_pypars.size(); i++ )
513 {
pygive_( m_pypars[i].c_str(), strlen( m_pypars[i].c_str() ) ); }
526 HepMC::HEPEVT_Wrapper::set_sizeof_real( 8 );
527 HepMC::HEPEVT_Wrapper::set_sizeof_int( 4 );
528 HepMC::HEPEVT_Wrapper::set_max_number_entries( 4000 );
533 if ( m_RdMeasuredEcms )
535 StatusCode status = serviceLocator()->service(
"MeasuredEcmsSvc", ecmsSvc,
true );
536 if ( !status.isSuccess() )
538 std::cout <<
"ERROR: Can not initial the IMeasuredEcmsSvc right" << std::endl;
544 log << MSG::INFO <<
"Finish KKMC initialize()" << endmsg;
545 return StatusCode::SUCCESS;
549 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
550 int runNo = eventHeader->runNumber();
551 int event = eventHeader->eventNumber();
558 else { newRunFlag =
false; }
563 if ( m_RdMeasuredEcms && newRunFlag )
569 double dbEcms = ecmsSvc->getEcms();
570 std::cout <<
"INFO: Read the MeasuredEcms: " << dbEcms <<
" GeV" << std::endl;
571 m_cmsEnergy = dbEcms;
572 xwpar[0] = m_cmsEnergy;
578 MsgStream log(
msgSvc(), name() );
580 log << MSG::INFO <<
"KKMC in execute()" << endmsg;
582 HepMC::IO_HEPEVT HepEvtIO;
590 }
while ( KeySkip != 0 || iflag == 0 );
600 int Pos1, Pos2, KFfin, Nhep;
606 if ( Pos2 > Posn ) Posn = Pos2;
608 if ( KFfin < 10 ) Posn = Posn + 1;
610 for (
int ip = Posn; ip <= Nhep; ip++ )
PHOTOS( ip );
618 if ( m_numberEvent <= m_numberEventPrint )
PYLIST( 1 );
619 log << MSG::INFO <<
" " << m_numberEvent <<
"th event was generated !!" << endmsg;
623 HepMC::GenEvent* evt = HepEvtIO.read_next_event();
624 evt->set_event_number( m_numberEvent );
625 evt->set_signal_process_id( 1 );
629 SmartDataPtr<McGenEventCol> anMcCol( eventSvc(),
"/Event/Gen" );
633 MsgStream log(
msgSvc(), name() );
634 log << MSG::INFO <<
"Add McGenEvent to existing collection" << endmsg;
636 anMcCol->push_back( mcEvent );
643 mcColl->push_back( mcEvent );
644 StatusCode sc = eventSvc()->registerObject(
"/Event/Gen", mcColl );
645 if ( sc != StatusCode::SUCCESS )
647 log << MSG::ERROR <<
"Could not register McGenEvent" << endmsg;
651 return StatusCode::FAILURE;
660 return StatusCode::SUCCESS;