AiresUtilities.cc
Go to the documentation of this file.
1 
9 #include <io/AiresUtilities.h>
10 
11 #include <utl/Particle.h>
12 using utl::Particle;
13 #include <utl/GeometryUtilities.h>
14 #include <utl/AugerUnits.h>
15 #include <utl/ErrorLogger.h>
16 
17 #include <map>
18 using std::map;
19 #include <utility>
20 #include <sstream>
21 using std::ostringstream;
22 
23 #include <iostream>
24 using namespace std;
25 
26 namespace {
27 
28  map<int, int> airesToPDGMap;
29 
30  void InsertAiresToPDG(int theAiresCode, int thePDGCode) {
31 
32  if (!airesToPDGMap.insert(std::make_pair(theAiresCode,
33  thePDGCode)).second) {
34  ostringstream msg;
35  msg << "Cannot insert pair ("
36  << theAiresCode << ", " << thePDGCode
37  << ") into AiresToPDG map.";
38  ERROR(msg);
39 
40  }
41 
42  }
43 
44  void InitAiresToPDGMap() {
45 
46  InsertAiresToPDG(1, Particle::ePhoton);
47  InsertAiresToPDG(-2, Particle::eElectron);
48  InsertAiresToPDG(2, Particle::ePositron);
49  InsertAiresToPDG(3, Particle::eAntiMuon);
50  InsertAiresToPDG(-3, Particle::eMuon);
51  InsertAiresToPDG(4, Particle::eAntiTau);
52  InsertAiresToPDG(-4, Particle::eTau);
53  InsertAiresToPDG(6, Particle::eNuElectron);
54  InsertAiresToPDG(-6, Particle::eAntiNuElectron);
55  InsertAiresToPDG(7, Particle::eNuMuon);
56  InsertAiresToPDG(-7, Particle::eAntiNuMuon);
57  InsertAiresToPDG(8, Particle::eNuTau);
58  InsertAiresToPDG(-8, Particle::eAntiNuTau);
59  InsertAiresToPDG(10, Particle::ePiZero);
60  InsertAiresToPDG(-11, Particle::ePiPlus);
61  InsertAiresToPDG(11, Particle::ePiMinus);
62  InsertAiresToPDG(12, Particle::eKaon0S);
63  InsertAiresToPDG(13, Particle::eKaon0L);
64  InsertAiresToPDG(14, Particle::eKaonPlus);
65  InsertAiresToPDG(-14, Particle::eKaonMinus);
66  InsertAiresToPDG(15, Particle::eEta);
67  InsertAiresToPDG(20, Particle::eLambda);
68  InsertAiresToPDG(-20, Particle::eAntiLambda);
69  InsertAiresToPDG(-30, Particle::eAntiNeutron);
70  InsertAiresToPDG(30, Particle::eNeutron);
71  InsertAiresToPDG(31, Particle::eProton);
72  InsertAiresToPDG(-31, Particle::eAntiProton);
73 
74  }
75 
76 } // namespace
77 
78 int io::Aires::AiresToPDG(int theAiresCode) {
79 
80  if (theAiresCode < 100) {
81 
82  if (!airesToPDGMap.size())
83  InitAiresToPDGMap();
84 
85  map<int, int>::const_iterator index =
86  airesToPDGMap.find(theAiresCode);
87 
88  if (index != airesToPDGMap.end())
89  return index->second;
90 
91  } else if (theAiresCode < 100 * 32*26 + 31) {
92 
93  // From Aires manual :
94  // code = 100 + 32*Z + (N - Z +8)
95  // 0 <= N - Z + 8 <= 31
96  // 1 <= z <= 26
97  //
98  unsigned int Z = (theAiresCode-100) / 32;
99  unsigned int A = Z + theAiresCode-108-31*Z;
100  return Particle::NucleusCode(Z,A);
101  }
102  return Particle::eUndefined;
103 }
104 
105 // Configure (x)emacs for this file ...
106 // Local Variables:
107 // mode:c++
108 // compile-command: "make -C .. -k"
109 // End:
int AiresToPDG(int theAiresCode)
Convert AIRES particle code to PDG.
Describes a particle for Simulation.
Definition: Particle.h:26
#define ERROR(message)
Macro for logging error messages.
Definition: ErrorLogger.h:165

, generated on Tue Sep 26 2023.