本文整理汇总了C++中tmva::Factory::PrepareTrainingAndTestTree方法的典型用法代码示例。如果您正苦于以下问题:C++ Factory::PrepareTrainingAndTestTree方法的具体用法?C++ Factory::PrepareTrainingAndTestTree怎么用?C++ Factory::PrepareTrainingAndTestTree使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tmva::Factory
的用法示例。
在下文中一共展示了Factory::PrepareTrainingAndTestTree方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WWTMVAClassification
//.........这里部分代码省略.........
if(mH==200.) mass4bodycut = "(fit_mlvjj>188 && fit_mlvjj<293)"; // 3j200mu
if(mH==250.) mass4bodycut = "(fit_mlvjj>216 && fit_mlvjj<300)"; // 3j250mu
if(mH==300.) mass4bodycut = "(fit_mlvjj>241 && fit_mlvjj<355)"; // 3j300mu
if(mH==350.) mass4bodycut = "(fit_mlvjj>269 && fit_mlvjj<407)"; // 3j350mu
if(mH==400.) mass4bodycut = "(fit_mlvjj>300 && fit_mlvjj<465)"; // 3j400mu
if(mH==450.) mass4bodycut = "(fit_mlvjj>332 && fit_mlvjj<518)"; // 3j450mu
if(mH==500.) mass4bodycut = "(fit_mlvjj>362 && fit_mlvjj<569)"; // 3j500mu
if(mH==550.) mass4bodycut = "(fit_mlvjj>398 && fit_mlvjj<616)"; // 3j550mu
if(mH==600.) mass4bodycut = "(fit_mlvjj>419 && fit_mlvjj<660)"; // 3j600mu
}
if(chan.Contains("el")) {
if(mH==170.) mass4bodycut = "(fit_mlvjj>150 && fit_mlvjj<271)"; // 3j170el =====
if(mH==180.) mass4bodycut = "(fit_mlvjj>175 && fit_mlvjj<284)"; // 3j180el
if(mH==190.) mass4bodycut = "(fit_mlvjj>185 && fit_mlvjj<290)"; // 3j190el
if(mH==200.) mass4bodycut = "(fit_mlvjj>188 && fit_mlvjj<293)"; // 3j200el
if(mH==250.) mass4bodycut = "(fit_mlvjj>216 && fit_mlvjj<300)"; // 3j250el
if(mH==300.) mass4bodycut = "(fit_mlvjj>241 && fit_mlvjj<355)"; // 3j300el
if(mH==350.) mass4bodycut = "(fit_mlvjj>269 && fit_mlvjj<407)"; // 3j350el
if(mH==400.) mass4bodycut = "(fit_mlvjj>300 && fit_mlvjj<465)"; // 3j400el
if(mH==450.) mass4bodycut = "(fit_mlvjj>332 && fit_mlvjj<518)"; // 3j450el
if(mH==500.) mass4bodycut = "(fit_mlvjj>362 && fit_mlvjj<569)"; // 3j500el
if(mH==550.) mass4bodycut = "(fit_mlvjj>398 && fit_mlvjj<616)"; // 3j550el
if(mH==600.) mass4bodycut = "(fit_mlvjj>419 && fit_mlvjj<660)"; // 3j600el
}
}
char mycutschar[1000];
sprintf(mycutschar,"ggdevt == %i &&(Mass2j_PFCor>65 && Mass2j_PFCor<95) && %s", njets, mass4bodycut);
TCut mycuts (mycutschar);
// tell the factory to use all remaining events in the trees after training for testing:
factory->PrepareTrainingAndTestTree( mycuts, mycuts,
"nTrain_Signal=0:nTrain_Background=0:SplitMode=Random:NormMode=NumEvents:!V" );
// If no numbers of events are given, half of the events in the tree are used for training, and
// the other half for testing:
// factory->PrepareTrainingAndTestTree( mycut, "SplitMode=random:!V" );
// To also specify the number of testing events, use:
// factory->PrepareTrainingAndTestTree( mycut,
// "NSigTrain=3000:NBkgTrain=3000:NSigTest=3000:NBkgTest=3000:SplitMode=Random:!V" );
// ---- Book MVA methods
//
// please lookup the various method configuration options in the corresponding cxx files, eg:
// src/MethoCuts.cxx, etc, or here: http://tmva.sourceforge.net/optionRef.html
// it is possible to preset ranges in the option string in which the cut optimisation should be done:
// "...:CutRangeMin[2]=-1:CutRangeMax[2]=1"...", where [2] is the third input variable
// Cut optimisation
if (Use["Cuts"])
factory->BookMethod( TMVA::Types::kCuts, "Cuts",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart" );
if (Use["CutsD"])
factory->BookMethod( TMVA::Types::kCuts, "CutsD",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=Decorrelate" );
if (Use["CutsPCA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsPCA",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=PCA" );
if (Use["CutsGA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsGA",
"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" );
示例2: TMVAClassificationCategory
void TMVAClassificationCategory()
{
//---------------------------------------------------------------
// Example for usage of different event categories with classifiers
std::cout << std::endl << "==> Start TMVAClassificationCategory" << std::endl;
// This loads the library
TMVA::Tools::Instance();
// to get access to the GUI and all tmva macros
TString tmva_dir(TString(gRootDir) + "/tmva");
if(gSystem->Getenv("TMVASYS"))
tmva_dir = TString(gSystem->Getenv("TMVASYS"));
gROOT->SetMacroPath(tmva_dir + "/test/:" + gROOT->GetMacroPath() );
gROOT->ProcessLine(".L TMVAGui.C");
bool batchMode = false;
// Create a new root output file.
TString outfileName( "TMVA.root" );
TFile* outputFile = TFile::Open( outfileName, "RECREATE" );
// Create the factory object (see TMVAClassification.C for more information)
std::string factoryOptions( "!V:!Silent:Transformations=I;D;P;G,D" );
if (batchMode) factoryOptions += ":!Color:!DrawProgressBar";
TMVA::Factory *factory = new TMVA::Factory( "TMVAClassificationCategory", outputFile, factoryOptions );
// Define the input variables used for the MVA training
factory->AddVariable( "var1", 'F' );
factory->AddVariable( "var2", 'F' );
factory->AddVariable( "var3", 'F' );
factory->AddVariable( "var4", 'F' );
// You can add so-called "Spectator variables", which are not used in the MVA training,
// but will appear in the final "TestTree" produced by TMVA. This TestTree will contain the
// input variables, the response values of all trained MVAs, and the spectator variables
factory->AddSpectator( "eta" );
// Load the signal and background event samples from ROOT trees
TFile *input(0);
TString fname( "" );
if (UseOffsetMethod) fname = "data/toy_sigbkg_categ_offset.root";
else fname = "data/toy_sigbkg_categ_varoff.root";
if (!gSystem->AccessPathName( fname )) {
// first we try to find tmva_example.root in the local directory
std::cout << "--- TMVAClassificationCategory: Accessing " << fname << std::endl;
input = TFile::Open( fname );
}
if (!input) {
std::cout << "ERROR: could not open data file: " << fname << std::endl;
exit(1);
}
TTree *signal = (TTree*)input->Get("TreeS");
TTree *background = (TTree*)input->Get("TreeB");
/// Global event weights per tree (see below for setting event-wise weights)
Double_t signalWeight = 1.0;
Double_t backgroundWeight = 1.0;
/// You can add an arbitrary number of signal or background trees
factory->AddSignalTree ( signal, signalWeight );
factory->AddBackgroundTree( background, backgroundWeight );
// Apply additional cuts on the signal and background samples (can be different)
TCut mycuts = ""; // for example: TCut mycuts = "abs(var1)<0.5 && abs(var2-0.5)<1";
TCut mycutb = ""; // for example: TCut mycutb = "abs(var1)<0.5";
// Tell the factory how to use the training and testing events
factory->PrepareTrainingAndTestTree( mycuts, mycutb,
"nTrain_Signal=0:nTrain_Background=0:SplitMode=Random:NormMode=NumEvents:!V" );
// ---- Book MVA methods
// Fisher discriminant
factory->BookMethod( TMVA::Types::kFisher, "Fisher", "!H:!V:Fisher" );
// Likelihood
factory->BookMethod( TMVA::Types::kLikelihood, "Likelihood",
"!H:!V:TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmoothBkg[1]=10:NSmooth=1:NAvEvtPerBin=50" );
// --- Categorised classifier
TMVA::MethodCategory* mcat = 0;
// The variable sets
TString theCat1Vars = "var1:var2:var3:var4";
TString theCat2Vars = (UseOffsetMethod ? "var1:var2:var3:var4" : "var1:var2:var3");
// Fisher with categories
TMVA::MethodBase* fiCat = factory->BookMethod( TMVA::Types::kCategory, "FisherCat","" );
mcat = dynamic_cast<TMVA::MethodCategory*>(fiCat);
mcat->AddMethod( "abs(eta)<=1.3", theCat1Vars, TMVA::Types::kFisher, "Category_Fisher_1","!H:!V:Fisher" );
mcat->AddMethod( "abs(eta)>1.3", theCat2Vars, TMVA::Types::kFisher, "Category_Fisher_2","!H:!V:Fisher" );
// Likelihood with categories
//.........这里部分代码省略.........
示例3: TMVAClassification
//.........这里部分代码省略.........
// // add training and test events; here: first half is training, second is testing
// // note that the weight can also be event-wise
// if (i < signal->GetEntries()/2) factory->AddSignalTrainingEvent( vars, signalWeight );
// else factory->AddSignalTestEvent ( vars, signalWeight );
// }
//
// for (Int_t ivar=0; ivar<4; ivar++) background->SetBranchAddress( Form( "var%i", ivar+1 ), &(treevars[ivar]) );
// for (Int_t i=0; i<background->GetEntries(); i++) {
// background->GetEntry(i);
// for (Int_t ivar=0; ivar<4; ivar++) vars[ivar] = treevars[ivar];
// // add training and test events; here: first half is training, second is testing
// // note that the weight can also be event-wise
// if (i < background->GetEntries()/2) factory->AddBackgroundTrainingEvent( vars, backgroundWeight );
// else factory->AddBackgroundTestEvent ( vars, backgroundWeight );
// }
// // --- end ------------------------------------------------------------
//
// ====== end of register trees ==============================================
}
// This would set individual event weights (the variables defined in the
// expression need to exist in the original TTree)
// for signal : factory->SetSignalWeightExpression("weight1*weight2");
// for background: factory->SetBackgroundWeightExpression("weight1*weight2");
factory->SetBackgroundWeightExpression("Eweight*XS*BR*LUM*(1/NGE)*(B2/B3)*CUT");
factory->SetSignalWeightExpression("Eweight*XS*BR*LUM*(1/NGE)*(B2/B3)*CUT");
// Apply additional cuts on the signal and background samples (can be different)
TCut mycuts = "(CUT>2)";
TCut mycutb = "(CUT>2)";
// tell the factory to use all remaining events in the trees after training for testing:
factory->PrepareTrainingAndTestTree( mycuts, "SplitMode=random:!V" );
// "nTrain_Signal=0:nTrain_Background=0:SplitMode=Random:NormMode=NumEvents:!V" );
// If no numbers of events are given, half of the events in the tree are used for training, and
// the other half for testing:
// factory->PrepareTrainingAndTestTree( mycut, "SplitMode=random:!V" );
// To also specify the number of testing events, use:
// factory->PrepareTrainingAndTestTree( mycut,
// "NSigTrain=3000:NBkgTrain=3000:NSigTest=3000:NBkgTest=3000:SplitMode=Random:!V" );
// ---- Book MVA methods
//
// please lookup the various method configuration options in the corresponding cxx files, eg:
// src/MethoCuts.cxx, etc, or here: http://tmva.sourceforge.net/optionRef.html
// it is possible to preset ranges in the option string in which the cut optimisation should be done:
// "...:CutRangeMin[2]=-1:CutRangeMax[2]=1"...", where [2] is the third input variable
// Cut optimisation
if (Use["Cuts"])
factory->BookMethod( TMVA::Types::kCuts, "Cuts",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart" );
if (Use["CutsD"])
factory->BookMethod( TMVA::Types::kCuts, "CutsD",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=Decorrelate" );
if (Use["CutsPCA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsPCA",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=PCA" );
if (Use["CutsGA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsGA",
"H:!V:FitMethod=GA:Seed=0:EffSel:Steps=50:Cycles=3:PopSize=1000:SC_steps=10:SC_rate=5:SC_factor=0.95" );
示例4: trainMVACat
void trainMVACat()
{
char name[1000];
float XSEC[6] = {3.67e+5,2.94e+4,6.524e+03,1.064e+03,121.5,2.542e+01};
float NORM[6];
TCut preselectionCut = "ht>400 && jetPt[5]>40 && (triggerBit[0] || triggerBit[2]) && nBJets>1 && nLeptons==0";
TFile *bkgSrc[6];
bkgSrc[0] = TFile::Open("flatTree_QCD_HT300to500.root");
bkgSrc[1] = TFile::Open("flatTree_QCD_HT500to700.root");
bkgSrc[2] = TFile::Open("flatTree_QCD_HT700to1000.root");
bkgSrc[3] = TFile::Open("flatTree_QCD_HT1000to1500.root");
bkgSrc[4] = TFile::Open("flatTree_QCD_HT1500to2000.root");
bkgSrc[5] = TFile::Open("flatTree_QCD_HT2000toInf.root");
TFile *sigSrc = TFile::Open("flatTree_ttHJetTobb_M125.root");
//TFile *sigSrc = TFile::Open("flatTree_TT.root");
TTree *sigTree = (TTree*)sigSrc->Get("hadtop/events");
TTree *bkgTree[6];
TFile *outf = new TFile("mva_Cat_QCD.root","RECREATE");
TMVA::Factory* factory = new TMVA::Factory("factory_mva_Cat_QCD_",outf,"!V:!Silent:Color:DrawProgressBar:Transformations=I;G:AnalysisType=Classification");
factory->AddSignalTree(sigTree);
for(int k=0;k<6;k++) {
NORM[k] = ((TH1F*)bkgSrc[k]->Get("hadtop/pileup"))->GetEntries();
bkgTree[k] = (TTree*)bkgSrc[k]->Get("hadtop/events");
factory->AddBackgroundTree(bkgTree[k],XSEC[k]/NORM[k]);
}
//int N_SIG(sigTree->GetEntries(preselectionCut));
//int N_BKG0(bkgTree[0]->GetEntries(preselectionCut));
//int N_BKG1(bkgTree[1]->GetEntries(preselectionCut));
//int N_BKG2(bkgTree[2]->GetEntries(preselectionCut));
//int N_BKG3(bkgTree[3]->GetEntries(preselectionCut));
//float N_BKG_EFF = N_BKG0*XSEC[0]/NORM[0]+N_BKG1*XSEC[1]/NORM[1]+N_BKG2*XSEC[2]/NORM[2]+N_BKG3*XSEC[3]/NORM[3];
//int N = TMath::Min((float)N_SIG,N_BKG_EFF);
//cout<<N_SIG<<" "<<N_BKG_EFF<<endl;
const int NVAR = 21;
TString VAR[NVAR] = {
"nJets",
//"nBJets",
"ht",
"jetPt[0]","jetPt[1]","jetPt[2]","jetPt[3]","jetPt[4]","jetPt[5]",
"mbbMin","dRbbMin",
//"dRbbAve","mbbAve",
//"btagAve","btagMax","btagMin",
//"qglAve","qglMin","qglMedian",
"sphericity","aplanarity","foxWolfram[0]","foxWolfram[1]","foxWolfram[2]","foxWolfram[3]",
"mTop[0]","ptTTbar","mTTbar","dRbbTop","chi2"
};
char TYPE[NVAR] = {
'I',
//'I',
'F',
'F','F','F','F','F','F',
'F','F',
//'F','F',
//'F','F','F',
//'F','F','F',
'F','F','F','F','F','F',
'F','F','F','F','F'
};
for(int i=0;i<NVAR;i++) {
factory->AddVariable(VAR[i],TYPE[i]);
}
factory->AddSpectator("status",'I');
factory->AddSpectator("nBJets",'I');
sprintf(name,"nTrain_Signal=%d:nTrain_Background=%d:nTest_Signal=%d:nTest_Background=%d",-1,-1,-1,-1);
factory->PrepareTrainingAndTestTree(preselectionCut,name);
TMVA::IMethod* BDT_Category = factory->BookMethod( TMVA::Types::kCategory,"BDT_Category");
TMVA::MethodCategory* mcategory_BDT = dynamic_cast<TMVA::MethodCategory*>(BDT_Category);
mcategory_BDT->AddMethod("status == 0 && nBJets == 2",
"nJets:ht:jetPt[0]:jetPt[1]:jetPt[2]:jetPt[3]:jetPt[4]:jetPt[5]:mbbMin:dRbbMin:sphericity:aplanarity:foxWolfram[0]:foxWolfram[1]:foxWolfram[2]:foxWolfram[3]:mTop[0]:ptTTbar:mTTbar:dRbbTop:chi2:",
TMVA::Types::kBDT,
"BDT_Cat1",
"NTrees=2000:BoostType=Grad:Shrinkage=0.1");
mcategory_BDT->AddMethod("status == 0 && nBJets > 2",
"nJets:ht:jetPt[0]:jetPt[1]:jetPt[2]:jetPt[3]:jetPt[4]:jetPt[5]:mbbMin:dRbbMin:sphericity:aplanarity:foxWolfram[0]:foxWolfram[1]:foxWolfram[2]:foxWolfram[3]:mTop[0]:ptTTbar:mTTbar:dRbbTop:chi2:",
TMVA::Types::kBDT,
"BDT_Cat2",
"NTrees=2000:BoostType=Grad:Shrinkage=0.1");
mcategory_BDT->AddMethod("status < 0 && nBJets == 2",
"nJets:ht:jetPt[0]:jetPt[1]:jetPt[2]:jetPt[3]:jetPt[4]:jetPt[5]:mbbMin:dRbbMin:sphericity:aplanarity:foxWolfram[0]:foxWolfram[1]:foxWolfram[2]:foxWolfram[3]:",
TMVA::Types::kBDT,
"BDT_Cat3",
"NTrees=2000:BoostType=Grad:Shrinkage=0.1");
//.........这里部分代码省略.........
示例5: TMVARegression
//.........这里部分代码省略.........
// Read training and test data (see TMVAClassification for reading ASCII files)
// load the signal and background event samples from ROOT trees
TFile *input(0);
TString fname = "./tmva_reg_example.root";
if (!gSystem->AccessPathName( fname ))
input = TFile::Open( fname ); // check if file in local directory exists
else
input = TFile::Open( "http://root.cern.ch/files/tmva_reg_example.root" ); // if not: download from ROOT server
if (!input) {
std::cout << "ERROR: could not open data file" << std::endl;
exit(1);
}
std::cout << "--- TMVARegression : Using input file: " << input->GetName() << std::endl;
// --- Register the regression tree
TTree *regTree = (TTree*)input->Get("TreeR");
// global event weights per tree (see below for setting event-wise weights)
Double_t regWeight = 1.0;
// You can add an arbitrary number of regression trees
factory->AddRegressionTree( regTree, regWeight );
// This would set individual event weights (the variables defined in the
// expression need to exist in the original TTree)
factory->SetWeightExpression( "var1", "Regression" );
// Apply additional cuts on the signal and background samples (can be different)
TCut mycut = ""; // for example: TCut mycut = "abs(var1)<0.5 && abs(var2-0.5)<1";
// tell the factory to use all remaining events in the trees after training for testing:
factory->PrepareTrainingAndTestTree( mycut,
"nTrain_Regression=0:nTest_Regression=0:SplitMode=Random:NormMode=NumEvents:!V" );
// If no numbers of events are given, half of the events in the tree are used
// for training, and the other half for testing:
// factory->PrepareTrainingAndTestTree( mycut, "SplitMode=random:!V" );
// ---- Book MVA methods
//
// please lookup the various method configuration options in the corresponding cxx files, eg:
// src/MethoCuts.cxx, etc, or here: http://tmva.sourceforge.net/optionRef.html
// it is possible to preset ranges in the option string in which the cut optimisation should be done:
// "...:CutRangeMin[2]=-1:CutRangeMax[2]=1"...", where [2] is the third input variable
// PDE - RS method
if (Use["PDERS"])
factory->BookMethod( TMVA::Types::kPDERS, "PDERS",
"!H:!V:NormTree=T:VolumeRangeMode=Adaptive:KernelEstimator=Gauss:GaussSigma=0.3:NEventsMin=40:NEventsMax=60:VarTransform=None" );
// And the options strings for the MinMax and RMS methods, respectively:
// "!H:!V:VolumeRangeMode=MinMax:DeltaFrac=0.2:KernelEstimator=Gauss:GaussSigma=0.3" );
// "!H:!V:VolumeRangeMode=RMS:DeltaFrac=3:KernelEstimator=Gauss:GaussSigma=0.3" );
if (Use["PDEFoam"])
factory->BookMethod( TMVA::Types::kPDEFoam, "PDEFoam",
"!H:!V:MultiTargetRegression=F:TargetSelection=Mpv:TailCut=0.001:VolFrac=0.0666:nActiveCells=500:nSampl=2000:nBin=5:Compress=T:Kernel=None:Nmin=10:VarTransform=None" );
// K-Nearest Neighbour classifier (KNN)
if (Use["KNN"])
factory->BookMethod( TMVA::Types::kKNN, "KNN",
"nkNN=20:ScaleFrac=0.8:SigmaFact=1.0:Kernel=Gaus:UseKernel=F:UseWeight=T:!Trim" );
// Linear discriminant
if (Use["LD"])
示例6: TMVAClassification_qgl
//.........这里部分代码省略.........
}
// gSystem->Exec("wget http://root.cern.ch/files/tmva_class_example.root");
TFile *input_signal = TFile::Open( fname_signal );
TFile *input_bg = TFile::Open( fname_bg );
std::cout << "--- TMVAClassification : Using input signal file: " << input_signal->GetName() << std::endl;
std::cout << "--- TMVAClassification : Using input bg file: " << input_bg->GetName() << std::endl;
// --- Register the training and test trees
TTree *signal = (TTree*)input_signal->Get("QGL_1");
TTree *bg = (TTree*)input_bg->Get("QGL_1");
// global event weights per tree (see below for setting event-wise weights)
Double_t signalWeight = 1.0;
Double_t bgWeight = 1.0;
// You can add an arbitrary number of signal or background trees
factory->AddSignalTree ( signal, signalWeight );
factory->AddBackgroundTree( bg, bgWeight );
TCut mycuts = ""; // for example: TCut mycuts = "abs(var1)<0.5 && abs(var2-0.5)<1";
TCut mycutb = ""; // for example: TCut mycutb = "abs(var1)<0.5";
// Tell the factory how to use the training and testing events
//
// If no numbers of events are given, half of the events in the tree are used
// for training, and the other half for testing:
// factory->PrepareTrainingAndTestTree( mycut, "SplitMode=random:!V" );
// To also specify the number of testing events, use:
// factory->PrepareTrainingAndTestTree( mycut,
// "NSigTrain=3000:NBkgTrain=3000:NSigTest=3000:NBkgTest=3000:SplitMode=Random:!V" );
factory->PrepareTrainingAndTestTree( mycuts, mycutb,
"nTrain_Signal=0:nTrain_Background=0:SplitMode=Random:NormMode=NumEvents:!V" );
// ---- Book MVA methods
//
// Please lookup the various method configuration options in the corresponding cxx files, eg:
// src/MethoCuts.cxx, etc, or here: http://tmva.sourceforge.net/optionRef.html
// it is possible to preset ranges in the option string in which the cut optimisation should be done:
// "...:CutRangeMin[2]=-1:CutRangeMax[2]=1"...", where [2] is the third input variable
// Fisher discriminant (same as LD)
if (Use["Fisher"])
factory->BookMethod( TMVA::Types::kFisher, "Fisher", "H:!V:Fisher:VarTransform=None:CreateMVAPdfs:PDFInterpolMVAPdf=Spline2:NbinsMVAPdf=50:NsmoothMVAPdf=10" );
if (Use["MLPBNN"])
factory->BookMethod( TMVA::Types::kMLP, "MLPBNN", "H:!V:NeuronType=tanh:VarTransform=N:NCycles=600:HiddenLayers=N+5:TestRate=5:TrainingMethod=BFGS:UseRegulator" ); // BFGS training with bayesian regulators
if (Use["BDTD"]) // Decorrelation + Adaptive Boost
factory->BookMethod( TMVA::Types::kBDT, "BDTD",
"!H:!V:NTrees=400:MinNodeSize=5%:MaxDepth=3:BoostType=AdaBoost:SeparationType=GiniIndex:nCuts=20:VarTransform=Decorrelate" );
if (Use["BDTG"]) //
factory->BookMethod( TMVA::Types::kBDT, "BDTG",
"!H:!V:NTrees=120:MinNodeSize=6%:BoostType=Grad:Shrinkage=0.10:UseBaggedBoost:BaggedSampleFraction=0.5:nCuts=20:MaxDepth=3:NegWeightTreatment=IgnoreNegWeightsInTraining" );
if (Use["Likelihood"])
factory->BookMethod( TMVA::Types::kLikelihood, "Likelihood",
"H:!V:TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmoothBkg[1]=10:NSmooth=1:NAvEvtPerBin=50" );
// Decorrelated likelihood
if (Use["LikelihoodD"])
factory->BookMethod( TMVA::Types::kLikelihood, "LikelihoodD",
"!H:!V:TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmooth=5:NAvEvtPerBin=50:VarTransform=Decorrelate" );
示例7: TMVAClassification_cc1pcoh_bdt_verFF
//.........这里部分代码省略.........
factory->AddBackgroundTree( ptree_bar, backgroundWeight_bar );
// Add wall background
//Double_t signalWeight_bkg = nmcFile/float(nbkgFile);
Double_t backgroundWeight_bkg = nmcFile/float(nbkgFile);
//factory->AddSignalTree ( ptree_bkg, signalWeight_bkg );
factory->AddBackgroundTree( ptree_bkg, backgroundWeight_bkg );
// Add INGRID background
//Double_t signalWeight_bkg2 = nmcFile/float(nbkg2File);
Double_t backgroundWeight_bkg2 = nmcFile/float(nbkg2File);
//factory->AddSignalTree ( ptree_bkg2, signalWeight_bkg2 );
factory->AddBackgroundTree( ptree_bkg2, backgroundWeight_bkg2 );
//factory->SetSignalWeightExpression ("norm*totcrsne*2.8647e-13");
//factory->SetBackgroundWeightExpression( "norm*totcrsne*2.8647e-13" );
// Apply additional cuts on the signal and background samples (can be different)
TCut mycuts = "Ntrack==2 && abs(inttype)==16 && fileIndex==1"; // for example: TCut mycuts = "abs(var1)<0.5 && abs(var2-0.5)<1";
TCut mycutb = "Ntrack==2 && (abs(inttype)!=16 || fileIndex>1)"; // for example: TCut mycutb = "abs(var1)<0.5";
// Tell the factory how to use the training and testing events
//
// If no numbers of events are given, half of the events in the tree are used
// for training, and the other half for testing:
// factory->PrepareTrainingAndTestTree( mycut, "SplitMode=random:!V" );
// To also specify the number of testing events, use:
// factory->PrepareTrainingAndTestTree( mycut,
// "NSigTrain=3000:NBkgTrain=3000:NSigTest=3000:NBkgTest=3000:SplitMode=Random:!V" );
factory->PrepareTrainingAndTestTree( mycuts, mycutb,
"nTrain_Signal=0:nTrain_Background=0:SplitMode=Random:NormMode=NumEvents:!V" );
// ---- Book MVA methods
//
// Please lookup the various method configuration options in the corresponding cxx files, eg:
// src/MethoCuts.cxx, etc, or here: http://tmva.sourceforge.net/optionRef.html
// it is possible to preset ranges in the option string in which the cut optimisation should be done:
// "...:CutRangeMin[2]=-1:CutRangeMax[2]=1"...", where [2] is the third input variable
// Cut optimisation
if (Use["Cuts"])
factory->BookMethod( TMVA::Types::kCuts, "Cuts",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart" );
if (Use["CutsD"])
factory->BookMethod( TMVA::Types::kCuts, "CutsD",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=Decorrelate" );
if (Use["CutsPCA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsPCA",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=PCA" );
if (Use["CutsGA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsGA",
"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" );
if (Use["CutsSA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsSA",
"!H:!V:FitMethod=SA:EffSel:MaxCalls=150000:KernelTemp=IncAdaptive:InitialTemp=1e+6:MinTemp=1e-6:Eps=1e-10:UseDefaultScale" );
// Likelihood ("naive Bayes estimator")
if (Use["Likelihood"])
示例8: TMVAClassification
//.........这里部分代码省略.........
// if (i < background->GetEntries()/2) factory->AddBackgroundTrainingEvent( vars, backgroundWeight );
// else factory->AddBackgroundTestEvent ( vars, backgroundWeight );
// }
// // --- end ------------------------------------------------------------
//
// ====== end of register trees ==============================================
// This would set individual event weights (the variables defined in the
// expression need to exist in the original TTree)
// for signal : factory->SetSignalWeightExpression("weight1*weight2");
// for background: factory->SetBackgroundWeightExpression("weight1*weight2");
// factory->SetBackgroundWeightExpression("weight");
// Apply additional cuts on the signal and background samples (can be different)
// TCut mycuts = "abs(eta)>1.5"; // for example: TCut mycuts = "abs(var1)<0.5 && abs(var2-0.5)<1";
// TCut mycutb = "abs(eta)>1.5"; // for example: TCut mycutb = "abs(var1)<0.5";
//Acceptance/Base cuts
//TCut goodW("W_electron_et>30. && TMath::Abs(W_electron_eta)<2.5 && event_met_pfmet>25.");
TCut goodW("W_muon_pt>25. && TMath::Abs(W_muon_eta)<2.5 && event_met_pfmet>25.");
TCut twojets("numPFCorJets==2");
TCut jetPt("JetPFCor_Pt[0]>30. && JetPFCor_Pt[1]>30.");
TCut jetEta("TMath::Abs(JetPFCor_Eta[0])<2.5 && TMath::Abs(JetPFCor_Eta[1])<2.5");
TCut deltaR1("TMath::Sqrt(TMath::Power(TMath::Abs(TMath::Abs(TMath::Abs(JetPFCor_Phi[0]-W_muon_phi)-TMath::Pi())-TMath::Pi()),2)+TMath::Power(JetPFCor_Eta[0]-W_muon_eta,2))>0.5");
TCut deltaR2("TMath::Sqrt(TMath::Power(TMath::Abs(TMath::Abs(TMath::Abs(JetPFCor_Phi[1]-W_muon_phi)-TMath::Pi())-TMath::Pi()),2)+TMath::Power(JetPFCor_Eta[1]-W_muon_eta,2))>0.5");
TCut noBJets("numPFCorJetBTags==0");
TCut null("");
//TCut mycuts (goodW && twojets && jetPt && jetEta && deltaR1 && deltaR2 && noBJets);
TCut mycuts (null);
// tell the factory to use all remaining events in the trees after training for testing:
factory->PrepareTrainingAndTestTree( mycuts, mycuts,
"nTrain_Signal=0:nTrain_Background=0:SplitMode=Random:NormMode=NumEvents:!V" );
// If no numbers of events are given, half of the events in the tree are used for training, and
// the other half for testing:
// factory->PrepareTrainingAndTestTree( mycut, "SplitMode=random:!V" );
// To also specify the number of testing events, use:
// factory->PrepareTrainingAndTestTree( mycut,
// "NSigTrain=3000:NBkgTrain=3000:NSigTest=3000:NBkgTest=3000:SplitMode=Random:!V" );
// ---- Book MVA methods
//
// please lookup the various method configuration options in the corresponding cxx files, eg:
// src/MethoCuts.cxx, etc, or here: http://tmva.sourceforge.net/optionRef.html
// it is possible to preset ranges in the option string in which the cut optimisation should be done:
// "...:CutRangeMin[2]=-1:CutRangeMax[2]=1"...", where [2] is the third input variable
// Cut optimisation
if (Use["Cuts"])
factory->BookMethod( TMVA::Types::kCuts, "Cuts",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart" );
if (Use["CutsD"])
factory->BookMethod( TMVA::Types::kCuts, "CutsD",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=Decorrelate" );
if (Use["CutsPCA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsPCA",
"!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=PCA" );
if (Use["CutsGA"])
factory->BookMethod( TMVA::Types::kCuts, "CutsGA",
"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" );
示例9: MVATrain
//.........这里部分代码省略.........
for (UInt_t i=0; i<_mctree.size(); i++) factory->AddBackgroundTree(_mctree[i], weight);
factory->SetWeightExpression("eventW");
// Add variables
//----------------------------------------------------------------------------
// Be careful with the order: it must be respected at the reading step
// factory->AddVariable("<var1>+<var2>", "pretty title", "unit", 'F');
factory->AddVariable("newdarkpt" , "", "", 'F');
//factory->AddVariable("topRecoW" , "", "", 'F');
//factory->AddVariable("lep1pt" , "", "", 'F');
//factory->AddVariable("lep1eta" , "", "", 'F');
//factory->AddVariable("lep1phi" , "", "", 'F');
//factory->AddVariable("lep1mass" , "", "", 'F');
//factory->AddVariable("lep2pt" , "", "", 'F');
//factory->AddVariable("lep2eta" , "", "", 'F');
//factory->AddVariable("lep2phi" , "", "", 'F');
//factory->AddVariable("lep2mass" , "", "", 'F');
//factory->AddVariable("jet1pt " , "", "", 'F');
//factory->AddVariable("jet1eta" , "", "", 'F');
//factory->AddVariable("jet1phi" , "", "", 'F');
//factory->AddVariable("jet1mass" , "", "", 'F');
//factory->AddVariable("jet2pt" , "", "", 'F');
//factory->AddVariable("jet2eta" , "", "", 'F');
//factory->AddVariable("jet2phi" , "", "", 'F');
//factory->AddVariable("jet2mass" , "", "", 'F');
factory->AddVariable("metPfType1" , "", "", 'F');
//factory->AddVariable("metPfType1Phi", "", "", 'F');
//factory->AddVariable("m2l" , "", "", 'F');
factory->AddVariable("mt2ll" , "", "", 'F');
//factory->AddVariable("mt2lblb" , "", "", 'F');
//factory->AddVariable("mtw1" , "", "", 'F');
//factory->AddVariable("mtw2" , "", "", 'F');
//factory->AddVariable("ht" , "", "", 'F');
//factory->AddVariable("htjets" , "", "", 'F');
//factory->AddVariable("htnojets" , "", "", 'F');
//factory->AddVariable("njet" , "", "", 'F');
//factory->AddVariable("nbjet30csvv2l", "", "", 'F');
//factory->AddVariable("nbjet30csvv2m", "", "", 'F');
//factory->AddVariable("nbjet30csvv2t", "", "", 'F');
//factory->AddVariable("dphijet1met" , "", "", 'F');
//factory->AddVariable("dphijet2met" , "", "", 'F');
//factory->AddVariable("dphijj" , "", "", 'F');
//factory->AddVariable("dphijjmet" , "", "", 'F');
//factory->AddVariable("dphill" , "", "", 'F');
//factory->AddVariable("dphilep1jet1" , "", "", 'F');
//factory->AddVariable("dphilep1jet2" , "", "", 'F');
//factory->AddVariable("dphilep2jet1" , "", "", 'F');
//factory->AddVariable("dphilep2jet2" , "", "", 'F');
//factory->AddVariable("dphilmet1" , "", "", 'F');
//factory->AddVariable("dphilmet2" , "", "", 'F');
factory->AddVariable("dphillmet" , "", "", 'F');
//factory->AddVariable("sphericity" , "", "", 'F');
//factory->AddVariable("alignment" , "", "", 'F');
//factory->AddVariable("planarity" , "", "", 'F');
// Preselection cuts and preparation
//----------------------------------------------------------------------------
//factory->PrepareTrainingAndTestTree(Form("metPfType1>%5.2f&&mt2ll>%5.2f&&newdarkpt>0.", metPfType1_cut, mt2ll_cut), "NormMode=EqualNumEvents:nTrain_Signal=80:nTest_Signal=80:nTrain_Background=400:nTest_Background=400:!V");
factory->PrepareTrainingAndTestTree("mt2ll>100.&&newdarkpt>0.&&metPfType1>80.", "NormMode=EqualNumEvents:nTrain_Signal=0:nTest_Signal=0:nTrain_Background=0:nTest_Background=0:!V");
// Book MVA
//----------------------------------------------------------------------------
factory->BookMethod(TMVA::Types::kMLP, "MLP01",
"H:!V:NeuronType=sigmoid:NCycles=500:VarTransform=Norm:HiddenLayers=6,3:TestRate=1:LearningRate=0.005");
//factory->BookMethod(TMVA::Types::kMLP, "MLP01",
// "H:!V:NeuronType=sigmoid:NCycles=500:VarTransform=Norm:HiddenLayers=4,4:TestRate=3:LearningRate=0.005");
//factory->BookMethod(TMVA::Types::kMLP, "MLP02",
// "H:!V:NeuronType=sigmoid:NCycles=40:VarTransform=Norm:HiddenLayers=20,10:TestRate=3:LearningRate=0.005");
//factory->BookMethod(TMVA::Types::kMLP, "MLP03",
// "H:!V:NeuronType=sigmoid:NCycles=30:VarTransform=Norm:HiddenLayers=20,20:TestRate=3:LearningRate=0.005");
//factory->BookMethod(TMVA::Types::kBDT, "BDT04", "NTrees=50:MaxDepth=2" );
//factory->BookMethod(TMVA::Types::kBDT, "BDT05", "NTrees=50:MaxDepth=3" );
// Train, test and evaluate MVA
//----------------------------------------------------------------------------
factory->TrainAllMethods(); // Train using the set of training events
factory->TestAllMethods(); // Evaluate using the set of test events
factory->EvaluateAllMethods(); // Evaluate and compare performance
// Save the output
//----------------------------------------------------------------------------
outputfile->Close();
delete factory;
}
示例10: main
int main ()
{
TFile * outputfile = TFile::Open ("outputTMVA.root","RECREATE");
TMVA::Factory * TMVAtest = new TMVA::Factory ("TMVAtest", outputfile, "S") ;
//PG get the signal and deliver it to the TMVA factory
TChain signalTree ("sample") ;
signalTree.Add ("data/sig_0.root") ;
std::cout << "READ " << signalTree.GetEntries () << " signal events\n" ;
TMVAtest->AddSignalTree (&signalTree, 1) ;
//PG get the bkg and deliver it to the TMVA factory
TChain bkgTree ("sample") ;
bkgTree.Add ("data/bkg_0.root") ;
std::cout << "READ " << bkgTree.GetEntries () << " bkg events\n" ;
TMVAtest->AddBackgroundTree (&bkgTree, 1) ;
//PG get the training and test samples and deliver them to the TMVA factory
TChain signalTrainTree ("sample") ;
signalTrainTree.Add ("data/sig_1.root") ;
std::cout << "READ " << signalTrainTree.GetEntries () << " signal train events\n" ;
TChain bkgTrainTree ("sample") ;
bkgTrainTree.Add ("data/bkg_1.root") ;
std::cout << "READ " << bkgTrainTree.GetEntries () << " bkg train events\n" ;
TMVAtest->SetInputTrees (signalTrainTree.GetTree (), bkgTrainTree.GetTree (), 1., 1.) ;
//PG variables to be used for the selection
//PG must be defined in the TTrees
TMVAtest->AddVariable ("vars.x", 'F') ;
TMVAtest->AddVariable ("vars.y" , 'F') ;
int signalNumTrain = signalTrainTree.GetEntries () * 4 / 5 ;
int bkgNumTrain = bkgTrainTree.GetEntries () * 4 / 5 ;
int signalNumTest = signalTrainTree.GetEntries () - signalNumTrain ;
int bkgNumTest = bkgTrainTree.GetEntries () - bkgNumTrain ;
char trainOptions[120] ;
sprintf (trainOptions,"NSigTrain=%d:NBkgTrain=%d:NSigTest=%d:NBkgTest=%d",
signalNumTrain, bkgNumTrain,
signalNumTest, bkgNumTest) ;
sprintf (trainOptions,"NSigTrain=%d:NBkgTrain=%d:NSigTest=%d:NBkgTest=%d",
0,0,0,0) ;
std::cout << "TRAINING CONFIGURATION : " << trainOptions << "\n" ;
TMVAtest->PrepareTrainingAndTestTree ("",trainOptions) ;
//PG prepare the classifier
//PG cut-based, default params
TMVAtest->BookMethod (TMVA::Types::kCuts, "Cuts") ;
TMVAtest->TrainAllMethods () ;
TMVAtest->TestAllMethods () ;
TMVAtest->EvaluateAllMethods () ;
delete TMVAtest ;
delete outputfile ;
}
示例11: main
//.........这里部分代码省略.........
std::vector<TFile*> SignalSamples;
for(unsigned int sigIter=0;sigIter<signallist.size();++sigIter){
SignalSamples.push_back(TFile::Open((folder+signallist.at(sigIter)+"_mt_2012.root").c_str()));
}
std::vector<TTree*> backgroundTrees;
for(unsigned int iter2=0;iter2<BackgroundSamples.size();++iter2){
backgroundTrees.push_back(dynamic_cast<TTree*>(BackgroundSamples.at(iter2)->Get("ntuple")));
}
std::vector<TTree*> signalTrees;
for(unsigned int sigIter2=0;sigIter2<SignalSamples.size();++sigIter2){
signalTrees.push_back(dynamic_cast<TTree*>(SignalSamples.at(sigIter2)->Get("ntuple")));
}
TFile *outfile = new TFile((output_folder+output_name).c_str(),"RECREATE");
TMVA::Factory *factory = new TMVA::Factory(classname,outfile,"!V:!Silent:Color:DrawProgressBar:Transformations=I;D;P;G,D:AnalysisType=Classification");
std::vector<std::string> vars;
std::ifstream parafile(paramfile2.c_str());
std::cout<<paramfile2.c_str()<<std::endl;
string line;
while(getline(parafile,line)){
vars.push_back(line);
}
parafile.close();
std::cout<<(vars.at(0)).c_str()<<std::endl;
std::vector<float> var2;
for(unsigned int variter=0;variter<vars.size();++variter){
var2.push_back(::atof((vars.at(variter)).c_str()));
}
for(unsigned int variter=0;variter<vars.size();++variter){
factory->AddVariable((vars.at(variter)).c_str(),(vars.at(variter)).c_str(),"",'F');
}
factory->AddSpectator("mt_1","mt_1","",'F');
factory->AddSpectator("n_prebjets","n_prebjets","",'I');
factory->AddSpectator("prebjetbcsv_1","prebjetbcsv_1","",'F');
factory->AddSpectator("prebjetbcsv_2","prebjetbcsv_2","",'F');
double weightval_=0;
ParseParamFile(paramfile);
for(unsigned int bckgit=0;bckgit<backgroundTrees.size();++bckgit){
auto it = sample_info_.find(bckglist.at(bckgit).c_str());
if(it!=sample_info_.end()){
double evt = it->second.first;
double xs = it->second.second;
weightval_=(double) xs/evt;
std::cout<<weightval_<<std::endl;
}
factory->AddBackgroundTree(backgroundTrees.at(bckgit),weightval_);
}
for(unsigned int sgit=0;sgit<signalTrees.size();++sgit){
auto it = sample_info_.find(signallist.at(sgit).c_str());
if(it!=sample_info_.end()){
double evt = it->second.first;
double xs=it->second.second;
weightval_=(Double_t) xs/evt;
}
std::cout<<weightval_<<std::endl;
factory->AddSignalTree(signalTrees.at(sgit),weightval_);
}
factory->SetBackgroundWeightExpression("wt");
factory->SetSignalWeightExpression("wt");
TCut mycutb, mycuts;
if(twotag){
mycutb="n_prebjets>1&&mt_1<30&&prebjetbcsv_1>0.679&&prebjetbcsv_2>0.679";
mycuts="n_prebjets>1&&mt_1<30&&prebjetbcsv_1>0.679&&prebjetbcsv_2>0.679";
}
else if(onetag){
mycutb="n_prebjets>1&&mt_1<30&&prebjetbcsv_1>0.679&&prebjetbcsv_2<0.679";
mycuts="n_prebjets>1&&mt_1<30&&prebjetbcsv_1>0.679&&prebjetbcsv_2<0.679";
}
else{
mycutb="n_prebjets>1&&mt_1<30";
mycuts="n_prebjets>1&&mt_1<30";
}
//TCut mycutb="";
//TCut mycuts="";
factory->PrepareTrainingAndTestTree( mycuts, mycutb,"SplitMode=Random:!V");
factory->BookMethod( TMVA::Types::kBDT, "BDT","!H:!V:NTrees=850:nEventsMin=150:MaxDepth=3:BoostType=AdaBoost:AdaBoostBeta=0.5:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning" );
factory->TrainAllMethods();
factory->TestAllMethods();
factory->EvaluateAllMethods();
outfile->Close();
delete factory;
return 0;
}
示例12: TMVATraining_ch4
void TMVATraining_ch4( )
{
TFile* outputFile = TFile::Open( "TMVA_ch4.root", "RECREATE" );
TMVA::Factory *factory = new TMVA::Factory( "MVAnalysis", outputFile,"!V");
TFile *signal = TFile::Open("../production/BGx0/Prod2_iptubeK0/B0_etapr-eta-3pi2pi_KS-pi+pi-_output_signal_iptubeK0.root");
TFile *background = TFile::Open("../production/BGx0/Prod2_iptubeK0/B0_etapr-eta-3pi2pi_KS-pi+pi-_output_ccbar_iptubeK0.root");
factory->AddSignalTree ( (TTree*)signal->Get("B0"), 1.0 );
factory->AddBackgroundTree ( (TTree*)background->Get("B0"), 1.0 );
sigCut = TCut("B0__isContinuumEvent==0");
bgCut = TCut("B0__isContinuumEvent==1");
factory->AddVariable("B0_ThrustB",'F');
factory->AddVariable("B0_ThrustO",'F');
factory->AddVariable("B0_CosTBTO",'F');
factory->AddVariable("B0_CosTBz",'F');
factory->AddVariable("B0_R2",'F');
factory->AddVariable("B0_cc1",'F');
factory->AddVariable("B0_cc2",'F');
factory->AddVariable("B0_cc3",'F');
factory->AddVariable("B0_cc4",'F');
factory->AddVariable("B0_cc5",'F');
factory->AddVariable("B0_cc6",'F');
factory->AddVariable("B0_cc7",'F');
factory->AddVariable("B0_cc8",'F');
factory->AddVariable("B0_cc9",'F');
factory->AddVariable("B0_mm2",'F');
factory->AddVariable("B0_et",'F');
factory->AddVariable("B0_hso00",'F');
// factory->AddVariable("B0_hso01",'F');
factory->AddVariable("B0_hso02",'F');
//factory->AddVariable("B0_hso03",'F');
factory->AddVariable("B0_hso04",'F');
factory->AddVariable("B0_hso10",'F');
factory->AddVariable("B0_hso12",'F');
factory->AddVariable("B0_hso14",'F');
factory->AddVariable("B0_hso20",'F');
factory->AddVariable("B0_hso22",'F');
factory->AddVariable("B0_hso24",'F');
factory->AddVariable("B0_hoo0",'F');
factory->AddVariable("B0_hoo1",'F');
factory->AddVariable("B0_hoo2",'F');
factory->AddVariable("B0_hoo3",'F');
factory->AddVariable("B0_hoo4",'F');
factory->PrepareTrainingAndTestTree(sigCut, bgCut, "!V:nTrain_Signal=10000:nTest_Signal=10000:nTrain_Background=10000:nTest_Background=10000:SplitMode=Random:NormMode=NumEvents" );
//factory->BookMethod( TMVA::Types::kLikelihood, "Likelihood", "H:V:!TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmooth=5:NAvEvtPerBin=50:VarTransform=PCA");
//factory->BookMethod( TMVA::Types::kMLP, "MLP", "!V:NCycles=200:HiddenLayers=N+1,N:TestRate=5" );
factory->BookMethod( TMVA::Types::kMLP, "MLPBNN", "H:!V:NeuronType=tanh:VarTransform=N:NCycles=600:HiddenLayers=N+5:TestRate=5:TrainingMethod=BFGS:UseRegulator" );
factory->BookMethod( TMVA::Types::kBDT, "BDT", "!H:!V:NTrees=850:MinNodeSize=2.5%:MaxDepth=3:BoostType=AdaBoost:AdaBoostBeta=0.5:UseBaggedBoost:BaggedSampleFraction=0.5:SeparationType=GiniIndex:nCuts=20" );
factory->BookMethod( TMVA::Types::kSVM, "SVM", "!H:!V:Gamma=0.25:Tol=0.001:VarTransform=Norm" );
//factory->BookMethod( TMVA::Types::kBDT, "FastBDT", "!H:!V:CreateMVAPdfs:NbinsMVAPdf=40:NTrees=100:Shrinkage=0.10"); //:RandRatio=0.5:NCutLevel=8:NTreeLayers=3");
factory->TrainAllMethods();
factory->TestAllMethods();
factory->EvaluateAllMethods();
outputFile->Close();
delete factory;
// Launch the GUI for the root macros
if (!gROOT->IsBatch()) TMVA::TMVAGui( "TMVA_ch4.root" );
}
示例13: TMVAClassificationCategory
void TMVAClassificationCategory()
{
//---------------------------------------------------------------
std::cout << std::endl << "==> Start TMVAClassificationCategory" << std::endl;
bool batchMode(false);
// Create a new root output file.
TString outfileName( "TMVA.root" );
TFile* outputFile = TFile::Open( outfileName, "RECREATE" );
// Create the factory object. Later you can choose the methods
// whose performance you'd like to investigate. The factory will
// then run the performance analysis for you.
//
// The first argument is the base of the name of all the
// weightfiles in the directory weight/
//
// The second argument is the output file for the training results
// All TMVA output can be suppressed by removing the "!" (not) in
// front of the "Silent" argument in the option string
std::string factoryOptions( "!V:!Silent:Transformations=I;D;P;G,D" );
if (batchMode) factoryOptions += ":!Color:!DrawProgressBar";
TMVA::Factory *factory = new TMVA::Factory( "TMVAClassificationCategory", outputFile, factoryOptions );
// If you wish to modify default settings
// (please check "src/Config.h" to see all available global options)
// (TMVA::gConfig().GetVariablePlotting()).fTimesRMS = 8.0;
// (TMVA::gConfig().GetIONames()).fWeightFileDir = "myWeightDirectory";
// Define the input variables that shall be used for the MVA training
// note that you may also use variable expressions, such as: "3*var1/var2*abs(var3)"
// [all types of expressions that can also be parsed by TTree::Draw( "expression" )]
factory->AddVariable( "var1", 'F' );
factory->AddVariable( "var2", 'F' );
factory->AddVariable( "var3", 'F' );
factory->AddVariable( "var4", 'F' );
// You can add so-called "Spectator variables", which are not used in the MVA training,
// but will appear in the final "TestTree" produced by TMVA. This TestTree will contain the
// input variables, the response values of all trained MVAs, and the spectator variables
factory->AddSpectator( "eta" );
// load the signal and background event samples from ROOT trees
TFile *input(0);
TString fname( "" );
if (UseOffsetMethod) fname = "../execs/data/toy_sigbkg_categ_offset.root";
else fname = "../execs/data/toy_sigbkg_categ_varoff.root";
if (!gSystem->AccessPathName( fname )) {
// first we try to find tmva_example.root in the local directory
std::cout << "--- TMVAClassificationCategory: Accessing " << fname << std::endl;
input = TFile::Open( fname );
}
if (!input) {
std::cout << "ERROR: could not open data file: " << fname << std::endl;
exit(1);
}
TTree *signal = (TTree*)input->Get("TreeS");
TTree *background = (TTree*)input->Get("TreeB");
/// global event weights per tree (see below for setting event-wise weights)
Double_t signalWeight = 1.0;
Double_t backgroundWeight = 1.0;
/// you can add an arbitrary number of signal or background trees
factory->AddSignalTree ( signal, signalWeight );
factory->AddBackgroundTree( background, backgroundWeight );
// Apply additional cuts on the signal and background samples (can be different)
TCut mycuts = ""; // for example: TCut mycuts = "abs(var1)<0.5 && abs(var2-0.5)<1";
TCut mycutb = ""; // for example: TCut mycutb = "abs(var1)<0.5";
// tell the factory to use all remaining events in the trees after training for testing:
factory->PrepareTrainingAndTestTree( mycuts, mycutb,
"nTrain_Signal=0:nTrain_Background=0:SplitMode=Random:NormMode=NumEvents:!V" );
// Fisher discriminant
factory->BookMethod( TMVA::Types::kFisher, "Fisher", "!H:!V:Fisher" );
// Likelihood
factory->BookMethod( TMVA::Types::kLikelihood, "Likelihood",
"!H:!V:TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmoothBkg[1]=10:NSmooth=1:NAvEvtPerBin=50" );
// Categorised classifier
TMVA::MethodCategory* mcat = 0;
// the variable sets
TString theCat1Vars = "var1:var2:var3:var4";
TString theCat2Vars = (UseOffsetMethod ? "var1:var2:var3:var4" : "var1:var2:var3");
// the Fisher
TMVA::MethodBase* fiCat = factory->BookMethod( TMVA::Types::kCategory, "FisherCat","" );
mcat = dynamic_cast<TMVA::MethodCategory*>(fiCat);
mcat->AddMethod("abs(eta)<=1.3",theCat1Vars, TMVA::Types::kFisher,"Category_Fisher_1","!H:!V:Fisher");
mcat->AddMethod("abs(eta)>1.3", theCat2Vars, TMVA::Types::kFisher,"Category_Fisher_2","!H:!V:Fisher");
//.........这里部分代码省略.........
示例14: main
int main(int argc, char * argv[])
{
//Processing input options
int c;
std::string outFname;
outFname = std::string("QualityNaF.root");
// Open input files, get the trees
TChain *mc = InputFileReader("FileListNtuples_ext.txt","parametri_geo");
// Preparing options for the TMVA::Factory
std::string options(
"!V:"
"!Silent:"
"Color:"
"DrawProgressBar:"
"Transformations=I;D;P;G,D:"
"AnalysisType=Classification"
);
//Creating the factory
TFile * ldFile = new TFile(outFname.c_str(),"RECREATE");
TMVA::Factory * factory = new TMVA::Factory("QualityNaF", ldFile, options.c_str());
//Preparing variables
//general
/*factory->AddVariable("Chisquare", 'F');
factory->AddVariable("Layernonusati", 'I');
factory->AddVariable("NTofUsed", 'I');
factory->AddVariable("diffR", 'F');
factory->AddVariable("TOF_Up_Down", 'F');*/
//Tof
//factory->AddVariable("TOFchisq_s", 'F');
//factory->AddVariable("TOFchisq_t", 'F');
//RICH
factory->AddVariable("Richtotused", 'F');
factory->AddVariable("RichPhEl", 'F');
factory->AddVariable("RICHprob", 'F');
factory->AddVariable("RICHcollovertotal");
factory->AddVariable("RICHLipBetaConsistency");
factory->AddVariable("RICHTOFBetaConsistency");
factory->AddVariable("RICHChargeConsistency");
factory->AddVariable("RICHPmts");
factory->AddVariable("RICHgetExpected");
factory->AddVariable("tot_hyp_p_uncorr");
factory->AddVariable("Bad_ClusteringRICH");
factory->AddVariable("NSecondariesRICHrich");
//factory->AddVariable("HitHValldir");
//factory->AddVariable("HitHVallrefl");
//factory->AddVariable("HVBranchCheck:= (HitHValldir - HitHVoutdir) - (HitHVallrefl - HitHVoutrefl)");
factory->AddVariable("HitHVoutdir");
factory->AddVariable("HitHVoutrefl");
//Spectator Variables
factory->AddSpectator("R", 'F');
factory->AddSpectator("BetaRICH_new", 'F');
//Preselection cuts
std::string PreSelection = "qL1>0&&(joinCutmask&187)==187&&qL1<1.75&&R>0";
std::string ChargeCut = "qUtof>0.8&&qUtof<1.3&&qLtof>0.8&&qLtof<1.3";
std::string VelocityCut = /*"Beta<0.8";*/"((joinCutmask>>11))==1024&&BetaRICH_new>0&&BetaRICH_new<0.975";
std::string signalCut = /*"(R/Beta)*(1-Beta^2)^0.5>1.65&&GenMass>1&&GenMass<2";*/"(R/BetaRICH_new)*(1-BetaRICH_new^2)^0.5>0.5&&(R/BetaRICH_new)*(1-BetaRICH_new^2)^0.5<1.5";
std::string bkgndCut = /*"(R/Beta)*(1-Beta^2)^0.5>1.65&&GenMass>0&&GenMass<1";*/"(R/BetaRICH_new)*(1-BetaRICH_new^2)^0.5>3";
factory->AddTree(mc,"Signal" ,1,(PreSelection +"&&"+ ChargeCut + "&&" + VelocityCut + "&&"+ signalCut).c_str());
factory->AddTree(mc,"Background",1,(PreSelection +"&&"+ ChargeCut + "&&" + VelocityCut + "&&"+ bkgndCut).c_str());
// Preparing
std::string preselection = "";
std::string inputparams(
"SplitMode=Random:"
"NormMode=NumEvents:"
"!V"
);
factory->PrepareTrainingAndTestTree(preselection.c_str(),inputparams.c_str());
// Training
std::string trainparams ="!H:!V:MaxDepth=3";
factory->BookMethod(TMVA::Types::kBDT, "BDT", trainparams.c_str());
trainparams ="!H:!V";
factory->BookMethod(TMVA::Types::kLikelihood, "Likelihood", trainparams.c_str());
trainparams ="!H:!V:VarTransform=Decorrelate";
//factory->BookMethod(TMVA::Types::kLikelihood, "LikelihoodD", trainparams.c_str());
trainparams ="!H:!V";
//factory->BookMethod(TMVA::Types::kCuts, "Cuts", trainparams.c_str());
factory->TrainAllMethods();
factory->TestAllMethods();
factory->EvaluateAllMethods();
}
示例15: TMVAClassificationElecTau
//.........这里部分代码省略.........
TCut cutD = "pt1>0 && MtLeg1<40";
// select events for training
TFile* dummy = new TFile("dummy.root","RECREATE");
TH1F* allEvents = new TH1F("allEvents","",1,-10,10);
float totalEvents, cutEvents;
// signal: all
TTree *signal = ((TTree*)(fSignal->Get(tree)))->CopyTree(cutA&&cutB&&cutC&&cutD);
cout << "Copied signal tree with full selection: " << ((TTree*)(fSignal->Get(tree)))->GetEntries() << " --> " << signal->GetEntries() << endl;
allEvents->Reset();
signal->Draw("eta1>>allEvents","sampleWeight");
cutEvents = allEvents->Integral();
Double_t signalWeight = 1.0;
cout << "Signal: expected yield " << cutEvents << " -- weight " << signalWeight << endl;
// Z+jets: all
TTree *backgroundDYJets = ((TTree*)(fBackgroundDYJets->Get(tree)))->CopyTree(cutA&&cutB&&cutC&&cutD);
cout << "Copied DYJets tree with full selection: " << ((TTree*)(fBackgroundDYJets->Get(tree)))->GetEntries() << " --> " << backgroundDYJets->GetEntries() << endl;
allEvents->Reset();
backgroundDYJets->Draw("eta1>>allEvents","sampleWeight");
cutEvents = allEvents->Integral();
Double_t backgroundDYJetsWeight = 1.0;
cout << "ZJets: expected yield " << cutEvents << " -- weight " << backgroundDYJetsWeight << endl;
// W+jets: iso+Mt
TTree *backgroundWJets = ((TTree*)(fBackgroundWJets->Get(tree)))->CopyTree(cutB&&cutD);
cout << "Copied WJets tree with iso+Mt selection: " << ((TTree*)(fBackgroundWJets->Get(tree)))->GetEntries() << " --> " << backgroundWJets->GetEntries() << endl;
allEvents->Reset();
backgroundWJets->Draw("eta1>>allEvents","sampleWeight");
totalEvents = allEvents->Integral();
allEvents->Reset();
backgroundWJets->Draw("eta1>>allEvents","sampleWeight*(tightestHPSWP>0 && diTauCharge==0)");
cutEvents = allEvents->Integral();
Double_t backgroundWJetsWeight = cutEvents / totalEvents;
cout << "WJets: expected yield " << cutEvents << " -- weight " << backgroundWJetsWeight << endl;
// QCD: Mt+loose iso
TTree *backgroundQCD = ((TTree*)(fBackgroundQCD->Get(tree)))->CopyTree(cutD&&cutBl);
cout << "Copied QCD tree with Mt selection: " << ((TTree*)(fBackgroundQCD->Get(tree)))->GetEntries() << " --> " << backgroundQCD->GetEntries() << endl;
allEvents->Reset();
backgroundQCD->Draw("eta1>>allEvents","sampleWeight");
totalEvents = allEvents->Integral();
allEvents->Reset();
backgroundQCD->Draw("eta1>>allEvents","sampleWeight*(tightestHPSWP>0 && diTauCharge==0 && combRelIsoLeg1<0.1)");
cutEvents = allEvents->Integral();
Double_t backgroundQCDWeight = cutEvents / totalEvents;
cout << "QCD: expected yield " << cutEvents << " -- weight " << backgroundQCDWeight << endl;
// TTbar: iso+Mt
TTree *backgroundTTbar = ((TTree*)(fBackgroundTTbar->Get(tree)))->CopyTree(cutB&&cutD);
cout << "Copied TTbar tree with iso+Mt selection: " << ((TTree*)(fBackgroundTTbar->Get(tree)))->GetEntries() << " --> " << backgroundTTbar->GetEntries() << endl;
allEvents->Reset();
backgroundTTbar->Draw("eta1>>allEvents","sampleWeight");
totalEvents = allEvents->Integral();
allEvents->Reset();
backgroundTTbar->Draw("eta1>>allEvents","sampleWeight*(tightestHPSWP>0 && diTauCharge==0)");
cutEvents = allEvents->Integral();
Double_t backgroundTTbarWeight = cutEvents / totalEvents;
cout << "TTbar: expected yield " << cutEvents << " -- weight " << backgroundTTbarWeight << endl;
delete allEvents;
factory->AddSignalTree ( signal, signalWeight );
//factory->AddBackgroundTree( backgroundDYJets, backgroundDYJetsWeight );
//factory->AddBackgroundTree( backgroundWJets, backgroundWJetsWeight );
factory->AddBackgroundTree( backgroundQCD, backgroundQCDWeight );
//factory->AddBackgroundTree( backgroundTTbar, backgroundTTbarWeight );
factory->PrepareTrainingAndTestTree( mycuts, mycutb,
"nTrain_Signal=0:nTrain_Background=0:nTest_Signal=1:nTest_Background=1:SplitMode=Random:NormMode=NumEvents:!V" );
factory->BookMethod( TMVA::Types::kCuts, "Cuts",
"!H:!V:FitMethod=GA:EffSel:CutRangeMin[0]=25.:CutRangeMax[0]=999:CutRangeMin[1]=25.:CutRangeMax[1]=999.:CutRangeMin[2]=1.0:CutRangeMax[2]=9.:CutRangeMin[3]=100:CutRangeMax[3]=7000:VarProp=FSmart" );
/*
factory->BookMethod( TMVA::Types::kBDT, "BDT",
"!H:!V:NTrees=200:BoostType=AdaBoost:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning" );
*/
factory->TrainAllMethods();
factory->TestAllMethods();
factory->EvaluateAllMethods();
outputFile->Close();
std::cout << "==> Wrote root file: " << outputFile->GetName() << std::endl;
std::cout << "==> TMVAClassification is done!" << std::endl;
delete factory;
//if (!gROOT->IsBatch()) TMVAGui( outfileName );
}