Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/particles/shortlived/src/G4ExcitedXiConstructor.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 //  GEANT 4 class implementation file
 28 //
 29 //      History: first implementation, based on object model of
 30 //      10 oct 1998  H.Kurashige
 31 //
 32 //      Update mass and width following PDG 2023
 33 //        4 nov 2023 S.Okada
 34 // ---------------------------------------------------------------
 35 
 36 #include "G4ExcitedXiConstructor.hh"
 37 
 38 #include "G4DecayTable.hh"
 39 #include "G4PhaseSpaceDecayChannel.hh"
 40 #include "G4SystemOfUnits.hh"
 41 #include "G4VDecayChannel.hh"
 42 
 43 G4ExcitedXiConstructor::G4ExcitedXiConstructor() : G4ExcitedBaryonConstructor(NStates, XiIsoSpin) {}
 44 
 45 G4DecayTable* G4ExcitedXiConstructor::CreateDecayTable(const G4String& parentName, G4int iIso3,
 46                                                        G4int iState, G4bool fAnti)
 47 {
 48   // create decay table
 49   auto decayTable = new G4DecayTable();
 50 
 51   G4double br;
 52   if ((br = bRatio[iState][XiPi]) > 0.0) {
 53     AddXiPiMode(decayTable, parentName, br, iIso3, fAnti);
 54   }
 55 
 56   if ((br = bRatio[iState][XiGamma]) > 0.0) {
 57     AddXiGammaMode(decayTable, parentName, br, iIso3, fAnti);
 58   }
 59 
 60   if ((br = bRatio[iState][LambdaK]) > 0.0) {
 61     AddLambdaKMode(decayTable, parentName, br, iIso3, fAnti);
 62   }
 63 
 64   if ((br = bRatio[iState][SigmaK]) > 0.0) {
 65     AddSigmaKMode(decayTable, parentName, br, iIso3, fAnti);
 66   }
 67 
 68   return decayTable;
 69 }
 70 
 71 G4DecayTable* G4ExcitedXiConstructor::AddXiGammaMode(G4DecayTable* decayTable,
 72                                                      const G4String& nameParent, G4double br,
 73                                                      G4int iIso3, G4bool fAnti)
 74 {
 75   G4VDecayChannel* mode;
 76   G4String daughterH;
 77   if (iIso3 == +1) {
 78     daughterH = "xi0";
 79   }
 80   else if (iIso3 == -1) {
 81     daughterH = "xi-";
 82   }
 83   if (fAnti) daughterH = "anti_" + daughterH;
 84 
 85   // create decay channel  [parent    BR     #daughters]
 86   mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, daughterH, "gamma");
 87   // add decay table
 88   decayTable->Insert(mode);
 89 
 90   return decayTable;
 91 }
 92 
 93 G4DecayTable* G4ExcitedXiConstructor::AddLambdaKMode(G4DecayTable* decayTable,
 94                                                      const G4String& nameParent, G4double br,
 95                                                      G4int iIso3, G4bool fAnti)
 96 
 97 {
 98   G4VDecayChannel* mode;
 99 
100   G4String lambda = "lambda";
101   G4String daughterK;
102   G4double r = 0.;
103 
104   // ------------ Lambda K- ------------
105   // determine daughters
106   if (iIso3 == +1) {
107     if (!fAnti) {
108       daughterK = "kaon0";
109     }
110     else {
111       daughterK = "anti_kaon0";
112     }
113     r = br;
114   }
115   else if (iIso3 == -1) {
116     if (!fAnti) {
117       daughterK = "kaon-";
118     }
119     else {
120       daughterK = "kaon+";
121     }
122     r = br;
123   }
124   if (fAnti) lambda = "anti_" + lambda;
125   if (r > 0.) {
126     // create decay channel  [parent    BR     #daughters]
127     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, lambda, daughterK);
128     // add decay table
129     decayTable->Insert(mode);
130   }
131 
132   return decayTable;
133 }
134 
135 G4DecayTable* G4ExcitedXiConstructor::AddSigmaKMode(G4DecayTable* decayTable,
136                                                     const G4String& nameParent, G4double br,
137                                                     G4int iIso3, G4bool fAnti)
138 {
139   G4VDecayChannel* mode;
140 
141   G4String daughterH;
142   G4String daughterK;
143   G4double r = 0.;
144 
145   // ------------ Sigma K- ------------
146   // determine daughters
147   if (iIso3 == +1) {
148     daughterH = "sigma+";
149     r = br / 2.;
150   }
151   else if (iIso3 == -1) {
152     daughterH = "sigma0";
153     r = br / 2.;
154   }
155   if (!fAnti) {
156     daughterK = "kaon-";
157   }
158   else {
159     daughterK = "kaon+";
160   }
161   if (fAnti) daughterH = "anti_" + daughterH;
162   if (r > 0.) {
163     // create decay channel  [parent    BR     #daughters]
164     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterH, daughterK);
165     // add decay table
166     decayTable->Insert(mode);
167   }
168 
169   // ------------ Sigma K0 ------------
170   // determine daughters
171   if (iIso3 == +1) {
172     daughterH = "sigma0";
173     r = br / 2.;
174   }
175   else if (iIso3 == -1) {
176     daughterH = "sigma-";
177     r = br / 2.;
178   }
179   if (!fAnti) {
180     daughterK = "anti_kaon0";
181   }
182   else {
183     daughterK = "kaon0";
184   }
185   if (fAnti) daughterH = "anti_" + daughterH;
186   if (r > 0.) {
187     // create decay channel  [parent    BR     #daughters]
188     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterH, daughterK);
189     // add decay table
190     decayTable->Insert(mode);
191   }
192 
193   return decayTable;
194 }
195 
196 G4DecayTable* G4ExcitedXiConstructor::AddXiPiMode(G4DecayTable* decayTable,
197                                                   const G4String& nameParent, G4double br,
198                                                   G4int iIso3, G4bool fAnti)
199 {
200   G4VDecayChannel* mode;
201 
202   G4String daughterXi;
203   G4String daughterPi;
204   G4double r = 0.;
205 
206   // ------------ Xi pi-  ------------
207   // determine daughters
208   if (iIso3 == +1) {
209     r = 0.;
210   }
211   else if (iIso3 == -1) {
212     daughterXi = "xi0";
213     r = br / 2.;
214   }
215   if (!fAnti) {
216     daughterPi = "pi-";
217   }
218   else {
219     daughterPi = "pi+";
220   }
221   if (fAnti) daughterXi = "anti_" + daughterXi;
222   if (r > 0.) {
223     // create decay channel  [parent    BR     #daughters]
224     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi);
225     // add decay table
226     decayTable->Insert(mode);
227   }
228   // ------------ Xi Pi0 ------------
229   // determine daughters
230   if (iIso3 == +1) {
231     daughterXi = "xi0";
232     r = br / 2.;
233   }
234   else if (iIso3 == -1) {
235     daughterXi = "xi-";
236     r = br / 2.;
237   }
238   daughterPi = "pi0";
239   if (fAnti) daughterXi = "anti_" + daughterXi;
240   if (r > 0.) {
241     // create decay channel  [parent    BR     #daughters]
242     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi);
243     // add decay table
244     decayTable->Insert(mode);
245   }
246 
247   // ------------ XI pi + ------------
248   // determine daughters
249   if (iIso3 == +1) {
250     daughterXi = "xi-";
251     r = br / 2.;
252   }
253   else if (iIso3 == -1) {
254     r = 0.;
255   }
256   if (!fAnti) {
257     daughterPi = "pi+";
258   }
259   else {
260     daughterPi = "pi-";
261   }
262   if (fAnti) daughterXi = "anti_" + daughterXi;
263   if (r > 0.) {
264     // create decay channel  [parent    BR     #daughters]
265     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi);
266     // add decay table
267     decayTable->Insert(mode);
268   }
269 
270   return decayTable;
271 }
272 
273 G4double G4ExcitedXiConstructor::GetMass(G4int iState, G4int iso3)
274 {
275   G4double fm = mass[iState];
276   if (iState == 0) {
277     if (iso3 == -1) fm = 1.5350 * GeV;  // xi-
278   }
279   return fm;
280 }
281 
282 G4double G4ExcitedXiConstructor::GetWidth(G4int iState, G4int iso3)
283 {
284   G4double fw = width[iState];
285   if (iState == 0) {
286     if (iso3 == -1) fw = 9.9 * MeV;  // xi-
287   }
288   return fw;
289 }
290 
291 // clang-format off
292 
293 const char* G4ExcitedXiConstructor::name[] = {
294    "xi(1530)", "xi(1690)", "xi(1820)", "xi(1950)", "xi(2030)"
295 };
296 
297 const G4double G4ExcitedXiConstructor::mass[] = {
298  1.5318*GeV, 1.690*GeV, 1.823*GeV, 1.950*GeV,  2.025*GeV
299 };
300 
301 const G4double G4ExcitedXiConstructor::width[] = {
302     9.1*MeV,  20.0*MeV,  24.0*MeV,  60.0*MeV,  20.0*MeV
303 };
304 
305 const G4int G4ExcitedXiConstructor::iSpin[] = {
306     3,   3,   3,   3,   5
307 };
308 
309 const G4int G4ExcitedXiConstructor::iParity[] = {
310    +1,  +1,   -1,  -1,  +1
311 };
312 
313 
314 const G4int G4ExcitedXiConstructor::encodingOffset[] = {
315       0, 20000, 10000, 30000, 10000
316 };
317 
318 const G4double G4ExcitedXiConstructor::bRatio[ G4ExcitedXiConstructor::NStates ][ G4ExcitedXiConstructor::NumberOfDecayModes] =
319 {
320    {  0.98, 0.02,  0.0,  0.0},
321    {  0.10,  0.0, 0.70, 0.20},
322    {  0.15,  0.0, 0.70, 0.15},
323    {  0.25,  0.0, 0.50, 0.25},
324    {  0.10,  0.0, 0.20, 0.70}
325 };
326