Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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