Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ExcitedDeltaConstructor.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//
33// History: first implementation, based on object model of
34// 10 oct 1998 H.Kurashige
35// ---------------------------------------------------------------
36
37
39
40#include "G4SystemOfUnits.hh"
42#include "G4ParticleTable.hh"
43#include "G4ShortLivedTable.hh"
45#include "G4VDecayChannel.hh"
46#include "G4DecayTable.hh"
47
48
50 G4ExcitedBaryonConstructor(NStates, DeltaIsoSpin)
51{
52
53}
54
56{
57}
58
60{
62 // Delta has exceptinal encoding
63 if ((idxState==1)||(idxState==3)||(idxState==4)||(idxState==5)||(idxState==7)) {
64 encoding = GetEncodingOffset(idxState);
65 if ((iIsoSpin3==3)||(iIsoSpin3==-3)) {
66 // normal encoding
67 encoding += 1000*GetQuarkContents(0, iIsoSpin3);
68 encoding += 100*GetQuarkContents(1, iIsoSpin3);
69 encoding += 10*GetQuarkContents(2, iIsoSpin3);
70 } else if (iIsoSpin3== +1){
71 // 1st <--> 2nd quark
72 encoding += 1000*GetQuarkContents(0, iIsoSpin3);
73 encoding += 10*GetQuarkContents(1, iIsoSpin3);
74 encoding += 100*GetQuarkContents(2, iIsoSpin3);
75 } else if (iIsoSpin3== -1){
76 // 1st <--> 0th quark
77 encoding += 100*GetQuarkContents(0, iIsoSpin3);
78 encoding += 1000*GetQuarkContents(1, iIsoSpin3);
79 encoding += 10*GetQuarkContents(2, iIsoSpin3);
80 }
81 encoding += GetiSpin(idxState) +1;
82 } else {
84 }
85 return encoding;
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][NRho]) >0.0) {
106 AddNRhoMode( decayTable, parentName, br, iIso3, fAnti);
107 }
108
109 if ( (br=bRatio[iState][DeltaPi]) >0.0) {
110 AddDeltaPiMode( decayTable, parentName, br, iIso3, fAnti);
111 }
112
113 if ( (br=bRatio[iState][NStarPi]) >0.0) {
114 AddNStarPiMode( decayTable, parentName, br, iIso3, fAnti);
115 }
116
117 return decayTable;
118}
119
120G4DecayTable* G4ExcitedDeltaConstructor::AddNGammaMode(
121 G4DecayTable* decayTable, const G4String& nameParent,
122 G4double br, G4int iIso3, G4bool fAnti)
123{
124 G4VDecayChannel* mode;
125
126 //
127 G4String daughterN;
128 if (iIso3 == +1) {
129 daughterN = "proton";
130 } else if (iIso3 == -1) {
131 daughterN = "neutron";
132 } else {
133 // can not decay into N+gamma
134 return decayTable;
135 }
136
137 if (fAnti) daughterN = "anti_" + daughterN;
138
139 // create decay channel [parent BR #daughters]
140 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
141 daughterN,"gamma");
142 // add decay table
143 decayTable->Insert(mode);
144
145 return decayTable;
146}
147
148G4DecayTable* G4ExcitedDeltaConstructor::AddNPiMode(
149 G4DecayTable* decayTable, const G4String& nameParent,
150 G4double br, G4int iIso3, G4bool fAnti)
151{
152 G4VDecayChannel* mode;
153
154 G4String daughterN;
155 G4String daughterPi;
156 G4double r = 0.;
157
158 // ------------ N pi0 ------------
159 // determine daughters
160 if ((iIso3 == +1)||(iIso3 == -1)) {
161 if (iIso3 == +1) {
162 daughterN = "proton";
163 daughterPi = "pi0";
164 r = br*2./3.;
165 } else if (iIso3 == -1) {
166 daughterN = "neutron";
167 daughterPi = "pi0";
168 r = br/3.;
169 }
170 if (fAnti) daughterN = "anti_" + daughterN;
171 // create decay channel [parent BR #daughters]
172 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
173 daughterN,daughterPi);
174 // add decay table
175 decayTable->Insert(mode);
176 }
177
178 // -------------N pi +/- --------------
179 // determine daughters
180 if (iIso3 == +3) {
181 daughterN = "proton";
182 if (!fAnti) {
183 daughterPi = "pi+";
184 } else {
185 daughterPi = "pi-";
186 }
187 r = br;
188 } else if (iIso3 == +1) {
189 daughterN = "neutron";
190 if (!fAnti) {
191 daughterPi = "pi+";
192 } else {
193 daughterPi = "pi-";
194 }
195 r = br/3.;
196 } else if (iIso3 == -1) {
197 daughterN = "proton";
198 if (!fAnti) {
199 daughterPi = "pi-";
200 } else {
201 daughterPi = "pi+";
202 }
203 r = br*2./3.;
204 } else if (iIso3 == -3) {
205 daughterN = "neutron";
206 if (!fAnti) {
207 daughterPi = "pi-";
208 } else {
209 daughterPi = "pi+";
210 }
211 r = br;
212 }
213 if (fAnti) daughterN = "anti_" + daughterN;
214
215 // create decay channel [parent BR #daughters]
216 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
217 daughterN,daughterPi);
218 // add decay table
219 decayTable->Insert(mode);
220
221 return decayTable;
222}
223
224
225G4DecayTable* G4ExcitedDeltaConstructor::AddNRhoMode(
226 G4DecayTable* decayTable, const G4String& nameParent,
227 G4double br, G4int iIso3, G4bool fAnti)
228{
229 G4VDecayChannel* mode;
230
231 G4String daughterN;
232 G4String daughterRho;
233 G4double r = 0.;
234
235 // ------------ N Rho0 ------------
236 // determine daughters
237 if ((iIso3 == +1)||(iIso3 == -1)) {
238 if (iIso3 == +1) {
239 daughterN = "proton";
240 daughterRho = "rho0";
241 r = br*2./3.;
242 } else if (iIso3 == -1) {
243 daughterN = "neutron";
244 daughterRho = "rho0";
245 r = br/3.;
246 }
247 if (fAnti) daughterN = "anti_" + daughterN;
248 // create decay channel [parent BR #daughters]
249 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
250 daughterN,daughterRho);
251 // add decay table
252 decayTable->Insert(mode);
253 }
254
255 // -------------N Rho +/- --------------
256 // determine daughters
257 if (iIso3 == +3) {
258 daughterN = "proton";
259 if (!fAnti) {
260 daughterRho = "rho+";
261 } else {
262 daughterRho = "rho-";
263 }
264 r = br;
265 } else if (iIso3 == +1) {
266 daughterN = "neutron";
267 if (!fAnti) {
268 daughterRho = "rho+";
269 } else {
270 daughterRho = "rho-";
271 }
272 r = br/3.;
273 } else if (iIso3 == -1) {
274 daughterN = "proton";
275 if (!fAnti) {
276 daughterRho = "rho-";
277 } else {
278 daughterRho = "rho+";
279 }
280 r = br*2./3.;
281 } else if (iIso3 == -3) {
282 daughterN = "neutron";
283 if (!fAnti) {
284 daughterRho = "rho-";
285 } else {
286 daughterRho = "rho+";
287 }
288 r = br;
289 }
290 if (fAnti) daughterN = "anti_" + daughterN;
291
292 // create decay channel [parent BR #daughters]
293 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
294 daughterN,daughterRho);
295 // add decay table
296 decayTable->Insert(mode);
297
298 return decayTable;
299}
300
301G4DecayTable* G4ExcitedDeltaConstructor::AddNStarPiMode(
302 G4DecayTable* decayTable, const G4String& nameParent,
303 G4double br, G4int iIso3, G4bool fAnti)
304{
305 G4VDecayChannel* mode;
306
307 G4String daughterN;
308 G4String daughterPi;
309 G4double r = 0.;
310
311 // ------------ N pi0 ------------
312 // determine daughters
313 if ((iIso3 == +1)||(iIso3 == -1)) {
314 if (iIso3 == +1) {
315 daughterN = "N(1440)+";
316 daughterPi = "pi0";
317 r = br*2./3.;
318 } else if (iIso3 == -1) {
319 daughterN = "N(1440)0";
320 daughterPi = "pi0";
321 r = br/3.;
322 }
323 if (fAnti) daughterN = "anti_" + daughterN;
324 // create decay channel [parent BR #daughters]
325 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
326 daughterN,daughterPi);
327 // add decay table
328 decayTable->Insert(mode);
329 }
330
331 // -------------N pi +/- --------------
332 // determine daughters
333 if (iIso3 == +3) {
334 daughterN = "N(1440)+";
335 if (!fAnti) {
336 daughterPi = "pi+";
337 } else {
338 daughterPi = "pi-";
339 }
340 r = br;
341 } else if (iIso3 == +1) {
342 daughterN = "N(1440)0";
343 if (!fAnti) {
344 daughterPi = "pi+";
345 } else {
346 daughterPi = "pi-";
347 }
348 r = br/3.;
349 } else if (iIso3 == -1) {
350 daughterN = "N(1440)+";
351 if (!fAnti) {
352 daughterPi = "pi-";
353 } else {
354 daughterPi = "pi+";
355 }
356 r = br*2./3.;
357 } else if (iIso3 == -3) {
358 daughterN = "N(1440)0";
359 if (!fAnti) {
360 daughterPi = "pi-";
361 } else {
362 daughterPi = "pi+";
363 }
364 r = br;
365 }
366 if (fAnti) daughterN = "anti_" + daughterN;
367
368 // create decay channel [parent BR #daughters]
369 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
370 daughterN,daughterPi);
371 // add decay table
372 decayTable->Insert(mode);
373
374 return decayTable;
375}
376
377G4DecayTable* G4ExcitedDeltaConstructor::AddDeltaPiMode(
378 G4DecayTable* decayTable, const G4String& nameParent,
379 G4double br, G4int iIso3, G4bool fAnti)
380{
381 G4VDecayChannel* mode;
382
383 G4String daughterDelta;
384 G4String daughterPi;
385 G4double r;
386
387 // ------------ Delta pi +------------
388 // determine daughters
389 if (iIso3 == +3) {
390 daughterDelta = "delta+";
391 r = br*0.4;
392 } else if (iIso3 == +1) {
393 daughterDelta = "delta0";
394 r = br*8./15.0;
395 } else if (iIso3 == -1) {
396 daughterDelta = "delta-";
397 r = br*6./15.;
398 } else {
399 r = 0.;
400 }
401 if (!fAnti) {
402 daughterPi = "pi+";
403 } else {
404 daughterPi = "pi-";
405 }
406 if (fAnti) daughterDelta = "anti_" + daughterDelta;
407 if (r>0.0) {
408 // create decay channel [parent BR #daughters]
409 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
410 daughterDelta,daughterPi);
411 // add decay table
412 decayTable->Insert(mode);
413 }
414
415 // ------------ Delta pi0 ------------
416 // determine daughters
417 if (iIso3 == +3) {
418 daughterDelta = "delta++";
419 r = br*0.6;
420 } else if (iIso3 == +1) {
421 daughterDelta = "delta+";
422 r = br*1./15.0;
423 } else if (iIso3 == -1) {
424 daughterDelta = "delta0";
425 r = br*1./15.;
426 } else {
427 daughterDelta = "delta-";
428 r = br*0.6;
429 }
430 daughterPi = "pi0";
431 if (fAnti) daughterDelta = "anti_" + daughterDelta;
432
433 // create decay channel [parent BR #daughters]
434 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
435 daughterDelta,daughterPi);
436 // add decay table
437 decayTable->Insert(mode);
438
439 // ------------ Delta pi - -------------
440 // determine daughters
441 if (iIso3 == +3) {
442 r= 0.;
443 } else if (iIso3 == +1) {
444 daughterDelta = "delta++";
445 r = br*6./15.0;
446 } else if (iIso3 == -1) {
447 daughterDelta = "delta+";
448 r = br*8./15.;
449 } else {
450 daughterDelta = "delta0";
451 r = br*0.4;
452 }
453 if (!fAnti) {
454 daughterPi = "pi-";
455 } else {
456 daughterPi = "pi+";
457 }
458 if (fAnti) daughterDelta = "anti_" + daughterDelta;
459 if (r>0.0) {
460 // create decay channel [parent BR #daughters]
461 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
462 daughterDelta,daughterPi);
463 // add decay table
464 decayTable->Insert(mode);
465 }
466
467 return decayTable;
468}
469
470const char* G4ExcitedDeltaConstructor::name[] =
471{
472 "delta(1600)", "delta(1620)", "delta(1700)", "delta(1900)", "delta(1905)",
473 "delta(1910)", "delta(1920)", "delta(1930)", "delta(1950)"
474};
475
476const G4double G4ExcitedDeltaConstructor::mass[] =
477{
478 1.600*GeV, 1.630*GeV, 1.700*GeV, 1.900*GeV, 1.890*GeV,
479 1.910*GeV, 1.920*GeV, 1.960*GeV, 1.930*GeV
480};
481
482const G4double G4ExcitedDeltaConstructor::width[] = {
483 350.0*MeV, 145.0*MeV, 300.0*MeV, 200.0*MeV, 330.0*MeV,
484 250.0*MeV, 200.0*MeV, 360.0*MeV, 280.0*MeV
485};
486
487const G4int G4ExcitedDeltaConstructor::iSpin[] =
488{
489 3, 1, 3, 1, 5,
490 1, 3, 5, 7
491};
492
493const G4int G4ExcitedDeltaConstructor::iParity[] = {
494 +1, -1, -1, -1, +1,
495 +1, +1, -1, +1
496};
497
498const G4int G4ExcitedDeltaConstructor::encodingOffset[] = {
499 30000, 0, 10000, 10000, 0,
500 20000, 20000, 10000, 0
501};
502
504{
505// NGamma Npi NRho DeltaPi N*Pi
506 { 0.0, 0.15, 0.0, 0.55, 0.30 },
507 { 0.0, 0.25, 0.0, 0.60, 0.15 },
508 { 0.0, 0.20, 0.10, 0.55, 0.15 },
509 { 0.0, 0.30, 0.15, 0.30, 0.25 },
510 { 0.0, 0.20, 0.60, 0.10, 0.10 },
511 { 0.0, 0.35, 0.40, 0.15, 0.10 },
512 { 0.0, 0.15, 0.30, 0.30, 0.25 },
513 { 0.0, 0.20, 0.25, 0.25, 0.30 },
514 { 0.01, 0.44, 0.15, 0.20, 0.20 }
515};
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
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 GetQuarkContents(G4int, G4int)
virtual G4int GetEncoding(G4int iIsoSpin3, G4int idxState)
virtual G4DecayTable * CreateDecayTable(const G4String &name, G4int iIso3, G4int iState, G4bool fAnti=false)
virtual G4int GetEncodingOffset(G4int iState)
virtual G4int GetiSpin(G4int iState)
#define encoding
Definition: xmlparse.cc:588