30Ekhara::Ekhara(
const std::string& name, ISvcLocator* pSvcLocator) : Algorithm(name, pSvcLocator)
32 declareProperty(
"Ecm", m_cmsEnergy = 3.773 );
33 declareProperty(
"InitialEvents", m_numUpperBound = 50000 );
34 declareProperty(
"IgnoreUpperBound", m_ignoreUpperBound = 0.0 );
37 declareProperty(
"UpperBoundEnlarge", m_upperBoundEnlarge = 1.2 );
38 declareProperty(
"FinalStateID", m_finalState = 2 );
40 declareProperty(
"MesonProdAmplitudes", m_mesonAmplitudes = 2 );
41 declareProperty(
"IncludeVacuumPolarization", m_switchVP =
false );
42 declareProperty(
"ConsiderNLO", m_switchNLO =
false );
43 declareProperty(
"OutputWeightedNLOEvents", m_nloWithWeights =
false );
44 declareProperty(
"PhaseSpaceRegulator", m_eps_ph = 0.01 );
45 declareProperty(
"MesonFormfactor", m_TFF_ID = 8 );
50 declareProperty(
"PositronThetaMin", m_posiThetaMin = 0.0 );
51 declareProperty(
"PositronThetaMax", m_posiThetaMax = 180.0 );
52 declareProperty(
"PositronEnergyMin", m_posiEnergyMin = 0.0 );
53 declareProperty(
"PositronEnergyMax", m_posiEnergyMax = 110.0 );
54 declareProperty(
"ElectronThetaMin", m_elecThetaMin = 0.0 );
55 declareProperty(
"ElectronThetaMax", m_elecThetaMax = 180.0 );
56 declareProperty(
"ElectronEnergyMin", m_elecEnergyMin = 0.0 );
57 declareProperty(
"ElectronEnergyMax", m_elecEnergyMax = 110.0 );
59 declareProperty(
"MesonThetaMin", m_mesonThetaMin = 0.0 );
60 declareProperty(
"MesonThetaMax", m_mesonThetaMax = 180.0 );
61 declareProperty(
"MesonEnergyMin", m_mesonEnergyMin = 0.0 );
62 declareProperty(
"MesonEnergyMax", m_mesonEnergyMax = 100.0 );
64 declareProperty(
"TwoPionPhaseSpaceAlg", m_twoPionPhspAlg = 1 );
65 declareProperty(
"TwoPionProdAmplitudes", m_twoPionAmplitudes = 4 );
66 declareProperty(
"TwoPionFormFactor" , m_twoPionFormFactor = 2 );
67 declareProperty(
"TwoPionThetaMin", m_twoPionThetaMin = 0.0);
68 declareProperty(
"TwoPionThetaMax", m_twoPionThetaMax = 180.0);
69 declareProperty(
"TwoPionMissThetaMin", m_twoPionMissThetaMin = 0.0);
70 declareProperty(
"TwoPionMissThetaMax", m_twoPionMissThetaMax = 180.0);
72 declareProperty(
"Chi_cjThetaMin", m_chicjThetaMin = 0.0);
73 declareProperty(
"Chi_cjThetaMax", m_chicjThetaMax = 180.0);
74 declareProperty(
"Chi_cjEnergyMin", m_chicjEnergyMin = 0.0);
75 declareProperty(
"Chi_cjEnergyMax", m_chicjEnergyMax = 100.0);
77 declareProperty(
"TaggingAngle", m_taggingAngle = 20. );
78 declareProperty(
"TaggingQsquare", m_taggingQsquare = 0.3 );
79 declareProperty(
"TaggingMode", m_taggingMode = 0 );
86 MsgStream log(
msgSvc(), name());
87 log << MSG::DEBUG <<
"Ekhara in initialize()" << endreq;
90 static const bool CREATEIFNOTTHERE(
true);
91 StatusCode RndmStatus = service(
"BesRndmGenSvc", p_BesRndmGenSvc, CREATEIFNOTTHERE);
92 if (!RndmStatus.isSuccess() || 0 == p_BesRndmGenSvc) {
93 log << MSG::ERROR <<
" Could not initialize Random Number Service" << endreq;
96 HepRandomEngine* engine = p_BesRndmGenSvc->
GetEngine(
"Ekhara");
111 SWDIAG.sw_2pi = m_twoPionAmplitudes;
112 SWDIAG.sw_1pi = m_mesonAmplitudes;
117 if( m_nloWithWeights)
NLOTYPE.weighted = 1;
121 xpar[0] = m_cmsEnergy;
122 xpar[1] = m_numUpperBound;
123 xpar[2] = m_ignoreUpperBound;
124 xpar[3] = m_upperBoundEnlarge;
126 xpar[5] = m_posiThetaMin;
127 xpar[6] = m_posiThetaMax;
128 xpar[7] = m_posiEnergyMin;
129 xpar[8] = m_posiEnergyMax;
130 xpar[9] = m_elecThetaMin;
131 xpar[10] = m_elecThetaMax;
132 xpar[11] = m_elecEnergyMin;
133 xpar[12] = m_elecEnergyMax;
134 xpar[13] = m_mesonThetaMin;
135 xpar[14] = m_mesonThetaMax;
136 xpar[15] = m_mesonEnergyMin;
137 xpar[16] = m_mesonEnergyMax;
138 xpar[17] = m_twoPionThetaMin;
139 xpar[18] = m_twoPionThetaMax;
140 xpar[19] = m_twoPionMissThetaMin;
141 xpar[20] = m_twoPionMissThetaMax;
142 xpar[21] = m_chicjThetaMin;
143 xpar[22] = m_chicjThetaMax;
144 xpar[23] = m_chicjEnergyMin;
145 xpar[24] = m_chicjEnergyMax;
146 xpar[25] = m_taggingAngle;
147 xpar[26] = m_taggingQsquare;
153 if( log.level() < MSG::INFO ) {
161 return StatusCode::SUCCESS;
167 MsgStream log(
msgSvc(), name());
168 log << MSG::DEBUG <<
"Ekhara in execute()" << endreq;
171 if( m_finalState >= 2 && m_finalState <= 4 && m_switchNLO && m_nloWithWeights ) {
177 double p1[4],
p2[4], q1[4], q2[4];
178 double pi1[4],
pi2[4], qpion[4], qcj[4], kphp[4];
180 for (
int i=0;i<4;i++) {
193 GenEvent* evt =
new GenEvent(1,1);
195 GenVertex* prod_vtx =
new GenVertex();
196 evt->add_vertex( prod_vtx );
201 GenParticle* posi =
new GenParticle( CLHEP::HepLorentzVector(
p1[1],
p1[2],
p1[3],
p1[0]), -11, 3);
202 posi->suggest_barcode( 1 );
203 prod_vtx->add_particle_in(posi);
206 GenParticle *elec =
new GenParticle(CLHEP::HepLorentzVector(
p2[1],
p2[2],
p2[3],
p2[0]), 11, 3);
207 elec->suggest_barcode( 2 );
208 prod_vtx->add_particle_in(elec);
210 evt->set_beam_particles(posi,elec);
213 GenParticle *p =
new GenParticle(CLHEP::HepLorentzVector(q1[1],q1[2],q1[3],q1[0]), -11, 1);
214 p->suggest_barcode( 3 );
215 prod_vtx->add_particle_out(p);
218 p =
new GenParticle( CLHEP::HepLorentzVector(q2[1],q2[2],q2[3],q2[0] ), 11, 1);
219 p->suggest_barcode( 4 );
220 prod_vtx->add_particle_out(p);
222 switch (m_finalState) {
225 p =
new GenParticle( CLHEP::HepLorentzVector(pi1[1],pi1[2],pi1[3],pi1[0]), 111,1);
226 p->suggest_barcode( 5 );
227 prod_vtx->add_particle_out(p);
228 p =
new GenParticle( CLHEP::HepLorentzVector(
pi2[1],
pi2[2],
pi2[3],
pi2[0]), 111,1);
229 p->suggest_barcode( 6 );
230 prod_vtx->add_particle_out(p);
234 p =
new GenParticle( CLHEP::HepLorentzVector(pi1[1],pi1[2],pi1[3],pi1[0]), 211,1);
235 p->suggest_barcode( 5 );
236 prod_vtx->add_particle_out(p);
237 p =
new GenParticle( CLHEP::HepLorentzVector(
pi2[1],
pi2[2],
pi2[3],
pi2[0]),-211,1);
238 p->suggest_barcode( 6 );
239 prod_vtx->add_particle_out(p);
241 for (
int i=0;i<6;i++) {
245 for (
int ai=0;
ai<(
sizeof(weights)/
sizeof(double));
ai++) {
246 evt->weights().push_back(weights[
ai]);
248 p =
new GenParticle( CLHEP::HepLorentzVector( 0, 0, 0, weights[0] ), 99, 1);
249 p->suggest_barcode( 7 );
250 prod_vtx->add_particle_out(p);
255 p =
new GenParticle( CLHEP::HepLorentzVector( qpion[1],qpion[2],qpion[3],qpion[0]), 111, 1);
256 p->suggest_barcode( 5 );
257 prod_vtx->add_particle_out(p);
261 p =
new GenParticle( CLHEP::HepLorentzVector( qpion[1],qpion[2],qpion[3],qpion[0]), 221, 1);
262 p->suggest_barcode(5);
263 prod_vtx->add_particle_out(p);
267 p =
new GenParticle( CLHEP::HepLorentzVector( qpion[1],qpion[2],qpion[3],qpion[0]), 331, 1);
268 p->suggest_barcode(5);
269 prod_vtx->add_particle_out(p);
273 p =
new GenParticle( CLHEP::HepLorentzVector( qcj[1],qcj[2],qcj[3],qcj[0]), 10441, 1);
274 p->suggest_barcode( 5 );
275 prod_vtx->add_particle_out(p);
279 p =
new GenParticle( CLHEP::HepLorentzVector( qcj[1],qcj[2],qcj[3],qcj[0]), 20443, 1);
280 p->suggest_barcode( 5 );
281 prod_vtx->add_particle_out(p);
285 p =
new GenParticle( CLHEP::HepLorentzVector( qcj[1],qcj[2],qcj[3],qcj[0]), 445, 1);
286 p->suggest_barcode( 5 );
287 prod_vtx->add_particle_out(p);
294 if( m_finalState >= 2 && m_finalState <= 4 && m_switchNLO) {
297 p =
new GenParticle( CLHEP::HepLorentzVector(kphp[1],kphp[2],kphp[3],kphp[0]), 22, 1 );
298 p->suggest_barcode( 6 );
299 prod_vtx->add_particle_out(p);
301 if( m_nloWithWeights ) {
303 evt->weights().push_back(
weight);
306 p =
new GenParticle( CLHEP::HepLorentzVector( 0,0,0,
weight ), 99, 1);
307 p->suggest_barcode( 7 );
308 prod_vtx->add_particle_out(p);
309 }
else if(
NLOTYPE.EvtPhTyp == 0) {
310 p =
new GenParticle( CLHEP::HepLorentzVector( 0,0,0,
weight ), 98, 1);
311 p->suggest_barcode( 6 );
312 prod_vtx->add_particle_out(p);
318 if( log.level() < MSG::INFO ) {
323 SmartDataPtr<McGenEventCol> anMcCol(eventSvc(),
"/Event/Gen");
325 log << MSG::DEBUG <<
"Adding McGenEvent to existing collection" << endreq;
327 anMcCol->push_back(mcEvent);
331 mcColl->push_back(mcEvent);
332 StatusCode sc = eventSvc()->registerObject(
"/Event/Gen",mcColl);
333 if (sc != StatusCode::SUCCESS) {
334 log << MSG::ERROR <<
"Could not register McGenEvent" << endreq;
338 return StatusCode::FAILURE;
340 log << MSG::INFO <<
"McGenEventCol created " << endreq;
346 log<<MSG::DEBUG<<
"before execute() return"<<endreq;
347 return StatusCode::SUCCESS;
353 MsgStream log(
msgSvc(), name());
354 log << MSG::INFO <<
"Ekhara in finalize()" << endreq;
359 if(m_finalState == 0) {
360 double tnpfinpar[10];
361 for(
int i=0; i<10; i++) {
367 log << MSG::INFO <<
"Total number of iterations = " << tnpfinpar[0] << endreq;
368 log << MSG::INFO <<
"Number of MC trials = " << tnpfinpar[1] << endreq;
369 log << MSG::INFO <<
"ContribMax_MCloop = " << tnpfinpar[2] << endreq;
370 log << MSG::INFO <<
"MC efficiency (evt/eff.iter) = " << m_totalEvents/tnpfinpar[1] << endreq;
372 log << MSG::INFO <<
"================================" << endreq;
373 log << MSG::INFO <<
"From all weights:" << endreq;
374 double CS = tnpfinpar[3]/tnpfinpar[0];
375 double CSerr = sqrt( fabs(tnpfinpar[4]/tnpfinpar[0]-
CS*
CS) / (tnpfinpar[0]-1.) );
376 log << MSG::INFO <<
" Integral Cross Section = " <<
CS <<
" +- " << CSerr <<
" [nb]" << endreq;
377 log << MSG::INFO << endreq;
378 log << MSG::INFO <<
"From UNWEIGHTED events:" << endreq;
379 if (tnpfinpar[1] <= 0.) {
383 CS = tnpfinpar[5] * m_totalEvents / tnpfinpar[1];
384 CSerr = sqrt(
CS*(tnpfinpar[5] -
CS)) / sqrt(tnpfinpar[1]);
386 log << MSG::INFO <<
" Integral Cross Section = " <<
CS <<
" +- " << CSerr <<
" [nb]" << endreq;
387 log << MSG::INFO <<
"================================" << endreq;
388 if (tnpfinpar[7] > 0.) {
389 log << MSG::WARNING <<
"There were overshootings." << endreq;
390 log << MSG::WARNING <<
"The events, corresponding to them were ignored." << endreq;
391 log << MSG::WARNING <<
"The unweighted sample may be not reliable!" << endreq;
392 log << MSG::WARNING <<
"\nContribution from overshooted events:" << endreq;
393 sprintf(xsect,
" Integral Cross Section = %1.5E +- %1.5E [GeV^-2]",tnpfinpar[8],tnpfinpar[9]);
394 log << MSG::WARNING << xsect << endreq;
395 sprintf(xsect,
" = %1.5E +- %1.5E [nb]",tnpfinpar[8]*tnpfinpar[6],tnpfinpar[9]*tnpfinpar[6]);
396 log << MSG::WARNING << xsect << endreq;
397 log << MSG::INFO <<
"================================" << endreq;
399 }
else if(m_finalState==1) {
400 double pipifinpar[2];
401 for(
int i=0; i<2; i++) {
406 double CS = pipifinpar[0]/m_totalEvents;
407 double CSerr = sqrt((pipifinpar[1]/m_totalEvents-
CS*
CS)/(m_totalEvents-1.));
408 log << MSG::INFO <<
"================================" << endreq;
409 log << MSG::INFO <<
"Cross Section = " <<
CS <<
" +- " << CSerr <<
" [nb]" << endreq;
410 log << MSG::INFO <<
"================================" << endreq;
413 }
else if(m_finalState>1 && m_finalState<5) {
415 for(
int i=0; i<10; i++) {
420 log << MSG::INFO <<
"================================" << endreq;
421 log << MSG::INFO <<
"Events 0ph:" << endreq;
422 log << MSG::INFO <<
"-------------------------------- " << endreq;
424 log << MSG::INFO <<
"Total number of iterations = " << mfp[0] << endreq;
426 log << MSG::INFO <<
"Number of MC trials = " << mfp[1] << endreq;
427 log << MSG::INFO <<
"ContribMax_MCloop = " << mfp[2] << endreq;
428 log << MSG::INFO <<
"MC efficiency (evt/eff.iter) = " << m_totalEvents/mfp[1] << endreq;
430 log << MSG::INFO <<
"================================" << endreq;
431 log << MSG::INFO <<
"From all weights:" << endreq;
432 double CS = mfp[3]/mfp[0];
433 double CSerr = sqrt( fabs(mfp[4]/mfp[0]-
CS*
CS) / (mfp[0]-1.) );
435 double sumCSerr = CSerr*CSerr;
436 log << MSG::INFO <<
" Integral Cross Section = " <<
CS <<
" +- " << CSerr <<
" [GeV^-2]" << endreq;
437 log << MSG::INFO <<
" = " <<
CS*mfp[6] <<
" +- " << CSerr*mfp[6] <<
" [nb]" << endreq;
438 log << MSG::INFO << endreq;
440 for(
int i=0; i<10; i++) {
444 log << MSG::INFO <<
"================================" << endreq;
445 log << MSG::INFO <<
"Events 1ph:" << endreq;
446 log << MSG::INFO <<
"-------------------------------- " << endreq;
447 log << MSG::INFO <<
"Total number of iterations = " << mfp[0] << endreq;
448 log << MSG::INFO <<
"================================" << endreq;
449 log << MSG::INFO <<
"From all weights:" << endreq;
451 CSerr = sqrt( fabs(mfp[4]/mfp[0]-
CS*
CS) / (mfp[0]-1.) );
453 sumCSerr+=CSerr*CSerr;
454 log << MSG::INFO <<
" Integral Cross Section = " <<
CS <<
" +- " << CSerr <<
" [GeV^-2]" << endreq;
455 log << MSG::INFO <<
" = " <<
CS*mfp[6] <<
" +- " << CSerr*mfp[6] <<
" [nb]" << endreq;
456 log << MSG::INFO << endreq;
457 log << MSG::INFO <<
" -------------------------------- " << endreq;
458 log << MSG::INFO <<
" sigma (0ph+1ph events) = " << sumCS <<
" +- " << sqrt(sumCSerr) <<
" [GeV^-2]" << endreq;
459 log << MSG::INFO <<
" = " << sumCS*mfp[6] <<
" +- " << sqrt(sumCSerr)*mfp[6] <<
" [nb]" << endreq;
460 log << MSG::INFO <<
"================================" << endreq;
462 log << MSG::INFO <<
"From UNWEIGHTED events:" << endreq;
467 CS = mfp[5] * m_totalEvents / mfp[1];
468 CSerr = sqrt(
CS*(mfp[5] -
CS)) / sqrt(mfp[1]);
470 sprintf(xsect,
" Integral Cross Section = %1.5E +- %1.5E [GeV^-2]",
CS,CSerr);
471 log << MSG::INFO << xsect << endreq;
472 sprintf(xsect,
" = %1.5E +- %1.5E [nb]",
CS*mfp[6],CSerr*mfp[6]);
473 log << MSG::INFO << xsect << endreq;
474 log << MSG::INFO <<
"================================" << endreq;
477 log << MSG::WARNING <<
"There were overshootings." << endreq;
478 log << MSG::WARNING <<
"The events, corresponding to them were ignored." << endreq;
479 log << MSG::WARNING <<
"The unweighted sample may be not reliable!" << endreq;
480 log << MSG::WARNING <<
"\nContribution from overshooted events:" << endreq;
481 sprintf(xsect,
" Integral Cross Section = %1.5E +- %1.5E [GeV^-2]",mfp[8],mfp[9]);
482 log << MSG::WARNING << xsect << endreq;
483 sprintf(xsect,
" = %1.5E +- %1.5E [nb]",mfp[8]*mfp[6],mfp[9]*mfp[6]);
484 log << MSG::WARNING << xsect << endreq;
485 log << MSG::INFO <<
"================================" << endreq;
488 }
else if (m_finalState>4 && m_finalState<8) {
489 double chicjfinpar[3];
490 for(
int i=0; i<3; i++) {
495 double CS = chicjfinpar[1]/chicjfinpar[0];
496 double CSerr = sqrt((chicjfinpar[2]/chicjfinpar[0]-
CS*
CS)/(chicjfinpar[0]-1.));
497 log << MSG::INFO <<
"================================" << endreq;
498 sprintf(xsect,
" Cross Section = %1.5E +- %1.5E [nb]",
CS,CSerr);
499 log << MSG::INFO << xsect << endreq;
500 log << MSG::INFO <<
"================================" << endreq;
506 log << MSG::DEBUG <<
"Ekhara has terminated successfully" << endreq;
508 return StatusCode::SUCCESS;
515 MsgStream log(
msgSvc(), name());
517 log << MSG::INFO <<
"=============================================================" << endreq;
518 log << MSG::INFO <<
"This is EKHARA, Version 3.1" << endreq;
519 switch(m_finalState) {
521 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- pi0pi0" << endreq;
524 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- pi+pi-" << endreq;
527 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- pi0" << endreq;
530 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- eta" << endreq;
533 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- etaPRIME" << endreq;
536 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- Chi_c0" << endreq;
539 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- Chi_c1" << endreq;
542 log << MSG::INFO <<
"\tSimulating the process:\te+e- -> e+e- Chi_c2" << endreq;
545 log << MSG::ERROR <<
"WRONG channel ID: Process not implemented!" << endreq;
546 return StatusCode::FAILURE;
551 if ( m_finalState == 0 ) {
553 log << MSG::ERROR <<
"NLO not implemented for this Process!" << endreq;
554 return StatusCode::FAILURE;
556 if (m_twoPionAmplitudes!=4){
557 log << MSG::ERROR <<
" Neutral Pion Pairs only with full TwoPionAmplitudes == 4 ! \t You used " << m_twoPionAmplitudes << endreq;
558 return StatusCode::FAILURE;
560 if (m_twoPionPhspAlg!=1){
561 log << MSG::ERROR <<
" Neutral Pion Pairs only with full TwoPionPhaseSpaceAlg == 1 ! \t You used " << m_twoPionPhspAlg << endreq;
562 return StatusCode::FAILURE;
564 log << MSG::INFO <<
"\tPhase space generation using algorithm: " << m_twoPionPhspAlg << endreq;
565 log << MSG::INFO <<
"\tMatrix element: \t|M_s + M_t + M_2g(full)|^2" << endreq;
567 log << MSG::INFO <<
"The following conditions are applied:" << endreq;
568 log << MSG::INFO <<
"\tPion Momentum: " << m_twoPionThetaMin <<
" < Theta [deg] < " << m_twoPionThetaMax << endreq;
569 log << MSG::INFO <<
"\tMissing Momentum: " << m_twoPionMissThetaMin <<
" < Theta [deg] < " << m_twoPionMissThetaMax << endreq;
571 }
else if (m_finalState==1) {
573 log << MSG::ERROR <<
"NLO not implemented for this Process!" << endreq;
574 return StatusCode::FAILURE;
576 if (m_twoPionPhspAlg<0 || m_twoPionPhspAlg>1){
577 log << MSG::ERROR <<
" Wrong choice of phase space generation algorithm: " << m_twoPionPhspAlg << endreq;
578 return StatusCode::FAILURE;
581 log << MSG::INFO <<
"\tPhase space generation using algorithm: " << m_twoPionPhspAlg << endreq;
582 log << MSG::INFO <<
"\tMatrix element: ";
583 switch(m_twoPionAmplitudes){
585 log << MSG::INFO <<
"\t|M_s|^2" << endreq;
588 log << MSG::INFO <<
"\t|M_s + M_t|^2" << endreq;
591 log << MSG::INFO <<
"\t|M_s + M_t + M_2g(Born)|^2" << endreq;
594 log << MSG::INFO <<
"\t|M_s + M_t + M_2g(full)|^2" << endreq;
600 switch(m_twoPionFormFactor){
602 log << MSG::INFO <<
"\tUsing KS pion form factor" << endreq;
605 log << MSG::INFO <<
"\tUsing GS pion form factor" << endreq;
608 log << MSG::INFO <<
"\tUsing new GS pion form factor" << endreq;
611 log << MSG::WARNING <<
"Undefined pion form factor switch! Using new GS pion form factor instead!" << endreq;
612 m_twoPionFormFactor = 2;
616 log << MSG::INFO <<
"The following conditions are applied:" << endreq;
617 log << MSG::INFO <<
"\tPion Momentum: " << m_twoPionThetaMin <<
" < Theta [deg] < " << m_twoPionThetaMax << endreq;
618 log << MSG::INFO <<
"\tMissing Momentum: " << m_twoPionMissThetaMin <<
" < Theta [deg] < " << m_twoPionMissThetaMax << endreq;
620 }
else if ( m_finalState >= 2 && m_finalState <= 4 ) {
622 log << MSG::INFO <<
"\tWith NLO corrections: mgamma = " << m_eps_ph * 0.51099906E-3 << endreq;
623 if( m_nloWithWeights ) {
624 log << MSG::WARNING <<
"Output will contain weighted events!" << endreq;
626 log << MSG::WARNING <<
"Attention! Events will be unweighted for output!" << endreq;
629 log << MSG::INFO <<
"\tVacuum polarization included:" << endreq;
630 log << MSG::INFO <<
"\thttp://www-com.physik.hu-berlin.de/~fjeger/software.html" << endreq;
632 log << MSG::INFO <<
"\tVacuum polarization NOT included:" << endreq;
635 log << MSG::INFO <<
"\tWithout NLO corrections!" << endreq;
637 log << MSG::ERROR <<
"Vacuum polarization can ONLY be included for NLO!" << endreq;
638 return StatusCode::FAILURE;
642 log << MSG::INFO <<
"The cross section will be calculated" << endreq;
643 log << MSG::INFO <<
"\tMatrix element: ";
644 switch(m_mesonAmplitudes){
646 log << MSG::INFO <<
"\t|M_s|^2" << endreq;
647 if ( m_switchNLO==1 ) {
648 log << MSG::ERROR <<
" NLO not implemented for s-channel!" << endreq;
649 return StatusCode::FAILURE;
651 if( m_TFF_ID == 7 || m_TFF_ID == 8 ) {
652 log << MSG::WARNING <<
"TFF Models 7 and 8 were not compared to data in the only-s-channel configuration!" << endreq;
656 log << MSG::INFO <<
"\t|M_t|^2" << endreq;
659 log << MSG::INFO <<
"\t|M_s + M_t|^2" << endreq;
665 log << MSG::INFO <<
"The following conditions are applied:" << endreq;
666 log << MSG::INFO <<
"\te+ : " << m_posiThetaMin <<
" < Theta [deg] < " << m_posiThetaMax << endreq;
667 log << MSG::INFO <<
"\t " << m_posiEnergyMin <<
" < Energy [GeV] < " << m_posiEnergyMin << endreq;
668 log << MSG::INFO <<
"\te- : " << m_elecThetaMin <<
" < Theta [deg] < " << m_elecThetaMax << endreq;
669 log << MSG::INFO <<
"\t " << m_elecEnergyMin <<
" < Energy [GeV] < " << m_elecEnergyMin << endreq;
671 double cosTagAngleRad = fabs(
cos(m_taggingAngle*TMath::DegToRad()));
672 switch( m_taggingMode ){
674 log << MSG::INFO <<
"\t Generating Untagged event configuration!" << endreq;
675 log << MSG::INFO <<
"\t Accepting only events with: |cos(Theta Lepton)| > " << cosTagAngleRad <<
"!" << endreq;
678 log << MSG::INFO <<
"\t Generating Single Tagged event configuration!" << endreq;
679 log << MSG::INFO <<
"\t Accepting only events with:" << endreq;
680 log << MSG::INFO <<
"\t\t |cos(Theta e+/-)| > " << cosTagAngleRad
681 <<
" and |cos(Theta e-/+)| < " << cosTagAngleRad << endreq;
684 log << MSG::INFO <<
"\t Generating Double Tagged event configuration!" << endreq;
685 log << MSG::INFO <<
"\t Accepting only events with: |cos(Theta Lepton)| < " << cosTagAngleRad <<
"!" << endreq;
688 log << MSG::INFO <<
"\t Generating Untagged event configuration!" << endreq;
689 log << MSG::INFO <<
"\t Accepting only events with: Q^2 (Lepton)| < " << m_taggingQsquare <<
"!" << endreq;
692 log << MSG::INFO <<
"\t Generating Single Tagged event configuration!" << endreq;
693 log << MSG::INFO <<
"\t Accepting only events with:" << endreq;
694 log << MSG::INFO <<
"\t\t Q^2 (e+/-) > " << m_taggingQsquare
695 <<
" and Q^2 (e-/+) < " << m_taggingQsquare << endreq;
698 log << MSG::INFO <<
"\t Generating Double Tagged event configuration!" << endreq;
699 log << MSG::INFO <<
"\t Accepting only events with: Q^2 (Lepton) > " << m_taggingQsquare <<
"!" << endreq;
702 if( m_taggingMode>0 ) {
703 log << MSG::INFO <<
"\t Unknown tagging mode selected!" << endreq;
704 log << MSG::INFO <<
"\t Generating events without tagging configuration!" << endreq;
710 switch( m_finalState ) {
712 log << MSG::INFO <<
"\tpi0 : ";
715 log << MSG::INFO <<
"\teta : ";
718 log << MSG::INFO <<
"\teta' : ";
723 log << MSG::INFO << m_mesonThetaMin <<
" < Theta [deg] < " << m_mesonThetaMax << endreq;
724 log << MSG::INFO <<
"\t " << m_mesonEnergyMin <<
" < Energy [GeV] < " << m_mesonEnergyMin << endreq;
725 }
else if(m_finalState >= 5 && m_finalState <= 7) {
727 log << MSG::ERROR <<
"NLO not implemented for this Process!" << endreq;
728 return StatusCode::FAILURE;
730 log << MSG::INFO <<
"The following conditions are applied:" << endreq;
731 log << MSG::INFO <<
"\te+ : " << m_posiThetaMin <<
" < Theta [deg] < " << m_posiThetaMax << endreq;
732 log << MSG::INFO <<
"\t " << m_posiEnergyMin <<
" < Energy [GeV] < " << m_posiEnergyMin << endreq;
733 log << MSG::INFO <<
"\te- : " << m_elecThetaMin <<
" < Theta [deg] < " << m_elecThetaMax << endreq;
734 log << MSG::INFO <<
"\t " << m_elecEnergyMin <<
" < Energy [GeV] < " << m_elecEnergyMin << endreq;
735 switch(m_finalState) {
737 log << MSG::INFO <<
"\tchi_c0 : ";
740 log << MSG::INFO <<
"\tchi_c1 : ";
743 log << MSG::INFO <<
"\tchi_c2 : ";
748 log << MSG::INFO << m_chicjThetaMin <<
" < Theta [deg] < " << m_chicjThetaMax << endreq;
749 log << MSG::INFO <<
"\t " << m_chicjEnergyMin <<
" < Energy [GeV] < " << m_chicjEnergyMin << endreq;
752 log << MSG::INFO <<
"=============================================================" << endreq;
760 return StatusCode::SUCCESS;