From 95c8f97bb5840a34dc0ed90b2a9cae2eebab0452 Mon Sep 17 00:00:00 2001 From: daniSchaefer Date: Tue, 2 May 2017 13:34:19 +0200 Subject: [PATCH] added alternative functions and binning to datacards/workspace generation added batch-submission scripts for workspaces and limit calculation updated to newest scale factors and uncertainties --- CalcImpactPlots.sh | 34 ++++ MiniTreeProducerVV13TeV.C | 27 ++- MiniTreeSignalProducerVV13TeV.C | 2 +- MiniTreeSignalProducerqV13TeV.C | 7 +- .../Data_VV_13TeV/dijetVV_13TeV_miniTree.root | Bin 13530 -> 23565 bytes ProduceWorkspaces13TeV.py | 5 +- README.md | 9 +- X2VVFitter.cc | 161 ++++++++++----- implement-JESJMRsystematics.py | 20 +- implement-tau21PtUnc.py | 44 ++-- implement-tau21SFUnc.py | 13 +- interpolateAll.py | 6 +- interpolateVV13TeV.py | 44 ++-- qv_models_Bkg_13TeV.rs | 4 +- runWorspacesLocally.sh | 54 ++--- submitAllLimits.py | 102 +++++----- submitWorkspaceJobs.sh | 27 ++- submitWorkspaces.sh | 192 ++++++++++++++++++ vv_altvv_models_Bkg_13TeV.rs | 53 ++--- vv_models_Bkg_13TeV.rs | 4 +- 20 files changed, 551 insertions(+), 257 deletions(-) create mode 100644 CalcImpactPlots.sh create mode 100644 submitWorkspaces.sh diff --git a/CalcImpactPlots.sh b/CalcImpactPlots.sh new file mode 100644 index 000000000..ad6e76775 --- /dev/null +++ b/CalcImpactPlots.sh @@ -0,0 +1,34 @@ +#!bin/bash +masses=(1900) +#models=("WZ" "BulkWW" "BulkZZ" "ZprimeWW") +category=("WWHP") #"WWLP" "ZZHP" "ZZLP" "VVnew") +models=("BulkWW") +#category=("qVnew") + +for mass in ${masses[@]} +do + for model in ${models[@]} + do + for c in ${category[@]} + do + #mass=1400 + #model="WZ" + #cat="WZLP" + datacard="datacards/CMS_jj_${model}_${mass}_13TeV_CMS_jj_${c}.txt" + workspace="datacards/CMS_jj_${model}_${mass}_13TeV_CMS_jj_${c}.root" + + text2workspace.py $datacard -m $mass + + combineTool.py -M Impacts -d $workspace -m $mass --doInitialFit --robustFit 1 + + combineTool.py -M Impacts -d $workspace -m $mass --robustFit 1 --doFits + + combineTool.py -M Impacts -d $workspace -m $mass -o impacts.json + + plotImpacts.py -i impacts.json -o impacts + + mv ./impacts.pdf Impacts_${model}_${mass}_${c}.pdf + done + done +done + diff --git a/MiniTreeProducerVV13TeV.C b/MiniTreeProducerVV13TeV.C index e61c2ee9e..3de490c80 100644 --- a/MiniTreeProducerVV13TeV.C +++ b/MiniTreeProducerVV13TeV.C @@ -8,12 +8,23 @@ normWeight = 1.; - string sInFile = "/shome/thaarres/EXOVVAnalysisRunII/LimitCode/CMSSW_7_1_5/src/DijetCombineLimitCode/input/JetHT_qV.root"; +// string sInFile = "/shome/thaarres/EXOVVAnalysisRunII/LimitCode/CMSSW_7_1_5/src/DijetCombineLimitCode/input/JetHT_qV.root"; +// string sInFile = "/shome/dschafer/ExoDiBosonAnalysis/results/ReRecoData_qVdijet.root"; + string sInFile = "/shome/dschafer/ExoDiBosonAnalysis/results/ReRecoData_VVdijet.root"; + //string sInFile = "/shome/dschafer/ExoDiBosonAnalysis/results/QCD_pythia8_VV_summer16.root"; cout << sInFile.c_str() << endl; TFile file0(sInFile.c_str(), "read"); - string sOutFile("MiniTrees/Data_qV_13TeV/dijetVV_13TeV_miniTree.root"); + //string sOutFile("MiniTrees/Data_qV_13TeV/dijetqV_13TeV_miniTree.root"); + string sOutFile("MiniTrees/Data_VV_13TeV/dijetVV_13TeV_miniTree_test.root"); + int nCategorie = 8; + int maxCategorie = 14; + if (sInFile.find("VV")!=std::string::npos) + { + nCategorie = 0; + maxCategorie = 8; + } TFile f1(sOutFile.c_str(), "recreate"); f1.cd(); @@ -24,9 +35,9 @@ TCVARS->Branch("normWeight",&normWeight,"normWeight/D"); TCVARS->Branch("categories",&categories,"categories/I"); - - for (int iCat = 8; iCat < 14; iCat++){ - TH1D* hMass = (TH1D*) file0.Get("DijetMassHighPuriVV;1"); + TH1D* hMass; + for (int iCat = nCategorie; iCat < maxCategorie; iCat++){ + if (iCat ==0 ) hMass = (TH1D*) file0.Get("DijetMassHighPuriVV;1"); if (iCat == 1) hMass = (TH1D*) file0.Get("DijetMassLowPuriVV;1"); if (iCat == 2) hMass = (TH1D*) file0.Get("DijetMassHighPuriWW;1"); @@ -55,13 +66,13 @@ // if (iCat == 19) hMass = (TH1D*) file0.Get("DijetMassNoPuriqW;1"); // if (iCat == 20) hMass = (TH1D*) file0.Get("DijetMassNoPuriqZ;1"); - std::cout<<"Histogram = " << hMass.GetName() << std::endl; + std::cout<<"Histogram = " << hMass->GetName() << " category " << iCat<< std::endl; TAxis* Axis = hMass->GetXaxis(); + std::cout << hMass->GetEntries() << std::endl; for (int i = 1 ; i < hMass->GetNbinsX()+1; i++){ double N = abs(hMass->GetBinContent(i)); - if (i%10 == 0) cout << "i = " << i << "N = " << N << " binCenter = " << hMass->GetBinCenter(i) << endl; - + //if (i%10 == 0) cout << "i = " << i << "N = " << N << " binCenter = " << hMass->GetBinCenter(i) << endl; mgg = Axis->GetBinCenter(i); normWeight = N; diff --git a/MiniTreeSignalProducerVV13TeV.C b/MiniTreeSignalProducerVV13TeV.C index f3bda352a..4fc1d4fd3 100644 --- a/MiniTreeSignalProducerVV13TeV.C +++ b/MiniTreeSignalProducerVV13TeV.C @@ -33,7 +33,7 @@ for (int iMass = 0; iMassBranch("mgg13TeV",&mgg,"mgg/D"); @@ -71,6 +71,7 @@ TAxis* Axis = hMass->GetXaxis(); for (int i = 1 ; i < hMass->GetNbinsX()+1; i++){ + //std::cout << " loop over mass bins " << i << std::endl; //if (hMass->GetBinCenter(i) < dMass*0.75 || hMass->GetBinCenter(i) > dMass*1.25) continue; int N = abs(hMass->GetBinContent(i)); if (i%1000 == 0) cout << "i = " << i << " N = " << N << endl; diff --git a/MiniTrees/Data_VV_13TeV/dijetVV_13TeV_miniTree.root b/MiniTrees/Data_VV_13TeV/dijetVV_13TeV_miniTree.root index 1f62eebfe1960869d298051c6c976c08dc85a662..89974b43002180ecc04f76fdcd06570447146763 100644 GIT binary patch literal 23565 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 literal 13530 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 diff --git a/ProduceWorkspaces13TeV.py b/ProduceWorkspaces13TeV.py index c826933c9..2f2b28d40 100644 --- a/ProduceWorkspaces13TeV.py +++ b/ProduceWorkspaces13TeV.py @@ -1,8 +1,9 @@ import os,sys,time -masses =[m*100 for m in range(11,11+1)]#45+1)] +masses =[m*100 for m in range(11,43+1)]#45+1)] # masses =[m*100 for m in range(12,62+1)] samples = [4] # 0==RS1WW/ZZ 2==W'/Z' 4==BulkG WW/ZZ 6==qW/qZ +altfunc = '\"alt\"' for sample in samples: for mass in masses: channel = 1 # 1==VV 2==qV 3==No purity @@ -16,7 +17,7 @@ if sample == 6: sample1 = "qW" sample2 = "qZ" - command = 'qsub -q short.q submitWorkspaceJobs.sh %i %i %i %s %s'%(mass,sample,channel,sample1, sample2) + command = 'qsub -q short.q submitWorkspaces.sh %i %i %i %s %s %s'%(mass,sample,channel,altfunc, sample1, sample2) print command os.system(command) diff --git a/README.md b/README.md index 87b794949..7a7b6377d 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,12 @@ python scripts/sb-fit-bkgonly.py //VV analysis ``` ## Produce workspaces: -To interpolate signal MC, take as input .root files of signal MC. with 1 GeV binned histograms of dijet invariant mass (0-7000 GeV). Names of histograms are names of analysis category, eg. "DijetMassHighPuriWW". +To interpolate signal MC, take as input .root files of signal MC. with 1 GeV binned histograms of dijet invariant mass (0-7000 GeV). Names of histograms are names of analysis category, eg. "DijetMassHighPuriWW". Attention: here you should use rootfiles with lumiweights applied and not scaled to the dataluminosity. This scaling is done in the workspace generation so it would be double if we did it here also! These scripts are designed to run on the PSI T3 batch system (qsub protocol)! Needs adaption to run on alternate systems. Modify interpolateAll.py to signal sample and masspoints you wish to run on ``` python interpolateAll.py -> if you want to do them manually do: python interpolateVV13TeV.py input/ZprimeWW_13TeV_ 2100 GeV +-> in this file the names of the used histograms have to be adjusted to qV <-> VV etc. ! ``` Create data and signal MC minitrees ``` @@ -37,12 +38,16 @@ root -l MiniTreeSignalProducerVV13TeV.C //VV analysis ``` Produce workspaces and datacards. Remember to change which signals and masspoints you wanna run over! Need to be available as minitrees! ``` +when changing parameters of fit functions change them here: BkgModelFitBernstein +and also here: MakeBkgWS +and also change the paramters written as nuisance in the datacard here: MakeDataCard_1Channel python ProduceWorkspaces13TeV.py ``` -Implement JES/JER/JMS/JMR and xross section uncertanties +Implement JES/JER/JMS/JMR and cross section uncertanties ``` python implement-JESJMRsystematics.py python implement-XsecUncertainty.py +python implement-tau21PtUnc.py ``` ## Run limits: To run limits you need to have datacards and workspaces produced as instructed above. diff --git a/X2VVFitter.cc b/X2VVFitter.cc index 582921d87..f80ca99b1 100644 --- a/X2VVFitter.cc +++ b/X2VVFitter.cc @@ -16,13 +16,13 @@ TColor *col = new TColor(); void AddSigData(RooWorkspace* w, Float_t mass, int signalsample, std::vector cat_names); -void AddBkgData(RooWorkspace* w, std::vector cat_names); +void AddBkgData(RooWorkspace* w, std::vector cat_names, std::string altfunc); void SigModelFit(RooWorkspace* w, Float_t mass, TString signalname, std::vector cat_names); void MakeSigWS(RooWorkspace* w, const char* fileBaseName, TString signalname, std::vector cat_names); vector BkgModelFitBernstein(std::string altfunc, RooWorkspace* w, Bool_t dobands, std::vector cat_names); void MakeBkgWS(std::string altfunc, RooWorkspace* w, const char* fileBaseName, std::vector cat_names); void SetConstantParams(const RooArgSet* params); -void MakeDataCard_1Channel(RooWorkspace* w, const char* fileBaseName, const char* fileBkgName, int iChan, TString signalname, int signalsample, std::vector cat_names, double mass); +void MakeDataCard_1Channel(std::string altfunc,RooWorkspace* w, const char* fileBaseName, const char* fileBkgName, int iChan, TString signalname, int signalsample, std::vector cat_names, double mass); void MakePlots(RooWorkspace* w, Float_t mass, vector fitresults, TString signalname, std::vector cat_names); RooArgSet* defineVariables() @@ -130,14 +130,12 @@ void runfits(const Float_t mass=2000, int signalsample = 1, int channel = 1,std: cat_names.push_back("CMS_jj_WZLP"); cat_names.push_back("CMS_jj_ZZHP"); cat_names.push_back("CMS_jj_ZZLP"); - cat_names.push_back("CMS_jj_qVHP"); cat_names.push_back("CMS_jj_qVLP"); cat_names.push_back("CMS_jj_qWHP"); cat_names.push_back("CMS_jj_qWLP"); cat_names.push_back("CMS_jj_qZHP"); cat_names.push_back("CMS_jj_qZLP"); - cat_names.push_back("CMS_jj_VVNP"); cat_names.push_back("CMS_jj_WWNP"); cat_names.push_back("CMS_jj_WZNP"); @@ -151,9 +149,20 @@ void runfits(const Float_t mass=2000, int signalsample = 1, int channel = 1,std: if (altfunc.find("Exp")!=std::string::npos or altfunc.find("alt")!=std::string::npos) { card_name = TString("vv_"+altfunc+"vv_models_Bkg_13TeV.rs"); + if (altfunc.find("Exp")!=std::string::npos) + { + card_name = TString("vv_alt"+altfunc+"vv_models_Bkg_13TeV.rs"); + } fileBaseName = TString("CMS_jj_"+altfunc+signalname+TString::Format("_%.0f_13TeV", mass)); } - std::cout << fileBaseName << std::endl; + if( altfunc.find("MC")!=std::string::npos or altfunc.find("binning")!=std::string::npos) + { + + fileBaseName = TString("CMS_jj_"+altfunc+signalname+TString::Format("_%.0f_13TeV", mass)); + } + + std::cout << "filebaseName : " << fileBaseName << std::endl; + std::cout << card_name < fitresults; @@ -161,7 +170,7 @@ void runfits(const Float_t mass=2000, int signalsample = 1, int channel = 1,std: w->var("mgg13TeV")->setMin(MMIN); w->var("mgg13TeV")->setMax(MMAX); - // Add data to the workspace + // Add data to the workspace F cout << "SIGNAL SAMPLE = " << signalsample << ".) "<< signalname<< endl; @@ -185,7 +194,7 @@ void runfits(const Float_t mass=2000, int signalsample = 1, int channel = 1,std: MakeSigWS(w, fileBaseName, signalname,cat_names); // if(mass<1300){ cout << "CREATE BACKGROUND" << endl; - AddBkgData(w,cat_names); + AddBkgData(w,cat_names,altfunc); cout << "FIT BACKGROUND" << endl; fitresults = BkgModelFitBernstein(altfunc, w, dobands,cat_names); @@ -198,35 +207,35 @@ void runfits(const Float_t mass=2000, int signalsample = 1, int channel = 1,std: if((signalsample==0)||(signalsample==1)||(signalsample==2)||(signalsample==3)||(signalsample==4)||(signalsample==5)){ if(CHANNEL==1){ - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 0, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 1, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 2, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 3, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 4, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 5, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 6, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 7, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 0, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 1, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 2, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 3, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 4, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 5, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 6, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 7, signalname, signalsample, cat_names, mass); } else if(CHANNEL==3){ - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 14, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 15, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 16, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 17, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 14, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 15, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 16, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 17, signalname, signalsample, cat_names, mass); } } if((signalsample==6)||(signalsample==7)){ if(CHANNEL==2){ // MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 8, signalname, signalsample, cat_names, mass); // MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 9, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 10, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 11, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 12, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 13, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 10, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 11, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 12, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 13, signalname, signalsample, cat_names, mass); } else if(CHANNEL==3){ - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 18, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 19, signalname, signalsample, cat_names, mass); - MakeDataCard_1Channel(w, fileBaseName, fileBkgName, 20, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 18, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 19, signalname, signalsample, cat_names, mass); + MakeDataCard_1Channel(altfunc, w, fileBaseName, fileBkgName, 20, signalname, signalsample, cat_names, mass); } } @@ -409,7 +418,7 @@ void AddSigData(RooWorkspace* w, Float_t mass, int signalsample, std::vector cat_names) { +void AddBkgData(RooWorkspace* w, std::vector cat_names, std::string altfunc) { // Int_t ncat = NCAT; Int_t ncat_min = NCAT; Int_t ncat = NCAT; @@ -441,7 +450,15 @@ void AddBkgData(RooWorkspace* w, std::vector cat_names) { // retrieve the data tree; // no common preselection cut applied yet; - TFile dataFile(inDir+"dijetVV_13TeV_miniTree.root"); + char* name = "dijetVV_13TeV_miniTree.root" ; + if(altfunc.find("MC")!=std::string::npos) + { + name = "dijetVV_13TeV_miniTree_MC.root"; + } + std::cout << " take file for mini-Trees : "<< name << std::endl; + TFile dataFile(inDir+name); + + TTree* dataTree = (TTree*) dataFile.Get("TCVARS"); // Variables @@ -690,16 +707,22 @@ vector BkgModelFitBernstein(std::string altfunc,RooWorkspace* w, std::cout << " take alt fit function " << std::endl; if (altfunc.find("alt")!=std::string::npos) { - //============== use levelled exponential as alternative function ======================================== -// RooFormulaVar *x = new RooFormulaVar(TString::Format("x_%s",cat_names.at(c).c_str()),"","@0",RooArgList(*mgg)); -// p3mod = new RooFormulaVar(TString::Format("p3mod_%s",cat_names.at(c).c_str()),"","@0",*w->var(TString::Format("bkg_fit_slope3_%s",cat_names.at(c).c_str()))); -// bkg_fitTmp = new RooGenericPdf(TString::Format("bkg_fit_%s",cat_names.at(c).c_str()), "exp(-(@0-@1)/(@2+@3*(@0-@1)))", RooArgList(*x, *p1mod, *p2mod, *p3mod)); -// std::cout<< "works"<< c << std::endl; //============== use alt. four parameter funtion as alternative function ==================================== - x = new RooFormulaVar(TString::Format("x_%s",cat_names.at(c).c_str()),"","@0",RooArgList(*mgg, *sqrtS)); + x = new RooFormulaVar(TString::Format("x_%s",cat_names.at(c).c_str()),"","@0/@1",RooArgList(*mgg, *sqrtS)); p4mod = new RooFormulaVar(TString::Format("p4mod_%s",cat_names.at(c).c_str()),"","@0",*w->var(TString::Format("bkg_fit_slope4_%s",cat_names.at(c).c_str()))); - bkg_fitTmp = new RooGenericPdf(TString::Format("bkg_fit_%s",cat_names.at(c).c_str()), "( @1*pow(1-@0/13000. + @4*pow(@0/13000.,2),@2) ) / ( pow(@0/13000.,@3) )", RooArgList(*x, *p1mod, *p2mod, *p3mod,*p4mod)); + bkg_fitTmp = new RooGenericPdf(TString::Format("bkg_fit_%s",cat_names.at(c).c_str()), "( @1*pow(1-@0 + @4*pow(@0,2),@2) ) / ( pow(@0/13000.,@3) )", RooArgList(*x, *p1mod, *p2mod, *p3mod,*p4mod)); + } + if (altfunc.find("Exp")!=std::string::npos) + { + //============== use levelled exponential as alternative function ======================================== + RooFormulaVar *x = new RooFormulaVar(TString::Format("x_%s",cat_names.at(c).c_str()),"","@0",RooArgList(*mgg)); + p3mod = new RooFormulaVar(TString::Format("p3mod_%s",cat_names.at(c).c_str()),"","@0",*w->var(TString::Format("bkg_fit_slope3_%s",cat_names.at(c).c_str()))); + bkg_fitTmp = new RooGenericPdf(TString::Format("bkg_fit_%s",cat_names.at(c).c_str()), "exp(-(@0-@1)/(@2+@3*(@0-@1)))", RooArgList(*x, *p1mod, *p2mod, *p3mod)); + // std::cout<< "works"<< c << std::endl; } + + + RooAbsReal* bkg_fitTmp2 = new RooRealVar(TString::Format("bkg_fit_%s_norm",cat_names.at(c).c_str()),"",data[c]->sumEntries(),1.0,1000000000); w->import(*bkg_fitTmp); w->import(*bkg_fitTmp2); @@ -1224,11 +1247,34 @@ void MakeBkgWS(std::string altfunc, RooWorkspace* w, const char* fileBaseName, s data[c] = (RooDataSet*) w->data(TString::Format("Data_%s",cat_names.at(c).c_str())); std::cout << data[c] << std::endl; + RooDataHist* dataBinned; + std::string name = fileBaseName; + if(name.find("NObinning")!=std::string::npos) + { + wAll->import(*data[c], Rename(TString::Format("data_obs_%s",cat_names.at(c).c_str()))); + std::cout << " use no binning " << std::endl; + } + if(name.find("binningHCAL")!=std::string::npos) + { + double massBins[44] ={1058., 1118, 1181, 1246, 1313, 1383, 1455, 1530, 1607, 1687, 1770, 1856, 1945, 2037, 2132, 2231, 2332, 2438, 2546, 2659, 2775, 2895, 3019, 3147, 3279, 3416, 3558, 3704, 3854, 4010, 4171, 4337, 4509, 4686, 4869, 5058, 5253, 5455, 5663, 5877, 6099, 6328, 6564, 6808}; + //((RooRealVar*) data[c]->get()->find("mgg13TeV"))->setBins(MMAX-MMIN) ; + RooBinning mjjbins(43 ,massBins, "mjjbins"); + ((RooRealVar*) data[c]->get()->find("mgg13TeV"))->setBinning(mjjbins); + dataBinned = data[c]->binnedClone(); + wAll->import(*dataBinned, Rename(TString::Format("data_obs_%s",cat_names.at(c).c_str()))); + std::cout << "use binning of resolution " << std::endl; + } + if(name.find("binning")==std::string::npos) + { ((RooRealVar*) data[c]->get()->find("mgg13TeV"))->setBins(MMAX-MMIN) ; - RooDataHist* dataBinned = data[c]->binnedClone(); - bkg_fitPdf[c] = (RooExtendPdf*) w->pdf(TString::Format("bkg_fit_%s",cat_names.at(c).c_str())); + dataBinned = data[c]->binnedClone(); + wAll->import(*dataBinned, Rename(TString::Format("data_obs_%s",cat_names.at(c).c_str()))); + std::cout << "use default binning (~1GeV bins) " << std::endl; + } // wAll->import(*data[c], Rename(TString::Format("data_obs_%s",cat_names.at(c).c_str()))); - wAll->import(*dataBinned, Rename(TString::Format("data_obs_%s",cat_names.at(c).c_str()))); + + + bkg_fitPdf[c] = (RooExtendPdf*) w->pdf(TString::Format("bkg_fit_%s",cat_names.at(c).c_str())); wAll->import(*w->pdf(TString::Format("bkg_fit_%s",cat_names.at(c).c_str()))); wAll->import(*w->function(TString::Format("bkg_fit_%s_norm",cat_names.at(c).c_str()))); @@ -1249,16 +1295,6 @@ void MakeBkgWS(std::string altfunc, RooWorkspace* w, const char* fileBaseName, s // } if ( altfunc.find("alt")!=std::string::npos) { - // =============== take levelled exponential as fit function ===================================== -// mean = (wAll->var(TString::Format("bkg_fit_slope2_%s",cat_names.at(c).c_str())))->getVal(); -// min = (wAll->var(TString::Format("bkg_fit_slope2_%s",cat_names.at(c).c_str())))->getMin(); -// max = (wAll->var(TString::Format("bkg_fit_slope2_%s",cat_names.at(c).c_str())))->getMax(); -// wAll->factory(TString::Format("CMS_bkg_fit_slope2_%s_13TeV[%g,%g,%g]", cat_names.at(c).c_str(), mean, min, max)); -// -// mean = (wAll->var(TString::Format("bkg_fit_slope3_%s",cat_names.at(c).c_str())))->getVal(); -// min = (wAll->var(TString::Format("bkg_fit_slope3_%s",cat_names.at(c).c_str())))->getMin(); -// max = (wAll->var(TString::Format("bkg_fit_slope3_%s",cat_names.at(c).c_str())))->getMax(); -// wAll->factory(TString::Format("CMS_bkg_fit_slope3_%s_13TeV[%g,%g,%g]", cat_names.at(c).c_str(), mean, min, max)); //================ take alt four parameter as fit function ======================================= mean = (wAll->var(TString::Format("bkg_fit_slope2_%s",cat_names.at(c).c_str())))->getVal(); min = (wAll->var(TString::Format("bkg_fit_slope2_%s",cat_names.at(c).c_str())))->getMin(); @@ -1278,6 +1314,21 @@ void MakeBkgWS(std::string altfunc, RooWorkspace* w, const char* fileBaseName, s + } + if (altfunc.find("Exp")!=std::string::npos) + { + // =============== take levelled exponential as fit function ===================================== + mean = (wAll->var(TString::Format("bkg_fit_slope2_%s",cat_names.at(c).c_str())))->getVal(); + min = (wAll->var(TString::Format("bkg_fit_slope2_%s",cat_names.at(c).c_str())))->getMin(); + max = (wAll->var(TString::Format("bkg_fit_slope2_%s",cat_names.at(c).c_str())))->getMax(); + wAll->factory(TString::Format("CMS_bkg_fit_slope2_%s_13TeV[%g,%g,%g]", cat_names.at(c).c_str(), mean, min, max)); + + mean = (wAll->var(TString::Format("bkg_fit_slope3_%s",cat_names.at(c).c_str())))->getVal(); + min = (wAll->var(TString::Format("bkg_fit_slope3_%s",cat_names.at(c).c_str())))->getMin(); + max = (wAll->var(TString::Format("bkg_fit_slope3_%s",cat_names.at(c).c_str())))->getMax(); + wAll->factory(TString::Format("CMS_bkg_fit_slope3_%s_13TeV[%g,%g,%g]", cat_names.at(c).c_str(), mean, min, max)); + + } // if(c!=3 && c!=4 && c!=6){ @@ -1441,7 +1492,7 @@ void MakeBkgWS(std::string altfunc, RooWorkspace* w, const char* fileBaseName, s -void MakeDataCard_1Channel(RooWorkspace* w, const char* fileBaseName, const char* fileBkgName, int iChan, TString signalname, int signalsample, std::vector cat_names, double mass) { +void MakeDataCard_1Channel(std::string altfunc, RooWorkspace* w, const char* fileBaseName, const char* fileBkgName, int iChan, TString signalname, int signalsample, std::vector cat_names, double mass) { TString cardDir = "/mnt/t3nfs01/data01/shome/dschafer/CMSSW_7_4_7/src/DijetCombineLimitCode/datacards/"+filePOSTfix; // TString cardDir = filePOSTfix; @@ -1541,16 +1592,16 @@ void MakeDataCard_1Channel(RooWorkspace* w, const char* fileBaseName, const char outFile << Form("shapes bkg_fit_jj %s ", cat_names[iChan].c_str()) << wsDir+TString(fileBkgName)+".root" << Form(" w_all:CMS_bkg_fit_%s_13TeV", cat_names[iChan].c_str()) << endl; if(signalsample<2){ - outFile << Form("shapes RS1WW_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format("CMS_jj_RS1WW_%.0f_13TeV.root", mass) << Form(" w_all:RS1WW_jj_sig_%s", cat_names[iChan].c_str()) << endl; - outFile << Form("shapes RS1ZZ_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format("CMS_jj_RS1ZZ_%.0f_13TeV.root", mass) << Form(" w_all:RS1ZZ_jj_sig_%s", cat_names[iChan].c_str()) << endl; + outFile << Form("shapes RS1WW_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format(("CMS_jj_"+altfunc+"RS1WW_%.0f_13TeV.root").c_str(), mass) << Form(" w_all:RS1WW_jj_sig_%s", cat_names[iChan].c_str()) << endl; + outFile << Form("shapes RS1ZZ_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format(("CMS_jj_"+altfunc+"RS1ZZ_%.0f_13TeV.root").c_str(), mass) << Form(" w_all:RS1ZZ_jj_sig_%s", cat_names[iChan].c_str()) << endl; } else if(signalsample<4){ - outFile << Form("shapes WZ_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format("CMS_jj_WZ_%.0f_13TeV.root", mass) << Form(" w_all:WZ_jj_sig_%s", cat_names[iChan].c_str()) << endl; - outFile << Form("shapes ZprimeWW_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format("CMS_jj_ZprimeWW_%.0f_13TeV.root", mass) << Form(" w_all:ZprimeWW_jj_sig_%s", cat_names[iChan].c_str()) << endl; + outFile << Form("shapes WZ_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format(("CMS_jj_"+altfunc+"WZ_%.0f_13TeV.root").c_str(), mass ) << Form(" w_all:WZ_jj_sig_%s", cat_names[iChan].c_str()) << endl; + outFile << Form("shapes ZprimeWW_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format(("CMS_jj_"+altfunc+"ZprimeWW_%.0f_13TeV.root").c_str(), mass ) << Form(" w_all:ZprimeWW_jj_sig_%s", cat_names[iChan].c_str()) << endl; } else if(signalsample<6){ - outFile << Form("shapes BulkWW_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format("CMS_jj_BulkWW_%.0f_13TeV.root", mass) << Form(" w_all:BulkWW_jj_sig_%s", cat_names[iChan].c_str()) << endl; - outFile << Form("shapes BulkZZ_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format("CMS_jj_BulkZZ_%.0f_13TeV.root", mass) << Form(" w_all:BulkZZ_jj_sig_%s", cat_names[iChan].c_str()) << endl; + outFile << Form("shapes BulkWW_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format(("CMS_jj_"+altfunc+"BulkWW_%.0f_13TeV.root").c_str(), mass ) << Form(" w_all:BulkWW_jj_sig_%s", cat_names[iChan].c_str()) << endl; + outFile << Form("shapes BulkZZ_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format(("CMS_jj_"+altfunc+"BulkZZ_%.0f_13TeV.root").c_str(), mass ) << Form(" w_all:BulkZZ_jj_sig_%s", cat_names[iChan].c_str()) << endl; } else{ outFile << Form("shapes qW_jj %s ", cat_names[iChan].c_str()) << wsDir+TString::Format("CMS_jj_qW_%.0f_13TeV.root", mass) << Form(" w_all:qW_jj_sig_%s", cat_names[iChan].c_str()) << endl; diff --git a/implement-JESJMRsystematics.py b/implement-JESJMRsystematics.py index e9cf4f61b..fbacbd64b 100644 --- a/implement-JESJMRsystematics.py +++ b/implement-JESJMRsystematics.py @@ -9,19 +9,19 @@ prefix = "EXOVVSystematics/dijet" purities = ["LP","HP"] -channels = ["WW","WZ","ZZ"] +channels = ["WW","WZ","ZZ","VV"] signals=["BulkWW","BulkZZ","WZ","ZprimeWW"] -#signals=["altBulkZZ"] +signals=["altBulkWW"] masses_interpolated =[m*100 for m in range(12,45+1)] massesInSystematics = [1200,1400,1600,1800,2000,2500,3500,4000] -#signals=["BulkZZ"]#,"WZ","ZprimeWW"] +signals=["altBulkZZ"]#,"WZ","ZprimeWW"] -#masses_interpolated =[m*100 for m in range(12,45+1)] -#massesInSystematics = [1200,1400,1600,1800,2000,2500,3000,3500,4000] +masses_interpolated =[m*100 for m in range(12,45+1)] +massesInSystematics = [1200,1400,1600,1800,2000,2500,3000,3500,4000] #signals=["ZprimeWW"] @@ -35,12 +35,12 @@ #massesInSystematics = [1200,1400,1600,1800,2000,2500,3000,3500,4000] -signals=["qW"] -channels = ["qW","qZ"] -masses_interpolated =[m*100 for m in range(12,60+1)] -massesInSystematics = [1200,1400,1600,1800,2000,2500,3000,3500,4000,4500,5000,6000,6500] +#signals=["altqW"] +#channels = ["qW","qZ"] +#masses_interpolated =[m*100 for m in range(12,60+1)] +#massesInSystematics = [1200,1400,1600,1800,2000,2500,3000,3500,4000,4500,5000,6000,6500] -#signals=["qZ"] +#signals=["qW"] #channels = ["qW","qZ"] #masses_interpolated =[m*100 for m in range(12,60+1)] #massesInSystematics = [1200,1400,1600,1800,2000,2500,3000,4500,6000] diff --git a/implement-tau21PtUnc.py b/implement-tau21PtUnc.py index 340a2fac4..45f097d4e 100644 --- a/implement-tau21PtUnc.py +++ b/implement-tau21PtUnc.py @@ -3,44 +3,54 @@ from ROOT import * import math +# new for Moriond 2017: pT HP and LP uncertainty both fitted (no scaling with v-tag uncertainties anymore) +# treat uncertainties as correlated (since the migration between mass windows is correlated) (for ICHEP anti-correlation) +# new working point of 0.35 def get_sys_pt_vv(mass): fsys = [] - systhp = 5.90094*math.log(mass/2./200.)/100. + systhp = 8.5*math.log(mass/2./200.)/100. fsys.append( (1+systhp)*(1+systhp) ) fsys.append( (1-systhp)*(1-systhp) ) - tothp = math.sqrt(0.03*0.03+0.04*0.04+0.06*0.06)/1.03 # efficiency scale factor HP = 1.03 +- 0.03 (stat -> fit unc.) +- 0.04 (sys->herwig vs pythia) +- 0.06 (sys -> different fit methods) - totlp = math.sqrt(0.12*0.12+0.17*0.17+0.12*0.12)/0.88 # same for LP category - systlp = systhp*totlp/tothp - fsys.append( (1+systhp)*(1-systlp) ) - fsys.append( (1-systhp)*(1+systlp) ) +# tothp = math.sqrt(0.03*0.03+0.04*0.04+0.06*0.06)/1.03 # efficiency scale factor HP = 1.03 +- 0.03 (stat -> fit unc.) +- 0.04 (sys->herwig vs pythia) +- 0.06 (sys -> different fit methods) +# totlp = math.sqrt(0.12*0.12+0.17*0.17+0.12*0.12)/0.88 # same for LP category + #systlp = systhp*totlp/tothp + systlp = 3.9*math.log(mass/2./200.)/100. + #fsys.append( (1+systhp)*(1-systlp) ) + #fsys.append( (1-systhp)*(1+systlp) ) + fsys.append( (1+systhp)*(1+systlp) ) + fsys.append( (1-systhp)*(1-systlp) ) return fsys def get_sys_pt_qv(mass): fsys = [] - systhp = 5.90094*math.log(mass/2./200.)/100. + systhp = 8.5*math.log(mass/2./200.)/100. print systhp fsys.append( (1+systhp) ) fsys.append( (1-systhp) ) - tothp = math.sqrt(0.03*0.03+0.04*0.04+0.06*0.06)/1.03 - totlp = math.sqrt(0.12*0.12+0.17*0.17+0.12*0.12)/0.88 - systlp = systhp*totlp/tothp - fsys.append( (1-systlp) ) + systlp = 3.9*math.log(mass/2./200.)/100. + print systlp fsys.append( (1+systlp) ) + fsys.append( (1-systlp) ) + #tothp = math.sqrt(0.03*0.03+0.04*0.04+0.06*0.06)/1.03 + #totlp = math.sqrt(0.12*0.12+0.17*0.17+0.12*0.12)/0.88 + #systlp = systhp*totlp/tothp + #fsys.append( (1-systlp) ) + #fsys.append( (1+systlp) ) return fsys indir = 'datacards/' outdir = 'datacards/' -signals = ["altqW"]#,"altBulkZZ"] -signals = ["WZ","ZprimeWW"]# -signals = ["BulkZZ","BulkWW","WZ","ZprimeWW"] -signals = ["qW","qZ"] +signals = ["MCBulkZZ"]#,"altBulkZZ"] +signals=["altBulkWW","altBulkZZ"] +#signals = ["BulkZZ","BulkWW","WZ","ZprimeWW"] +#signals = ["qW","qZ"] purities = ["LP","HP"] for signal in signals: - masses =[m*100 for m in range(11,42+1)] - channels = ["WW","WZ","ZZ"] + masses =[m*100 for m in range(11,45+1)] + channels = ["WW","WZ","ZZ","VV"] if signal.find("q")!=-1: masses =[m*100 for m in range(12,62+1)] channels = ["qW","qZ"] diff --git a/implement-tau21SFUnc.py b/implement-tau21SFUnc.py index b7e39b2bc..8f82af5f4 100644 --- a/implement-tau21SFUnc.py +++ b/implement-tau21SFUnc.py @@ -2,8 +2,8 @@ import ROOT from ROOT import * import math -systhp = 0.1 -systlp = 0.219 +systhp = 0.11 +systlp = 0.23 def get_SF_VV(): fsys = [] @@ -28,10 +28,11 @@ def get_SF_qV(): indir = 'datacards/' outdir = 'datacards/' -signals = ["altqW"]#,"altBulkZZ"] -signals = ["WZ","ZprimeWW"]# -signals = ["BulkZZ","BulkWW","WZ","ZprimeWW"] -signals = ["qW","qZ"] +signals = ["MCBulkZZ"]#,"altBulkZZ"] +signals = ["altBulkWW","altBulkZZ"]#,"altBulkZZ"]# +#signals=["altBulkWW","BulkWW"] +#signals = ["BulkZZ","BulkWW","WZ","ZprimeWW","qW","qZ"] +#signals = ["qW","qZ"] purities = ["LP","HP"] for signal in signals: diff --git a/interpolateAll.py b/interpolateAll.py index 096b0a1ac..a9095c1b0 100644 --- a/interpolateAll.py +++ b/interpolateAll.py @@ -2,9 +2,9 @@ import time masses =[m*100 for m in range(10,45+1)] -samples = ["ZprimeWW_13TeV_"]# -samples = ["ZprimeWW_13TeV_","WprimeWZ_13TeV_","BulkZZ_13TeV_","BulkWW_13TeV_"] -#samples = ["QstarQW_13TeV_","QstarQZ_13TeV_"] +#samples = ["ZprimeWW_13TeV_"]# +#samples = ["ZprimeWW_13TeV_","WprimeWZ_13TeV_","BulkZZ_13TeV_","BulkWW_13TeV_"] +samples = ["QstarQW_13TeV_","QstarQZ_13TeV_"] for sample in samples: if sample.find("Qstar") != -1: masses =[m*100 for m in range(10,60+1)] diff --git a/interpolateVV13TeV.py b/interpolateVV13TeV.py index 307c5ed4b..30317f604 100644 --- a/interpolateVV13TeV.py +++ b/interpolateVV13TeV.py @@ -47,25 +47,25 @@ def fnc_dscb(xx,pp): # "DijetMassNoPuriVV", # VV medium purity # "DijetMassLowPuriVV", # not used - "DijetMassHighPuriWW", # WW high purity - "DijetMassLowPuriWW", # WW low purity - "DijetMassNoPuriWW", # WW no purity - "DijetMassHighPuriWZ", # WZ high purity - "DijetMassLowPuriWZ", # WZ low purity - "DijetMassNoPuriWZ", # WZ no purity - "DijetMassHighPuriZZ", # ZZ high purity - "DijetMassLowPuriZZ", # ZZ low purity - "DijetMassNoPuriZZ", # ZZ no purity + #"DijetMassHighPuriWW", # WW high purity + #"DijetMassLowPuriWW", # WW low purity + #"DijetMassNoPuriWW", # WW no purity + #"DijetMassHighPuriWZ", # WZ high purity + #"DijetMassLowPuriWZ", # WZ low purity + #"DijetMassNoPuriWZ", # WZ no purity + #"DijetMassHighPuriZZ", # ZZ high purity + #"DijetMassLowPuriZZ", # ZZ low purity + #"DijetMassNoPuriZZ", # ZZ no purity - #"DijetMassHighPuriqV", # qV high purity - #"DijetMassNoPuriqV", # qV medium purity - #"DijetMassLowPuriqV", # qV kow purity - #"DijetMassHighPuriqW", # qV high purity - #"DijetMassLowPuriqW", # qW low purity - #"DijetMassNoPuriqW", # qW no purity - #"DijetMassHighPuriqZ", # qZ high purity - #"DijetMassLowPuriqZ", # qZ low purity - #"DijetMassNoPuriqZ", # qZ no purity + "DijetMassHighPuriqV", # qV high purity + "DijetMassNoPuriqV", # qV medium purity + "DijetMassLowPuriqV", # qV kow purity + "DijetMassHighPuriqW", # qV high purity + "DijetMassLowPuriqW", # qW low purity + "DijetMassNoPuriqW", # qW no purity + "DijetMassHighPuriqZ", # qZ high purity + "DijetMassLowPuriqZ", # qZ low purity + "DijetMassNoPuriqZ", # qZ no purity ] if "Wprime" in inputRoot: @@ -157,8 +157,8 @@ def fnc_dscb(xx,pp): # interpolate the shape linearly su = 0 su1 = 0.0 - for i in range(5001) : - x = 0.0 + i/5000.0*2.0 # interpolation range: [0*mass,2*mass] + for i in range(7001) : + x = 0.0 + i/7000.0*2.0 # interpolation range: [0*mass,2*mass] masslow = x*mjjlow masshigh = x*mjjhigh #print masshigh @@ -182,7 +182,7 @@ def fnc_dscb(xx,pp): inputf = TFile( inputRoot + str(x) + suffix + '.root' ) f = inputf.Get( histname ) xvalues.push_back(x) - yvalues.push_back(f.Integral(f.FindBin(x*0.8),f.FindBin(x*1.2))/ngenevents[masses.index(x)]*10000.) #100 000 is 2015 default, test 10 000 + yvalues.push_back(f.Integral(f.FindBin(x*0.8),f.FindBin(x*1.2))/ngenevents[masses.index(x)]*100000.) #100 000 is 2015 default, test 10 000 interpolator=r.Math.Interpolator(xvalues,yvalues) integral=interpolator.Eval(outmjj) foutmjj.Scale( integral/foutmjj.Integral(foutmjj.FindBin(outmjj*0.8),foutmjj.FindBin(outmjj*1.2)) ) @@ -200,7 +200,7 @@ def fnc_dscb(xx,pp): xvalues.push_back(m) for i in range(npoints+1): x=0.0 + i/float(npoints)*2.0 - yvalues[i].push_back(f.Integral(f.FindBin(m*x)-rebin+1,f.FindBin(m*x)+rebin-1)/float(2*rebin-1)/ngenevents[masses.index(m)]*10000.) #100 000 is 2015 default, test 10 000 + yvalues[i].push_back(f.Integral(f.FindBin(m*x)-rebin+1,f.FindBin(m*x)+rebin-1)/float(2*rebin-1)/ngenevents[masses.index(m)]*100000.) #100 000 is 2015 default, test 10 000 for i in range(npoints+1): x=0.0 + i/float(npoints)*2.0 inter=r.Math.Interpolator(xvalues,yvalues[i]) diff --git a/qv_models_Bkg_13TeV.rs b/qv_models_Bkg_13TeV.rs index db05a56b0..9853635ad 100644 --- a/qv_models_Bkg_13TeV.rs +++ b/qv_models_Bkg_13TeV.rs @@ -1,4 +1,4 @@ -mgg13TeV[990,6200]; +mgg13TeV[1050,6200]; bkg_fit_slope1_CMS_jj_qVHP[20., -100.0, 500.0]; bkg_fit_slope2_CMS_jj_qVHP[3.,-100.0, 100.0]; @@ -25,4 +25,4 @@ bkg_fit_slope1_CMS_jj_qZLP[6.88441e+00, -500.0, 500.0]; bkg_fit_slope2_CMS_jj_qZLP[6.10154e+00, -500.0, 500.0]; bkg_fit_slope3_CMS_jj_qZLP[0.,-50.0, 50.0]; -sqrtS[13000., 13000., 13000.] \ No newline at end of file +sqrtS[13000., 13000., 13000.] diff --git a/runWorspacesLocally.sh b/runWorspacesLocally.sh index 5726e0be4..a4d56b673 100644 --- a/runWorspacesLocally.sh +++ b/runWorspacesLocally.sh @@ -2,30 +2,34 @@ -masses=(1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 4400 4500) -#masses=(1200) -# 4 = BulkGraviton WW and ZZ - -# alt=\"alt\" -for m in ${masses[@]} -do - root -b -q "X2VVFitter.cc($m,4,1)" -done - -# 2 = W' and Z' -for m in ${masses[@]} -do - root -b -q "X2VVFitter.cc($m,2,1)" -done - - - -masses=(1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 4800 4900 5000 5100 5200 5300 5400 5600 5700 5800 5900 6000) -#masses=(4700 4800 4900 5000 5100 5200 5300 5400 5600 5700 5800 5900 6000) -#5700 5800 5900 6000 6100 6200 6300 6400 6500 6600 6700 6800 6900 7000) -#6 = qW and qZ -for m in ${masses[@]} -do - root -b -q "X2qVFitter.cc($m,6,2)" + masses=(1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 4400 4500) +# #masses=(1200) +# # 4 = BulkGraviton WW and ZZ +# + alt=\"MC\" + for m in ${masses[@]} + do +# root -b -q "X2VVFitter.cc($m,4,1)" + root -b -q "X2VVFitter.cc($m,4,1,$alt)" done +# +# +# +# # 2 = W' and Z' +# for m in ${masses[@]} +# do +# root -b -q "X2VVFitter.cc($m,2,1)" +# done + + +# +# masses=(1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 4800 4900 5000 5100 5200 5300 5400 5500 5600 5700 5800 5900 6000) +# #masses=(4700 4800 4900 5000 5100 5200 5300 5400 5600 5700 5800 5900 6000) +# #5700 5800 5900 6000 6100 6200 6300 6400 6500 6600 6700 6800 6900 7000) +# #6 = qW and qZ +# for m in ${masses[@]} +# do +# #root -b -q "X2qVFitter.cc($m,6,2)" +# root -b -q "X2qVFitter.cc($m,6,2,$alt)" +# done diff --git a/submitAllLimits.py b/submitAllLimits.py index fe53a0c54..0c45cb13a 100644 --- a/submitAllLimits.py +++ b/submitAllLimits.py @@ -1,53 +1,55 @@ import os,sys import time -#masses =[m*100 for m in range(10,45+1)] -#models = ["altqW"] +masses =[m*100 for m in range(10,45+1)] +models = ["altqW"] #channels = ["qVHPnew","qVLPnew"] -#channels =["qVnew"] +channels =["qVnew","qWHP","qWLP","qZHP","qZLP"] #workspaceBKG = "CMS_jj_bkg_qV_13TeV" -#workspaceBKG = "CMS_jj_bkg_qValt_13TeV" +workspaceBKG = "CMS_jj_bkg_qValt_13TeV" +for channel in channels: + for model in models: + if model.find("q") != -1: + masses =[m*100 for m in range(12,60+1)] + #masses = [4000] + for mass in masses: + #workspaceSignal = "CMS_jj_"+model+"_"+str(int(mass))+"_13TeV" + workspaceSignal = "CMS_jj_qW_"+str(int(mass))+"_13TeV" + command = 'qsub -q all.q submitLimits.sh CMS_jj_'+model+'_'+str(int(mass))+'_13TeV_CMS_jj_'+channel+' '+str(int(mass))+' CMS_jj_'+str(int(mass))+'_'+model+'_13TeV_CMS_jj_'+channel+'_asymptoticCLs_new.root '+workspaceBKG+' '+workspaceSignal + print command + os.system(command) + #time.sleep(1) + + + + +#masses =[m*100 for m in range(12,43+1)] +##models = ["ZprimeWW","BulkWW","BulkZZ","WZ"] +#models = ["BulkWW"] +##channels = ["WWHP","WWLP","ZZHP","ZZLP","WZHP","WZLP","VVnew"] +##channels = ["ZZHP","ZZLP","VVnew"] +##models =["BulkWW"] +##masses =[4000] +##channels = ["VVHPnew","VVLPnew","VVnew"] +##channels = ["VVnew"] +#channels = ["WWHP","WWLP","ZZHP","ZZLP","WZHP","WZLP"] +#workspaceBKG = " CMS_jj_bkg_VV_13TeV" #for channel in channels: #for model in models: #if model.find("q") != -1: #masses =[m*100 for m in range(12,60+1)] #for mass in masses: #workspaceSignal = "CMS_jj_"+model+"_"+str(int(mass))+"_13TeV" - #workspaceSignal = "CMS_jj_qW_"+str(int(mass))+"_13TeV" #command = 'qsub -q all.q submitLimits.sh CMS_jj_'+model+'_'+str(int(mass))+'_13TeV_CMS_jj_'+channel+' '+str(int(mass))+' CMS_jj_'+str(int(mass))+'_'+model+'_13TeV_CMS_jj_'+channel+'_asymptoticCLs_new.root '+workspaceBKG+' '+workspaceSignal #print command #os.system(command) - ##time.sleep(1) - - - - -masses =[m*100 for m in range(12,43+1)] -#models = ["ZprimeWW","BulkWW","BulkZZ","WZ"] -models = ["BulkWW"] -channels = ["WWHP","WWLP","ZZHP","ZZLP","WZHP","WZLP","VVnew"] -channels = ["ZZHP","ZZLP","VVnew"] -#models =["BulkWW"] -#masses =[4000] -#channels = ["VVHPnew","VVLPnew","VVnew"] -#channels = ["VVnew"] -#channels = ["WWHP","WWLP","ZZHP","ZZLP","WZHP","WZLP","VVnew"] -workspaceBKG = " CMS_jj_bkg_VV_13TeV" -for channel in channels: - for model in models: - if model.find("q") != -1: - masses =[m*100 for m in range(12,60+1)] - for mass in masses: - workspaceSignal = "CMS_jj_"+model+"_"+str(int(mass))+"_13TeV" - command = 'qsub -q all.q submitLimits.sh CMS_jj_'+model+'_'+str(int(mass))+'_13TeV_CMS_jj_'+channel+' '+str(int(mass))+' CMS_jj_'+str(int(mass))+'_'+model+'_13TeV_CMS_jj_'+channel+'_asymptoticCLs_new.root '+workspaceBKG+' '+workspaceSignal - print command - os.system(command) - #time.sleep(1) + ##time.sleep(1) #masses =[m*100 for m in range(12,43+1)] -#models = ["qW","qZ"] -#channels = ["qVHPnew","qVLPnew","qVnew"] +#models = ["qW"] +##channels = ["qVnew"] +#channels =["qWHP","qWLP","qZHP","qZLP","qVnew"] #workspaceBKG = "CMS_jj_bkg_qV_13TeV" #for channel in channels: #for model in models: @@ -62,20 +64,20 @@ -# alternaive fit function ! -masses =[m*100 for m in range(12,43+1)] -#masses =[2700] -models = ["altBulkWW"] -#channels = ["WWHP","WWLP","ZZHP","ZZLP","WZHP","WZLP","VVnew"] -channels = ["ZZHP","ZZLP","VVnew"] -workspaceBKG = " CMS_jj_bkg_VValt_13TeV" -for channel in channels: - for model in models: - if model.find("q") != -1: - masses =[m*100 for m in range(12,41+1)] - for mass in masses: - workspaceSignal = "CMS_jj_BulkWW_"+str(int(mass))+"_13TeV" - command = 'qsub -q all.q submitLimits.sh CMS_jj_'+model+'_'+str(int(mass))+'_13TeV_CMS_jj_'+channel+' '+str(int(mass))+' CMS_jj_'+str(int(mass))+'_'+model+'_13TeV_CMS_jj_'+channel+'_asymptoticCLs_new.root '+workspaceBKG+' '+workspaceSignal - print command - os.system(command) - #time.sleep(1) +## alternaive fit function ! +#masses =[m*100 for m in range(12,43+1)] +##masses =[4100] +#models = ["altBulkWW"] +##channels = ["WWHP","WWLP","ZZHP","ZZLP","WZHP","WZLP"] +#channels = ["VVnew"] +#workspaceBKG = " CMS_jj_bkg_VValt_13TeV" +#for channel in channels: + #for model in models: + #if model.find("q") != -1: + #masses =[m*100 for m in range(12,41+1)] + #for mass in masses: + #workspaceSignal = "CMS_jj_"+model+"_"+str(int(mass))+"_13TeV" + #command = 'qsub -q all.q submitLimits.sh CMS_jj_'+model+'_'+str(int(mass))+'_13TeV_CMS_jj_'+channel+' '+str(int(mass))+' CMS_jj_'+str(int(mass))+'_'+model+'_13TeV_CMS_jj_'+channel+'_asymptoticCLs_new.root '+workspaceBKG+' '+workspaceSignal + #print command + #os.system(command) + ##time.sleep(1) diff --git a/submitWorkspaceJobs.sh b/submitWorkspaceJobs.sh index a6739e2b8..1700a41f1 100644 --- a/submitWorkspaceJobs.sh +++ b/submitWorkspaceJobs.sh @@ -3,6 +3,7 @@ MASSPOINT=$1 SAMPLE=$2 CHANNEL=$3 +ALTFUNC=$4 SAMPLE_ONE=$5 SAMPLE_TWO=$6 JOBLOGFILES="myout.txt myerr.txt" @@ -13,11 +14,13 @@ SEOUTFILES="" HN_NAME=`whoami` USER_SRM_HOME="srm://t3se01.psi.ch:8443/srm/managerv2?SFN=/pnfs/psi.ch/cms/trivcat/store/user" TOPWORKDIR=/scratch/`whoami` -JOBDIR="workspaceBatchProducer_${MASSPOINT}${SAMPLE}${CHANNEL}/" -CMSSW_DIR="/mnt/t3nfs01/data01/shome/thaarres/EXOVVAnalysisRunII/LimitCode/CMSSW_7_1_5" +JOBDIR=workspaces-$JOB_ID +$HOMEDIR="/mnt/t3nfs01/data01/shome/dschafer/src/DijetCombineLimitCode/" +CMSSW_DIR="/mnt/t3nfs01/data01/shome/dschafer/CMSSW_7_4_7/" +#CMSSW_DIR="/cvmfs/cms.cern.ch/slc6_amd64_gcc530/cms/cmssw/CMSSW_8_0_20/" BASEDIR=`pwd` -LOGDIRNAME=${BASEDIR}/workspaceBatchProducer -OUTDIR=${BASEDIR}/workspaceBatchProducer +LOGDIRNAME=${BASEDIR}/${JOBDIR} +OUTDIR=${BASEDIR}/${JOBDIR} #mkdir ${OUTDIR} ############ BATCH QUEUE DIRECTIVES ############################## @@ -115,10 +118,13 @@ if test $? -ne 0; then fi cd $WORKDIR -cp -r $CMSSW_DIR/src/DijetCombineLimitCode/qv_models_Bkg_13TeV.rs . -cp -r $CMSSW_DIR/src/DijetCombineLimitCode/vv_models_Bkg_13TeV.rs . -echo "root -b -q '$RUN_SCRIPT(${MASSPOINT},${SAMPLE},${CHANNEL},\"\")'" >> myout.txt 2>>myerr.txt -root -b -q "$RUN_SCRIPT(${MASSPOINT},${SAMPLE},${CHANNEL},\"\")">> myout.txt 2>>myerr.txt +# cp -r $CMSSW_DIR/src/DijetCombineLimitCode/qv_models_Bkg_13TeV.rs . +# cp -r $CMSSW_DIR/src/DijetCombineLimitCode/vv_models_Bkg_13TeV.rs . +cp -r $USER_SRM_HOME/DijetCombineLimitCode/qv_models_Bkg_13TeV.rs . +cp -r $USER_SRM_HOME/DijetCombineLimitCode/vv_models_Bkg_13TeV.rs . +echo "root -b -q '$RUN_SCRIPT(${MASSPOINT},${SAMPLE},${CHANNEL},\"${ALTFUNC}\")'" >> myout.txt 2>>myerr.txt +cp myout.txt ${HOMEDIR} +root -b -q "$RUN_SCRIPT(${MASSPOINT},${SAMPLE},${CHANNEL},\"${ALTFUNC}\")">> myout.txt 2>>myerr.txt #### RETRIEVAL OF OUTPUT FILES AND CLEANING UP ############################ cd $WORKDIR @@ -182,6 +188,7 @@ echo "Wallclock running time: $RUNTIME s" cd ${BASEDIR} mv workspace_job.o$JOB_ID $LOGDIRNAME/ mv workspace_job.e$JOB_ID $LOGDIRNAME/ -# mv ${OUTDIR}/CMS_jj*.txt datacards/ -# mv ${OUTDIR}/*.root workspaces/ + +mv ${OUTDIR}/CMS_jj*.txt ${HOMEDIR}/test/ +mv ${OUTDIR}/*.root ${HOMEDIR}/test/ exit 0 diff --git a/submitWorkspaces.sh b/submitWorkspaces.sh new file mode 100644 index 000000000..d749b8b2b --- /dev/null +++ b/submitWorkspaces.sh @@ -0,0 +1,192 @@ +#!/bin/bash + +SAMPLE=$2 +CHANNEL=$3 +MASS=$1 +ALTFUNC=$4 +MODEL1=$5 +MODEL2=$6 + +JOBLOGFILES="myout.txt myerr.txt" +# OUTFILES="" +DBG=2 +SEUSERSUBDIR="" +SEOUTFILES="" +HN_NAME=`whoami` +USER_SRM_HOME="srm://t3se01.psi.ch:8443/srm/managerv2?SFN=/pnfs/psi.ch/cms/trivcat/store/user" +TOPWORKDIR=/scratch/`whoami` +HOMEDIR="/mnt/t3nfs01/data01/shome/dschafer/CMSSW_7_4_7/src/DijetCombineLimitCode" +JOBDIR=workspaces-$JOB_ID +#CMSSW_DIR="/mnt/t3nfs01/data01/shome/thaarres/EXOVVAnalysisRunII/LimitCode/CMSSW_7_1_5" +#CMSSW_DIR="/mnt/t3nfs01/data01/shome/dschafer/CMSSW_7_4_7" +CMSSW_DIR="/cvmfs/cms.cern.ch/slc6_amd64_gcc530/cms/cmssw/CMSSW_8_0_20/" +BASEDIR=`pwd` +LOGDIRNAME=${BASEDIR}/${JOBDIR} +OUTDIR=${BASEDIR}/${JOBDIR} +#mkdir ${OUTDIR} +############ BATCH QUEUE DIRECTIVES ############################## +# Lines beginning with #$ are used to set options for the SGE +# queueing system (same as specifying these options to the qsub +# command + +# Job name (defines name seen in monitoring by qstat and the +# job script's stderr/stdout names) +#$ -N interpolateAll_job + +### Specify the queue on which to run +#$ -q short.q + +# Change to the current working directory from which the job got +# submitted (will also result in the job report stdout/stderr being +# written to this directory) +#$ -cwd + +# here you could change location of the job report stdout/stderr files +# if you did not want them in the submission directory +#$ -o $OUTDIR +#$ -e $OUTDIR +################################################################# + +##### MONITORING/DEBUG INFORMATION ############################### +DATE_START=`date +%s` +echo "Job started at " `date` +cat <&2 + exit 1 +fi +mkdir -p $WORKDIR +if test ! -d "$WORKDIR"; then + echo "ERROR: Failed to create workdir ($WORKDIR)! Aborting..." >&2 + exit 1 +fi + +cd $WORKDIR +cat <&2 + exit 1 +fi + +cd $WORKDIR +cp -r $BASEDIR/qv_models_Bkg_13TeV.rs . +cp -r $BASEDIR/vv_models_Bkg_13TeV.rs . +cp -r $BASEDIR/qv_altmodels_Bkg_13TeV.rs . +cp -r $BASEDIR/vv_altExpvv_models_Bkg_13TeV.rs . +cp -r $BASEDIR/vv_altvv_models_Bkg_13TeV.rs . +# root -b -q 'X2VVFitter.cc(1100,4,1,"MC")' + +echo "root -b -q '${HOMEDIR}/X2VVFitter.cc(${MASS},${SAMPLE},${CHANNEL},\"${ALTFUNC}\")'" >> myout.txt 2>>myerr.txt +cp myout.txt ${HOMEDIR} +root -b -q "${HOMEDIR}/X2VVFitter.cc(${MASS},${SAMPLE},${CHANNEL},\"${ALTFUNC}\")">> myout.txt 2>>myerr.txt + +#### RETRIEVAL OF OUTPUT FILES AND CLEANING UP ############################ +cd $WORKDIR +if test 0"$DBG" -gt 0; then + echo "########################################################" + echo "############# Working directory contents ###############" + echo "pwd: " `pwd` + ls -Rl + echo "########################################################" + echo "YOUR OUTPUT WILL BE MOVED TO $RESULTDIR" + echo "########################################################" +fi + +if test x"$JOBLOGFILES" != x; then + mkdir -p $RESULTDIR + if test ! -e "$RESULTDIR"; then + echo "ERROR: Failed to create $RESULTDIR ...Aborting..." >&2 + exit 1 + fi + for n in $JOBLOGFILES; do + if test ! -e $WORKDIR/$n; then + echo "WARNING: Cannot find output file $WORKDIR/$n. Ignoring it" >&2 + else + cp -a $WORKDIR/$n $RESULTDIR/$n + if test $? -ne 0; then + echo "ERROR: Failed to copy $WORKDIR/$n to $RESULTDIR/$n" >&2 + fi + fi + done +fi + +if test x"$OUTFILES" != x; then + if test 0"$DBG" -ge 2; then + srmdebug="-v" + fi + for n in $OUTFILES; do + if test ! -e $WORKDIR/$n; then + echo "WARNING: Cannot find output file $WORKDIR/$n. Ignoring it" >&2 + else + cp -a $WORKDIR/$n $OUTDIR/$n + if test $? -ne 0; then + echo "ERROR: Failed to copy $WORKDIR/$n to $OUTDIR/$n" >&2 + fi + fi + done +fi + +echo "Cleaning up $WORKDIR" +rm -rf $WORKDIR + +rm -rf $LOGDIRNAME/$JOBDIR +mv $STARTDIR/$JOBDIR $LOGDIRNAME/. + +########################################################################### +DATE_END=`date +%s` +RUNTIME=$((DATE_END-DATE_START)) +echo "################################################################" +echo "Job finished at " `date` +echo "Wallclock running time: $RUNTIME s" + +cd ${BASEDIR} +mv interpolateAll_job.o$JOB_ID interpolateAll_job.e$JOB_ID $LOGDIRNAME/. +exit 0 diff --git a/vv_altvv_models_Bkg_13TeV.rs b/vv_altvv_models_Bkg_13TeV.rs index b13dc2645..933882601 100644 --- a/vv_altvv_models_Bkg_13TeV.rs +++ b/vv_altvv_models_Bkg_13TeV.rs @@ -5,7 +5,7 @@ bkg_fit_slope2_CMS_jj_VVHP[10.,-100.,100.]; bkg_fit_slope3_CMS_jj_VVHP[1.,0.,50.]; bkg_fit_slope4_CMS_jj_VVHP[0.,-12.,12.]; -bkg_fit_slope1_CMS_jj_WWHP[ 1.31274e-02,-5000.,5000]; +bkg_fit_slope1_CMS_jj_WWHP[ 1.31274e-02,-500.,500]; bkg_fit_slope2_CMS_jj_WWHP[-2.42314e+00,-100.,100.]; bkg_fit_slope3_CMS_jj_WWHP[ 4.70224e+00,0.,50.]; bkg_fit_slope4_CMS_jj_WWHP[ 5.41163e+02,-1000,1000.]; @@ -15,25 +15,25 @@ bkg_fit_slope2_CMS_jj_WZHP[-2.42314e+00,-100.,100.]; bkg_fit_slope3_CMS_jj_WZHP[ 4.70224e+00,0.,50.]; bkg_fit_slope4_CMS_jj_WZHP[ 5.41163e+02, -12, 1000.]; -bkg_fit_slope1_CMS_jj_ZZHP[100.,-5000.,5000]; -bkg_fit_slope2_CMS_jj_ZZHP[10.,-100.,100.]; -bkg_fit_slope3_CMS_jj_ZZHP[1.,0.,50.]; -bkg_fit_slope4_CMS_jj_ZZHP[0.,-100.,100.]; +bkg_fit_slope1_CMS_jj_ZZHP[ 9.66361e-07,-500.,500]; +bkg_fit_slope2_CMS_jj_ZZHP[-1.15120e+01,-100.,100.]; +bkg_fit_slope3_CMS_jj_ZZHP[ 6.63440e+00,0.,50.]; +bkg_fit_slope4_CMS_jj_ZZHP[ 1.04241e+01,-100.,100.]; -bkg_fit_slope1_CMS_jj_VVLP[100.,-5000.,5000]; +bkg_fit_slope1_CMS_jj_VVLP[100.,-500.,500]; bkg_fit_slope2_CMS_jj_VVLP[10.,-100.,100.]; bkg_fit_slope3_CMS_jj_VVLP[1.,0.,50.]; bkg_fit_slope4_CMS_jj_VVLP[0.,-12.,12.]; -bkg_fit_slope1_CMS_jj_ZZLP[100.,-5000.,5000]; -bkg_fit_slope2_CMS_jj_ZZLP[10.,-100.,100.]; -bkg_fit_slope3_CMS_jj_ZZLP[1.,0.,50.]; -bkg_fit_slope4_CMS_jj_ZZLP[0.,-12.,12.]; +bkg_fit_slope1_CMS_jj_ZZLP[ 4.48531e-07 ,-500.,500]; +bkg_fit_slope2_CMS_jj_ZZLP[ -7.96655e-01,-100.,100.]; +bkg_fit_slope3_CMS_jj_ZZLP[ 7.43952e+00 ,0.,50.]; +bkg_fit_slope4_CMS_jj_ZZLP[0. ,-12.,12.]; -bkg_fit_slope1_CMS_jj_WZLP[1000.,-5000.,5000]; -bkg_fit_slope2_CMS_jj_WZLP[10.,-100.,100.]; -bkg_fit_slope3_CMS_jj_WZLP[1.,0.,50.]; -bkg_fit_slope4_CMS_jj_WZLP[0.,-12.,12.]; +bkg_fit_slope1_CMS_jj_WZLP[4.48531e-07 ,-500.,500]; +bkg_fit_slope2_CMS_jj_WZLP[-7.96655e-01,-100.,100.]; +bkg_fit_slope3_CMS_jj_WZLP[7.43952e+00 ,0.,50.]; +bkg_fit_slope4_CMS_jj_WZLP[ 0.0,-12.,12.]; bkg_fit_slope1_CMS_jj_WWLP[1000.,-5000.,5000]; bkg_fit_slope2_CMS_jj_WWLP[10.,-100.,100.]; @@ -61,28 +61,3 @@ sqrtS[13000., 13000., 13000.] - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vv_models_Bkg_13TeV.rs b/vv_models_Bkg_13TeV.rs index 4a492d5d6..a7c3182f0 100644 --- a/vv_models_Bkg_13TeV.rs +++ b/vv_models_Bkg_13TeV.rs @@ -1,4 +1,4 @@ -mgg13TeV[955,4500]; +mgg13TeV[1050,4500]; bkg_fit_slope1_CMS_jj_VVHP[7., -100.0, 500.0]; bkg_fit_slope2_CMS_jj_VVHP[7., -100., 100.0]; @@ -25,4 +25,4 @@ bkg_fit_slope2_CMS_jj_WZLP[7.63372e+00,-100.0, 100.0]; bkg_fit_slope1_CMS_jj_ZZLP[3.01523e+00, -100.0, 1000.0]; bkg_fit_slope2_CMS_jj_ZZLP[7.76599e+00,-100.0, 1000.0]; -sqrtS[13000., 13000., 13000.] \ No newline at end of file +sqrtS[13000., 13000., 13000.]