10 #include <boost/algorithm/string/replace.hpp>
21 #include "TObjString.h"
25 #include "TMVA/Factory.h"
26 #include "TMVA/Tools.h"
27 #include "StMuDSTMaker/COMMON/StMuDst.h"
28 #include "StMuDSTMaker/COMMON/StMuEvent.h"
29 #include "StMuDSTMaker/COMMON/StMuTrack.h"
30 #include "StMuDSTMaker/COMMON/StMuPrimaryVertex.h"
31 #include "StMuDSTMaker/COMMON/StMuMcVertex.h"
32 #include "StMuDSTMaker/COMMON/StMuMcTrack.h"
33 #include "StMuDSTMaker/COMMON/StMuPrimaryTrackCovariance.h"
35 #include "StMuDSTMaker/COMMON/StMuDstMaker.h"
39 #include "TMVAClassification_BDT.class.C"
43 const Char_t *
vnames =
"beam:postx:prompt:cross:tof:notof:EEMC:noEEMC:chi2";
51 data.
beam = Vtx->isBeamConstrained() ? 1 : 0;
52 data.
postx = Vtx->nPostXtracks();
53 data.
prompt = Vtx->nPromptTracks();
54 data.
cross = Vtx->nCrossCentralMembrane();
55 data.
tof = (Vtx->nCTBMatch() + Vtx->nBTOFMatch());
56 data.
notof = (Vtx->nCTBNotMatch() + Vtx->nBTOFNotMatch());
57 data.
EEMC = Vtx->nEEMCMatch();
58 data.
noEEMC = Vtx->nEEMCNotMatch();
59 data.
chi2 = Vtx->chiSquared();
64 Bool_t
Accept(
const StMuTrack *gTrack = 0)
66 if (! gTrack)
return kFALSE;
67 if (! gTrack->idTruth())
return kFALSE;
68 if (! gTrack->charge())
return kFALSE;
69 if ( gTrack->flag() < 100 || gTrack->flag() % 100 == 11)
return kFALSE;
70 if ( gTrack->flag() > 1000)
return kFALSE;
71 if ( gTrack->nHitsFit() < 10)
return kFALSE;
78 Bool_t
AcceptVX(
const StMuPrimaryVertex *Vtx = 0)
80 if (! Vtx)
return kFALSE;
81 if (! Vtx->idTruth())
return kFALSE;
82 if ( Vtx->position().perp() > 3.0)
return kFALSE;
91 unsigned int counter = times;
93 while ( (!times || counter) && !gSystem->ProcessEvents()) { --counter;
if (msecDelay) gSystem->Sleep(msecDelay);}
127 void MuMcPrVKFV2012(Long64_t nevent,
const char *file,
const std::string& outFile,
bool fillNtuple)
130 boost::replace_last(outFile,
".root",
"");
131 outFile +=
".TMVArank.root";
136 TString separator(
":");
138 TObjArray *array = Vnames.Tokenize(separator);
140 std::vector<std::string> inputVars;
144 while ((objs = (TObjString *) next())) {
145 std::cout << objs->GetString() << std::endl;
148 inputVars.push_back(
"beam");
149 inputVars.push_back(
"postx");
150 inputVars.push_back(
"prompt");
151 inputVars.push_back(
"cross");
152 inputVars.push_back(
"tof");
153 inputVars.push_back(
"notof");
154 inputVars.push_back(
"EEMC");
155 inputVars.push_back(
"noEEMC");
156 inputVars.push_back(
"chi2");
158 std::vector<double> *inputVec =
new std::vector<double>( inputVars.size() );
159 IClassifierReader *classReader =
new ReadBDT( inputVars );
163 TFile *fOut = TFile::Open(outFile.c_str(),
"recreate");
167 const int nMcRecMult = 75;
168 TArrayD xMult(nMcRecMult + 1);
171 for (
int i = 1; i <= nMcRecMult; i++) {
172 if (xMult[i - 1] < 50) xMult[i] = xMult[i - 1] + 1;
173 else if (xMult[i - 1] < 100) xMult[i] = xMult[i - 1] + 2;
174 else if (xMult[i - 1] < 200) xMult[i] = xMult[i - 1] + 10;
175 else xMult[i] = xMult[i - 1] + 100;
178 TH1D *McRecMulT =
new TH1D(
"McRecMulT",
"Reconstructable multiplicity for trigger Mc Vertex", nMcRecMult, xMult.GetArray());
183 const Name_t HCases[3] = {
184 {
"Any",
"Any vertex matched with MC == 1"},
185 {
"Good",
"The best rank vertex with MC == 1"},
186 {
"Bad",
"The best rank vertex with MC != 1"}
188 const Name_t Plots[4] = {
189 {
"Mult" ,
"the reconstructed (uncorrected) track multiplicity versus Reconstructable multiplicity"},
190 {
"MultQA" ,
"the reconstructed (corrected for QA) track multiplicity versus Reconstructable multiplicity"},
191 {
"McRecMul",
"Reconstructable multiplicity"},
192 {
"YvsX" ,
"Bad versus Good value"}
197 for (
int h = 0; h < 3; h++) {
198 for (
int p = 0; p < 4; p++) {
199 TString Name(Plots[p].Name); Name += HCases[h].Name;
200 TString Title(Plots[p].Title); Title +=
" for "; Title += HCases[h].Title; Title +=
" vertex";
202 if (p < 2) hists[h][p] =
new TH2D(Name, Title, nMcRecMult, xMult.GetArray(), nMcRecMult, xMult.GetArray());
203 else if (p == 2) hists[h][p] =
new TH1D(Name, Title, nMcRecMult, xMult.GetArray());
207 TNtuple *VertexG =
new TNtuple(
"VertexG",
"good vertex & global params info",
vnames);
208 TNtuple *VertexB =
new TNtuple(
"VertexB",
"bad vertex & global params info",
vnames);
210 StMuDstMaker *maker =
new StMuDstMaker(0, 0,
"", file,
"st:MuDst.root", 1e9);
216 maker->SetStatus(
"*", 0);
218 std::vector<std::string> activeBranchNames = {
226 for (
const auto& branchName : activeBranchNames)
227 maker->SetStatus(branchName.c_str(), 1);
229 TChain *tree = maker->chain();
230 Long64_t nentries = tree->GetEntries();
231 nevent = TMath::Min(nevent, nentries);
232 std::cout << nentries <<
" events in chain " << nevent <<
" will be read." << std::endl;
233 tree->SetCacheSize(-1);
234 tree->SetCacheLearnEntries(1);
235 tree->SetCacheEntryRange(0, nevent);
237 for (Long64_t ev = 0; ev < nevent; ev++) {
238 if (maker->Make())
break;
240 StMuDst *muDst = maker->muDst();
241 StMuEvent *muEvent = muDst->event();
242 int referenceMultiplicity = muEvent->refMult();
244 TClonesArray *PrimaryVertices = muDst->primaryVertices();
245 int nPrimaryVertices = PrimaryVertices->GetEntriesFast();
247 TClonesArray *MuMcVertices = muDst->mcArray(0);
248 int nMuMcVertices = MuMcVertices->GetEntriesFast();
250 TClonesArray *MuMcTracks = muDst->mcArray(1);
251 int nMuMcTracks = MuMcTracks->GetEntriesFast();
253 if ( nevent >= 10 && ev %
int(nevent*0.1) == 0 )
255 std::cout <<
"Event #" << ev <<
"\tRun\t" << muEvent->runId()
256 <<
"\tId: " << muEvent->eventId()
257 <<
" refMult= " << referenceMultiplicity
258 <<
"\tPrimaryVertices " << nPrimaryVertices
259 <<
"\t" <<
" " << nMuMcVertices
260 <<
"\t" <<
" " << nMuMcTracks
265 if (! nMuMcVertices || ! nMuMcTracks || nPrimaryVertices <= 0) {
266 std::cout <<
"Ev. " << ev <<
" has no MC information ==> skip it" << std::endl;
267 std::cout <<
"OR no reconstructed verticies found" << std::endl;
272 std::multimap<int, int> Mc2McHitTracks;
274 for (
int m = 0; m < nMuMcTracks; m++) {
275 StMuMcTrack *McTrack = (StMuMcTrack *) MuMcTracks->UncheckedAt(m);
277 if (McTrack->No_tpc_hit() < 15)
continue;
279 Mc2McHitTracks.insert(std::pair<int, int>(McTrack->IdVx(), McTrack->Id()));
283 int nMcTracksWithHits = Mc2McHitTracks.count(1);
287 if (nMcTracksWithHits <= 0)
continue;
290 McRecMulT->Fill(nMcTracksWithHits);
293 std::map<StMuPrimaryVertex *, StMuMcVertex *> reco2McVertices;
294 TArrayF vertexRanks(nPrimaryVertices);
295 int mcMatchedVertexIndex = -1;
296 int vertexMaxMultiplicity = -1;
300 for (
int recoVertexIndex = 0; recoVertexIndex < nPrimaryVertices; recoVertexIndex++)
302 vertexRanks[recoVertexIndex] = -1e10;
304 StMuPrimaryVertex *recoVertex = (StMuPrimaryVertex *) PrimaryVertices->UncheckedAt(recoVertexIndex);
306 if ( !
AcceptVX(recoVertex) )
continue;
309 if (recoVertex->idTruth() < 0 || recoVertex->idTruth() > nMuMcVertices) {
310 std::cout <<
"ERROR: Illegal idTruth " << recoVertex->idTruth() <<
" The track is ignored" << std::endl;
314 StMuMcVertex *mcVertex = (StMuMcVertex *) MuMcVertices->UncheckedAt(recoVertex->idTruth() - 1);
316 if (mcVertex->Id() != recoVertex->idTruth()) {
317 std::cout <<
"ERROR: Mismatched idTruth " << recoVertex->idTruth() <<
" and mcVertex Id " << mcVertex->Id()
318 <<
" The vertex is ignored" << std::endl;
322 reco2McVertices[recoVertex] = mcVertex;
323 vertexRanks[recoVertexIndex] = recoVertex->ranking();
325 if (recoVertex->idTruth() == 1 && recoVertex->noTracks() > vertexMaxMultiplicity)
327 mcMatchedVertexIndex = recoVertexIndex;
328 vertexMaxMultiplicity = recoVertex->noTracks();
334 Float_t *dataArray = &data.beam;
336 for (
size_t j = 0; j < inputVec->size(); j++)
337 (*inputVec)[j] = dataArray[j];
339 vertexRanks[recoVertexIndex] = classReader->GetMvaValue( *inputVec );
345 if (mcMatchedVertexIndex != -1) {
347 StMuPrimaryVertex *recoVertexMatchedMc = (StMuPrimaryVertex*) PrimaryVertices->UncheckedAt(mcMatchedVertexIndex);
349 double nTracks = recoVertexMatchedMc->noTracks();
350 double nTracksQA = nTracks * recoVertexMatchedMc->qaTruth() / 100.;
352 hists[0][0]->Fill(nMcTracksWithHits, nTracks);
353 hists[0][1]->Fill(nMcTracksWithHits, nTracksQA);
354 hists[0][2]->Fill(nMcTracksWithHits);
358 int maxRankVertexIndex = TMath::LocMax(nPrimaryVertices, vertexRanks.GetArray());
360 StMuPrimaryVertex *recoVertexMaxRank = (StMuPrimaryVertex*) PrimaryVertices->UncheckedAt(maxRankVertexIndex);
361 StMuMcVertex *mcVertex = reco2McVertices[recoVertexMaxRank];
363 double nTracks = recoVertexMaxRank->noTracks();
364 double nTracksQA = nTracks * recoVertexMaxRank->qaTruth() / 100.;
367 int h = ( mcVertex && mcVertex->Id() == 1) ? 1 : 2;
369 hists[h][0]->Fill(nMcTracksWithHits, nTracks);
370 hists[h][1]->Fill(nMcTracksWithHits, nTracksQA);
371 hists[h][2]->Fill(nMcTracksWithHits);
375 if ( !fillNtuple )
continue;
379 for (
int recoVertexIndex = 0; recoVertexIndex < nPrimaryVertices; recoVertexIndex++)
381 StMuPrimaryVertex *recoVertex = (StMuPrimaryVertex *) PrimaryVertices->UncheckedAt(recoVertexIndex);
383 if ( !
AcceptVX(recoVertex) )
continue;
385 StMuMcVertex *mcVertex = reco2McVertices[recoVertex];
388 std::cout <<
"No Match from RC to MC" << std::endl;
392 if (vtxeval::gDebugFlag) {
393 std::cout << Form(
"Vx[%3i]", recoVertexIndex) << *recoVertex <<
" " << *mcVertex;
394 int nMcTracksWithHitsatL = Mc2McHitTracks.count(recoVertex->idTruth());
395 std::cout << Form(
"Number of McTkHit %4i rank %8.3f", nMcTracksWithHitsatL, vertexRanks[recoVertexIndex]);
398 int IdPar = mcVertex->IdParTrk();
400 if (IdPar > 0 && IdPar <= nMuMcTracks) {
401 StMuMcTrack *mcTrack = (StMuMcTrack *) MuMcTracks->UncheckedAt(IdPar - 1);
403 if (mcTrack && vtxeval::gDebugFlag) std::cout <<
" " << mcTrack->GeName();
408 double nTracks = recoVertex->noTracks();
410 if (mcVertex->Id() == 1 && nTracks == vertexMaxMultiplicity) {
411 VertexG->Fill(&data.beam);
414 VertexB->Fill(&data.beam);
418 if ( !gROOT->IsBatch() ) {
419 if (vtxeval::ask_user())
return;
421 else { vtxeval::gDebugFlag =
false; }
458 TTree *signal = (TTree *)gDirectory->Get(
"VertexG");
460 if (! signal) { std::cout <<
"No signal TTree" << std::endl;
return;}
462 TTree *background = (TTree *)gDirectory->Get(
"VertexB");
464 if (! background) { std::cout <<
"No background TTree" << std::endl;
return;}
468 TMVA::Tools::Instance();
471 std::map<std::string, int> Use;
481 Use[
"Likelihood"] = 1;
482 Use[
"LikelihoodD"] = 0;
483 Use[
"LikelihoodPCA"] = 1;
484 Use[
"LikelihoodKDE"] = 0;
485 Use[
"LikelihoodMIX"] = 0;
492 Use[
"PDEFoamBoost"] = 0;
499 Use[
"BoostedFisher"] = 0;
532 std::cout << std::endl;
533 std::cout <<
"==> Start TMVAClassification" << std::endl;
536 if (myMethodList !=
"") {
537 for (std::map<std::string, int>::iterator it = Use.begin(); it != Use.end(); it++) it->second = 0;
539 std::vector<TString> mlist = TMVA::gTools().SplitString( myMethodList,
',' );
541 for (
size_t i = 0; i < mlist.size(); i++) {
542 std::string regMethod(mlist[i]);
544 if (Use.find(regMethod) == Use.end()) {
545 std::cout <<
"Method \"" << regMethod <<
"\" not known in TMVA under this name. Choose among the following:" << std::endl;
547 for (std::map<std::string, int>::iterator it = Use.begin(); it != Use.end(); it++) std::cout << it->first <<
" ";
549 std::cout << std::endl;
562 TString outfileName(
"TMVA.root" );
563 TFile *outputFile = TFile::Open( outfileName,
"RECREATE" );
575 TMVA::Factory *factory =
new TMVA::Factory(
"TMVAClassification", outputFile,
576 "!V:!Silent:Color:DrawProgressBar:Transformations=I;D;P;G,D:AnalysisType=Classification" );
585 std::cout <<
" starts ... " << std::endl;
588 double signalWeight = 1.0;
589 double backgroundWeight = 1.0;
591 std::cout <<
" signalWeight = " << signalWeight <<
" backWeight = " << backgroundWeight << std::endl;
592 factory->AddSignalTree( signal, signalWeight );
593 factory->AddBackgroundTree( background, backgroundWeight );
595 TString separator(
":");
597 TObjArray *array = Vnames.Tokenize(separator);
599 std::vector<std::string> inputVars;
603 while ((objs = (TObjString *) next())) {
605 TString name(objs->GetString());
607 if (name ==
"BEMC")
continue;
609 if (name ==
"noBEMC")
continue;
611 factory->AddVariable(name,
'F');
632 factory->PrepareTrainingAndTestTree( mycuts, mycutb,
"nTrain_Signal=4900:nTrain_Background=49000:nTest_Signal=4900:nTest_Background=49000:SplitMode=Random:!V");
644 factory->BookMethod( TMVA::Types::kCuts,
"Cuts",
645 "!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart" );
648 factory->BookMethod( TMVA::Types::kCuts,
"CutsD",
649 "!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=Decorrelate" );
652 factory->BookMethod( TMVA::Types::kCuts,
"CutsPCA",
653 "!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=PCA" );
656 factory->BookMethod( TMVA::Types::kCuts,
"CutsGA",
657 "H:!V:FitMethod=GA:CutRangeMin[0]=-10:CutRangeMax[0]=10:VarProp[1]=FMax:EffSel:Steps=30:Cycles=3:PopSize=400:SC_steps=10:SC_rate=5:SC_factor=0.95" );
660 factory->BookMethod( TMVA::Types::kCuts,
"CutsSA",
661 "!H:!V:FitMethod=SA:EffSel:MaxCalls=150000:KernelTemp=IncAdaptive:InitialTemp=1e+6:MinTemp=1e-6:Eps=1e-10:UseDefaultScale" );
664 if (Use[
"Likelihood"])
665 factory->BookMethod( TMVA::Types::kLikelihood,
"Likelihood",
666 "H:!V:TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmoothBkg[1]=10:NSmooth=1:NAvEvtPerBin=50" );
669 if (Use[
"LikelihoodD"])
670 factory->BookMethod( TMVA::Types::kLikelihood,
"LikelihoodD",
671 "!H:!V:TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmooth=5:NAvEvtPerBin=50:VarTransform=Decorrelate" );
674 if (Use[
"LikelihoodPCA"])
675 factory->BookMethod( TMVA::Types::kLikelihood,
"LikelihoodPCA",
676 "!H:!V:!TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmooth=5:NAvEvtPerBin=50:VarTransform=PCA" );
679 if (Use[
"LikelihoodKDE"])
680 factory->BookMethod( TMVA::Types::kLikelihood,
"LikelihoodKDE",
681 "!H:!V:!TransformOutput:PDFInterpol=KDE:KDEtype=Gauss:KDEiter=Adaptive:KDEFineFactor=0.3:KDEborder=None:NAvEvtPerBin=50" );
684 if (Use[
"LikelihoodMIX"])
685 factory->BookMethod( TMVA::Types::kLikelihood,
"LikelihoodMIX",
686 "!H:!V:!TransformOutput:PDFInterpolSig[0]=KDE:PDFInterpolBkg[0]=KDE:PDFInterpolSig[1]=KDE:PDFInterpolBkg[1]=KDE:PDFInterpolSig[2]=Spline2:PDFInterpolBkg[2]=Spline2:PDFInterpolSig[3]=Spline2:PDFInterpolBkg[3]=Spline2:KDEtype=Gauss:KDEiter=Nonadaptive:KDEborder=None:NAvEvtPerBin=50" );
693 factory->BookMethod( TMVA::Types::kPDERS,
"PDERS",
694 "!H:!V:NormTree=T:VolumeRangeMode=Adaptive:KernelEstimator=Gauss:GaussSigma=0.3:NEventsMin=400:NEventsMax=600" );
697 factory->BookMethod( TMVA::Types::kPDERS,
"PDERSD",
698 "!H:!V:VolumeRangeMode=Adaptive:KernelEstimator=Gauss:GaussSigma=0.3:NEventsMin=400:NEventsMax=600:VarTransform=Decorrelate" );
701 factory->BookMethod( TMVA::Types::kPDERS,
"PDERSPCA",
702 "!H:!V:VolumeRangeMode=Adaptive:KernelEstimator=Gauss:GaussSigma=0.3:NEventsMin=400:NEventsMax=600:VarTransform=PCA" );
706 factory->BookMethod( TMVA::Types::kPDEFoam,
"PDEFoam",
707 "!H:!V:SigBgSeparate=F:TailCut=0.001:VolFrac=0.0666:nActiveCells=500:nSampl=2000:nBin=5:Nmin=100:Kernel=None:Compress=T" );
709 if (Use[
"PDEFoamBoost"])
710 factory->BookMethod( TMVA::Types::kPDEFoam,
"PDEFoamBoost",
711 "!H:!V:Boost_Num=30:Boost_Transform=linear:SigBgSeparate=F:MaxDepth=4:UseYesNoCell=T:DTLogic=MisClassificationError:FillFoamWithOrigWeights=F:TailCut=0:nActiveCells=500:nBin=20:Nmin=400:Kernel=None:Compress=T" );
715 factory->BookMethod( TMVA::Types::kKNN,
"KNN",
716 "H:nkNN=20:ScaleFrac=0.8:SigmaFact=1.0:Kernel=Gaus:UseKernel=F:UseWeight=T:!Trim" );
720 factory->BookMethod( TMVA::Types::kHMatrix,
"HMatrix",
"!H:!V:VarTransform=None" );
724 factory->BookMethod( TMVA::Types::kLD,
"LD",
"H:!V:VarTransform=None:CreateMVAPdfs:PDFInterpolMVAPdf=Spline2:NbinsMVAPdf=50:NsmoothMVAPdf=10" );
728 factory->BookMethod( TMVA::Types::kFisher,
"Fisher",
"H:!V:Fisher:VarTransform=None:CreateMVAPdfs:PDFInterpolMVAPdf=Spline2:NbinsMVAPdf=50:NsmoothMVAPdf=10" );
732 factory->BookMethod( TMVA::Types::kFisher,
"FisherG",
"H:!V:VarTransform=Gauss" );
735 if (Use[
"BoostedFisher"])
736 factory->BookMethod( TMVA::Types::kFisher,
"BoostedFisher",
737 "H:!V:Boost_Num=20:Boost_Transform=log:Boost_Type=AdaBoost:Boost_AdaBoostBeta=0.2:!Boost_DetailedMonitoring" );
741 factory->BookMethod( TMVA::Types::kFDA,
"FDA_MC",
742 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=MC:SampleSize=100000:Sigma=0.1" );
745 factory->BookMethod( TMVA::Types::kFDA,
"FDA_GA",
746 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=GA:PopSize=300:Cycles=3:Steps=20:Trim=True:SaveBestGen=1" );
749 factory->BookMethod( TMVA::Types::kFDA,
"FDA_SA",
750 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=SA:MaxCalls=15000:KernelTemp=IncAdaptive:InitialTemp=1e+6:MinTemp=1e-6:Eps=1e-10:UseDefaultScale" );
753 factory->BookMethod( TMVA::Types::kFDA,
"FDA_MT",
754 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=MINUIT:ErrorLevel=1:PrintLevel=-1:FitStrategy=2:UseImprove:UseMinos:SetBatch" );
757 factory->BookMethod( TMVA::Types::kFDA,
"FDA_GAMT",
758 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=GA:Converger=MINUIT:ErrorLevel=1:PrintLevel=-1:FitStrategy=0:!UseImprove:!UseMinos:SetBatch:Cycles=1:PopSize=5:Steps=5:Trim" );
761 factory->BookMethod( TMVA::Types::kFDA,
"FDA_MCMT",
762 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=MC:Converger=MINUIT:ErrorLevel=1:PrintLevel=-1:FitStrategy=0:!UseImprove:!UseMinos:SetBatch:SampleSize=20" );
766 factory->BookMethod( TMVA::Types::kMLP,
"MLP",
"H:!V:NeuronType=tanh:VarTransform=N:NCycles=600:HiddenLayers=N+5:TestRate=5:!UseRegulator" );
769 factory->BookMethod( TMVA::Types::kMLP,
"MLPBFGS",
"H:!V:NeuronType=tanh:VarTransform=N:NCycles=600:HiddenLayers=N+5:TestRate=5:TrainingMethod=BFGS:!UseRegulator" );
772 factory->BookMethod( TMVA::Types::kMLP,
"MLPBNN",
"H:!V:NeuronType=tanh:VarTransform=N:NCycles=600:HiddenLayers=N+5:TestRate=5:TrainingMethod=BFGS:UseRegulator" );
776 factory->BookMethod( TMVA::Types::kCFMlpANN,
"CFMlpANN",
"!H:!V:NCycles=2000:HiddenLayers=N+1,N" );
780 factory->BookMethod( TMVA::Types::kTMlpANN,
"TMlpANN",
"!H:!V:NCycles=200:HiddenLayers=N+1,N:LearningMethod=BFGS:ValidationFraction=0.3" );
784 factory->BookMethod( TMVA::Types::kSVM,
"SVM",
"Gamma=0.25:Tol=0.001:VarTransform=Norm" );
788 factory->BookMethod( TMVA::Types::kBDT,
"BDTG",
789 "!H:!V:NTrees=1000:BoostType=Grad:Shrinkage=0.10:UseBaggedGrad:GradBaggingFraction=0.5:nCuts=20:NNodesMax=5" );
792 factory->BookMethod( TMVA::Types::kBDT,
"BDT",
793 "!H:!V:NTrees=850:nEventsMin=150:MaxDepth=3:BoostType=AdaBoost:AdaBoostBeta=0.5:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning" );
797 factory->BookMethod( TMVA::Types::kBDT,
"BDTB",
798 "!H:!V:NTrees=400:BoostType=Bagging:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning" );
801 factory->BookMethod( TMVA::Types::kBDT,
"BDTD",
802 "!H:!V:NTrees=400:nEventsMin=400:MaxDepth=3:BoostType=AdaBoost:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning:VarTransform=Decorrelate" );
805 factory->BookMethod( TMVA::Types::kBDT,
"BDTDTEST",
806 "!H:!V:NTrees=1000:nEventsMin=400:MaxDepth=6:BoostType=AdaBoost:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning:VarTransform=Decorrelate" );
809 factory->BookMethod( TMVA::Types::kBDT,
"BDTMitFisher",
810 "!H:!V:NTrees=50:nEventsMin=150:UseFisherCuts:MaxDepth=3:BoostType=AdaBoost:AdaBoostBeta=0.5:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning" );
814 factory->BookMethod( TMVA::Types::kRuleFit,
"RuleFit",
815 "H:!V:RuleFitModule=RFTMVA:Model=ModRuleLinear:MinImp=0.001:RuleMinDist=0.001:NTrees=20:fEventsMin=0.01:fEventsMax=0.5:GDTau=-1.0:GDTauPrec=0.01:GDStep=0.01:GDNSteps=10000:GDErrScale=1.02" );
825 factory->OptimizeAllMethods(
"SigEffAt001",
"Scan");
826 factory->OptimizeAllMethods(
"ROCIntegral",
"GA");
833 factory->TrainAllMethods();
836 factory->TestAllMethods();
839 factory->EvaluateAllMethods();
846 std::cout <<
"==> Wrote root file: " << outputFile->GetName() << std::endl;
847 std::cout <<
"==> TMVAClassification is done!" << std::endl;
Bool_t Accept(const StMuTrack *gTrack=0)
Bool_t AcceptVX(const StMuPrimaryVertex *Vtx=0)
void ForceAnimate(unsigned int times=0, int msecDelay=0)
void MuMcPrVKFV2012(Long64_t nevent, const char *file, const std::string &outFile, bool fillNtuple)
void FillData(data_t &data, const StMuPrimaryVertex *Vtx)
void TMVAClassification(TString myMethodList="")