Pluto v6.3.0
Loading...
Searching...
No Matches
PElementaryPlugin.cc
Go to the documentation of this file.
1
2// A plugin to activate the NN composite particles
3// and decays needed for other plugins,
4// and total cross sections for specific reactions
5//
6// Total cross sections for NN->Delta N are added from Teis et al.
7// (Ref 10)
8//
9// For the eta cross sections, the following references have been used:
10//
11// [L1] P. Moskal et al.,
12// "Near threshold production of the eta meson via the quasi-free
13// pn --> pn eta reaction"
14// PRC 79 (2009) 015208, arXiv:0807.0722 [hep-ex]
15// [L2] H. Calen et al.,
16// "Measurement of the quasifree p + n $\to$ p + n + eta reaction near
17// threshold"
18// PRC 58 (1998) 2667.
19// [L3] H. Calen et al.,
20// "Measurement of the quasifree p + n --> d + eta reaction near threshold"
21// PRL 79} (1997) 2642.
22//
23// Author: I. Froehlich
24// Written: 21.8.2008
25//
27
28
29
30#include "PDataBase.h"
31#include "PElementaryPlugin.h"
32#include "PTCrossWeight.h"
33
34
37
38PElementaryPlugin::PElementaryPlugin(const Char_t *id, const Char_t *de):
40}
41
44
46
48
49 //************** Composite particles ******************//
50
51 //mass is important for the emin in PChannel
52 if (!makeStaticData()->IsParticleValid("p + p")) {
53 makeStaticData()->AddParticle(14014, "p + p",
54 2.*makeStaticData()->GetParticleMass("p"));
55 makeStaticData()->AddAlias("p + p", "p+p");
56 }
57 if (!makeStaticData()->IsParticleValid("p + n")) {
58 makeStaticData()->AddParticle(13014, "p + n",
59 makeStaticData()->GetParticleMass("p")+
60 makeStaticData()->GetParticleMass("n"));
61 makeStaticData()->AddAlias("p + n", "p+n");
62 }
63 if (!makeStaticData()->IsParticleValid("n + p")) {
64 makeStaticData()->AddParticle(14013, "n + p",
65 makeStaticData()->GetParticleMass("p")+
66 makeStaticData()->GetParticleMass("n"));
67 makeStaticData()->AddAlias("n + p", "n+p");
68 }
69 if (!makeStaticData()->IsParticleValid("d + p")) {
70 makeStaticData()->AddParticle(14045, "d + p",
71 makeStaticData()->GetParticleMass("p")+
72 makeStaticData()->GetParticleMass("d"));
73 makeStaticData()->AddAlias("d + p", "d+p");
74 }
75 if (!makeStaticData()->IsParticleValid("p + d")) {
76 makeStaticData()->AddParticle(45014, "p + d",
77 makeStaticData()->GetParticleMass("p")+
78 makeStaticData()->GetParticleMass("d"));
79 makeStaticData()->AddAlias("p + d", "p+d");
80 }
81
82 if(!makeStaticData()->IsParticleValid("g + n")) {
83 makeStaticData()->AddParticle(13001, "g + n",
84 makeStaticData()->GetParticleMass("n"));
85 makeStaticData()->AddAlias("g + n", "g+n");
86 }
87 if(!makeStaticData()->IsParticleValid("g + p")) {
88 makeStaticData()->AddParticle(14001, "g + p",
89 makeStaticData()->GetParticleMass("p"));
90 makeStaticData()->AddAlias("g + p", "g+p");
91 }
92 if(!makeStaticData()->IsParticleValid("n + g")) {
93 makeStaticData()->AddParticle(1013, "n + g",
94 makeStaticData()->GetParticleMass("n"));
95 makeStaticData()->AddAlias("n + g", "n+g");
96 }
97 if(!makeStaticData()->IsParticleValid("p + g")) {
98 makeStaticData()->AddParticle(1014, "p + g",
99 makeStaticData()->GetParticleMass("p"));
100 makeStaticData()->AddAlias("p + g", "p+g");
101 }
102
103 //************** Composite decays ******************//
104 //* *//
105 //* Do not change the order here, otherwise
106 //* the decays_idx will be re-sorted
107 //**************************************************//
108
109 Int_t ipid[5];
110 ipid[0] = makeStaticData()->GetParticleID("p + p");
111 ipid[1] = makeStaticData()->GetParticleID("p");
112 ipid[2] = makeStaticData()->GetParticleID("D+");
113
114 //Delta(1232) production
115
116 if (makeStaticData()->GetDecayKey(ipid, 2) < 0)
117 makeStaticData()->AddDecay(-1, "p + p -> p + D+",
118 "p + p", "p,D+", 1.0 );
119 ipid[1] = makeStaticData()->GetParticleID("n");
120 ipid[2] = makeStaticData()->GetParticleID("D++");
121 if (makeStaticData()->GetDecayKey(ipid, 2) < 0)
122 makeStaticData()->AddDecay(-1, "p + p -> n + D++",
123 "p + p", "n,D++", 1.0 );
124
125 ipid[0] = makeStaticData()->GetParticleID("p + n");
126 ipid[1] = makeStaticData()->GetParticleID("n");
127 ipid[2] = makeStaticData()->GetParticleID("D+");
128 if (makeStaticData()->GetDecayKey(ipid, 2) < 0)
129 makeStaticData()->AddDecay(-1, "p + n -> n + D+",
130 "p + n", "n,D+", 1.0 );
131 ipid[1] = makeStaticData()->GetParticleID("p");
132 ipid[2] = makeStaticData()->GetParticleID("D0");
133 if (makeStaticData()->GetDecayKey(ipid, 2) < 0)
134 makeStaticData()->AddDecay(-1, "p + n -> p + D0",
135 "p + n", "p,D0", 1.0 );
136 ipid[0] = makeStaticData()->GetParticleID("n + p");
137 ipid[1] = makeStaticData()->GetParticleID("n");
138 ipid[2] = makeStaticData()->GetParticleID("D+");
139 if (makeStaticData()->GetDecayKey(ipid, 2) < 0)
140 makeStaticData()->AddDecay(-1, "n + p -> n + D+",
141 "n + p", "n,D+", 1.0 );
142 ipid[1] = makeStaticData()->GetParticleID("p");
143 ipid[2] = makeStaticData()->GetParticleID("D0");
144 if (makeStaticData()->GetDecayKey(ipid, 2) < 0)
145 makeStaticData()->AddDecay(-1, "n + p -> p + D0",
146 "n + p", "p,D0", 1.0 );
147 //This causes the BR the be equally distributed. This is a caveat
148 //since the exp_w_mean will be folded in the PChannel.
149 //Therefore it acts as an additional factor
150
151 //Eta physics:
152 ipid[0] = makeStaticData()->GetParticleID("p + p");
153 ipid[1] = makeStaticData()->GetParticleID("p");
154 ipid[2] = makeStaticData()->GetParticleID("p");
155 ipid[3] = makeStaticData()->GetParticleID("eta");
156 if (makeStaticData()->GetDecayKey(ipid, 3) < 0)
157 makeStaticData()->AddDecay(-1, "p + p -> p + p + eta",
158 "p + p", "p,p,eta", 1.0 );
159 ipid[0] = makeStaticData()->GetParticleID("n + p");
160 ipid[1] = makeStaticData()->GetParticleID("n");
161 if (makeStaticData()->GetDecayKey(ipid, 3) < 0)
162 makeStaticData()->AddDecay(-1, "n + p -> n + p + eta",
163 "n + p", "n,p,eta", 1.0 );
164 ipid[0] = makeStaticData()->GetParticleID("p + n");
165 if (makeStaticData()->GetDecayKey(ipid, 3) < 0)
166 makeStaticData()->AddDecay(-1, "p + n -> n + p + eta",
167 "p + n", "n,p,eta", 1.0 );
168
169 //pn -> d eta
170 ipid[0] = makeStaticData()->GetParticleID("p + n");
171 ipid[1] = makeStaticData()->GetParticleID("d");
172 ipid[2] = makeStaticData()->GetParticleID("eta");
173
174 if (makeStaticData()->GetDecayKey(ipid, 2) < 0)
175 makeStaticData()->AddDecay(-1, "p + n -> d + eta",
176 "p + n", "d,eta", 1.0 );
177
178 ipid[0] = makeStaticData()->GetParticleID("n + p");
179 if (makeStaticData()->GetDecayKey(ipid, 2) < 0)
180 makeStaticData()->AddDecay(-1, "n + p -> d + eta",
181 "n + p", "d,eta", 1.0 );
182
183// x=4.98953, y=0.156364
184// x=4.72892, y=0.209786
185// x=4.49976, y=0.254305
186// x=4.22567, y=0.343342
187// x=3.98303, y=0.441283
188// x=3.73141, y=0.610455
189// x=3.49326, y=0.815241
190// x=3.23714, y=1.17139
191// x=2.97204, y=1.71452
192// x=2.74737, y=2.41791
193// x=2.64852, y=2.81858
194// x=2.53169, y=3.3439
195// x=2.42834, y=3.73567
196// x=2.3879, y=3.85142
197// x=2.35645, y=3.88703
198// x=2.28456, y=3.70896
199// x=2.21716, y=2.78297
200// x=2.17223, y=1.74123
201// x=2.1228, y=0.601551
202
203
204 Double_t x[20] = {
205 2.0,
206 2.1228,
207 2.17223,
208 2.21716,
209 2.28456,
210 2.35645,
211 2.3879,
212 2.42834,
213 2.53169,
214 2.64852,
215 2.74737,
216 2.97204,
217 3.23714,
218 3.49326,
219 3.73141,
220 3.98303,
221 4.22567,
222 4.49976,
223 4.72892,
224 4.98953
225 };
226
227 Double_t y[20] = {
228 0.0,
229 0.601551,
230 1.74123,
231 2.78297,
232 3.70896,
233 3.88703,
234 3.85142,
235 3.73567,
236 3.3439,
237 2.81858,
238 2.41791,
239 1.71452,
240 1.17139,
241 0.815241,
242 0.610455,
243 0.441283,
244 0.343342,
245 0.254305,
246 0.209786,
247 0.156364
248};
249
250
251 pdmutil->AddSubGroup("tcross", "Total cross sections", "root");
252 pdmutil->SetGroup("tcross");
253
254 TGraph *delta_gra = new TGraph(20, x, y);
255
256 PTCrossWeight *delta_cross =
257 new PTCrossWeight("p + p_to_D+_p/tcross",
258 "D+ cross section in the p+p reaction", -1);
259 delta_cross->Add("p,grandparent,beam");
260 delta_cross->Add("p,grandparent,target");
261 delta_cross->Add("q,parent");
262 delta_cross->Add("p,daughter");
263 delta_cross->Add("D+,daughter");
264 delta_cross->SetCrossSection(delta_gra, kTRUE);
265 delta_cross->SetScaling((3./2.) / 1000.); //Isospin coefficient
266 //factor 1000 to convert in [b]
267 pdmutil->Add(delta_cross);
268
269 delta_cross =
270 new PTCrossWeight("p + p_to_D++_n/tcross",
271 "D++ cross section in the p+p reaction", -1);
272 delta_cross->Add("p,grandparent,beam");
273 delta_cross->Add("p,grandparent,target");
274 delta_cross->Add("q,parent");
275 delta_cross->Add("n,daughter");
276 delta_cross->Add("D++,daughter");
277 delta_cross->SetCrossSection(delta_gra,kTRUE);
278 delta_cross->SetScaling((3./2.) * 3./1000.); //Isospin coefficient
279 pdmutil->Add(delta_cross);
280
281 delta_cross =
282 new PTCrossWeight("p + n_to_D0_p/tcross",
283 "D0 cross section in the p+n reaction", -1);
284 delta_cross->Add("p,grandparent,beam");
285 delta_cross->Add("n,grandparent,target");
286 delta_cross->Add("q,parent");
287 delta_cross->Add("p,daughter");
288 delta_cross->Add("D0,daughter");
289 delta_cross->SetCrossSection(delta_gra,kTRUE);
290 delta_cross->SetScaling((3./2.) / 1000.); //Isospin coefficient
291 pdmutil->Add(delta_cross);
292
293 delta_cross =
294 new PTCrossWeight("n + p_to_D0_p/tcross",
295 "D0 cross section in the p+n reaction [clone]", -1);
296 delta_cross->Add("dummy,parent");
297 delta_cross->SetCrossSection(delta_gra,kTRUE);
298 delta_cross->SetScaling((3./2.) / 1000.); //Isospin coefficient
299 pdmutil->Add(delta_cross);
300
301 delta_cross =
302 new PTCrossWeight("p + n_to_D+_n/tcross",
303 "D+ cross section in the p+n reaction", -1);
304 delta_cross->Add("p,grandparent,beam");
305 delta_cross->Add("n,grandparent,target");
306 delta_cross->Add("q,parent");
307 delta_cross->Add("n,daughter");
308 delta_cross->Add("D+,daughter");
309 delta_cross->SetCrossSection(delta_gra,kTRUE);
310 delta_cross->SetScaling((3./2.) / 1000.); //Isospin coefficient
311 pdmutil->Add(delta_cross);
312
313 delta_cross =
314 new PTCrossWeight("n + p_to_D+_n/tcross",
315 "D+ cross section in the p+n reaction [clone]", -1);
316 delta_cross->Add("dummy,parent");
317 delta_cross->SetCrossSection(delta_gra,kTRUE);
318 delta_cross->SetScaling((3./2.) / 1000.); //Isospin coefficient
319 pdmutil->Add(delta_cross);
320
321 //pp -> pp eta case
322 //TODO: Parameterization>120MeV
323 // x=1.0574, y=0.138652
324 // x=2.32627, y=0.367414
325 // x=4.86402, y=0.840432
326 // x=9.09359, y=1.45904
327 // x=19.0331, y=2.48683
328 // x=28.5496, y=3.33745
329 // x=44.8335, y=7.77583
330 // x=56.0419, y=10.8264
331 // x=65.347, y=15.0739
332 // x=75.498, y=19.4994
333 // x=91.3589, y=29.2215
334 // x=103.202, y=43.7908
335 // x=117.371, y=62.1022
336
337 Double_t x_pp_eta[13] = {
338 0, 1.0574, 2.32627, 4.86402, 9.09359, 19.0331,
339// 28.5496,
340 44.8335, 56.0419,
341 65.347, 75.498, 91.3589, 103.202, 117.371
342 };
343
344 Double_t y_pp_eta[13] = {
345 0, 0.138652, 0.367414, 0.840432, 1.45904, 2.48683,
346// 3.33745,
347 7.77583, 10.8264,
348 15.0739, 19.4994, 29.2215, 43.7908, 62.1022
349 };
350
351 Double_t thr = makeStaticData()->GetParticleMass("p")*2 +
353 //Better is to convert to the SECONDARY_MODELS standard
354 for (int i=0; i<13; i++) {
355 x_pp_eta[i] *= 0.001; //in GeV
356 x_pp_eta[i] += thr;
357 }
358
359 TGraph *pp_eta_gra = new TGraph(13, x_pp_eta, y_pp_eta);
360
361 PTCrossWeight *pp_eta_cross =
362 new PTCrossWeight("p + p_to_p_p_eta/tcross",
363 "Eta cross section in the p+p reaction (<120 MeV)", -1);
364 pp_eta_cross->Add("p,grandparent,beam");
365 pp_eta_cross->Add("p,grandparent,target");
366 pp_eta_cross->Add("q,parent");
367 pp_eta_cross->Add("p,daughter");
368 pp_eta_cross->Add("p,daughter");
369 pp_eta_cross->Add("eta,daughter");
370 pp_eta_cross->SetCrossSection(pp_eta_gra, kFALSE);
371 pp_eta_cross->SetScaling(.000001); //convert from [ub] to [b]
372// pp_eta_cross->SetExcessEnergy(kTRUE,kTRUE); //Q in MeV
373 pdmutil->Add(pp_eta_cross);
374
375
376
377 //Now the pn -> pn eta case:
378 // x=2.74923, y=1.02883
379 // x=7.40176, y=3.79588
380 // x=12.6887, y=9.51891
381 // x=25.8004, y=20.2298
382 // x=35.7399, y=35.1202
383 // x=45.468, y=51.6716
384 // x=55.4075, y=68.0823
385 // x=63.4437, y=91.3697
386 // x=73.8061, y=124.898
387 // x=81.6308, y=139.466
388 // x=90.09, y=164.565
389 // x=98.5492, y=220.854
390 // x=108.489, y=229.127
391
392 Double_t x_pn_eta[14] = {
393 0., 2.74923, 7.40176, 12.6887,25.8004, 35.7399, 45.468, 55.4075,
394 63.4437, 73.8061, 81.6308, 90.09, 98.5492, 108.489};
395 Double_t y_pn_eta[14] = {
396 0., 1.02883, 3.79588, 9.51891, 20.2298, 35.1202, 51.6716, 68.0823,
397 91.3697, 124.898, 139.466, 164.565, 220.854, 229.127};
398
399 thr = makeStaticData()->GetParticleMass("p")+
402 //Better is to convert to the SECONDARY_MODELS standard
403
404 for (int i=0; i<14; i++) {
405 x_pn_eta[i] *= 0.001; //in GeV
406 x_pn_eta[i] += thr;
407 }
408
409
410 TGraph *pn_eta_gra = new TGraph(14, x_pn_eta, y_pn_eta);
411
412 PTCrossWeight *pn_eta_cross =
413 new PTCrossWeight("p + n_to_p_n_eta/tcross",
414 "Eta cross section in the p+n reaction (<120 MeV)", -1);
415 pn_eta_cross->Add("p,grandparent,beam");
416 pn_eta_cross->Add("n,grandparent,target");
417 pn_eta_cross->Add("q,parent");
418 pn_eta_cross->Add("p,daughter");
419 pn_eta_cross->Add("n,daughter");
420 pn_eta_cross->Add("eta,daughter");
421 pn_eta_cross->SetCrossSection(pn_eta_gra, kFALSE);
422 pn_eta_cross->SetScaling(.000001); //convert from [ub] to [b]
423// pn_eta_cross->SetExcessEnergy(kTRUE,kTRUE); //Q in MeV
424 pdmutil->Add(pn_eta_cross);
425
426 pn_eta_cross =
427 new PTCrossWeight("n + p_to_p_n_eta/tcross",
428 "Eta cross section in the p+n reaction (<120 MeV) [clone]", -1);
429 pn_eta_cross->Add("dummy,parent");
430 pn_eta_cross->SetCrossSection(pn_eta_gra, kFALSE);
431 pn_eta_cross->SetScaling(.000001); //convert from [ub] to [b]
432// pn_eta_cross->SetExcessEnergy(kTRUE,kTRUE); //Q in MeV
433 //BUGBUG: I want to have an automatic clone here....
434 pdmutil->Add(pn_eta_cross);
435
436 //Array from calen et al.
437
438 // x=0.000195955, y=21.1751
439 // x=0.00803413, y=28.9042
440 // x=0.0158723, y=39.4545
441 // x=0.0248862, y=57.7113
442 // x=0.0350758, y=61.8431
443 // x=0.0466371, y=85.8883
444 // x=0.0548672, y=98.6266
445 // x=0.0654487, y=98.6266
446 // x=0.0744626, y=92.0373
447 // x=0.0846523, y=88.9097
448 // x=0.09445, y=88.9097
449 // x=0.10268, y=92.0373
450 // x=0.113262, y=96.9363
451
452 Double_t x_d_eta[14] = {0, 0.000195955, 0.00803413, 0.0158723, 0.0248862, 0.0350758,
453 0.0466371, 0.0548672, 0.0654487, 0.0744626, 0.0846523,
454 0.09445, 0.10268, 0.113262}; //in Q [MeV]
455
456 Double_t y_d_eta[14] = {0, 21.1751, 28.9042, 39.4545, 57.7113, 61.8431, 85.8883,
457 98.6266, 98.6266, 92.0373, 88.9097, 88.9097, 92.0373, 96.9363}; //in [ub]
460 //convert in total c.m. energy
461 for (int i=0; i<14; i++) {
462 x_d_eta[i] += thr;
463 }
464
465 TGraph *d_eta_gra = new TGraph(14, x_d_eta, y_d_eta);
466 PTCrossWeight *d_eta_cross =
467 new PTCrossWeight("p + n_to_d_eta/tcross",
468 "Eta cross section in the p+n->d eta reaction (<120 MeV)", -1);
469 d_eta_cross->Add("p,grandparent,beam");
470 d_eta_cross->Add("n,grandparent,target");
471 d_eta_cross->Add("q,parent");
472 d_eta_cross->Add("d,daughter");
473 d_eta_cross->Add("eta,daughter");
474 d_eta_cross->SetCrossSection(d_eta_gra, kFALSE);
475 d_eta_cross->SetScaling(.000001); //convert from [ub] to [b]
476 pdmutil->Add(d_eta_cross);
477
478 d_eta_cross =
479 new PTCrossWeight("n + p_to_d_eta/tcross",
480 "Eta cross section in the p+n->d eta reaction (<120 MeV) [clone]", -1);
481 d_eta_cross->Add("dummy,parent");
482 d_eta_cross->SetCrossSection(d_eta_gra, kFALSE);
483 d_eta_cross->SetScaling(.000001); //convert from [ub] to [b]
484
485 pdmutil->Add(d_eta_cross);
486
487 return kTRUE;
488};
489
490
491Bool_t PElementaryPlugin::ExecCommand(const char *, Double_t) {
492 return kFALSE;
493}
494
496
497
498
ClassImp(PBeamLineSimulation) PBeamLineSimulation
PDistributionManagerUtil * makeDistributionManagerUtil()
PStaticData * makeStaticData()
int Add(PDistribution *dist)
Int_t AddSubGroup(const Char_t *id, const Char_t *de, const Char_t *sub)
void SetGroup(const Char_t *id)
Int_t Add(const Char_t *opt)
Bool_t ExecCommand(const char *command, Double_t value)
int AddDecay(int didx, const char *name, const char *parent, const char *daughters, double br)
double GetParticleMass(const int &id)
int GetParticleID(const char *id, int warn=1)
int AddParticle(int pid, const char *name, double mass)
int AddAlias(const char *old_name, const char *new_name)
void SetScaling(Double_t scal)
void SetCrossSection(TF1 *c)