27 : Algorithm( name, pSvcLocator ) {
28 declareProperty(
"Ecm", m_cmsEnergy = 3.773 );
29 declareProperty(
"InitialEvents",
30 m_numUpperBound = 50000 );
31 declareProperty(
"IgnoreUpperBound",
32 m_ignoreUpperBound = 0.0 );
35 declareProperty(
"UpperBoundEnlarge",
36 m_upperBoundEnlarge = 1.2 );
37 declareProperty(
"FinalStateID", m_finalState = 2 );
40 declareProperty(
"MesonProdAmplitudes",
41 m_mesonAmplitudes = 2 );
42 declareProperty(
"IncludeVacuumPolarization",
44 declareProperty(
"ConsiderNLO",
45 m_switchNLO =
false );
46 declareProperty(
"OutputWeightedNLOEvents",
49 declareProperty(
"PhaseSpaceRegulator",
51 declareProperty(
"MesonFormfactor", m_TFF_ID = 8 );
56 declareProperty(
"PositronThetaMin", m_posiThetaMin = 0.0 );
57 declareProperty(
"PositronThetaMax", m_posiThetaMax = 180.0 );
58 declareProperty(
"PositronEnergyMin", m_posiEnergyMin = 0.0 );
59 declareProperty(
"PositronEnergyMax", m_posiEnergyMax = 110.0 );
60 declareProperty(
"ElectronThetaMin", m_elecThetaMin = 0.0 );
61 declareProperty(
"ElectronThetaMax", m_elecThetaMax = 180.0 );
62 declareProperty(
"ElectronEnergyMin", m_elecEnergyMin = 0.0 );
63 declareProperty(
"ElectronEnergyMax", m_elecEnergyMax = 110.0 );
65 declareProperty(
"MesonThetaMin", m_mesonThetaMin = 0.0 );
66 declareProperty(
"MesonThetaMax",
67 m_mesonThetaMax = 180.0 );
68 declareProperty(
"MesonEnergyMin",
69 m_mesonEnergyMin = 0.0 );
70 declareProperty(
"MesonEnergyMax",
71 m_mesonEnergyMax = 100.0 );
73 declareProperty(
"TwoPionPhaseSpaceAlg",
76 declareProperty(
"TwoPionProdAmplitudes",
79 declareProperty(
"TwoPionFormFactor",
80 m_twoPionFormFactor = 2 );
82 declareProperty(
"TwoPionThetaMin", m_twoPionThetaMin = 0.0 );
83 declareProperty(
"TwoPionThetaMax", m_twoPionThetaMax = 180.0 );
84 declareProperty(
"TwoPionMissThetaMin",
85 m_twoPionMissThetaMin = 0.0 );
86 declareProperty(
"TwoPionMissThetaMax", m_twoPionMissThetaMax = 180.0 );
88 declareProperty(
"Chi_cjThetaMin", m_chicjThetaMin = 0.0 );
89 declareProperty(
"Chi_cjThetaMax", m_chicjThetaMax = 180.0 );
90 declareProperty(
"Chi_cjEnergyMin", m_chicjEnergyMin = 0.0 );
91 declareProperty(
"Chi_cjEnergyMax", m_chicjEnergyMax = 100.0 );
93 declareProperty(
"TaggingAngle",
94 m_taggingAngle = 20. );
95 declareProperty(
"TaggingQsquare",
96 m_taggingQsquare = 0.3 );
97 declareProperty(
"TaggingMode",
104 MsgStream log(
msgSvc(), name() );
105 log << MSG::DEBUG <<
"Ekhara in initialize()" << endmsg;
108 static const bool CREATEIFNOTTHERE(
true );
109 StatusCode RndmStatus = service(
"BesRndmGenSvc", p_BesRndmGenSvc, CREATEIFNOTTHERE );
110 if ( !RndmStatus.isSuccess() || 0 == p_BesRndmGenSvc )
112 log << MSG::ERROR <<
" Could not initialize Random Number Service" << endmsg;
115 HepRandomEngine* engine = p_BesRndmGenSvc->GetEngine(
"Ekhara" );
128 SWDIAG.sw_2pi = m_twoPionAmplitudes;
129 SWDIAG.sw_1pi = m_mesonAmplitudes;
134 if ( m_nloWithWeights )
NLOTYPE.weighted = 1;
138 xpar[0] = m_cmsEnergy;
139 xpar[1] = m_numUpperBound;
140 xpar[2] = m_ignoreUpperBound;
141 xpar[3] = m_upperBoundEnlarge;
143 xpar[5] = m_posiThetaMin;
144 xpar[6] = m_posiThetaMax;
145 xpar[7] = m_posiEnergyMin;
146 xpar[8] = m_posiEnergyMax;
147 xpar[9] = m_elecThetaMin;
148 xpar[10] = m_elecThetaMax;
149 xpar[11] = m_elecEnergyMin;
150 xpar[12] = m_elecEnergyMax;
151 xpar[13] = m_mesonThetaMin;
152 xpar[14] = m_mesonThetaMax;
153 xpar[15] = m_mesonEnergyMin;
154 xpar[16] = m_mesonEnergyMax;
155 xpar[17] = m_twoPionThetaMin;
156 xpar[18] = m_twoPionThetaMax;
157 xpar[19] = m_twoPionMissThetaMin;
158 xpar[20] = m_twoPionMissThetaMax;
159 xpar[21] = m_chicjThetaMin;
160 xpar[22] = m_chicjThetaMax;
161 xpar[23] = m_chicjEnergyMin;
162 xpar[24] = m_chicjEnergyMax;
163 xpar[25] = m_taggingAngle;
164 xpar[26] = m_taggingQsquare;
170 if ( log.level() < MSG::INFO ) {
DIAGNOSE(); }
176 return StatusCode::SUCCESS;
180 MsgStream log(
msgSvc(), name() );
181 log << MSG::DEBUG <<
"Ekhara in execute()" << endmsg;
184 if ( m_finalState >= 2 && m_finalState <= 4 && m_switchNLO && m_nloWithWeights )
188 double p1[4],
p2[4], q1[4], q2[4];
189 double pi1[4],
pi2[4], qpion[4], qcj[4], kphp[4];
191 for (
int i = 0; i < 4; i++ )
205 GenEvent* evt =
new GenEvent( 1, 1 );
207 GenVertex* prod_vtx =
new GenVertex();
208 evt->add_vertex( prod_vtx );
214 new GenParticle( CLHEP::HepLorentzVector(
p1[1],
p1[2],
p1[3],
p1[0] ), -11, 3 );
215 posi->suggest_barcode( 1 );
216 prod_vtx->add_particle_in( posi );
220 new GenParticle( CLHEP::HepLorentzVector(
p2[1],
p2[2],
p2[3],
p2[0] ), 11, 3 );
221 elec->suggest_barcode( 2 );
222 prod_vtx->add_particle_in( elec );
224 evt->set_beam_particles( posi, elec );
228 new GenParticle( CLHEP::HepLorentzVector( q1[1], q1[2], q1[3], q1[0] ), -11, 1 );
229 p->suggest_barcode( 3 );
230 prod_vtx->add_particle_out( p );
233 p =
new GenParticle( CLHEP::HepLorentzVector( q2[1], q2[2], q2[3], q2[0] ), 11, 1 );
234 p->suggest_barcode( 4 );
235 prod_vtx->add_particle_out( p );
237 switch ( m_finalState )
241 p =
new GenParticle( CLHEP::HepLorentzVector( pi1[1], pi1[2], pi1[3], pi1[0] ), 111, 1 );
242 p->suggest_barcode( 5 );
243 prod_vtx->add_particle_out( p );
244 p =
new GenParticle( CLHEP::HepLorentzVector(
pi2[1],
pi2[2],
pi2[3],
pi2[0] ), 111, 1 );
245 p->suggest_barcode( 6 );
246 prod_vtx->add_particle_out( p );
250 p =
new GenParticle( CLHEP::HepLorentzVector( pi1[1], pi1[2], pi1[3], pi1[0] ), 211, 1 );
251 p->suggest_barcode( 5 );
252 prod_vtx->add_particle_out( p );
253 p =
new GenParticle( CLHEP::HepLorentzVector(
pi2[1],
pi2[2],
pi2[3],
pi2[0] ), -211, 1 );
254 p->suggest_barcode( 6 );
255 prod_vtx->add_particle_out( p );
258 for (
int i = 0; i < 6; i++ ) { weights[i] = 0.0; }
260 for (
int ai = 0;
ai < (
sizeof( weights ) /
sizeof( double ) );
ai++ )
261 { evt->weights().push_back( weights[
ai] ); }
262 p =
new GenParticle( CLHEP::HepLorentzVector( 0, 0, 0, weights[0] ), 99, 1 );
263 p->suggest_barcode( 7 );
264 prod_vtx->add_particle_out( p );
269 p =
new GenParticle( CLHEP::HepLorentzVector( qpion[1], qpion[2], qpion[3], qpion[0] ),
271 p->suggest_barcode( 5 );
272 prod_vtx->add_particle_out( p );
276 p =
new GenParticle( CLHEP::HepLorentzVector( qpion[1], qpion[2], qpion[3], qpion[0] ),
278 p->suggest_barcode( 5 );
279 prod_vtx->add_particle_out( p );
283 p =
new GenParticle( CLHEP::HepLorentzVector( qpion[1], qpion[2], qpion[3], qpion[0] ),
285 p->suggest_barcode( 5 );
286 prod_vtx->add_particle_out( p );
290 p =
new GenParticle( CLHEP::HepLorentzVector( qcj[1], qcj[2], qcj[3], qcj[0] ), 10441, 1 );
291 p->suggest_barcode( 5 );
292 prod_vtx->add_particle_out( p );
296 p =
new GenParticle( CLHEP::HepLorentzVector( qcj[1], qcj[2], qcj[3], qcj[0] ), 20443, 1 );
297 p->suggest_barcode( 5 );
298 prod_vtx->add_particle_out( p );
302 p =
new GenParticle( CLHEP::HepLorentzVector( qcj[1], qcj[2], qcj[3], qcj[0] ), 445, 1 );
303 p->suggest_barcode( 5 );
304 prod_vtx->add_particle_out( p );
309 if ( m_finalState >= 2 && m_finalState <= 4 && m_switchNLO )
314 p =
new GenParticle( CLHEP::HepLorentzVector( kphp[1], kphp[2], kphp[3], kphp[0] ), 22,
316 p->suggest_barcode( 6 );
317 prod_vtx->add_particle_out( p );
319 if ( m_nloWithWeights )
322 evt->weights().push_back(
weight );
326 p =
new GenParticle( CLHEP::HepLorentzVector( 0, 0, 0,
weight ), 99, 1 );
327 p->suggest_barcode( 7 );
328 prod_vtx->add_particle_out( p );
330 else if (
NLOTYPE.EvtPhTyp == 0 )
332 p =
new GenParticle( CLHEP::HepLorentzVector( 0, 0, 0,
weight ), 98, 1 );
333 p->suggest_barcode( 6 );
334 prod_vtx->add_particle_out( p );
339 if ( log.level() < MSG::INFO ) { evt->print(); }
342 SmartDataPtr<McGenEventCol> anMcCol( eventSvc(),
"/Event/Gen" );
345 log << MSG::DEBUG <<
"Adding McGenEvent to existing collection" << endmsg;
347 anMcCol->push_back( mcEvent );
353 mcColl->push_back( mcEvent );
354 StatusCode sc = eventSvc()->registerObject(
"/Event/Gen", mcColl );
355 if ( sc != StatusCode::SUCCESS )
357 log << MSG::ERROR <<
"Could not register McGenEvent" << endmsg;
361 return StatusCode::FAILURE;
363 else { log << MSG::INFO <<
"McGenEventCol created " << endmsg; }
368 log << MSG::DEBUG <<
"before execute() return" << endmsg;
369 return StatusCode::SUCCESS;
373 MsgStream log(
msgSvc(), name() );
374 log << MSG::INFO <<
"Ekhara in finalize()" << endmsg;
379 if ( m_finalState == 0 )
381 double tnpfinpar[10];
382 for (
int i = 0; i < 10; i++ ) { tnpfinpar[i] = 0.0; }
386 log << MSG::INFO <<
"Total number of iterations = " << tnpfinpar[0] << endmsg;
387 log << MSG::INFO <<
"Number of MC trials = " << tnpfinpar[1] << endmsg;
388 log << MSG::INFO <<
"ContribMax_MCloop = " << tnpfinpar[2] << endmsg;
389 log << MSG::INFO <<
"MC efficiency (evt/eff.iter) = " << m_totalEvents / tnpfinpar[1]
392 log << MSG::INFO <<
"================================" << endmsg;
393 log << MSG::INFO <<
"From all weights:" << endmsg;
394 double CS = tnpfinpar[3] / tnpfinpar[0];
396 sqrt( fabs( tnpfinpar[4] / tnpfinpar[0] -
CS *
CS ) / ( tnpfinpar[0] - 1. ) );
397 log << MSG::INFO <<
" Integral Cross Section = " <<
CS <<
" +- " << CSerr <<
" [nb]"
399 log << MSG::INFO << endmsg;
400 log << MSG::INFO <<
"From UNWEIGHTED events:" << endmsg;
401 if ( tnpfinpar[1] <= 0. )
408 CS = tnpfinpar[5] * m_totalEvents / tnpfinpar[1];
409 CSerr = sqrt(
CS * ( tnpfinpar[5] -
CS ) ) / sqrt( tnpfinpar[1] );
411 log << MSG::INFO <<
" Integral Cross Section = " <<
CS <<
" +- " << CSerr <<
" [nb]"
413 log << MSG::INFO <<
"================================" << endmsg;
414 if ( tnpfinpar[7] > 0. )
416 log << MSG::WARNING <<
"There were overshootings." << endmsg;
417 log << MSG::WARNING <<
"The events, corresponding to them were ignored." << endmsg;
418 log << MSG::WARNING <<
"The unweighted sample may be not reliable!" << endmsg;
419 log << MSG::WARNING <<
"\nContribution from overshooted events:" << endmsg;
420 sprintf( xsect,
" Integral Cross Section = %1.5E +- %1.5E [GeV^-2]", tnpfinpar[8],
422 log << MSG::WARNING << xsect << endmsg;
423 sprintf( xsect,
" = %1.5E +- %1.5E [nb]",
424 tnpfinpar[8] * tnpfinpar[6], tnpfinpar[9] * tnpfinpar[6] );
425 log << MSG::WARNING << xsect << endmsg;
426 log << MSG::INFO <<
"================================" << endmsg;
429 else if ( m_finalState == 1 )
431 double pipifinpar[2];
432 for (
int i = 0; i < 2; i++ ) { pipifinpar[i] = 0.0; }
435 double CS = pipifinpar[0] / m_totalEvents;
437 sqrt( ( pipifinpar[1] / m_totalEvents -
CS *
CS ) / ( m_totalEvents - 1. ) );
438 log << MSG::INFO <<
"================================" << endmsg;
439 log << MSG::INFO <<
"Cross Section = " <<
CS <<
" +- " << CSerr <<
" [nb]" << endmsg;
440 log << MSG::INFO <<
"================================" << endmsg;
442 else if ( m_finalState > 1 && m_finalState < 5 )
445 for (
int i = 0; i < 10; i++ ) { mfp[i] = 0.0; }
449 log << MSG::INFO <<
"================================" << endmsg;
450 log << MSG::INFO <<
"Events 0ph:" << endmsg;
451 log << MSG::INFO <<
"-------------------------------- " << endmsg;
453 log << MSG::INFO <<
"Total number of iterations = " << mfp[0] << endmsg;
456 log << MSG::INFO <<
"Number of MC trials = " << mfp[1] << endmsg;
457 log << MSG::INFO <<
"ContribMax_MCloop = " << mfp[2] << endmsg;
458 log << MSG::INFO <<
"MC efficiency (evt/eff.iter) = " << m_totalEvents / mfp[1]
461 log << MSG::INFO <<
"================================" << endmsg;
462 log << MSG::INFO <<
"From all weights:" << endmsg;
463 double CS = mfp[3] / mfp[0];
464 double CSerr = sqrt( fabs( mfp[4] / mfp[0] -
CS *
CS ) / ( mfp[0] - 1. ) );
466 double sumCSerr = CSerr * CSerr;
467 log << MSG::INFO <<
" Integral Cross Section = " <<
CS <<
" +- " << CSerr <<
" [GeV^-2]"
469 log << MSG::INFO <<
" = " <<
CS * mfp[6] <<
" +- " << CSerr * mfp[6]
470 <<
" [nb]" << endmsg;
471 log << MSG::INFO << endmsg;
474 for (
int i = 0; i < 10; i++ ) { mfp[i] = 0.0; }
476 log << MSG::INFO <<
"================================" << endmsg;
477 log << MSG::INFO <<
"Events 1ph:" << endmsg;
478 log << MSG::INFO <<
"-------------------------------- " << endmsg;
479 log << MSG::INFO <<
"Total number of iterations = " << mfp[0] << endmsg;
480 log << MSG::INFO <<
"================================" << endmsg;
481 log << MSG::INFO <<
"From all weights:" << endmsg;
482 CS = mfp[3] / mfp[0];
483 CSerr = sqrt( fabs( mfp[4] / mfp[0] -
CS *
CS ) / ( mfp[0] - 1. ) );
485 sumCSerr += CSerr * CSerr;
486 log << MSG::INFO <<
" Integral Cross Section = " <<
CS <<
" +- " << CSerr <<
" [GeV^-2]"
488 log << MSG::INFO <<
" = " <<
CS * mfp[6] <<
" +- "
489 << CSerr * mfp[6] <<
" [nb]" << endmsg;
490 log << MSG::INFO << endmsg;
491 log << MSG::INFO <<
" -------------------------------- " << endmsg;
492 log << MSG::INFO <<
" sigma (0ph+1ph events) = " << sumCS <<
" +- " << sqrt( sumCSerr )
493 <<
" [GeV^-2]" << endmsg;
494 log << MSG::INFO <<
" = " << sumCS * mfp[6] <<
" +- "
495 << sqrt( sumCSerr ) * mfp[6] <<
" [nb]" << endmsg;
496 log << MSG::INFO <<
"================================" << endmsg;
500 log << MSG::INFO <<
"From UNWEIGHTED events:" << endmsg;
508 CS = mfp[5] * m_totalEvents / mfp[1];
509 CSerr = sqrt(
CS * ( mfp[5] -
CS ) ) / sqrt( mfp[1] );
511 sprintf( xsect,
" Integral Cross Section = %1.5E +- %1.5E [GeV^-2]",
CS, CSerr );
512 log << MSG::INFO << xsect << endmsg;
513 sprintf( xsect,
" = %1.5E +- %1.5E [nb]",
CS * mfp[6],
515 log << MSG::INFO << xsect << endmsg;
516 log << MSG::INFO <<
"================================" << endmsg;
520 log << MSG::WARNING <<
"There were overshootings." << endmsg;
521 log << MSG::WARNING <<
"The events, corresponding to them were ignored." << endmsg;
522 log << MSG::WARNING <<
"The unweighted sample may be not reliable!" << endmsg;
523 log << MSG::WARNING <<
"\nContribution from overshooted events:" << endmsg;
524 sprintf( xsect,
" Integral Cross Section = %1.5E +- %1.5E [GeV^-2]", mfp[8], mfp[9] );
525 log << MSG::WARNING << xsect << endmsg;
526 sprintf( xsect,
" = %1.5E +- %1.5E [nb]", mfp[8] * mfp[6],
528 log << MSG::WARNING << xsect << endmsg;
529 log << MSG::INFO <<
"================================" << endmsg;
533 else if ( m_finalState > 4 && m_finalState < 8 )
535 double chicjfinpar[3];
536 for (
int i = 0; i < 3; i++ ) { chicjfinpar[i] = 0.0; }
539 double CS = chicjfinpar[1] / chicjfinpar[0];
541 sqrt( ( chicjfinpar[2] / chicjfinpar[0] -
CS *
CS ) / ( chicjfinpar[0] - 1. ) );
542 log << MSG::INFO <<
"================================" << endmsg;
543 sprintf( xsect,
" Cross Section = %1.5E +- %1.5E [nb]",
CS, CSerr );
544 log << MSG::INFO << xsect << endmsg;
545 log << MSG::INFO <<
"================================" << endmsg;
548 log << MSG::DEBUG <<
"Ekhara has terminated successfully" << endmsg;
550 return StatusCode::SUCCESS;
554 MsgStream log(
msgSvc(), name() );
557 <<
"=============================================================" << endmsg;
558 log << MSG::INFO <<
"This is EKHARA, Version 3.1" << endmsg;
559 switch ( m_finalState )
562 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- pi0pi0" << endmsg;
565 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- pi+pi-" << endmsg;
567 case 2: log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- pi0" << endmsg;
break;
568 case 3: log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- eta" << endmsg;
break;
570 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- etaPRIME" << endmsg;
573 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- Chi_c0" << endmsg;
576 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- Chi_c1" << endmsg;
579 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- Chi_c2" << endmsg;
582 log << MSG::ERROR <<
"WRONG channel ID: Process not implemented!" << endmsg;
583 return StatusCode::FAILURE;
587 if ( m_finalState == 0 )
591 log << MSG::ERROR <<
"NLO not implemented for this Process!" << endmsg;
592 return StatusCode::FAILURE;
594 if ( m_twoPionAmplitudes != 4 )
597 <<
" Neutral Pion Pairs only with full TwoPionAmplitudes == 4 ! \t You used "
598 << m_twoPionAmplitudes << endmsg;
599 return StatusCode::FAILURE;
601 if ( m_twoPionPhspAlg != 1 )
604 <<
" Neutral Pion Pairs only with full TwoPionPhaseSpaceAlg == 1 ! \t You used "
605 << m_twoPionPhspAlg << endmsg;
606 return StatusCode::FAILURE;
608 log << MSG::INFO <<
"\tPhase space generation using algorithm: " << m_twoPionPhspAlg
610 log << MSG::INFO <<
"\tMatrix element: \t|M_s + M_t + M_2g(full)|^2" << endmsg;
612 log << MSG::INFO <<
"The following conditions are applied:" << endmsg;
613 log << MSG::INFO <<
"\tPion Momentum: " << m_twoPionThetaMin <<
" < Theta [deg] < "
614 << m_twoPionThetaMax << endmsg;
615 log << MSG::INFO <<
"\tMissing Momentum: " << m_twoPionMissThetaMin <<
" < Theta [deg] < "
616 << m_twoPionMissThetaMax << endmsg;
618 else if ( m_finalState == 1 )
622 log << MSG::ERROR <<
"NLO not implemented for this Process!" << endmsg;
623 return StatusCode::FAILURE;
625 if ( m_twoPionPhspAlg < 0 || m_twoPionPhspAlg > 1 )
628 <<
" Wrong choice of phase space generation algorithm: " << m_twoPionPhspAlg
630 return StatusCode::FAILURE;
633 log << MSG::INFO <<
"\tPhase space generation using algorithm: " << m_twoPionPhspAlg
635 log << MSG::INFO <<
"\tMatrix element: ";
636 switch ( m_twoPionAmplitudes )
638 case 1: log << MSG::INFO <<
"\t|M_s|^2" << endmsg;
break;
639 case 2: log << MSG::INFO <<
"\t|M_s + M_t|^2" << endmsg;
break;
640 case 3: log << MSG::INFO <<
"\t|M_s + M_t + M_2g(Born)|^2" << endmsg;
break;
641 case 4: log << MSG::INFO <<
"\t|M_s + M_t + M_2g(full)|^2" << endmsg;
break;
645 switch ( m_twoPionFormFactor )
647 case 0: log << MSG::INFO <<
"\tUsing KS pion form factor" << endmsg;
break;
648 case 1: log << MSG::INFO <<
"\tUsing GS pion form factor" << endmsg;
break;
649 case 2: log << MSG::INFO <<
"\tUsing new GS pion form factor" << endmsg;
break;
652 <<
"Undefined pion form factor switch! Using new GS pion form factor instead!"
654 m_twoPionFormFactor = 2;
658 log << MSG::INFO <<
"The following conditions are applied:" << endmsg;
659 log << MSG::INFO <<
"\tPion Momentum: " << m_twoPionThetaMin <<
" < Theta [deg] < "
660 << m_twoPionThetaMax << endmsg;
661 log << MSG::INFO <<
"\tMissing Momentum: " << m_twoPionMissThetaMin <<
" < Theta [deg] < "
662 << m_twoPionMissThetaMax << endmsg;
664 else if ( m_finalState >= 2 && m_finalState <= 4 )
668 log << MSG::INFO <<
"\tWith NLO corrections: mgamma = " << m_eps_ph * 0.51099906E-3
670 if ( m_nloWithWeights )
671 { log << MSG::WARNING <<
"Output will contain weighted events!" << endmsg; }
673 { log << MSG::WARNING <<
"Attention! Events will be unweighted for output!" << endmsg; }
676 log << MSG::INFO <<
"\tVacuum polarization included:" << endmsg;
677 log << MSG::INFO <<
"\thttp://www-com.physik.hu-berlin.de/~fjeger/software.html"
680 else { log << MSG::INFO <<
"\tVacuum polarization NOT included:" << endmsg; }
684 log << MSG::INFO <<
"\tWithout NLO corrections!" << endmsg;
687 log << MSG::ERROR <<
"Vacuum polarization can ONLY be included for NLO!" << endmsg;
688 return StatusCode::FAILURE;
692 log << MSG::INFO <<
"The cross section will be calculated" << endmsg;
693 log << MSG::INFO <<
"\tMatrix element: ";
694 switch ( m_mesonAmplitudes )
697 log << MSG::INFO <<
"\t|M_s|^2" << endmsg;
698 if ( m_switchNLO == 1 )
700 log << MSG::ERROR <<
" NLO not implemented for s-channel!" << endmsg;
701 return StatusCode::FAILURE;
703 if ( m_TFF_ID == 7 || m_TFF_ID == 8 )
706 <<
"TFF Models 7 and 8 were not compared to data in the only-s-channel "
711 case 2: log << MSG::INFO <<
"\t|M_t|^2" << endmsg;
break;
712 case 3: log << MSG::INFO <<
"\t|M_s + M_t|^2" << endmsg;
break;
716 log << MSG::INFO <<
"The following conditions are applied:" << endmsg;
717 log << MSG::INFO <<
"\te+ : " << m_posiThetaMin <<
" < Theta [deg] < " << m_posiThetaMax
719 log << MSG::INFO <<
"\t " << m_posiEnergyMin <<
" < Energy [GeV] < "
720 << m_posiEnergyMin << endmsg;
721 log << MSG::INFO <<
"\te- : " << m_elecThetaMin <<
" < Theta [deg] < " << m_elecThetaMax
723 log << MSG::INFO <<
"\t " << m_elecEnergyMin <<
" < Energy [GeV] < "
724 << m_elecEnergyMin << endmsg;
726 double cosTagAngleRad = fabs(
cos( m_taggingAngle * TMath::DegToRad() ) );
727 switch ( m_taggingMode )
730 log << MSG::INFO <<
"\t Generating Untagged event configuration!" << endmsg;
731 log << MSG::INFO <<
"\t Accepting only events with: |cos(Theta Lepton)| > "
732 << cosTagAngleRad <<
"!" << endmsg;
735 log << MSG::INFO <<
"\t Generating Single Tagged event configuration!" << endmsg;
736 log << MSG::INFO <<
"\t Accepting only events with:" << endmsg;
737 log << MSG::INFO <<
"\t\t |cos(Theta e+/-)| > " << cosTagAngleRad
738 <<
" and |cos(Theta e-/+)| < " << cosTagAngleRad << endmsg;
741 log << MSG::INFO <<
"\t Generating Double Tagged event configuration!" << endmsg;
742 log << MSG::INFO <<
"\t Accepting only events with: |cos(Theta Lepton)| < "
743 << cosTagAngleRad <<
"!" << endmsg;
746 log << MSG::INFO <<
"\t Generating Untagged event configuration!" << endmsg;
747 log << MSG::INFO <<
"\t Accepting only events with: Q^2 (Lepton)| < " << m_taggingQsquare
751 log << MSG::INFO <<
"\t Generating Single Tagged event configuration!" << endmsg;
752 log << MSG::INFO <<
"\t Accepting only events with:" << endmsg;
753 log << MSG::INFO <<
"\t\t Q^2 (e+/-) > " << m_taggingQsquare <<
" and Q^2 (e-/+) < "
754 << m_taggingQsquare << endmsg;
757 log << MSG::INFO <<
"\t Generating Double Tagged event configuration!" << endmsg;
758 log << MSG::INFO <<
"\t Accepting only events with: Q^2 (Lepton) > " << m_taggingQsquare
762 if ( m_taggingMode > 0 )
764 log << MSG::INFO <<
"\t Unknown tagging mode selected!" << endmsg;
765 log << MSG::INFO <<
"\t Generating events without tagging configuration!" << endmsg;
771 switch ( m_finalState )
773 case 2: log << MSG::INFO <<
"\tpi0 : ";
break;
774 case 3: log << MSG::INFO <<
"\teta : ";
break;
775 case 4: log << MSG::INFO <<
"\teta' : ";
break;
778 log << MSG::INFO << m_mesonThetaMin <<
" < Theta [deg] < " << m_mesonThetaMax << endmsg;
779 log << MSG::INFO <<
"\t " << m_mesonEnergyMin <<
" < Energy [GeV] < "
780 << m_mesonEnergyMin << endmsg;
782 else if ( m_finalState >= 5 && m_finalState <= 7 )
786 log << MSG::ERROR <<
"NLO not implemented for this Process!" << endmsg;
787 return StatusCode::FAILURE;
789 log << MSG::INFO <<
"The following conditions are applied:" << endmsg;
790 log << MSG::INFO <<
"\te+ : " << m_posiThetaMin <<
" < Theta [deg] < " << m_posiThetaMax
792 log << MSG::INFO <<
"\t " << m_posiEnergyMin <<
" < Energy [GeV] < "
793 << m_posiEnergyMin << endmsg;
794 log << MSG::INFO <<
"\te- : " << m_elecThetaMin <<
" < Theta [deg] < " << m_elecThetaMax
796 log << MSG::INFO <<
"\t " << m_elecEnergyMin <<
" < Energy [GeV] < "
797 << m_elecEnergyMin << endmsg;
798 switch ( m_finalState )
800 case 5: log << MSG::INFO <<
"\tchi_c0 : ";
break;
801 case 6: log << MSG::INFO <<
"\tchi_c1 : ";
break;
802 case 7: log << MSG::INFO <<
"\tchi_c2 : ";
break;
805 log << MSG::INFO << m_chicjThetaMin <<
" < Theta [deg] < " << m_chicjThetaMax << endmsg;
806 log << MSG::INFO <<
"\t " << m_chicjEnergyMin <<
" < Energy [GeV] < "
807 << m_chicjEnergyMin << endmsg;
810 <<
"=============================================================" << endmsg;
812 return StatusCode::SUCCESS;