9 #include "G4ParticleDefinition.hh"
10 #include "G4ParticleTypes.hh"
11 #include "G4DecayTable.hh"
15 #ifdef PDGTOG4PARTICLE_USE_SUSY
17 #include "Sleptons/G4SElectronMinus.hh"
18 #include "Sleptons/G4SElectronPlus.hh"
19 #include "Sleptons/G4SMuonMinus.hh"
20 #include "Sleptons/G4SMuonPlus.hh"
21 #include "Sleptons/G4STauMinus.hh"
22 #include "Sleptons/G4STauPlus.hh"
24 #include "Gauginos/G4Gravitino.hh"
25 #include "Gauginos/G4Neutralino.hh"
39 declareInterface<iFatras::PDGToG4Particle>(
this);
60 static const auto s_predefinedParticles = predefinedParticles();
62 if( m_useParticles.size() == 0)
65 m_pdgG4ParticleMap.insert( s_predefinedParticles.begin(),
66 s_predefinedParticles.end());
67 ATH_MSG_INFO(
"loaded " << m_pdgG4ParticleMap.size() <<
" particles" );
71 std::vector<int>::const_iterator pdgIt = m_useParticles.begin();
72 for( ; pdgIt != m_useParticles.end(); ++pdgIt)
74 PDGG4ParticleMap::const_iterator mapIt =
75 s_predefinedParticles.find( *pdgIt);
76 if( mapIt == s_predefinedParticles.end())
79 <<
" not found in list of predefined particles, ignoring" );
83 if( m_pdgG4ParticleMap.find( *pdgIt) != m_pdgG4ParticleMap.end())
86 <<
" already loaded, ignoring" );
90 m_pdgG4ParticleMap[*pdgIt] = mapIt->second;
97 printListOfParticles();
100 return StatusCode::SUCCESS;
108 G4ParticleDefinition*
111 G4ParticleDefinition*
ret = 0;
113 PDGG4ParticleMap::const_iterator
it =
114 m_pdgG4ParticleMap.find( pdgCode);
116 if(
it != m_pdgG4ParticleMap.end())
ret =
it->second;
119 it = m_pdgG4ParticleMap.find( std::abs( pdgCode));
120 if(
it != m_pdgG4ParticleMap.end())
122 if( std::abs(
it->second->GetPDGCharge()) < 0.1)
127 <<
" " << -pdgCode <<
" exists but is charged!" );
139 std::vector<std::pair<int,std::string> >
142 std::vector<std::pair<int,std::string> >
ret;
144 for( PDGG4ParticleMap::const_iterator
it = m_pdgG4ParticleMap.begin();
145 it != m_pdgG4ParticleMap.end(); ++
it)
150 ret.push_back( std::make_pair(
it->first,
it->second->GetParticleName()));
164 std::cout <<
"****************************************"
165 <<
"****************************************"
169 << std::setw( 8) <<
"PDG Code" <<
" "
170 << std::setw(16) <<
"Particle Name" <<
" "
171 << std::setw( 8) <<
"G4 PDGID" <<
" "
172 << std::setw( 8) <<
"Mass" <<
" "
173 << std::setw(16) <<
"Width" <<
" "
174 << std::setw( 6) <<
"Charge" <<
" "
175 << std::setw( 7) <<
"#DecChn" <<
" "
178 std::cout <<
"****************************************"
179 <<
"****************************************"
182 for( PDGG4ParticleMap::const_iterator
it = m_pdgG4ParticleMap.begin();
183 it != m_pdgG4ParticleMap.end(); ++
it)
185 G4DecayTable*
dt =
it->second->GetDecayTable();
186 int nDecayChannels = 0;
187 if(
dt) nDecayChannels =
dt->entries();
188 else if( withDecayTableOnly)
continue;
191 << std::setw( 8) <<
it->first <<
" "
192 << std::setw(16) <<
it->second->GetParticleName() <<
" "
193 << std::setw( 8) <<
it->second->GetPDGEncoding() <<
" "
194 << std::setw( 8) <<
it->second->GetPDGMass() <<
" "
195 << std::setw(16) <<
it->second->GetPDGWidth() <<
" "
196 << std::setw( 6) <<
it->second->GetPDGCharge() <<
" "
197 << std::setw( 7) << nDecayChannels <<
" "
201 std::cout <<
"****************************************"
202 <<
"****************************************"
210 std::map<int,G4ParticleDefinition*>
214 std::map<int,G4ParticleDefinition*> predefinedParticles;
217 auto addParticle = [&](G4ParticleDefinition* pDef) {
218 if (pDef) predefinedParticles[pDef->GetPDGEncoding()] = pDef;
222 addParticle( G4Gamma::GammaDefinition());
225 addParticle( G4Electron::ElectronDefinition());
226 addParticle( G4NeutrinoE::NeutrinoEDefinition());
227 addParticle( G4MuonMinus::MuonMinusDefinition());
228 addParticle( G4NeutrinoMu::NeutrinoMuDefinition());
229 addParticle( G4TauMinus::TauMinusDefinition());
230 addParticle( G4NeutrinoTau::NeutrinoTauDefinition());
231 addParticle( G4Positron::PositronDefinition());
232 addParticle( G4AntiNeutrinoE::AntiNeutrinoEDefinition());
233 addParticle( G4MuonPlus::MuonPlusDefinition());
234 addParticle( G4AntiNeutrinoMu::AntiNeutrinoMuDefinition());
235 addParticle( G4TauPlus::TauPlusDefinition());
236 addParticle( G4AntiNeutrinoTau::AntiNeutrinoTauDefinition());
239 addParticle( G4PionZero::PionZeroDefinition());
240 addParticle( G4PionPlus::PionPlusDefinition());
241 addParticle( G4PionMinus::PionMinusDefinition());
244 addParticle( G4Eta::EtaDefinition());
245 addParticle( G4EtaPrime::EtaPrimeDefinition());
248 addParticle( G4KaonZeroLong::KaonZeroLongDefinition());
249 addParticle( G4KaonZeroShort::KaonZeroShortDefinition());
250 addParticle( G4KaonZero::KaonZeroDefinition());
251 addParticle( G4KaonPlus::KaonPlusDefinition());
252 addParticle( G4AntiKaonZero::AntiKaonZeroDefinition());
253 addParticle( G4KaonMinus::KaonMinusDefinition());
256 addParticle( G4DMesonPlus::DMesonPlusDefinition());
257 addParticle( G4DMesonZero::DMesonZeroDefinition());
258 addParticle( G4DsMesonPlus::DsMesonPlusDefinition());
259 addParticle( G4DMesonMinus::DMesonMinusDefinition());
260 addParticle( G4AntiDMesonZero::AntiDMesonZeroDefinition());
261 addParticle( G4DsMesonMinus::DsMesonMinusDefinition());
264 addParticle( G4BMesonZero::BMesonZeroDefinition());
265 addParticle( G4BMesonPlus::BMesonPlusDefinition());
266 addParticle( G4BsMesonZero::BsMesonZeroDefinition());
267 addParticle( G4AntiBMesonZero::AntiBMesonZeroDefinition());
268 addParticle( G4BMesonMinus::BMesonMinusDefinition());
269 addParticle( G4AntiBsMesonZero::AntiBsMesonZeroDefinition());
272 addParticle( G4JPsi::JPsiDefinition());
275 addParticle( G4Proton::ProtonDefinition());
276 addParticle( G4Neutron::NeutronDefinition());
277 addParticle( G4AntiProton::AntiProtonDefinition());
278 addParticle( G4AntiNeutron::AntiNeutronDefinition());
281 addParticle( G4Lambda::LambdaDefinition());
282 addParticle( G4SigmaPlus::SigmaPlusDefinition());
283 addParticle( G4SigmaZero::SigmaZeroDefinition());
284 addParticle( G4SigmaMinus::SigmaMinusDefinition());
285 addParticle( G4XiZero::XiZeroDefinition());
286 addParticle( G4XiMinus::XiMinusDefinition());
287 addParticle( G4OmegaMinus::OmegaMinusDefinition());
288 addParticle( G4AntiLambda::AntiLambdaDefinition());
289 addParticle( G4AntiSigmaPlus::AntiSigmaPlusDefinition());
290 addParticle( G4AntiSigmaZero::AntiSigmaZeroDefinition());
291 addParticle( G4AntiSigmaMinus::AntiSigmaMinusDefinition());
292 addParticle( G4AntiXiZero::AntiXiZeroDefinition());
293 addParticle( G4AntiXiMinus::AntiXiMinusDefinition());
294 addParticle( G4AntiOmegaMinus::AntiOmegaMinusDefinition());
297 addParticle( G4LambdacPlus::LambdacPlusDefinition());
298 addParticle( G4SigmacPlusPlus::SigmacPlusPlusDefinition());
299 addParticle( G4SigmacPlus::SigmacPlusDefinition());
300 addParticle( G4SigmacZero::SigmacZeroDefinition());
301 addParticle( G4XicPlus::XicPlusDefinition());
302 addParticle( G4XicZero::XicZeroDefinition());
303 addParticle( G4OmegacZero::OmegacZeroDefinition());
304 addParticle( G4AntiLambdacPlus::AntiLambdacPlusDefinition());
305 addParticle( G4AntiSigmacPlusPlus::AntiSigmacPlusPlusDefinition());
306 addParticle( G4AntiSigmacPlus::AntiSigmacPlusDefinition());
307 addParticle( G4AntiSigmacZero::AntiSigmacZeroDefinition());
308 addParticle( G4AntiXicPlus::AntiXicPlusDefinition());
309 addParticle( G4AntiXicZero::AntiXicZeroDefinition());
310 addParticle( G4AntiOmegacZero::AntiOmegacZeroDefinition());
312 #ifdef PDGTOG4PARTICLE_USE_SUSY
314 addParticle( G4SElectronMinus::SElectronMinusDefinition());
315 addParticle( G4SElectronPlus::SElectronPlusDefinition());
316 addParticle( G4SMuonMinus::SMuonMinusDefinition());
317 addParticle( G4SMuonPlus::SMuonPlusDefinition());
318 addParticle( G4STauMinus::STauMinusDefinition());
319 addParticle( G4STauPlus::STauPlusDefinition());
322 return predefinedParticles;