//**********MAIN************************************************************************** int main(int argc, char* argv[]) { if(argc < 2) { cout << argv[0] << " cfg file " << "[run]" << endl; return -1; } //---memory consumption tracking--- float cpu[2]{0}, mem[2]={0}, vsz[2]={0}, rss[2]={0}; //---load options--- CfgManager opts; opts.ParseConfigFile(argv[1]); //-----input setup----- if(argc > 2) { vector<string> run(1, argv[2]); opts.SetOpt("h4reco.run", run); } string outSuffix = opts.GetOpt<string>("h4reco.outNameSuffix"); string run = opts.GetOpt<string>("h4reco.run"); TChain* inTree = new TChain("H4tree"); ReadInputFiles(opts, inTree); H4Tree h4Tree(inTree); //-----output setup----- uint64 index=stoul(run)*1e9; TFile* outROOT = new TFile(outSuffix+TString(run)+".root", "RECREATE"); outROOT->cd(); RecoTree mainTree(&index); //---Get plugin sequence--- PluginLoader<PluginBase>* loader; vector<PluginLoader<PluginBase>* > pluginLoaders; map<string, PluginBase*> pluginMap; vector<PluginBase*> pluginSequence; vector<string> pluginList = opts.GetOpt<vector<string> >("h4reco.pluginList"); //---plugin creation pluginLoaders.reserve(pluginList.size()); for(auto& plugin : pluginList) { cout << ">>> Loading plugin <" << plugin << ">" << endl; //---create loader loader = new PluginLoader<PluginBase>(opts.GetOpt<string>(plugin+".pluginType")); pluginLoaders.push_back(loader); pluginLoaders.back()->Create(); //---get instance and put it in the plugin sequence PluginBase* newPlugin = pluginLoaders.back()->CreateInstance(); if(newPlugin) { pluginSequence.push_back(newPlugin); pluginSequence.back()->SetInstanceName(plugin); pluginMap[plugin] = pluginSequence.back(); } else { cout << ">>> ERROR: plugin type " << opts.GetOpt<string>(plugin+".pluginType") << " is not defined." << endl; return 0; } } //---begin for(auto& plugin : pluginSequence) { //---call Begin() methods and check the return status bool r_status = plugin->Begin(opts, &index); if(!r_status) { cout << ">>> ERROR: plugin returned bad flag from Begin() call: " << plugin->GetInstanceName() << endl; exit(-1); } //---Get plugin shared data for(auto& shared : plugin->GetSharedData("", "TTree", true)) { TTree* tree = (TTree*)shared.obj; tree->SetMaxVirtualSize(10000); tree->SetDirectory(outROOT); } } //---events loop int maxEvents = opts.OptExist("h4reco.maxEvents") ? opts.GetOpt<int>("h4reco.maxEvents") : -1; cout << ">>> Processing H4DAQ run #" << run << " <<<" << endl; while(h4Tree.NextEntry() && (index-stoul(run)*1e9<maxEvents || maxEvents==-1)) { if(index % 1000 == 0) { cout << ">>> Processed events: " << index-stoul(run)*1e9 << "/" << (maxEvents<0 ? h4Tree.GetEntries() : min(h4Tree.GetEntries(), (uint64)maxEvents)) << endl; TrackProcess(cpu, mem, vsz, rss); } //---call ProcessEvent for each plugin and check the return status bool status=true; for(auto& plugin : pluginSequence) if(status) status = plugin->ProcessEvent(h4Tree, pluginMap, opts); //---fill the main tree with info variables and increase event counter if(status) { mainTree.time_stamp = h4Tree.evtTimeStart; mainTree.run = h4Tree.runNumber; mainTree.spill = h4Tree.spillNumber; mainTree.event = h4Tree.evtNumber; mainTree.Fill(); ++index; } } //---end for(auto& plugin : pluginSequence) { //---call endjob for each plugin bool r_status = plugin->End(opts); // if(!r_status) // { // cout << ">>> ERROR: plugin returned bad flag from End() call: " << plugin->GetInstanceName() << endl; // exit(-1); // } //---get permanent data from each plugin and store them in the out file for(auto& shared : plugin->GetSharedData()) { if(shared.obj->IsA()->GetName() == string("TTree")) { TTree* currentTree = (TTree*)shared.obj; outROOT->cd(); currentTree->BuildIndex("index"); currentTree->Write(currentTree->GetName(), TObject::kOverwrite); mainTree.AddFriend(currentTree->GetName()); } else { outROOT->cd(); shared.obj->Write(shared.tag.c_str(), TObject::kOverwrite); } } } //---close mainTree.Write(); opts.Write("cfg"); outROOT->Close(); for(auto& loader : pluginLoaders) loader->Destroy(); //---info TrackProcess(cpu, mem, vsz, rss); exit(0); }
TTree *ToyTree(TString dirname="test/dato/fitres/Hgg_Et-toys/0.01-0.00", TString fname="outProfile-scaleStep2smearing_7-Et_25-trigger-noPF-EB.root", TString opt="", int nSmooth=10){ TString outDir=dirname; outDir.ReplaceAll("fitres","img"); outDir="tmp/"; //std::map<TString, TH2F *> deltaNLL_map; //bool smooth=false; //if(opt.Contains("smooth")) smooth=true; /*------------------------------ Plotto */ TCanvas c("ctoy","c"); TTree *toys = new TTree("toys",""); toys->SetDirectory(0); Double_t constTerm_tree, constTermTrue_tree; Double_t alpha_tree, alphaTrue_tree; char catName[100]; Int_t catIndex; toys->Branch("constTerm", &constTerm_tree, "constTerm/D"); toys->Branch("alpha", &alpha_tree, "alpha/D"); toys->Branch("constTermTrue", &constTermTrue_tree, "constTermTrue/D"); toys->Branch("alphaTrue", &alphaTrue_tree, "alphaTrue/D"); toys->Branch("catName", catName, "catName/C"); toys->Branch("catIndex", &catIndex, "catIndex/I"); std::map<TString, Int_t> catIndexMap; ///1/ for(int itoy =2; itoy <= 50; itoy++){ TString filename=dirname+"/"; filename+=itoy; filename+="/"+fname; TString fout=dirname+"/"; fout+=itoy; fout+="/"; TFile f_in(filename, "read"); if(f_in.IsZombie()){ std::cerr << "File opening error: " << filename << std::endl; continue; //return NULL; } //std::cout << filename << std::endl; TList *KeyList = f_in.GetListOfKeys(); //std::cout << KeyList->GetEntries() << std::endl; for(int i =0; i < KeyList->GetEntries(); i++){ c.Clear(); TKey *key = (TKey *)KeyList->At(i); if(TString(key->GetClassName())!="RooDataSet") continue; RooDataSet *dataset = (RooDataSet *) key->ReadObj(); TString constTermName = dataset->GetName(); TString alphaName=constTermName; alphaName.ReplaceAll("constTerm","alpha"); if(constTermName.Contains("scale")) continue; if(constTermName.Contains("alpha")) continue; if(constTermName.Contains("1.4442-gold")) continue; TTree *tree = dataset2tree(dataset); TGraph *rhoGraph = GetRho(tree, alphaName, constTermName); rhoGraph->SaveAs(fout+"rhoGraph-"+constTermName+".root"); TGraphErrors bestFit_ = bestFit(tree, alphaName, constTermName); //TString binning="(241,-0.0005,0.2405,61,-0.00025,0.03025)"; //"(40,0.00025,0.02025,61,-0.0022975,0.1401475)"; TString binning="(241,-0.0005,0.2405,301,-0.00005,0.03005)"; TH2F *hist = prof2d(tree, constTermName, alphaName, "nll", binning, true, nSmooth, opt); //hist->SaveAs("myhist.root"); Int_t iBinX, iBinY; hist->GetBinWithContent2(0.0002,iBinX,iBinY,1,-1,1,-1,0.0000001); // if(iBinX!=0 && iBinY!=0 && iBinX < 41 && iBinY < 62){ { TString catName_=constTermName; catName_.ReplaceAll("constTerm_",""); catName_.ReplaceAll("-","_"); if(catIndexMap.count(catName_)==0) catIndexMap.insert(std::pair<TString,Int_t>(catName_,catIndexMap.size())); catIndex=catIndexMap[catName_]; constTerm_tree = hist->GetYaxis()->GetBinCenter(iBinY); alpha_tree = hist->GetXaxis()->GetBinCenter(iBinX); sprintf(catName,"%s", catName_.Data()); bestFit_.GetPoint(0, constTermTrue_tree,alphaTrue_tree); // std::cout << constTerm_tree << " " << constTermTrue_tree // << "\t" << alpha_tree << " " << alphaTrue_tree // << std::endl; if(opt.Contains("scandiff")){ constTermTrue_tree = getMinimumFromTree(tree, "nll",TString(constTermName).ReplaceAll("-","_")); } else if(opt.Contains("scan")){ constTerm_tree = getMinimumFromTree(tree, "nll",TString(constTermName).ReplaceAll("-","_")); } //std::cout << iBinX << "\t" << iBinY << "\t" << constTerm_tree - getMinimumFromTree(tree, "nll",TString(constTermName).ReplaceAll("-","_")) << std::endl; toys->Fill(); // }else{ // hist->SaveAs("myhist.root"); // exit(0); } delete tree; delete hist; } f_in.Close(); } //toys->SaveAs("tmp/toysTree.root"); return toys; }
void ZJetsToLL_App_bflavor( TString myMethodList = "" ) { #ifdef __CINT__ gROOT->ProcessLine( ".O0" ); // turn off optimization in CINT #endif //--------------------------------------------------------------- // This loads the library TMVA::Tools::Instance(); // Default MVA methods to be trained + tested std::map<std::string,int> Use; // --- Cut optimisation Use["Cuts"] = 0; Use["CutsD"] = 0; Use["CutsPCA"] = 0; Use["CutsGA"] = 0; Use["CutsSA"] = 0; // // --- 1-dimensional likelihood ("naive Bayes estimator") Use["Likelihood"] = 0; Use["LikelihoodD"] = 0; // the "D" extension indicates decorrelated input variables (see option strings) Use["LikelihoodPCA"] = 0; // the "PCA" extension indicates PCA-transformed input variables (see option strings) Use["LikelihoodKDE"] = 0; Use["LikelihoodMIX"] = 0; // // --- Mutidimensional likelihood and Nearest-Neighbour methods Use["PDERS"] = 0; Use["PDERSD"] = 0; Use["PDERSPCA"] = 0; Use["PDEFoam"] = 0; Use["PDEFoamBoost"] = 0; // uses generalised MVA method boosting Use["KNN"] = 0; // k-nearest neighbour method // // --- Linear Discriminant Analysis Use["LD"] = 0; // Linear Discriminant identical to Fisher Use["Fisher"] = 0; Use["FisherG"] = 0; Use["BoostedFisher"] = 0; // uses generalised MVA method boosting Use["HMatrix"] = 0; // // --- Function Discriminant analysis Use["FDA_GA"] = 0; // minimisation of user-defined function using Genetics Algorithm Use["FDA_SA"] = 0; Use["FDA_MC"] = 0; Use["FDA_MT"] = 0; Use["FDA_GAMT"] = 0; Use["FDA_MCMT"] = 0; // // --- Neural Networks (all are feed-forward Multilayer Perceptrons) Use["MLP"] = 0; // Recommended ANN Use["MLPBFGS"] = 0; // Recommended ANN with optional training method Use["MLPBNN"] = 0; // Recommended ANN with BFGS training method and bayesian regulator Use["CFMlpANN"] = 0; // Depreciated ANN from ALEPH Use["TMlpANN"] = 0; // ROOT's own ANN // // --- Support Vector Machine Use["SVM"] = 0; // // --- Boosted Decision Trees using this Use["BDT"] = 1; // uses Adaptive Boost Use["BDTG"] = 0; // uses Gradient Boost Use["BDTB"] = 0; // uses Bagging Use["BDTD"] = 0; // decorrelation + Adaptive Boost // // --- Friedman's RuleFit method, ie, an optimised series of cuts ("rules") Use["RuleFit"] = 0; // --------------------------------------------------------------- Use["Plugin"] = 0; Use["Category"] = 0; Use["SVM_Gauss"] = 0; Use["SVM_Poly"] = 0; Use["SVM_Lin"] = 0; std::cout << std::endl; std::cout << "==> Start ZJetsToLL_App_bflavor" << std::endl; // Select methods (don't look at this code - not of interest) if (myMethodList != "") { for (std::map<std::string,int>::iterator it = Use.begin(); it != Use.end(); it++) it->second = 0; std::vector<TString> mlist = 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<std::string,int>::iterator it = Use.begin(); it != Use.end(); it++) { std::cout << it->first << " "; } std::cout << std::endl; return; } Use[regMethod] = 1; } } // -------------------------------------------------------------------------------------------------- // --- Create the Reader object TMVA::Reader *reader = new TMVA::Reader( "!Color:!Silent" ); // Create a set of variables and declare them to the reader // - the variable names MUST corresponds in name and type to those given in the weight file(s) used Float_t Hmass, Zmass; Float_t Hpt, Zpt; Float_t CSV0, CSV1; Float_t DeltaPhiHV, DetaJJ; Int_t nJets, eventFlavor; Float_t Naj, nSV; Float_t BDTvalue, Trigweight, B2011PUweight, btag2CSF, MET; Float_t alpha_j, qtb1, jetPhi0, jetPhi1, jetEta0, jetEta1, Zphi, Hphi; Float_t Ht, EvntShpCircularity, jetCHF0, jetCHF1; Float_t EtaStandDev, muonPFiso0, muonPFiso1, EvntShpIsotropy; Float_t mu0pt, mu1pt, UnweightedEta, DphiJJ, RMS_eta, EvntShpSphericity; Float_t PtbalZH, EventPt, Angle, Centrality, EvntShpAplanarity; reader->AddVariable( "Hmass", &Hmass ); // reader->AddVariable( "Zmass", &Zmass ); reader->AddVariable( "Hpt", &Hpt ); reader->AddVariable( "CSV0", &CSV0 ); reader->AddVariable( "CSV1", &CSV1 ); reader->AddVariable( "Zpt", &Zpt ); reader->AddVariable( "DeltaPhiHV:= abs(deltaPhi(Hphi,Zphi))", &DeltaPhiHV ); reader->AddVariable( "DetaJJ:= abs(jetEta1-jetEta0)", &DetaJJ ); reader->AddVariable( "Naj", &Naj); reader->AddVariable( "UnweightedEta", &UnweightedEta ); reader->AddVariable( "EvntShpCircularity", &EvntShpCircularity ); reader->AddVariable( "alpha_j", &alpha_j ); reader->AddVariable( "qtb1", &qtb1 ); reader->AddVariable( "nSV", &nSV ); reader->AddVariable( "mu0pt", &mu0pt ); reader->AddVariable( "mu1pt", &mu1pt ); reader->AddVariable( "PtbalZH", &PtbalZH ); reader->AddVariable( "Angle", &Angle ); reader->AddVariable( "Centrality", &Centrality ); reader->AddVariable( "MET", &MET ); reader->AddVariable( "EvntShpAplanarity", &EvntShpAplanarity ); // Spectator variables declared in the training have to be added to the reader, too Float_t UnweightedEta, mu0pt; // reader->AddSpectator( "UnweightedEta", &UnweightedEta ); // reader->AddSpectator( "mu0pt", &mu0pt ); /* Float_t Category_cat1, Category_cat2, Category_cat3; if (Use["Category"]){ // Add artificial spectators for distinguishing categories reader->AddSpectator( "Category_cat1 := var3<=0", &Category_cat1 ); reader->AddSpectator( "Category_cat2 := (var3>0)&&(var4<0)", &Category_cat2 ); reader->AddSpectator( "Category_cat3 := (var3>0)&&(var4>=0)", &Category_cat3 ); } */ // --- Book the MVA methods TString dir = "weights/"; TString prefix = "TMVAClassification"; // Book method(s) for (std::map<std::string,int>::iterator it = Use.begin(); it != Use.end(); it++) { if (it->second) { TString methodName = TString(it->first) + TString(" method"); TString weightfile = dir + prefix + TString("_") + TString(it->first) + TString(".weights.xml"); reader->BookMVA( methodName, weightfile ); } } // Book output histograms TH1F* hCHFb0_OpenSelection= new TH1F ("hCHFb0_OpenSelection", "charged Hadron Energy Fraction b1", 40, 0.0, 1.2); TH1F* hCHFb1_OpenSelection= new TH1F ("hCHFb1_OpenSelection", "charged Hadron Energy Fraction b2", 40, 0.0, 1.2); TH1F* hPtjj_OpenSelection= new TH1F ("hPtjj_OpenSelection","Pt of two b jets with highest CSV ", 50, 0.0, 400); TH1F* hPtmumu_OpenSelection= new TH1F ("hPtmumu_OpenSelection","Pt of two muons with highest pt ", 50, 0.0, 400); TH1F* hPtbalZH_OpenSelection= new TH1F ("hPtbalZH_OpenSelection", "Pt balance of Z and H", 40, -80, 80); TH1F* hPtmu0_OpenSelection= new TH1F ("hPtmu0_OpenSelection","Pt of muon with highest pt ", 30, 0.0, 300); TH1F* hPtmu1_OpenSelection= new TH1F ("hPtmu1_OpenSelection","Pt of muon with second highest pt ", 30, 0.0, 300); TH1F* hPFRelIsomu0_OpenSelection= new TH1F ("hPFRelIsomu0_OpenSelection", "PF Rel Iso of muon with highest Pt", 40, 0., 0.2); TH1F* hPFRelIsomu1_OpenSelection= new TH1F ("hPFRelIsomu1_OpenSelection", "PF Rel Iso of muon with second highest Pt", 40, 0., 0.2); TH1F* hCSV0_OpenSelection= new TH1F ("hCSV0_OpenSelection","Jet with highest CSV ", 40, 0, 1.5); TH1F* hCSV1_OpenSelection= new TH1F ("hCSV1_OpenSelection","Jet with second highest CSV ", 40, 0, 1.5); TH1F* hdphiVH_OpenSelection= new TH1F ("hdphiVH_OpenSelection","Delta phi between Z and Higgs ", 50, -0.1, 4.5); TH1F* hdetaJJ_OpenSelection= new TH1F ("hdetaJJ_OpenSelection","Delta eta between two jets ", 60, -4, 4); TH1F* hNjets_OpenSelection= new TH1F ("hNjets_OpenSelection", "Number of Jets", 13, -2.5, 10.5); TH1F* hMjj_OpenSelection = new TH1F ("hMjj_OpenSelection", "Invariant Mass of two Jets ", 50, 0, 300); TH1F* hMmumu_OpenSelection = new TH1F ("hMmumu_OpenSelection", "Invariant Mass of two muons ", 75, 0, 200); TH1F* hRMSeta_OpenSelection= new TH1F ("hRMSeta_OpenSelection", "RMS Eta", 30, 0, 3); TH1F* hStaDeveta_OpenSelection= new TH1F ("hStaDeveta_OpenSelection", "Standard Deviation Eta", 30, 0, 3); TH1F* hUnweightedEta_OpenSelection= new TH1F ("hUnweightedEta_OpenSelection", "Unweighted Eta ", 50, 0, 15); TH1F* hdphiJJ_vect_OpenSelection= new TH1F ("hdphiJJ_vect_OpenSelection", "Delta phi between two jets", 30, -3.5, 4); TH1F* hCircularity_OpenSelection= new TH1F("hCircularity_OpenSelection","EventShapeVariables circularity", 30, 0.0, 1.2); TH1F* hHt_OpenSelection= new TH1F("hHt_OpenSelection","scalar sum of pt of four particles", 50, 0.0, 500); TH1F* hCentrality_OpenSelection= new TH1F ("hCentrality_OpenSelection", "Centrality", 40, 0.0, 0.8); TH1F* hEventPt_OpenSelection= new TH1F ("hEventPt_OpenSelection", "Pt of HV system", 50, 0.0, 100); TH1F* hAngle_OpenSelection= new TH1F ("hAngle_OpenSelection", "Angle between H and Z", 45, 0, 4.5); TH1F* hSphericity_OpenSelection= new TH1F ("hSphericity_OpenSelection", "EventShapeVariables sphericity", 50, 0.0, 1); TH1F* hAplanarity_OpenSelection= new TH1F ("hAplanarity_OpenSelection", "EventShapeVariables Aplanarity", 50, -0.1, .4); TH1F* hIsotropy_OpenSelection= new TH1F ("hIsotropy_OpenSelection", "EventShapeVariables isotropy", 30, 0.0, 1.3); TH2F* hDphiDetajj_OpenSelection= new TH2F ("hDphiDetajj_OpenSelection", "#Delta#phi vs #Delta#eta JJ", 25, -5, 5, 25, -5, 5); TTree *treeWithBDT = new TTree("treeWithBDT","Tree wiht BDT output"); treeWithBDT->SetDirectory(0); treeWithBDT->Branch("nJets",&nJets, "nJets/I"); treeWithBDT->Branch("Naj",&Naj, "Naj/F"); treeWithBDT->Branch("eventFlavor",&eventFlavor, "eventFlavor/I"); treeWithBDT->Branch("CSV0",&CSV0, "CSV0/F"); treeWithBDT->Branch("CSV1",&CSV1, "CSV1/F"); treeWithBDT->Branch("Zmass",&Zmass, "Zmass/F"); treeWithBDT->Branch("Hmass",&Hmass, "Hmass/F"); treeWithBDT->Branch("DeltaPhiHV",&DeltaPhiHV, "DeltaPhiHV/F"); treeWithBDT->Branch("Hpt",&Hpt, "Hpt/F"); treeWithBDT->Branch("Zpt",&Zpt, "Zpt/F"); treeWithBDT->Branch("mu0pt",&mu0pt, "mu0pt/F"); treeWithBDT->Branch("Ht",&Ht, "Ht/F"); treeWithBDT->Branch("EtaStandDev",&EtaStandDev, "EtaStandDev/F"); treeWithBDT->Branch("UnweightedEta",&UnweightedEta, "UnweightedEta/F"); treeWithBDT->Branch("EvntShpCircularity",&EvntShpCircularity, "EvntShpCircularity/F"); treeWithBDT->Branch("alpha_j",&alpha_j, "alpha_j/F"); treeWithBDT->Branch("qtb1",&qtb1, "qtb1/F"); treeWithBDT->Branch("nSV",&nSV, "nSV/F"); treeWithBDT->Branch("Trigweight",&Trigweight, "Trigweight/F"); treeWithBDT->Branch("B2011PUweight",&B2011PUweight, "B2011PUweight/F"); treeWithBDT->Branch("btag2CSF",&btag2CSF, "btag2CSF/F"); treeWithBDT->Branch("DetaJJ",&DetaJJ, "DetaJJ/F"); treeWithBDT->Branch("jetCHF0",&jetCHF0, "jetCHF0/F"); treeWithBDT->Branch("jetCHF1",&jetCHF1, "jetCHF1/F"); treeWithBDT->Branch("jetPhi0",&jetPhi0, "jetPhi0/F"); treeWithBDT->Branch("jetPhi1",&jetPhi1, "jetPhi1/F"); treeWithBDT->Branch("jetEta0",&jetEta0, "jetEta0/F"); treeWithBDT->Branch("jetEta1",&jetEta1, "jetEta1/F"); treeWithBDT->Branch("mu1pt",&mu1pt, "mu1pt/F"); treeWithBDT->Branch("muonPFiso0",&muonPFiso0, "muonPFiso0/F"); treeWithBDT->Branch("muonPFiso1",&muonPFiso1, "muonPFiso1/F"); treeWithBDT->Branch("DphiJJ",&DphiJJ, "DphiJJ/F"); treeWithBDT->Branch("RMS_eta",&RMS_eta, "RMS_eta/F"); treeWithBDT->Branch("PtbalZH",&PtbalZH, "PtbalZH/F"); treeWithBDT->Branch("EventPt",&EventPt, "EventPt/F"); treeWithBDT->Branch("Angle",&Angle, "Angle/F"); treeWithBDT->Branch("Centrality",&Centrality, "Centrality/F"); treeWithBDT->Branch("MET",&MET, "MET/F"); treeWithBDT->Branch("EvntShpAplanarity",&EvntShpAplanarity, "EvntShpAplanarity/F"); treeWithBDT->Branch("EvntShpSphericity",&EvntShpSphericity, "EvntShpSphericity/F"); treeWithBDT->Branch("EvntShpIsotropy",&EvntShpIsotropy, "EvntShpIsotropy/F"); treeWithBDT->Branch("Zphi",&Zphi, "Zphi/F"); treeWithBDT->Branch("Hphi",&Hphi, "Hphi/F"); treeWithBDT->Branch("BDTvalue",&BDTvalue, "BDTvalue/F"); UInt_t nbin = 15; TH1F *histLk(0), *histLkD(0), *histLkPCA(0), *histLkKDE(0), *histLkMIX(0), *histPD(0), *histPDD(0); TH1F *histPDPCA(0), *histPDEFoam(0), *histPDEFoamErr(0), *histPDEFoamSig(0), *histKNN(0), *histHm(0); TH1F *histFi(0), *histFiG(0), *histFiB(0), *histLD(0), *histNn(0),*histNnbfgs(0),*histNnbnn(0); TH1F *histNnC(0), *histNnT(0), *histBdt(0), *histBdtG(0), *histBdtD(0), *histRf(0), *histSVMG(0); TH1F *histSVMP(0), *histSVML(0), *histFDAMT(0), *histFDAGA(0), *histCat(0), *histPBdt(0); if (Use["Likelihood"]) histLk = new TH1F( "MVA_Likelihood", "MVA_Likelihood", nbin, -1, 1 ); if (Use["LikelihoodD"]) histLkD = new TH1F( "MVA_LikelihoodD", "MVA_LikelihoodD", nbin, -1, 0.9999 ); if (Use["LikelihoodPCA"]) histLkPCA = new TH1F( "MVA_LikelihoodPCA", "MVA_LikelihoodPCA", nbin, -1, 1 ); if (Use["LikelihoodKDE"]) histLkKDE = new TH1F( "MVA_LikelihoodKDE", "MVA_LikelihoodKDE", nbin, -0.00001, 0.99999 ); if (Use["LikelihoodMIX"]) histLkMIX = new TH1F( "MVA_LikelihoodMIX", "MVA_LikelihoodMIX", nbin, 0, 1 ); if (Use["PDERS"]) histPD = new TH1F( "MVA_PDERS", "MVA_PDERS", nbin, 0, 1 ); if (Use["PDERSD"]) histPDD = new TH1F( "MVA_PDERSD", "MVA_PDERSD", nbin, 0, 1 ); if (Use["PDERSPCA"]) histPDPCA = new TH1F( "MVA_PDERSPCA", "MVA_PDERSPCA", nbin, 0, 1 ); if (Use["KNN"]) histKNN = new TH1F( "MVA_KNN", "MVA_KNN", nbin, 0, 1 ); if (Use["HMatrix"]) histHm = new TH1F( "MVA_HMatrix", "MVA_HMatrix", nbin, -0.95, 1.55 ); if (Use["Fisher"]) histFi = new TH1F( "MVA_Fisher", "MVA_Fisher", nbin, -4, 4 ); if (Use["FisherG"]) histFiG = new TH1F( "MVA_FisherG", "MVA_FisherG", nbin, -1, 1 ); if (Use["BoostedFisher"]) histFiB = new TH1F( "MVA_BoostedFisher", "MVA_BoostedFisher", nbin, -2, 2 ); if (Use["LD"]) histLD = new TH1F( "MVA_LD", "MVA_LD", nbin, -2, 2 ); if (Use["MLP"]) histNn = new TH1F( "MVA_MLP", "MVA_MLP", nbin, -1.25, 1.5 ); if (Use["MLPBFGS"]) histNnbfgs = new TH1F( "MVA_MLPBFGS", "MVA_MLPBFGS", nbin, -1.25, 1.5 ); if (Use["MLPBNN"]) histNnbnn = new TH1F( "MVA_MLPBNN", "MVA_MLPBNN", nbin, -1.25, 1.5 ); if (Use["CFMlpANN"]) histNnC = new TH1F( "MVA_CFMlpANN", "MVA_CFMlpANN", nbin, 0, 1 ); if (Use["TMlpANN"]) histNnT = new TH1F( "MVA_TMlpANN", "MVA_TMlpANN", nbin, -1.3, 1.3 ); if (Use["BDT"]) { histMattBdt = new TH1F( "Matt_BDT", "Matt_BDT", 15, -1.1, 0.35 ); histTMVABdt = new TH1F( "TMVA_BDT", "TMVA_BDT", 88, -1.0, 0.1 ); } if (Use["BDTD"]) histBdtD = new TH1F( "MVA_BDTD", "MVA_BDTD", nbin, -0.8, 0.8 ); if (Use["BDTG"]) histBdtG = new TH1F( "MVA_BDTG", "MVA_BDTG", nbin, -1.0, 1.0 ); if (Use["RuleFit"]) histRf = new TH1F( "MVA_RuleFit", "MVA_RuleFit", nbin, -2.0, 2.0 ); if (Use["SVM_Gauss"]) histSVMG = new TH1F( "MVA_SVM_Gauss", "MVA_SVM_Gauss", nbin, 0.0, 1.0 ); if (Use["SVM_Poly"]) histSVMP = new TH1F( "MVA_SVM_Poly", "MVA_SVM_Poly", nbin, 0.0, 1.0 ); if (Use["SVM_Lin"]) histSVML = new TH1F( "MVA_SVM_Lin", "MVA_SVM_Lin", nbin, 0.0, 1.0 ); if (Use["FDA_MT"]) histFDAMT = new TH1F( "MVA_FDA_MT", "MVA_FDA_MT", nbin, -2.0, 3.0 ); if (Use["FDA_GA"]) histFDAGA = new TH1F( "MVA_FDA_GA", "MVA_FDA_GA", nbin, -2.0, 3.0 ); if (Use["Category"]) histCat = new TH1F( "MVA_Category", "MVA_Category", nbin, -2., 2. ); if (Use["Plugin"]) histPBdt = new TH1F( "MVA_PBDT", "MVA_BDT", nbin, -0.8, 0.8 ); // PDEFoam also returns per-event error, fill in histogram, and also fill significance if (Use["PDEFoam"]) { histPDEFoam = new TH1F( "MVA_PDEFoam", "MVA_PDEFoam", nbin, 0, 1 ); histPDEFoamErr = new TH1F( "MVA_PDEFoamErr", "MVA_PDEFoam error", nbin, 0, 1 ); histPDEFoamSig = new TH1F( "MVA_PDEFoamSig", "MVA_PDEFoam significance", nbin, 0, 10 ); } // Book example histogram for probability (the other methods are done similarly) TH1F *probHistFi(0), *rarityHistFi(0); if (Use["Fisher"]) { probHistFi = new TH1F( "MVA_Fisher_Proba", "MVA_Fisher_Proba", nbin, 0, 1 ); rarityHistFi = new TH1F( "MVA_Fisher_Rarity", "MVA_Fisher_Rarity", nbin, 0, 1 ); } // Prepare input tree (this must be replaced by your data source) // in this example, there is a toy tree with signal and one with background events // we'll later on use only the "signal" events for the test in this example. // TFile *input(0); TString fname = "/home/hep/wilken/Weights/CMSSW_4_2_8_patch3/src/UserCode/wilken/CSVShapeCorr/ZJetsToLL.root"; double lumi = 100.0; Double_t ZJetsToLL_weight = lumi/((2349387.0/80*1000)/2.0); //ZJetsToLL_Pt-100_7TeV-herwigpp //ZJetsToLL_weight = ZJetsToLL_weight*(9000/85684.0); 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_class_example.root" ); // if not: download from ROOT server if (!input) { std::cout << "ERROR: could not open data file" << std::endl; exit(1); } std::cout << "--- TMVAClassificationApp : Using input file: " << input->GetName() << std::endl; // --- Event loop // Prepare the event tree // - here the variable names have to corresponds to your tree // - you can use the same variables as above which is slightly faster, // but of course you can use different ones and copy the values inside the event loop // std::cout << "--- Select signal sample" << std::endl; TTree* theTree = (TTree*)input->Get("BDT_btree"); theTree->SetBranchAddress( "Hmass", &Hmass ); theTree->SetBranchAddress( "Zmass", &Zmass ); theTree->SetBranchAddress( "Hpt", &Hpt ); theTree->SetBranchAddress( "Zpt", &Zpt ); theTree->SetBranchAddress( "CSV0", &CSV0 ); theTree->SetBranchAddress( "CSV1", &CSV1 ); theTree->SetBranchAddress( "DeltaPhiHV", &DeltaPhiHV ); theTree->SetBranchAddress( "DetaJJ", &DetaJJ ); theTree->SetBranchAddress( "UnweightedEta", &UnweightedEta ); theTree->SetBranchAddress( "mu0pt", &mu0pt ); theTree->SetBranchAddress( "Ht", &Ht ); theTree->SetBranchAddress( "EvntShpCircularity", &EvntShpCircularity ); theTree->SetBranchAddress( "nJets", &nJets ); theTree->SetBranchAddress( "Naj", &Naj ); theTree->SetBranchAddress( "mu1pt", &mu1pt ); theTree->SetBranchAddress( "mu0pt", &mu0pt ); theTree->SetBranchAddress( "EtaStandDev", &EtaStandDev ); theTree->SetBranchAddress( "UnweightedEta", &UnweightedEta ); theTree->SetBranchAddress( "jetCHF0", &jetCHF0 ); theTree->SetBranchAddress( "jetCHF1", &jetCHF1 ); theTree->SetBranchAddress( "muonPFiso0", &muonPFiso0 ); theTree->SetBranchAddress( "muonPFiso1", &muonPFiso1 ); theTree->SetBranchAddress( "DphiJJ", &DphiJJ ); theTree->SetBranchAddress( "RMS_eta", &RMS_eta ); theTree->SetBranchAddress( "PtbalZH", &PtbalZH ); theTree->SetBranchAddress( "EventPt", &EventPt ); theTree->SetBranchAddress( "Angle", &Angle ); theTree->SetBranchAddress( "Centrality", &Centrality ); theTree->SetBranchAddress( "EvntShpAplanarity", &EvntShpAplanarity ); theTree->SetBranchAddress( "EvntShpSphericity", &EvntShpSphericity ); theTree->SetBranchAddress( "EvntShpIsotropy", &EvntShpIsotropy ); theTree->SetBranchAddress( "Trigweight", &Trigweight ); theTree->SetBranchAddress( "B2011PUweight", &B2011PUweight ); theTree->SetBranchAddress( "btag2CSF", &btag2CSF ); theTree->SetBranchAddress( "MET", &MET ); theTree->SetBranchAddress( "eventFlavor", &eventFlavor ); // Efficiency calculator for cut method Int_t nSelCutsGA = 0; Double_t effS = 0.7; TTree* TMVATree = (TTree*)input->Get("TMVA_tree"); int NumInTree = theTree->GetEntries(); int NumberTMVAtree = TMVATree->GetEntries(); ZJetsToLL_weight = ZJetsToLL_weight* ( NumInTree /float(NumberTMVAtree)) ; std::vector<Float_t> vecVar(4); // vector for EvaluateMVA tests std::cout << "--- Processing: " << theTree->GetEntries() << " events" << std::endl; TStopwatch sw; sw.Start(); for (Long64_t ievt=0; ievt<NumInTree;ievt++) { if (ievt%1000 == 0) std::cout << "--- ... Processing event: " << ievt << std::endl; theTree->GetEntry(ievt); // var1 = userVar1 + userVar2; // var2 = userVar1 - userVar2; // --- Return the MVA outputs and fill into histograms if (Use["CutsGA"]) { // Cuts is a special case: give the desired signal efficienciy Bool_t passed = reader->EvaluateMVA( "CutsGA method", effS ); if (passed) nSelCutsGA++; } if (Use["Likelihood" ]) histLk ->Fill( reader->EvaluateMVA( "Likelihood method" ) ); if (Use["LikelihoodD" ]) histLkD ->Fill( reader->EvaluateMVA( "LikelihoodD method" ) ); if (Use["LikelihoodPCA"]) histLkPCA ->Fill( reader->EvaluateMVA( "LikelihoodPCA method" ) ); if (Use["LikelihoodKDE"]) histLkKDE ->Fill( reader->EvaluateMVA( "LikelihoodKDE method" ) ); if (Use["LikelihoodMIX"]) histLkMIX ->Fill( reader->EvaluateMVA( "LikelihoodMIX method" ) ); if (Use["PDERS" ]) histPD ->Fill( reader->EvaluateMVA( "PDERS method" ) ); if (Use["PDERSD" ]) histPDD ->Fill( reader->EvaluateMVA( "PDERSD method" ) ); if (Use["PDERSPCA" ]) histPDPCA ->Fill( reader->EvaluateMVA( "PDERSPCA method" ) ); if (Use["KNN" ]) histKNN ->Fill( reader->EvaluateMVA( "KNN method" ) ); if (Use["HMatrix" ]) histHm ->Fill( reader->EvaluateMVA( "HMatrix method" ) ); if (Use["Fisher" ]) histFi ->Fill( reader->EvaluateMVA( "Fisher method" ) ); if (Use["FisherG" ]) histFiG ->Fill( reader->EvaluateMVA( "FisherG method" ) ); if (Use["BoostedFisher"]) histFiB ->Fill( reader->EvaluateMVA( "BoostedFisher method" ) ); if (Use["LD" ]) histLD ->Fill( reader->EvaluateMVA( "LD method" ) ); if (Use["MLP" ]) histNn ->Fill( reader->EvaluateMVA( "MLP method" ) ); if (Use["MLPBFGS" ]) histNnbfgs ->Fill( reader->EvaluateMVA( "MLPBFGS method" ) ); if (Use["MLPBNN" ]) histNnbnn ->Fill( reader->EvaluateMVA( "MLPBNN method" ) ); if (Use["CFMlpANN" ]) histNnC ->Fill( reader->EvaluateMVA( "CFMlpANN method" ) ); if (Use["TMlpANN" ]) histNnT ->Fill( reader->EvaluateMVA( "TMlpANN method" ) ); if (Use["BDT" ]) { BDTvalue = reader->EvaluateMVA( "BDT method" ); } if (Use["BDTD" ]) histBdtD ->Fill( reader->EvaluateMVA( "BDTD method" ) ); if (Use["BDTG" ]) histBdtG ->Fill( reader->EvaluateMVA( "BDTG method" ) ); if (Use["RuleFit" ]) histRf ->Fill( reader->EvaluateMVA( "RuleFit method" ) ); if (Use["SVM_Gauss" ]) histSVMG ->Fill( reader->EvaluateMVA( "SVM_Gauss method" ) ); if (Use["SVM_Poly" ]) histSVMP ->Fill( reader->EvaluateMVA( "SVM_Poly method" ) ); if (Use["SVM_Lin" ]) histSVML ->Fill( reader->EvaluateMVA( "SVM_Lin method" ) ); if (Use["FDA_MT" ]) histFDAMT ->Fill( reader->EvaluateMVA( "FDA_MT method" ) ); if (Use["FDA_GA" ]) histFDAGA ->Fill( reader->EvaluateMVA( "FDA_GA method" ) ); if (Use["Category" ]) histCat ->Fill( reader->EvaluateMVA( "Category method" ) ); if (Use["Plugin" ]) histPBdt ->Fill( reader->EvaluateMVA( "P_BDT method" ) ); // Retrieve also per-event error if (Use["PDEFoam"]) { Double_t val = reader->EvaluateMVA( "PDEFoam method" ); Double_t err = reader->GetMVAError(); histPDEFoam ->Fill( val ); histPDEFoamErr->Fill( err ); if (err>1.e-50) histPDEFoamSig->Fill( val/err ); } // Retrieve probability instead of MVA output if (Use["Fisher"]) { probHistFi ->Fill( reader->GetProba ( "Fisher method" ) ); rarityHistFi->Fill( reader->GetRarity( "Fisher method" ) ); } // std::cout << "Ht is "<< Ht << endl; if (eventFlavor == 5 ) { histMattBdt ->Fill( BDTvalue,ZJetsToLL_weight ); histTMVABdt ->Fill( BDTvalue,ZJetsToLL_weight ); hMjj_OpenSelection->Fill(Hmass,ZJetsToLL_weight); hMmumu_OpenSelection->Fill(Zmass,ZJetsToLL_weight); hPtjj_OpenSelection->Fill(Hpt,ZJetsToLL_weight); hPtmumu_OpenSelection->Fill(Zpt,ZJetsToLL_weight); hCSV0_OpenSelection->Fill(CSV0,ZJetsToLL_weight); hCSV1_OpenSelection->Fill(CSV1,ZJetsToLL_weight); hdphiVH_OpenSelection->Fill(DeltaPhiHV,ZJetsToLL_weight); hdetaJJ_OpenSelection->Fill(DetaJJ,ZJetsToLL_weight); hUnweightedEta_OpenSelection->Fill(UnweightedEta,ZJetsToLL_weight); hPtmu0_OpenSelection->Fill(mu0pt,ZJetsToLL_weight); hHt_OpenSelection->Fill(Ht,ZJetsToLL_weight); hCircularity_OpenSelection->Fill(EvntShpCircularity,ZJetsToLL_weight); hCHFb0_OpenSelection->Fill(jetCHF0, ZJetsToLL_weight); hCHFb1_OpenSelection->Fill(jetCHF1, ZJetsToLL_weight); hPtbalZH_OpenSelection->Fill(PtbalZH, ZJetsToLL_weight); hPtmu1_OpenSelection->Fill(mu1pt, ZJetsToLL_weight); hPFRelIsomu0_OpenSelection->Fill(muonPFiso0, ZJetsToLL_weight); hPFRelIsomu1_OpenSelection->Fill(muonPFiso1, ZJetsToLL_weight); hNjets_OpenSelection->Fill(nJets, ZJetsToLL_weight); hRMSeta_OpenSelection->Fill(RMS_eta, ZJetsToLL_weight); hStaDeveta_OpenSelection->Fill(EtaStandDev, ZJetsToLL_weight); hdphiJJ_vect_OpenSelection->Fill(DphiJJ, ZJetsToLL_weight); hCentrality_OpenSelection->Fill(Centrality, ZJetsToLL_weight); hEventPt_OpenSelection->Fill(EventPt, ZJetsToLL_weight); hAngle_OpenSelection->Fill(Angle, ZJetsToLL_weight); hSphericity_OpenSelection->Fill(EvntShpSphericity, ZJetsToLL_weight); hAplanarity_OpenSelection->Fill(EvntShpAplanarity, ZJetsToLL_weight); hIsotropy_OpenSelection->Fill(EvntShpIsotropy, ZJetsToLL_weight); hDphiDetajj_OpenSelection->Fill(DphiJJ, DetaJJ, ZJetsToLL_weight); }// only fill if b quark treeWithBDT->Fill(); }//end event loop // Get elapsed time sw.Stop(); std::cout << "--- End of event loop: "; sw.Print(); // Get efficiency for cuts classifier if (Use["CutsGA"]) std::cout << "--- Efficiency for CutsGA method: " << double(nSelCutsGA)/theTree->GetEntries() << " (for a required signal efficiency of " << effS << ")" << std::endl; if (Use["CutsGA"]) { // test: retrieve cuts for particular signal efficiency // CINT ignores dynamic_casts so we have to use a cuts-secific Reader function to acces the pointer TMVA::MethodCuts* mcuts = reader->FindCutsMVA( "CutsGA method" ) ; if (mcuts) { std::vector<Double_t> cutsMin; std::vector<Double_t> cutsMax; mcuts->GetCuts( 0.7, cutsMin, cutsMax ); std::cout << "--- -------------------------------------------------------------" << std::endl; std::cout << "--- Retrieve cut values for signal efficiency of 0.7 from Reader" << std::endl; for (UInt_t ivar=0; ivar<cutsMin.size(); ivar++) { std::cout << "... Cut: " << cutsMin[ivar] << " < \"" << mcuts->GetInputVar(ivar) << "\" <= " << cutsMax[ivar] << std::endl; } std::cout << "--- -------------------------------------------------------------" << std::endl; } } // --- Write histograms TFile *target = new TFile( "TMVApp_ZJetsToLL_bflavor.root","RECREATE" ); if (Use["Likelihood" ]) histLk ->Write(); if (Use["LikelihoodD" ]) histLkD ->Write(); if (Use["LikelihoodPCA"]) histLkPCA ->Write(); if (Use["LikelihoodKDE"]) histLkKDE ->Write(); if (Use["LikelihoodMIX"]) histLkMIX ->Write(); if (Use["PDERS" ]) histPD ->Write(); if (Use["PDERSD" ]) histPDD ->Write(); if (Use["PDERSPCA" ]) histPDPCA ->Write(); if (Use["KNN" ]) histKNN ->Write(); if (Use["HMatrix" ]) histHm ->Write(); if (Use["Fisher" ]) histFi ->Write(); if (Use["FisherG" ]) histFiG ->Write(); if (Use["BoostedFisher"]) histFiB ->Write(); if (Use["LD" ]) histLD ->Write(); if (Use["MLP" ]) histNn ->Write(); if (Use["MLPBFGS" ]) histNnbfgs ->Write(); if (Use["MLPBNN" ]) histNnbnn ->Write(); if (Use["CFMlpANN" ]) histNnC ->Write(); if (Use["TMlpANN" ]) histNnT ->Write(); if (Use["BDT" ]) { histMattBdt ->Write(); histTMVABdt ->Write(); } if (Use["BDTD" ]) histBdtD ->Write(); if (Use["BDTG" ]) histBdtG ->Write(); if (Use["RuleFit" ]) histRf ->Write(); if (Use["SVM_Gauss" ]) histSVMG ->Write(); if (Use["SVM_Poly" ]) histSVMP ->Write(); if (Use["SVM_Lin" ]) histSVML ->Write(); if (Use["FDA_MT" ]) histFDAMT ->Write(); if (Use["FDA_GA" ]) histFDAGA ->Write(); if (Use["Category" ]) histCat ->Write(); if (Use["Plugin" ]) histPBdt ->Write(); // Write also error and significance histos if (Use["PDEFoam"]) { histPDEFoam->Write(); histPDEFoamErr->Write(); histPDEFoamSig->Write(); } // Write also probability hists if (Use["Fisher"]) { if (probHistFi != 0) probHistFi->Write(); if (rarityHistFi != 0) rarityHistFi->Write(); } hCHFb0_OpenSelection->Write(); hCHFb1_OpenSelection->Write(); hPtbalZH_OpenSelection->Write(); hPtmu1_OpenSelection->Write(); hPFRelIsomu0_OpenSelection->Write(); hPFRelIsomu1_OpenSelection->Write(); hMjj_OpenSelection->Write(); hMmumu_OpenSelection->Write(); hPtjj_OpenSelection->Write(); hPtmumu_OpenSelection->Write(); hCSV0_OpenSelection->Write(); hCSV1_OpenSelection->Write(); hdphiVH_OpenSelection->Write(); hdetaJJ_OpenSelection->Write(); hUnweightedEta_OpenSelection->Write(); hPtmu0_OpenSelection->Write(); hCircularity_OpenSelection->Write(); hHt_OpenSelection->Write(); hNjets_OpenSelection->Write(); hRMSeta_OpenSelection->Write(); hStaDeveta_OpenSelection->Write(); hdphiJJ_vect_OpenSelection->Write(); hCentrality_OpenSelection->Write(); hEventPt_OpenSelection->Write(); hAngle_OpenSelection->Write(); hSphericity_OpenSelection->Write(); hAplanarity_OpenSelection->Write(); hIsotropy_OpenSelection->Write(); hDphiDetajj_OpenSelection->Write(); treeWithBDT->Write(); target->Close(); delete reader; hCHFb0_OpenSelection->Delete(); hCHFb1_OpenSelection->Delete(); hPtbalZH_OpenSelection->Delete(); hPtmu1_OpenSelection->Delete(); hPFRelIsomu0_OpenSelection->Delete(); hPFRelIsomu1_OpenSelection->Delete(); hMjj_OpenSelection->Delete(); hMmumu_OpenSelection->Delete(); hPtjj_OpenSelection->Delete(); hPtmumu_OpenSelection->Delete(); hCSV0_OpenSelection->Delete(); hCSV1_OpenSelection->Delete(); hdphiVH_OpenSelection->Delete(); hdetaJJ_OpenSelection->Delete(); hUnweightedEta_OpenSelection->Delete(); hPtmu0_OpenSelection->Delete(); hCircularity_OpenSelection->Delete(); hHt_OpenSelection->Delete(); hNjets_OpenSelection->Delete(); hRMSeta_OpenSelection->Delete(); hStaDeveta_OpenSelection->Delete(); hdphiJJ_vect_OpenSelection->Delete(); hCentrality_OpenSelection->Delete(); hEventPt_OpenSelection->Delete(); hAngle_OpenSelection->Delete(); hSphericity_OpenSelection->Delete(); hAplanarity_OpenSelection->Delete(); hIsotropy_OpenSelection->Delete(); hDphiDetajj_OpenSelection->Delete(); treeWithBDT->Delete(); if (Use["BDT" ]) { histMattBdt ->Delete(); histTMVABdt ->Delete(); } std::cout << "==> ZJetsToLL_App_bflavor is done!" << endl << std::endl; gROOT->ProcessLine(".q"); }
//_____________________________________________________________________________ Int_t ProofAux::GenerateFriend(const char *fnt, const char *fnf) { // Generate the friend tree for the main tree in the 'friends' tutorial fetched // from 'fnt'. // the tree is called 'Tfriend', has the same number of entries as the main // tree and is saved to file 'fnf'. If 'fnf' is not defined the filename is // derived from 'fnt' either replacing 'tree' with 'friend', or adding '_friend' // before the '.root' extension. // Return 0 on success, -1 on error. Int_t rc = -1; // Check the input filename TString fin(fnt); if (fin.IsNull()) { Error("GenerateFriend", "file name for the main tree undefined!"); return rc; } // Make sure that the file can be read if (gSystem->AccessPathName(fin, kReadPermission)) { Error("GenerateFriend", "input file does not exist or cannot be read: %s", fin.Data()); return rc; } // File handlers Bool_t sameFile = kTRUE; const char *openMain = "UPDATE"; // The output filename TString fout(fnf); if (!fout.IsNull()) { sameFile = kFALSE; openMain = "READ"; // Make sure the directory exists TString dir = gSystem->DirName(fout); if (gSystem->AccessPathName(dir, kWritePermission)) { if (gSystem->mkdir(dir, kTRUE) != 0) { Error("GenerateFriend", "problems creating directory %s to store the file", dir.Data()); return rc; } } } else { // We set the same name fout = fin; } // Get main tree TFile *fi = TFile::Open(fin, openMain); if (!fi || fi->IsZombie()) { Error("GenerateFriend", "problems opening input file %s", fin.Data()); return rc; } TTree *Tin = (TTree *) fi->Get("Tmain"); if (!Tin) { Error("GenerateFriend", "problems getting tree 'Tmain' from file %s", fin.Data()); delete fi; return rc; } // Set branches Float_t x, y, z; Tin->SetBranchAddress("x", &x); Tin->SetBranchAddress("y", &y); Tin->SetBranchAddress("z", &z); TBranch *b_x = Tin->GetBranch("x"); TBranch *b_y = Tin->GetBranch("y"); TBranch *b_z = Tin->GetBranch("z"); TDirectory* savedir = gDirectory; // Create output file TFile *fo = 0; if (!sameFile) { fo = new TFile(fout, "RECREATE"); if (!fo || fo->IsZombie()) { Error("GenerateFriend", "problems opening file %s", fout.Data()); delete fi; return rc; } savedir->cd(); } else { // Same file fo = fi; } rc = 0; // Create the tree TTree *Tfrnd = new TTree("Tfrnd", "Friend tree for tutorial 'friends'"); Tfrnd->SetDirectory(fo); Float_t r = 0; Tfrnd->Branch("r",&r,"r/F"); Long64_t ent = Tin->GetEntries(); for (Long64_t i = 0; i < ent; i++) { b_x->GetEntry(i); b_y->GetEntry(i); b_z->GetEntry(i); r = TMath::Sqrt(x*x + y*y + z*z); Tfrnd->Fill(); } if (!sameFile) { fi->Close(); delete fi; } Tfrnd->Print(); fo->cd(); Tfrnd->Write(); Tfrnd->SetDirectory(0); fo->Close(); delete fo; delete Tfrnd; // Notify success Info("GenerateFriend", "friend file '%s' successfully created", fout.Data()); // Add to the list TUrl uu(fout); if (!strcmp(uu.GetProtocol(), "file")) { if (gSystem->Getenv("LOCALDATASERVER")) { if (strcmp(TUrl(gSystem->Getenv("LOCALDATASERVER"), kTRUE).GetProtocol(), "file")) fout.Insert(0, TString::Format("%s/", gSystem->Getenv("LOCALDATASERVER"))); } else { fout.Insert(0, TString::Format("root://%s/", gSystem->HostName())); } } fFriendList->Add(new TObjString(fout)); // Done return rc; }
//_____________________________________________________________________________ Int_t ProofAux::GenerateTree(const char *fnt, Long64_t ent, TString &fn) { // Generate the main tree for the 'friends' tutorial; the tree is called // 'Tmain', has 'ent' entries and is saved to file 'fnt'. // The full file path is returned in 'fn'. // Return 0 on success, -1 on error. Int_t rc = -1; // Check the filename fn = fnt; if (fn.IsNull()) { Error("GenerateTree", "file name undefined!"); return rc; } TUrl uu(fn, kTRUE); if (!strcmp(uu.GetProtocol(), "file") && !fn.BeginsWith("/")) { // Local file with relative path: create under the data directory if (!gProofServ || !(gProofServ->GetDataDir()) || strlen(gProofServ->GetDataDir()) <= 0) { Error("GenerateTree", "data directory undefined!"); return rc; } // Insert data directory fn.Insert(0, TString::Format("%s/", gProofServ->GetDataDir())); // Make sure the directory exists TString dir = gSystem->DirName(fn); if (gSystem->AccessPathName(dir, kWritePermission)) { if (gSystem->mkdir(dir, kTRUE) != 0) { Error("GenerateTree", "problems creating directory %s to store the file", dir.Data()); return rc; } } } // Create the file TDirectory* savedir = gDirectory; TFile *f = new TFile(fn, "RECREATE"); if (!f || f->IsZombie()) { Error("GenerateTree", "problems opening file %s", fn.Data()); return rc; } savedir->cd(); rc = 0; // Create the tree TTree *T = new TTree("Tmain","Main tree for tutorial friends"); T->SetDirectory(f); Int_t Run = 1; T->Branch("Run",&Run,"Run/I"); Long64_t Event = 0; T->Branch("Event",&Event,"Event/L"); Float_t x = 0., y = 0., z = 0.; T->Branch("x",&x,"x/F"); T->Branch("y",&y,"y/F"); T->Branch("z",&z,"z/F"); TRandom r; for (Long64_t i = 0; i < ent; i++) { if (i > 0 && i%1000 == 0) Run++; Event = i; x = r.Gaus(10,1); y = r.Gaus(20,2); z = r.Landau(2,1); T->Fill(); } T->Print(); f->cd(); T->Write(); T->SetDirectory(0); f->Close(); delete f; delete T; // Notify success Info("GenerateTree", "file '%s' successfully created", fn.Data()); // Add to the list TString fds(fn); if (!strcmp(uu.GetProtocol(), "file")) { if (gSystem->Getenv("LOCALDATASERVER")) { if (strcmp(TUrl(gSystem->Getenv("LOCALDATASERVER"), kTRUE).GetProtocol(), "file")) fds.Insert(0, TString::Format("%s/", gSystem->Getenv("LOCALDATASERVER"))); } else { fds.Insert(0, TString::Format("root://%s/", gSystem->HostName())); } } fMainList->Add(new TObjString(fds)); // Done return rc; }
int main (int argc, char** argv) { std::string inputFolder = argv[1]; std::string outputFile = argv[2]; std::string leptonName = argv[3]; std::string inputFile = argv[4]; std::cout<<"file: "<<(inputFile).c_str()<<std::endl; TFile * fS = new TFile((inputFolder+leptonName+"/WWTree_"+inputFile+".root").c_str()); TTree * inputTree = (TTree *)fS->Get("otree"); int run; int event; int lumi; int njets; int nPV; int issignal; float pfMET; float pfMET_Phi; float l_pt; float l_eta; float l_phi; float l_e; float ungroomed_jet_pt; float ungroomed_jet_eta; float ungroomed_jet_phi; float ungroomed_jet_e; float jet_mass_pr; float jet_mass_so; float jet_tau2tau1; float v_pt; float v_eta; float v_phi; float v_mt; float mass_lvj_type0; int nBTagJet_medium; float jet2_pt; float jet2_btag; float jet3_pt; float jet3_btag; inputTree->SetBranchAddress("run", &run); inputTree->SetBranchAddress("event", &event); inputTree->SetBranchAddress("lumi", &lumi); inputTree->SetBranchAddress("njets", &njets); inputTree->SetBranchAddress("nPV", &nPV); inputTree->SetBranchAddress("issignal", &issignal); inputTree->SetBranchAddress("pfMET", &pfMET); inputTree->SetBranchAddress("pfMET_Phi", &pfMET_Phi); inputTree->SetBranchAddress("l_pt", &l_pt); inputTree->SetBranchAddress("l_eta", &l_eta); inputTree->SetBranchAddress("l_phi", &l_phi); inputTree->SetBranchAddress("l_e", &l_e); inputTree->SetBranchAddress("ungroomed_jet_pt", &ungroomed_jet_pt); inputTree->SetBranchAddress("ungroomed_jet_eta", &ungroomed_jet_eta); inputTree->SetBranchAddress("ungroomed_jet_phi", &ungroomed_jet_phi); inputTree->SetBranchAddress("ungroomed_jet_e", &ungroomed_jet_e); inputTree->SetBranchAddress("jet_mass_pr", &jet_mass_pr); inputTree->SetBranchAddress("jet_mass_so", &jet_mass_so); inputTree->SetBranchAddress("jet_tau2tau1", &jet_tau2tau1); inputTree->SetBranchAddress("v_pt", &v_pt); inputTree->SetBranchAddress("v_eta", &v_eta); inputTree->SetBranchAddress("v_phi", &v_phi); inputTree->SetBranchAddress("v_mt", &v_mt); inputTree->SetBranchAddress("mass_lvj_type2", &mass_lvj_type0); inputTree->SetBranchAddress("nBTagJet_medium", &nBTagJet_medium); inputTree->SetBranchAddress("jet2_pt", &jet2_pt); inputTree->SetBranchAddress("jet2_btag", &jet2_btag); inputTree->SetBranchAddress("jet3_pt", &jet3_pt); inputTree->SetBranchAddress("jet3_btag", &jet3_btag); //---------output tree---------------- TFile* outROOT = TFile::Open((std::string("output/output_synch_")+leptonName+std::string("/")+std::string("WWTree_")+outputFile+std::string(".root")).c_str(),"recreate"); outROOT->cd(); TTree* outTree = new TTree("otree", "otree"); outTree->SetDirectory(0); setOutputTreeSynch *WWTree = new setOutputTreeSynch(outTree); //---------start loop on events------------ for (Long64_t jentry=0; jentry<inputTree->GetEntries();jentry++) { inputTree->GetEntry(jentry); WWTree->initializeVariables(); //initialize all variables if(jentry % 1000 == 0) cout << "read entry: " << jentry << endl; WWTree->issignal = issignal; //save event variables WWTree->run = run; WWTree->event = event; WWTree->lumi = lumi; WWTree->njets = njets; WWTree->nPV = nPV; WWTree->l_pt = l_pt; WWTree->l_eta = l_eta; WWTree->l_phi = l_phi; WWTree->pfMET = pfMET; WWTree->pfMETPhi = pfMET_Phi; WWTree->W_pt = v_pt; WWTree->W_eta = v_eta; WWTree->W_phi = v_phi; WWTree->jet_pt = ungroomed_jet_pt; WWTree->jet_eta = ungroomed_jet_eta; WWTree->jet_phi = ungroomed_jet_phi; WWTree->jet_mass_pruned = jet_mass_pr; WWTree->jet_mass_softdrop = jet_mass_so; WWTree->jet_tau2tau1 = jet_tau2tau1; WWTree->nbtag=nBTagJet_medium; WWTree->m_lvj = mass_lvj_type0; WWTree->jet2_pt = jet2_pt; WWTree->jet2_btag = jet2_btag; WWTree->jet3_pt = jet3_pt; WWTree->jet3_btag = jet3_btag; //fill the tree if(strcmp(leptonName.c_str(),"mu")==0 && WWTree->issignal==1 && WWTree->W_pt>200 && WWTree->pfMET>40 && WWTree->l_pt>53 && WWTree->jet_pt>200 && WWTree->nbtag <1 && ((WWTree->jet_mass_pruned > 40 && WWTree->jet_mass_pruned<65) || (WWTree->jet_mass_pruned > 135 && WWTree->jet_mass_pruned<150))) { //WWTree->jet_mass_pruned > 40 && WWTree->jet_mass_pruned < 130) {//&& WWTree->jet_tau2tau1<0.5) { outTree->Fill(); } if(strcmp(leptonName.c_str(),"el")==0 && WWTree->issignal==1 && WWTree->W_pt>200 && WWTree->pfMET>80 && WWTree->l_pt>120 && WWTree->jet_pt>200 && WWTree->nbtag <1 && ((WWTree->jet_mass_pruned > 40 && WWTree->jet_mass_pruned<65) || (WWTree->jet_mass_pruned > 135 && WWTree->jet_mass_pruned<150))) { //WWTree->jet_mass_pruned > 40 && WWTree->jet_mass_pruned < 130) {//&& WWTree->jet_tau2tau1<0.5) { outTree->Fill(); } } //--------close everything------------- outTree->Write(); outROOT->Close(); return(0); }