Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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"
41 #include "G4ParticleDefinition.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 {
83  encoding = G4ExcitedBaryonConstructor::GetEncoding(iIsoSpin3, idxState);
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 
120 G4DecayTable* 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 
148 G4DecayTable* 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 
225 G4DecayTable* 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 
301 G4DecayTable* 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 
377 G4DecayTable* 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 
470 const 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 
476 const 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 
482 const 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 
487 const G4int G4ExcitedDeltaConstructor::iSpin[] =
488 {
489  3, 1, 3, 1, 5,
490  1, 3, 5, 7
491 };
492 
493 const G4int G4ExcitedDeltaConstructor::iParity[] = {
494  +1, -1, -1, -1, +1,
495  +1, +1, -1, +1
496 };
497 
498 const 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