LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
LArInteractionTypeHelper.cc
Go to the documentation of this file.
1 
12 
13 using namespace pandora;
14 
15 namespace lar_content
16 {
17 
18 LArInteractionTypeHelper::InteractionType LArInteractionTypeHelper::GetInteractionType(const MCParticleList &mcPrimaryList)
19 {
20  if (mcPrimaryList.empty())
21  throw StatusCodeException(STATUS_CODE_NOT_INITIALIZED);
22 
23  unsigned int nNonNeutrons(0), nMuons(0), nElectrons(0), nProtons(0), nPiPlus(0), nPiMinus(0), nPhotons(0), nKaonPlus(0), nKaonMinus(0);
24 
25  for (const MCParticle *const pMCPrimary : mcPrimaryList)
26  {
27  if (2112 != pMCPrimary->GetParticleId()) ++nNonNeutrons;
28  if (13 == std::fabs(pMCPrimary->GetParticleId())) ++nMuons;
29  if (11 == std::fabs(pMCPrimary->GetParticleId())) ++nElectrons;
30  else if (2212 == std::fabs(pMCPrimary->GetParticleId())) ++nProtons;
31  else if (22 == pMCPrimary->GetParticleId()) ++nPhotons;
32  else if (211 == pMCPrimary->GetParticleId()) ++nPiPlus;
33  else if (-211 == pMCPrimary->GetParticleId()) ++nPiMinus;
34  else if (321 == pMCPrimary->GetParticleId()) ++nKaonPlus;
35  else if (-321 == pMCPrimary->GetParticleId()) ++nKaonMinus;
36  }
37 
38  if ((1 == mcPrimaryList.size()) && LArMCParticleHelper::IsCosmicRay(mcPrimaryList.front()))
39  {
40  if (1 == nMuons) return COSMIC_RAY_MU;
41  if (1 == nProtons) return COSMIC_RAY_P;
42  if (1 == nElectrons) return COSMIC_RAY_E;
43  if (1 == nPhotons) return COSMIC_RAY_PHOTON;
44  else return COSMIC_RAY_OTHER;
45  }
46 
47  if ((1 == mcPrimaryList.size()) && LArMCParticleHelper::IsBeamParticle(mcPrimaryList.front()))
48  {
49  if (1 == nMuons) return BEAM_PARTICLE_MU;
50  if (1 == nProtons) return BEAM_PARTICLE_P;
51  if (1 == nElectrons) return BEAM_PARTICLE_E;
52  if (1 == nPhotons) return BEAM_PARTICLE_PHOTON;
53  if (1 == nPiPlus) return BEAM_PARTICLE_PI_PLUS;
54  if (1 == nPiMinus) return BEAM_PARTICLE_PI_MINUS;
55  if (1 == nKaonPlus) return BEAM_PARTICLE_KAON_PLUS;
56  if (1 == nKaonMinus) return BEAM_PARTICLE_KAON_MINUS;
57  else return BEAM_PARTICLE_OTHER;
58  }
59 
60  const MCParticle *pMCNeutrino(nullptr);
61 
62  for (const MCParticle *const pMCPrimary : mcPrimaryList)
63  {
64  if (!LArMCParticleHelper::IsBeamNeutrinoFinalState(pMCPrimary) || (pMCNeutrino && (pMCNeutrino != LArMCParticleHelper::GetParentMCParticle(pMCPrimary))))
65  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
66 
67  pMCNeutrino = LArMCParticleHelper::GetParentMCParticle(pMCPrimary);
68  }
69 
70  if (!pMCNeutrino)
71  throw StatusCodeException(STATUS_CODE_FAILURE);
72 
73  const int nuNuanceCode(LArMCParticleHelper::GetNuanceCode(pMCNeutrino));
74 
75  if (1001 == nuNuanceCode)
76  {
77  if ((1 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons)) return CCQEL_MU;
78  if ((2 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons)) return CCQEL_MU_P;
79  if ((3 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons)) return CCQEL_MU_P_P;
80  if ((4 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons)) return CCQEL_MU_P_P_P;
81  if ((5 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons)) return CCQEL_MU_P_P_P_P;
82  if ((6 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons)) return CCQEL_MU_P_P_P_P_P;
83 
84  if ((1 == nNonNeutrons) && (1 == nElectrons) && (0 == nProtons)) return CCQEL_E;
85  if ((2 == nNonNeutrons) && (1 == nElectrons) && (1 == nProtons)) return CCQEL_E_P;
86  if ((3 == nNonNeutrons) && (1 == nElectrons) && (2 == nProtons)) return CCQEL_E_P_P;
87  if ((4 == nNonNeutrons) && (1 == nElectrons) && (3 == nProtons)) return CCQEL_E_P_P_P;
88  if ((5 == nNonNeutrons) && (1 == nElectrons) && (4 == nProtons)) return CCQEL_E_P_P_P_P;
89  if ((6 == nNonNeutrons) && (1 == nElectrons) && (5 == nProtons)) return CCQEL_E_P_P_P_P_P;
90  }
91 
92  if (1002 == nuNuanceCode)
93  {
94  if ((1 == nNonNeutrons) && (1 == nProtons)) return NCQEL_P;
95  if ((2 == nNonNeutrons) && (2 == nProtons)) return NCQEL_P_P;
96  if ((3 == nNonNeutrons) && (3 == nProtons)) return NCQEL_P_P_P;
97  if ((4 == nNonNeutrons) && (4 == nProtons)) return NCQEL_P_P_P_P;
98  if ((5 == nNonNeutrons) && (5 == nProtons)) return NCQEL_P_P_P_P_P;
99  }
100 
101  if ((nuNuanceCode >= 1003) && (nuNuanceCode <= 1005))
102  {
103  if ((1 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons)) return CCRES_MU;
104  if ((2 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons)) return CCRES_MU_P;
105  if ((3 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons)) return CCRES_MU_P_P;
106  if ((4 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons)) return CCRES_MU_P_P_P;
107  if ((5 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons)) return CCRES_MU_P_P_P_P;
108  if ((6 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons)) return CCRES_MU_P_P_P_P_P;
109 
110  if ((2 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons) && (1 == nPiPlus)) return CCRES_MU_PIPLUS;
111  if ((3 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons) && (1 == nPiPlus)) return CCRES_MU_P_PIPLUS;
112  if ((4 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons) && (1 == nPiPlus)) return CCRES_MU_P_P_PIPLUS;
113  if ((5 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons) && (1 == nPiPlus)) return CCRES_MU_P_P_P_PIPLUS;
114  if ((6 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons) && (1 == nPiPlus)) return CCRES_MU_P_P_P_P_PIPLUS;
115  if ((7 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons) && (1 == nPiPlus)) return CCRES_MU_P_P_P_P_P_PIPLUS;
116 
117  if ((2 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons) && (1 == nPhotons)) return CCRES_MU_PHOTON;
118  if ((3 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons) && (1 == nPhotons)) return CCRES_MU_P_PHOTON;
119  if ((4 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons) && (1 == nPhotons)) return CCRES_MU_P_P_PHOTON;
120  if ((5 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons) && (1 == nPhotons)) return CCRES_MU_P_P_P_PHOTON;
121  if ((6 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons) && (1 == nPhotons)) return CCRES_MU_P_P_P_P_PHOTON;
122  if ((7 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons) && (1 == nPhotons)) return CCRES_MU_P_P_P_P_P_PHOTON;
123 
124  if ((3 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons) && (2 == nPhotons)) return CCRES_MU_PIZERO;
125  if ((4 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons) && (2 == nPhotons)) return CCRES_MU_P_PIZERO;
126  if ((5 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons) && (2 == nPhotons)) return CCRES_MU_P_P_PIZERO;
127  if ((6 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons) && (2 == nPhotons)) return CCRES_MU_P_P_P_PIZERO;
128  if ((7 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons) && (2 == nPhotons)) return CCRES_MU_P_P_P_P_PIZERO;
129  if ((8 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons) && (2 == nPhotons)) return CCRES_MU_P_P_P_P_P_PIZERO;
130 
131  if ((1 == nNonNeutrons) && (1 == nElectrons) && (0 == nProtons)) return CCRES_E;
132  if ((2 == nNonNeutrons) && (1 == nElectrons) && (1 == nProtons)) return CCRES_E_P;
133  if ((3 == nNonNeutrons) && (1 == nElectrons) && (2 == nProtons)) return CCRES_E_P_P;
134  if ((4 == nNonNeutrons) && (1 == nElectrons) && (3 == nProtons)) return CCRES_E_P_P_P;
135  if ((5 == nNonNeutrons) && (1 == nElectrons) && (4 == nProtons)) return CCRES_E_P_P_P_P;
136  if ((6 == nNonNeutrons) && (1 == nElectrons) && (5 == nProtons)) return CCRES_E_P_P_P_P_P;
137 
138  if ((2 == nNonNeutrons) && (1 == nElectrons) && (0 == nProtons) && (1 == nPiPlus)) return CCRES_E_PIPLUS;
139  if ((3 == nNonNeutrons) && (1 == nElectrons) && (1 == nProtons) && (1 == nPiPlus)) return CCRES_E_P_PIPLUS;
140  if ((4 == nNonNeutrons) && (1 == nElectrons) && (2 == nProtons) && (1 == nPiPlus)) return CCRES_E_P_P_PIPLUS;
141  if ((5 == nNonNeutrons) && (1 == nElectrons) && (3 == nProtons) && (1 == nPiPlus)) return CCRES_E_P_P_P_PIPLUS;
142  if ((6 == nNonNeutrons) && (1 == nElectrons) && (4 == nProtons) && (1 == nPiPlus)) return CCRES_E_P_P_P_P_PIPLUS;
143  if ((7 == nNonNeutrons) && (1 == nElectrons) && (5 == nProtons) && (1 == nPiPlus)) return CCRES_E_P_P_P_P_P_PIPLUS;
144 
145  if ((2 == nNonNeutrons) && (1 == nElectrons) && (0 == nProtons) && (1 == nPhotons)) return CCRES_E_PHOTON;
146  if ((3 == nNonNeutrons) && (1 == nElectrons) && (1 == nProtons) && (1 == nPhotons)) return CCRES_E_P_PHOTON;
147  if ((4 == nNonNeutrons) && (1 == nElectrons) && (2 == nProtons) && (1 == nPhotons)) return CCRES_E_P_P_PHOTON;
148  if ((5 == nNonNeutrons) && (1 == nElectrons) && (3 == nProtons) && (1 == nPhotons)) return CCRES_E_P_P_P_PHOTON;
149  if ((6 == nNonNeutrons) && (1 == nElectrons) && (4 == nProtons) && (1 == nPhotons)) return CCRES_E_P_P_P_P_PHOTON;
150  if ((7 == nNonNeutrons) && (1 == nElectrons) && (5 == nProtons) && (1 == nPhotons)) return CCRES_E_P_P_P_P_P_PHOTON;
151 
152  if ((3 == nNonNeutrons) && (1 == nElectrons) && (0 == nProtons) && (2 == nPhotons)) return CCRES_E_PIZERO;
153  if ((4 == nNonNeutrons) && (1 == nElectrons) && (1 == nProtons) && (2 == nPhotons)) return CCRES_E_P_PIZERO;
154  if ((5 == nNonNeutrons) && (1 == nElectrons) && (2 == nProtons) && (2 == nPhotons)) return CCRES_E_P_P_PIZERO;
155  if ((6 == nNonNeutrons) && (1 == nElectrons) && (3 == nProtons) && (2 == nPhotons)) return CCRES_E_P_P_P_PIZERO;
156  if ((7 == nNonNeutrons) && (1 == nElectrons) && (4 == nProtons) && (2 == nPhotons)) return CCRES_E_P_P_P_P_PIZERO;
157  if ((8 == nNonNeutrons) && (1 == nElectrons) && (5 == nProtons) && (2 == nPhotons)) return CCRES_E_P_P_P_P_P_PIZERO;
158  }
159 
160  if ((nuNuanceCode >= 1006) && (nuNuanceCode <= 1009))
161  {
162  if ((1 == nNonNeutrons) && (1 == nProtons)) return NCRES_P;
163  if ((2 == nNonNeutrons) && (2 == nProtons)) return NCRES_P_P;
164  if ((3 == nNonNeutrons) && (3 == nProtons)) return NCRES_P_P_P;
165  if ((4 == nNonNeutrons) && (4 == nProtons)) return NCRES_P_P_P_P;
166  if ((5 == nNonNeutrons) && (5 == nProtons)) return NCRES_P_P_P_P_P;
167 
168  if ((1 == nNonNeutrons) && (0 == nProtons) && (1 == nPiPlus)) return NCRES_PIPLUS;
169  if ((2 == nNonNeutrons) && (1 == nProtons) && (1 == nPiPlus)) return NCRES_P_PIPLUS;
170  if ((3 == nNonNeutrons) && (2 == nProtons) && (1 == nPiPlus)) return NCRES_P_P_PIPLUS;
171  if ((4 == nNonNeutrons) && (3 == nProtons) && (1 == nPiPlus)) return NCRES_P_P_P_PIPLUS;
172  if ((5 == nNonNeutrons) && (4 == nProtons) && (1 == nPiPlus)) return NCRES_P_P_P_P_PIPLUS;
173  if ((6 == nNonNeutrons) && (5 == nProtons) && (1 == nPiPlus)) return NCRES_P_P_P_P_P_PIPLUS;
174 
175  if ((1 == nNonNeutrons) && (0 == nProtons) && (1 == nPiMinus)) return NCRES_PIMINUS;
176  if ((2 == nNonNeutrons) && (1 == nProtons) && (1 == nPiMinus)) return NCRES_P_PIMINUS;
177  if ((3 == nNonNeutrons) && (2 == nProtons) && (1 == nPiMinus)) return NCRES_P_P_PIMINUS;
178  if ((4 == nNonNeutrons) && (3 == nProtons) && (1 == nPiMinus)) return NCRES_P_P_P_PIMINUS;
179  if ((5 == nNonNeutrons) && (4 == nProtons) && (1 == nPiMinus)) return NCRES_P_P_P_P_PIMINUS;
180  if ((6 == nNonNeutrons) && (5 == nProtons) && (1 == nPiMinus)) return NCRES_P_P_P_P_P_PIMINUS;
181 
182  if ((1 == nNonNeutrons) && (0 == nProtons) && (1 == nPhotons)) return NCRES_PHOTON;
183  if ((2 == nNonNeutrons) && (1 == nProtons) && (1 == nPhotons)) return NCRES_P_PHOTON;
184  if ((3 == nNonNeutrons) && (2 == nProtons) && (1 == nPhotons)) return NCRES_P_P_PHOTON;
185  if ((4 == nNonNeutrons) && (3 == nProtons) && (1 == nPhotons)) return NCRES_P_P_P_PHOTON;
186  if ((5 == nNonNeutrons) && (4 == nProtons) && (1 == nPhotons)) return NCRES_P_P_P_P_PHOTON;
187  if ((6 == nNonNeutrons) && (5 == nProtons) && (1 == nPhotons)) return NCRES_P_P_P_P_P_PHOTON;
188 
189  if ((2 == nNonNeutrons) && (0 == nProtons) && (2 == nPhotons)) return NCRES_PIZERO;
190  if ((3 == nNonNeutrons) && (1 == nProtons) && (2 == nPhotons)) return NCRES_P_PIZERO;
191  if ((4 == nNonNeutrons) && (2 == nProtons) && (2 == nPhotons)) return NCRES_P_P_PIZERO;
192  if ((5 == nNonNeutrons) && (3 == nProtons) && (2 == nPhotons)) return NCRES_P_P_P_PIZERO;
193  if ((6 == nNonNeutrons) && (4 == nProtons) && (2 == nPhotons)) return NCRES_P_P_P_P_PIZERO;
194  if ((7 == nNonNeutrons) && (5 == nProtons) && (2 == nPhotons)) return NCRES_P_P_P_P_P_PIZERO;
195  }
196 
197  if (1091 == nuNuanceCode)
198  {
199  if ((1 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons)) return CCDIS_MU;
200  if ((2 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons)) return CCDIS_MU_P;
201  if ((3 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons)) return CCDIS_MU_P_P;
202  if ((4 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons)) return CCDIS_MU_P_P_P;
203  if ((5 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons)) return CCDIS_MU_P_P_P_P;
204  if ((6 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons)) return CCDIS_MU_P_P_P_P_P;
205 
206  if ((2 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons) && (1 == nPiPlus)) return CCDIS_MU_PIPLUS;
207  if ((3 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons) && (1 == nPiPlus)) return CCDIS_MU_P_PIPLUS;
208  if ((4 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons) && (1 == nPiPlus)) return CCDIS_MU_P_P_PIPLUS;
209  if ((5 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons) && (1 == nPiPlus)) return CCDIS_MU_P_P_P_PIPLUS;
210  if ((6 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons) && (1 == nPiPlus)) return CCDIS_MU_P_P_P_P_PIPLUS;
211  if ((7 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons) && (1 == nPiPlus)) return CCDIS_MU_P_P_P_P_P_PIPLUS;
212 
213  if ((2 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons) && (1 == nPhotons)) return CCDIS_MU_PHOTON;
214  if ((3 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons) && (1 == nPhotons)) return CCDIS_MU_P_PHOTON;
215  if ((4 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons) && (1 == nPhotons)) return CCDIS_MU_P_P_PHOTON;
216  if ((5 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons) && (1 == nPhotons)) return CCDIS_MU_P_P_P_PHOTON;
217  if ((6 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons) && (1 == nPhotons)) return CCDIS_MU_P_P_P_P_PHOTON;
218  if ((7 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons) && (1 == nPhotons)) return CCDIS_MU_P_P_P_P_P_PHOTON;
219 
220  if ((3 == nNonNeutrons) && (1 == nMuons) && (0 == nProtons) && (2 == nPhotons)) return CCDIS_MU_PIZERO;
221  if ((4 == nNonNeutrons) && (1 == nMuons) && (1 == nProtons) && (2 == nPhotons)) return CCDIS_MU_P_PIZERO;
222  if ((5 == nNonNeutrons) && (1 == nMuons) && (2 == nProtons) && (2 == nPhotons)) return CCDIS_MU_P_P_PIZERO;
223  if ((6 == nNonNeutrons) && (1 == nMuons) && (3 == nProtons) && (2 == nPhotons)) return CCDIS_MU_P_P_P_PIZERO;
224  if ((7 == nNonNeutrons) && (1 == nMuons) && (4 == nProtons) && (2 == nPhotons)) return CCDIS_MU_P_P_P_P_PIZERO;
225  if ((8 == nNonNeutrons) && (1 == nMuons) && (5 == nProtons) && (2 == nPhotons)) return CCDIS_MU_P_P_P_P_P_PIZERO;
226  }
227 
228  if (1092 == nuNuanceCode)
229  {
230  if ((1 == nNonNeutrons) && (1 == nProtons)) return NCDIS_P;
231  if ((2 == nNonNeutrons) && (2 == nProtons)) return NCDIS_P_P;
232  if ((3 == nNonNeutrons) && (3 == nProtons)) return NCDIS_P_P_P;
233  if ((4 == nNonNeutrons) && (4 == nProtons)) return NCDIS_P_P_P_P;
234  if ((5 == nNonNeutrons) && (5 == nProtons)) return NCDIS_P_P_P_P_P;
235 
236  if ((1 == nNonNeutrons) && (0 == nProtons) && (1 == nPiPlus)) return NCDIS_PIPLUS;
237  if ((2 == nNonNeutrons) && (1 == nProtons) && (1 == nPiPlus)) return NCDIS_P_PIPLUS;
238  if ((3 == nNonNeutrons) && (2 == nProtons) && (1 == nPiPlus)) return NCDIS_P_P_PIPLUS;
239  if ((4 == nNonNeutrons) && (3 == nProtons) && (1 == nPiPlus)) return NCDIS_P_P_P_PIPLUS;
240  if ((5 == nNonNeutrons) && (4 == nProtons) && (1 == nPiPlus)) return NCDIS_P_P_P_P_PIPLUS;
241  if ((6 == nNonNeutrons) && (5 == nProtons) && (1 == nPiPlus)) return NCDIS_P_P_P_P_P_PIPLUS;
242 
243  if ((1 == nNonNeutrons) && (0 == nProtons) && (1 == nPiMinus)) return NCDIS_PIMINUS;
244  if ((2 == nNonNeutrons) && (1 == nProtons) && (1 == nPiMinus)) return NCDIS_P_PIMINUS;
245  if ((3 == nNonNeutrons) && (2 == nProtons) && (1 == nPiMinus)) return NCDIS_P_P_PIMINUS;
246  if ((4 == nNonNeutrons) && (3 == nProtons) && (1 == nPiMinus)) return NCDIS_P_P_P_PIMINUS;
247  if ((5 == nNonNeutrons) && (4 == nProtons) && (1 == nPiMinus)) return NCDIS_P_P_P_P_PIMINUS;
248  if ((6 == nNonNeutrons) && (5 == nProtons) && (1 == nPiMinus)) return NCDIS_P_P_P_P_P_PIMINUS;
249 
250  if ((1 == nNonNeutrons) && (0 == nProtons) && (1 == nPhotons)) return NCDIS_PHOTON;
251  if ((2 == nNonNeutrons) && (1 == nProtons) && (1 == nPhotons)) return NCDIS_P_PHOTON;
252  if ((3 == nNonNeutrons) && (2 == nProtons) && (1 == nPhotons)) return NCDIS_P_P_PHOTON;
253  if ((4 == nNonNeutrons) && (3 == nProtons) && (1 == nPhotons)) return NCDIS_P_P_P_PHOTON;
254  if ((5 == nNonNeutrons) && (4 == nProtons) && (1 == nPhotons)) return NCDIS_P_P_P_P_PHOTON;
255  if ((6 == nNonNeutrons) && (5 == nProtons) && (1 == nPhotons)) return NCDIS_P_P_P_P_P_PHOTON;
256 
257  if ((2 == nNonNeutrons) && (0 == nProtons) && (2 == nPhotons)) return NCDIS_PIZERO;
258  if ((3 == nNonNeutrons) && (1 == nProtons) && (2 == nPhotons)) return NCDIS_P_PIZERO;
259  if ((4 == nNonNeutrons) && (2 == nProtons) && (2 == nPhotons)) return NCDIS_P_P_PIZERO;
260  if ((5 == nNonNeutrons) && (3 == nProtons) && (2 == nPhotons)) return NCDIS_P_P_P_PIZERO;
261  if ((6 == nNonNeutrons) && (4 == nProtons) && (2 == nPhotons)) return NCDIS_P_P_P_P_PIZERO;
262  if ((7 == nNonNeutrons) && (5 == nProtons) && (2 == nPhotons)) return NCDIS_P_P_P_P_P_PIZERO;
263  }
264 
265  if (1096 == nuNuanceCode) return NCCOH;
266  if (1097 == nuNuanceCode) return CCCOH;
267 
268  return OTHER_INTERACTION;
269 }
270 
271 //------------------------------------------------------------------------------------------------------------------------------------------
272 
273 std::string LArInteractionTypeHelper::ToString(const InteractionType interactionType)
274 {
275  switch (interactionType)
276  {
277  case CCQEL_MU: return "CCQEL_MU";
278  case CCQEL_MU_P: return "CCQEL_MU_P";
279  case CCQEL_MU_P_P: return "CCQEL_MU_P_P";
280  case CCQEL_MU_P_P_P: return "CCQEL_MU_P_P_P";
281  case CCQEL_MU_P_P_P_P: return "CCQEL_MU_P_P_P_P";
282  case CCQEL_MU_P_P_P_P_P: return "CCQEL_MU_P_P_P_P_P";
283  case CCQEL_E: return "CCQEL_E";
284  case CCQEL_E_P: return "CCQEL_E_P";
285  case CCQEL_E_P_P: return "CCQEL_E_P_P";
286  case CCQEL_E_P_P_P: return "CCQEL_E_P_P_P";
287  case CCQEL_E_P_P_P_P: return "CCQEL_E_P_P_P_P";
288  case CCQEL_E_P_P_P_P_P: return "CCQEL_E_P_P_P_P_P";
289  case NCQEL_P: return "NCQEL_P";
290  case NCQEL_P_P: return "NCQEL_P_P";
291  case NCQEL_P_P_P: return "NCQEL_P_P_P";
292  case NCQEL_P_P_P_P: return "NCQEL_P_P_P_P";
293  case NCQEL_P_P_P_P_P: return "NCQEL_P_P_P_P_P";
294  case CCRES_MU: return "CCRES_MU";
295  case CCRES_MU_P: return "CCRES_MU_P";
296  case CCRES_MU_P_P: return "CCRES_MU_P_P";
297  case CCRES_MU_P_P_P: return "CCRES_MU_P_P_P";
298  case CCRES_MU_P_P_P_P: return "CCRES_MU_P_P_P_P";
299  case CCRES_MU_P_P_P_P_P: return "CCRES_MU_P_P_P_P_P";
300  case CCRES_MU_PIPLUS: return "CCRES_MU_PIPLUS";
301  case CCRES_MU_P_PIPLUS: return "CCRES_MU_P_PIPLUS";
302  case CCRES_MU_P_P_PIPLUS: return "CCRES_MU_P_P_PIPLUS";
303  case CCRES_MU_P_P_P_PIPLUS: return "CCRES_MU_P_P_P_PIPLUS";
304  case CCRES_MU_P_P_P_P_PIPLUS: return "CCRES_MU_P_P_P_P_PIPLUS";
305  case CCRES_MU_P_P_P_P_P_PIPLUS: return "CCRES_MU_P_P_P_P_P_PIPLUS";
306  case CCRES_MU_PHOTON: return "CCRES_MU_PHOTON";
307  case CCRES_MU_P_PHOTON: return "CCRES_MU_P_PHOTON";
308  case CCRES_MU_P_P_PHOTON: return "CCRES_MU_P_P_PHOTON";
309  case CCRES_MU_P_P_P_PHOTON: return "CCRES_MU_P_P_P_PHOTON";
310  case CCRES_MU_P_P_P_P_PHOTON: return "CCRES_MU_P_P_P_P_PHOTON";
311  case CCRES_MU_P_P_P_P_P_PHOTON: return "CCRES_MU_P_P_P_P_P_PHOTON";
312  case CCRES_MU_PIZERO: return "CCRES_MU_PIZERO";
313  case CCRES_MU_P_PIZERO: return "CCRES_MU_P_PIZERO";
314  case CCRES_MU_P_P_PIZERO: return "CCRES_MU_P_P_PIZERO";
315  case CCRES_MU_P_P_P_PIZERO: return "CCRES_MU_P_P_P_PIZERO";
316  case CCRES_MU_P_P_P_P_PIZERO: return "CCRES_MU_P_P_P_P_PIZERO";
317  case CCRES_MU_P_P_P_P_P_PIZERO: return "CCRES_MU_P_P_P_P_P_PIZERO";
318  case CCRES_E: return "CCRES_E";
319  case CCRES_E_P: return "CCRES_E_P";
320  case CCRES_E_P_P: return "CCRES_E_P_P";
321  case CCRES_E_P_P_P: return "CCRES_E_P_P_P";
322  case CCRES_E_P_P_P_P: return "CCRES_E_P_P_P_P";
323  case CCRES_E_P_P_P_P_P: return "CCRES_E_P_P_P_P_P";
324  case CCRES_E_PIPLUS: return "CCRES_E_PIPLUS";
325  case CCRES_E_P_PIPLUS: return "CCRES_E_P_PIPLUS";
326  case CCRES_E_P_P_PIPLUS: return "CCRES_E_P_P_PIPLUS";
327  case CCRES_E_P_P_P_PIPLUS: return "CCRES_E_P_P_P_PIPLUS";
328  case CCRES_E_P_P_P_P_PIPLUS: return "CCRES_E_P_P_P_P_PIPLUS";
329  case CCRES_E_P_P_P_P_P_PIPLUS: return "CCRES_E_P_P_P_P_P_PIPLUS";
330  case CCRES_E_PHOTON: return "CCRES_E_PHOTON";
331  case CCRES_E_P_PHOTON: return "CCRES_E_P_PHOTON";
332  case CCRES_E_P_P_PHOTON: return "CCRES_E_P_P_PHOTON";
333  case CCRES_E_P_P_P_PHOTON: return "CCRES_E_P_P_P_PHOTON";
334  case CCRES_E_P_P_P_P_PHOTON: return "CCRES_E_P_P_P_P_PHOTON";
335  case CCRES_E_P_P_P_P_P_PHOTON: return "CCRES_E_P_P_P_P_P_PHOTON";
336  case CCRES_E_PIZERO: return "CCRES_E_PIZERO";
337  case CCRES_E_P_PIZERO: return "CCRES_E_P_PIZERO";
338  case CCRES_E_P_P_PIZERO: return "CCRES_E_P_P_PIZERO";
339  case CCRES_E_P_P_P_PIZERO: return "CCRES_E_P_P_P_PIZERO";
340  case CCRES_E_P_P_P_P_PIZERO: return "CCRES_E_P_P_P_P_PIZERO";
341  case CCRES_E_P_P_P_P_P_PIZERO: return "CCRES_E_P_P_P_P_P_PIZERO";
342  case NCRES_P: return "NCRES_P";
343  case NCRES_P_P: return "NCRES_P_P";
344  case NCRES_P_P_P: return "NCRES_P_P_P";
345  case NCRES_P_P_P_P: return "NCRES_P_P_P_P";
346  case NCRES_P_P_P_P_P: return "NCRES_P_P_P_P_P";
347  case NCRES_PIPLUS: return "NCRES_PIPLUS";
348  case NCRES_P_PIPLUS: return "NCRES_P_PIPLUS";
349  case NCRES_P_P_PIPLUS: return "NCRES_P_P_PIPLUS";
350  case NCRES_P_P_P_PIPLUS: return "NCRES_P_P_P_PIPLUS";
351  case NCRES_P_P_P_P_PIPLUS: return "NCRES_P_P_P_P_PIPLUS";
352  case NCRES_P_P_P_P_P_PIPLUS: return "NCRES_P_P_P_P_P_PIPLUS";
353  case NCRES_PIMINUS: return "NCRES_PIMINUS";
354  case NCRES_P_PIMINUS: return "NCRES_P_PIMINUS";
355  case NCRES_P_P_PIMINUS: return "NCRES_P_P_PIMINUS";
356  case NCRES_P_P_P_PIMINUS: return "NCRES_P_P_P_PIMINUS";
357  case NCRES_P_P_P_P_PIMINUS: return "NCRES_P_P_P_P_PIMINUS";
358  case NCRES_P_P_P_P_P_PIMINUS: return "NCRES_P_P_P_P_P_PIMINUS";
359  case NCRES_PHOTON: return "NCRES_PHOTON";
360  case NCRES_P_PHOTON: return "NCRES_P_PHOTON";
361  case NCRES_P_P_PHOTON: return "NCRES_P_P_PHOTON";
362  case NCRES_P_P_P_PHOTON: return "NCRES_P_P_P_PHOTON";
363  case NCRES_P_P_P_P_PHOTON: return "NCRES_P_P_P_P_PHOTON";
364  case NCRES_P_P_P_P_P_PHOTON: return "NCRES_P_P_P_P_P_PHOTON";
365  case NCRES_PIZERO: return "NCRES_PIZERO";
366  case NCRES_P_PIZERO: return "NCRES_P_PIZERO";
367  case NCRES_P_P_PIZERO: return "NCRES_P_P_PIZERO";
368  case NCRES_P_P_P_PIZERO: return "NCRES_P_P_P_PIZERO";
369  case NCRES_P_P_P_P_PIZERO: return "NCRES_P_P_P_P_PIZERO";
370  case NCRES_P_P_P_P_P_PIZERO: return "NCRES_P_P_P_P_P_PIZERO";
371  case CCDIS_MU: return "CCDIS_MU";
372  case CCDIS_MU_P: return "CCDIS_MU_P";
373  case CCDIS_MU_P_P: return "CCDIS_MU_P_P";
374  case CCDIS_MU_P_P_P: return "CCDIS_MU_P_P_P";
375  case CCDIS_MU_P_P_P_P: return "CCDIS_MU_P_P_P_P";
376  case CCDIS_MU_P_P_P_P_P: return "CCDIS_MU_P_P_P_P_P";
377  case CCDIS_MU_PIPLUS: return "CCDIS_MU_PIPLUS";
378  case CCDIS_MU_P_PIPLUS: return "CCDIS_MU_P_PIPLUS";
379  case CCDIS_MU_P_P_PIPLUS: return "CCDIS_MU_P_P_PIPLUS";
380  case CCDIS_MU_P_P_P_PIPLUS: return "CCDIS_MU_P_P_P_PIPLUS";
381  case CCDIS_MU_P_P_P_P_PIPLUS: return "CCDIS_MU_P_P_P_P_PIPLUS";
382  case CCDIS_MU_P_P_P_P_P_PIPLUS: return "CCDIS_MU_P_P_P_P_P_PIPLUS";
383  case CCDIS_MU_PHOTON: return "CCDIS_MU_PHOTON";
384  case CCDIS_MU_P_PHOTON: return "CCDIS_MU_P_PHOTON";
385  case CCDIS_MU_P_P_PHOTON: return "CCDIS_MU_P_P_PHOTON";
386  case CCDIS_MU_P_P_P_PHOTON: return "CCDIS_MU_P_P_P_PHOTON";
387  case CCDIS_MU_P_P_P_P_PHOTON: return "CCDIS_MU_P_P_P_P_PHOTON";
388  case CCDIS_MU_P_P_P_P_P_PHOTON: return "CCDIS_MU_P_P_P_P_P_PHOTON";
389  case CCDIS_MU_PIZERO: return "CCDIS_MU_PIZERO";
390  case CCDIS_MU_P_PIZERO: return "CCDIS_MU_P_PIZERO";
391  case CCDIS_MU_P_P_PIZERO: return "CCDIS_MU_P_P_PIZERO";
392  case CCDIS_MU_P_P_P_PIZERO: return "CCDIS_MU_P_P_P_PIZERO";
393  case CCDIS_MU_P_P_P_P_PIZERO: return "CCDIS_MU_P_P_P_P_PIZERO";
394  case CCDIS_MU_P_P_P_P_P_PIZERO: return "CCDIS_MU_P_P_P_P_P_PIZERO";
395  case NCDIS_P: return "NCDIS_P";
396  case NCDIS_P_P: return "NCDIS_P_P";
397  case NCDIS_P_P_P: return "NCDIS_P_P_P";
398  case NCDIS_P_P_P_P: return "NCDIS_P_P_P_P";
399  case NCDIS_P_P_P_P_P: return "NCDIS_P_P_P_P_P";
400  case NCDIS_PIPLUS: return "NCDIS_PIPLUS";
401  case NCDIS_P_PIPLUS: return "NCDIS_P_PIPLUS";
402  case NCDIS_P_P_PIPLUS: return "NCDIS_P_P_PIPLUS";
403  case NCDIS_P_P_P_PIPLUS: return "NCDIS_P_P_P_PIPLUS";
404  case NCDIS_P_P_P_P_PIPLUS: return "NCDIS_P_P_P_P_PIPLUS";
405  case NCDIS_P_P_P_P_P_PIPLUS: return "NCDIS_P_P_P_P_P_PIPLUS";
406  case NCDIS_PIMINUS: return "NCDIS_PIMINUS";
407  case NCDIS_P_PIMINUS: return "NCDIS_P_PIMINUS";
408  case NCDIS_P_P_PIMINUS: return "NCDIS_P_P_PIMINUS";
409  case NCDIS_P_P_P_PIMINUS: return "NCDIS_P_P_P_PIMINUS";
410  case NCDIS_P_P_P_P_PIMINUS: return "NCDIS_P_P_P_P_PIMINUS";
411  case NCDIS_P_P_P_P_P_PIMINUS: return "NCDIS_P_P_P_P_P_PIMINUS";
412  case NCDIS_PHOTON: return "NCDIS_PHOTON";
413  case NCDIS_P_PHOTON: return "NCDIS_P_PHOTON";
414  case NCDIS_P_P_PHOTON: return "NCDIS_P_P_PHOTON";
415  case NCDIS_P_P_P_PHOTON: return "NCDIS_P_P_P_PHOTON";
416  case NCDIS_P_P_P_P_PHOTON: return "NCDIS_P_P_P_P_PHOTON";
417  case NCDIS_P_P_P_P_P_PHOTON: return "NCDIS_P_P_P_P_P_PHOTON";
418  case NCDIS_PIZERO: return "NCDIS_PIZERO";
419  case NCDIS_P_PIZERO: return "NCDIS_P_PIZERO";
420  case NCDIS_P_P_PIZERO: return "NCDIS_P_P_PIZERO";
421  case NCDIS_P_P_P_PIZERO: return "NCDIS_P_P_P_PIZERO";
422  case NCDIS_P_P_P_P_PIZERO: return "NCDIS_P_P_P_P_PIZERO";
423  case NCDIS_P_P_P_P_P_PIZERO: return "NCDIS_P_P_P_P_P_PIZERO";
424  case CCCOH: return "CCCOH";
425  case NCCOH: return "NCCOH";
426  case COSMIC_RAY_MU: return "COSMIC_RAY_MU";
427  case COSMIC_RAY_P: return "COSMIC_RAY_P";
428  case COSMIC_RAY_E: return "COSMIC_RAY_E";
429  case COSMIC_RAY_PHOTON: return "COSMIC_RAY_PHOTON";
430  case COSMIC_RAY_OTHER: return "COSMIC_RAY_OTHER";
431  case BEAM_PARTICLE_MU: return "BEAM_PARTICLE_MU";
432  case BEAM_PARTICLE_P: return "BEAM_PARTICLE_P";
433  case BEAM_PARTICLE_E: return "BEAM_PARTICLE_E";
434  case BEAM_PARTICLE_PHOTON: return "BEAM_PARTICLE_PHOTON";
435  case BEAM_PARTICLE_PI_PLUS: return "BEAM_PARTICLE_PI_PLUS";
436  case BEAM_PARTICLE_PI_MINUS: return "BEAM_PARTICLE_PI_MINUS";
437  case BEAM_PARTICLE_KAON_PLUS: return "BEAM_PARTICLE_KAON_PLUS";
438  case BEAM_PARTICLE_KAON_MINUS: return "BEAM_PARTICLE_KAON_MINUS";
439  case BEAM_PARTICLE_OTHER: return "BEAM_PARTICLE_OTHER";
440  case OTHER_INTERACTION: return "OTHER_INTERACTION";
441  case ALL_INTERACTIONS: return "ALL_INTERACTIONS";
442  default: return "UNKNOWN";
443  }
444 }
445 
446 } // namespace lar_content
Header file for the interaction type helper class.
Header file for the lar monitoring helper helper class.
Header file for the lar monte carlo particle helper helper class.