1 #include <io/CorsikaUtilities.h>
2 #include <io/CorsikaIOException.h>
4 #include <utl/Particle.h>
6 #include <utl/AugerUnits.h>
7 #include <utl/ErrorLogger.h>
14 using std::ostringstream;
20 map<int, int> gCorsikaToPDGMap;
24 InsertCorsikaToPDG(
const int corsikaCode,
const int pdgCode)
26 const auto ite = gCorsikaToPDGMap.insert(std::make_pair(corsikaCode, pdgCode));
29 err <<
"Particle with Corsika code " << corsikaCode <<
" already inserted.";
40 InsertCorsikaToPDG(2, Particle::ePositron);
43 InsertCorsikaToPDG(5, Particle::eAntiMuon);
45 InsertCorsikaToPDG(7, Particle::ePiZero);
46 InsertCorsikaToPDG(8, Particle::ePiPlus);
47 InsertCorsikaToPDG(9, Particle::ePiMinus);
49 InsertCorsikaToPDG(10, Particle::eKaon0L);
50 InsertCorsikaToPDG(11, Particle::eKaonPlus);
51 InsertCorsikaToPDG(12, Particle::eKaonMinus);
52 InsertCorsikaToPDG(13, Particle::eNeutron);
54 InsertCorsikaToPDG(15, Particle::eAntiProton);
55 InsertCorsikaToPDG(16, Particle::eKaon0S);
56 InsertCorsikaToPDG(17, Particle::eEta);
58 InsertCorsikaToPDG(19, Particle::eSigmaPlus);
59 InsertCorsikaToPDG(20, Particle::eSigmaZero);
60 InsertCorsikaToPDG(21, Particle::eSigmaMinus);
61 InsertCorsikaToPDG(22, Particle::eXiZero);
62 InsertCorsikaToPDG(23, Particle::eXiMinus);
63 InsertCorsikaToPDG(24, Particle::eOmegaMinus);
64 InsertCorsikaToPDG(25, Particle::eAntiNeutron);
65 InsertCorsikaToPDG(26, Particle::eAntiLambda);
66 InsertCorsikaToPDG(27, Particle::eAntiSigmaPlus);
67 InsertCorsikaToPDG(28, Particle::eAntiSigmaZero);
68 InsertCorsikaToPDG(29, Particle::eAntiSigmaMinus);
69 InsertCorsikaToPDG(30, Particle::eAntiXiZero);
70 InsertCorsikaToPDG(31, Particle::eAntiXiMinus);
71 InsertCorsikaToPDG(32, Particle::eAntiOmegaMinus);
75 InsertCorsikaToPDG(50, Particle::eOmegaMeson);
76 InsertCorsikaToPDG(51, Particle::eRhoZero);
77 InsertCorsikaToPDG(52, Particle::eRhoPlus);
78 InsertCorsikaToPDG(53, Particle::eRhoMinus);
79 InsertCorsikaToPDG(54, Particle::eDeltaPlusPlus);
80 InsertCorsikaToPDG(55, Particle::eDeltaPlus);
81 InsertCorsikaToPDG(56, Particle::eDeltaZero);
82 InsertCorsikaToPDG(57, Particle::eDeltaMinus);
83 InsertCorsikaToPDG(58, Particle::eAntiDeltaMinusMinus);
84 InsertCorsikaToPDG(59, Particle::eAntiDeltaMinus);
85 InsertCorsikaToPDG(60, Particle::eAntiDeltaZero);
86 InsertCorsikaToPDG(61, Particle::eAntiDeltaPlus);
87 InsertCorsikaToPDG(62, Particle::eKaonStarZero);
88 InsertCorsikaToPDG(63, Particle::eKaonStarPlus);
89 InsertCorsikaToPDG(64, Particle::eAntiKaonStarMinus);
90 InsertCorsikaToPDG(65, Particle::eAntiKaonStarZero);
91 InsertCorsikaToPDG(66, Particle::eNuElectron);
92 InsertCorsikaToPDG(67, Particle::eAntiNuElectron);
93 InsertCorsikaToPDG(68, Particle::eNuMuon);
94 InsertCorsikaToPDG(69, Particle::eAntiNuMuon);
96 InsertCorsikaToPDG(71, Particle::eEta);
97 InsertCorsikaToPDG(72, Particle::eEta);
98 InsertCorsikaToPDG(73, Particle::eEta);
99 InsertCorsikaToPDG(74, Particle::eEta);
101 InsertCorsikaToPDG(95, Particle::eDecayedAntiMuon);
102 InsertCorsikaToPDG(96, Particle::eDecayedMuon);
111 if (corsikaCode < 100) {
113 if (gCorsikaToPDGMap.empty())
114 InitCorsikaToPDGMap();
116 const auto index = gCorsikaToPDGMap.find(corsikaCode);
120 }
else if (corsikaCode < 9900) {
122 const unsigned int z = corsikaCode % 100;
123 const unsigned int a = corsikaCode / 100;
124 return Particle::NucleusCode(z, a);
152 const double magneticFieldDeclination)
double NormalizeAngleMinusPiPi(const double x)
Normalize angle to lie between -pi and pi (-180 and 180 deg)
Describes a particle for Simulation.
Base for exceptions in the CORSIKA reader.
double CorsikaAzimuthToAuger(const double corsikaAzimuth, const double magneticFieldDeclination)
Returns the azimuth rotated from Corisika's system to Auger standard.
int CorsikaToPDG(const int corsikaCode)
converters from CORSIKA to PDG particle codes
#define ERROR(message)
Macro for logging error messages.