1 |
buchmann |
1.1 |
#include <iostream>
|
2 |
|
|
#include <vector>
|
3 |
|
|
#include <sys/stat.h>
|
4 |
|
|
#include <unistd.h>
|
5 |
|
|
|
6 |
|
|
#include <TMath.h>
|
7 |
|
|
#include <TColor.h>
|
8 |
|
|
#include <TPaveText.h>
|
9 |
|
|
#include <TRandom.h>
|
10 |
|
|
#include <TF1.h>
|
11 |
|
|
|
12 |
|
|
#ifndef SampleClassLoaded
|
13 |
|
|
#include "ActiveSamples.C"
|
14 |
|
|
#endif
|
15 |
|
|
|
16 |
|
|
#ifndef Verbosity
|
17 |
|
|
#define Verbosity 0
|
18 |
|
|
#endif
|
19 |
|
|
#ifndef HUSH
|
20 |
|
|
#define HUSH 1
|
21 |
|
|
#endif
|
22 |
|
|
|
23 |
|
|
void define_SMS_sample(bool showList, samplecollection &allsamples, samplecollection &signalsamples, samplecollection &scansample, bool loadall=false)
|
24 |
|
|
{
|
25 |
|
|
char hostname[1023];
|
26 |
|
|
gethostname(hostname,1023);
|
27 |
buchmann |
1.26 |
|
28 |
|
|
SanityChecks();
|
29 |
buchmann |
1.1 |
|
30 |
|
|
/*
|
31 |
|
|
|
32 |
|
|
CRUCIAL: The NAME needs to contain either "SMS" or "mSUGRA" for the SUSY scan algorithm (to be able to distinguish the two) -- this is now done automatically based on PlottingSetup::ScanSampleDirectory
|
33 |
|
|
|
34 |
|
|
*/
|
35 |
|
|
|
36 |
|
|
string prefix="/shome/";
|
37 |
|
|
if((int)((string)hostname).find("falda")>-1) prefix="/scratch/";
|
38 |
|
|
string mSUGRAorSMS="mSUGRA";
|
39 |
|
|
if((int)((string)PlottingSetup::ScanSampleDirectory).find("SMS")>-1) mSUGRAorSMS="SMS";
|
40 |
|
|
if((int)((string)PlottingSetup::ScanSampleDirectory).find("GMSB")>-1) mSUGRAorSMS="GMSB";
|
41 |
|
|
|
42 |
|
|
/// NEW: Only indicate the very first file - please place scans in ntuples/SMS/ and adapt the name here and in SUSYScan.C (the files are loaded when needed avoiding high memory usage and startup times)
|
43 |
|
|
/// If you have different scans (e.g. you have a T5zzl one as well) you can create an additional directory such as SMS_T5zzl, but you need to change that below and in SUSYScan.C as well (where the files are loaded)
|
44 |
buchmann |
1.5 |
// scansample.AddSample(prefix+"buchmann/ntuples/"+PlottingSetup::ScanSampleDirectory+"/"+mSUGRAorSMS+"_clean_splitup_0_0.root",mSUGRAorSMS,1,1,false,true,0,kRed); // there is only one sample in the scan; we give each event weight "1"
|
45 |
|
|
// scansample.AddSample("/scratch/buchmann/buchmann/AllSamplesStartingAt10GeV_rest5_mSUGRA/mSUGRA_dilepton_m0-220to3000_m12-100to1000_tanb-10andA0-0_7TeV-Pythia6Z/output_8.root","mSUGRA",1,1,false,true,0,kRed); // there is only one sample in the scan; we give each event weight "1"
|
46 |
buchmann |
1.9 |
// scansample.AddSample("/shome/lbaeni/jzb/DileptonmSUGRAScan__pieces/mSUGRA_M0_400__M12_400.root","mSUGRA",1,1,false,true,0,kRed); // there is only one sample in the scan; we give each event weight "1"
|
47 |
buchmann |
1.5 |
|
48 |
|
|
|
49 |
|
|
|
50 |
buchmann |
1.1 |
|
51 |
|
|
if(loadall) {
|
52 |
|
|
for(int ix=0;ix<PlottingSetup::ScanXzones;ix++) {
|
53 |
|
|
for(int iy=1;iy<PlottingSetup::ScanYzones;iy++) {//note: the "zero-zero" sample is already loaded above!
|
54 |
|
|
scansample.AddSample((prefix+"buchmann/ntuples/"+PlottingSetup::ScanSampleDirectory+"/"+mSUGRAorSMS+"_clean_splitup_"+any2string(ix)+"_"+any2string(iy)+".root"),mSUGRAorSMS,1,1,false,true,ix*PlottingSetup::ScanXzones+iy,kRed); // there is only one sample in the scan; we give each event weight "1"
|
55 |
|
|
}
|
56 |
|
|
}
|
57 |
|
|
}
|
58 |
|
|
|
59 |
|
|
|
60 |
|
|
flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
|
61 |
buchmann |
1.5 |
if(PlottingSetup::RestrictToMassPeak==false) {
|
62 |
buchmann |
1.1 |
PlottingSetup::cutmass=PlottingSetup::openmasscut;
|
63 |
|
|
// PlottingSetup::sidebandcut=TCut("mll<2&&mll>3");//impossible cut - because we don't want any sidebands!
|
64 |
|
|
PlottingSetup::sidebandcut=TCut("SideBandsHaveBeenCalledForOffPeakAnalysis__ERROR==1");//this will trigger errors whenever sidebands are called - perfect for checking any remaining uses (checked, and no uses were found).
|
65 |
|
|
PlottingSetup::genMassCut=PlottingSetup::openGenmasscut;//impossible cut - because we don't want any sidebands!
|
66 |
buchmann |
1.5 |
PlottingSetup::requireZ=false;
|
67 |
buchmann |
1.1 |
}
|
68 |
buchmann |
1.9 |
dout << "Currently configuration: The mass cut is \"" << PlottingSetup::cutmass << "\" and RestrictToMassPeak is currently set to " << PlottingSetup::RestrictToMassPeak << endl;
|
69 |
buchmann |
1.12 |
|
70 |
|
|
|
71 |
buchmann |
1.1 |
}
|
72 |
|
|
|
73 |
|
|
|
74 |
fronga |
1.33 |
void define_samples(bool showList, samplecollection &allsamples, samplecollection &signalsamples, samplecollection &scansample, samplecollection &raresample, samplecollection &systsamples, samplecollection &qcdsamples, samplecollection &comparesamples)
|
75 |
buchmann |
1.1 |
{
|
76 |
buchmann |
1.26 |
SanityChecks();
|
77 |
buchmann |
1.42 |
|
78 |
|
|
|
79 |
buchmann |
1.1 |
flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
|
80 |
|
|
if(!PlottingSetup::RestrictToMassPeak) {
|
81 |
|
|
PlottingSetup::cutmass=PlottingSetup::openmasscut;
|
82 |
|
|
PlottingSetup::sidebandcut=TCut("mll<2&&mll>3");//impossible cut - because we don't want any sidebands!
|
83 |
|
|
PlottingSetup::genMassCut=PlottingSetup::openGenmasscut;//impossible cut - because we don't want any sidebands!
|
84 |
|
|
}
|
85 |
buchmann |
1.27 |
if(PlottingSetup::RestrictToMassPeak&&!PlottingSetup::UseSidebandsForcJZB) {
|
86 |
|
|
PlottingSetup::sidebandcut=TCut("mll<2&&mll>3");
|
87 |
|
|
}
|
88 |
buchmann |
1.1 |
|
89 |
|
|
|
90 |
|
|
|
91 |
|
|
|
92 |
buchmann |
1.42 |
|
93 |
|
|
bool SplitByJetFlavor=false;
|
94 |
|
|
bool SplitByLeptonFlavor=true;
|
95 |
|
|
bool SplitDibosons=false;
|
96 |
|
|
bool SplitOthers=true; // splits others into "Dibosons","W+Jets", and "Single-top"
|
97 |
|
|
|
98 |
|
|
if(PlottingSetup::IsJZBAnalysis) {
|
99 |
|
|
//our main analysis
|
100 |
|
|
SplitByJetFlavor=false;
|
101 |
|
|
SplitByLeptonFlavor=true;
|
102 |
|
|
SplitDibosons=false;
|
103 |
|
|
SplitOthers=false;
|
104 |
|
|
}
|
105 |
|
|
|
106 |
|
|
if(PlottingSetup::IsWZAnalysis) {
|
107 |
|
|
//WZ cross check for main analysis
|
108 |
|
|
SplitByJetFlavor=false;
|
109 |
|
|
SplitByLeptonFlavor=false;
|
110 |
|
|
SplitDibosons=true;
|
111 |
|
|
SplitOthers=true;
|
112 |
|
|
}
|
113 |
|
|
if(PlottingSetup::IsZbAnalysis) {
|
114 |
|
|
//b-jet residual correction calculation
|
115 |
|
|
SplitByJetFlavor=true;
|
116 |
|
|
SplitByLeptonFlavor=false;
|
117 |
|
|
SplitDibosons=false;
|
118 |
|
|
SplitOthers=true;
|
119 |
|
|
}
|
120 |
fronga |
1.29 |
|
121 |
buchmann |
1.46 |
write_info(__FUNCTION__,"SPLITTING OTHERS!!!!");SplitOthers=true;
|
122 |
buchmann |
1.42 |
if(!PlottingSetup::is2012) {
|
123 |
buchmann |
1.46 |
write_error(__FUNCTION__,"Sorry, looking at 2011 data/mc is no longer supported.");
|
124 |
|
|
assert(0);
|
125 |
|
|
/*
|
126 |
fronga |
1.29 |
// 2011 Data and MC
|
127 |
buchmann |
1.22 |
PlottingSetup::emuncertOFFPEAK=0.1;
|
128 |
|
|
write_info(__FUNCTION__,"Have set emu uncertainty to 10% which is the 2011 value - for 2012 this is 25% at the moment due to the low stats ttbar sample");
|
129 |
buchmann |
1.42 |
LoadSamplesFromJSON("Samples2011.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
|
130 |
buchmann |
1.46 |
*/
|
131 |
buchmann |
1.10 |
} else {
|
132 |
fronga |
1.29 |
// 2012 Data and MC
|
133 |
buchmann |
1.46 |
// write_info(__FUNCTION__,"Setting up 2012 configuration - once you've stopped looking at 2011 data please make this the default!");
|
134 |
fronga |
1.29 |
// Don't use this for the "essential cut", because we want to plot nJets as well as mll in the inclusive case; we thus use it as an addition nJets cut.
|
135 |
buchmann |
1.46 |
// PlottingSetup::basicqualitycut=TCut("(pfJetGoodNum40>=2&&pfJetGoodID[0]!=0)&&(pfJetGoodNum40>=2&&pfJetGoodID[1]!=0)"&&PlottingSetup::basiccut);
|
136 |
|
|
// PlottingSetup::cutnJets=TCut("pfJetGoodNum40>=3"&&PlottingSetup::basicqualitycut);
|
137 |
fronga |
1.23 |
|
138 |
buchmann |
1.10 |
PlottingSetup::luminosity=PlottingSetup::luminosity2012;
|
139 |
|
|
PlottingSetup::lumiuncert=PlottingSetup::lumiuncert2012;
|
140 |
|
|
|
141 |
buchmann |
1.22 |
// Values for 5.1 /fb (2012, cJZB)
|
142 |
buchmann |
1.39 |
PlottingSetup::jzbvariabledata="(jzb[1]+0.061016*pt)";
|
143 |
|
|
PlottingSetup::jzbvariablemc="(jzb[1]+0.035264*pt)";
|
144 |
buchmann |
1.16 |
|
145 |
fronga |
1.29 |
// Values for 5.1 /fb (2012, iJZB)
|
146 |
buchmann |
1.16 |
if(!PlottingSetup::RestrictToMassPeak) {
|
147 |
buchmann |
1.39 |
PlottingSetup::jzbvariabledata="(jzb[1]+0.061016*pt)";
|
148 |
|
|
PlottingSetup::jzbvariablemc="(jzb[1]+0.035264*pt)";
|
149 |
buchmann |
1.16 |
}
|
150 |
buchmann |
1.22 |
|
151 |
buchmann |
1.28 |
|
152 |
|
|
if(PlottingSetup::RestrictToMassPeak) {
|
153 |
|
|
PlottingSetup::passtrig=TCut("pt1>20&&pt2>20"&&PlottingSetup::passtrig);
|
154 |
|
|
}
|
155 |
buchmann |
1.16 |
|
156 |
fronga |
1.29 |
if ( !PlottingSetup::is53reco ) {
|
157 |
buchmann |
1.42 |
//52 reco samples
|
158 |
|
|
LoadSamplesFromJSON("Samples52.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
|
159 |
fronga |
1.29 |
} else {
|
160 |
buchmann |
1.44 |
if(PlottingSetup::IsZbAnalysis) LoadSamplesFromJSON("Samples53_20ifb.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
|
161 |
|
|
else LoadSamplesFromJSON("Samples53.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
|
162 |
fronga |
1.29 |
}
|
163 |
buchmann |
1.2 |
}
|
164 |
buchmann |
1.10 |
|
165 |
buchmann |
1.13 |
if(PlottingSetup::is2012) {
|
166 |
buchmann |
1.45 |
cutWeight=TCut("(weight*(weight<1000)*(is_data+(!is_data)*((id1==id2)*0.95+(id1!=id2)*0.94)))");
|
167 |
|
|
// cutWeight=TCut("(weight*(weight<1000)*(is_data+(!is_data)*((id1==id2&&id1==0)*0.95+(id1==id2&&id1==1)*0.88+(id1!=id2)*0.92)))");
|
168 |
buchmann |
1.13 |
}
|
169 |
buchmann |
1.5 |
|
170 |
buchmann |
1.3 |
// XS taken from:
|
171 |
|
|
// https://twiki.cern.ch/twiki/bin/view/CMS/QCDGammaPlusJetQCD11005
|
172 |
|
|
|
173 |
buchmann |
1.5 |
if(!PlottingSetup::RestrictToMassPeak) {
|
174 |
|
|
PlottingSetup::cutmass=PlottingSetup::openmasscut;
|
175 |
|
|
PlottingSetup::sidebandcut=TCut("SideBandsHaveBeenCalledForOffPeakAnalysis__ERROR==1");//this will trigger errors whenever sidebands are called - perfect for checking any remaining uses (checked, and no uses were found).
|
176 |
buchmann |
1.9 |
PlottingSetup::genMassCut=PlottingSetup::openGenmasscut;
|
177 |
buchmann |
1.5 |
PlottingSetup::requireZ=false;
|
178 |
|
|
}
|
179 |
buchmann |
1.27 |
if(PlottingSetup::RestrictToMassPeak&&!PlottingSetup::UseSidebandsForcJZB) {
|
180 |
|
|
PlottingSetup::sidebandcut=TCut("SideBandsHaveBeenCalledForOnPeakAnalysisWithoutSidebands__ERROR==1");
|
181 |
|
|
PlottingSetup::requireZ=true;
|
182 |
|
|
}
|
183 |
buchmann |
1.12 |
|
184 |
|
|
if(PlottingSetup::DoBTag) {
|
185 |
|
|
PlottingSetup::cutnJets=PlottingSetup::cutnJets&&PlottingSetup::bTagRequirement;
|
186 |
|
|
}
|
187 |
|
|
|
188 |
fronga |
1.23 |
if(showList) {
|
189 |
|
|
allsamples.ListSamples();
|
190 |
|
|
signalsamples.ListSamples();
|
191 |
|
|
systsamples.ListSamples();
|
192 |
|
|
}
|
193 |
buchmann |
1.28 |
}
|