156 {
158
159
160
161
162 if(m_pion<0 || m_pion>9){std::cout<<"mode index for phokhar 0~9, but you give "<<m_pion<<std::endl;abort();}
165
166 m_tagged = 0;
167 m_nm = 50000 ;
168 m_nlo = 1;
169 m_w = 0.0001;
170 m_fsr = 1;
171 m_fsrnlo = 1 ;
172 m_NarrowRes = 1 ;
173 m_FF_Kaon = 1 ;
174 m_ivac = 0;
175 m_FF_Pion = 0 ;
176 m_f0_model = 0 ;
177 m_q2min = 0.0;
178 m_q2_min_c = 0.0447 ;
179 m_q2_max_c = m_E*m_E;
180 m_gmin = 0.001;
181 m_phot1cut = 0.0;
182 m_phot2cut = 180.0;
183 m_pi1cut = 0.0 ;
184 m_pi2cut = 180.0;
185
186 if(!(m_pion==0 || m_pion==1 || m_pion==6)){m_fsr = 0; m_fsrnlo = 0 ;}
187 if( m_pion==9 ){m_nlo = 0 ;}
188
189 m_initSeed = 123456789;
197 flags_.FF_pion = m_FF_Pion;
198 flags_.f0_model = m_f0_model;
199 flags_.FF_kaon = m_FF_Kaon;
200 flags_.narr_res = m_NarrowRes;
201
202 ctes_.Sp = m_E*m_E; ;
203
205 cuts_.q2min = m_q2min;
206 cuts_.q2_min_c = m_q2_min_c;
207 cuts_.q2_max_c = m_q2_max_c;
209 cuts_.phot1cut = m_phot1cut;
210 cuts_.phot2cut = m_phot2cut;
211 cuts_.pi1cut = m_pi1cut;
212 cuts_.pi2cut = m_pi2cut;
213
215
216
217 cout << "-------------------------------------------------------------" << endl;
219 cout << " PHOKHARA 7.0 : e^+ e^- -> mu^+ mu^- gamma" << endl;
220 else if (
flags_.pion == 1)
221 cout << " PHOKHARA 7.0: e^+ e^- -> pi^+ pi^- gamma" << endl;
222 else if (
flags_.pion == 2)
223 cout << " PHOKHARA 7.0: e^+ e^- -> pi^+ pi^- 2pi^0 gamma" << endl;
224 else if (
flags_.pion == 3)
225 cout << " PHOKHARA 7.0: e^+ e^- -> 2pi^+ 2pi^- gamma" << endl;
226 else if (
flags_.pion == 4)
227 cout << " PHOKHARA 7.0: e^+ e^- -> p pbar gamma" << endl;
228 else if (
flags_.pion == 5)
229 cout << " PHOKHARA 7.0: e^+ e^- -> n nbar gamma" << endl;
230 else if (
flags_.pion == 6)
231 cout << " PHOKHARA 7.0: e^+ e^- -> K^+ K^- gamma" << endl;
232 else if (
flags_.pion == 7)
233 cout << " PHOKHARA 7.0: e^+ e^- -> K_0 K_0bar gamma" << endl;
234 else if (
flags_.pion == 8)
235 cout << " PHOKHARA 7.0: e^+ e^- -> pi^+ pi^- pi^0 gamma" << endl;
236 else if (
flags_.pion == 9) {
237 cout << "PHOKHARA 7.0 : e^+ e^- ->" << endl;
238 cout << " Lambda (-> pi^- p) Lambda bar (-> pi^+ pbar) gamma" << endl;
239 } else
240 cout << " PHOKHARA 7.0: not yet implemented" << endl;
241
242
243 cout << "--------------------------------------------------------------" << endl;
244 printf(
" %s %f %s\n",
"cms total energy = ",sqrt(
ctes_.Sp),
" GeV ");
245
246
247 if(
cuts_.gmin<0.001){
248 cerr << " minimal missing energy set too small" << endl;
249 abort();
250 }
251 printf(
" %s %f %s\n",
"minimal tagged photon energy = ",
cuts_.gmin,
" GeV ");
252 printf(
" %s %f,%f\n",
"angular cuts on tagged photon = ",
cuts_.phot1cut,
cuts_.phot2cut);
253
254
256 printf(
" %s %f,%f\n",
"angular cuts on muons = ",
cuts_.pi1cut,
cuts_.pi2cut);
257 else if (
flags_.pion == 4)
258 printf(
" %s %f,%f\n",
"angular cuts on protons = ",
cuts_.pi1cut,
cuts_.pi2cut);
259 else if (
flags_.pion == 5)
260 printf(
" %s %f,%f\n",
"angular cuts on neutrons = ",
cuts_.pi1cut,
cuts_.pi2cut);
262 printf(
" %s %f,%f\n",
"angular cuts on kaons = ",
cuts_.pi1cut,
cuts_.pi2cut);
263 else if (
flags_.pion == 9)
264 printf(
" %s %f,%f\n",
"angular cuts on pions and protons = ",
cuts_.pi1cut,
cuts_.pi2cut);
265 else
266 printf(
" %s %f,%f\n",
"angular cuts on pions = ",
cuts_.pi1cut,
cuts_.pi2cut);
268 printf(
" %s %f %s\n",
"min. muons-tagged photon inv.mass^2 = ",
cuts_.q2min,
" GeV^2");
269 else if (
flags_.pion == 4)
270 printf(
" %s %f %s\n",
"min. protons-tagged photon inv.mass^2 = ",
cuts_.q2min,
" GeV^2" );
271 else if (
flags_.pion == 5)
272 printf(
" %s %f %s\n",
"min. neutrons-tagged photon inv.mass^2 = ",
cuts_.q2min,
" GeV^2" );
274 printf(
" %s %f %s\n",
"min. kaons-tagged photon inv.mass^2 = ",
cuts_.q2min,
" GeV^2" );
275 else if (
flags_.pion == 9)
276 printf(
" %s %f %s\n",
" min. lambdas-tagged photon inv.mass^2 = ",
cuts_.q2min,
" GeV^2" );
277 else
278 printf(
" %s %f %s\n",
"min. pions-tagged photon inv.mass^2 = ",
cuts_.q2min,
" GeV^2" );
281 cos2min = -1.0;
282 cos2max = 1.0;
283 cos3min = -1.0;
284 cos3max = 1.0;
287 else if (
flags_.pion == 1)
289 else if (
flags_.pion == 2)
291 else if (
flags_.pion == 3)
293 else if (
flags_.pion == 4)
295 else if (
flags_.pion == 5)
297 else if (
flags_.pion == 6)
299 else if (
flags_.pion == 7)
301 else if (
flags_.pion == 8)
303 else if (
flags_.pion == 9)
306 if (
cuts_.q2_max_c < qqmax)
307 qqmax=
cuts_.q2_max_c;
308
309
311 qqmin =
cuts_.q2_min_c;
312 else {
313 cerr << "------------------------------" << endl;
314 cerr << " Q^2_min TOO SMALL" << endl;
315 cerr << " Q^2_min CHANGED BY PHOKHARA = " << qqmin << " GeV^2" << endl;
316 cerr << "------------------------------" << endl;
317 }
318
319 if(qqmax <= qqmin){
320 cerr << " Q^2_max to small " << endl;
321 cerr << " Q^2_max = " << qqmax << endl;
322 cerr << " Q^2_min = " << qqmin << endl;
323 abort();
324 }
325
326
328 printf(" %s %f %s\n", "minimal muon-pair invariant mass^2 = ", qqmin," GeV^2");
329 printf(" %s %f %s\n", "maximal muon-pair invariant mass^2 = ", qqmax," GeV^2");
330 }
else if (
flags_.pion == 1) {
331 printf(" %s %f %s\n", "minimal pion-pair invariant mass^2 = ", qqmin," GeV^2");
332 printf(" %s %f %s\n", "maximal pion-pair invariant mass^2 = ", qqmax," GeV^2");
333 }
else if (
flags_.pion == 4) {
334 printf(" %s %f %s\n", "minimal proton-pair invariant mass^2 = ", qqmin," GeV^2");
335 printf(" %s %f %s\n", "maximal proton-pair invariant mass^2 = ", qqmax," GeV^2");
336 }
else if (
flags_.pion == 5) {
337 printf(" %s %f %s\n", "minimal neutron-pair invariant mass^2 = ", qqmin," GeV^2");
338 printf(" %s %f %s\n", "maximal neutron-pair invariant mass^2 = ", qqmax," GeV^2");
340 printf(" %s %f %s\n", "minimal kaon-pair invariant mass^2 = ", qqmin," GeV^2");
341 printf(" %s %f %s\n", "maximal kaon-pair invariant mass^2 = ", qqmax," GeV^2");
342 }
else if(
flags_.pion == 8){
343 printf(" %s %f %s\n", "minimal three-pion invariant mass^2 = ", qqmin," GeV^2");
344 printf(" %s %f %s\n", "maximal three-pion invariant mass^2 = ", qqmax," GeV^2");
345 }
else if(
flags_.pion == 9){
346 printf(" %s %f %s\n", "minimal lambda-pair invariant mass^2 = ", qqmin," GeV^2");
347 printf(" %s %f %s\n", "maximal lambda-pair invariant mass^2 = ", qqmax," GeV^2");
348 } else {
349 printf(" %s %f %s\n", "minimal four-pion invariant mass^2 = ", qqmin," GeV^2" );
350 printf(" %s %f %s\n", "maximal four-pion invariant mass^2 = ", qqmax," GeV^2");
351 }
352
354 cout << "Born" << endl;
356 cerr << "WRONG FSRNLO flag - only fsrnlo=0 allowed for Born" << endl;
357 abort();
358 }
359 }
360
362 cerr << "WRONG NLO flag - only Born allowed for Lambdas"<< endl;
363 cerr << "If you feel that you need NLO"<< endl;
364 cerr << "please contact the authors"<< endl;
365 abort();
366 }
367
368 if (
flags_.nlo == 1) printf(
" %s %f\n",
"NLO: soft photon cutoff w = ",
cuts_.w);
370 {
371
375 cerr << "WRONG combination of FSR, FSRNLO flags" <<endl;
376 abort();
377 }
378
380 cout << "ISR only" << endl;
382 cout << "ISR+FSR" << endl;
383 else if (
flags_.fsr == 2) {
385 cout << "ISR+INT+FSR" << endl;
386 else {
387 cerr << "WRONG FSR flag: interference is included only for nlo=0" << endl;
388 abort();
389 }
390 }
391 else {
392 cerr <<
"WRONG FSR flag" <<
flags_.fsr << endl;
393 abort();
394 }
396 cout << "IFSNLO included" << endl;
397 }
398 else
399 {
401 cout << "ISR only" << endl;
402 else {
403 cerr << "FSR is implemented only for pi+pi-, mu+mu- and K+K- modes" << endl;
404 abort();
405 }
406 }
407
409 cout << "Vacuum polarization is NOT included" << endl;}
410 else if(
flags_.ivac == 1){
411 cout << "Vacuum polarization by Fred Jegerlehner (http://www-com.physik.hu-berlin.de/fjeger/alphaQEDn.uu)" << endl;}
412 else if(
flags_.ivac == 2){
413 cout << "Vacuum polarization (VP_HLMNT_v1_3nonr) by Daisuke Nomura and Thomas Teubner" << endl;}
414 else {
415 cout << "WRONG vacuum polarization switch" << endl;
416 abort();
417 }
418
419
422 cout << "Kuhn-Santamaria PionFormFactor" << endl;
423 else if(
flags_.FF_pion == 1)
424 cout << "Gounaris-Sakurai PionFormFactor old" << endl;
425 else if(
flags_.FF_pion == 2)
426 cout << "Gounaris-Sakurai PionFormFactor new" << endl;
427 else {
428 cout << "WRONG PionFormFactor switch" << endl;
429 abort();
430 }
433 cout << "f0+f0(600): K+K- model" << endl;
434 else if(
flags_.f0_model == 1)
435 cout << "f0+f0(600): \"no structure\" model" << endl;
436 else if(
flags_.f0_model == 2)
437 cout << "NO f0+f0(600)" << endl;
438 else if(
flags_.f0_model == 3)
439 cout << "only f0, KLOE: Cesare Bini-private communication" << endl;
440 else {
441 cout << "WRONG f0+f0(600) switch" << endl;
442 abort();
443 }
444 }
445 }
446
449 cout << "constrained KaonFormFactor" << endl;
450 else if(
flags_.FF_kaon == 1) {
451 cout << "unconstrained KaonFormFactor" << endl;}
452 else if(
flags_.FF_kaon == 2) {
453 cout << "Kuhn-Khodjamirian-Bruch KaonFormFactor" << endl;}
454 else{
455 cout << "WRONG KaonFormFactor switch" << endl;
456 abort();
457 }
458 }
459
462 cout << "THE NARROW RESONANCE J/PSI INCLUDED" << endl;}
463 else if(
flags_.narr_res == 2){
464 cout << "THE NARROW RESONANCE PSI(2S) INCLUDED" << endl;}
465 else if(
flags_.narr_res != 0){
466 cout << "wrong flag narr_res: only 0, 1 or 2 allowed" << endl;
467 abort();
468 }
469 }
470
471 cout << "--------------------------------------------------------------" << endl;
472
473
474
475 for(int i = 0; i<2; i++)
476 {
480 }
481
484
489
490
491
492 for(int j = 1; j <= m_nm; j++)
493 {
495 Ar[1] = Ar_r[0];
498 GEN_1PH(1,qqmin,qqmax,cos1min,cos1max,cos3min,cos3max);
499 }
500 else {
502 GEN_2PH(1,qqmin,cos1min,cos1max,cos2min,cos2max,cos3min,cos3max);
503 }
504 }
505
506
507
510 theMmax[m_pion][0]=
maxima_.Mmax[0];
511 theMmax[m_pion][1]=
maxima_.Mmax[1];
512
517
520
524 }
525
529 }
530
531
536}
#define RLXDINIT(LUXURY, SEED)