Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ExcitedNucleonConstructor.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29//
30// --------------------------------------------------------------
31// GEANT 4 class implementation file
32// History: first implementation, based on object model of
33// 10 oct 1998 H.Kurashige
34// ---------------------------------------------------------------
35
36
38
39#include "G4SystemOfUnits.hh"
41#include "G4ParticleTable.hh"
42#include "G4ShortLivedTable.hh"
44#include "G4VDecayChannel.hh"
45#include "G4DecayTable.hh"
46
47
49 G4ExcitedBaryonConstructor(NStates, NucleonIsoSpin)
50{
51
52}
53
55{
56}
57
59{
61 // Delta has exceptinal encoding
62 if ((idxState==1)||(idxState==6)||(idxState==8)||(idxState==9)||(idxState==12) ) {
63 encoding = GetEncodingOffset(idxState);
64 if ((iIsoSpin3==3)||(iIsoSpin3==-3)) {
65 // normal encoding
66 encoding += 1000*GetQuarkContents(0, iIsoSpin3);
67 encoding += 100*GetQuarkContents(1, iIsoSpin3);
68 encoding += 10*GetQuarkContents(2, iIsoSpin3);
69 } else if (iIsoSpin3== +1){
70 // 1st <--> 2nd quark
71 encoding += 1000*GetQuarkContents(0, iIsoSpin3);
72 encoding += 10*GetQuarkContents(1, iIsoSpin3);
73 encoding += 100*GetQuarkContents(2, iIsoSpin3);
74 } else if (iIsoSpin3== -1){
75 // 1st <--> 0th quark
76 encoding += 100*GetQuarkContents(0, iIsoSpin3);
77 encoding += 1000*GetQuarkContents(1, iIsoSpin3);
78 encoding += 10*GetQuarkContents(2, iIsoSpin3);
79 }
80 encoding += GetiSpin(idxState) +1;
81 } else {
83 }
84 return encoding;
85}
86
88 const G4String& parentName,
89 G4int iIso3,
90 G4int iState,
91 G4bool fAnti)
92{
93 // create decay table
94 G4DecayTable* decayTable = new G4DecayTable();
95
96 G4double br;
97 if ( (br=bRatio[iState][NGamma]) >0.0) {
98 AddNGammaMode( decayTable, parentName, br, iIso3, fAnti);
99 }
100
101 if ( (br=bRatio[iState][NPi]) >0.0) {
102 AddNPiMode( decayTable, parentName, br, iIso3, fAnti);
103 }
104
105 if ( (br=bRatio[iState][NEta]) >0.0) {
106 AddNEtaMode( decayTable, parentName, br, iIso3, fAnti);
107 }
108
109 if ( (br=bRatio[iState][NOmega]) >0.0) {
110 AddNOmegaMode( decayTable, parentName, br, iIso3, fAnti);
111 }
112
113 if ( (br=bRatio[iState][NRho]) >0.0) {
114 AddNRhoMode( decayTable, parentName, br, iIso3, fAnti);
115 }
116
117 if ( (br=bRatio[iState][N2Pi]) >0.0) {
118 AddN2PiMode( decayTable, parentName, br, iIso3, fAnti);
119 }
120
121 if ( (br=bRatio[iState][DeltaPi]) >0.0) {
122 AddDeltaPiMode( decayTable, parentName, br, iIso3, fAnti);
123 }
124
125 if ( (br=bRatio[iState][NStarPi]) >0.0) {
126 AddNStarPiMode( decayTable, parentName, br, iIso3, fAnti);
127 }
128
129 if ( (br=bRatio[iState][LambdaK]) >0.0) {
130 AddLambdaKMode( decayTable, parentName, br, iIso3, fAnti);
131 }
132
133 return decayTable;
134}
135
136G4DecayTable* G4ExcitedNucleonConstructor::AddNGammaMode(
137 G4DecayTable* decayTable, const G4String& nameParent,
138 G4double br, G4int iIso3, G4bool fAnti)
139{
140 G4VDecayChannel* mode;
141
142 //
143 G4String daughterN;
144 if (iIso3 == +1) {
145 daughterN = "proton";
146 } else {
147 daughterN = "neutron";
148 }
149 if (fAnti) daughterN = "anti_" + daughterN;
150
151 // create decay channel [parent BR #daughters]
152 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
153 daughterN,"gamma");
154 // add decay table
155 decayTable->Insert(mode);
156
157 return decayTable;
158}
159
160G4DecayTable* G4ExcitedNucleonConstructor::AddNPiMode(
161 G4DecayTable* decayTable, const G4String& nameParent,
162 G4double br, G4int iIso3, G4bool fAnti)
163{
164 G4VDecayChannel* mode;
165
166 G4String daughterN;
167 G4String daughterPi;
168
169 // ------------ N pi0 ------------
170 // determine daughters
171 if (iIso3 == +1) {
172 daughterN = "proton";
173 daughterPi = "pi0";
174 } else {
175 daughterN = "neutron";
176 daughterPi = "pi0";
177 }
178 if (fAnti) daughterN = "anti_" + daughterN;
179 // create decay channel [parent BR #daughters]
180 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2,
181 daughterN,daughterPi);
182 // add decay table
183 decayTable->Insert(mode);
184
185 // -------------N pi +/- --------------
186 // determine daughters
187 if (iIso3 == +1) {
188 daughterN = "neutron";
189 if (!fAnti) {
190 daughterPi = "pi+";
191 } else {
192 daughterPi = "pi-";
193 }
194 } else {
195 daughterN = "proton";
196 if (!fAnti) {
197 daughterPi = "pi-";
198 } else {
199 daughterPi = "pi+";
200 }
201 }
202 if (fAnti) daughterN = "anti_" + daughterN;
203
204 // create decay channel [parent BR #daughters]
205 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2,
206 daughterN,daughterPi);
207 // add decay table
208 decayTable->Insert(mode);
209
210 return decayTable;
211}
212
213G4DecayTable* G4ExcitedNucleonConstructor::AddNEtaMode(
214 G4DecayTable* decayTable, const G4String& nameParent,
215 G4double br, G4int iIso3, G4bool fAnti)
216{
217 G4VDecayChannel* mode;
218
219 G4String daughterN;
220
221 // ------------ N eta------------
222 // determine daughters
223 if (iIso3 == +1) {
224 daughterN = "proton";
225 } else {
226 daughterN = "neutron";
227 }
228 if (fAnti) daughterN = "anti_" + daughterN;
229 // create decay channel [parent BR #daughters]
230 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
231 daughterN, "eta");
232 // add decay table
233 decayTable->Insert(mode);
234
235 return decayTable;
236}
237
238G4DecayTable* G4ExcitedNucleonConstructor::AddNOmegaMode(
239 G4DecayTable* decayTable, const G4String& nameParent,
240 G4double br, G4int iIso3, G4bool fAnti)
241{
242 G4VDecayChannel* mode;
243
244 G4String daughterN;
245
246 // ------------ N omega------------
247 // determine daughters
248 if (iIso3 == +1) {
249 daughterN = "proton";
250 } else {
251 daughterN = "neutron";
252 }
253 if (fAnti) daughterN = "anti_" + daughterN;
254 // create decay channel [parent BR #daughters]
255 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
256 daughterN, "omega");
257 // add decay table
258 decayTable->Insert(mode);
259
260 return decayTable;
261}
262
263G4DecayTable* G4ExcitedNucleonConstructor::AddNRhoMode(
264 G4DecayTable* decayTable, const G4String& nameParent,
265 G4double br, G4int iIso3, G4bool fAnti)
266{
267 G4VDecayChannel* mode;
268
269 G4String daughterN;
270 G4String daughterRho;
271
272 // ------------ N rho0 ------------
273 // determine daughters
274 if (iIso3 == +1) {
275 daughterN = "proton";
276 daughterRho = "rho0";
277 } else {
278 daughterN = "neutron";
279 daughterRho = "rho0";
280 }
281 if (fAnti) daughterN = "anti_" + daughterN;
282 // create decay channel [parent BR #daughters]
283 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2,
284 daughterN,daughterRho);
285 // add decay table
286 decayTable->Insert(mode);
287
288 // -------------N rho+/- --------------
289 // determine daughters
290 if (iIso3 == +1) {
291 daughterN = "neutron";
292 if (!fAnti) {
293 daughterRho = "rho+";
294 } else {
295 daughterRho = "rho-";
296 }
297 } else {
298 daughterN = "proton";
299 if (!fAnti) {
300 daughterRho = "rho-";
301 } else {
302 daughterRho = "rho+";
303 }
304 }
305 if (fAnti) daughterN = "anti_" + daughterN;
306
307 // create decay channel [parent BR #daughters]
308 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2,
309 daughterN,daughterRho);
310 // add decay table
311 decayTable->Insert(mode);
312
313 return decayTable;
314}
315
316G4DecayTable* G4ExcitedNucleonConstructor::AddN2PiMode(
317 G4DecayTable* decayTable, const G4String& nameParent,
318 G4double br, G4int iIso3, G4bool fAnti)
319{
320 // Decay Modes
321 // N* --> N + pi + pi
322 // Only I=0 states are included for 2-pi system
323
324 G4VDecayChannel* mode;
325
326 G4String daughterN;
327 G4String daughterPi1;
328 G4String daughterPi2;
329
330 // -------------N pi+ pi- --------------
331 // determine daughters
332 if (iIso3 == +1) {
333 daughterN = "proton";
334 daughterPi1 = "pi+";
335 daughterPi2 = "pi-";
336 } else {
337 daughterN = "neutron";
338 daughterPi1 = "pi+";
339 daughterPi2 = "pi-";
340 }
341 if (fAnti) daughterN = "anti_" + daughterN;
342
343 // create decay channel [parent BR #daughters]
344 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 3,
345 daughterN,daughterPi1,daughterPi2);
346 // add decay table
347 decayTable->Insert(mode);
348
349 // -------------N pi0 pi0 --------------
350 // determine daughters
351 if (iIso3 == +1) {
352 daughterN = "proton";
353 daughterPi1 = "pi0";
354 daughterPi2 = "pi0";
355 } else {
356 daughterN = "neutron";
357 daughterPi1 = "pi0";
358 daughterPi2 = "pi0";
359 }
360 if (fAnti) daughterN = "anti_" + daughterN;
361
362 // create decay channel [parent BR #daughters]
363 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 3,
364 daughterN,daughterPi1,daughterPi2);
365 // add decay table
366 decayTable->Insert(mode);
367
368 return decayTable;
369}
370
371G4DecayTable* G4ExcitedNucleonConstructor::AddNStarPiMode(
372 G4DecayTable* decayTable, const G4String& nameParent,
373 G4double br, G4int iIso3, G4bool fAnti)
374{
375 G4VDecayChannel* mode;
376
377 G4String daughterN;
378 G4String daughterPi;
379
380 // ------------ N pi0 ------------
381 // determine daughters
382 if (iIso3 == +1) {
383 daughterN = "N(1440)+";
384 daughterPi = "pi0";
385 } else {
386 daughterN = "N(1440)0";
387 daughterPi = "pi0";
388 }
389 if (fAnti) daughterN = "anti_" + daughterN;
390 // create decay channel [parent BR #daughters]
391 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2,
392 daughterN,daughterPi);
393 // add decay table
394 decayTable->Insert(mode);
395
396 // -------------N pi +/- --------------
397 // determine daughters
398 if (iIso3 == +1) {
399 daughterN = "N(1440)0";
400 if (!fAnti) {
401 daughterPi = "pi+";
402 } else {
403 daughterPi = "pi-";
404 }
405 } else {
406 daughterN = "N(1440)+";
407 if (!fAnti) {
408 daughterPi = "pi-";
409 } else {
410 daughterPi = "pi+";
411 }
412 }
413 if (fAnti) daughterN = "anti_" + daughterN;
414
415 // create decay channel [parent BR #daughters]
416 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2,
417 daughterN,daughterPi);
418 // add decay table
419 decayTable->Insert(mode);
420
421 return decayTable;
422}
423
424G4DecayTable* G4ExcitedNucleonConstructor::AddDeltaPiMode(
425 G4DecayTable* decayTable, const G4String& nameParent,
426 G4double br, G4int iIso3, G4bool fAnti)
427{
428 G4VDecayChannel* mode;
429
430 G4String daughterDelta;
431 G4String daughterPi;
432 G4double r;
433
434 // ------------ Delta pi+/- ------------
435 // determine daughters
436 if (iIso3 == +1) {
437 daughterDelta = "delta0";
438 if (!fAnti) {
439 daughterPi = "pi+";
440 } else {
441 daughterPi = "pi-";
442 }
443 r = br/6.0;
444 } else {
445 daughterDelta = "delta+";
446 if (!fAnti) {
447 daughterPi = "pi-";
448 } else {
449 daughterPi = "pi+";
450 }
451 r = br/6.0;
452 }
453 if (fAnti) daughterDelta = "anti_" + daughterDelta;
454 // create decay channel [parent BR #daughters]
455 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
456 daughterDelta,daughterPi);
457 // add decay table
458 decayTable->Insert(mode);
459
460 // ------------ Delta pi+/- ------------
461 // determine daughters
462 if (iIso3 == +1) {
463 daughterDelta = "delta++";
464 if (!fAnti) {
465 daughterPi = "pi-";
466 } else {
467 daughterPi = "pi+";
468 }
469 r = br/2.0;
470 } else {
471 daughterDelta = "delta-";
472 if (!fAnti) {
473 daughterPi = "pi+";
474 } else {
475 daughterPi = "pi-";
476 }
477 r = br/2.0;
478 }
479 if (fAnti) daughterDelta = "anti_" + daughterDelta;
480 // create decay channel [parent BR #daughters]
481 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
482 daughterDelta,daughterPi);
483 // add decay table
484 decayTable->Insert(mode);
485
486 // ------------ Delta pi0 ------------
487 // determine daughters
488 if (iIso3 == +1) {
489 daughterDelta = "delta+";
490 daughterPi = "pi0";
491 r = br/3.0;
492 } else {
493 daughterDelta = "delta0";
494 daughterPi = "pi0";
495 r = br/3.0;
496 }
497 if (fAnti) daughterDelta = "anti_" + daughterDelta;
498 // create decay channel [parent BR #daughters]
499 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
500 daughterDelta,daughterPi);
501 // add decay table
502 decayTable->Insert(mode);
503
504
505 return decayTable;
506}
507
508G4DecayTable* G4ExcitedNucleonConstructor::AddLambdaKMode(
509 G4DecayTable* decayTable, const G4String& nameParent,
510 G4double br, G4int iIso3, G4bool fAnti)
511{
512 G4VDecayChannel* mode;
513
514 G4String lambda = "lambda";
515 G4String daughterK;
516
517 // ------------ N pi0 ------------
518 // determine daughters
519 if (iIso3 == +1) {
520 if (!fAnti) {
521 daughterK = "kaon+";
522 } else {
523 daughterK = "kaon-";
524 }
525 } else {
526 if (!fAnti) {
527 daughterK = "kaon0";
528 } else {
529 daughterK = "anti_kaon0";
530 }
531 }
532 if (fAnti) lambda = "anti_" + lambda;
533 // create decay channel [parent BR #daughters]
534 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
535 lambda, daughterK);
536 // add decay table
537 decayTable->Insert(mode);
538
539 return decayTable;
540}
541
542// PDG2005
543// N(2090) is renamed to N(2080)
544// but keep unchanged temporalily Apr 06
545
546const char* G4ExcitedNucleonConstructor::name[] = {
547 "N(1440)", "N(1520)", "N(1535)", "N(1650)", "N(1675)",
548 "N(1680)", "N(1700)", "N(1710)", "N(1720)", "N(1900)",
549 "N(1990)", "N(2090)", "N(2190)", "N(2220)", "N(2250)"
550};
551
552const G4double G4ExcitedNucleonConstructor::mass[] = {
553 1.440*GeV, 1.520*GeV, 1.535*GeV, 1.655*GeV, 1.675*GeV,
554 1.685*GeV, 1.700*GeV, 1.710*GeV, 1.720*GeV, 1.900*GeV,
555 1.950*GeV, 2.080*GeV, 2.190*GeV, 2.250*GeV, 2.275*GeV
556};
557
558const G4double G4ExcitedNucleonConstructor::width[] = {
559 300.0*MeV, 115.0*MeV, 150.0*MeV, 165.0*MeV, 150.0*MeV,
560 130.0*MeV, 100.0*MeV, 100.0*MeV, 200.0*MeV, 500.0*MeV,
561 555.0*MeV, 350.0*MeV, 500.0*MeV, 400.0*MeV, 500.0*MeV
562};
563
564const G4int G4ExcitedNucleonConstructor::iSpin[] = {
565 1, 3, 1, 1, 5,
566 5, 3, 1, 3, 3,
567 7, 3, 7, 9, 9
568};
569
570const G4int G4ExcitedNucleonConstructor::iParity[] = {
571 +1, -1, -1, -1, -1,
572 +1, -1, +1, +1, +1,
573 +1, -1, +1, -1, -1
574};
575
576const G4int G4ExcitedNucleonConstructor::encodingOffset[] = {
577 10000, 0, 20000, 30000, 0,
578 10000, 20000, 40000, 30000, 40000,
579 10000, 50000, 0, 0, 10000
580};
581
583{
584 { 0.0, 0.70, 0.0, 0.0, 0.0, 0.05, 0.25, 0.0, 0.0},
585 { 0.0, 0.60, 0.0, 0.0, 0.0, 0.15, 0.25, 0.0, 0.0},
586 {0.001, 0.55, 0.35, 0.0, 0.0, 0.05, 0.00, 0.05, 0.0},
587 { 0.0, 0.65, 0.05, 0.0, 0.0, 0.05, 0.10, 0.05, 0.10},
588 { 0.0, 0.45, 0.0, 0.0, 0.0, 0.00, 0.55, 0.0, 0.0},
589 { 0.0, 0.65, 0.0, 0.0, 0.0, 0.20, 0.15, 0.0, 0.0},
590 { 0.0, 0.10, 0.05, 0.0, 0.05, 0.45, 0.35, 0.0, 0.0},
591 { 0.0, 0.15, 0.20, 0.0, 0.05, 0.20, 0.20, 0.10, 0.10},
592 { 0.0, 0.15, 0.00, 0.0, 0.25, 0.45, 0.10, 0.00, 0.05},
593 { 0.0, 0.35, 0.0, 0.55, 0.05, 0.00, 0.05, 0.0, 0.0},
594 { 0.0, 0.05, 0.0, 0.0, 0.15, 0.25, 0.30, 0.15, 0.10},
595 { 0.0, 0.60, 0.05, 0.0, 0.25, 0.05, 0.05, 0.0, 0.0},
596 { 0.0, 0.35, 0.0, 0.00, 0.30, 0.15, 0.15, 0.05, 0.0},
597 { 0.0, 0.35, 0.0, 0.0, 0.25, 0.20, 0.20, 0.0, 0.0},
598 { 0.0, 0.30, 0.0, 0.00, 0.25, 0.20, 0.20, 0.05, 0.0}
599};
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
void Insert(G4VDecayChannel *aChannel)
Definition: G4DecayTable.cc:60
virtual G4int GetEncoding(G4int iIsoSpin3, G4int idxState)
virtual G4int GetEncoding(G4int iIsoSpin3, G4int idxState)
virtual G4DecayTable * CreateDecayTable(const G4String &name, G4int iIso3, G4int iState, G4bool fAnti=false)
virtual G4int GetQuarkContents(G4int, G4int)
virtual G4int GetiSpin(G4int iState)
virtual G4int GetEncodingOffset(G4int iState)
#define encoding
Definition: xmlparse.cc:588