Geant4 Cross Reference |
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 33 #include "G4ExcitedBaryonConstructor.hh" 34 35 #include "G4ExcitedBaryons.hh" 36 #include "G4ParticleDefinition.hh" 37 #include "G4ParticleTable.hh" 38 #include "G4SystemOfUnits.hh" 39 40 G4ExcitedBaryonConstructor::G4ExcitedBaryonConstructor(G4int nStates, G4int isoSpin) 41 : NumberOfStates(nStates), iIsoSpin(isoSpin), type("baryon") 42 {} 43 44 void G4ExcitedBaryonConstructor::Construct(G4int idx) 45 { 46 if (idx < 0) { 47 for (G4int state = 0; state < NumberOfStates; state += 1) { 48 ConstructParticle(state); 49 ConstructAntiParticle(state); 50 } 51 } 52 else if (idx < NumberOfStates) { 53 ConstructParticle(idx); 54 ConstructAntiParticle(idx); 55 } 56 else { 57 #ifdef G4VERBOSE 58 if (G4ParticleTable::GetParticleTable()->GetVerboseLevel() > 1) { 59 G4cerr << "G4ExcitedBaryonConstructor::Construct()"; 60 G4cerr << " illegal index os state = " << idx << G4endl; 61 } 62 #endif 63 } 64 } 65 66 void G4ExcitedBaryonConstructor::ConstructParticle(G4int idx) 67 { 68 if (!Exist(idx)) return; 69 70 // Construct Resonace particles as dynamic object 71 // Arguments for constructor are as follows 72 // name mass width charge 73 // 2*spin parity C-conjugation 74 // 2*Isospin 2*Isospin3 G-parity 75 // type lepton number baryon number PDG encoding 76 // stable lifetime decay table 77 78 G4String name; 79 G4ParticleDefinition* particle; 80 81 for (G4int iIso3 = -1 * iIsoSpin; iIso3 <= iIsoSpin; iIso3 += 2) { 82 name = GetName(iIso3, idx); 83 84 // clang-format off 85 particle = new G4ExcitedBaryons( 86 name, GetMass(idx,iIso3), GetWidth(idx,iIso3), GetCharge(iIso3), 87 GetiSpin(idx), GetiParity(idx), iConjugation, 88 iIsoSpin, iIso3, iGParity, 89 type, leptonNumber, baryonNumber, GetEncoding( iIso3,idx), 90 false, 0.0, nullptr 91 ); 92 // clang-format on 93 94 ((G4ExcitedBaryons*)(particle))->SetMultipletName(GetMultipletName(idx)); 95 particle->SetDecayTable(CreateDecayTable(name, iIso3, idx, false)); 96 } 97 } 98 99 void G4ExcitedBaryonConstructor::ConstructAntiParticle(G4int idx) 100 { 101 if (!Exist(idx)) return; 102 103 // Construct Resonace particles as dynamic object 104 // Arguments for constructor are as follows 105 // name mass width charge 106 // 2*spin parity C-conjugation 107 // 2*Isospin 2*Isospin3 G-parity 108 // type lepton number baryon number PDG encoding 109 // stable lifetime decay table 110 111 G4String name; 112 G4ParticleDefinition* particle; 113 114 for (G4int iIso3 = -1 * iIsoSpin; iIso3 <= iIsoSpin; iIso3 += 2) { 115 name = GetName(iIso3, idx); 116 name = "anti_" + name; 117 118 // clang-format off 119 particle = new G4ExcitedBaryons( 120 name, GetMass(idx,iIso3), GetWidth(idx,iIso3), -1.0*GetCharge(iIso3), 121 GetiSpin(idx), GetiParity(idx), iConjugation, 122 iIsoSpin, -1*iIso3, iGParity, 123 type, leptonNumber, 124 -1*baryonNumber, 125 -1*GetEncoding( iIso3,idx), 126 false, 0.0, nullptr 127 ); 128 // clang-format on 129 130 ((G4ExcitedBaryons*)(particle))->SetMultipletName(GetMultipletName(idx)); 131 particle->SetDecayTable(CreateDecayTable(name, iIso3, idx, true)); 132 } 133 } 134 135 G4double G4ExcitedBaryonConstructor::GetCharge(G4int iIsoSpin3) 136 { 137 G4double charge = 0.0; 138 // clang-format off 139 static const G4double quark_charge[7] = 140 { 141 0., -1./3., +2./3., -1./3., +2./3., -1./3., +2./3. 142 }; 143 // clang-format on 144 145 for (G4int idx = 0; idx < 3; idx += 1) { 146 charge += quark_charge[GetQuarkContents(idx, iIsoSpin3)] * eplus; 147 } 148 return charge; 149 } 150 151 G4int G4ExcitedBaryonConstructor::GetEncoding(G4int iIsoSpin3, G4int idxState) 152 { 153 G4int encoding = GetEncodingOffset(idxState); 154 encoding += 1000 * GetQuarkContents(0, iIsoSpin3); 155 encoding += 100 * GetQuarkContents(1, iIsoSpin3); 156 encoding += 10 * GetQuarkContents(2, iIsoSpin3); 157 if (GetiSpin(idxState) < 9) { 158 encoding += GetiSpin(idxState) + 1; 159 } 160 else { 161 encoding += (GetiSpin(idxState) + 1) * 10000000; 162 } 163 return encoding; 164 } 165