ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/ActiveSamples.C
Revision: 1.47
Committed: Fri Jun 28 15:03:44 2013 UTC (11 years, 10 months ago) by buchmann
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.46: +16 -4 lines
Error occurred while calculating annotation data.
Log Message:
Updated files for migration to git (sync)

File Contents

# Content
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
28 SanityChecks();
29
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 // 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 // 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
48
49
50
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 if(PlottingSetup::RestrictToMassPeak==false) {
62 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 PlottingSetup::requireZ=false;
67 }
68 dout << "Currently configuration: The mass cut is \"" << PlottingSetup::cutmass << "\" and RestrictToMassPeak is currently set to " << PlottingSetup::RestrictToMassPeak << endl;
69
70
71 }
72
73
74 void define_samples(bool showList, samplecollection &allsamples, samplecollection &signalsamples, samplecollection &scansample, samplecollection &raresample, samplecollection &systsamples, samplecollection &qcdsamples, samplecollection &comparesamples)
75 {
76 SanityChecks();
77
78
79 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 if(PlottingSetup::RestrictToMassPeak&&!PlottingSetup::UseSidebandsForcJZB) {
86 PlottingSetup::sidebandcut=TCut("mll<2&&mll>3");
87 }
88
89
90
91
92
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
121 // write_info(__FUNCTION__,"SPLITTING OTHERS!!!!");SplitOthers=true;
122 // write_info(__FUNCTION__,"SPLITTING DIBOSONS!!");SplitDibosons=true;
123 if(!PlottingSetup::is2012) {
124 write_error(__FUNCTION__,"Sorry, looking at 2011 data/mc is no longer supported.");
125 assert(0);
126 /*
127 // 2011 Data and MC
128 PlottingSetup::emuncertOFFPEAK=0.1;
129 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");
130 LoadSamplesFromJSON("Samples2011.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
131 */
132 } else {
133 // 2012 Data and MC
134 // write_info(__FUNCTION__,"Setting up 2012 configuration - once you've stopped looking at 2011 data please make this the default!");
135 // 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.
136 // PlottingSetup::basicqualitycut=TCut("(pfJetGoodNum40>=2&&pfJetGoodID[0]!=0)&&(pfJetGoodNum40>=2&&pfJetGoodID[1]!=0)"&&PlottingSetup::basiccut);
137 // PlottingSetup::cutnJets=TCut("pfJetGoodNum40>=3"&&PlottingSetup::basicqualitycut);
138
139 PlottingSetup::luminosity=PlottingSetup::luminosity2012;
140 PlottingSetup::lumiuncert=PlottingSetup::lumiuncert2012;
141
142 // Values for 5.1 /fb (2012, cJZB)
143 PlottingSetup::jzbvariabledata="(jzb[1]+0.061016*pt)";
144 PlottingSetup::jzbvariablemc="(jzb[1]+0.035264*pt)";
145
146 // Values for 5.1 /fb (2012, iJZB)
147 if(!PlottingSetup::RestrictToMassPeak) {
148 PlottingSetup::jzbvariabledata="(jzb[1]+0.061016*pt)";
149 PlottingSetup::jzbvariablemc="(jzb[1]+0.035264*pt)";
150 }
151
152
153 if(PlottingSetup::RestrictToMassPeak) {
154 PlottingSetup::passtrig=TCut("pt1>20&&pt2>20"&&PlottingSetup::passtrig);
155 }
156
157 if ( !PlottingSetup::is53reco ) {
158 //52 reco samples
159 LoadSamplesFromJSON("Samples52.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
160 } else {
161 //if(PlottingSetup::IsIJZBAnalysis) LoadSamplesFromJSON("Samples53_20ifb_PYTHIA.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
162 if(PlottingSetup::SampleList!="none") {
163 LoadSamplesFromJSON(PlottingSetup::SampleList,SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
164 } else {
165 if(PlottingSetup::IsIJZBAnalysis) LoadSamplesFromJSON("Samples_ExperimentaliJZB.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
166 else {
167 if(PlottingSetup::IsZbAnalysis) LoadSamplesFromJSON("Samples53_20ifb.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
168 else LoadSamplesFromJSON("Samples53.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
169
170 // else LoadSamplesFromJSON("QuickSamples.samples",SplitByJetFlavor,SplitByLeptonFlavor,SplitDibosons,SplitOthers);
171 write_info(__FUNCTION__,"Watch out, using quick samples");
172 }
173 }
174 }
175 }
176
177 if(PlottingSetup::is2012) {
178 cutWeight=TCut("(is_data+(!is_data)*weight*(weight<100)*((id1==id2)*0.95+(id1!=id2)*0.94))");
179 // 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)))");
180 }
181
182 // XS taken from:
183 // https://twiki.cern.ch/twiki/bin/view/CMS/QCDGammaPlusJetQCD11005
184
185 if(!PlottingSetup::RestrictToMassPeak) {
186 PlottingSetup::cutmass=PlottingSetup::openmasscut;
187 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).
188 PlottingSetup::genMassCut=PlottingSetup::openGenmasscut;
189 PlottingSetup::requireZ=false;
190 }
191 if(PlottingSetup::RestrictToMassPeak&&!PlottingSetup::UseSidebandsForcJZB) {
192 PlottingSetup::sidebandcut=TCut("SideBandsHaveBeenCalledForOnPeakAnalysisWithoutSidebands__ERROR==1");
193 PlottingSetup::requireZ=true;
194 }
195
196 if(PlottingSetup::DoBTag) {
197 PlottingSetup::cutnJets=PlottingSetup::cutnJets&&PlottingSetup::bTagRequirement;
198 }
199
200 if(showList) {
201 allsamples.ListSamples();
202 signalsamples.ListSamples();
203 systsamples.ListSamples();
204 }
205 }