PIDExtraVars.cxx
Go to the documentation of this file.
2 
3 #include <cfloat>
4 #include <iostream>
5 
6 namespace lem
7 {
8  //......................................................................
10  fPIDFit(-1), fPIDFitUnweight(-1), fPIDExp(-1), fPIDExpFit(-1),
11  fMeanY(-1), fMeanYFit(-1), fMeanYExp(-1),
12  fMeanYSig(-1), fMeanYSigFit(-1), fMeanYSigExp(-1),
13  fMeanQFrac(-1), fMeanQFracFit(-1), fMeanQFracExp(-1),
14  fMeanQFracSig(-1), fMeanQFracSigFit(-1), fMeanQFracSigExp(-1),
15  fMeanQFracBkg(-1), fMeanQFracBkgFit(-1), fMeanQFracBkgExp(-1),
16  fEnergyDiff(-1), fEnergyDiffExp(-1),
17  fEnrichFrac(-1), fEnrichFracFit(-1), fEnrichFracExp(-1),
18  fEnrichQFrac(-1), fEnrichQFracFit(-1), fEnrichQFracExp(-1),
19  fFannId(-1), fFannIdEnrich(-1),
20  fChiSig(-1), fChiBkg(-1), fChiSigExp(-1), fChiBkgExp(-1),
21  fBestSigPotential(-1), fBestBkgPotential(-1), fBestEnrichPotential(-1),
22  fAvgInvE(-1), fAvgExpE(-1), fAvgSigE(-1),
23  fTMVABDTG(-1), fTMVABDT(-1), fTMVABDTD(-1), fTMVABDTMF(-1), fTMVAMLP(-1),
24  fTMVABDTG_CC(-1), fTMVAMLP_CC(-1),
25  fPIDFracNumuFit(-1),
26  fPIDy50Fit(-1), fPIDy90Fit(-1),
27  fMeanQFracSigY50Fit(-1), fMeanQFracSigY90Fit(-1),
28  fMeanYSigY50Fit(-1), fMeanYSigY90Fit(-1),
29  fMeanL0Fit(-1), fMeanL1Fit(-1),
30  fMeanL0PiOnlyFit(-1), fMeanL1PiOnlyFit(-1),
31  fMeanL0Exp(-1), fMeanL1Exp(-1),
32  fMeanL0PiOnlyExp(-1), fMeanL1PiOnlyExp(-1),
33  fMeanMatchEExp(-1),
34  fDecTreePID(-1),
35  fQESigFracExp(-1), fResSigFracExp(-1), fDISSigFracExp(-1),
36  fQENCFracExp(-1), fResNCFracExp(-1), fDISNCFracExp(-1),
37  fQENumuFracExp(-1), fResNumuFracExp(-1), fDISNumuFracExp(-1)
38  {
39  // Remember to update ToString() and FromString() as well as here if you
40  // add a new variable.
41  }
42 
43  //......................................................................
45  {
46  // This information could be useful for backwards compatibility in future
47  std::string ret = "PIDExtraVarsVersion=30\n";
48 
49 #define W(x) \
50  { \
51  char buf[1024]; \
52  /* DBL_DIG of precision guarantee the number roundtrips safely */ \
53  sprintf(buf, "%s=%.*g\n", #x, DBL_DIG, f##x); \
54  ret += buf; \
55  }
56 
57  W(PIDFit);
58  W(PIDFitUnweight);
59  W(PIDExp);
60  W(PIDExpFit);
61 
62  W(MeanY);
63  W(MeanYFit);
64  W(MeanYExp);
65 
66  W(MeanYSig);
67  W(MeanYSigFit);
68  W(MeanYSigExp);
69 
70  W(MeanQFrac);
71  W(MeanQFracFit);
72  W(MeanQFracExp);
73 
74  W(MeanQFracSig);
75  W(MeanQFracSigFit);
76  W(MeanQFracSigExp);
77  W(MeanQFracBkg);
78  W(MeanQFracBkgFit);
79  W(MeanQFracBkgExp);
80 
81  W(EnergyDiff);
82  W(EnergyDiffExp);
83 
84  W(EnrichFrac);
85  W(EnrichFracFit);
86  W(EnrichFracExp);
87 
88  W(EnrichQFrac);
89  W(EnrichQFracFit);
90  W(EnrichQFracExp);
91 
92  W(FannId);
93  W(FannIdEnrich);
94 
95  W(ChiSig);
96  W(ChiBkg);
97  W(ChiSigExp);
98  W(ChiBkgExp);
99 
100  W(BestSigPotential);
101  W(BestBkgPotential);
102  W(BestEnrichPotential);
103 
104  W(AvgInvE);
105  W(AvgExpE);
106  W(AvgSigE);
107 
108  W(TMVABDTG);
109  W(TMVABDT);
110  W(TMVABDTD);
111  W(TMVABDTMF);
112  W(TMVAMLP);
113 
114  W(TMVABDTG_CC);
115  W(TMVAMLP_CC);
116 
117  W(PIDFracNumuFit);
118 
119  W(PIDy50Fit);
120  W(PIDy90Fit);
121  W(MeanQFracSigY50Fit);
122  W(MeanQFracSigY90Fit);
123  W(MeanYSigY50Fit);
124  W(MeanYSigY90Fit);
125 
126  W(MeanL0Fit);
127  W(MeanL1Fit);
128  W(MeanL0PiOnlyFit);
129  W(MeanL1PiOnlyFit);
130  W(MeanL0Exp);
131  W(MeanL1Exp);
132  W(MeanL0PiOnlyExp);
133  W(MeanL1PiOnlyExp);
134 
135  W(MeanMatchEExp);
136 
137  W(DecTreePID);
138 
139  W(QESigFracExp);
140  W(ResSigFracExp);
141  W(DISSigFracExp);
142  W(QENCFracExp);
143  W(ResNCFracExp);
144  W(DISNCFracExp);
145  W(QENumuFracExp);
146  W(ResNumuFracExp);
147  W(DISNumuFracExp);
148 
149 #undef W
150 
151  return ret;
152  }
153 
154  //......................................................................
156  {
157  // TODO: put it all into a map and then use the macro to extract the
158  // keys. More efficient, better detection of missing values.
159 
161 
162 #define R(x) \
163  { \
164  const size_t pos = s.find(#x"="); \
165  if(pos == std::string::npos){ \
166  std::cerr << "PIDExtraVars::FromString(): couldn't find "#x \
167  << std::endl; \
168  abort(); \
169  } \
170  const size_t startpos = s.find("=", pos)+1; \
171  const size_t endpos = s.find("\n", startpos); \
172  if(endpos == std::string::npos){ \
173  std::cerr << "PIDExtraVars::FromString(): couldn't find " \
174  << "newline after "#x << std::endl; \
175  abort(); \
176  } \
177  \
178  errno = 0; \
179  ret.f##x = strtod(s.substr(startpos, endpos-startpos).c_str(), 0);\
180  if(errno != 0){ \
181  std::cerr << "PIDExtraVars::FromString(): failed to parse " \
182  << "numerical value of "#x << std::endl; \
183  abort(); \
184  } \
185  }
186 
187  R(PIDFit);
188  R(PIDFitUnweight);
189  R(PIDExp);
190  R(PIDExpFit);
191 
192  R(MeanY);
193  R(MeanYFit);
194  R(MeanYExp);
195 
196  R(MeanYSig);
197  R(MeanYSigFit);
198  R(MeanYSigExp);
199 
200  R(MeanQFrac);
201  R(MeanQFracFit);
202  R(MeanQFracExp);
203 
204  R(MeanQFracSig);
205  R(MeanQFracSigFit);
206  R(MeanQFracSigExp);
207  R(MeanQFracBkg);
208  R(MeanQFracBkgFit);
209  R(MeanQFracBkgExp);
210 
211  R(EnergyDiff);
212  R(EnergyDiffExp);
213 
214  R(EnrichFrac);
215  R(EnrichFracFit);
216  R(EnrichFracExp);
217 
218  R(EnrichQFrac);
219  R(EnrichQFracFit);
220  R(EnrichQFracExp);
221 
222  R(FannId);
223  R(FannIdEnrich);
224 
225  R(ChiSig);
226  R(ChiBkg);
227  R(ChiSigExp);
228  R(ChiBkgExp);
229 
230  R(BestSigPotential);
231  R(BestBkgPotential);
232  R(BestEnrichPotential);
233 
234  R(AvgInvE);
235  R(AvgExpE);
236  R(AvgSigE);
237 
238  R(TMVABDTG);
239  R(TMVABDT);
240  R(TMVABDTD);
241  R(TMVABDTMF);
242  R(TMVAMLP);
243 
244  R(TMVABDTG_CC);
245  R(TMVAMLP_CC);
246 
247  R(PIDFracNumuFit);
248 
249  R(PIDy50Fit);
250  R(PIDy90Fit);
251  R(MeanQFracSigY50Fit);
252  R(MeanQFracSigY90Fit);
253  R(MeanYSigY50Fit);
254  R(MeanYSigY90Fit);
255 
256  R(MeanL0Fit);
257  R(MeanL1Fit);
258  R(MeanL0PiOnlyFit);
259  R(MeanL1PiOnlyFit);
260  R(MeanL0Exp);
261  R(MeanL1Exp);
262  R(MeanL0PiOnlyExp);
263  R(MeanL1PiOnlyExp);
264 
265  R(MeanMatchEExp);
266 
267  R(DecTreePID);
268 
269  R(QESigFracExp);
270  R(ResSigFracExp);
271  R(DISSigFracExp);
272  R(QENCFracExp);
273  R(ResNCFracExp);
274  R(DISNCFracExp);
275  R(QENumuFracExp);
276  R(ResNumuFracExp);
277  R(DISNumuFracExp);
278 
279 #undef R
280 
281  return ret;
282  }
283 }
std::string ToString() const
PID
Definition: FillPIDs.h:14
const XML_Char * s
Definition: expat.h:262
Outputs of the MakePID module.
Definition: PIDExtraVars.h:15
#define R(x)
#define W(x)
static PIDExtraVars FromString(const std::string &s)
enum BeamMode string