#include #include #include #include #include "TChain.h" #include "TFile.h" #include "TTree.h" #include "TString.h" #include "TObjString.h" #include "TSystem.h" #include "TROOT.h" #include "TMVA/Factory.h" #include "TMVA/Tools.h" #include "TMVA/DataLoader.h" #include "TMVA/TMVAGui.h" //#include "Untuplizer_07.h" void HZg_mva(TString myMethodList = ""){ double mcwei[6] = {0.0002758,0.0001291,7.501e-06, 137751*35.4*0.001/15423369, 154500*35.4*0.001/32866937, 35.4*0.001*16792/69069900}; TString sampleNames = "_HZg_test"; TString outFileName = sampleNames+"TMVA.root"; TMVA::Tools::Instance(); std::map Use; Use["BDT"] = 1; Use["Cuts"] = 1; if (myMethodList != "") { for (std::map::iterator it = Use.begin(); it != Use.end(); it++) it->second = 0; std::vector mlist = TMVA::gTools().SplitString(myMethodList, ','); for (UInt_t i = 0; i < mlist.size(); i++) { std::string regMethod(mlist[i]); if (Use.find(regMethod) == Use.end()) { std::cout << "Method \"" << regMethod << "\" not known in TMVA under this name. Choose among the following:" << std::endl; for (std::map::iterator it = Use.begin(); it != Use.end(); it++) std::cout << it->first << " "; std::cout << std::endl; return; } Use[regMethod] = 1; } } TFile* outputFile = TFile::Open(outFileName, "RECREATE"); TMVA::Factory *factory = new TMVA::Factory("TMVAClassification", outputFile, "!V:Color:DrawProgressBar:Transformations=I;D;G,D:AnalysisType=Classification"); TFile *gj_20to40 = TFile::Open("miniAOD_pho_gjet_pt20to40_MGG_80toInf.root"); TFile *gj_20 = TFile::Open("miniAOD_pho_gjet_pt20_MGG_40to80.root"); TFile *gj_40 = TFile::Open("miniAOD_pho_gjet_pt40_MGG_80toInf.root"); cout<<"input signal file"<Get("mEvent"); TTree *t_20 = (TTree*)gj_20->Get("mEvent"); TTree *t_40 = (TTree*)gj_40->Get("mEvent"); TMVA::DataLoader *dataloader=new TMVA::DataLoader("dataset"); dataloader->AddVariable("reco_Pt","reco_Pt","",'F'); dataloader->AddVariable("reco_Eta","reco_#eta","",'F'); dataloader->AddVariable("reco_Phi","reco_#phi","",'F'); dataloader->AddVariable("r9","r9","",'F'); dataloader->AddVariable("rawE","rawE","",'F'); dataloader->AddVariable("sigmaIEtaIEta","#sigmaI#etaI#eta","",'F'); dataloader->AddVariable("Phiwidth","#phiwidth","",'F'); dataloader->AddVariable("Etawidth","#etawidth","",'F'); dataloader->AddVariable("sigmaIEtaIPhi","#sigmaI#etaI#phi","",'F'); dataloader->AddVariable("s4","s4","",'F'); dataloader->AddVariable("sigmaRR","#sigmaRR","",'F'); // dataloader->AddVariable("Rho","Rho","",'F'); dataloader->AddVariable("phoIso","phoIso","",'F'); dataloader->AddVariable("chIso","chIso","",'F'); dataloader->AddVariable("chworstIso","chworstIso","",'F'); dataloader->AddVariable("esEoverrawE","esEoverrawE","",'F'); cout<<"debug"<AddSignalTree(t_20to40,mcwei[0]); dataloader->AddSignalTree(t_20,mcwei[1]); dataloader->AddBackgroundTree(t_40,mcwei[2]); 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"; dataloader->PrepareTrainingAndTestTree( mycuts, mycutb, "SplitMode=Random:NormMode=NumEvents:!V" ); if (Use["BDT"]) // Adaptive Boost factory->BookMethod( dataloader, TMVA::Types::kBDT, "BDT", "!H:!V:NTrees=100:MinNodeSize=2.5%:MaxDepth=3:BoostType=AdaBoost:AdaBoostBeta=0.5:UseBaggedBoost:BaggedSampleFraction=0.5:SeparationType=GiniIndex:nCuts\ =20" ); if (Use["Cuts"]) factory->BookMethod( dataloader, TMVA::Types::kCuts, "Cuts", "!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart" ); factory->TrainAllMethods(); factory->TestAllMethods(); cout<<"?"<EvaluateAllMethods(); outputFile->Close(); delete factory; delete dataloader; }