8 TChain signal(
"lidtrain/fEvent");
9 TChain background(
"lidtrain/fEvent");
13 ifstream
inFile(
"/nova/ana/users/edniner/LIDTraining/round4/swaplist.txt");
15 if (inFile.is_open()){
16 while (inFile.good()){
18 if (line ==
"")
continue;
23 signal.AddFile(line.c_str());
25 if (scount >=151)
break;
29 ifstream inFile2(
"/nova/ana/users/edniner/LIDTraining/round4/nonswaplist.txt");
31 if (inFile2.is_open()){
32 while (inFile2.good()){
33 getline(inFile2,line);
34 if (line ==
"")
continue;
39 background.AddFile(line.c_str());
41 if (ncount >=301)
break;
47 TCut MCNUECCQE =
"evtTrueNuPdg==12&&(evtRwRand[0]>0&&evtRwRand[0]<evtRwProb[0])";
48 TCut MCBKG =
"(evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])";
49 TH1F* htruenue=
new TH1F(
"htruenue",
"htruenue", 100,0, 5);
50 TH1F* htruenupi0=
new TH1F(
"htruenupi0",
"htruenupi0", 100,0, 5);
51 signal.Draw(
"evtTrueNuEnergy>>htruenue",MCNUECCQE);
52 background.Draw(
"evtTrueNuEnergy>>htruenupi0", MCBKG);
54 double nsig = htruenue->GetEntries();
55 double nbkg = htruenupi0->GetEntries();
57 TCanvas *c0 =
new TCanvas(
"c0",
"c0",200,10, 1200,600);
66 if (!gROOT->GetClass(
"TMultiLayerPerceptron")) {
67 gSystem->Load(
"libMLP");
69 gSystem->Load(
"libRooFit");
74 double evtTrueNuEnergy;
75 double evtTrueNuP4[4];
76 double evtTrueNuVtx[3];
90 double evtSh1CosTheta;
94 double evtPi0TrueDirMgg0;
95 double evtPi0TrueDirMgg;
96 double evtPi0StartDist;
97 double evtPi0LineDist;
107 double evtTotalRecoGeV;
111 double evtSh1Start[3];
112 double evtSh1DedxLLL[20];
113 double evtSh1DedxLLT[20];
115 double evtSh1NMIPPlane;
119 double evtSh1TrueDang;
120 double evtSh1TrueEDang;
125 signal.SetBranchAddress(
"evtTrueNuCCNC", &evtTrueNuCCNC);
126 signal.SetBranchAddress(
"evtTrueNuMode", &evtTrueNuMode);
127 signal.SetBranchAddress(
"evtTrueNuPdg", &evtTrueNuPdg);
128 signal.SetBranchAddress(
"evtTrueNuEnergy", &evtTrueNuEnergy);
129 signal.SetBranchAddress(
"evtTrueNuP4[4]", evtTrueNuP4);
130 signal.SetBranchAddress(
"evtTrueNuVtx[3]",evtTrueNuVtx);
132 signal.SetBranchAddress(
"evtRwProb[20]",evtRwProb);
133 signal.SetBranchAddress(
"evtRwRand[20]",evtRwRand);
135 signal.SetBranchAddress(
"evtSh1TruePdg",&evtSh1TruePdg);
136 signal.SetBranchAddress(
"evtSh1TrueDang",&evtSh1TrueDang);
137 signal.SetBranchAddress(
"evtSh1TrueEDang",&evtSh1TrueEDang);
138 signal.SetBranchAddress(
"evtSh1Energy",&evtSh1Energy);
139 signal.SetBranchAddress(
"evtTotalRecoGeV",&evtTotalRecoGeV);
140 signal.SetBranchAddress(
"evtSh1Gap",&evtSh1Gap);
141 signal.SetBranchAddress(
"evtSh1IsFid",&evtSh1IsFid);
142 signal.SetBranchAddress(
"evtSh1P4[4]",evtSh1P4);
143 signal.SetBranchAddress(
"evtSh1Start[3]",evtSh1Start);
144 signal.SetBranchAddress(
"evtSh1DedxLLL[20]",evtSh1DedxLLL);
145 signal.SetBranchAddress(
"evtSh1DedxLLT[20]",evtSh1DedxLLT);
146 signal.SetBranchAddress(
"evtSh1NPlane",&evtSh1NPlane);
147 signal.SetBranchAddress(
"evtSh1NMIPPlane",&evtSh1NMIPPlane);
148 signal.SetBranchAddress(
"evtEtot",&evtEtot);
149 signal.SetBranchAddress(
"evtSh1SumPt",&evtSh1SumPt);
150 signal.SetBranchAddress(
"evtSh2Energy",&evtSh2Energy);
151 signal.SetBranchAddress(
"evtPi0Mgg",&evtPi0Mgg);
152 signal.SetBranchAddress(
"evtSh1Pi0Mgg",&evtSh1Pi0Mgg);
153 signal.SetBranchAddress(
"evtSh1VtxGeV",&evtSh1VtxGeV);
154 signal.SetBranchAddress(
"evtSh1CosTheta",&evtSh1CosTheta);
155 signal.SetBranchAddress(
"evtSh1Length",&evtSh1Length);
156 signal.SetBranchAddress(
"evtPi0StartDist",&evtPi0StartDist);
157 signal.SetBranchAddress(
"evtPi0LineDist",&evtPi0LineDist);
161 background.SetBranchAddress(
"evtTrueNuCCNC", &evtTrueNuCCNC);
162 background.SetBranchAddress(
"evtTrueNuMode", &evtTrueNuMode);
163 background.SetBranchAddress(
"evtTrueNuPdg", &evtTrueNuPdg);
164 background.SetBranchAddress(
"evtTrueNuEnergy", &evtTrueNuEnergy);
165 background.SetBranchAddress(
"evtTrueNuP4[4]", evtTrueNuP4);
166 background.SetBranchAddress(
"evtTrueNuVtx[3]",evtTrueNuVtx);
168 background.SetBranchAddress(
"evtRwProb[20]",evtRwProb);
169 background.SetBranchAddress(
"evtRwRand[20]",evtRwRand);
171 background.SetBranchAddress(
"evtSh1TruePdg",&evtSh1TruePdg);
172 background.SetBranchAddress(
"evtSh1TrueDang",&evtSh1TrueDang);
173 background.SetBranchAddress(
"evtSh1TrueEDang",&evtSh1TrueEDang);
174 background.SetBranchAddress(
"evtSh1Energy",&evtSh1Energy);
175 background.SetBranchAddress(
"evtTotalRecoGeV",&evtTotalRecoGeV);
176 background.SetBranchAddress(
"evtSh1Gap",&evtSh1Gap);
177 background.SetBranchAddress(
"evtSh1IsFid",&evtSh1IsFid);
178 background.SetBranchAddress(
"evtSh1P4[4]",evtSh1P4);
179 background.SetBranchAddress(
"evtSh1Start[3]",evtSh1Start);
180 background.SetBranchAddress(
"evtSh1DedxLLL[20]",evtSh1DedxLLL);
181 background.SetBranchAddress(
"evtSh1DedxLLT[20]",evtSh1DedxLLT);
182 background.SetBranchAddress(
"evtSh1NPlane",&evtSh1NPlane);
183 background.SetBranchAddress(
"evtSh1NMIPPlane",&evtSh1NMIPPlane);
184 background.SetBranchAddress(
"evtEtot",&evtEtot);
185 background.SetBranchAddress(
"evtSh1SumPt",&evtSh1SumPt);
186 background.SetBranchAddress(
"evtSh2Energy",&evtSh2Energy);
187 background.SetBranchAddress(
"evtPi0Mgg",&evtPi0Mgg);
188 background.SetBranchAddress(
"evtSh1Pi0Mgg",&evtSh1Pi0Mgg);
189 background.SetBranchAddress(
"evtSh1VtxGeV",&evtSh1VtxGeV);
190 background.SetBranchAddress(
"evtSh1CosTheta",&evtSh1CosTheta);
191 background.SetBranchAddress(
"evtSh1Length",&evtSh1Length);
192 background.SetBranchAddress(
"evtPi0StartDist",&evtPi0StartDist);
193 background.SetBranchAddress(
"evtPi0LineDist",&evtPi0LineDist);
196 TTree *simu =
new TTree(
"MonteCarlo",
"Filtered Monte Carlo Events");
197 double egLLL, egLLT, emuLLL, emuLLT, epi0LLL, epi0LLT, epLLL,epLLT,enLLL,enLLT,epiLLL,epiLLT,gap, pi0mass;
203 simu->Branch(
"egLLL", &egLLL,
"egLLL/D");
204 simu->Branch(
"egLLT", &egLLT,
"egLLT/D");
205 simu->Branch(
"emuLLL", &emuLLL,
"emuLLL/D");
206 simu->Branch(
"emuLLT", &emuLLT,
"emuLLT/D");
207 simu->Branch(
"epi0LLL", &epi0LLL,
"epi0LLL/D");
208 simu->Branch(
"epi0LLT", &epi0LLT,
"epi0LLT/D");
209 simu->Branch(
"epLLL", &epLLL,
"epLLL/D");
210 simu->Branch(
"epLLT", &epLLT,
"epLLT/D");
211 simu->Branch(
"enLLL", &enLLL,
"enLLL/D");
212 simu->Branch(
"enLLT", &enLLT,
"enLLT/D");
213 simu->Branch(
"epiLLL", &epiLLL,
"epiLLL/D");
214 simu->Branch(
"epiLLT", &epiLLT,
"epiLLT/D");
215 simu->Branch(
"gap", &gap,
"gap/D");
216 simu->Branch(
"pi0mass", &pi0mass,
"pi0mass/D");
217 simu->Branch(
"vtxgev", &vtxgev,
"vtxgev/D");
218 simu->Branch(
"shE", &shE,
"shE/D");
220 simu->Branch(
"costheta", &costheta,
"costheta/D");
221 simu->Branch(
"length", &length,
"length/D");
222 simu->Branch(
"type", &type,
"type/I");
224 TTree *annMC =
new TTree(
"annMC",
"Filtered Monte Carlo Events");
225 double trueNuE, etot, enue, sh1Energy, ANN, wSig, wBkg;
226 double annPi0StartDist, annPi0LineDist;
227 annMC->Branch(
"egLLL", &egLLL,
"egLLL/D");
228 annMC->Branch(
"egLLT", &egLLT,
"egLLT/D");
229 annMC->Branch(
"emuLLL", &emuLLL,
"emuLLL/D");
230 annMC->Branch(
"emuLLT", &emuLLT,
"emuLLT/D");
231 annMC->Branch(
"epi0LLL", &epi0LLL,
"epi0LLL/D");
232 annMC->Branch(
"epi0LLT", &epi0LLT,
"epi0LLT/D");
233 annMC->Branch(
"epLLL", &epLLL,
"epLLL/D");
234 annMC->Branch(
"epLLT", &epLLT,
"epLLT/D");
235 annMC->Branch(
"enLLL", &enLLL,
"enLLL/D");
236 annMC->Branch(
"enLLT", &enLLT,
"enLLT/D");
237 annMC->Branch(
"epiLLL", &epiLLL,
"epiLLL/D");
238 annMC->Branch(
"epiLLT", &epiLLT,
"epiLLT/D");
239 annMC->Branch(
"gap", &gap,
"gap/D");
240 annMC->Branch(
"pi0mass", &pi0mass,
"pi0mass/D");
241 annMC->Branch(
"vtxgev", &vtxgev,
"vtxgev/D");
242 annMC->Branch(
"length", &length,
"length/D");
243 annMC->Branch(
"annPi0StartDist", &annPi0StartDist,
"annPi0StartDist/D");
244 annMC->Branch(
"annPi0LineDist", &annPi0LineDist,
"annPi0LineDist/D");
245 annMC->Branch(
"evtTrueNuCCNC", &evtTrueNuCCNC,
"evtTrueNuCCNC/I");
246 annMC->Branch(
"evtTrueNuPdg", &evtTrueNuPdg,
"evtTrueNuPdg/I");
247 annMC->Branch(
"evtTrueNuMode", &evtTrueNuMode,
"evtTrueNuMode/I");
248 annMC->Branch(
"trueNuE", &trueNuE,
"trueNuE/D");
249 annMC->Branch(
"etot", &etot,
"etot/D");
250 annMC->Branch(
"enue", &enue,
"enue/D");
251 annMC->Branch(
"sh1Energy", &sh1Energy,
"sh1Energy/D");
252 annMC->Branch(
"type", &type,
"type/I");
253 annMC->Branch(
"wSig", &wSig,
"wSig/D");
254 annMC->Branch(
"wBkg", &wBkg,
"wBkg/D");
255 annMC->Branch(
"ANN", &ANN,
"ANN/D");
257 int nb0=0,nb1=0,nb2=0,nb3=0;
258 int nbNueCC0=0,nbNueCC1=0,nbNueCC2=0,nbNueCC2_a=0,nbNueCC3=0;
259 int nbNumuCC0=0,nbNumuCC1=0,nbNumuCC2=0,nbNumuCC3=0;
260 int nbNC0=0,nbNC1=0,nbNC2=0,nbNC3=0;
262 int ns0=0,ns1=0,ns2=0,ns3=0;
263 int normSig = 0, normBkg =0, totBkg=0;
266 for (
int i = 0;
i < signal.GetEntries();
i++) {
268 if(!(evtTrueNuCCNC==0&&evtTrueNuPdg==12&&(evtRwRand[0]>0&&evtRwRand[0]<evtRwProb[0])))
continue;
272 if(evtSh1TrueDang>30||
fabs(evtSh1TruePdg)!=11)
continue;
275 if(!(evtSh1Energy>0.0))
continue;
278 if(evtSh1DedxLLL[0] - evtSh1DedxLLL[2]<-0.2)
continue;
284 if((
double)
i>(
double)signal.GetEntries()*rsig)
continue;
286 egLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[1];
287 egLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[1];
288 emuLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[2];
289 emuLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[2];
290 epi0LLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[3];
291 epi0LLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[3];
292 epLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[4];
293 epLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[4];
294 enLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[5];
295 enLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[5];
296 epiLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[6];
297 epiLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[6];
299 pi0mass =
MAX(evtSh1Pi0Mgg,0);
300 shE = evtSh1Energy/evtEtot;
302 vtxgev = evtSh1VtxGeV;
304 costheta = evtSh1CosTheta;
305 length = evtSh1Length/evtSh1Energy;
311 for (
int i = 0;
i < background.GetEntries();
i++) {
313 background.GetEntry(
i);
314 if(!((
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])))
continue;
317 if(!((
fabs(evtTrueNuPdg)==14)||(
fabs(evtTrueNuPdg)==12)))
continue;
318 if(
i%2==1&&evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])nbNumuCC0++;
319 if(
i%2==1&&evtTrueNuCCNC==1&&((
fabs(evtTrueNuPdg)==14)||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])))nbNC0++;
320 if(
i%2==1&&evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])nbNueCC0++;
322 if(!(evtSh1NPlane>-15&&evtSh1Energy>0.0))
continue;
325 if(
i%2==1&&evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])nbNumuCC1++;
326 if(
i%2==1&&evtTrueNuCCNC==1&&((
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])))nbNC1++;
327 if(
i%2==1&&evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])nbNueCC1++;
330 if(evtSh1DedxLLL[0] - evtSh1DedxLLL[2]<-0.2)
continue;
336 if(
i%2==1&&evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])nbNumuCC2++;
337 if(
i%2==1&&evtTrueNuCCNC==1&&((
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])))nbNC2++;
338 if(
i%2==1&&evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])nbNueCC2++;
339 if(evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==12)
continue;
342 if((
double)
i>(
double)background.GetEntries()*rbg)
continue;
344 egLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[1];
345 egLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[1];
346 emuLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[2];
347 emuLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[2];
348 epi0LLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[3];
349 epi0LLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[3];
350 epLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[4];
351 epLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[4];
352 enLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[5];
353 enLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[5];
354 epiLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[6];
355 epiLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[6];
357 pi0mass =
MAX(evtSh1Pi0Mgg,0);
358 vtxgev = evtSh1VtxGeV;
360 costheta = evtSh1CosTheta;
361 length = evtSh1Length/evtSh1Energy;
362 shE = evtSh1Energy/evtEtot;
367 cout<<
"Nsig, Nbig, totBkg, scaleBkg "<<normSig<<
" "<<normBkg<<
" "<<
endl;
369 double scalepotsig = 18.0e+20/((ns0/(2.87128765282905034e-02*6938.035))*2.99649003626026520
e+21);
370 double scalepotNumuCC = 18.0e+20/((nbNumuCC0/(6938.035-199.21-5511.0658))*3.02657807308939830
e+21);
371 double scalepotNueCC = 18.0e+20/((nbNueCC0/82.02)*3.02657807308939830e+21);
372 double scalepotNC = 18.0e+20/((nbNC0/2664.42968)*3.02657807308939830e+21);
373 cout<<
"nbNumuCC0, scalepotNumuCC "<<nbNumuCC0<<
" "<<scalepotNumuCC<<
endl;
388 TMultiLayerPerceptron *mlp =
389 new TMultiLayerPerceptron(
"@egLLL,@egLLT,@emuLLL,@emuLLT,@epi0LLL,@epi0LLT,@epLLL,@epLLT,@enLLL,@enLLT,@epiLLL,@epiLLT,@pi0mass,@shE,@vtxgev,@gap,@costheta:22:12:6:type", simu,
"Entry$%2",
"(Entry$+1)%2");
401 mlp->Train(ntrain,
"text,graph,update=10");
402 mlp->DumpWeights(
"weights_shape_fd_elec_140809.txt");
403 mlp->Export(
"test",
"python");
405 TCanvas* mlpa_canvas1 =
new TCanvas(
"mlpa_canvas1",
"Network analysis 1", 10,10, 1200,600);
406 mlpa_canvas1->Divide(2,1);
407 TMLPAnalyzer
ana(mlp);
409 ana.GatherInformations();
418 mlpa_canvas1->Update();
420 TCanvas* mlpa_canvas2 =
new TCanvas(
"mlpa_canvas2",
"Network analysis 2", 10,10, 1200,600);
421 mlpa_canvas2->Divide(2,1);
424 ana.DrawNetwork(0,
"type==1",
"type==0");
431 TH1F *bg =
new TH1F(
"bgh",
"NN output", 50, -.5, 1.5);
432 TH1F *bgNumuCC =
new TH1F(
"bgNumuCC",
"NN output", 50, -.5, 1.5);
433 TH1F *bgNC =
new TH1F(
"bgNC",
"NN output", 50, -.5, 1.5);
434 TH1F *bgNueCC=
new TH1F(
"bgNueCC",
"NN output", 50, -.5, 1.5);
436 TH1F *sig =
new TH1F(
"sigh",
"NN output", 50, -.5, 1.5);
437 TH1F *sigbg =
new TH1F(
"sigbgh",
"NN output", 50, -.5, 1.5);
447 for (
int i = 0;
i < background.GetEntries();
i++) {
451 background.GetEntry(
i);
452 if(!((
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])))
continue;
453 if(!(evtSh1NPlane>-15&&evtSh1Energy>0.0))
continue;
454 if(evtSh1DedxLLL[0] - evtSh1DedxLLL[2]<-0.2)
continue;
458 if(!(evtSh1NueEnergy>Elow&&evtSh1NueEnergy<Ehigh))
continue;
463 params[0] = evtSh1DedxLLL[0] - evtSh1DedxLLL[1];
464 params[1] = evtSh1DedxLLT[0] - evtSh1DedxLLT[1];
465 params[2] = evtSh1DedxLLL[0] - evtSh1DedxLLL[2];
466 params[3] = evtSh1DedxLLT[0] - evtSh1DedxLLT[2];
467 params[4] = evtSh1DedxLLL[0] - evtSh1DedxLLL[3];
468 params[5] = evtSh1DedxLLT[0] - evtSh1DedxLLT[3];
469 params[6] = evtSh1DedxLLL[0] - evtSh1DedxLLL[4];
470 params[7] = evtSh1DedxLLT[0] - evtSh1DedxLLT[4];
471 params[8] = evtSh1DedxLLL[0] - evtSh1DedxLLL[5];
472 params[9] = evtSh1DedxLLT[0] - evtSh1DedxLLT[5];
473 params[10] = evtSh1DedxLLL[0] - evtSh1DedxLLL[6];
474 params[11] = evtSh1DedxLLT[0] - evtSh1DedxLLT[6];
475 params[12] =
MAX(evtSh1Pi0Mgg,0);
476 params[13] = evtSh1Energy/evtEtot;
477 params[14] = evtSh1VtxGeV;
478 params[15] = evtSh1Gap;
480 params[16] = evtSh1CosTheta;
498 if(evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2]){
499 bgNumuCC->Fill(mlp->Evaluate(0, params), scalepotNumuCC);
500 bg->Fill(mlp->Evaluate(0, params), scalepotNumuCC);
502 if(evtTrueNuCCNC==1&&((
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1]))){
503 bgNC->Fill(mlp->Evaluate(0, params), scalepotNC);
504 bg->Fill(mlp->Evaluate(0, params), scalepotNC);
506 if(evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1]){
507 bgNueCC->Fill(mlp->Evaluate(0, params), scalepotNueCC);
508 bg->Fill(mlp->Evaluate(0, params), scalepotNueCC);
512 for (
int i = 0;
i < signal.GetEntries();
i++) {
516 if(!(evtTrueNuCCNC==0&&evtTrueNuPdg==12&&(evtRwRand[0]>0&&evtRwRand[0]<evtRwProb[0])))
continue;
518 if(!(evtSh1NPlane>-15&&evtSh1Energy>0.0))
continue;
521 if(evtSh1DedxLLL[0] - evtSh1DedxLLL[2]<-0.2)
continue;
525 if(!(evtSh1NueEnergy>Elow&&evtSh1NueEnergy<Ehigh))
continue;
530 params[0] = evtSh1DedxLLL[0] - evtSh1DedxLLL[1];
531 params[1] = evtSh1DedxLLT[0] - evtSh1DedxLLT[1];
532 params[2] = evtSh1DedxLLL[0] - evtSh1DedxLLL[2];
533 params[3] = evtSh1DedxLLT[0] - evtSh1DedxLLT[2];
534 params[4] = evtSh1DedxLLL[0] - evtSh1DedxLLL[3];
535 params[5] = evtSh1DedxLLT[0] - evtSh1DedxLLT[3];
536 params[6] = evtSh1DedxLLL[0] - evtSh1DedxLLL[4];
537 params[7] = evtSh1DedxLLT[0] - evtSh1DedxLLT[4];
538 params[8] = evtSh1DedxLLL[0] - evtSh1DedxLLL[5];
539 params[9] = evtSh1DedxLLT[0] - evtSh1DedxLLT[5];
540 params[10] = evtSh1DedxLLL[0] - evtSh1DedxLLL[6];
541 params[11] = evtSh1DedxLLT[0] - evtSh1DedxLLT[6];
542 params[12] =
MAX(evtSh1Pi0Mgg,0);
543 params[13] = evtSh1Energy/evtEtot;
544 params[14] = evtSh1VtxGeV;
545 params[15] = evtSh1Gap;
546 params[16] = evtSh1CosTheta;
564 sig->Fill(mlp->Evaluate(0,params),scalepotsig);
565 if(
fabs(evtSh1TruePdg)!=11)sigbg->Fill(mlp->Evaluate(0,params),scalepotsig);
570 TH1F *hfom =
new TH1F(
"hfom",
"NN output", 50, -.5, 1.5);
571 TH1F *heff =
new TH1F(
"heff",
"NN output", 50, -.5, 1.5);
572 TH1F *hbgeff =
new TH1F(
"hbgeff",
"NN output", 50, -.5, 1.5);
573 TH1F *hbgNumuCCeff =
new TH1F(
"hbgNumuCCeff",
"NN output", 50, -.5, 1.5);
574 TH1F *hbgNCeff =
new TH1F(
"hbgNCeff",
"NN output", 50, -.5, 1.5);
575 TH1F *hbgNueCCeff =
new TH1F(
"hbgNueCCeff",
"NN output", 50, -.5, 1.5);
576 for(
int i=0;
i<50;
i++){
577 double sumnbg = bg->Integral(
i+1, 50);
578 double sumnbgNueCC = bgNueCC->Integral(
i+1, 50);
579 double sumnsig = sig->Integral(
i+1, 50);
580 double eff = double(sig->Integral(
i+1, 50))/
double(sig->Integral(1, 50));
581 double bgeff = double(bg->Integral(
i+1, 50))/
double(bg->Integral(1, 50));
582 double bgNumuCCeff = double(bgNumuCC->Integral(
i+1, 50))/
double(bgNumuCC->Integral(1, 50));
583 double bgNCeff = double(bgNC->Integral(
i+1, 50))/
double(bgNC->Integral(1, 50));
584 double bgNueCCeff = double(bgNueCC->Integral(
i+1, 50))/
double(bgNueCC->Integral(1, 50));
585 heff->SetBinContent(
i+1,eff);
586 hbgeff->SetBinContent(
i+1,bgeff);
587 hbgNumuCCeff->SetBinContent(
i+1,bgNumuCCeff);
588 hbgNCeff->SetBinContent(
i+1,bgNCeff);
589 hbgNueCCeff->SetBinContent(
i+1,bgNueCCeff);
590 if(sumnsig+sumnbg-sumnbgNueCC<0.000001){
591 hfom->SetBinContent(
i+1,0);
594 double significance = 0;
595 if(sumnsig+sumnbg-sumnbgNueCC>0) significance = double(sumnsig)/
sqrt(sumnsig+sumnbg-sumnbgNueCC);
597 cout<<
"FOM, sig, bkg "<<significance<<
" "<<sumnsig<<
" "<<sumnbg<<
" "<<
endl;
598 hfom->SetBinContent(
i+1,significance);
601 bg->SetLineColor(
kBlue);
604 sig->SetLineColor(
kRed);
605 sig->SetFillStyle(3003);
606 sig->SetFillColor(
kRed);
613 TLegend *
legend =
new TLegend(.75, .80, .95, .95);
614 legend->AddEntry(bg,
"Background (nhc)");
615 legend->AddEntry(sig,
"Signal (Nue_CCQE)");
618 mlpa_canvas2->Update();
620 cout<<
"scalepotsig "<<scalepotsig<<
endl;
621 cout<<
"scalepotNumuCC "<<scalepotNumuCC<<
endl;
622 cout<<
"scalepotNC "<<scalepotNC<<
endl;
623 cout<<
"scalepotNueCC "<<scalepotNueCC<<
endl;
625 TCanvas* mlpa_canvas3 =
new TCanvas(
"mlpa_canvas3",
"Network analysis 3", 10,10, 800,400);
626 mlpa_canvas3->Divide(2,1);
628 hfom->GetYaxis()->SetTitle(
"FOM");
629 hfom->GetXaxis()->SetTitle(
"ANN");
630 hfom->GetXaxis()->SetRangeUser(0.4,1.2);
632 line1 =
new TLine(hfom->GetBinCenter(hfom->GetMaximumBin()),0,hfom->GetBinCenter(hfom->GetMaximumBin()),hfom->GetMaximum());
633 line1->SetLineWidth(4);
634 line1->SetLineColor(
kRed);
637 mlpa_canvas3->Update();
640 heff->GetYaxis()->SetTitle(
"PID Eff.");
641 heff->GetXaxis()->SetTitle(
"ANN");
642 heff->GetYaxis()->SetRangeUser(0,1);
643 heff->GetXaxis()->SetRangeUser(0.4,1.2);
645 line2 =
new TLine(hfom->GetBinCenter(hfom->GetMaximumBin()),0,hfom->GetBinCenter(hfom->GetMaximumBin()),1.0);
646 line2->SetLineWidth(4);
647 line2->SetLineColor(
kRed);
650 mlpa_canvas3->Update();
652 TCanvas* mlpa_canvas4 =
new TCanvas(
"mlpa_canvas4",
"Network analysis 4", 10,10, 600,400);
653 mlpa_canvas4->Divide(1,1);
655 bg->GetYaxis()->SetTitle(
"Events");
656 bg->GetXaxis()->SetTitle(
"ANN");
657 bg->SetLineColor(
kBlue);
658 bgNumuCC->SetLineColor(9);
659 bgNC->SetLineColor(7);
660 bgNueCC->SetLineColor(6);
661 sig->SetLineColor(
kRed);
662 sig->SetFillStyle(3003);
663 sig->SetFillColor(
kRed);
668 bgNumuCC->Draw(
"same");
670 bgNueCC->Draw(
"same");
673 TLegend *legend =
new TLegend(.75, .80, .95, .95);
674 legend->AddEntry(bg,
"Background (nhc)");
675 legend->AddEntry(bgNumuCC,
"Beam #nu_{#mu} CC");
676 legend->AddEntry(bgNC,
"Beam NC");
677 legend->AddEntry(bgNueCC,
"Beam #nu_{e} CC");
678 legend->AddEntry(sig,
"Signal #nu_{e} CC");
680 mlpa_canvas4->Update();
685 for (
int i = 0;
i < signal.GetEntries();
i++) {
689 if(!(evtTrueNuCCNC==0&&evtTrueNuPdg==12&&(evtRwRand[0]>0&&evtRwRand[0]<evtRwProb[0])))
continue;
692 if(!(evtSh1Energy>0.0))
continue;
693 if(evtSh1DedxLLL[0] - evtSh1DedxLLL[2]<-0.2)
continue;
696 if(!(evtSh1NueEnergy>Elow&&evtSh1NueEnergy<Ehigh))
continue;
698 egLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[1];
699 egLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[1];
700 emuLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[2];
701 emuLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[2];
702 epi0LLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[3];
703 epi0LLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[3];
704 epLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[4];
705 epLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[4];
706 enLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[5];
707 enLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[5];
708 epiLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[6];
709 epiLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[6];
712 costheta = evtSh1CosTheta;
713 length = evtSh1Length/evtSh1Energy;
714 shE = evtSh1Energy/evtEtot;
715 pi0mass =
MAX(evtSh1Pi0Mgg,0);
716 annPi0LineDist = evtPi0LineDist;
717 annPi0StartDist = evtPi0StartDist;
719 params[0] = evtSh1DedxLLL[0] - evtSh1DedxLLL[1];
720 params[1] = evtSh1DedxLLT[0] - evtSh1DedxLLT[1];
721 params[2] = evtSh1DedxLLL[0] - evtSh1DedxLLL[2];
722 params[3] = evtSh1DedxLLT[0] - evtSh1DedxLLT[2];
723 params[4] = evtSh1DedxLLL[0] - evtSh1DedxLLL[3];
724 params[5] = evtSh1DedxLLT[0] - evtSh1DedxLLT[3];
725 params[6] = evtSh1DedxLLL[0] - evtSh1DedxLLL[4];
726 params[7] = evtSh1DedxLLT[0] - evtSh1DedxLLT[4];
727 params[8] = evtSh1DedxLLL[0] - evtSh1DedxLLL[5];
728 params[9] = evtSh1DedxLLT[0] - evtSh1DedxLLT[5];
729 params[10] = evtSh1DedxLLL[0] - evtSh1DedxLLL[6];
730 params[11] = evtSh1DedxLLT[0] - evtSh1DedxLLT[6];
731 params[12] =
MAX(evtSh1Pi0Mgg,0);
732 params[13] = evtSh1Energy/evtEtot;
733 params[14] = evtSh1VtxGeV;
734 params[15] = evtSh1Gap;
735 params[16] = evtSh1CosTheta;
741 trueNuE = evtTrueNuEnergy;
744 sh1Energy = evtSh1Energy;
745 ANN = mlp->Evaluate(0,params);
749 if(ANN<hfom->GetBinCenter(hfom->GetMaximumBin()))
continue;
758 for (
int i = 0;
i < background.GetEntries();
i++) {
762 background.GetEntry(
i);
763 if(!((
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])))
continue;
765 if(!(evtSh1Energy>0.0))
continue;
766 if(evtSh1DedxLLL[0] - evtSh1DedxLLL[2]<-0.2)
continue;
769 if(!(evtSh1NueEnergy>Elow&&evtSh1NueEnergy<Ehigh))
continue;
771 egLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[1];
772 egLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[1];
773 emuLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[2];
774 emuLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[2];
775 epi0LLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[3];
776 epi0LLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[3];
777 epLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[4];
778 epLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[4];
779 enLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[5];
780 enLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[5];
781 epiLLL = evtSh1DedxLLL[0] - evtSh1DedxLLL[6];
782 epiLLT = evtSh1DedxLLT[0] - evtSh1DedxLLT[6];
785 costheta = evtSh1CosTheta;
786 length = evtSh1Length/evtSh1Energy;
787 shE = evtSh1Energy/evtEtot;
788 pi0mass =
MAX(evtSh1Pi0Mgg,0);
789 annPi0LineDist = evtPi0LineDist;
790 annPi0StartDist = evtPi0StartDist;
794 params[0] = evtSh1DedxLLL[0] - evtSh1DedxLLL[1];
795 params[1] = evtSh1DedxLLT[0] - evtSh1DedxLLT[1];
796 params[2] = evtSh1DedxLLL[0] - evtSh1DedxLLL[2];
797 params[3] = evtSh1DedxLLT[0] - evtSh1DedxLLT[2];
798 params[4] = evtSh1DedxLLL[0] - evtSh1DedxLLL[3];
799 params[5] = evtSh1DedxLLT[0] - evtSh1DedxLLT[3];
800 params[6] = evtSh1DedxLLL[0] - evtSh1DedxLLL[4];
801 params[7] = evtSh1DedxLLT[0] - evtSh1DedxLLT[4];
802 params[8] = evtSh1DedxLLL[0] - evtSh1DedxLLL[5];
803 params[9] = evtSh1DedxLLT[0] - evtSh1DedxLLT[5];
804 params[10] = evtSh1DedxLLL[0] - evtSh1DedxLLL[6];
805 params[11] = evtSh1DedxLLT[0] - evtSh1DedxLLT[6];
806 params[12] =
MAX(evtSh1Pi0Mgg,0);
807 params[13] = evtSh1Energy/evtEtot;
808 params[14] = evtSh1VtxGeV;
809 params[15] = evtSh1Gap;
810 params[16] = evtSh1CosTheta;
816 trueNuE = evtTrueNuEnergy;
819 sh1Energy = evtSh1Energy;
820 ANN = mlp->Evaluate(0,params);
823 if(evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])wBkg=scalepotNumuCC;
824 if(evtTrueNuCCNC==1&&((
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])))wBkg=scalepotNC;
825 if(evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])wBkg=scalepotNueCC;
828 if(ANN<hfom->GetBinCenter(hfom->GetMaximumBin()))
continue;
833 if(evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])nbNumuCC3++;
834 if(evtTrueNuCCNC==1&&((
fabs(evtTrueNuPdg)==14&&evtRwRand[2]>0&&evtRwRand[2]<evtRwProb[2])||(
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])))nbNC3++;
835 if(evtTrueNuCCNC==0&&
fabs(evtTrueNuPdg)==12&&evtRwRand[1]>0&&evtRwRand[1]<evtRwProb[1])nbNueCC3++;
838 cout<<
"nbNumuCC3 "<<nbNumuCC3<<
endl;
842 TFile
f(
"ann.root",
"recreate");
843 annMC->Write(
"annMC");
846 std::cout<<
"ns0,ns1,ns2,ns3,scalepotsig "<<ns0<<
" "<<ns1<<
" "<<ns2<<
" "<<ns3<<
" "<<scalepotsig<<
endl;
847 double Dns0 = double(ns0*scalepotsig);
848 double Dns1 = double(ns1*scalepotsig);
849 double Dns2 = double(ns2*scalepotsig);
850 double Dns3 = double(ns3*scalepotsig);
852 double DnbNumuCC0 = double(nbNumuCC0*scalepotNumuCC);
853 double DnbNumuCC1 = double(nbNumuCC1*scalepotNumuCC);
854 double DnbNumuCC2 = double(nbNumuCC2*scalepotNumuCC);
855 double DnbNumuCC3 = double(nbNumuCC3*scalepotNumuCC);
857 double DnbNC0 = double(nbNC0*scalepotNC);
858 double DnbNC1 = double(nbNC1*scalepotNC);
859 double DnbNC2 = double(nbNC2*scalepotNC);
860 double DnbNC3 = double(nbNC3*scalepotNC);
862 double DnbNueCC0 = double(nbNueCC0*scalepotNueCC);
863 double DnbNueCC1 = double(nbNueCC1*scalepotNueCC);
864 double DnbNueCC2 = double(nbNueCC2*scalepotNueCC);
865 double DnbNueCC3 = double(nbNueCC3*scalepotNueCC);
867 double Dnb0 = double(DnbNumuCC0+DnbNC0+DnbNueCC0);
868 double Dnb1 = double(DnbNumuCC1+DnbNC1+DnbNueCC1);
869 double Dnb2 = double(DnbNumuCC2+DnbNC2+DnbNueCC2);
870 double Dnb3 = double(DnbNumuCC3+DnbNC3+DnbNueCC3);
875 cout<<
"Scaled sig "<<Dns0<<
" "<<Dns1<<
" "<<Dns2<<
" "<<Dns3<<
endl;
876 cout<<
"Scaled bg "<<Dnb0<<
" "<<Dnb1<<
" "<<Dnb2<<
" "<<Dnb3<<
endl;
877 cout<<
"Scaled bg NumuCC"<<DnbNumuCC0<<
" "<<DnbNumuCC1<<
" "<<DnbNumuCC2<<
" "<<DnbNumuCC3<<
endl;
878 cout<<
"Scaled bg NC "<<DnbNC0<<
" "<<DnbNC1<<
" "<<DnbNC2<<
" "<<DnbNC3<<
endl;
879 cout<<
"Scaled bg NueCC "<<DnbNueCC0<<
" "<<DnbNueCC1<<
" "<<DnbNueCC2<<
" "<<DnbNueCC3<<
endl;
881 cout<<
"ANN = "<<hfom->GetBinCenter(hfom->GetMaximumBin())<<endl;
882 cout<<
"FOM hist = "<<hfom->GetBinContent(hfom->GetMaximumBin())<<endl;
884 cout<<
"Eff. = "<<double(Dns3)/double(Dns0)<<
endl;
886 cout<<
"nb2, nb3 "<<nb2<<
" "<<nb3<<
endl;
894 cout<<
"BG Eff . = "<<double(Dnb3)/double(Dnb0)<<
endl;
895 cout<<
"BG NumuCC Eff. = "<<double(DnbNumuCC3)/double(DnbNumuCC0)<<
endl;
896 cout<<
"BG NC Eff. = "<<double(DnbNC3)/double(DnbNC0)<<
endl;
897 cout<<
"BG NueCC Eff. = "<<double(DnbNueCC3)/double(DnbNueCC0)<<
endl;
Cuts and Vars for the 2020 FD DiF Study.
fvar< T > fabs(const fvar< T > &x)
double MAX(double a, double b)
void mlpPIDelecallEtot(Int_t ntrain=600)