void plotContsSingle(TFile *fOUT, std::string dirname, std::string fin, float X, int keepMDM=10){ //gSystem->Load("libHiggsAnalysisCombinedLimit.so"); gROOT->SetBatch(1); TFile *fiSignals = TFile::Open("signalsVA.root"); RooWorkspace *workspace = (RooWorkspace*)fiSignals->Get("combinedws"); TFile *fiSignalsPS = TFile::Open("signalsPS.root"); RooWorkspace *workspacePS = (RooWorkspace*)fiSignalsPS->Get("combinedws"); //TFile *fi = TFile::Open("limits-output.root"); //TFile *fi = TFile::Open("signal-scans.root"); TFile *fi = TFile::Open(fin.c_str()); TTree *tree = (TTree*)fi->Get("limit"); double mh; double limit; float quantile; tree->SetBranchAddress("mh",&mh); tree->SetBranchAddress("limit",&limit); tree->SetBranchAddress("quantileExpected",&quantile); int nvt = tree->GetEntries(); TGraph2D *grV = new TGraph2D(); grV->SetName("vector"); TGraph2D *grA = new TGraph2D(); grA->SetName("axial"); TGraph2D *grS = new TGraph2D(); grS->SetName("scalar"); TGraph2D *grP = new TGraph2D(); grP->SetName("pseudoscalar"); TGraph2D *grVs = new TGraph2D(); grVs->SetName("vector_signal"); TGraph2D *grAs = new TGraph2D(); grAs->SetName("axial_signal"); TGraph2D *grSs = new TGraph2D(); grSs->SetName("scalar_signal"); TGraph2D *grPs = new TGraph2D(); grPs->SetName("pseudoscalar_signal"); int ptV=0; int ptA=0; int ptS=0; int ptP=0; TGraph *grV_mMED = new TGraph(); grV_mMED->SetName(Form("vector_mMED_mDM%d",keepMDM)); TGraph *grA_mMED = new TGraph(); grA_mMED->SetName(Form("axial_mMED_mDM%d",keepMDM)); TGraph *grS_mMED = new TGraph(); grS_mMED->SetName(Form("scalar_mMED_mDM%d",keepMDM)); TGraph *grP_mMED = new TGraph(); grP_mMED->SetName(Form("pseudoscalar_mMED_mDM%d",keepMDM)); int ptVm=0; int ptAm=0; int ptSm=0; int ptPm=0; grV_mMED->SetLineWidth(2); grV_mMED->SetMarkerSize(1.0); grA_mMED->SetLineWidth(2); grA_mMED->SetMarkerSize(1.0); grS_mMED->SetLineWidth(2); grS_mMED->SetMarkerSize(1.0); grP_mMED->SetLineWidth(2); grP_mMED->SetMarkerSize(1.0); for (int i=0; i<nvt;i++){ //if ( ! ( i%6==X ) ) continue; // 2 or 5 tree->GetEntry(i); if (quantile!=X) continue; int cd = code(mh); float mmed = MMED(mh,cd); float mdm = MDM(mh,cd); // onshell crazyness? if ((int)mmed==2*( (int)mdm) ) continue; // //std::cout << " int X = " << i << std::endl; //std::cout << mh << ", " << cd << ", " << mmed << ", " << mdm << ", " << limit << std::endl; //std::cout << mh << ", " << Form("monojet_signal_signal_%3d%04d%04d",cd,(int)mmed,(int)mdm) << std::endl; //exit(); //std::vector<std::pair<double,double>> pointsV_mMED; //std::vector<std::pair<double,double>> pointsA_mMED; //std::vector<std::pair<double,double>> pointsS_mMED; //std::vector<std::pair<double,double>> pointsP_mMED; RooDataHist *dh; if (cd==801 || cd==800) dh = (RooDataHist*) workspace->data(Form("monojet_signal_signal_%3d%04d%04d",cd,(int)mmed,(int)mdm)); else if (cd==805 || cd==806) dh = (RooDataHist*) workspacePS->data(Form("monojet_signal_signal_%3d%04d%04d",cd,(int)mmed,(int)mdm)); double nsignal = 0; if (dh) { nsignal = dh->sumEntries(); } if (cd==800) { grVs->SetPoint(ptV,mmed,mdm,nsignal); grV->SetPoint(ptV,mmed,mdm,limit); ptV++; if ( (int)mdm == keepMDM ) { grV_mMED->SetPoint(ptVm,mmed,limit); //pointsV_mMED.push_back(std::mk_pair<double,double>(mmed,limit)); ptVm++; } } else if (cd==801){ grAs->SetPoint(ptA,mmed,mdm,nsignal); grA->SetPoint(ptA,mmed,mdm,limit); ptA++; if ( (int)mdm == keepMDM ) { grA_mMED->SetPoint(ptAm,mmed,limit); ptAm++; } } else if (cd==805){ grSs->SetPoint(ptS,mmed,mdm,nsignal); grS->SetPoint(ptS,mmed,mdm,limit); ptS++; if ( (int)mdm == keepMDM ) { grS_mMED->SetPoint(ptSm,mmed,limit); ptSm++; } } else if (cd==806){ grPs->SetPoint(ptP,mmed,mdm,nsignal); grP->SetPoint(ptP,mmed,mdm,limit); ptP++; if ( (int)mdm == keepMDM ) { //std::cout << mh << ", " << cd << ", " << mmed << ", " << mdm << ", " << limit <<std::endl; grP_mMED->SetPoint(ptPm,mmed,limit); ptPm++; } } } // Add a strip of points to the edges of the graphs as contours suck? // /* dress2d(grV); dress2d(grA); dress2d(grS); dress2d(grP); */ TDirectory *fout = fOUT->mkdir(dirname.c_str()); //TFile *fout = new TDirectory(); // TFile(Form("fout-%s.root",fin.c_str()),"RECREATE"); fout->WriteTObject(grV); fout->WriteTObject(grA); fout->WriteTObject(grS); fout->WriteTObject(grP); reorderFuckingUselessGraph(grV_mMED); reorderFuckingUselessGraph(grA_mMED); reorderFuckingUselessGraph(grS_mMED); reorderFuckingUselessGraph(grP_mMED); fout->WriteTObject(grV_mMED); fout->WriteTObject(grA_mMED); fout->WriteTObject(grS_mMED); fout->WriteTObject(grP_mMED); fout->WriteTObject(grVs); fout->WriteTObject(grAs); fout->WriteTObject(grSs); fout->WriteTObject(grPs); //TGraph2D *grVf = (TGraph2D*) supergraph(grV); //TGraph2D *grAf = (TGraph2D*) supergraph(grA); // TGraph2D *grSf = (TGraph2D*) supergraph(grS); // TGraph2D *grPf = (TGraph2D*) supergraph(grP); //fout->WriteTObject(grVf); //fout->WriteTObject(grAf); // fout->WriteTObject(grSf); // fout->WriteTObject(grPf); // limit->Draw("limit: ((Int_t)(mh-80100000000))/10000 : (mh-80100000000) - ( ((Int_t)(mh-80100000000))/10000 )*10000 ","Entry$%6==2") }