20 #include <boost/assign/list_of.hpp>
32 #include "TMultiLayerPerceptron.h"
37 using boost::assign::list_of;
41 : fMaxNofTrainSamples(1500)
43 , fNofWrongLikeCorrect(0)
44 , fNofCorrectLikeWrong(0)
58 , fhAnnOutput_correct(nullptr)
59 , fhAnnOutput_wrong(nullptr)
60 , fhCumProb_correct(nullptr)
61 , fhCumProb_wrong(nullptr) {}
71 double PlaneAngle_last,
76 TMath::Sqrt(Momentum1.X() * Momentum1.X() + Momentum1.Y() * Momentum1.Y()
77 + Momentum1.Z() * Momentum1.Z());
79 TMath::Sqrt(Momentum2.X() * Momentum2.X() + Momentum2.Y() * Momentum2.Y()
80 + Momentum2.Z() * Momentum2.Z());
89 <<
"; wrong = " <<
IM_wrong.size() << endl;
99 if (
IM_correct.size() % 100 == 0 && IdForANN == 1)
101 <<
"; wrong = " <<
IM_wrong.size() << endl;
125 TTree* simu =
new TTree(
"MonteCarlo",
"MontecarloData");
129 simu->Branch(
"x0", &
x[0],
"x0/D");
130 simu->Branch(
"x1", &
x[1],
"x1/D");
131 simu->Branch(
"x2", &
x[2],
"x2/D");
132 simu->Branch(
"x3", &
x[3],
"x3/D");
133 simu->Branch(
"x4", &
x[4],
"x4/D");
134 simu->Branch(
"x5", &
x[5],
"x5/D");
135 simu->Branch(
"xOut", &xOut,
"xOut/D");
145 if (
x[0] > 1.0)
x[0] = 1.0;
146 if (
x[1] > 1.0)
x[1] = 1.0;
147 if (
x[2] > 1.0)
x[2] = 1.0;
148 if (
x[3] > 1.0)
x[3] = 1.0;
149 if (
x[4] > 1.0)
x[4] = 1.0;
150 if (
x[5] > 1.0)
x[5] = 1.0;
164 if (
x[0] > 1.0)
x[0] = 1.0;
165 if (
x[1] > 1.0)
x[1] = 1.0;
166 if (
x[2] > 1.0)
x[2] = 1.0;
167 if (
x[3] > 1.0)
x[3] = 1.0;
168 if (
x[4] > 1.0)
x[4] = 1.0;
169 if (
x[5] > 1.0)
x[5] = 1.0;
176 TMultiLayerPerceptron network(
"x0,x1,x2,x3,x4,x5:12:xOut", simu,
"Entry$+1");
177 network.Train(300,
"text,update=10");
179 "../../../analysis/conversion2/KresAnalysis_ann_photons_weights.txt");
194 if (params[0] > 1.0) params[0] = 1.0;
195 if (params[1] > 1.0) params[1] = 1.0;
196 if (params[2] > 1.0) params[2] = 1.0;
197 if (params[3] > 1.0) params[3] = 1.0;
198 if (params[4] > 1.0) params[4] = 1.0;
199 if (params[5] > 1.0) params[5] = 1.0;
201 Double_t netEval = network.Evaluate(0, params);
213 if (params[0] > 1.0) params[0] = 1.0;
214 if (params[1] > 1.0) params[1] = 1.0;
215 if (params[2] > 1.0) params[2] = 1.0;
216 if (params[3] > 1.0) params[3] = 1.0;
217 if (params[4] > 1.0) params[4] = 1.0;
218 if (params[5] > 1.0) params[5] = 1.0;
220 Double_t netEval = network.Evaluate(0, params);
228 cout <<
"nof correct pairs = " <<
IM_correct.size() << endl;
229 cout <<
"nof wrong pairs = " <<
IM_wrong.size() << endl;
234 <<
", correct lost eff = "
237 Double_t cumProbFake = 0.;
238 Double_t cumProbTrue = 0.;
252 new TCanvas(
"ann_correct_ann_output",
"ann_correct_ann_output", 400, 400);
253 c1->SetTitle(
"ann_correct_ann_output");
257 new TCanvas(
"ann_wrong_ann_output",
"ann_wrong_ann_output", 400, 400);
258 c2->SetTitle(
"ann_wrong_ann_output");
262 new TCanvas(
"ann_correct_cum_prob",
"ann_correct_cum_prob", 400, 400);
263 c3->SetTitle(
"ann_correct_cum_output");
267 new TCanvas(
"ann_wrong_cum_prob",
"ann_wrong_cum_prob", 400, 400);
268 c4->SetTitle(
"ann_wrong_cum_output");
276 "fhAnnOutput_correct",
"ANN output;ANN output;Counter", 100, -1.2, 1.2);
279 "fhAnnOutput_wrong",
"ANN output;ANN output;Counter", 100, -1.2, 1.2);
283 "ANN output;ANN output;Cumulative probability",
289 "ANN output;ANN output;Cumulative probability",