void LegendreMomentShape::Save(const std::string filename) { TTree* outputTree = new TTree("LegendreMomentsTree",""); char branchtitle[20]; double**** c = newcoefficients(); sprintf(branchtitle,"c[%d][%d][%d][%d]/D",l_max,i_max,k_max,j_max); outputTree->Branch("c",c,branchtitle); outputTree->Branch("mKK_min",&mKK_min,"mKK_min/D"); outputTree->Branch("mKK_max",&mKK_max,"mKK_max/D"); // Set up the branches for ( int l = 0; l < l_max; l++ ) for ( int i = 0; i < i_max; i++ ) for ( int k = 0; k < k_max; k++ ) for ( int j = 0; j < j_max; j++ ) { char branchname[5]; sprintf(branchname,"c%d%d%d%d",l,i,k,j); outputTree->Branch(branchname,&c[l][i][k][j],((std::string)branchname+"/D").c_str()); } // Pass the non-zero coefficients for(auto coeff: coeffs) c[coeff.l][coeff.i][coeff.k][coeff.j] = coeff.val; outputTree->Fill(); // Save the tree to a file outputTree->SaveAs(filename.c_str()); deletecoefficients(c); }
void makehlt_tree(TString filename, TString outfolder="root/hlt/sep4/"){ TString cuts[] = {"onelpt>15", "onmupt>15"}; TString tags[] = {"el15", "mu15"}, folder, sCut; TChain tree("tree"); TChain treeglobal("treeglobal"); tree.Add(filename); treeglobal.Add(filename); vector<int> genlep_thresh, v_nori_genels, v_nori_genmus; vector<int> *nori_genels = &v_nori_genels, *nori_genmus = &v_nori_genmus; int noriginal, nori_genmu0, nori_genel0; treeglobal.SetBranchAddress("noriginal",&noriginal); treeglobal.GetEntry(0); genlep_thresh.push_back(0); genlep_thresh.push_back(10); genlep_thresh.push_back(15); genlep_thresh.push_back(17); genlep_thresh.push_back(20); genlep_thresh.push_back(25); for(unsigned ind(0); ind<genlep_thresh.size(); ind++){ sCut = "Max$(genels_pt)>"; sCut += genlep_thresh[ind]; v_nori_genels.push_back(tree.GetEntries(sCut)); sCut = "Max$(genmus_pt)>"; sCut += genlep_thresh[ind]; v_nori_genmus.push_back(tree.GetEntries(sCut)); } nori_genel0 = v_nori_genels[0]; nori_genmu0 = v_nori_genmus[0]; filename.Remove(0,filename.Last('/')+1); filename.ReplaceAll(".root",""); for(int cut(0); cut<2; cut++){ folder = outfolder+"/"+tags[cut]+"/"; gSystem->mkdir(folder, kTRUE); TTree *ctree = tree.CopyTree(cuts[cut]); folder += filename+"_"+tags[cut]+".root"; ctree->SaveAs(folder); TFile file(folder,"UPDATE"); file.cd(); TTree ctreeglobal("treeglobal", "treeglobal"); ctreeglobal.Branch("noriginal",&noriginal); ctreeglobal.Branch("nori_genels",&nori_genels); ctreeglobal.Branch("nori_genmus",&nori_genmus); ctreeglobal.Branch("nori_genel0",&nori_genel0); ctreeglobal.Branch("nori_genmu0",&nori_genmu0); ctreeglobal.Branch("genlep_thresh", &genlep_thresh); ctreeglobal.Fill(); ctreeglobal.Write(); file.Close(); } }
void MakePlots(TString filename, TString energy="8TeV", TString lumi=""){ TString outDir=filename; outDir.ReplaceAll("fitres","img"); outDir="tmp/"; //std::map<TString, TH2F *> deltaNLL_map; /*------------------------------ Plotto */ TCanvas *c = new TCanvas("c","c"); TFile f_in(filename, "read"); if(f_in.IsZombie()){ std::cerr << "File opening error: " << filename << std::endl; return; } 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"); TTree *tree = dataset2tree(dataset); TGraphErrors bestFit_ = bestFit(tree, alphaName, constTermName); TH2F *hist = prof2d(tree, alphaName, constTermName, "nll", "(12,-0.0005,0.0115,29,-0.0025,0.1425)",true); // // deltaNLL_map.insert(std::pair <TString, TH2F *>(keyName,hist)); hist->SaveAs(outDir+"/deltaNLL-"+constTermName+".root"); hist->Draw("colz"); bestFit_.Draw("P same"); bestFit_.SetMarkerSize(2); Int_t iBinX, iBinY; Double_t x,y; hist->GetBinWithContent2(0,iBinX,iBinY); x= hist->GetXaxis()->GetBinCenter(iBinX); y= hist->GetYaxis()->GetBinCenter(iBinY); TGraph nllBestFit(1,&x,&y); nllBestFit.SetMarkerStyle(3); nllBestFit.SetMarkerColor(kRed); TList* contour68 = contourFromTH2(hist, 0.68); hist->Draw("colz"); hist->GetZaxis()->SetRangeUser(0,50); bestFit_.Draw("P same"); nllBestFit.Draw("P same"); //contour68->Draw("same"); c->SaveAs(outDir+"/deltaNLL-"+constTermName+".png"); hist->SaveAs("tmp/hist-"+constTermName+".root"); nllBestFit.SaveAs("tmp/nllBestFit.root"); contour68->SaveAs("tmp/contour68.root"); delete hist; hist = prof2d(tree, alphaName, constTermName, "nll", "(12,-0.0005,0.0115,29,-0.0025,0.1425)"); RooHistPdf *histPdf = nllToL(hist); delete hist; RooDataSet *gen_dataset=histPdf->generate(*histPdf->getVariables(),1000000,kTRUE,kFALSE); TTree *genTree = dataset2tree(gen_dataset); genTree->SaveAs("tmp/genTree-"+constTermName+".root"); delete gen_dataset; delete histPdf; TGraphErrors toyGraph = g(genTree, constTermName); TGraphErrors bestFitGraph = g(tree,alphaName, constTermName); TGraphErrors bestFitScanGraph = g(y, x); delete genTree; delete tree; toyGraph.SetFillColor(kGreen); toyGraph.SetLineColor(kBlue); toyGraph.SetLineStyle(2); bestFitGraph.SetLineColor(kBlack); bestFitScanGraph.SetLineColor(kRed); bestFitScanGraph.SetLineWidth(2); TMultiGraph g_multi("multigraph",""); g_multi.Add(&toyGraph,"L3"); g_multi.Add(&toyGraph,"L"); g_multi.Add(&bestFitGraph, "L"); g_multi.Add(&bestFitScanGraph, "L"); g_multi.Draw("A"); c->Clear(); g_multi.Draw("A"); c->SaveAs(outDir+"/smearing_vs_energy-"+constTermName+".png"); // TPaveText *pv = new TPaveText(0.7,0.7,1, 0.8); // TLegend *legend = new TLegend(0.7,0.8,0.95,0.92); // legend->SetFillStyle(3001); // legend->SetFillColor(1); // legend->SetTextFont(22); // 132 // legend->SetTextSize(0.04); // l'ho preso mettendo i punti con l'editor e poi ho ricavato il valore con il metodo GetTextSize() // // legend->SetFillColor(0); // colore di riempimento bianco // legend->SetMargin(0.4); // percentuale della larghezza del simbolo // SetLegendStyle(legend); //Plot(c, data,mc,mcSmeared,legend, region, filename, energy, lumi); } f_in.Close(); return; }