Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ExcitedXiConstructor.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: G4ExcitedXiConstructor.cc 72955 2013-08-14 14:23:14Z gcosmo $
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"
44 #include "G4VDecayChannel.hh"
45 #include "G4DecayTable.hh"
46 
48  G4ExcitedBaryonConstructor(NStates, XiIsoSpin)
49 {
50 
51 }
52 
54 {
55 }
56 
58  const G4String& parentName,
59  G4int iIso3,
60  G4int iState,
61  G4bool fAnti)
62 {
63 
64  // create decay table
65  G4DecayTable* decayTable = new G4DecayTable();
66 
67  G4double br;
68  if ( (br=bRatio[iState][XiPi]) >0.0) {
69  AddXiPiMode( decayTable, parentName, br, iIso3, fAnti);
70  }
71 
72  if ( (br=bRatio[iState][XiGamma]) >0.0) {
73  AddXiGammaMode( decayTable, parentName, br, iIso3, fAnti);
74  }
75 
76  if ( (br=bRatio[iState][LambdaK]) >0.0) {
77  AddLambdaKMode( decayTable, parentName, br, iIso3, fAnti);
78  }
79 
80  if ( (br=bRatio[iState][SigmaK]) >0.0) {
81  AddSigmaKMode( decayTable, parentName, br, iIso3, fAnti);
82  }
83 
84  return decayTable;
85 }
86 
87 G4DecayTable* G4ExcitedXiConstructor::AddXiGammaMode(
88  G4DecayTable* decayTable, const G4String& nameParent,
89  G4double br, G4int iIso3, G4bool fAnti)
90 {
91  G4VDecayChannel* mode;
92  //
93  G4String daughterH;
94  if (iIso3== +1) {
95  daughterH = "xi0";
96  } else if (iIso3==-1) {
97  daughterH = "xi-";
98  }
99  if (fAnti) daughterH = "anti_" + daughterH;
100 
101  // create decay channel [parent BR #daughters]
102  mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
103  daughterH,"gamma");
104  // add decay table
105  decayTable->Insert(mode);
106 
107  return decayTable;
108 }
109 
110 G4DecayTable* G4ExcitedXiConstructor::AddLambdaKMode(
111  G4DecayTable* decayTable, const G4String& nameParent,
112  G4double br, G4int iIso3, G4bool fAnti)
113 
114 
115 {
116  G4VDecayChannel* mode;
117 
118  G4String lambda = "lambda";
119  G4String daughterK;
120  G4double r = 0.;
121 
122  // ------------ Lambda K- ------------
123  // determine daughters
124  if (iIso3 == +1) {
125  if (!fAnti) {
126  daughterK = "kaon0";
127  } else {
128  daughterK = "anti_kaon0";
129  }
130  r = br;
131  } else if (iIso3 == -1) {
132  if (!fAnti) {
133  daughterK = "kaon-";
134  } else {
135  daughterK = "kaon+";
136  }
137  r = br;
138  }
139  if (fAnti) lambda = "anti_" + lambda;
140  if (r>0.) {
141  // create decay channel [parent BR #daughters]
142  mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
143  lambda,daughterK);
144  // add decay table
145  decayTable->Insert(mode);
146  }
147 
148  return decayTable;
149 }
150 
151 G4DecayTable* G4ExcitedXiConstructor::AddSigmaKMode(
152  G4DecayTable* decayTable, const G4String& nameParent,
153  G4double br, G4int iIso3, G4bool fAnti)
154 {
155  G4VDecayChannel* mode;
156 
157  G4String daughterH;
158  G4String daughterK;
159  G4double r = 0.;
160 
161  // ------------ Sigma K- ------------
162  // determine daughters
163  if (iIso3== +1) {
164  daughterH = "sigma+";
165  r= br/2.;
166  } else if (iIso3== -1) {
167  daughterH = "sigma0";
168  r = br/2.;
169  }
170  if (!fAnti) {
171  daughterK = "kaon-";
172  } else {
173  daughterK = "kaon+";
174  }
175  if (fAnti) daughterH = "anti_" + daughterH;
176  if (r>0.) {
177  // create decay channel [parent BR #daughters]
178  mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
179  daughterH,daughterK);
180  // add decay table
181  decayTable->Insert(mode);
182  }
183 
184  // ------------ Sigma K0 ------------
185  // determine daughters
186  if (iIso3 == +1) {
187  daughterH = "sigma0";
188  r= br/2.;
189  } else if (iIso3 == -1) {
190  daughterH = "sigma-";
191  r = br/2.;
192  }
193  if (!fAnti) {
194  daughterK = "anti_kaon0";
195  } else {
196  daughterK = "kaon0";
197  }
198  if (fAnti) daughterH = "anti_" + daughterH;
199  if (r>0.) {
200  // create decay channel [parent BR #daughters]
201  mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
202  daughterH,daughterK);
203  // add decay table
204  decayTable->Insert(mode);
205  }
206 
207  return decayTable;
208 }
209 
210 G4DecayTable* G4ExcitedXiConstructor::AddXiPiMode(
211  G4DecayTable* decayTable, const G4String& nameParent,
212  G4double br, G4int iIso3, G4bool fAnti)
213 {
214  G4VDecayChannel* mode;
215 
216  G4String daughterXi;
217  G4String daughterPi;
218  G4double r = 0.;
219 
220  // ------------ Xi pi- ------------
221  // determine daughters
222  if (iIso3== +1) {
223  r = 0.;
224  } else if (iIso3 == -1) {
225  daughterXi = "xi0";
226  r = br/2.;
227  }
228  if (!fAnti) {
229  daughterPi = "pi-";
230  } else {
231  daughterPi = "pi+";
232  }
233  if (fAnti) daughterXi = "anti_" + daughterXi;
234  if (r>0.) {
235  // create decay channel [parent BR #daughters]
236  mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
237  daughterXi,daughterPi);
238  // add decay table
239  decayTable->Insert(mode);
240  }
241  // ------------ Xi Pi0 ------------
242  // determine daughters
243  if (iIso3== +1) {
244  daughterXi = "xi0";
245  r = br/2.;
246  } else if (iIso3 == -1) {
247  daughterXi = "xi-";
248  r = br/2.;
249  }
250  daughterPi = "pi0";
251  if (fAnti) daughterXi = "anti_" + daughterXi;
252  if (r>0.) {
253  // create decay channel [parent BR #daughters]
254  mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
255  daughterXi,daughterPi);
256  // add decay table
257  decayTable->Insert(mode);
258  }
259 
260  // ------------ XI pi + ------------
261  // determine daughters
262  if (iIso3== +1) {
263  daughterXi = "xi-";
264  r = br/2.;
265  } else if (iIso3==-1) {
266  r = 0.;
267  }
268  if (!fAnti) {
269  daughterPi = "pi+";
270  } else {
271  daughterPi = "pi-";
272  }
273  if (fAnti) daughterXi = "anti_" + daughterXi;
274  if (r>0.) {
275  // create decay channel [parent BR #daughters]
276  mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
277  daughterXi,daughterPi);
278  // add decay table
279  decayTable->Insert(mode);
280  }
281 
282  return decayTable;
283 }
284 
286 {
287  G4double fm = mass[iState];
288  if ( iState==0 ) {
289  if (iso3== -1) fm = 1.5350*GeV; // xi-
290  }
291  return fm;
292 }
293 
295 {
296  G4double fw = width[iState];
297  if ( iState==0 ) {
298  if (iso3== -1) fw = 9.9*MeV; // xi-
299  }
300  return fw;
301 }
302 
303 const char* G4ExcitedXiConstructor::name[] = {
304  "xi(1530)", "xi(1690)", "xi(1820)", "xi(1950)", "xi(2030)"
305 };
306 
307 const G4double G4ExcitedXiConstructor::mass[] = {
308  1.5318*GeV, 1.690*GeV, 1.823*GeV, 1.950*GeV, 2.025*GeV
309 };
310 
311 const G4double G4ExcitedXiConstructor::width[] = {
312  9.1*MeV, 50.0*MeV, 24.0*MeV, 60.0*MeV, 20.0*MeV
313 };
314 
315 const G4int G4ExcitedXiConstructor::iSpin[] = {
316  3, 3, 3, 3, 5
317 };
318 
319 const G4int G4ExcitedXiConstructor::iParity[] = {
320  +1, +1, -1, -1, +1
321 };
322 
323 
324 const G4int G4ExcitedXiConstructor::encodingOffset[] = {
325  0, 20000, 10000, 30000, 10000
326 };
327 
329 {
330  { 0.98, 0.02, 0.0, 0.0},
331  { 0.10, 0.0, 0.70, 0.20},
332  { 0.15, 0.0, 0.70, 0.15},
333  { 0.25, 0.0, 0.50, 0.25},
334  { 0.10, 0.0, 0.20, 0.70}
335 };
336 
337 
338 
339 
340 
341 
342 
343 
344 
345 
346 
int G4int
Definition: G4Types.hh:78
virtual G4double GetMass(G4int state, G4int iso)
bool G4bool
Definition: G4Types.hh:79
virtual G4double GetWidth(G4int state, G4int iso)
void Insert(G4VDecayChannel *aChannel)
Definition: G4DecayTable.cc:60
#define fm
virtual G4DecayTable * CreateDecayTable(const G4String &name, G4int iIso3, G4int iState, G4bool fAnti=false)
double G4double
Definition: G4Types.hh:76