getPlotsFromNtupleFD.C
Go to the documentation of this file.
1 //Run using: root -b -q -l getPlotsFromNtuple.C
2 
3 //This script should be run first in one's journey to find new fit constants. After you have a ton of stats, please
4 //hadd the histogram files for one input file. Then this script makes the base histograms that you will need to fit.
5 //Fitting is fast and takes tinkering at times, so it is separate from this stage, which can take a long time
6 //to loop over all the ntuple entries.
7 
8 //This needs to be run to determine the muon reco E. THEN run it again to get the hadronic colz plots. Do NOT
9 //do these simultaneously because it won't be consistant!!!!
10 //This means you need to re-create histogram files after you have committed the final FD muon fit values!!!!
11 
12 #include <iostream.h>
13 #include <fstream>
14 #include <iomanip.h>
15 #include <sstream>
16 #include <string>
17 #include <cstring>
18 
19 Double_t MuonEFromTrackLength(double trkLen)
20 {
21 
22  //This function returns muon energy, in GeV, given the muon track length in cm
23 
24 
25  double muonE = 0.0;
26 
27  if (trkLen <= 0.0) return muonE;
28 
29  //New tuning values rounded for errors
30  double stitch1 = 334; // cm
31  double stitch2 = 539; // cm
32  double stitch3 = 1064; // cm
33  double offset = 0.1503; // GeV
34  double slope1 = 0.001910; // GeV/cm
35  double slope2 = 0.001987; // GeV/cm
36  double slope3 = 0.002039; // GeV/cm
37  double slope4 = 0.002159; // GeV/cm
38 
39  if (trkLen < stitch1){
40  muonE = slope1*trkLen + offset;
41  }
42  else if (trkLen < stitch2){
43  muonE = slope2*trkLen + ((slope1-slope2)*stitch1 + offset);
44  }
45  else if (trkLen <stitch3){
46  muonE = slope3*trkLen + ((slope2-slope3)*stitch2 +(slope1-slope2)*stitch1 + offset);
47  }
48  else{
49  muonE = slope4*trkLen + ((slope3-slope4)*stitch3 +(slope2-slope3)*stitch2 +(slope1-slope2)*stitch1 + offset);
50  }
51 
52  return muonE;
53 
54 }//End of MuonEFromTrackLength
55 
56 
58 {
59 
60  std::cout<<"Hello!"<<std::endl;
61 
62  //TFile* file = new TFile("/local/nova/users/lein/NumuE/total.root","READ");
63  TFile* file = new TFile("/local/nova/users/lein/NumuE/check.root","READ");
64  TNtuple* tree = (TNtuple*)file->Get("numuana/NumuETree");
65 
66  float CalCCEnergy;
67  float QEEnergy;
68  float NonQEEnergy;
69  float CCEnergy;
70  float AngleQEEnergy;
71  float AngleQEError;
72  float HadCalEnergy;
73  float HadTrkEnergy;
74  float ndTrkLenAct;
75  float ndTrkLenCat;
76  float ndTrkCalAct;
77  float ndTrkCalTran;
78  float ndTrkCalCat;
79  float ndHadCalAct;
80  float ndHadCalTran;
81  float ndHadCalCat;
82  float ndHadTrkAct;
83  float ndHadTrkTran;
84  float ndHadTrkCat;
85  float ndTrkTranX;
86  float ndTrkTranY;
87  bool ND;
88  bool FD;
89  bool isCC;
90  bool TrueQEInt;
91  bool trackMatchesMuon;
92  bool contained;
93  int Run;
94  int SubRun;
95  int Evt;
96  int SubEvt;
97  int goodMuon;
98  int bestTrack;
99  int PDGCode;
100  int nKalman;
101  int nCosmic;
102  int qepidntrk;
103  int firstplane;
104  int lastplane;
105  int nplanestofront;
106  int nplanestoback;
107  unsigned int mincellsfromedge;
108  int nslicehit;
109  int nslicecontplanes;
110  double NuPurity;
111  double NuEfficiency;
112  double trackLength;
113  double catcherE;
114  double bestPID;
115  double qepidPID;
116  double cosrejanglekal;
117  double cosrejnumucontpid;
118  double trackMuonEffHits;
119  double trackMuonPurHits;
120  double start_x_reco;
121  double start_y_reco;
122  double start_z_reco;
123  double end_x_reco;
124  double end_y_reco;
125  double end_z_reco;
126  double TrueMuonE;
127  double RecoMuonE;
128  double TrueNuE;
129  double TrueTrackLength;
130 
131 
132 
133  tree->SetBranchAddress("CalCCEnergy", &CalCCEnergy);
134  tree->SetBranchAddress("QEEnergy", &QEEnergy);
135  tree->SetBranchAddress("NonQEEnergy", &NonQEEnergy);
136  tree->SetBranchAddress("CCEnergy", &CCEnergy);
137  tree->SetBranchAddress("AngleQEEnergy", &AngleQEEnergy);
138  tree->SetBranchAddress("AngleQEError", &AngleQEError);
139  tree->SetBranchAddress("HadCalEnergy", &HadCalEnergy);
140  tree->SetBranchAddress("HadTrkEnergy", &HadTrkEnergy);
141  tree->SetBranchAddress("ndTrkLenAct", &ndTrkLenAct);
142  tree->SetBranchAddress("ndTrkLenCat", &ndTrkLenCat);
143  tree->SetBranchAddress("ndTrkCalAct", &ndTrkCalAct);
144  tree->SetBranchAddress("ndTrkCalTran", &ndTrkCalTran);
145  tree->SetBranchAddress("ndTrkCalCat", &ndTrkCalCat);
146  tree->SetBranchAddress("ndHadCalAct", &ndHadCalAct);
147  tree->SetBranchAddress("ndHadCalTran", &ndHadCalTran);
148  tree->SetBranchAddress("ndHadCalCat", &ndHadCalCat);
149  tree->SetBranchAddress("ndHadTrkAct", &ndHadTrkAct);
150  tree->SetBranchAddress("ndHadTrkTran", &ndHadTrkTran);
151  tree->SetBranchAddress("ndHadTrkCat", &ndHadTrkCat);
152  tree->SetBranchAddress("ndTrkTranX", &ndTrkTranX);
153  tree->SetBranchAddress("ndTrkTranY", &ndTrkTranY);
154  tree->SetBranchAddress("ND", &ND);
155  tree->SetBranchAddress("FD", &FD);
156  tree->SetBranchAddress("isCC", &isCC);
157  tree->SetBranchAddress("TrueQEInt", &TrueQEInt);
158  tree->SetBranchAddress("trackMatchesMuon", &trackMatchesMuon);
159  tree->SetBranchAddress("contained", &contained);
160  tree->SetBranchAddress("Run", &Run);
161  tree->SetBranchAddress("SubRun", &SubRun);
162  tree->SetBranchAddress("Evt", &Evt);
163  tree->SetBranchAddress("SubEvt", &SubEvt);
164  tree->SetBranchAddress("goodMuon", &goodMuon);
165  tree->SetBranchAddress("bestTrack", &bestTrack);
166  tree->SetBranchAddress("PDGCode", &PDGCode);
167  tree->SetBranchAddress("nKalman", &nKalman);
168  tree->SetBranchAddress("nCosmic", &nCosmic);
169  tree->SetBranchAddress("qepidntrk", &qepidntrk);
170  tree->SetBranchAddress("firstplane", &firstplane);
171  tree->SetBranchAddress("lastplane", &lastplane);
172  tree->SetBranchAddress("nplanestofront", &nplanestofront);
173  tree->SetBranchAddress("nplanestoback", &nplanestoback);
174  tree->SetBranchAddress("mincellsfromedge", &mincellsfromedge);
175  tree->SetBranchAddress("nslicehit", &nslicehit);
176  tree->SetBranchAddress("nslicecontplanes", &nslicecontplanes);
177  tree->SetBranchAddress("NuPurity", &NuPurity);
178  tree->SetBranchAddress("NuEfficiency", &NuEfficiency);
179  tree->SetBranchAddress("trackLength", &trackLength);
180  tree->SetBranchAddress("catcherE", &catcherE);
181  tree->SetBranchAddress("bestPID", &bestPID);
182  tree->SetBranchAddress("qepidPID", &qepidPID);
183  tree->SetBranchAddress("cosrejanglekal", &cosrejanglekal);
184  tree->SetBranchAddress("cosrejnumucontpid", &cosrejnumucontpid);
185  tree->SetBranchAddress("trackMuonEffHits", &trackMuonEffHits);
186  tree->SetBranchAddress("trackMuonPurHits", &trackMuonPurHits);
187  tree->SetBranchAddress("start_x_reco", &start_x_reco);
188  tree->SetBranchAddress("start_y_reco", &start_y_reco);
189  tree->SetBranchAddress("start_z_reco", &start_z_reco);
190  tree->SetBranchAddress("end_x_reco", &end_x_reco);
191  tree->SetBranchAddress("end_y_reco", &end_y_reco);
192  tree->SetBranchAddress("end_z_reco", &end_z_reco);
193  tree->SetBranchAddress("TrueMuonE", &TrueMuonE);
194  tree->SetBranchAddress("RecoMuonE", &RecoMuonE);
195  tree->SetBranchAddress("TrueNuE", &TrueNuE);
196  tree->SetBranchAddress("TrueTrackLength", &TrueTrackLength);
197 
198  //Making array for variable binning
199  double hadronQEBins[62];
200  double hadronQEAxis = 0.0;
201  for(int i = 0; i < 62; ++i){
202  hadronQEBins[i] = hadronQEAxis;
203  if (hadronQEAxis < 0.5){hadronQEAxis = hadronQEAxis + 0.01;}
204  else if (hadronQEAxis < 0.7){hadronQEAxis = hadronQEAxis + 0.025;}
205  else if (hadronQEAxis < 0.9){hadronQEAxis = hadronQEAxis + 0.2;}
206  else if (hadronQEAxis < 1.3){hadronQEAxis = hadronQEAxis + 0.4;}
207  else {hadronQEAxis = hadronQEAxis + 0.7;}
208  }
209 
210  double hadronNonQEBins[131];
211  double hadronNonQEAxis = 0.0;
212  for(int i = 0; i < 131; ++i){
213  hadronNonQEBins[i] = hadronNonQEAxis;
214  if (hadronNonQEAxis < 1.0){hadronNonQEAxis = hadronNonQEAxis + 0.01;}
215  else if (hadronNonQEAxis < 1.5){hadronNonQEAxis = hadronNonQEAxis + 0.025;}
216  else {hadronNonQEAxis = hadronNonQEAxis + 0.05;}
217  }
218 
219  TH2D* f1 = new TH2D("1",";Reco Muon Track Length (cm);True Muon Energy (GeV)",150, 0.0, 2000.0, 150, 0.0, 5.0);
220  TH2D* f2 = new TH2D("2",";Visible Hadronic E (GeV);True Neutrino E - Reco Muon E (GeV)",61, hadronQEBins, 150, 0.0, 5.0);
221  TH2D* f3 = new TH2D("3",";Visible Hadronic E (GeV);True Neutrino E - Reco Muon E (GeV)",130, hadronNonQEBins, 150, 0.0, 5.0);
222  TH2D* f19 = new TH2D("19",";Visible Hadronic E (GeV);True Neutrino E - Reco Muon E (GeV)",130, hadronNonQEBins, 150, 0.0, 5.0);
223  f1->GetXaxis()->SetNoExponent(kTRUE);
224 
225  TH1D* f4 = new TH1D("4",";(Reco - True Muon Energy)/True Muon Energy;Slices",150, -1.0, 1.0);
226  TH2D* f5 = new TH2D("5",";Reco Muon Track Length (cm);(Reco - True Muon E)/True Muon E",150, 0.0, 2000.0, 150, -1.0, 1.0);
227  f5->GetXaxis()->SetNoExponent(kTRUE);
228 
229  TH1D* f6 = new TH1D("6",";(Reco - Desired Hadronic E)/Desired Hadronic E;Slices",150, -1.0, 1.0);
230  TH2D* f7 = new TH2D("7",";Reco Hadronic Energy (GeV);(Reco - Desired Had E)/Desired Had E",150, 0.0, 5.0, 150, -1.0, 1.0);
231  f7->GetXaxis()->SetNoExponent(kTRUE);
232 
233  TH1D* f8 = new TH1D("8",";(Reco - Desired Hadronic E)/Desired Hadronic E;Slices",150, -1.0, 1.0);
234  TH2D* f9 = new TH2D("9",";Reco Hadronic Energy (GeV);(Reco - Desired Had E)/Desired Had E",150, 0.0, 5.0, 150, -1.0, 1.0);
235  f9->GetXaxis()->SetNoExponent(kTRUE);
236 
237  TH1D* f20 = new TH1D("20",";(Reco - Desired Hadronic E)/Desired Hadronic E;Slices",150, -1.0, 1.0);
238  TH2D* f21 = new TH2D("21",";Reco Hadronic Energy (GeV);(Reco - Desired Had E)/Desired Had E",150, 0.0, 5.0, 150, -1.0, 1.0);
239  f21->GetXaxis()->SetNoExponent(kTRUE);
240 
241  TH1D* f10 = new TH1D("10",";(Reco - True Neutrino Energy)/True Neutrino Energy;Slices",150, -1.0, 1.0);
242  TH2D* f11 = new TH2D("11",";Reco Neutrino Energy (GeV);(Reco - True Neutrino E)/True Neutrino E",150, 0.0, 5.0, 150, -1.0, 1.0);
243  f11->GetXaxis()->SetNoExponent(kTRUE);
244 
245  TH1D* f12 = new TH1D("12",";(Reco - True Neutrino Energy)/True Neutrino Energy;Slices",150, -1.0, 1.0);
246  TH2D* f13 = new TH2D("13",";Reco Neutrino Energy (GeV);(Reco - True Neutrino E)/True Neutrino E",150, 0.0, 5.0, 150, -1.0, 1.0);
247  f13->GetXaxis()->SetNoExponent(kTRUE);
248 
249  TH1D* f22 = new TH1D("22",";(Reco - True Neutrino Energy)/True Neutrino Energy;Slices",150, -1.0, 1.0);
250  TH2D* f23 = new TH2D("23",";Reco Neutrino Energy (GeV);(Reco - True Neutrino E)/True Neutrino E",150, 0.0, 5.0, 150, -1.0, 1.0);
251  f23->GetXaxis()->SetNoExponent(kTRUE);
252 
253  TH2D* f14 = new TH2D("14",";Reco Muon Energy (GeV);True Muon Energy (GeV)",150, 0.0, 5.0, 150, 0.0, 5.0);
254  TH2D* f15 = new TH2D("15",";Reco Hadronic Energy (GeV);Desired Hadronic Energy (GeV)",150, 0.0, 5.0, 150, 0.0, 5.0);
255  TH2D* f16 = new TH2D("16",";Reco Hadronic Energy (GeV);Desired Hadronic Energy (GeV)",150, 0.0, 5.0, 150, 0.0, 5.0);
256  TH2D* f24 = new TH2D("24",";Reco Hadronic Energy (GeV);Desired Hadronic Energy (GeV)",150, 0.0, 5.0, 150, 0.0, 5.0);
257  TH2D* f17 = new TH2D("17",";Reco Neutrino Energy (GeV);True Neutrino Energy (GeV)",150, 0.0, 5.0, 150, 0.0, 5.0);
258  TH2D* f18 = new TH2D("18",";Reco Neutrino Energy (GeV);True Neutrino Energy (GeV)",150, 0.0, 5.0, 150, 0.0, 5.0);
259  TH2D* f25 = new TH2D("25",";Reco Neutrino Energy (GeV);True Neutrino Energy (GeV)",150, 0.0, 5.0, 150, 0.0, 5.0);
260 
261  gStyle->SetOptStat(0);
262 
263  for (int i=0; i<tree->GetEntries(); ++i){
264  //for (int i=0; i<1000; ++i){ //Use this instead if you just want to do a quick test
265  tree->GetEntry(i);
266 
267  bool tracksExist = nKalman>0;
268  bool energyExists = CalCCEnergy!=-5;
269 
270  if (tracksExist&&energyExists){
271 
272  bool neutrinoEffPur = ((NuPurity>=0.8)&&(NuEfficiency>=0.8));
273  bool numuCC = (isCC)&&(abs(PDGCode) == 14);
274  bool isQE = TrueQEInt;
275  bool bestTrackBool = (bestTrack != -1);
276  bool muonEff = trackMuonEffHits >= 0.8;
277  bool muonPur = trackMuonPurHits >= 0.8;
278  bool lessThan5GeV = TrueNuE <= 5.0;
279 
280  bool kNumuQuality = ((NonQEEnergy > 0)&&(bestPID > 0)&&(nslicehit > 20)&&(nslicecontplanes > 4)&&(nCosmic > 0));
281  bool kNumuNCRej = (bestPID > 0.75);
282  bool kNumuCosmicRej = ((cosrejanglekal > 0.5)&&(cosrejnumucontpid > 0.545));
283 
284  double hadE = HadCalEnergy + HadTrkEnergy;
285 
286  //Use the first method if have re-run files with muon E; otherwise use second to do on fly
287  double muonRecoE = RecoMuonE;
288  //double muonRecoE = MuonEFromTrackLength(trackLength);
289 
290  double recoHadQE = QEEnergy - muonRecoE;
291  double recoHadNonQE = NonQEEnergy - muonRecoE;
292  double recoHadCC = CCEnergy - muonRecoE;
293 
294  if (numuCC&&goodMuon&&bestTrackBool&&contained&&kNumuQuality&&kNumuNCRej&&kNumuCosmicRej){
295 
296  //For muon, going to use QE and nonQE events together!
297  f1->Fill(trackLength,TrueMuonE);
298  if (lessThan5GeV){
299  f4->Fill((muonRecoE-TrueMuonE)/TrueMuonE);
300  }
301  f5->Fill(trackLength,(muonRecoE-TrueMuonE)/TrueMuonE);
302  f14->Fill(muonRecoE,TrueMuonE);
303 
304  f19->Fill(hadE,(TrueNuE-muonRecoE));
305  if (lessThan5GeV){
306  f20->Fill((recoHadCC - (TrueNuE-muonRecoE))/(TrueNuE-muonRecoE));
307  }
308  f21->Fill(recoHadCC,(recoHadCC - (TrueNuE-muonRecoE))/(TrueNuE-muonRecoE));
309  if (lessThan5GeV){
310  f22->Fill((CCEnergy-TrueNuE)/TrueNuE);
311  }
312  f23->Fill(CCEnergy,(CCEnergy-TrueNuE)/TrueNuE);
313  f24->Fill(recoHadCC,TrueNuE-muonRecoE);
314  f25->Fill(CCEnergy,TrueNuE);
315 
316  if (isQE){
317  f2->Fill(hadE,(TrueNuE-muonRecoE));
318  if (lessThan5GeV){
319  f6->Fill((recoHadQE - (TrueNuE-muonRecoE))/(TrueNuE-muonRecoE));
320  }
321  f7->Fill(recoHadQE,(recoHadQE - (TrueNuE-muonRecoE))/(TrueNuE-muonRecoE));
322  if (lessThan5GeV){
323  f10->Fill((QEEnergy-TrueNuE)/TrueNuE);
324  }
325  f11->Fill(QEEnergy,(QEEnergy-TrueNuE)/TrueNuE);
326  f15->Fill(recoHadQE,TrueNuE-muonRecoE);
327  f17->Fill(QEEnergy,TrueNuE);
328  }
329  else{
330  f3->Fill(hadE,(TrueNuE-muonRecoE));
331  if (lessThan5GeV){
332  f8->Fill((recoHadNonQE - (TrueNuE-muonRecoE))/(TrueNuE-muonRecoE));
333  }
334  f9->Fill(recoHadNonQE,(recoHadNonQE - (TrueNuE-muonRecoE))/(TrueNuE-muonRecoE));
335  if (lessThan5GeV){
336  f12->Fill((NonQEEnergy-TrueNuE)/TrueNuE);
337  }
338  f13->Fill(NonQEEnergy,(NonQEEnergy-TrueNuE)/TrueNuE);
339  f16->Fill(recoHadNonQE,TrueNuE-muonRecoE);
340  f18->Fill(NonQEEnergy,TrueNuE);
341  }
342 
343  }//End of loop over things that pass all basic numu reco cuts
344  }//End of loop over things with tracks and energy
345  }//End of loop over entries
346 
347 
348  TCanvas* c1 = new TCanvas("c1","c1");
349  f1->Draw("colz");
350  c1->Print("muonTrkLenVTrueEnergy.pdf");
351 
352  TCanvas* c2 = new TCanvas("c2","c2");
353  f2->Draw("colz");
354  c2->Print("QEHadronEVTrueEnergy.pdf");
355 
356  TCanvas* c3 = new TCanvas("c3","c3");
357  f3->Draw("colz");
358  c3->Print("NonQEHadronEVTrueEnergy.pdf");
359 
360  TCanvas* c19 = new TCanvas("c19","c19");
361  f19->Draw("colz");
362  c19->Print("CCHadronEVTrueEnergy.pdf");
363 
364  TCanvas* c4 = new TCanvas("c4","c4");
365  f4->Draw();
366  c4->Print("muon1dRes.pdf");
367 
368  TCanvas* c5 = new TCanvas("c5","c5");
369  f5->Draw("colz");
370  c5->Print("muon2dRes.pdf");
371 
372  TCanvas* c6 = new TCanvas("c6","c6");
373  f6->Draw();
374  c6->Print("hadqe1dRes.pdf");
375 
376  TCanvas* c7 = new TCanvas("c7","c7");
377  f7->Draw("colz");
378  c7->Print("hadqe2dRes.pdf");
379 
380  TCanvas* c8 = new TCanvas("c8","c8");
381  f8->Draw();
382  c8->Print("hadnonqe1dRes.pdf");
383 
384  TCanvas* c9 = new TCanvas("c9","c9");
385  f9->Draw("colz");
386  c9->Print("hadnonqe2dRes.pdf");
387 
388  TCanvas* c20 = new TCanvas("c20","c20");
389  f20->Draw();
390  c20->Print("hadcc1dRes.pdf");
391 
392  TCanvas* c21 = new TCanvas("c21","c21");
393  f21->Draw("colz");
394  c21->Print("hadcc2dRes.pdf");
395 
396  TCanvas* c10 = new TCanvas("c10","c10");
397  f10->Draw();
398  c10->Print("qe1dRes.pdf");
399 
400  TCanvas* c11 = new TCanvas("c11","c11");
401  f11->Draw("colz");
402  c11->Print("qe2dRes.pdf");
403 
404  TCanvas* c12 = new TCanvas("c12","c12");
405  f12->Draw();
406  c12->Print("nonqe1dRes.pdf");
407 
408  TCanvas* c13 = new TCanvas("c13","c13");
409  f13->Draw("colz");
410  c13->Print("nonqe2dRes.pdf");
411 
412  TCanvas* c22 = new TCanvas("c22","c22");
413  f22->Draw();
414  c22->Print("cc1dRes.pdf");
415 
416  TCanvas* c23 = new TCanvas("c23","c23");
417  f23->Draw("colz");
418  c23->Print("cc2dRes.pdf");
419 
420  TCanvas* c14 = new TCanvas("c14","c14");
421  f14->Draw("colz");
422  c14->Print("muonReco.pdf");
423 
424  TCanvas* c15 = new TCanvas("c15","c15");
425  f15->Draw("colz");
426  c15->Print("hadqeReco.pdf");
427 
428  TCanvas* c16 = new TCanvas("c16","c16");
429  f16->Draw("colz");
430  c16->Print("hadnonqeReco.pdf");
431 
432  TCanvas* c24 = new TCanvas("c24","c24");
433  f24->Draw("colz");
434  c24->Print("hadccReco.pdf");
435 
436  TCanvas* c17 = new TCanvas("c17","c17");
437  f17->Draw("colz");
438  c17->Print("neutrinoqeReco.pdf");
439 
440  TCanvas* c18 = new TCanvas("c18","c18");
441  f18->Draw("colz");
442  c18->Print("neutrinononqeReco.pdf");
443 
444  TCanvas* c25 = new TCanvas("c25","c25");
445  f25->Draw("colz");
446  c25->Print("neutrinoccReco.pdf");
447 
448 
449  TFile f("2DPlotsForFitting.root","RECREATE");
450  f1->Write();
451  f2->Write();
452  f3->Write();
453  f4->Write();
454  f5->Write();
455  f6->Write();
456  f7->Write();
457  f8->Write();
458  f9->Write();
459  f10->Write();
460  f11->Write();
461  f12->Write();
462  f13->Write();
463  f14->Write();
464  f15->Write();
465  f16->Write();
466  f17->Write();
467  f18->Write();
468  f19->Write();
469  f20->Write();
470  f21->Write();
471  f22->Write();
472  f23->Write();
473  f24->Write();
474  f25->Write();
475 
476 }
Float_t f4
const Cut kNumuCosmicRej([](const caf::SRProxy *sr){return(sr->sel.cosrej.anglekal > 0.5 && sr->sel.cosrej.numucontpid2019 > 0.535 && sr->slc.nhit< 400);})
Definition: NumuCuts.h:32
void abs(TH1 *hist)
Double_t MuonEFromTrackLength(double trkLen)
Float_t f2
void getPlotsFromNtupleFD()
c2
Definition: demo5.py:33
Float_t f3
Float_t f1
const Cut kNumuNCRej([](const caf::SRProxy *sr){return(sr->sel.remid.pid >0.75);})
Definition: NumuCuts.h:24
OStream cout
Definition: OStream.cxx:6
TFile * file
Definition: cellShifts.C:17
c1
Definition: demo5.py:24
const Cut kNumuQuality
Definition: NumuCuts.h:18