ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/PhotonIDMod.cc
Revision: 1.33
Committed: Wed Jul 25 15:00:42 2012 UTC (12 years, 9 months ago) by fabstoec
Content type: text/plain
Branch: MAIN
Changes since 1.32: +14 -4 lines
Log Message:
added Vgamma Photon ID

File Contents

# User Rev Content
1 fabstoec 1.30
2 fabstoec 1.33 // $Id: PhotonIDMod.cc,v 1.32 2012/07/24 11:41:21 fabstoec Exp $
3 sixie 1.1
4 bendavid 1.24 #include "TDataMember.h"
5     #include "TTree.h"
6 fabstoec 1.32 #include "TRandom3.h"
7 sixie 1.1 #include "MitPhysics/Mods/interface/PhotonIDMod.h"
8 loizides 1.7 #include "MitAna/DataTree/interface/PhotonCol.h"
9 sixie 1.1 #include "MitPhysics/Init/interface/ModNames.h"
10 fabstoec 1.17 #include "MitPhysics/Utils/interface/IsolationTools.h"
11 bendavid 1.19 #include "MitPhysics/Utils/interface/PhotonTools.h"
12 sixie 1.1
13 fabstoec 1.26 #include <TSystem.h>
14    
15 sixie 1.1 using namespace mithep;
16    
17     ClassImp(mithep::PhotonIDMod)
18 fabstoec 1.32
19 sixie 1.1 //--------------------------------------------------------------------------------------------------
20     PhotonIDMod::PhotonIDMod(const char *name, const char *title) :
21     BaseMod(name,title),
22 fabstoec 1.17 fPhotonBranchName (Names::gkPhotonBrn),
23     fGoodPhotonsName (ModNames::gkGoodPhotonsName),
24     fTrackBranchName (Names::gkTrackBrn),
25     fBeamspotBranchName(Names::gkBeamSpotBrn),
26 fabstoec 1.18 fPileUpDenName (Names::gkPileupEnergyDensityBrn),
27 bendavid 1.19 fConversionName ("MergedConversions"),
28     fElectronName ("Electrons"),
29 bendavid 1.25 fGoodElectronName ("Electrons"),
30 fabstoec 1.22 fPVName (Names::gkPVBeamSpotBrn),
31 bendavid 1.24 // MC specific stuff...
32     fMCParticleName (Names::gkMCPartBrn),
33     fPileUpName (Names::gkPileupInfoBrn),
34 bendavid 1.31 fPFCandsName ("PFCandidates"),
35 fabstoec 1.32
36 fabstoec 1.22 fPhotonIDType ("Custom"),
37     fPhotonIsoType ("Custom"),
38     fPhotonPtMin (15.0),
39     fHadOverEmMax (0.02),
40     fApplySpikeRemoval (kFALSE),
41     fApplyPixelSeed (kTRUE),
42     fApplyElectronVeto (kFALSE),
43 bendavid 1.25 fInvertElectronVeto(kFALSE),
44 bendavid 1.19 fApplyElectronVetoConvRecovery(kFALSE),
45 fabstoec 1.22 fApplyConversionId (kFALSE),
46 bendavid 1.19 fApplyTriggerMatching(kFALSE),
47 fabstoec 1.22 fPhotonR9Min (0.5),
48     fPhIdType (kIdUndef),
49     fPhIsoType (kIsoUndef),
50     fFiduciality (kTRUE),
51     fEtaWidthEB (0.01),
52     fEtaWidthEE (0.028),
53     fAbsEtaMax (999.99),
54     fApplyR9Min (kFALSE),
55 fabstoec 1.32
56 fabstoec 1.22 fEffAreaEcalEE (0.089),
57     fEffAreaHcalEE (0.156),
58     fEffAreaTrackEE (0.261),
59 fabstoec 1.32
60 fabstoec 1.22 fEffAreaEcalEB (0.183),
61     fEffAreaHcalEB (0.062),
62     fEffAreaTrackEB (0.306),
63 fabstoec 1.32
64 fabstoec 1.17 fPhotons(0),
65     fTracks(0),
66     fBeamspots(0),
67 bendavid 1.19 fPileUpDen(0),
68     fConversions(0),
69 fabstoec 1.22 fElectrons(0),
70 bendavid 1.25 fGoodElectrons(0),
71 fabstoec 1.22 fPV(0),
72 bendavid 1.24 fMCParticles (0),
73     fPileUp (0),
74 bendavid 1.31 fPFCands (0),
75 fabstoec 1.32
76 fabstoec 1.26 // MVA ID Stuff
77 bendavid 1.27 fbdtCutBarrel (0.0744), //cuts give the same effiiciency (relative to preselection) with cic
78     fbdtCutEndcap (0.0959), //cuts give the same effiiciency (relative to preselection) with cic
79 bendavid 1.29 fVariableType (10), //please use 4 which is the correct type
80     fEndcapWeights (gSystem->Getenv("CMSSW_BASE")+TString("/src/MitPhysics/data/TMVAClassificationPhotonID_Endcap_PassPreSel_Variable_10_BDTnCuts2000_BDT.weights.xml")),
81     fBarrelWeights (gSystem->Getenv("CMSSW_BASE")+TString("/src/MitPhysics/data/TMVAClassificationPhotonID_Barrel_PassPreSel_Variable_10_BDTnCuts2000_BDT.weights.xml")),
82 fabstoec 1.32
83     // fDoMCR9Scaling (kFALSE),
84     // fMCR9ScaleEB (1.0),
85     // fMCR9ScaleEE (1.0),
86     // fDoMCSigIEtaIEtaScaling(kFALSE),
87     // fDoMCWidthScaling (kFALSE),
88    
89     fDoMCErrScaling (kFALSE),
90     fMCErrScaleEB (1.0),
91     fMCErrScaleEE (1.0),
92    
93 fabstoec 1.30 fPhotonsFromBranch(true),
94 bendavid 1.24 fPVFromBranch (true),
95 bendavid 1.25 fGoodElectronsFromBranch (kTRUE),
96 fabstoec 1.32 fIsData(false),
97    
98     // ------------------------------------------------
99     // added by fab: smearing/scaling options...
100     fDoDataEneCorr (false),
101     fDoMCSmear (false),
102    
103     fDoShowerShapeScaling (false),
104     // ------------------------------------------------
105     fDataEnCorr_EBlowEta_hR9central(0.),
106     fDataEnCorr_EBlowEta_hR9gap (0.),
107     fDataEnCorr_EBlowEta_lR9 (0.),
108     fDataEnCorr_EBhighEta_hR9 (0.),
109     fDataEnCorr_EBhighEta_lR9 (0.),
110     fDataEnCorr_EElowEta_hR9 (0.),
111     fDataEnCorr_EElowEta_lR9 (0.),
112     fDataEnCorr_EEhighEta_hR9 (0.),
113     fDataEnCorr_EEhighEta_lR9 (0.),
114     fRunStart (0),
115     fRunEnd (0),
116     fMCSmear_EBlowEta_hR9central (0.),
117     fMCSmear_EBlowEta_hR9gap (0.),
118     fMCSmear_EBlowEta_lR9 (0.),
119     fMCSmear_EBhighEta_hR9 (0.),
120     fMCSmear_EBhighEta_lR9 (0.),
121     fMCSmear_EElowEta_hR9 (0.),
122     fMCSmear_EElowEta_lR9 (0.),
123     fMCSmear_EEhighEta_hR9 (0.),
124     fMCSmear_EEhighEta_lR9 (0.),
125 fabstoec 1.17
126 fabstoec 1.32 fRng (new TRandom3())
127    
128 sixie 1.1 {
129     // Constructor.
130     }
131    
132     //--------------------------------------------------------------------------------------------------
133     void PhotonIDMod::Process()
134     {
135     // Process entries of the tree.
136    
137 fabstoec 1.17 LoadEventObject(fPhotonBranchName, fPhotons);
138 bendavid 1.19
139     const BaseVertex *bsp = NULL;
140     Double_t _tRho = -1.;
141 bendavid 1.31 Float_t rho2012 = -99;
142 bendavid 1.19 const TriggerObjectCol *trigObjs = 0;
143     if (fPhotons->GetEntries()>0) {
144     LoadEventObject(fTrackBranchName, fTracks);
145     LoadEventObject(fBeamspotBranchName, fBeamspots);
146 bendavid 1.24 LoadEventObject(fPileUpDenName, fPileUpDen);
147 bendavid 1.19 LoadEventObject(fConversionName, fConversions);
148     LoadEventObject(fElectronName, fElectrons);
149 fabstoec 1.26 LoadEventObject(fGoodElectronName, fGoodElectrons);
150 bendavid 1.24 LoadEventObject(fPVName, fPV);
151 bendavid 1.31 LoadEventObject(fPFCandsName, fPFCands);
152    
153 bendavid 1.19
154     if(fBeamspots->GetEntries() > 0)
155     bsp = fBeamspots->At(0);
156 fabstoec 1.17
157 bendavid 1.24 if(fPileUpDen->GetEntries() > 0)
158 fabstoec 1.23 _tRho = (Double_t) fPileUpDen->At(0)->RhoRandomLowEta();
159 fabstoec 1.26
160 bendavid 1.31 if (fPileUpDen->At(0)->RhoKt6PFJets()>0.) rho2012 = fPileUpDen->At(0)->RhoKt6PFJets();
161     else rho2012 = fPileUpDen->At(0)->Rho();
162 bendavid 1.19
163     //get trigger object collection if trigger matching is enabled
164     if (fApplyTriggerMatching) {
165     trigObjs = GetHLTObjects(fTrigObjectsName);
166     }
167    
168     }
169 fabstoec 1.17
170 fabstoec 1.32
171     // ------------------------------------------------------------
172     // Get Event header for Run info etc.
173     const EventHeader* evtHead = this->GetEventHeader();
174     unsigned int evtNum = evtHead->EvtNum();
175     UInt_t runNumber = evtHead->RunNum();
176     Float_t _runNum = (Float_t) runNumber;
177     Float_t _lumiSec = (Float_t) evtHead->LumiSec();
178    
179 sixie 1.1 PhotonOArr *GoodPhotons = new PhotonOArr;
180     GoodPhotons->SetName(fGoodPhotonsName);
181 fabstoec 1.30 GoodPhotons->SetOwner(kTRUE);
182 sixie 1.1
183     for (UInt_t i=0; i<fPhotons->GetEntries(); ++i) {
184 fabstoec 1.30 // need to cpoy the photon in order to be able to scale R9 etc.
185     Photon *ph = new Photon(*fPhotons->At(i));
186 bendavid 1.24
187     if (fFiduciality == kTRUE &&
188     (ph->SCluster()->AbsEta()>=2.5 || (ph->SCluster()->AbsEta()>=1.4442 && ph->SCluster()->AbsEta()<=1.566) ) )
189     continue;
190    
191 fabstoec 1.30 if (fInvertElectronVeto && PhotonTools::PassElectronVeto(ph,fGoodElectrons) && false) {
192 bendavid 1.25 continue;
193     }
194    
195 fabstoec 1.30 // -----------------------------------------------------------------------------------
196     // Do all the scaling ....
197     if (fDoMCErrScaling && !fIsData) {
198     if (ph->SCluster()->AbsEta()<1.5) PhotonTools::ScalePhotonError(ph,fMCErrScaleEB);
199     else PhotonTools::ScalePhotonError(ph,fMCErrScaleEE);
200     }
201    
202 fabstoec 1.32 if (fDoShowerShapeScaling && !fIsData) {
203     PhotonTools::ScalePhotonShowerShapes(ph,fSSType);
204 fabstoec 1.30 }
205    
206 fabstoec 1.32 // fab: replaced by shower-shape scaling above...
207     // if (fDoMCR9Scaling && !fIsData) {
208     // if (ph->SCluster()->AbsEta()<1.5) PhotonTools::ScalePhotonR9(ph,fMCR9ScaleEB);
209     // else PhotonTools::ScalePhotonR9(ph,fMCR9ScaleEE);
210     // }
211    
212     // if (fDoMCSigIEtaIEtaScaling && !fIsData) {
213     // if (ph->SCluster()->AbsEta()<1.5) ph->SetCoviEtaiEta(0.87*ph->CoviEtaiEta() + 0.0011);
214     // else ph->SetCoviEtaiEta(0.99*ph->CoviEtaiEta());
215     // }
216    
217     // if (fDoMCWidthScaling && !fIsData) {
218     // ph->SetEtaWidth(0.99*ph->EtaWidth());
219     // ph->SetPhiWidth(0.99*ph->PhiWidth());
220     // }
221 fabstoec 1.33
222 fabstoec 1.32 PhotonTools::eScaleCats escalecat = PhotonTools::EScaleCat(ph);
223    
224     // now we dicide if we either scale (Data) or Smear (MC) the Photons
225     if (fIsData) {
226     if (fDoDataEneCorr) {
227     // starting with scale = 1.
228     double scaleFac = 1.;
229     // checking the run Rangees ...
230     Int_t runRange = FindRunRangeIdx(runNumber);
231     if(runRange > -1) {
232     scaleFac *= GetDataEnCorr(runRange, escalecat);
233     }
234     PhotonTools::ScalePhoton(ph, scaleFac);
235     }
236 fabstoec 1.30 }
237 fabstoec 1.32
238     if (fDoMCSmear) {
239     double width = GetMCSmearFac(escalecat);
240     if (!fIsData) {
241     // get the seed to do deterministic smearing...
242     UInt_t seedBase = (UInt_t) evtNum + (UInt_t) _runNum + (UInt_t) _lumiSec;
243     UInt_t seed = seedBase + (UInt_t) ph->E() +
244     (UInt_t) (TMath::Abs(10.*ph->SCluster()->Eta()));
245     // get the smearing for MC photons..
246     PhotonTools::SmearPhoton(ph, fRng, width, seed);
247     }
248     PhotonTools::SmearPhotonError(ph, width);
249 fabstoec 1.30 }
250 fabstoec 1.33
251     // ---------------------------------------------------------------------
252     // check if we use the Vgamma2011 Selection. If yes, bypass all the below...
253     if( fPhIdType == kVgamma2011Selection ) {
254     if( PhotonTools::PassVgamma2011Selection(ph, _tRho) )
255     GoodPhotons->AddOwned(ph);
256     continue; // go to next Photons
257     }
258 fabstoec 1.30
259 fabstoec 1.22 // ---------------------------------------------------------------------
260     // check if we use the CiC Selection. If yes, bypass all the below...
261     if(fPhIdType == kBaseLineCiC) {
262     if( PhotonTools::PassCiCSelection(ph, fPV->At(0), fTracks, fElectrons, fPV, _tRho, fPhotonPtMin, fApplyElectronVeto) )
263 fabstoec 1.30 GoodPhotons->AddOwned(ph);
264 fabstoec 1.22 continue; // go to next Photons
265     }
266 bendavid 1.31
267     if(fPhIdType == kBaseLineCiCPF) {
268     if( PhotonTools::PassSinglePhotonPreselPFISO(ph,fElectrons,fConversions,bsp,fTracks,fPV->At(0),rho2012,fPFCands,fApplyElectronVeto,fInvertElectronVeto) && PhotonTools::PassCiCPFIsoSelection(ph, fPV->At(0), fPFCands, fPV, rho2012, fPhotonPtMin) )
269     GoodPhotons->AddOwned(ph);
270     continue; // go to next Photons
271     }
272 fabstoec 1.22 // ---------------------------------------------------------------------
273    
274 bendavid 1.27 //loose photon preselection for subsequent mva
275     if(fPhIdType == kMITPhSelection ) {
276 fabstoec 1.30 if( ph->Pt()>fPhotonPtMin && PhotonTools::PassSinglePhotonPresel(ph,fElectrons,fConversions,bsp,fTracks,fPV->At(0),_tRho,fApplyElectronVeto,fInvertElectronVeto) ) {
277     GoodPhotons->AddOwned(ph);
278 bendavid 1.27 }
279     continue;
280     }
281    
282 bendavid 1.31 //loose photon preselection for subsequent mva
283     if(fPhIdType == kMITPFPhSelection ) {
284     if( ph->Pt()>fPhotonPtMin && PhotonTools::PassSinglePhotonPreselPFISO(ph,fElectrons,fConversions,bsp,fTracks,fPV->At(0),rho2012,fPFCands,fApplyElectronVeto,fInvertElectronVeto) ) {
285     GoodPhotons->AddOwned(ph);
286     }
287     continue;
288     }
289    
290 fabstoec 1.26 // add MingMings MVA ID on single Photon level
291     if(fPhIdType == kMITMVAId ) {
292 bendavid 1.28 if( ph->Pt()>fPhotonPtMin && PhotonTools::PassSinglePhotonPresel(ph,fElectrons,fConversions,bsp,fTracks,fPV->At(0),_tRho,fApplyElectronVeto) && fTool.PassMVASelection(ph, fPV->At(0) ,fTracks, fPV, _tRho ,fbdtCutBarrel,fbdtCutEndcap, fElectrons, fApplyElectronVeto) ) {
293 fabstoec 1.30 GoodPhotons->AddOwned(ph);
294 fabstoec 1.26 }
295     continue;
296     } // go to next Photon
297    
298 sixie 1.1 if (ph->Pt() <= fPhotonPtMin)
299 fabstoec 1.22 continue; // add good electron
300 sixie 1.13
301 bendavid 1.21 Bool_t isbarrel = ph->SCluster()->AbsEta()<1.5;
302 sixie 1.1
303 sixie 1.13 Bool_t passSpikeRemovalFilter = kTRUE;
304 fabstoec 1.32
305 sixie 1.15 if (ph->SCluster() && ph->SCluster()->Seed()) {
306     if(ph->SCluster()->Seed()->Energy() > 5.0 &&
307     ph->SCluster()->Seed()->EMax() / ph->SCluster()->Seed()->E3x3() > 0.95
308 fabstoec 1.32 ) {
309 sixie 1.15 passSpikeRemovalFilter = kFALSE;
310     }
311 sixie 1.13 }
312 fabstoec 1.32
313 sixie 1.13 // For Now Only use the EMax/E3x3 prescription.
314     //if(ph->SCluster()->Seed()->Energy() > 5.0 &&
315     // (1 - (ph->SCluster()->Seed()->E1x3() + ph->SCluster()->Seed()->E3x1() - 2*ph->SCluster()->Seed()->EMax())) > 0.95
316     // ) {
317     // passSpikeRemovalFilter = kFALSE;
318     //}
319 fabstoec 1.32
320 sixie 1.13 if (fApplySpikeRemoval && !passSpikeRemovalFilter) continue;
321    
322 ceballos 1.2 if (ph->HadOverEm() >= fHadOverEmMax)
323     continue;
324 ceballos 1.14
325 ceballos 1.2 if (fApplyPixelSeed == kTRUE &&
326     ph->HasPixelSeed() == kTRUE)
327     continue;
328 ceballos 1.14
329 bendavid 1.19 if (fApplyElectronVeto && !PhotonTools::PassElectronVeto(ph,fElectrons) ) continue;
330    
331     if (fApplyElectronVetoConvRecovery && !PhotonTools::PassElectronVetoConvRecovery(ph,fElectrons,fConversions,bsp) ) continue;
332    
333     if (fApplyConversionId && !PhotonTools::PassConversionId(ph,PhotonTools::MatchedConversion(ph,fConversions,bsp))) continue;
334    
335     if (fApplyTriggerMatching && !PhotonTools::PassTriggerMatching(ph,trigObjs)) continue;
336    
337 sixie 1.1 Bool_t idcut = kFALSE;
338     switch (fPhIdType) {
339     case kTight:
340     idcut = ph->IsTightPhoton();
341     break;
342     case kLoose:
343     idcut = ph->IsLoosePhoton();
344     break;
345     case kLooseEM:
346     idcut = ph->IsLooseEM();
347     break;
348     case kCustomId:
349 ceballos 1.5 idcut = kTRUE;
350 sixie 1.1 default:
351     break;
352     }
353    
354     if (!idcut)
355     continue;
356    
357     Bool_t isocut = kFALSE;
358     switch (fPhIsoType) {
359     case kNoIso:
360     isocut = kTRUE;
361     break;
362 ceballos 1.2 case kCombinedIso:
363 bendavid 1.12 {
364     Double_t totalIso = ph->HollowConeTrkIsoDr04()+
365     ph->EcalRecHitIsoDr04() +
366     ph->HcalTowerSumEtDr04();
367     if (totalIso/ph->Pt() < 0.25)
368     isocut = kTRUE;
369     }
370 ceballos 1.2 break;
371 sixie 1.1 case kCustomIso:
372 bendavid 1.16 {
373     if ( ph->HollowConeTrkIsoDr04() < (1.5 + 0.001*ph->Pt()) && ph->EcalRecHitIsoDr04()<(2.0+0.006*ph->Pt()) && ph->HcalTowerSumEtDr04()<(2.0+0.0025*ph->Pt()) )
374     isocut = kTRUE;
375     }
376 fabstoec 1.17 break;
377    
378     case kMITPUCorrected:
379     {
380     // compute the PU corrections only if Rho is available
381 fabstoec 1.32 // ... otherwise (_tRho = 0.0) it's the std isolation
382 fabstoec 1.17 isocut = kTRUE;
383 fabstoec 1.20 Double_t fEffAreaEcal = fEffAreaEcalEB;
384     Double_t fEffAreaHcal = fEffAreaHcalEB;
385     Double_t fEffAreaTrack = fEffAreaTrackEB;
386    
387 bendavid 1.21 if( !isbarrel ) {
388 fabstoec 1.20 fEffAreaEcal = fEffAreaEcalEE;
389     fEffAreaHcal = fEffAreaHcalEE;
390     fEffAreaTrack = fEffAreaTrackEE;
391     }
392 fabstoec 1.26
393 fabstoec 1.17 Double_t EcalCorrISO = ph->EcalRecHitIsoDr04();
394     if(_tRho > -0.5 ) EcalCorrISO -= _tRho * fEffAreaEcal;
395     if ( EcalCorrISO > (2.0+0.006*ph->Pt()) ) isocut = kFALSE;
396 fabstoec 1.26 if ( isocut || true ) {
397 fabstoec 1.17 Double_t HcalCorrISO = ph->HcalTowerSumEtDr04();
398     if(_tRho > -0.5 ) HcalCorrISO -= _tRho * fEffAreaHcal;
399     if ( HcalCorrISO > (2.0+0.0025*ph->Pt()) ) isocut = kFALSE;
400     }
401 fabstoec 1.26 if ( isocut || true ) {
402 fabstoec 1.17 Double_t TrackCorrISO = IsolationTools::TrackIsolationNoPV(ph, bsp, 0.4, 0.04, 0.0, 0.015, 0.1, TrackQuality::highPurity, fTracks);
403     if(_tRho > -0.5 )
404     TrackCorrISO -= _tRho * fEffAreaTrack;
405     if ( TrackCorrISO > (1.5 + 0.001*ph->Pt()) ) isocut = kFALSE;
406     }
407     break;
408     }
409     default:
410     break;
411 sixie 1.1 }
412 fabstoec 1.17
413 sixie 1.1 if (!isocut)
414     continue;
415 fabstoec 1.17
416 bendavid 1.16 if ( fApplyR9Min && ph->R9() <= fPhotonR9Min)
417 ceballos 1.5 continue;
418    
419 bendavid 1.21 if ((isbarrel && ph->CoviEtaiEta() >= fEtaWidthEB) ||
420     (!isbarrel && ph->CoviEtaiEta() >= fEtaWidthEE))
421 ceballos 1.10 continue;
422    
423 ceballos 1.11 if (ph->AbsEta() >= fAbsEtaMax)
424     continue;
425 bendavid 1.25
426 sixie 1.1 // add good electron
427 fabstoec 1.30 GoodPhotons->AddOwned(ph);
428 sixie 1.1 }
429    
430 loizides 1.4 // sort according to pt
431     GoodPhotons->Sort();
432    
433 sixie 1.1 // add to event for other modules to use
434     AddObjThisEvt(GoodPhotons);
435 bendavid 1.24
436 bendavid 1.25 return;
437 bendavid 1.24
438 sixie 1.1 }
439    
440     //--------------------------------------------------------------------------------------------------
441     void PhotonIDMod::SlaveBegin()
442     {
443     // Run startup code on the computer (slave) doing the actual analysis. Here,
444 loizides 1.3 // we just request the photon collection branch.
445 sixie 1.1
446 fabstoec 1.30 ReqEventObject(fPhotonBranchName, fPhotons, fPhotonsFromBranch);
447 fabstoec 1.22 ReqEventObject(fTrackBranchName, fTracks, kTRUE);
448     ReqEventObject(fBeamspotBranchName, fBeamspots, kTRUE);
449 bendavid 1.19 ReqEventObject(fConversionName, fConversions, kTRUE);
450 fabstoec 1.22 ReqEventObject(fElectronName, fElectrons, kTRUE);
451 bendavid 1.25 ReqEventObject(fGoodElectronName, fGoodElectrons, fGoodElectronsFromBranch);
452 bendavid 1.24 ReqEventObject(fPVName, fPV, fPVFromBranch);
453     ReqEventObject(fPileUpDenName, fPileUpDen, kTRUE);
454 bendavid 1.31 ReqEventObject(fPFCandsName, fPFCands, kTRUE);
455 fabstoec 1.30
456 bendavid 1.24 if (!fIsData) {
457     ReqBranch(fPileUpName, fPileUp);
458     ReqBranch(fMCParticleName, fMCParticles);
459     }
460    
461 sixie 1.1 if (fPhotonIDType.CompareTo("Tight") == 0)
462     fPhIdType = kTight;
463     else if (fPhotonIDType.CompareTo("Loose") == 0)
464     fPhIdType = kLoose;
465     else if (fPhotonIDType.CompareTo("LooseEM") == 0)
466     fPhIdType = kLooseEM;
467 fabstoec 1.22 else if (fPhotonIDType.CompareTo("Custom") == 0)
468 sixie 1.1 fPhIdType = kCustomId;
469 fabstoec 1.22 else if (fPhotonIDType.CompareTo("BaseLineCiC") == 0) {
470     fPhIdType = kBaseLineCiC;
471     fPhotonIsoType = "NoIso";
472 fabstoec 1.26 }
473 bendavid 1.31 else if (fPhotonIDType.CompareTo("BaseLineCiCPF") == 0) {
474     fPhIdType = kBaseLineCiCPF;
475     fPhotonIsoType = "NoIso";
476     }
477 fabstoec 1.26 else if (fPhotonIDType.CompareTo("MITMVAId") == 0) {
478     fPhIdType = kMITMVAId;
479     fPhotonIsoType = "NoIso";
480     fTool.InitializeMVA(fVariableType,fEndcapWeights,fBarrelWeights);
481 bendavid 1.27 }
482     else if (fPhotonIDType.CompareTo("MITSelection") == 0) {
483     fPhIdType = kMITPhSelection;
484     fPhotonIsoType = "NoIso";
485     }
486 bendavid 1.31 else if (fPhotonIDType.CompareTo("MITPFSelection") == 0) {
487     fPhIdType = kMITPFPhSelection;
488     fPhotonIsoType = "NoIso";
489     }
490 fabstoec 1.33 else if (fPhotonIDType.CompareTo("Vgamma2011Selection") == 0) {
491     fPhIdType = kVgamma2011Selection;
492     fPhotonIsoType = "NoIso";
493     }
494 bendavid 1.27 else {
495 sixie 1.1 SendError(kAbortAnalysis, "SlaveBegin",
496 ceballos 1.2 "The specified photon identification %s is not defined.",
497 sixie 1.1 fPhotonIDType.Data());
498     return;
499     }
500    
501     if (fPhotonIsoType.CompareTo("NoIso") == 0 )
502     fPhIsoType = kNoIso;
503 ceballos 1.2 else if (fPhotonIsoType.CompareTo("CombinedIso") == 0 )
504     fPhIsoType = kCombinedIso;
505 fabstoec 1.17 else if (fPhotonIsoType.CompareTo("Custom") == 0 )
506 sixie 1.1 fPhIsoType = kCustomIso;
507 fabstoec 1.17 else if (fPhotonIsoType.CompareTo("MITPUCorrected") == 0 )
508     fPhIsoType = kMITPUCorrected;
509     else {
510 sixie 1.1 SendError(kAbortAnalysis, "SlaveBegin",
511 ceballos 1.2 "The specified photon isolation %s is not defined.",
512 sixie 1.1 fPhotonIsoType.Data());
513     return;
514     }
515 bendavid 1.25
516 fabstoec 1.32 if (fShowerShapeType.CompareTo("None") == 0)
517     fSSType = PhotonTools::kNoShowerShapeScaling;
518     else if (fShowerShapeType.CompareTo("2011ShowerShape") == 0)
519     fSSType = PhotonTools::k2011ShowerShape;
520     else if (fShowerShapeType.CompareTo("2012ShowerShape") == 0)
521     fSSType = PhotonTools::k2012ShowerShape;
522     else {
523     std::cerr<<"shower shape scale "<<fShowerShapeType<<" not implemented."<<std::endl;
524     return;
525     }
526 bendavid 1.24
527 sixie 1.1 }
528 fabstoec 1.32
529    
530     //---------------------------------------------------------------------------------------------------
531     Int_t PhotonIDMod::FindRunRangeIdx(UInt_t run)
532     {
533     // this routine looks for the idx of the run-range
534     Int_t runRange=-1;
535     for (UInt_t iRun = 0; iRun<fRunStart.size(); ++iRun) {
536     if (run >= fRunStart[iRun] && run <= fRunEnd[iRun]) {
537     runRange = (Int_t) iRun;
538     return runRange;
539     }
540     }
541     return runRange;
542     }
543    
544     //---------------------------------------------------------------------------------------------------
545     Double_t PhotonIDMod::GetDataEnCorr(Int_t runRange, PhotonTools::eScaleCats cat)
546     {
547     switch (cat) {
548     case PhotonTools::kEBhighEtaGold:
549     return fDataEnCorr_EBhighEta_hR9[runRange];
550     case PhotonTools::kEBhighEtaBad:
551     return fDataEnCorr_EBhighEta_lR9[runRange];
552     case PhotonTools::kEBlowEtaGoldCenter:
553     return fDataEnCorr_EBlowEta_hR9central[runRange];
554     case PhotonTools::kEBlowEtaGoldGap:
555     return fDataEnCorr_EBlowEta_hR9gap[runRange];
556     case PhotonTools::kEBlowEtaBad:
557     return fDataEnCorr_EBlowEta_lR9[runRange];
558     case PhotonTools::kEEhighEtaGold:
559     return fDataEnCorr_EEhighEta_hR9[runRange];
560     case PhotonTools::kEEhighEtaBad:
561     return fDataEnCorr_EEhighEta_lR9[runRange];
562     case PhotonTools::kEElowEtaGold:
563     return fDataEnCorr_EElowEta_hR9[runRange];
564     case PhotonTools::kEElowEtaBad:
565     return fDataEnCorr_EElowEta_lR9[runRange];
566     default:
567     return 1.;
568     }
569     }
570    
571     //---------------------------------------------------------------------------------------------------
572     Double_t PhotonIDMod::GetMCSmearFac(PhotonTools::eScaleCats cat)
573     {
574     switch (cat) {
575     case PhotonTools::kEBhighEtaGold:
576     return fMCSmear_EBhighEta_hR9;
577     case PhotonTools::kEBhighEtaBad:
578     return fMCSmear_EBhighEta_lR9;
579     case PhotonTools::kEBlowEtaGoldCenter:
580     return fMCSmear_EBlowEta_hR9central;
581     case PhotonTools::kEBlowEtaGoldGap:
582     return fMCSmear_EBlowEta_hR9gap;
583     case PhotonTools::kEBlowEtaBad:
584     return fMCSmear_EBlowEta_lR9;
585     case PhotonTools::kEEhighEtaGold:
586     return fMCSmear_EEhighEta_hR9;
587     case PhotonTools::kEEhighEtaBad:
588     return fMCSmear_EEhighEta_lR9;
589     case PhotonTools::kEElowEtaGold:
590     return fMCSmear_EElowEta_hR9;
591     case PhotonTools::kEElowEtaBad:
592     return fMCSmear_EElowEta_lR9;
593     default:
594     return 1.;
595     }
596     }