Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:58:31

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 // Defines enums to map G4InuclElementaryParticle type codes to human
0028 // readable names.  Meant to replace similar local enums scattered through
0029 // the code.
0030 //
0031 // 20101029  M. Kelsey -- Move antinucleons to 50-series, add deuteron
0032 // 20111007  M. Kelsey -- Change photon code to 9, for use in initial states
0033 // 20130508  D. Wright -- Add leptons and electroweak bosons
0034 // 20130627  M. Kelsey -- Add functions to convert enum to strings for printing
0035 // 20130702  M. Kelsey -- Add type classifiers ported from G4InuclElemPart
0036 
0037 #ifndef G4INUCL_PARTICLE_NAMES_HH
0038 #define G4INUCL_PARTICLE_NAMES_HH
0039 
0040 #include "globals.hh"
0041 
0042 namespace G4InuclParticleNames {
0043   enum Long { nuclei=0, proton=1, neutron=2,
0044           pionPlus=3, pionMinus=5, pionZero=7, photon=9,
0045           kaonPlus=11, kaonMinus=13, kaonZero=15, kaonZeroBar=17, 
0046           lambda=21, sigmaPlus=23, sigmaZero=25, sigmaMinus=27, 
0047           xiZero=29, xiMinus=31, omegaMinus=33, 
0048           deuteron=41, triton=43, He3=45, alpha=47,
0049           antiProton=51, antiNeutron=53,
0050           antiDeuteron=61, antiTriton=63, antiHe3=65, antiAlpha=67,
0051           diproton=111, unboundPN=112, dineutron=122,
0052               electronNu=-1, muonNu=-3, tauNu=-5,
0053               antiElectronNu=-7, antiMuonNu=-9, antiTauNu=-11,
0054               WMinus=-13, WPlus=-15, Zzero=-17,
0055               electron=-21, muonMinus=-23, tauMinus=-25,
0056               positron=-27, muonPlus=-29, tauPlus=-31};
0057 
0058   // NOTE:  "km" cannot be used as conflicts with "kilometers" unit!
0059   enum Short { nuc=nuclei, pro=proton, neu=neutron,
0060            pip=pionPlus, pim=pionMinus, pi0=pionZero, gam=photon,
0061            kpl=kaonPlus, kmi=kaonMinus, k0=kaonZero, k0b=kaonZeroBar,
0062            lam=lambda, sp=sigmaPlus, s0=sigmaZero, sm=sigmaMinus,
0063            xi0=xiZero, xim=xiMinus, om=omegaMinus, deu=deuteron,
0064            ap=antiProton, an=antiNeutron, 
0065            ade=antiDeuteron, atr=antiTriton, ahe=antiHe3, aal=antiAlpha,
0066            pp=diproton, pn=unboundPN, nn=dineutron,
0067                enu=electronNu, mnu=muonNu, tnu=tauNu,
0068                aenu=antiElectronNu, amnu=antiMuonNu, atnu=antiTauNu,
0069                wm=WMinus, wp=WPlus, z0=Zzero,
0070                ele=electron, mum=muonMinus, tm=tauMinus,
0071                pos=positron, mup=muonPlus, tp=tauPlus};
0072 
0073   // Convert enum value to enum strings above for printing
0074   const char* nameLong(G4int ptype);
0075   const char* nameShort(G4int ptype);
0076   inline const char* name(G4int ptype) { return nameLong(ptype); }
0077 
0078   // Classify particle types to reduce if-blocks in client code
0079   inline G4bool isPhoton(G4int ityp) { return (ityp==photon); }
0080 
0081   inline G4bool isMuon(G4int ityp) { return (ityp==muonMinus||ityp==muonPlus); }
0082 
0083   inline G4bool isElectron(G4int ityp) { return (ityp==electron||ityp==positron); }
0084 
0085   inline G4bool isNeutrino(G4int ityp) {
0086     return (ityp==electronNu || ityp==muonNu || ityp==tauNu ||
0087         ityp==antiElectronNu || ityp==antiMuonNu || ityp==antiTauNu);
0088   }
0089   
0090   inline G4bool pion(G4int ityp) {
0091     return (ityp==pionPlus || ityp==pionMinus || ityp==pionZero);
0092   }
0093 
0094   inline G4bool nucleon(G4int ityp) { return (ityp==proton || ityp==neutron); }
0095 
0096   inline G4bool antinucleon(G4int ityp) {
0097     return (ityp==antiProton || ityp==antiNeutron);
0098   }
0099 
0100   inline G4bool quasi_deutron(G4int ityp) { return (ityp > 100); }
0101 
0102   // Emulates G4PD::GetBaryonNumber(), rather than a simple bool
0103   inline G4int baryon(G4int ityp) {
0104     return ((ityp==pro || ityp==neu || ityp==lam || ityp==sp || ityp==s0 ||
0105          ityp==sm  || ityp==xi0 || ityp==xim || ityp==om) ? 1 :
0106         (ityp==deu || ityp==pp  || ityp==pn  || ityp==nn) ? 2 :
0107         (ityp==ap  || ityp==an) ? -1 : 
0108         (ityp==ade) ? -2 :
0109         (ityp==atr || ityp==ahe) ? -3 :
0110         (ityp==aal) ? -4 : 0);
0111   }
0112 
0113   inline G4bool antibaryon(G4int ityp) { return baryon(ityp) < 0; }
0114 
0115   inline G4bool hyperon(G4int ityp) {
0116     return (ityp==lam || ityp==sp || ityp==s0 || ityp==sm  || ityp==xi0 ||
0117         ityp==xim || ityp==om);
0118   }
0119 }
0120 
0121 #endif  /* G4INUCL_PARTICLE_NAMES_HH */