ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/PhotonTreeWriter.cc
Revision: 1.42
Committed: Sat Feb 9 15:14:15 2013 UTC (12 years, 3 months ago) by mingyang
Content type: text/plain
Branch: MAIN
Changes since 1.41: +58 -53 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 bendavid 1.1 #include "MitPhysics/Mods/interface/PhotonTreeWriter.h"
2     #include "MitAna/DataTree/interface/PhotonCol.h"
3     #include "MitAna/DataTree/interface/PFCandidateCol.h"
4     #include "MitAna/DataTree/interface/StableData.h"
5     #include "MitAna/DataTree/interface/StableParticle.h"
6 bendavid 1.2 #include "MitAna/DataTree/interface/PFMet.h"
7 bendavid 1.1 #include "MitPhysics/Init/interface/ModNames.h"
8     #include "MitPhysics/Utils/interface/IsolationTools.h"
9     #include "MitPhysics/Utils/interface/PhotonTools.h"
10     #include "MitPhysics/Utils/interface/VertexTools.h"
11 fabstoec 1.16 #include "MitPhysics/Utils/interface/PFMetCorrectionTools.h"
12     #include "MitAna/DataTree/interface/PFJetCol.h"
13     #include "MitAna/DataTree/interface/GenJetCol.h"
14 bendavid 1.1 #include "TDataMember.h"
15 bendavid 1.20 #include "TFile.h"
16 bendavid 1.1 #include <TNtuple.h>
17     #include <TRandom3.h>
18     #include <TSystem.h>
19    
20     using namespace mithep;
21    
22     ClassImp(mithep::PhotonTreeWriter)
23 mingyang 1.26 templateClassImp(mithep::PhotonTreeWriterPhoton)//ming: what's this?
24 bendavid 1.1 ClassImp(mithep::PhotonTreeWriterDiphotonEvent)
25    
26     //--------------------------------------------------------------------------------------------------
27     PhotonTreeWriter::PhotonTreeWriter(const char *name, const char *title) :
28     // Base Module...
29 paus 1.12 BaseMod (name,title),
30 bendavid 1.1 // define all the Branches to load
31 paus 1.12 fPhotonBranchName (Names::gkPhotonBrn),
32 bendavid 1.20 fPFPhotonName ("PFPhotons"),
33 paus 1.12 fElectronName (Names::gkElectronBrn),
34     fGoodElectronName (Names::gkElectronBrn),
35     fConversionName (Names::gkMvfConversionBrn),
36 fabstoec 1.36 fPFConversionName ("PFPhotonConversions"),
37 paus 1.12 fTrackBranchName (Names::gkTrackBrn),
38     fPileUpDenName (Names::gkPileupEnergyDensityBrn),
39     fPVName (Names::gkPVBeamSpotBrn),
40     fBeamspotName (Names::gkBeamSpotBrn),
41     fPFCandName (Names::gkPFCandidatesBrn),
42 fabstoec 1.28 fPFNoPileUpName ("PFNoPileUp"),
43     fPFPileUpName ("PFPileUp"),
44 paus 1.12 fMCParticleName (Names::gkMCPartBrn),
45 bendavid 1.32 fMCEventInfoName (Names::gkMCEvtInfoBrn),
46 paus 1.12 fPileUpName (Names::gkPileupInfoBrn),
47     fSuperClusterName ("PFSuperClusters"),
48     fPFMetName ("PFMet"),
49     fPFJetName (Names::gkPFJetBrn),
50 fabstoec 1.19 funcorrPFJetName ("AKt5PFJets"),
51 fabstoec 1.17 fGenJetName ("AKT5GenJets"),
52 fabstoec 1.13 fLeptonTagElectronsName ("HggLeptonTagElectrons"),
53     fLeptonTagMuonsName ("HggLeptonTagMuons"),
54    
55 paus 1.12 fIsData (false),
56     fPhotonsFromBranch (kTRUE),
57     fPVFromBranch (kTRUE),
58     fGoodElectronsFromBranch(kTRUE),
59     fPFJetsFromBranch (kTRUE),
60 bendavid 1.1 // ----------------------------------------
61 fabstoec 1.36 // flag for synchronization, adds vertex variables
62     // should be on for synching trees
63 fabstoec 1.37 fDoSynching (kFALSE),
64 fabstoec 1.36
65     // ----------------------------------------
66 bendavid 1.1 // collections....
67 paus 1.12 fPhotons (0),
68 bendavid 1.20 fPFPhotons (0),
69 paus 1.12 fElectrons (0),
70     fConversions (0),
71 fabstoec 1.36 fPFConversions (0),
72 paus 1.12 fTracks (0),
73     fPileUpDen (0),
74     fPV (0),
75     fBeamspot (0),
76     fPFCands (0),
77     fMCParticles (0),
78 bendavid 1.32 fMCEventInfo (0),
79 paus 1.12 fPileUp (0),
80     fSuperClusters (0),
81     fPFJets (0),
82 fabstoec 1.16 fGenJets (0),
83     funcorrPFJets (0),
84 fabstoec 1.13
85     fLeptonTagElectrons (0),
86     fLeptonTagMuons (0),
87 fabstoec 1.28 fPFNoPileUpCands (0),
88     fPFPileUpCands (0),
89 fabstoec 1.13
90 paus 1.12 fLoopOnGoodElectrons (kFALSE),
91     fApplyElectronVeto (kTRUE),
92     fWriteDiphotonTree (kTRUE),
93     fWriteSingleTree (kTRUE),
94 bendavid 1.20 fEnablePFPhotons (kTRUE),
95 paus 1.12 fExcludeSinglePrompt (kFALSE),
96     fExcludeDoublePrompt (kFALSE),
97     fEnableJets (kFALSE),
98 bendavid 1.22 fApplyJetId (kFALSE),
99 fabstoec 1.13 fApplyLeptonTag (kFALSE),
100 mingyang 1.31 fApplyVBFTag (kFALSE),
101 fabstoec 1.15 fApplyBTag (kFALSE),
102 fabstoec 1.17 fApplyPFMetCorrections (kFALSE),
103 bendavid 1.20 fFillClusterArrays (kFALSE),
104 bendavid 1.22 fFillVertexTree (kFALSE),
105 fabstoec 1.28 fDo2012LepTag (kFALSE),
106 paus 1.12 fPhFixDataFile (gSystem->Getenv("CMSSW_BASE") +
107     TString("/src/MitPhysics/data/PhotonFixSTART42V13.dat")),
108 bendavid 1.30 fBeamspotWidth (5.8),
109 fabstoec 1.36
110     fElectronIDMVA(0),
111     fElectronMVAWeights_Subdet0Pt10To20(""),
112     fElectronMVAWeights_Subdet1Pt10To20(""),
113     fElectronMVAWeights_Subdet2Pt10To20(""),
114     fElectronMVAWeights_Subdet0Pt20ToInf(""),
115     fElectronMVAWeights_Subdet1Pt20ToInf(""),
116     fElectronMVAWeights_Subdet2Pt20ToInf(""),
117     fTheRhoType(RhoUtilities::DEFAULT),
118    
119 paus 1.12 fTupleName ("hPhotonTree")
120 bendavid 1.1 {
121 paus 1.12 // Constructor
122 bendavid 1.1 }
123    
124 paus 1.12 PhotonTreeWriter::~PhotonTreeWriter()
125     {
126     // Destructor
127 bendavid 1.1 }
128    
129     //--------------------------------------------------------------------------------------------------
130     void PhotonTreeWriter::Process()
131     {
132 mingyang 1.40
133     //if(GetEventHeader()->EvtNum()==9008 || GetEventHeader()->EvtNum()==9008 || GetEventHeader()->EvtNum()==9010){
134     // printf("check photontreewriter 0\n");
135     // }
136 bendavid 1.1 // ------------------------------------------------------------
137     // Process entries of the tree.
138     LoadEventObject(fPhotonBranchName, fPhotons);
139 paus 1.12 LoadEventObject(fGoodElectronName, fGoodElectrons);
140 fabstoec 1.13
141     // lepton tag collections
142     if( fApplyLeptonTag ) {
143     LoadEventObject(fLeptonTagElectronsName, fLeptonTagElectrons);
144     LoadEventObject(fLeptonTagMuonsName, fLeptonTagMuons);
145     }
146    
147 bendavid 1.2 const BaseCollection *egcol = 0;
148 paus 1.12 if (fLoopOnGoodElectrons)
149 bendavid 1.2 egcol = fGoodElectrons;
150 paus 1.12 else
151 bendavid 1.2 egcol = fPhotons;
152 paus 1.12 if (egcol->GetEntries()<1)
153     return;
154 bendavid 1.20
155     if (fEnablePFPhotons) LoadEventObject(fPFPhotonName, fPFPhotons);
156 bendavid 1.1 LoadEventObject(fElectronName, fElectrons);
157     LoadEventObject(fConversionName, fConversions);
158 fabstoec 1.36 if ( fDoSynching ) LoadEventObject(fPFConversionName, fPFConversions);
159 bendavid 1.1 LoadEventObject(fTrackBranchName, fTracks);
160     LoadEventObject(fPileUpDenName, fPileUpDen);
161     LoadEventObject(fPVName, fPV);
162     LoadEventObject(fBeamspotName, fBeamspot);
163     LoadEventObject(fPFCandName, fPFCands);
164 bendavid 1.2 LoadEventObject(fSuperClusterName, fSuperClusters);
165 paus 1.12 LoadEventObject(fPFMetName, fPFMet);
166 bendavid 1.30 // LoadEventObject(fPFNoPileUpName, fPFNoPileUpCands);
167     // LoadEventObject(fPFPileUpName, fPFPileUpCands);
168 fabstoec 1.28
169 fabstoec 1.16 if (fEnableJets){
170 paus 1.12 LoadEventObject(fPFJetName, fPFJets);
171 fabstoec 1.19 //LoadEventObject(funcorrPFJetName, funcorrPFJets);
172 fabstoec 1.16 LoadBranch(funcorrPFJetName);
173 fabstoec 1.19 // if(!fIsData) LoadEventObject(fGenJetName, fGenJets);
174 fabstoec 1.16 }
175 fabstoec 1.28
176 bendavid 1.1 // ------------------------------------------------------------
177     // load event based information
178 paus 1.12 Int_t _numPU = -1.; // some sensible default values....
179 bendavid 1.1 Int_t _numPUminus = -1.; // some sensible default values....
180 paus 1.12 Int_t _numPUplus = -1.; // some sensible default values....
181 bendavid 1.1
182 paus 1.12 Float_t rho = -99.;
183 bendavid 1.1 if( fPileUpDen->GetEntries() > 0 )
184 paus 1.12 rho = (Double_t) fPileUpDen->At(0)->RhoRandomLowEta();
185 bendavid 1.1
186 mingyang 1.26 const BaseVertex *bsp = dynamic_cast<const BaseVertex*>(fBeamspot->At(0));//ming:what's this?
187 bendavid 1.20
188 bendavid 1.1 if( !fIsData ) {
189     LoadBranch(fMCParticleName);
190 bendavid 1.32 LoadBranch(fMCEventInfoName);
191 bendavid 1.1 LoadBranch(fPileUpName);
192 fabstoec 1.19 if (fEnableJets) LoadEventObject(fGenJetName, fGenJets);
193     } else fGenJets = NULL;
194 bendavid 1.1
195     if( !fIsData ) {
196     for (UInt_t i=0; i<fPileUp->GetEntries(); ++i) {
197     const PileupInfo *puinfo = fPileUp->At(i);
198     if (puinfo->GetBunchCrossing()==0) _numPU = puinfo->GetPU_NumInteractions();
199     else if (puinfo->GetBunchCrossing() == -1) _numPUminus = puinfo->GetPU_NumInteractions();
200     else if (puinfo->GetBunchCrossing() == 1) _numPUplus = puinfo->GetPU_NumInteractions();
201     }
202     }
203    
204     // in case of a MC event, try to find Higgs and Higgs decay Z poisition
205 paus 1.12 Float_t _pth = -100.;
206     Float_t _decayZ = -100.;
207 bendavid 1.1 Float_t _genmass = -100.;
208 paus 1.12 if (!fIsData)
209     FindHiggsPtAndZ(_pth, _decayZ, _genmass);
210 bendavid 1.1
211 bendavid 1.30
212     fDiphotonEvent->genz = -999.;
213     if (!fIsData) {
214     fDiphotonEvent->genz = fMCParticles->At(0)->DecayVertex().Z();
215     }
216 bendavid 1.32
217     fDiphotonEvent->mcprocid = -999;
218     if (!fIsData) {
219     fDiphotonEvent->mcprocid = fMCEventInfo->ProcessId();
220     }
221 fabstoec 1.19
222 mtouch 1.25 Double_t _evt = GetEventHeader()->EvtNum();
223 fabstoec 1.28
224 fabstoec 1.19 Double_t _spfMet = fPFMet->At(0)->SumEt();
225 mtouch 1.25
226 fabstoec 1.13 fDiphotonEvent->leptonTag = -1; // disabled
227    
228 fabstoec 1.36 // ====================================================
229     // Vtx synching stuff...
230     fDiphotonEvent->vtxInd1 = -1;
231     fDiphotonEvent->vtxInd2 = -1;
232     fDiphotonEvent->vtxInd3 = -1;
233    
234     fDiphotonEvent->vtxBestPtbal = -1.;
235     fDiphotonEvent->vtxBestPtasym = -1.;
236     fDiphotonEvent->vtxBestSumpt2 = -1.;
237     fDiphotonEvent->vtxBestP2Conv = -1.;
238    
239     fDiphotonEvent->vtxMva1 = -1.;
240     fDiphotonEvent->vtxMva2 = -1.;
241     fDiphotonEvent->vtxMva3 = -1.;
242    
243     fDiphotonEvent->vtxNleg1 = -1;
244     fDiphotonEvent->vtxNleg2 = -1;
245     fDiphotonEvent->vtxNconv = -1;
246     // ====================================================
247    
248    
249 bendavid 1.20 fDiphotonEvent->rho = fPileUpDen->At(0)->RhoKt6PFJets();
250     fDiphotonEvent->rho25 = fPileUpDen->At(0)->RhoRandomLowEta();
251     fDiphotonEvent->rhoold = fPileUpDen->At(0)->Rho();
252 bendavid 1.1 fDiphotonEvent->genHiggspt = _pth;
253     fDiphotonEvent->genHiggsZ = _decayZ;
254     fDiphotonEvent->genmass = _genmass;
255     fDiphotonEvent->gencostheta = -99.;
256     fDiphotonEvent->nVtx = fPV->GetEntries();
257 bendavid 1.2 fDiphotonEvent->bsX = fBeamspot->At(0)->X();
258     fDiphotonEvent->bsY = fBeamspot->At(0)->Y();
259     fDiphotonEvent->bsZ = fBeamspot->At(0)->Z();
260 bendavid 1.7 fDiphotonEvent->bsSigmaZ = fBeamspot->At(0)->SigmaZ();
261 bendavid 1.2 fDiphotonEvent->vtxX = (fDiphotonEvent->nVtx>0) ? fPV->At(0)->X() : -99.;
262     fDiphotonEvent->vtxY = (fDiphotonEvent->nVtx>0) ? fPV->At(0)->Y() : -99.;
263 bendavid 1.1 fDiphotonEvent->vtxZ = (fDiphotonEvent->nVtx>0) ? fPV->At(0)->Z() : -99.;
264     fDiphotonEvent->numPU = _numPU;
265     fDiphotonEvent->numPUminus = _numPUminus;
266     fDiphotonEvent->numPUplus = _numPUplus;
267     fDiphotonEvent->mass = -99.;
268     fDiphotonEvent->ptgg = -99.;
269     fDiphotonEvent->costheta = -99.;
270 bendavid 1.2 fDiphotonEvent->mt = -99.;
271     fDiphotonEvent->cosphimet = -99.;
272     fDiphotonEvent->mtele = -99.;
273     fDiphotonEvent->cosphimetele = -99.;
274 bendavid 1.1 fDiphotonEvent->evt = GetEventHeader()->EvtNum();
275     fDiphotonEvent->run = GetEventHeader()->RunNum();
276     fDiphotonEvent->lumi = GetEventHeader()->LumiSec();
277     fDiphotonEvent->evtcat = -99;
278 bendavid 1.2 fDiphotonEvent->nobj = fPhotons->GetEntries();
279     fDiphotonEvent->pfmet = fPFMet->At(0)->Pt();
280     fDiphotonEvent->pfmetphi = fPFMet->At(0)->Phi();
281     fDiphotonEvent->pfmetx = fPFMet->At(0)->Px();
282     fDiphotonEvent->pfmety = fPFMet->At(0)->Py();
283 fabstoec 1.19 fDiphotonEvent->spfMet = _spfMet;
284 bendavid 1.1 fDiphotonEvent->masscor = -99.;
285     fDiphotonEvent->masscorerr = -99.;
286 bendavid 1.2 fDiphotonEvent->masscorele = -99.;
287     fDiphotonEvent->masscoreleerr = -99.;
288     fDiphotonEvent->ismc = GetEventHeader()->IsMC();
289    
290 bendavid 1.5 //jets
291     const Jet *jet1 = 0;
292     const Jet *jet2 = 0;
293     const Jet *jetcentral = 0;
294    
295 mingyang 1.38 fDiphotonEvent->jetleadNoIDpt = -99.;
296     fDiphotonEvent->jetleadNoIDeta = -99.;
297     fDiphotonEvent->jetleadNoIDphi = -99.;
298     fDiphotonEvent->jetleadNoIDmass = -99.;
299 bendavid 1.5 fDiphotonEvent->jet1pt = -99.;
300     fDiphotonEvent->jet1eta = -99.;
301     fDiphotonEvent->jet1phi = -99.;
302     fDiphotonEvent->jet1mass = -99.;
303     fDiphotonEvent->jet2pt = -99.;
304     fDiphotonEvent->jet2eta = -99.;
305     fDiphotonEvent->jet2phi = -99.;
306     fDiphotonEvent->jet2mass = -99.;
307     fDiphotonEvent->jetcentralpt = -99.;
308     fDiphotonEvent->jetcentraleta = -99.;
309     fDiphotonEvent->jetcentralphi = -99.;
310     fDiphotonEvent->jetcentralmass = -99.;
311     fDiphotonEvent->dijetpt = -99.;
312     fDiphotonEvent->dijeteta = -99.;
313     fDiphotonEvent->dijetphi = -99.;
314     fDiphotonEvent->dijetmass = -99.;
315     fDiphotonEvent->jetetaplus = -99.;
316     fDiphotonEvent->jetetaminus = -99.;
317     fDiphotonEvent->zeppenfeld = -99.;
318     fDiphotonEvent->dphidijetgg = -99.;
319    
320 fabstoec 1.19 //uncorrected jets
321     // const Jet *uncorrjet1 = 0;
322     // const Jet *uncorrjet2 = 0;
323     // const Jet *uncorrjetcentral = 0;
324    
325     // fDiphotonEvent->uncorrjet1pt = -99.;
326     // fDiphotonEvent->uncorrjet1eta = -99.;
327     // fDiphotonEvent->uncorrjet1phi = -99.;
328     // fDiphotonEvent->uncorrjet1mass = -99.;
329     // fDiphotonEvent->uncorrjet2pt = -99.;
330     // fDiphotonEvent->uncorrjet2eta = -99.;
331     // fDiphotonEvent->uncorrjet2phi = -99.;
332     // fDiphotonEvent->uncorrjet2mass = -99.;
333     // fDiphotonEvent->uncorrjetcentralpt = -99.;
334     // fDiphotonEvent->uncorrjetcentraleta = -99.;
335     // fDiphotonEvent->uncorrjetcentralphi = -99.;
336     // fDiphotonEvent->uncorrjetcentralmass = -99.;
337     // fDiphotonEvent->diuncorrjetpt = -99.;
338     // fDiphotonEvent->diuncorrjeteta = -99.;
339     // fDiphotonEvent->diuncorrjetphi = -99.;
340     // fDiphotonEvent->diuncorrjetmass = -99.;
341    
342    
343    
344 bendavid 1.1 Int_t nhitsbeforevtxmax = 1;
345 paus 1.12 if (!fApplyElectronVeto)
346     nhitsbeforevtxmax = 999;
347 bendavid 1.1
348 bendavid 1.2 if (egcol->GetEntries()>=2) {
349     const Particle *p1 = 0;
350     const Particle *p2 = 0;
351     const Photon *phHard = 0;
352     const Photon *phSoft = 0;
353     const Electron *ele1 = 0;
354     const Electron *ele2 = 0;
355     const SuperCluster *sc1 = 0;
356     const SuperCluster *sc2 = 0;
357    
358     if (fLoopOnGoodElectrons) {
359     ele1 = fGoodElectrons->At(0);
360     ele2 = fGoodElectrons->At(1);
361     p1 = ele1;
362     p2 = ele2;
363     sc1 = ele1->SCluster();
364     sc2 = ele2->SCluster();
365     phHard = PhotonTools::MatchedPhoton(ele1,fPhotons);
366     phSoft = PhotonTools::MatchedPhoton(ele2,fPhotons);
367     }
368     else {
369     phHard = fPhotons->At(0);
370     phSoft = fPhotons->At(1);
371     p1 = phHard;
372     p2 = phSoft;
373     sc1 = phHard->SCluster();
374     sc2 = phSoft->SCluster();
375     ele1 = PhotonTools::MatchedElectron(phHard,fGoodElectrons);
376     ele2 = PhotonTools::MatchedElectron(phSoft,fGoodElectrons);
377 bendavid 1.1 }
378    
379 paus 1.12 const DecayParticle *conv1 = PhotonTools::MatchedConversion(sc1,fConversions,bsp,
380     nhitsbeforevtxmax);
381     const DecayParticle *conv2 = PhotonTools::MatchedConversion(sc2,fConversions,bsp,
382     nhitsbeforevtxmax);
383 bendavid 1.2
384 bendavid 1.20 const SuperCluster *pfsc1 = PhotonTools::MatchedPFSC(sc1,fPFPhotons, fElectrons);
385     const SuperCluster *pfsc2 = PhotonTools::MatchedPFSC(sc2,fPFPhotons, fElectrons);
386 bendavid 1.1
387     const MCParticle *phgen1 = 0;
388     const MCParticle *phgen2 = 0;
389 paus 1.12 if (!fIsData) {
390 bendavid 1.6 phgen1 = PhotonTools::MatchMC(p1,fMCParticles,!fApplyElectronVeto);
391     phgen2 = PhotonTools::MatchMC(p2,fMCParticles,!fApplyElectronVeto);
392 bendavid 1.2 }
393    
394 paus 1.12 if (fExcludeSinglePrompt && (phgen1 || phgen2))
395     return;
396     if (fExcludeDoublePrompt && (phgen1 && phgen2))
397     return;
398 bendavid 1.2
399     if (!fLoopOnGoodElectrons && phHard->HasPV()) {
400     fDiphotonEvent->vtxX = phHard->PV()->X();
401     fDiphotonEvent->vtxY = phHard->PV()->Y();
402     fDiphotonEvent->vtxZ = phHard->PV()->Z();
403 bendavid 1.4 fDiphotonEvent->vtxprob = phHard->VtxProb();
404 bendavid 1.2 }
405    
406 fabstoec 1.15 // fill Btag information... set to true if One jet fullfills
407 fabstoec 1.19 fDiphotonEvent -> btagJet1 = -1.;
408     fDiphotonEvent -> btagJet1Pt = -99.;
409     fDiphotonEvent -> btagJet1Eta = -99.;
410    
411     fDiphotonEvent -> btagJet2 = -1.;
412     fDiphotonEvent -> btagJet2Pt = -99.;
413     fDiphotonEvent -> btagJet2Eta = -99.;
414 fabstoec 1.18
415 fabstoec 1.15 if( fApplyBTag && fEnableJets ) {
416     float highTag = 0.;
417     float highJetPt = 0.;
418     float highJetEta = 0.;
419 fabstoec 1.19
420     float trailTag = 0.;
421 fabstoec 1.18 float trailJetPt = 0.;
422     float trailJetEta = 0.;
423 fabstoec 1.19
424 fabstoec 1.15 for (UInt_t ijet=0; ijet<fPFJets->GetEntries();++ijet) {
425     const Jet *jet = fPFJets->At(ijet);
426 fabstoec 1.24 if ( jet->Pt() < 20. || jet->AbsEta() > 2.4 ) continue;
427 fabstoec 1.15 if ( jet->CombinedSecondaryVertexBJetTagsDisc() > highTag ) {
428 fabstoec 1.19
429 fabstoec 1.24 trailTag = highTag;
430     trailJetPt = highJetPt;
431 fabstoec 1.18 trailJetEta = highJetEta;
432 fabstoec 1.19
433 fabstoec 1.15 highTag = jet->CombinedSecondaryVertexBJetTagsDisc();
434     highJetPt = jet->Pt();
435     highJetEta = jet->Eta();
436 fabstoec 1.19
437 fabstoec 1.18 } else if ( jet->CombinedSecondaryVertexBJetTagsDisc() > trailTag ) {
438 fabstoec 1.19
439 fabstoec 1.18 trailTag = jet->CombinedSecondaryVertexBJetTagsDisc();
440     trailJetPt = jet->Pt();
441     trailJetEta = jet->Eta();
442 fabstoec 1.15 }
443     }
444 fabstoec 1.18 fDiphotonEvent -> btagJet1 = highTag;
445     fDiphotonEvent -> btagJet1Pt = highJetPt;
446 fabstoec 1.19 fDiphotonEvent -> btagJet1Eta = highJetEta;
447    
448 fabstoec 1.24 fDiphotonEvent -> btagJet2 = trailTag;
449     fDiphotonEvent -> btagJet2Pt = trailJetPt;
450     fDiphotonEvent -> btagJet2Eta = trailJetEta;
451 fabstoec 1.19
452 fabstoec 1.15 }
453    
454 bendavid 1.5 //fill jet variables
455 bendavid 1.22 const Vertex *selvtx = fPV->At(0);
456     if (!fLoopOnGoodElectrons && phHard->HasPV()) selvtx = phHard->PV();
457 bendavid 1.5 if (fEnableJets) {
458     for (UInt_t ijet=0; ijet<fPFJets->GetEntries();++ijet) {
459     const Jet *jet = fPFJets->At(ijet);
460 bendavid 1.8 if (jet->AbsEta()<4.7 && MathUtils::DeltaR(jet,p1)>0.5 && MathUtils::DeltaR(jet,p2)>0.5) {
461 bendavid 1.22 const PFJet *pfjet = dynamic_cast<const PFJet*>(jet);
462     if (!pfjet) continue;
463     if (fApplyJetId && !fJetId.passCut(pfjet,selvtx,fPV)) continue;
464 bendavid 1.5 if (!jet1) jet1 = jet;
465     else if (!jet2) jet2 = jet;
466     else if (!jetcentral && 0) jetcentral = jet;
467     }
468     if (jet1&&jet2&&jetcentral) break;
469 mtouch 1.25 }
470 bendavid 1.5 }
471    
472 mingyang 1.38 for(UInt_t ijet=0; ijet<fPFJets->GetEntries();++ijet){
473     const Jet *jet = fPFJets->At(ijet);
474     if (MathUtils::DeltaR(jet,p1)>0.5 && MathUtils::DeltaR(jet,p2)>0.5) {
475     fDiphotonEvent->jetleadNoIDpt = jet->Pt();
476     fDiphotonEvent->jetleadNoIDeta = jet->Eta();
477     fDiphotonEvent->jetleadNoIDphi = jet->Phi();
478     fDiphotonEvent->jetleadNoIDmass = jet->Mass();
479     break;
480     }
481     }
482    
483 bendavid 1.5 if (jet1) {
484     fDiphotonEvent->jet1pt = jet1->Pt();
485     fDiphotonEvent->jet1eta = jet1->Eta();
486     fDiphotonEvent->jet1phi = jet1->Phi();
487     fDiphotonEvent->jet1mass = jet1->Mass();
488     }
489    
490     if (jet2) {
491     fDiphotonEvent->jet2pt = jet2->Pt();
492     fDiphotonEvent->jet2eta = jet2->Eta();
493     fDiphotonEvent->jet2phi = jet2->Phi();
494     fDiphotonEvent->jet2mass = jet2->Mass();
495     }
496    
497     if (jetcentral) {
498     fDiphotonEvent->jetcentralpt = jetcentral->Pt();
499     fDiphotonEvent->jetcentraleta = jetcentral->Eta();
500     fDiphotonEvent->jetcentralphi = jetcentral->Phi();
501     fDiphotonEvent->jetcentralmass = jetcentral->Mass();
502     }
503    
504     if (jet1&&jet2){
505     FourVectorM momjj = (jet1->Mom() + jet2->Mom());
506    
507     fDiphotonEvent->dijetpt = momjj.Pt();
508     fDiphotonEvent->dijeteta = momjj.Eta();
509     fDiphotonEvent->dijetphi = momjj.Phi();
510     fDiphotonEvent->dijetmass = momjj.M();
511    
512     if (jet1->Eta()>jet2->Eta()) {
513     fDiphotonEvent->jetetaplus = jet1->Eta();
514     fDiphotonEvent->jetetaminus = jet2->Eta();
515     }
516     else {
517     fDiphotonEvent->jetetaplus = jet2->Eta();
518     fDiphotonEvent->jetetaminus = jet1->Eta();
519     }
520     }
521    
522 fabstoec 1.16 //added gen. info of whether a lep. or nutrino is from W or Z --Heng 02/14/2012 12:30 EST
523     Double_t _fromZ = -99;
524     Double_t _fromW = -99;
525     Float_t _zpt = -99;
526     Float_t _zEta = -99;
527     Float_t _allZpt = -99;
528     Float_t _allZEta = -99;
529    
530     if( !fIsData ){
531    
532     // loop over all GEN particles and look for nutrinos whoes mother is Z
533     for(UInt_t j=0; j<fMCParticles->GetEntries(); ++j) {
534     const MCParticle* p = fMCParticles->At(j);
535     if( p->AbsPdgId()==23 ||p->AbsPdgId()==32 || p->AbsPdgId()==33 ) {
536     _allZpt=p->Pt();
537     _allZEta=p->Eta();
538     if (p->HasDaughter(12,kFALSE) || p->HasDaughter(14,kFALSE) || p->HasDaughter(16,kFALSE) ||p->HasDaughter(18,kFALSE) ) {
539     _fromZ=1;
540     _zpt=p->Pt();
541     _zEta=p->Eta();
542     }
543     }
544     else _fromW=1;
545     }
546     }
547 mtouch 1.25
548 fabstoec 1.16 fDiphotonEvent->fromZ = _fromZ;
549     fDiphotonEvent->fromW = _fromW;
550     fDiphotonEvent->zpt = _zpt;
551     fDiphotonEvent->zEta = _zEta;
552     fDiphotonEvent->allZpt = _allZpt;
553     fDiphotonEvent->allZEta = _allZEta;
554    
555     Double_t _dphiMetgg = -99;
556     Double_t _cosdphiMetgg = -99;
557     Double_t _dphiPhPh = -99;
558 mtouch 1.25
559 bendavid 1.4 Double_t _mass = -99.;
560     Double_t _masserr = -99.;
561     Double_t _masserrsmeared = -99.;
562     Double_t _masserrwrongvtx = -99.;
563     Double_t _masserrsmearedwrongvtx = -99.;
564     Double_t _ptgg = -99.;
565 bendavid 1.5 Double_t _etagg = -99.;
566     Double_t _phigg = -99.;
567 bendavid 1.4 Double_t _costheta = -99.;
568 bendavid 1.2 PhotonTools::DiphotonR9EtaPtCats _evtcat = PhotonTools::kOctCat0;
569 fabstoec 1.36
570     const Vertex* realVtx = NULL;
571    
572 bendavid 1.2 if (phHard && phSoft) {
573 fabstoec 1.16 _dphiMetgg = MathUtils::DeltaPhi((phHard->Mom()+phSoft->Mom()).Phi(),fPFMet->At(0)->Phi());
574     _cosdphiMetgg = TMath::Cos(_dphiMetgg);
575     _dphiPhPh = MathUtils::DeltaPhi((phHard->Mom()).Phi(),(phSoft->Mom()).Phi());
576 bendavid 1.2 _mass = (phHard->Mom()+phSoft->Mom()).M();
577     _masserr = 0.5*_mass*TMath::Sqrt(phHard->EnergyErr()*phHard->EnergyErr()/phHard->E()/phHard->E() + phSoft->EnergyErr()*phSoft->EnergyErr()/phSoft->E()/phSoft->E());
578     _masserrsmeared = 0.5*_mass*TMath::Sqrt(phHard->EnergyErrSmeared()*phHard->EnergyErrSmeared()/phHard->E()/phHard->E() + phSoft->EnergyErrSmeared()*phSoft->EnergyErrSmeared()/phSoft->E()/phSoft->E());
579     _ptgg = (phHard->Mom()+phSoft->Mom()).Pt();
580 bendavid 1.5 _etagg = (phHard->Mom()+phSoft->Mom()).Eta();
581     _phigg = (phHard->Mom()+phSoft->Mom()).Phi();
582 bendavid 1.2 _costheta = ThreeVector(phHard->Mom()).Unit().Dot(ThreeVector(phSoft->Mom()).Unit());
583     _evtcat = PhotonTools::DiphotonR9EtaPtCat(phHard,phSoft);
584 bendavid 1.4
585 bendavid 1.30 const Double_t dz = sqrt(2.0)*fBeamspotWidth;
586 paus 1.12 Double_t deltamvtx = _mass*VertexTools::DeltaMassVtx(phHard->CaloPos().X(),
587     phHard->CaloPos().Y(),
588     phHard->CaloPos().Z(),
589     phSoft->CaloPos().X(),
590     phSoft->CaloPos().Y(),
591     phSoft->CaloPos().Z(),
592     fDiphotonEvent->vtxX,
593     fDiphotonEvent->vtxY,
594     fDiphotonEvent->vtxZ,
595     dz);
596 bendavid 1.5 fDiphotonEvent->deltamvtx = deltamvtx;
597 fabstoec 1.36
598 paus 1.12 _masserrwrongvtx = TMath::Sqrt(_masserr*_masserr + deltamvtx*deltamvtx);
599 bendavid 1.4 _masserrsmearedwrongvtx = TMath::Sqrt(_masserrsmeared*_masserrsmeared + deltamvtx*deltamvtx);
600 fabstoec 1.36
601    
602    
603     // =================================================================================
604     // this is for synching the Vtx stuff
605     if ( fDoSynching ) {
606     //fill conversion collection for vertex selection, adding single leg conversions if needed
607     //note that momentum of single leg conversions needs to be recomputed from the track
608     //as it is not filled properly
609     DecayParticleOArr vtxconversions;
610     if ( true ) {
611     vtxconversions.SetOwner(kTRUE);
612     for (UInt_t iconv=0; iconv<fConversions->GetEntries(); ++iconv) {
613     DecayParticle *conv = new DecayParticle(*fConversions->At(iconv));
614     vtxconversions.AddOwned(conv);
615     }
616    
617     for (UInt_t iconv=0; iconv<fPFConversions->GetEntries(); ++iconv) {
618     const DecayParticle *c = fPFConversions->At(iconv);
619     if (c->NDaughters()!=1) continue;
620    
621     DecayParticle *conv = new DecayParticle(*c);
622     const Track *trk = static_cast<const StableParticle*>(conv->Daughter(0))->Trk();
623     conv->SetMom(trk->Px(), trk->Py(), trk->Pz(), trk->P());
624     vtxconversions.AddOwned(conv);
625     }
626     }
627     else {
628     for (UInt_t iconv=0; iconv<fConversions->GetEntries(); ++iconv) {
629     const DecayParticle *c = fConversions->At(iconv);
630     vtxconversions.Add(c);
631     }
632     }
633    
634    
635     const BaseVertex *bsp = dynamic_cast<const BaseVertex*>(fBeamspot->At(0));
636     double tmpVtxProb = 0.;
637    
638     std::vector<int> debugInds; // this hold the Vtx indices for the first three guys
639     std::vector<double> debugVals; // this holds hte mva input/output for the best ranked
640     std::vector<int> debugConv; // this holds number of legs for frist and second photon (0 if no conversion) and total number of conversions
641    
642    
643     realVtx = fVtxTools.findVtxBasicRanking(phHard, phSoft, bsp, fPV,
644     &vtxconversions,kTRUE,tmpVtxProb,
645     &debugInds, &debugVals, &debugConv
646     );
647    
648     fDiphotonEvent->vtxInd1 = debugInds[0];
649     fDiphotonEvent->vtxInd2 = debugInds[1];
650     fDiphotonEvent->vtxInd3 = debugInds[2];
651    
652     fDiphotonEvent->vtxConv1Z = debugVals[0];
653     fDiphotonEvent->vtxConv1DZ = debugVals[1];
654     fDiphotonEvent->vtxConv1Prob = debugVals[2];
655    
656     fDiphotonEvent->vtxConv2Z = debugVals[3];
657     fDiphotonEvent->vtxConv2DZ = debugVals[4];
658     fDiphotonEvent->vtxConv2Prob = debugVals[5];
659    
660    
661     fDiphotonEvent->vtxBestPtbal = debugVals[6];
662     fDiphotonEvent->vtxBestPtasym = debugVals[7];
663     fDiphotonEvent->vtxBestSumpt2 = debugVals[8];
664     fDiphotonEvent->vtxBestP2Conv = debugVals[9];
665    
666     fDiphotonEvent->vtxMva1Z = debugVals[10];
667     fDiphotonEvent->vtxMva2Z = debugVals[11];
668     fDiphotonEvent->vtxMva3Z = debugVals[12];
669    
670     fDiphotonEvent->vtxMva1 = debugVals[13];
671     fDiphotonEvent->vtxMva2 = debugVals[14];
672     fDiphotonEvent->vtxMva3 = debugVals[15];
673    
674     fDiphotonEvent->vtxNleg1 = debugConv[0];
675     fDiphotonEvent->vtxNleg2 = debugConv[1];
676     fDiphotonEvent->vtxConvIdx1 = debugConv[2];
677     fDiphotonEvent->vtxConvIdx2 = debugConv[3];
678    
679     fDiphotonEvent->vtxNconv = debugConv[4];
680    
681     if( false ) {
682     printf("---------------------------------------------------------------------\n");
683     printf("FINAL\nvtx %i: ptbal = %5f, ptasym = %5f, logsumpt2 = %5f, limpulltoconv = %5f, nconv = %i, mva = %5f\n",fDiphotonEvent->vtxInd1,fDiphotonEvent->vtxBestPtbal,fDiphotonEvent->vtxBestPtasym,fDiphotonEvent->vtxBestSumpt2,fDiphotonEvent->vtxBestP2Conv,fDiphotonEvent->vtxNconv,fDiphotonEvent->vtxMva1);
684     printf("---------------------------------------------------------------------\n");
685     }
686     }
687    
688    
689     // end of Vtx synching stuff ...
690     // =================================================================================
691 mingyang 1.42
692    
693    
694 bendavid 1.5 if (jet1 && jet2) {
695     fDiphotonEvent->zeppenfeld = TMath::Abs(_etagg - 0.5*(jet1->Eta()+jet2->Eta()));
696     fDiphotonEvent->dphidijetgg = MathUtils::DeltaPhi( (jet1->Mom()+jet2->Mom()).Phi(), _phigg );
697     }
698 bendavid 1.4
699 bendavid 1.20 PFJetOArr pfjets;
700     for (UInt_t ijet=0; ijet<fPFJets->GetEntries(); ++ijet) {
701     const PFJet *pfjet = dynamic_cast<const PFJet*>(fPFJets->At(ijet));
702     if (pfjet && MathUtils::DeltaR(*pfjet,*phHard)>0.3 && MathUtils::DeltaR(*pfjet,*phSoft)>0.3) pfjets.Add(pfjet);
703     }
704    
705     PFCandidateOArr pfcands;
706     for (UInt_t icand=0; icand<fPFCands->GetEntries(); ++icand) {
707     const PFCandidate *pfcand = fPFCands->At(icand);
708     if (MathUtils::DeltaR(*pfcand,*phHard)>0.1 && MathUtils::DeltaR(*pfcand,*phSoft)>0.1) pfcands.Add(pfcand);
709     }
710    
711     const Vertex *firstvtx = fPV->At(0);
712     const Vertex *selvtx = fPV->At(0);
713    
714     if (!fLoopOnGoodElectrons && phHard->HasPV()) {
715     selvtx = phHard->PV();
716     }
717 fabstoec 1.36
718 bendavid 1.21 if (0) //disable for now for performance reasons
719 fabstoec 1.36 {
720     Met mmet = fMVAMet.GetMet( false,
721     0.,0.,0.,
722     0.,0.,0.,
723     fPFMet->At(0),
724     &pfcands,selvtx,fPV, fPileUpDen->At(0)->Rho(),
725     &pfjets,
726     int(fPV->GetEntries()),
727     kFALSE);
728 mingyang 1.42
729 fabstoec 1.36 TMatrixD *metcov = fMVAMet.GetMetCovariance();
730    
731     ThreeVector fullmet(mmet.Px() - phHard->Px() - phSoft->Px(),
732     mmet.Py() - phHard->Py() - phSoft->Py(),
733     0.);
734    
735     ROOT::Math::SMatrix<double,2,2,ROOT::Math::MatRepSym<double,2> > mcov;
736     mcov(0,0) = (*metcov)(0,0);
737     mcov(0,1) = (*metcov)(0,1);
738     mcov(1,0) = (*metcov)(1,0);
739     mcov(1,1) = (*metcov)(1,1);
740     ROOT::Math::SVector<double,2> vmet;
741     vmet(0) = fullmet.X();
742     vmet(1) = fullmet.Y();
743     mcov.Invert();
744     Double_t metsig = sqrt(ROOT::Math::Similarity(mcov,vmet));
745 mingyang 1.42
746 fabstoec 1.36 fDiphotonEvent->mvametsel = fullmet.Rho();
747     fDiphotonEvent->mvametselphi = fullmet.Phi();
748     fDiphotonEvent->mvametselx = fullmet.X();
749     fDiphotonEvent->mvametsely = fullmet.Y();
750     fDiphotonEvent->mvametselsig = metsig;
751     }
752 bendavid 1.20
753 bendavid 1.21 if (0) //disable for now for performance reasons
754 fabstoec 1.36 {
755     Met mmet = fMVAMet.GetMet( false,
756     0.,0.,0.,
757     0.,0.,0.,
758     fPFMet->At(0),
759     &pfcands,firstvtx,fPV, fPileUpDen->At(0)->Rho(),
760     &pfjets,
761     int(fPV->GetEntries()),
762     kFALSE);
763    
764     TMatrixD *metcov = fMVAMet.GetMetCovariance();
765    
766     ThreeVector fullmet(mmet.Px() - phHard->Px() - phSoft->Px(),
767     mmet.Py() - phHard->Py() - phSoft->Py(),
768     0.);
769    
770     ROOT::Math::SMatrix<double,2,2,ROOT::Math::MatRepSym<double,2> > mcov;
771     mcov(0,0) = (*metcov)(0,0);
772     mcov(0,1) = (*metcov)(0,1);
773     mcov(1,0) = (*metcov)(1,0);
774     mcov(1,1) = (*metcov)(1,1);
775     ROOT::Math::SVector<double,2> vmet;
776     vmet(0) = fullmet.X();
777     vmet(1) = fullmet.Y();
778     mcov.Invert();
779     Double_t metsig = sqrt(ROOT::Math::Similarity(mcov,vmet));
780    
781     fDiphotonEvent->mvametfirst = fullmet.Rho();
782     fDiphotonEvent->mvametfirstphi = fullmet.Phi();
783     fDiphotonEvent->mvametfirstx = fullmet.X();
784     fDiphotonEvent->mvametfirsty = fullmet.Y();
785     fDiphotonEvent->mvametfirstsig = metsig;
786     }
787 bendavid 1.20
788 bendavid 1.2 }
789 fabstoec 1.36
790 mingyang 1.42
791 fabstoec 1.19 fDiphotonEvent->corrpfmet = -99.;
792     fDiphotonEvent->corrpfmetphi = -99.;
793     fDiphotonEvent->corrpfmetx = -99.;
794     fDiphotonEvent->corrpfmety = -99.;
795 mingyang 1.42
796 fabstoec 1.19 Met *corrMet =NULL;
797 bendavid 1.2
798 fabstoec 1.19 if (fApplyPFMetCorrections){
799 mingyang 1.42 corrMet = new Met(fPFMet->At(0)->Px(),fPFMet->At(0)->Py());
800    
801     if (!fIsData){
802     PFMetCorrectionTools::correctMet(corrMet,phHard,phSoft,1,0,funcorrPFJets,fGenJets,fPFJets,_evt);
803     PFMetCorrectionTools::shiftMet(corrMet,fIsData,_spfMet);
804     }
805     else {
806     PFMetCorrectionTools::shiftMet(corrMet,fIsData,_spfMet);
807     PFMetCorrectionTools::correctMet(corrMet,phHard,phSoft,0,1,funcorrPFJets,fGenJets,fPFJets,_evt);
808     }
809    
810     fDiphotonEvent->corrpfmet = corrMet->Pt();
811     fDiphotonEvent->corrpfmetphi = corrMet->Phi();
812     fDiphotonEvent->corrpfmetx = corrMet->Px();
813     fDiphotonEvent->corrpfmety = corrMet->Py();
814    
815     delete corrMet;
816     }
817    
818 fabstoec 1.17
819 bendavid 1.2 Float_t _massele = -99.;
820     Float_t _ptee = -99.;
821     Float_t _costhetaele = -99.;
822     if (ele1 && ele2) {
823     _massele = (ele1->Mom()+ele2->Mom()).M();
824     _ptee = (ele1->Mom()+ele2->Mom()).Pt();
825     _costhetaele = ThreeVector(ele1->Mom()).Unit().Dot(ThreeVector(ele2->Mom()).Unit());
826 bendavid 1.1 }
827    
828     Float_t _gencostheta = -99.;
829     if (phgen1 && phgen2) {
830     _gencostheta = ThreeVector(phgen1->Mom()).Unit().Dot(ThreeVector(phgen2->Mom()).Unit());
831     }
832 mingyang 1.42
833 bendavid 1.1 fDiphotonEvent->gencostheta = _gencostheta;
834 fabstoec 1.16 fDiphotonEvent->dphiMetgg = _dphiMetgg;
835     fDiphotonEvent->cosdphiMetgg = _cosdphiMetgg;
836     fDiphotonEvent->dphiPhPh = _dphiPhPh;
837 bendavid 1.1 fDiphotonEvent->mass = _mass;
838 bendavid 1.2 fDiphotonEvent->masserr = _masserr;
839     fDiphotonEvent->masserrsmeared = _masserrsmeared;
840 bendavid 1.4 fDiphotonEvent->masserrwrongvtx = _masserrwrongvtx;
841     fDiphotonEvent->masserrsmearedwrongvtx = _masserrsmearedwrongvtx;
842 bendavid 1.1 fDiphotonEvent->ptgg = _ptgg;
843 bendavid 1.5 fDiphotonEvent->etagg = _etagg;
844     fDiphotonEvent->phigg = _phigg;
845 bendavid 1.2 fDiphotonEvent->costheta = _costheta;;
846     fDiphotonEvent->massele = _massele;
847     fDiphotonEvent->ptee = _ptee;
848     fDiphotonEvent->costhetaele = _costhetaele;
849     fDiphotonEvent->evtcat = _evtcat;
850 mingyang 1.42
851 fabstoec 1.36 fDiphotonEvent->photons[0].SetVars(phHard,conv1,ele1,pfsc1,phgen1,fPhfixph,fPhfixele,fTracks,fPV,fPFCands,rho,fFillClusterArrays,fElectrons,fConversions,bsp,fApplyElectronVeto,realVtx);
852     fDiphotonEvent->photons[1].SetVars(phSoft,conv2,ele2,pfsc2,phgen2,fPhfixph,fPhfixele,fTracks,fPV,fPFCands,rho,fFillClusterArrays,fElectrons,fConversions,bsp,fApplyElectronVeto,realVtx);
853 bendavid 1.1
854     Float_t ph1ecor = fDiphotonEvent->photons[0].Ecor();
855     Float_t ph1ecorerr = fDiphotonEvent->photons[0].Ecorerr();
856     Float_t ph2ecor = fDiphotonEvent->photons[1].Ecor();
857     Float_t ph2ecorerr = fDiphotonEvent->photons[1].Ecorerr();
858 mingyang 1.42
859 bendavid 1.2 Float_t ph1ecorele = fDiphotonEvent->photons[0].Ecorele();
860     Float_t ph1ecoreleerr = fDiphotonEvent->photons[0].Ecoreleerr();
861     Float_t ph2ecorele = fDiphotonEvent->photons[1].Ecorele();
862     Float_t ph2ecoreleerr = fDiphotonEvent->photons[1].Ecoreleerr();
863 mingyang 1.42
864 paus 1.12 fDiphotonEvent->masscor = TMath::Sqrt(2.0*ph1ecor*ph2ecor*(1.0-fDiphotonEvent->costheta));
865     fDiphotonEvent->masscorerr = 0.5*fDiphotonEvent->masscor*
866     TMath::Sqrt(ph1ecorerr*ph1ecorerr/ph1ecor/ph1ecor + ph2ecorerr*ph2ecorerr/ph2ecor/ph2ecor);
867    
868     fDiphotonEvent->masscorele = TMath::Sqrt(2.0*ph1ecorele*ph2ecorele*
869     (1.0-fDiphotonEvent->costheta));
870     fDiphotonEvent->masscoreleerr = 0.5*fDiphotonEvent->masscorele*
871     TMath::Sqrt(ph1ecoreleerr*ph1ecoreleerr/ph1ecorele/ph1ecorele +
872     ph2ecoreleerr*ph2ecoreleerr/ph2ecorele/ph2ecorele);
873 bendavid 1.2
874 paus 1.12 //printf("r9 = %5f, photon sigieie = %5f, seed sigieie = %5f\n",phHard->R9(),
875     // phHard->CoviEtaiEta(),sqrt(phHard->SCluster()->Seed()->CoviEtaiEta()));
876 fabstoec 1.36
877 fabstoec 1.14 // MuonStuff
878     fDiphotonEvent-> muonPt = -99.;
879     fDiphotonEvent-> muonEta = -99.;
880     fDiphotonEvent-> muDR1 = -99.;
881     fDiphotonEvent-> muDR2 = -99.;
882     fDiphotonEvent-> muIso1 = -99.;
883     fDiphotonEvent-> muIso2 = -99.;
884     fDiphotonEvent-> muIso3 = -99.;
885     fDiphotonEvent-> muIso4 = -99.;
886     fDiphotonEvent-> muD0 = -99.;
887     fDiphotonEvent-> muDZ = -99.;
888     fDiphotonEvent-> muChi2 = -99.;
889     fDiphotonEvent-> muNhits = -99;
890     fDiphotonEvent-> muNpixhits = -99;
891     fDiphotonEvent-> muNegs = -99;
892     fDiphotonEvent-> muNMatch = -99;
893 mingyang 1.42
894 fabstoec 1.14 // Electron Stuff
895     fDiphotonEvent-> elePt = -99.;
896     fDiphotonEvent-> eleEta = -99.;
897     fDiphotonEvent-> eleSCEta = -99.;
898     fDiphotonEvent-> eleIso1 = -99.;
899     fDiphotonEvent-> eleIso2 = -99.;
900     fDiphotonEvent-> eleIso3 = -99.;
901     fDiphotonEvent-> eleIso4 = -99.;
902     fDiphotonEvent-> eleDist = -99.;
903     fDiphotonEvent-> eleDcot = -99.;
904     fDiphotonEvent-> eleCoviee = -99.;
905     fDiphotonEvent-> eleDphiin = -99.;
906     fDiphotonEvent-> eleDetain = -99.;
907     fDiphotonEvent-> eleDR1 = -99.;
908     fDiphotonEvent-> eleDR2 = -99.;
909     fDiphotonEvent-> eleMass1 = -99.;
910     fDiphotonEvent-> eleMass2 = -99.;
911     fDiphotonEvent-> eleNinnerHits = -99;
912 mingyang 1.31
913 fabstoec 1.36 fDiphotonEvent-> eleIdMva = -99.;
914 mingyang 1.42
915 fabstoec 1.13 if( fApplyLeptonTag ) {
916 mingyang 1.42
917 fabstoec 1.13 // perform lepton tagging
918     // the diphoton event record will have one more entry; i.e. leptonTag
919     // leptonTag = -1 -> lepton-taggng was swicthed off
920     // = 0 -> event tagged as 'non-lepton-event'
921     // = +1 -> event tagged as muon-event
922     // = +2 -> event tagged as electron-event
923     fDiphotonEvent->leptonTag = 0;
924 mingyang 1.39 Int_t closestVtx = 0;
925 fabstoec 1.13 if ( fLeptonTagMuons->GetEntries() > 0 ) {
926 fabstoec 1.28 // need to have dR > 1 for with respect to both photons ***changed to 0.7 for 2012
927 mingyang 1.31 if( (MathUtils::DeltaR(fLeptonTagMuons->At(0),phHard) >= 1.0) &&
928     (MathUtils::DeltaR(fLeptonTagMuons->At(0),phSoft) >= 1.0) &&
929 mingyang 1.35 ((phHard->Pt()/(phHard->Mom() + phSoft->Mom()).M())>(45./120.)) &&
930     ((phSoft->Pt()/(phHard->Mom() + phSoft->Mom()).M())>(30./120.)) ){
931 mingyang 1.31
932 mingyang 1.40 fDiphotonEvent->leptonTag = 2;
933 mingyang 1.42
934 mingyang 1.31 fDiphotonEvent-> muonPt = fLeptonTagMuons->At(0)->Pt();
935     fDiphotonEvent-> muonEta = fLeptonTagMuons->At(0)->Eta();
936     fDiphotonEvent-> muDR1 = MathUtils::DeltaR(fLeptonTagMuons->At(0),phHard);
937     fDiphotonEvent-> muDR2 = MathUtils::DeltaR(fLeptonTagMuons->At(0),phSoft);
938 mingyang 1.42
939 mingyang 1.31 fDiphotonEvent-> muIso1 = (fLeptonTagMuons->At(0)->IsoR03SumPt() + fLeptonTagMuons->At(0)->IsoR03EmEt() + fLeptonTagMuons->At(0)->IsoR03HadEt() - fPileUpDen->At(0)->RhoRandomLowEta() * TMath::Pi() * 0.3 * 0.3)/ fLeptonTagMuons->At(0)->Pt();
940     fDiphotonEvent-> muIso2 = (fLeptonTagMuons->At(0)->IsoR03SumPt() + fLeptonTagMuons->At(0)->IsoR03EmEt() + fLeptonTagMuons->At(0)->IsoR03HadEt() - fPileUpDen->At(0)->RhoRandom() * TMath::Pi() * 0.3 * 0.3)/ fLeptonTagMuons->At(0)->Pt();
941     fDiphotonEvent-> muIso3 = (fLeptonTagMuons->At(0)->IsoR03SumPt() + fLeptonTagMuons->At(0)->IsoR03EmEt() + fLeptonTagMuons->At(0)->IsoR03HadEt() - fPileUpDen->At(0)->RhoLowEta() * TMath::Pi() * 0.3 * 0.3)/ fLeptonTagMuons->At(0)->Pt();
942     fDiphotonEvent-> muIso4 = (fLeptonTagMuons->At(0)->IsoR03SumPt() + fLeptonTagMuons->At(0)->IsoR03EmEt() + fLeptonTagMuons->At(0)->IsoR03HadEt() - fPileUpDen->At(0)->Rho() * TMath::Pi() * 0.3 * 0.3)/ fLeptonTagMuons->At(0)->Pt();
943     fDiphotonEvent-> muD0 = TMath::Abs(fLeptonTagMuons->At(0)->BestTrk()->D0Corrected(*fPV->At(0)));
944     fDiphotonEvent-> muDZ = TMath::Abs(fLeptonTagMuons->At(0)->BestTrk()->DzCorrected(*fPV->At(0)));
945     fDiphotonEvent-> muChi2 = fLeptonTagMuons->At(0)->GlobalTrk()->Chi2()/fLeptonTagMuons->At(0)->GlobalTrk()->Ndof();
946 mingyang 1.42
947 mingyang 1.31 fDiphotonEvent-> muNhits = fLeptonTagMuons->At(0)->BestTrk()->NHits();
948     fDiphotonEvent-> muNpixhits = fLeptonTagMuons->At(0)->BestTrk()->NPixelHits();
949     fDiphotonEvent-> muNegs = fLeptonTagMuons->At(0)->NSegments();
950     fDiphotonEvent-> muNMatch = fLeptonTagMuons->At(0)->NMatches();
951 fabstoec 1.13 }
952     }
953 mingyang 1.41 if ( fDiphotonEvent->leptonTag < 1 && fLeptonTagElectrons->GetEntries() > 0 ) {
954 mingyang 1.31 if( (MathUtils::DeltaR(fLeptonTagElectrons->At(0),phHard) >= 1) &&
955     (MathUtils::DeltaR(fLeptonTagElectrons->At(0),phSoft) >= 1) &&
956     (PhotonTools::ElectronVetoCiC(phHard,fLeptonTagElectrons) >= 1) &&
957     (PhotonTools::ElectronVetoCiC(phSoft,fLeptonTagElectrons) >= 1) &&
958     (TMath::Abs( (phHard->Mom()+fLeptonTagElectrons->At(0)->Mom()).M()-91.19 ) >= 10) &&
959     (TMath::Abs( (phSoft->Mom()+fLeptonTagElectrons->At(0)->Mom()).M()-91.19 ) >= 10) &&
960 mingyang 1.35 ((phHard->Pt()/(phHard->Mom() + phSoft->Mom()).M())>(45./120.)) &&
961 mingyang 1.41 ((phSoft->Pt()/(phHard->Mom() + phSoft->Mom()).M())>(30./120.))){
962    
963 mingyang 1.42 /*int ph1passeveto=1;
964     int ph2passeveto=1;
965    
966     for(UInt_t k=0;k<fElectrons->GetEntries();k++){
967 mingyang 1.41 if(fElectrons->At(k)->BestTrk()->NMissingHits()==0){
968 mingyang 1.42 if((fElectrons->At(k)->SCluster()==phHard->SCluster()) && (MathUtils::DeltaR(*fElectrons->At(k)->BestTrk(),*phHard) < 1)){
969     ph1passeveto=0;
970     }
971     if((fElectrons->At(k)->SCluster()==phSoft->SCluster()) && (MathUtils::DeltaR(*fElectrons->At(k)->BestTrk(),*phSoft) < 1)){
972     ph2passeveto=0;
973     }
974     }
975 fabstoec 1.36 }
976 mingyang 1.42
977     if(ph1passeveto==1 && ph2passeveto==1){*/
978 mingyang 1.41
979 mingyang 1.42 if(PhotonTools::ElectronVetoCiC(phHard, fElectrons)>=1 && PhotonTools::ElectronVetoCiC(phSoft, fElectrons)>=1){
980    
981 mingyang 1.41 fDiphotonEvent->leptonTag = 1;
982    
983     fDiphotonEvent-> elePt = fLeptonTagElectrons->At(0)->Pt();
984     fDiphotonEvent-> eleEta = fLeptonTagElectrons->At(0)->Eta();
985     fDiphotonEvent-> eleSCEta = fLeptonTagElectrons->At(0)->SCluster()->Eta();
986     fDiphotonEvent-> eleIso1 = (fLeptonTagElectrons->At(0)->TrackIsolationDr03() + fLeptonTagElectrons->At(0)->EcalRecHitIsoDr03() + fLeptonTagElectrons->At(0)->HcalTowerSumEtDr03() - fPileUpDen->At(0)->RhoRandomLowEta() * TMath::Pi() * 0.3 * 0.3)/fDiphotonEvent-> elePt;
987    
988     fDiphotonEvent-> eleIso2 = -99.;
989    
990     if ( fDoSynching ) {
991     Double_t distVtx = 999.0;
992     for(UInt_t nv=0; nv<fPV->GetEntries(); nv++){
993     double dz = TMath::Abs(fLeptonTagElectrons->At(0)->GsfTrk()->DzCorrected(*fPV->At(nv)));
994     if(dz < distVtx) {
995     distVtx = dz;
996     closestVtx = nv;
997     }
998     }
999     fDiphotonEvent-> eleIdMva = fElectronIDMVA->MVAValue(fLeptonTagElectrons->At(0), fPV->At(closestVtx));
1000     }
1001    
1002     // fDiphotonEvent-> eleIso2 = ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso03,fLeptonTagElectrons->At(0)->SCluster()->Eta(), ElectronTools::kEleEAData2012) + ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso03, fLeptonTagElectrons->At(0)->SCluster()->Eta(), ElectronTools::kEleEAData2012) ;
1003    
1004     fDiphotonEvent-> eleIso3 = (fLeptonTagElectrons->At(0)->TrackIsolationDr03() + fLeptonTagElectrons->At(0)->EcalRecHitIsoDr03() + fLeptonTagElectrons->At(0)->HcalTowerSumEtDr03() - fPileUpDen->At(0)->RhoLowEta() * TMath::Pi() * 0.3 * 0.3)/fDiphotonEvent-> elePt;
1005     fDiphotonEvent-> eleIso4 = (fLeptonTagElectrons->At(0)->TrackIsolationDr03() + fLeptonTagElectrons->At(0)->EcalRecHitIsoDr03() + fLeptonTagElectrons->At(0)->HcalTowerSumEtDr03() - fPileUpDen->At(0)->Rho() * TMath::Pi() * 0.3 * 0.3)/fDiphotonEvent-> elePt;
1006     fDiphotonEvent-> eleDist = fLeptonTagElectrons->At(0)->ConvPartnerDist();
1007     fDiphotonEvent-> eleDcot = fLeptonTagElectrons->At(0)->ConvPartnerDCotTheta();
1008     fDiphotonEvent-> eleCoviee = fLeptonTagElectrons->At(0)->CoviEtaiEta();
1009     fDiphotonEvent-> eleDphiin = TMath::Abs(fLeptonTagElectrons->At(0)->DeltaPhiSuperClusterTrackAtVtx());
1010     fDiphotonEvent-> eleDetain = TMath::Abs(fLeptonTagElectrons->At(0)->DeltaEtaSuperClusterTrackAtVtx());
1011     fDiphotonEvent-> eleDR1 = MathUtils::DeltaR(fLeptonTagElectrons->At(0),phHard);
1012     fDiphotonEvent-> eleDR2 = MathUtils::DeltaR(fLeptonTagElectrons->At(0),phSoft);
1013     fDiphotonEvent-> eleMass1 = (phHard->Mom()+fLeptonTagElectrons->At(0)->Mom()).M();
1014     fDiphotonEvent-> eleMass2 = (phSoft->Mom()+fLeptonTagElectrons->At(0)->Mom()).M();
1015 mingyang 1.42 fDiphotonEvent-> eleNinnerHits = fLeptonTagElectrons->At(0)->Trk()->NExpectedHitsInner();
1016 mingyang 1.41 }
1017 mingyang 1.31 }
1018     }
1019 mingyang 1.39
1020     if(false){
1021 mingyang 1.42 if(fDiphotonEvent->evt==101794856 || fDiphotonEvent->evt==528937923 || fDiphotonEvent->evt==483561562 || fDiphotonEvent->evt==1374972270 || fDiphotonEvent->evt==835731908){
1022     //if(fDiphotonEvent->evt==369441614 || fDiphotonEvent->evt==79737729){
1023 mingyang 1.39 printf("ming sync check 0: run:%d evt:%d lumi:%d leptonTag:%d numelectrons:%d idmva:%f mass:%f\n elePt:%f eleEta:%f eleSCEta:%f vtx:%d\n",fDiphotonEvent->run,fDiphotonEvent->evt,fDiphotonEvent->lumi,fDiphotonEvent->leptonTag,fLeptonTagElectrons->GetEntries(),fDiphotonEvent->eleIdMva,_mass,fDiphotonEvent->elePt,fDiphotonEvent->eleEta,fDiphotonEvent->eleSCEta,closestVtx);
1024 mingyang 1.42 //return;
1025 mingyang 1.39 }
1026     }
1027 mingyang 1.31 }
1028    
1029     //vbf tag
1030     fDiphotonEvent->vbfTag = -1;
1031     fDiphotonEvent->vbfbdt = -99;
1032     if(fApplyVBFTag){
1033     fDiphotonEvent->vbfTag = 0;
1034     jet1pt_vbf = fDiphotonEvent->jet1pt;
1035     jet2pt_vbf = fDiphotonEvent->jet2pt;
1036 mingyang 1.34 deltajeteta_vbf = TMath::Abs(fDiphotonEvent->jet1eta - fDiphotonEvent->jet2eta);
1037 mingyang 1.31 dijetmass_vbf = fDiphotonEvent->dijetmass;
1038 mingyang 1.34 zeppenfeld_vbf = TMath::Abs(fDiphotonEvent->zeppenfeld);
1039     dphidijetgg_vbf = TMath::Abs(fDiphotonEvent->dphidijetgg);
1040 mingyang 1.31 diphoptOverdiphomass_vbf = fDiphotonEvent->ptgg/fDiphotonEvent->mass;
1041     pho1ptOverdiphomass_vbf = phHard->Pt()/fDiphotonEvent->mass;
1042     pho2ptOverdiphomass_vbf = phSoft->Pt()/fDiphotonEvent->mass;
1043    
1044 mingyang 1.35 if(jet1 && jet2 && (pho1ptOverdiphomass_vbf > 40./120.) && (pho2ptOverdiphomass_vbf > 30./120.) && (jet1pt_vbf > 30) && (jet2pt_vbf > 20) && (dijetmass_vbf > 250)){
1045 mingyang 1.31 fDiphotonEvent->vbfbdt = fMVAVBF.GetMVAbdtValue(jet1pt_vbf,jet2pt_vbf,deltajeteta_vbf,dijetmass_vbf,zeppenfeld_vbf,dphidijetgg_vbf,diphoptOverdiphomass_vbf,pho1ptOverdiphomass_vbf,pho2ptOverdiphomass_vbf);
1046    
1047     if((fDiphotonEvent->vbfbdt>=0.985) && (fDiphotonEvent->vbfbdt<=1)){
1048     fDiphotonEvent->vbfTag = 2;
1049     }
1050     if((fDiphotonEvent->vbfbdt>=0.93) && (fDiphotonEvent->vbfbdt<0.985)){
1051     fDiphotonEvent->vbfTag = 1;
1052 fabstoec 1.13 }
1053     }
1054     }
1055 mingyang 1.42
1056 mingyang 1.34 //printf("vbfbdt:%f\n",fDiphotonEvent->vbfbdt);
1057 paus 1.12 if (fWriteDiphotonTree)
1058     hCiCTuple->Fill();
1059 bendavid 1.22
1060     if (fFillVertexTree && phHard && phSoft) {
1061     for (UInt_t ivtx = 0; ivtx<fPV->GetEntries(); ++ivtx) {
1062     const Vertex *v = fPV->At(ivtx);
1063     fDiphotonVtx->SetVars(v,phHard,phSoft,fPFCands,ivtx,fPV->GetEntries(),_decayZ);
1064     hVtxTree->Fill();
1065     }
1066     }
1067 bendavid 1.1 }
1068 mingyang 1.42
1069 paus 1.12 if (!fWriteSingleTree)
1070     return;
1071 mingyang 1.42
1072 bendavid 1.2 for (UInt_t iph = 0; iph<egcol->GetEntries(); ++iph) {
1073     const Particle *p = 0;
1074     const Photon *ph = 0;
1075     const Electron *ele = 0;
1076     const SuperCluster *sc = 0;
1077     if (fLoopOnGoodElectrons) {
1078     ele = fGoodElectrons->At(iph);
1079     p = ele;
1080     sc = ele->SCluster();
1081     ph = PhotonTools::MatchedPhoton(ele,fPhotons);
1082     }
1083     else {
1084     ph = fPhotons->At(iph);
1085     p = ph;
1086     sc = ph->SCluster();
1087     ele = PhotonTools::MatchedElectron(ph,fGoodElectrons);
1088     }
1089    
1090 paus 1.12 const DecayParticle *conv = PhotonTools::MatchedConversion(sc,fConversions,bsp,
1091     nhitsbeforevtxmax);
1092 bendavid 1.20 const SuperCluster *pfsc = PhotonTools::MatchedPFSC(sc,fPFPhotons, fElectrons);
1093    
1094 bendavid 1.2 if (!fLoopOnGoodElectrons && ph->HasPV()) {
1095 bendavid 1.1 fDiphotonEvent->vtxZ = ph->PV()->Z();
1096     }
1097    
1098     const MCParticle *phgen = 0;
1099     if( !fIsData ) {
1100 bendavid 1.6 phgen = PhotonTools::MatchMC(p,fMCParticles,!fApplyElectronVeto);
1101 bendavid 1.1 }
1102    
1103 bendavid 1.2 if (fExcludeSinglePrompt && phgen) return;
1104    
1105     fDiphotonEvent->mt = -99.;
1106     fDiphotonEvent->cosphimet = -99.;
1107     fDiphotonEvent->mtele = -99.;
1108     fDiphotonEvent->cosphimetele = -99.;
1109    
1110     if (ph) {
1111     fDiphotonEvent->cosphimet = TMath::Cos(ph->Phi()-fPFMet->At(0)->Phi());
1112 paus 1.12 fDiphotonEvent->mt = TMath::Sqrt(2.0*fPFMet->At(0)->Pt()*ph->Pt()*
1113     (1.0-fDiphotonEvent->cosphimet));
1114 bendavid 1.2 }
1115 bendavid 1.1
1116 bendavid 1.2 if (ele) {
1117     fDiphotonEvent->cosphimetele = TMath::Cos(ele->Phi()-fPFMet->At(0)->Phi());
1118 paus 1.12 fDiphotonEvent->mtele = TMath::Sqrt(2.0*fPFMet->At(0)->Pt()*ele->Pt()*
1119     (1.0-fDiphotonEvent->cosphimetele));
1120 bendavid 1.2 }
1121    
1122 fabstoec 1.24 fSinglePhoton->SetVars(ph,conv,ele,pfsc,phgen,fPhfixph,fPhfixele,fTracks,fPV,fPFCands,rho,fFillClusterArrays,
1123 bendavid 1.30 fElectrons,fConversions,bsp,fApplyElectronVeto);
1124 bendavid 1.1 hCiCTupleSingle->Fill();
1125     }
1126 fabstoec 1.16
1127    
1128    
1129 bendavid 1.1 return;
1130     }
1131    
1132     //--------------------------------------------------------------------------------------------------
1133     void PhotonTreeWriter::SlaveBegin()
1134     {
1135     // Run startup code on the computer (slave) doing the actual analysis. Here,
1136     // we just request the photon collection branch.
1137    
1138 fabstoec 1.13 if( fApplyLeptonTag ) {
1139     ReqEventObject(fLeptonTagElectronsName, fLeptonTagElectrons, false);
1140     ReqEventObject(fLeptonTagMuonsName, fLeptonTagMuons, false);
1141     }
1142    
1143 bendavid 1.30 // ReqEventObject(fPFNoPileUpName, fPFNoPileUpCands, false);
1144     // ReqEventObject(fPFPileUpName, fPFPileUpCands, false);
1145 fabstoec 1.28
1146 paus 1.12 ReqEventObject(fPhotonBranchName,fPhotons, fPhotonsFromBranch);
1147 bendavid 1.20 if (fEnablePFPhotons) ReqEventObject(fPFPhotonName,fPFPhotons, true);
1148 paus 1.12 ReqEventObject(fTrackBranchName, fTracks, true);
1149     ReqEventObject(fElectronName, fElectrons, true);
1150     ReqEventObject(fGoodElectronName,fGoodElectrons,fGoodElectronsFromBranch);
1151     ReqEventObject(fPileUpDenName, fPileUpDen, true);
1152     ReqEventObject(fPVName, fPV, fPVFromBranch);
1153     ReqEventObject(fConversionName, fConversions, true);
1154 fabstoec 1.36 if ( fDoSynching ) ReqEventObject(fPFConversionName, fPFConversions, true);
1155 paus 1.12 ReqEventObject(fBeamspotName, fBeamspot, true);
1156     ReqEventObject(fPFCandName, fPFCands, true);
1157     ReqEventObject(fSuperClusterName,fSuperClusters,true);
1158     ReqEventObject(fPFMetName, fPFMet, true);
1159 fabstoec 1.16 if (fEnableJets){
1160     ReqEventObject(fPFJetName, fPFJets, fPFJetsFromBranch);
1161     ReqBranch(funcorrPFJetName, funcorrPFJets);
1162 fabstoec 1.19 // if (!fIsData) ReqEventObject(fGenJetName, fGenJets, true);
1163 fabstoec 1.16 }
1164 bendavid 1.1 if (!fIsData) {
1165 paus 1.12 ReqBranch(fPileUpName, fPileUp);
1166     ReqBranch(fMCParticleName, fMCParticles);
1167 mingyang 1.33 ReqBranch(fMCEventInfoName, fMCEventInfo);
1168 fabstoec 1.19 if (fEnableJets) ReqEventObject(fGenJetName, fGenJets, true);
1169 bendavid 1.1 }
1170 bendavid 1.6 if (fIsData) {
1171 paus 1.12 fPhFixDataFile = gSystem->Getenv("CMSSW_BASE") +
1172     TString("/src/MitPhysics/data/PhotonFixGRPV22.dat");
1173 bendavid 1.6 }
1174     else {
1175 paus 1.12 fPhFixDataFile = gSystem->Getenv("CMSSW_BASE") +
1176     TString("/src/MitPhysics/data/PhotonFixSTART42V13.dat");
1177 bendavid 1.6 }
1178 bendavid 1.1
1179 bendavid 1.2 fPhfixph.initialise("4_2",std::string(fPhFixDataFile));
1180     fPhfixele.initialise("4_2e",std::string(fPhFixDataFile));
1181    
1182 bendavid 1.20 // fMVAMet.Initialize(TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/mva_JetID_lowpt.weights.xml"))),
1183     // TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/mva_JetID_highpt.weights.xml"))),
1184     // TString(getenv("CMSSW_BASE")+string("/src/MitPhysics/Utils/python/JetIdParams_cfi.py")),
1185     // TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/gbrmet_42.root"))),
1186     // TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/gbrmetphi_42.root"))),
1187     // TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/gbrmetu1_42.root"))),
1188     // TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/gbrmetu2_42.root")))
1189     // );
1190    
1191     fMVAMet.Initialize(TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/mva_JetID_lowpt.weights.xml"))),
1192     TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/mva_JetID_highpt.weights.xml"))),
1193     TString(getenv("CMSSW_BASE")+string("/src/MitPhysics/Utils/python/JetIdParams_cfi.py")),
1194     TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/gbrmet_52.root"))),
1195     TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/gbrmetphi_52.root"))),
1196     TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/gbrmetu1cov_52.root"))),
1197     TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/gbrmetu2cov_52.root")))
1198     );
1199 bendavid 1.22
1200     fJetId.Initialize(JetIDMVA::kMedium,
1201 bendavid 1.23 TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/mva_JetID_lowpt.weights.xml"))),
1202     TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/mva_JetID_highpt.weights.xml"))),
1203 bendavid 1.22 JetIDMVA::kCut,
1204 bendavid 1.23 TString((getenv("CMSSW_BASE")+string("/src/MitPhysics/Utils/python/JetIdParams_cfi.py")))
1205 mingyang 1.31
1206 bendavid 1.23 );
1207 mingyang 1.31
1208     fMVAVBF.InitializeMVA();
1209 bendavid 1.20
1210 fabstoec 1.36
1211     if( fDoSynching ) {
1212     fVtxTools.InitP(2);
1213     fElectronIDMVA = new ElectronIDMVA();
1214     fElectronIDMVA->Initialize("BDTG method",
1215     fElectronMVAWeights_Subdet0Pt10To20,
1216     fElectronMVAWeights_Subdet1Pt10To20,
1217     fElectronMVAWeights_Subdet2Pt10To20,
1218     fElectronMVAWeights_Subdet0Pt20ToInf,
1219     fElectronMVAWeights_Subdet1Pt20ToInf,
1220     fElectronMVAWeights_Subdet2Pt20ToInf,
1221     ElectronIDMVA::kIDEGamma2012NonTrigV1,
1222     fTheRhoType);
1223     }
1224    
1225    
1226 bendavid 1.1 fDiphotonEvent = new PhotonTreeWriterDiphotonEvent;
1227 bendavid 1.20 fSinglePhoton = new PhotonTreeWriterPhoton<16>;
1228 bendavid 1.1
1229 bendavid 1.20 TFile *ftmp = TFile::Open(TString::Format("%s_tmp.root",GetName()),"RECREATE");
1230    
1231     if (fWriteDiphotonTree) {
1232 paus 1.12 hCiCTuple = new TTree(fTupleName.Data(),fTupleName.Data());
1233 bendavid 1.20 hCiCTuple->SetAutoSave(300e9);
1234     }
1235 bendavid 1.1 TString singlename = fTupleName + TString("Single");
1236 bendavid 1.20 if (fWriteSingleTree) {
1237 paus 1.12 hCiCTupleSingle = new TTree(singlename,singlename);
1238 bendavid 1.20 hCiCTupleSingle->SetAutoSave(300e9);
1239     }
1240    
1241 bendavid 1.1 //make flattish tree from classes so we don't have to rely on dictionaries for reading later
1242     TClass *eclass = TClass::GetClass("mithep::PhotonTreeWriterDiphotonEvent");
1243 bendavid 1.20 TClass *pclass = TClass::GetClass("mithep::PhotonTreeWriterPhoton<16>");
1244 paus 1.12 TList *elist = eclass->GetListOfDataMembers();
1245     TList *plist = pclass->GetListOfDataMembers();
1246 bendavid 1.1
1247     for (int i=0; i<elist->GetEntries(); ++i) {
1248 mingyang 1.26 const TDataMember *tdm = static_cast<const TDataMember*>(elist->At(i));//ming
1249 bendavid 1.20 if (!(tdm->IsBasic() && tdm->IsPersistent())) continue;
1250 bendavid 1.1 TString typestring;
1251 bendavid 1.20 if (TString(tdm->GetTypeName()).BeginsWith("Char_t")) typestring = "B";
1252     else if (TString(tdm->GetTypeName()).BeginsWith("UChar_t")) typestring = "b";
1253     else if (TString(tdm->GetTypeName()).BeginsWith("Short_t")) typestring = "S";
1254     else if (TString(tdm->GetTypeName()).BeginsWith("UShort_t")) typestring = "s";
1255     else if (TString(tdm->GetTypeName()).BeginsWith("Int_t")) typestring = "I";
1256     else if (TString(tdm->GetTypeName()).BeginsWith("UInt_t")) typestring = "i";
1257     else if (TString(tdm->GetTypeName()).BeginsWith("Float_t")) typestring = "F";
1258     else if (TString(tdm->GetTypeName()).BeginsWith("Double_t")) typestring = "D";
1259     else if (TString(tdm->GetTypeName()).BeginsWith("Long64_t")) typestring = "L";
1260     else if (TString(tdm->GetTypeName()).BeginsWith("ULong64_t")) typestring = "l";
1261     else if (TString(tdm->GetTypeName()).BeginsWith("Bool_t")) typestring = "O";
1262     else continue;
1263 bendavid 1.1 //printf("%s %s: %i\n",tdm->GetTypeName(),tdm->GetName(),int(tdm->GetOffset()));
1264 mingyang 1.26 Char_t *addr = (Char_t*)fDiphotonEvent;//ming:?
1265 bendavid 1.1 assert(sizeof(Char_t)==1);
1266 bendavid 1.20 if (fWriteDiphotonTree) hCiCTuple->Branch(tdm->GetName(),addr + tdm->GetOffset(),TString::Format("%s/%s",tdm->GetName(),typestring.Data()));
1267     if (fWriteSingleTree) hCiCTupleSingle->Branch(tdm->GetName(),addr + tdm->GetOffset(),TString::Format("%s/%s",tdm->GetName(),typestring.Data()));
1268 bendavid 1.1 }
1269    
1270     for (int iph=0; iph<2; ++iph) {
1271     for (int i=0; i<plist->GetEntries(); ++i) {
1272     const TDataMember *tdm = static_cast<const TDataMember*>(plist->At(i));
1273 bendavid 1.20 if (!(tdm->IsBasic() && tdm->IsPersistent())) continue;
1274 bendavid 1.1 TString typestring;
1275 bendavid 1.20 if (TString(tdm->GetTypeName()).BeginsWith("Char_t")) typestring = "B";
1276     else if (TString(tdm->GetTypeName()).BeginsWith("UChar_t")) typestring = "b";
1277     else if (TString(tdm->GetTypeName()).BeginsWith("Short_t")) typestring = "S";
1278     else if (TString(tdm->GetTypeName()).BeginsWith("UShort_t")) typestring = "s";
1279     else if (TString(tdm->GetTypeName()).BeginsWith("Int_t")) typestring = "I";
1280     else if (TString(tdm->GetTypeName()).BeginsWith("UInt_t")) typestring = "i";
1281     else if (TString(tdm->GetTypeName()).BeginsWith("Float_t")) typestring = "F";
1282     else if (TString(tdm->GetTypeName()).BeginsWith("Double_t")) typestring = "D";
1283     else if (TString(tdm->GetTypeName()).BeginsWith("Long64_t")) typestring = "L";
1284     else if (TString(tdm->GetTypeName()).BeginsWith("ULong64_t")) typestring = "l";
1285     else if (TString(tdm->GetTypeName()).BeginsWith("Bool_t")) typestring = "O";
1286     else continue;
1287 bendavid 1.1 //printf("%s\n",tdm->GetTypeName());
1288     TString varname = TString::Format("ph%d.%s",iph+1,tdm->GetName());
1289 bendavid 1.20 if (tdm->GetArrayDim()==1) {
1290     varname = TString::Format("%s[%i]",varname.Data(),tdm->GetMaxIndex(0));
1291     }
1292    
1293     //printf("typename = %s, arraydim = %i, arraysize = %i,varname = %s\n", tdm->GetTypeName(), tdm->GetArrayDim(), tdm->GetMaxIndex(0), varname.Data());
1294 bendavid 1.1
1295     Char_t *addr = (Char_t*)&fDiphotonEvent->photons[iph];
1296     assert(sizeof(Char_t)==1);
1297 bendavid 1.20 if (fWriteDiphotonTree) hCiCTuple->Branch(varname,addr+tdm->GetOffset(),TString::Format("%s/%s",varname.Data(),typestring.Data()));
1298 bendavid 1.1
1299     if (iph==0) {
1300     TString singlename = TString::Format("ph.%s",tdm->GetName());
1301 bendavid 1.20 if (tdm->GetArrayDim()==1) {
1302     singlename = TString::Format("%s[%i]",singlename.Data(),tdm->GetMaxIndex(0));
1303     }
1304 bendavid 1.1 Char_t *addrsingle = (Char_t*)fSinglePhoton;
1305 bendavid 1.20 if (fWriteSingleTree) hCiCTupleSingle->Branch(singlename,addrsingle+tdm->GetOffset(),TString::Format("%s/%s",singlename.Data(),typestring.Data()));
1306 bendavid 1.1 }
1307     }
1308     }
1309 paus 1.12
1310     if (fWriteDiphotonTree)
1311     AddOutput(hCiCTuple);
1312     if (fWriteSingleTree)
1313     AddOutput(hCiCTupleSingle);
1314 bendavid 1.22
1315     if (fFillVertexTree) {
1316     fDiphotonVtx = new PhotonTreeWriterVtx;
1317     hVtxTree = new TTree("hVtxTree","hVtxTree");
1318     hVtxTree->SetAutoSave(300e9);
1319     AddOutput(hVtxTree);
1320    
1321     TClass *vclass = TClass::GetClass("mithep::PhotonTreeWriterVtx");
1322     TList *vlist = vclass->GetListOfDataMembers();
1323    
1324     for (int i=0; i<vlist->GetEntries(); ++i) {
1325     const TDataMember *tdm = static_cast<const TDataMember*>(vlist->At(i));
1326     if (!(tdm->IsBasic() && tdm->IsPersistent())) continue;
1327     TString typestring;
1328     if (TString(tdm->GetTypeName()).BeginsWith("Char_t")) typestring = "B";
1329     else if (TString(tdm->GetTypeName()).BeginsWith("UChar_t")) typestring = "b";
1330     else if (TString(tdm->GetTypeName()).BeginsWith("Short_t")) typestring = "S";
1331     else if (TString(tdm->GetTypeName()).BeginsWith("UShort_t")) typestring = "s";
1332     else if (TString(tdm->GetTypeName()).BeginsWith("Int_t")) typestring = "I";
1333     else if (TString(tdm->GetTypeName()).BeginsWith("UInt_t")) typestring = "i";
1334     else if (TString(tdm->GetTypeName()).BeginsWith("Float_t")) typestring = "F";
1335     else if (TString(tdm->GetTypeName()).BeginsWith("Double_t")) typestring = "D";
1336     else if (TString(tdm->GetTypeName()).BeginsWith("Long64_t")) typestring = "L";
1337     else if (TString(tdm->GetTypeName()).BeginsWith("ULong64_t")) typestring = "l";
1338     else if (TString(tdm->GetTypeName()).BeginsWith("Bool_t")) typestring = "O";
1339     else continue;
1340     //printf("%s %s: %i\n",tdm->GetTypeName(),tdm->GetName(),int(tdm->GetOffset()));
1341     Char_t *addr = (Char_t*)fDiphotonVtx;
1342     assert(sizeof(Char_t)==1);
1343     hVtxTree->Branch(tdm->GetName(),addr + tdm->GetOffset(),TString::Format("%s/%s",tdm->GetName(),typestring.Data()));
1344     }
1345     }
1346    
1347 bendavid 1.1 }
1348    
1349     // ----------------------------------------------------------------------------------------
1350     // some helpfer functions....
1351 paus 1.12 void PhotonTreeWriter::FindHiggsPtAndZ(Float_t& pt, Float_t& decayZ, Float_t& mass)
1352     {
1353     pt = -999.;
1354 bendavid 1.1 decayZ = -999.;
1355 paus 1.12 mass = -999.;
1356 bendavid 1.1
1357     // loop over all GEN particles and look for status 1 photons
1358     for(UInt_t i=0; i<fMCParticles->GetEntries(); ++i) {
1359     const MCParticle* p = fMCParticles->At(i);
1360 paus 1.12 if (p->Is(MCParticle::kH) || (!fApplyElectronVeto &&
1361     (p->AbsPdgId()==23 || p->AbsPdgId()==24))) {
1362     pt = p->Pt();
1363 bendavid 1.1 decayZ = p->DecayVertex().Z();
1364 paus 1.12 mass = p->Mass();
1365 bendavid 1.1 break;
1366     }
1367     }
1368    
1369     return;
1370     }
1371    
1372    
1373 paus 1.12 Float_t PhotonTreeWriter::GetEventCat(PhotonTools::CiCBaseLineCats cat1,
1374     PhotonTools::CiCBaseLineCats cat2) {
1375 bendavid 1.1
1376 paus 1.12 bool ph1IsEB = (cat1 == PhotonTools::kCiCCat1 || cat1 == PhotonTools::kCiCCat2);
1377     bool ph2IsEB = (cat2 == PhotonTools::kCiCCat1 || cat2 == PhotonTools::kCiCCat2);
1378 bendavid 1.1
1379     bool ph1IsHR9 = (cat1 == PhotonTools::kCiCCat1 || cat1 == PhotonTools::kCiCCat3);
1380     bool ph2IsHR9 = (cat2 == PhotonTools::kCiCCat1 || cat2 == PhotonTools::kCiCCat3);
1381    
1382     if( ph1IsEB && ph2IsEB )
1383     return ( ph1IsHR9 && ph2IsHR9 ? 0. : 1.);
1384    
1385     return ( ph1IsHR9 && ph2IsHR9 ? 2. : 3.);
1386     }
1387    
1388 bendavid 1.20 template <int NClus>
1389     void PhotonTreeWriterPhoton<NClus>::SetVars(const Photon *p, const DecayParticle *c, const Electron *ele,
1390 fabstoec 1.24 const SuperCluster *pfsc, const MCParticle *m,
1391     PhotonFix &phfixph, PhotonFix &phfixele,
1392     const TrackCol* trackCol,const VertexCol* vtxCol,
1393     const PFCandidateCol* fPFCands,
1394     Double_t rho,
1395     Bool_t fillclusterarrays,
1396 fabstoec 1.36 const ElectronCol* els, const DecayParticleCol *convs, const BaseVertex *bs, Bool_t applyElectronVeto, const Vertex* realVtx) {
1397 paus 1.12
1398     const SuperCluster *s = 0;
1399     if (p)
1400     s = p->SCluster();
1401     else
1402     s = ele->SCluster();
1403     const BasicCluster *b = s->Seed();
1404     const BasicCluster *b2 = 0;
1405     Double_t ebcmax = -99.;
1406     for (UInt_t i=0; i<s->ClusterSize(); ++i) {
1407     const BasicCluster *bc = s->Cluster(i);
1408     if (bc->Energy() > ebcmax && bc !=b) {
1409     b2 = bc;
1410     ebcmax = bc->Energy();
1411     }
1412     }
1413 bendavid 1.2
1414 paus 1.12 const BasicCluster *bclast = 0;
1415     Double_t ebcmin = 1e6;
1416     for (UInt_t i=0; i<s->ClusterSize(); ++i) {
1417     const BasicCluster *bc = s->Cluster(i);
1418     if (bc->Energy() < ebcmin && bc !=b) {
1419     bclast = bc;
1420     ebcmin = bc->Energy();
1421     }
1422     }
1423 bendavid 1.5
1424 paus 1.12 const BasicCluster *bclast2 = 0;
1425     ebcmin = 1e6;
1426     for (UInt_t i=0; i<s->ClusterSize(); ++i) {
1427     const BasicCluster *bc = s->Cluster(i);
1428     if (bc->Energy() < ebcmin && bc !=b && bc!=bclast) {
1429     bclast2 = bc;
1430     ebcmin = bc->Energy();
1431     }
1432     }
1433 bendavid 1.5
1434 paus 1.12 if (p) {
1435     hasphoton = kTRUE;
1436     e = p->E();
1437     pt = p->Pt();
1438     eta = p->Eta();
1439     phi = p->Phi();
1440     r9 = p->R9();
1441     e3x3 = p->E33();
1442     e5x5 = p->E55();
1443     hovere = p->HadOverEm();
1444 bendavid 1.20 hoveretower = p->HadOverEmTow();
1445 paus 1.12 sigietaieta = p->CoviEtaiEta();
1446     phcat = PhotonTools::CiCBaseLineCat(p);
1447     eerr = p->EnergyErr();
1448     eerrsmeared = p->EnergyErrSmeared();
1449     esmearing = p->EnergySmearing();
1450     idmva = p->IdMva();
1451     hcalisodr03 = p->HcalTowerSumEtDr03();
1452     ecalisodr03 = p->EcalRecHitIsoDr03();
1453     trkisohollowdr03 = p->HollowConeTrkIsoDr03();
1454     hcalisodr04 = p->HcalTowerSumEtDr04();
1455     ecalisodr04 = p->EcalRecHitIsoDr04();
1456     trkisohollowdr04 = p->HollowConeTrkIsoDr04();
1457    
1458 bendavid 1.30 passeleveto = PhotonTools::PassElectronVetoConvRecovery(p, els, convs, bs);
1459 paus 1.12
1460     const Vertex *vtx = vtxCol->At(0);
1461 fabstoec 1.36 if (p->HasPV()) vtx = p->PV();
1462     if ( realVtx ) vtx = realVtx;
1463    
1464 paus 1.12 UInt_t wVtxInd = 0;
1465    
1466     trackiso1 = IsolationTools::CiCTrackIsolation(p,vtx, 0.3, 0.02, 0.0, 0.0, 0.1, 1.0,
1467 fabstoec 1.36 trackCol, NULL, NULL,
1468     (!applyElectronVeto ? els : NULL) );
1469     //Question Ming:whyfPV->At(0) instead of selected vertex using ranking method?
1470    
1471 paus 1.12 // track iso worst vtx
1472     trackiso2 = IsolationTools::CiCTrackIsolation(p,vtx, 0.4, 0.02, 0.0, 0.0, 0.1, 1.0,
1473 fabstoec 1.36 trackCol, &wVtxInd,vtxCol,
1474     (!applyElectronVeto ? els : NULL) );
1475 paus 1.12 combiso1 = ecalisodr03+hcalisodr04+trackiso1 - 0.17*rho;
1476 fabstoec 1.24 combiso2 = ecalisodr04+hcalisodr04+trackiso2 - 0.52*rho;
1477 fabstoec 1.36
1478    
1479 fabstoec 1.24 // -----------------------------------------------------
1480     // PF-CiC4 Debug Stuff
1481     std::vector<double> debugVals;
1482     bool tmpPass = PhotonTools::PassCiCPFIsoSelection(p, vtx, fPFCands, vtxCol, rho, 20., &debugVals);
1483     if( debugVals.size() == 13 ) {
1484     pfcic4_tIso1 = debugVals[0];
1485     pfcic4_tIso2 = debugVals[1];
1486     pfcic4_tIso3 = debugVals[2];
1487     pfcic4_covIEtaIEta = debugVals[3];
1488     pfcic4_HoE = debugVals[4];
1489     pfcic4_R9 = debugVals[5];
1490     pfcic4_wVtxInd = debugVals[6];
1491     pfcic4_ecalIso3 = debugVals[7];
1492     pfcic4_ecalIso4 = debugVals[8];
1493     pfcic4_trackIsoSel03 = debugVals[9];
1494     pfcic4_trackIsoWorst04 = debugVals[10];
1495     pfcic4_combIso1 = debugVals[11];
1496     pfcic4_combIso2 = debugVals[12];
1497     }
1498     // -----------------------------------------------------
1499 mingyang 1.26 //id mva
1500     //2011
1501     idmva_tIso1abs=combiso1;
1502     idmva_tIso2abs=combiso2;
1503     idmva_tIso3abs=trackiso1;
1504     idmva_absIsoEcal=ecalisodr03;
1505     idmva_absIsoHcal=hcalisodr04;
1506     //2012
1507     idmva_CoviEtaiPhi=p->SCluster()->Seed()->CoviEtaiPhi();
1508 bendavid 1.27 idmva_s4ratio=p->S4Ratio();
1509 mingyang 1.26 idmva_GammaIso=IsolationTools::PFGammaIsolation(p,0.3,0,fPFCands);
1510     idmva_ChargedIso_selvtx=IsolationTools::PFChargedIsolation(p,vtx,0.3,0.,fPFCands);
1511 fabstoec 1.36 idmva_ChargedIso_0p2_selvtx=IsolationTools::PFChargedIsolation(p,vtx,0.2,0.,fPFCands);
1512 mingyang 1.26 idmva_ChargedIso_worstvtx=IsolationTools::PFChargedIsolation(p,vtx,0.3,0.,fPFCands,&wVtxInd,vtxCol);
1513 bendavid 1.27 idmva_PsEffWidthSigmaRR=p->EffSigmaRR();
1514 paus 1.12 }
1515     else {
1516     hasphoton = kFALSE;
1517     e = -99.;
1518     pt = -99.;
1519     eta = -99.;
1520     phi = -99.;
1521     r9 = b->E3x3()/s->RawEnergy();
1522     e3x3 = b->E3x3();
1523     e5x5 = b->E5x5();
1524     hovere = ele->HadronicOverEm();
1525     sigietaieta = ele->CoviEtaiEta();
1526     phcat = -99;
1527     eerr = -99.;
1528     eerrsmeared = -99.;
1529     esmearing = 0.;
1530     idmva = -99.;
1531     hcalisodr03 = -99;
1532     ecalisodr03 = -99;
1533     trkisohollowdr03 = -99;
1534     hcalisodr04 = -99;
1535     ecalisodr04 = -99;
1536     trkisohollowdr04 = -99;
1537     trackiso1 = -99.;
1538     trackiso2 = -99.;
1539     combiso1 = -99.;
1540     combiso2 = -99.;
1541     }
1542    
1543     sce = s->Energy();
1544     scrawe = s->RawEnergy();
1545     scpse = s->PreshowerEnergy();
1546 bendavid 1.20 scpssigmaxx = s->PsEffWidthSigmaXX();
1547     scpssigmayy = s->PsEffWidthSigmaYY();
1548 paus 1.12 sceta = s->Eta();
1549     scphi = s->Phi();
1550     scnclusters = s->ClusterSize();
1551     scnhits = s->NHits();
1552     scetawidth = -99.;
1553     scphiwidth = -99.;
1554     if (p) {
1555     scetawidth = p->EtaWidth();
1556     scphiwidth = p->PhiWidth();
1557     }
1558     else {
1559     scetawidth = s->EtaWidth();
1560     scphiwidth = s->PhiWidth();
1561     }
1562     isbarrel = (s->AbsEta()<1.5);
1563     isr9reco = (isbarrel && r9>0.94) || (!isbarrel && r9>0.95);
1564     isr9cat = (r9>0.94);
1565    
1566     eseed = b->Energy();
1567     etaseed = b->Eta();
1568     phiseed = b->Phi();
1569     ietaseed = b->IEta();
1570     iphiseed = b->IPhi();
1571     ixseed = b->IX();
1572     iyseed = b->IY();
1573     etacryseed = b->EtaCry();
1574     phicryseed = b->PhiCry();
1575     xcryseed = b->XCry();
1576     ycryseed = b->YCry();
1577     thetaaxisseed = b->ThetaAxis();
1578     phiaxisseed = b->PhiAxis();
1579     sigietaietaseed = TMath::Sqrt(b->CoviEtaiEta());
1580     sigiphiphiseed = TMath::Sqrt(b->CoviPhiiPhi());
1581     if (isnan(sigiphiphiseed)) sigiphiphiseed = -99.;
1582     covietaiphiseed = b->CoviEtaiPhi();
1583     if (isnan(covietaiphiseed)) covietaiphiseed = -99.;
1584     e3x3seed = b->E3x3();
1585     e5x5seed = b->E5x5();
1586     emaxseed = b->EMax();
1587     e2ndseed = b->E2nd();
1588     etopseed = b->ETop();
1589     ebottomseed = b->EBottom();
1590     eleftseed = b->ELeft();
1591     erightseed = b->ERight();
1592     e1x3seed = b->E1x3();
1593     e3x1seed = b->E3x1();
1594     e1x5seed = b->E1x5();
1595     e2x2seed = b->E2x2();
1596     e4x4seed = b->E4x4();
1597     e2x5maxseed = b->E2x5Max();
1598     e2x5topseed = b->E2x5Top();
1599     e2x5bottomseed = b->E2x5Bottom();
1600     e2x5leftseed = b->E2x5Left();
1601     e2x5rightseed = b->E2x5Right();
1602     xseedseed = b->Pos().X();
1603     yseedseed = b->Pos().Y();
1604     zseedseed = b->Pos().Z();
1605     nhitsseed = b->NHits();
1606    
1607     if (b2) {
1608     ebc2 = b2->Energy();
1609     etabc2 = b2->Eta();
1610     phibc2 = b2->Phi();
1611     ietabc2 = b2->IEta();
1612     iphibc2 = b2->IPhi();
1613     ixbc2 = b2->IX();
1614     iybc2 = b2->IY();
1615     etacrybc2 = b2->EtaCry();
1616     phicrybc2 = b2->PhiCry();
1617     xcrybc2 = b2->XCry();
1618     ycrybc2 = b2->YCry();
1619     thetaaxisbc2 = b2->ThetaAxis();
1620     phiaxisbc2 = b2->PhiAxis();
1621     sigietaietabc2 = TMath::Sqrt(b2->CoviEtaiEta());
1622     sigiphiphibc2 = TMath::Sqrt(b2->CoviPhiiPhi());
1623     if (isnan(sigiphiphibc2)) sigiphiphibc2 = -99.;
1624     covietaiphibc2 = b2->CoviEtaiPhi();
1625     if (isnan(covietaiphibc2)) covietaiphibc2 = -99.;
1626     e3x3bc2 = b2->E3x3();
1627     e5x5bc2 = b2->E5x5();
1628     emaxbc2 = b2->EMax();
1629     e2ndbc2 = b2->E2nd();
1630     etopbc2 = b2->ETop();
1631     ebottombc2 = b2->EBottom();
1632     eleftbc2 = b2->ELeft();
1633     erightbc2 = b2->ERight();
1634     e1x3bc2 = b2->E1x3();
1635     e3x1bc2 = b2->E3x1();
1636     e1x5bc2 = b2->E1x5();
1637     e2x2bc2 = b2->E2x2();
1638     e4x4bc2 = b2->E4x4();
1639     e2x5maxbc2 = b2->E2x5Max();
1640     e2x5topbc2 = b2->E2x5Top();
1641     e2x5bottombc2 = b2->E2x5Bottom();
1642     e2x5leftbc2 = b2->E2x5Left();
1643     e2x5rightbc2 = b2->E2x5Right();
1644     xbc2bc2 = b2->Pos().X();
1645     ybc2bc2 = b2->Pos().Y();
1646     zbc2bc2 = b2->Pos().Z();
1647     nhitsbc2= b2->NHits();
1648     }
1649     else {
1650     ebc2 = 0;
1651     etabc2 = 0;
1652     phibc2 = 0;
1653     ietabc2 = 0;
1654     iphibc2 = 0;
1655     ixbc2 = 0;
1656     iybc2 = 0;
1657     etacrybc2 = 0;
1658     phicrybc2 = 0;
1659     xcrybc2 = 0;
1660     ycrybc2 = 0;
1661     thetaaxisbc2 = 0;
1662     phiaxisbc2 = 0;
1663     sigietaietabc2 = 0;
1664     sigiphiphibc2 = 0;
1665     covietaiphibc2 = 0;
1666     e3x3bc2 = 0;
1667     e5x5bc2 = 0;
1668     emaxbc2 = 0;
1669     e2ndbc2 = 0;
1670     etopbc2 = 0;
1671     ebottombc2 = 0;
1672     eleftbc2 = 0;
1673     erightbc2 = 0;
1674     e1x3bc2 = 0;
1675     e3x1bc2 = 0;
1676     e1x5bc2 = 0;
1677     e2x2bc2 = 0;
1678     e4x4bc2 = 0;
1679     e2x5maxbc2 = 0;
1680     e2x5topbc2 = 0;
1681     e2x5bottombc2 = 0;
1682     e2x5leftbc2 = 0;
1683     e2x5rightbc2 = 0;
1684     xbc2bc2 = 0;
1685     ybc2bc2 = 0;
1686     zbc2bc2 = 0;
1687     nhitsbc2 = 0;
1688     }
1689 bendavid 1.5
1690 paus 1.12 if (bclast) {
1691     ebclast = bclast->Energy();
1692     etabclast = bclast->Eta();
1693     phibclast = bclast->Phi();
1694     ietabclast = bclast->IEta();
1695     iphibclast = bclast->IPhi();
1696     ixbclast = bclast->IX();
1697     iybclast = bclast->IY();
1698     etacrybclast = bclast->EtaCry();
1699     phicrybclast = bclast->PhiCry();
1700     xcrybclast = bclast->XCry();
1701     ycrybclast = bclast->YCry();
1702     thetaaxisbclast = bclast->ThetaAxis();
1703     phiaxisbclast = bclast->PhiAxis();
1704     sigietaietabclast = TMath::Sqrt(bclast->CoviEtaiEta());
1705     sigiphiphibclast = TMath::Sqrt(bclast->CoviPhiiPhi());
1706     if (isnan(sigiphiphibclast)) sigiphiphibclast = -99.;
1707     covietaiphibclast = bclast->CoviEtaiPhi();
1708     if (isnan(covietaiphibclast)) covietaiphibclast = -99.;
1709     e3x3bclast = bclast->E3x3();
1710     nhitsbclast = bclast->NHits();
1711     }
1712     else {
1713     ebclast = 0;
1714     etabclast = 0;
1715     phibclast = 0;
1716     ietabclast = 0;
1717     iphibclast = 0;
1718     ixbclast = 0;
1719     iybclast = 0;
1720     etacrybclast = 0;
1721     phicrybclast = 0;
1722     xcrybclast = 0;
1723     ycrybclast = 0;
1724     thetaaxisbclast = 0;
1725     phiaxisbclast = 0;
1726     sigietaietabclast = 0;
1727     sigiphiphibclast = 0;
1728     covietaiphibclast = 0;
1729     e3x3bclast = 0;
1730     nhitsbclast = 0;
1731     }
1732 bendavid 1.5
1733 paus 1.12 if (bclast2) {
1734     ebclast2 = bclast2->Energy();
1735     etabclast2 = bclast2->Eta();
1736     phibclast2 = bclast2->Phi();
1737     ietabclast2 = bclast2->IEta();
1738     iphibclast2 = bclast2->IPhi();
1739     ixbclast2 = bclast2->IX();
1740     iybclast2 = bclast2->IY();
1741     etacrybclast2 = bclast2->EtaCry();
1742     phicrybclast2 = bclast2->PhiCry();
1743     xcrybclast2 = bclast2->XCry();
1744     ycrybclast2 = bclast2->YCry();
1745     thetaaxisbclast2 = bclast2->ThetaAxis();
1746     phiaxisbclast2 = bclast2->PhiAxis();
1747     sigietaietabclast2 = TMath::Sqrt(bclast2->CoviEtaiEta());
1748     sigiphiphibclast2 = TMath::Sqrt(bclast2->CoviPhiiPhi());
1749     if (isnan(sigiphiphibclast2)) sigiphiphibclast2 = -99.;
1750     covietaiphibclast2 = bclast2->CoviEtaiPhi();
1751     if (isnan(covietaiphibclast2)) covietaiphibclast2 = -99.;
1752     e3x3bclast2 = bclast2->E3x3();
1753     nhitsbclast2 = bclast2->NHits();
1754     }
1755     else {
1756     ebclast2 = 0;
1757     etabclast2 = 0;
1758     phibclast2 = 0;
1759     ietabclast2 = 0;
1760     iphibclast2 = 0;
1761     ixbclast2 = 0;
1762     iybclast2 = 0;
1763     etacrybclast2 = 0;
1764     phicrybclast2 = 0;
1765     xcrybclast2 = 0;
1766     ycrybclast2 = 0;
1767     thetaaxisbclast2 = 0;
1768     phiaxisbclast2 = 0;
1769     sigietaietabclast2 = 0;
1770     sigiphiphibclast2 = 0;
1771     covietaiphibclast2 = 0;
1772     e3x3bclast2 = 0;
1773     nhitsbclast2 = 0;
1774     }
1775 bendavid 1.5
1776 bendavid 1.20 for (UInt_t iclus=0; iclus<NClus; ++iclus) {
1777     if (fillclusterarrays && iclus < s->ClusterSize() ) {
1778     const BasicCluster *ib =s->Cluster(iclus);
1779    
1780     ebcs[iclus] = ib->Energy();
1781     etabcs[iclus] = ib->Eta();
1782     phibcs[iclus] = ib->Phi();
1783     ietabcs[iclus] = ib->IEta();
1784     iphibcs[iclus] = ib->IPhi();
1785     ixbcs[iclus] = ib->IX();
1786     iybcs[iclus] = ib->IY();
1787     etacrybcs[iclus] = ib->EtaCry();
1788     phicrybcs[iclus] = ib->PhiCry();
1789     xcrybcs[iclus] = ib->XCry();
1790     ycrybcs[iclus] = ib->YCry();
1791     sigietaietabcs[iclus] = TMath::Sqrt(ib->CoviEtaiEta());
1792     sigiphiphibcs[iclus] = TMath::Sqrt(ib->CoviPhiiPhi());
1793     covietaiphibcs[iclus] = ib->CoviEtaiPhi();
1794     sigetaetabcs[iclus] = TMath::Sqrt(ib->CovEtaEta());
1795     sigphiphibcs[iclus] = TMath::Sqrt(ib->CovPhiPhi());
1796     covetaphibcs[iclus] = ib->CovEtaPhi();
1797     e3x3bcs[iclus] = ib->E3x3();
1798     e5x5bcs[iclus] = ib->E5x5();
1799     emaxbcs[iclus] = ib->EMax();
1800     e2ndbcs[iclus] = ib->E2nd();
1801     etopbcs[iclus] = ib->ETop();
1802     ebottombcs[iclus] = ib->EBottom();
1803     eleftbcs[iclus] = ib->ELeft();
1804     erightbcs[iclus] = ib->ERight();
1805     e1x3bcs[iclus] = ib->E1x3();
1806     e3x1bcs[iclus] = ib->E3x1();
1807     e1x5bcs[iclus] = ib->E1x5();
1808     e2x2bcs[iclus] = ib->E2x2();
1809     e4x4bcs[iclus] = ib->E4x4();
1810     e2x5maxbcs[iclus] = ib->E2x5Max();
1811     e2x5topbcs[iclus] = ib->E2x5Top();
1812     e2x5bottombcs[iclus] = ib->E2x5Bottom();
1813     e2x5leftbcs[iclus] = ib->E2x5Left();
1814     e2x5rightbcs[iclus] = ib->E2x5Right();
1815     nhitsbcs[iclus]= ib->NHits();
1816     }
1817     else {
1818     ebcs[iclus] = -999;
1819     etabcs[iclus] = -999;
1820     phibcs[iclus] = -999;
1821     ietabcs[iclus] = -999;
1822     iphibcs[iclus] = -999;
1823     ixbcs[iclus] = -999;
1824     iybcs[iclus] = -999;
1825     etacrybcs[iclus] = -999;
1826     phicrybcs[iclus] = -999;
1827     xcrybcs[iclus] = -999;
1828     ycrybcs[iclus] = -999;
1829     sigietaietabcs[iclus] = -999;
1830     sigiphiphibcs[iclus] = -999;
1831     covietaiphibcs[iclus] = -999;
1832     sigetaetabcs[iclus] = -999;
1833     sigphiphibcs[iclus] = -999;
1834     covetaphibcs[iclus] = -999;
1835     e3x3bcs[iclus] = -999;
1836     e5x5bcs[iclus] = -999;
1837     emaxbcs[iclus] = -999;
1838     e2ndbcs[iclus] = -999;
1839     etopbcs[iclus] = -999;
1840     ebottombcs[iclus] = -999;
1841     eleftbcs[iclus] = -999;
1842     erightbcs[iclus] = -999;
1843     e1x3bcs[iclus] = -999;
1844     e3x1bcs[iclus] = -999;
1845     e1x5bcs[iclus] = -999;
1846     e2x2bcs[iclus] = -999;
1847     e4x4bcs[iclus] = -999;
1848     e2x5maxbcs[iclus] = -999;
1849     e2x5topbcs[iclus] = -999;
1850     e2x5bottombcs[iclus] = -999;
1851     e2x5leftbcs[iclus] = -999;
1852     e2x5rightbcs[iclus] = -999;
1853     nhitsbcs[iclus] = -999;
1854     }
1855     }
1856    
1857     for (UInt_t iclus=0; iclus<NClus; ++iclus) {
1858     if (fillclusterarrays && pfsc && iclus < pfsc->ClusterSize() ) {
1859     const BasicCluster *ib =pfsc->Cluster(iclus);
1860    
1861     epfbcs[iclus] = ib->Energy();
1862     etapfbcs[iclus] = ib->Eta();
1863     phipfbcs[iclus] = ib->Phi();
1864     ietapfbcs[iclus] = ib->IEta();
1865     iphipfbcs[iclus] = ib->IPhi();
1866     ixpfbcs[iclus] = ib->IX();
1867     iypfbcs[iclus] = ib->IY();
1868     etacrypfbcs[iclus] = ib->EtaCry();
1869     phicrypfbcs[iclus] = ib->PhiCry();
1870     xcrypfbcs[iclus] = ib->XCry();
1871     ycrypfbcs[iclus] = ib->YCry();
1872     sigietaietapfbcs[iclus] = TMath::Sqrt(ib->CoviEtaiEta());
1873     sigiphiphipfbcs[iclus] = TMath::Sqrt(ib->CoviPhiiPhi());
1874     covietaiphipfbcs[iclus] = ib->CoviEtaiPhi();
1875     sigetaetapfbcs[iclus] = TMath::Sqrt(ib->CovEtaEta());
1876     sigphiphipfbcs[iclus] = TMath::Sqrt(ib->CovPhiPhi());
1877     covetaphipfbcs[iclus] = ib->CovEtaPhi();
1878     e3x3pfbcs[iclus] = ib->E3x3();
1879     e5x5pfbcs[iclus] = ib->E5x5();
1880     emaxpfbcs[iclus] = ib->EMax();
1881     e2ndpfbcs[iclus] = ib->E2nd();
1882     etoppfbcs[iclus] = ib->ETop();
1883     ebottompfbcs[iclus] = ib->EBottom();
1884     eleftpfbcs[iclus] = ib->ELeft();
1885     erightpfbcs[iclus] = ib->ERight();
1886     e1x3pfbcs[iclus] = ib->E1x3();
1887     e3x1pfbcs[iclus] = ib->E3x1();
1888     e1x5pfbcs[iclus] = ib->E1x5();
1889     e2x2pfbcs[iclus] = ib->E2x2();
1890     e4x4pfbcs[iclus] = ib->E4x4();
1891     e2x5maxpfbcs[iclus] = ib->E2x5Max();
1892     e2x5toppfbcs[iclus] = ib->E2x5Top();
1893     e2x5bottompfbcs[iclus] = ib->E2x5Bottom();
1894     e2x5leftpfbcs[iclus] = ib->E2x5Left();
1895     e2x5rightpfbcs[iclus] = ib->E2x5Right();
1896     nhitspfbcs[iclus]= ib->NHits();
1897     }
1898     else {
1899     epfbcs[iclus] = -999;
1900     etapfbcs[iclus] = -999;
1901     phipfbcs[iclus] = -999;
1902     ietapfbcs[iclus] = -999;
1903     iphipfbcs[iclus] = -999;
1904     ixpfbcs[iclus] = -999;
1905     iypfbcs[iclus] = -999;
1906     etacrypfbcs[iclus] = -999;
1907     phicrypfbcs[iclus] = -999;
1908     xcrypfbcs[iclus] = -999;
1909     ycrypfbcs[iclus] = -999;
1910     sigietaietapfbcs[iclus] = -999;
1911     sigiphiphipfbcs[iclus] = -999;
1912     covietaiphipfbcs[iclus] = -999;
1913     sigetaetapfbcs[iclus] = -999;
1914     sigphiphipfbcs[iclus] = -999;
1915     covetaphipfbcs[iclus] = -999;
1916     e3x3pfbcs[iclus] = -999;
1917     e5x5pfbcs[iclus] = -999;
1918     emaxpfbcs[iclus] = -999;
1919     e2ndpfbcs[iclus] = -999;
1920     etoppfbcs[iclus] = -999;
1921     ebottompfbcs[iclus] = -999;
1922     eleftpfbcs[iclus] = -999;
1923     erightpfbcs[iclus] = -999;
1924     e1x3pfbcs[iclus] = -999;
1925     e3x1pfbcs[iclus] = -999;
1926     e1x5pfbcs[iclus] = -999;
1927     e2x2pfbcs[iclus] = -999;
1928     e4x4pfbcs[iclus] = -999;
1929     e2x5maxpfbcs[iclus] = -999;
1930     e2x5toppfbcs[iclus] = -999;
1931     e2x5bottompfbcs[iclus] = -999;
1932     e2x5leftpfbcs[iclus] = -999;
1933     e2x5rightpfbcs[iclus] = -999;
1934     nhitspfbcs[iclus] = -999;
1935     }
1936     }
1937    
1938     for (UInt_t iclus=0; iclus<100; ++iclus) {
1939     if (fillclusterarrays && pfsc && iclus < pfsc->NPsClusts() ) {
1940     const PsCluster *ib = pfsc->PsClust(iclus);
1941    
1942     epsc[iclus] = ib->Energy();
1943     etapsc[iclus] = ib->Eta();
1944     phipsc[iclus] = ib->Phi();
1945     planepsc[iclus] = ib->PsPlane();
1946     }
1947     else {
1948     epsc[iclus] = -999;
1949     etapsc[iclus] = -999;
1950     phipsc[iclus] = -999;
1951     planepsc[iclus] = 0;
1952     }
1953     }
1954    
1955 paus 1.12 //initialize photon energy corrections if needed
1956     /*if (!PhotonFix::initialised()) {
1957     PhotonFix::initialise("4_2",std::string((gSystem->Getenv("CMSSW_BASE") + TString("/src/MitPhysics/data/PhotonFix.dat")).Data()));
1958     }*/
1959    
1960     phfixph.setup(e,sceta,scphi,r9);
1961     phfixele.setup(e,sceta,scphi,r9);
1962    
1963     const Float_t dval = -99.;
1964     ecor = phfixph.fixedEnergy();
1965     ecorerr = phfixph.sigmaEnergy();
1966     ecorele = phfixele.fixedEnergy();
1967     ecoreleerr = phfixele.sigmaEnergy();
1968     if (phfixph.isbarrel()) {
1969     etac = phfixph.etaC();
1970     etas = phfixph.etaS();
1971     etam = phfixph.etaM();
1972     phic = phfixph.phiC();
1973     phis = phfixph.phiS();
1974     phim = phfixph.phiM();
1975     xz = dval;
1976     xc = dval;
1977     xs = dval;
1978     xm = dval;
1979     yz = dval;
1980     yc = dval;
1981     ys = dval;
1982     ym = dval;
1983     }
1984     else {
1985     etac = dval;
1986     etas = dval;
1987     etam = dval;
1988     phic = dval;
1989     phis = dval;
1990     phim = dval;
1991     xz = phfixph.xZ();
1992     xc = phfixph.xC();
1993     xs = phfixph.xS();
1994     xm = phfixph.xM();
1995     yz = phfixph.yZ();
1996     yc = phfixph.yC();
1997     ys = phfixph.yS();
1998     ym = phfixph.yM();
1999     }
2000    
2001     if (c) {
2002     hasconversion = kTRUE;
2003     convp = c->P();
2004     convpt = c->Pt();
2005     conveta = c->Eta();
2006     convphi = c->Phi();
2007     ThreeVector dirconvsc = ThreeVector(s->Point()) - c->Position();
2008     convdeta = c->Eta() - dirconvsc.Eta();
2009     convdphi = MathUtils::DeltaPhi(c->Phi(),dirconvsc.Phi());
2010     convvtxrho = c->Position().Rho();
2011     convvtxz = c->Position().Z();
2012     convvtxphi = c->Position().Phi();
2013    
2014     const StableData *leadsd = dynamic_cast<const StableData*>(c->DaughterDat(0));
2015     const StableData *trailsd = dynamic_cast<const StableData*>(c->DaughterDat(1));
2016     if (leadsd->Pt()<trailsd->Pt()) {
2017     const StableData *sdtmp = leadsd;
2018     leadsd = trailsd;
2019     trailsd = sdtmp;
2020     }
2021    
2022     const Track *leadtrack = dynamic_cast<const StableParticle*>(leadsd->Original())->Trk();
2023     const Track *trailtrack = dynamic_cast<const StableParticle*>(trailsd->Original())->Trk();
2024    
2025     convleadpt = leadsd->Pt();
2026     convtrailpt = trailsd->Pt();
2027     convleadtrackpt = leadtrack->Pt();
2028     convleadtrackalgo = leadtrack->Algo();
2029     if (convleadtrackalgo==29) convleadtrackalgos=2; //gsf track
2030     else if (convleadtrackalgo==15 ||convleadtrackalgo==16) convleadtrackalgos=1; //ecal-seeded track
2031     else convleadtrackalgos = 0; //std iterative track
2032     convleadtrackcharge = leadtrack->Charge();
2033     convtrailtrackpt = trailtrack->Pt();
2034     convtrailtrackalgo = trailtrack->Algo();
2035     if (convtrailtrackalgo==29) convtrailtrackalgos=2; //gsf track
2036     else if (convtrailtrackalgo==15 ||convtrailtrackalgo==16) convtrailtrackalgos=1; //ecal-seeded track
2037     else convtrailtrackalgos = 0; //std iterative track
2038     trailtrackcharge = trailtrack->Charge();
2039     }
2040     else {
2041     hasconversion = kFALSE;
2042     convp = -99.;
2043     convpt = -99.;
2044     conveta = -99.;
2045     convphi = -99.;
2046     convdeta = -99.;
2047     convdphi = -99.;
2048     convvtxrho = -99.;
2049     convvtxz = -999.;
2050     convvtxphi = -99.;
2051     convleadpt = -99.;
2052     convtrailpt = -99.;
2053     convleadtrackpt = -99.;
2054     convleadtrackalgo = -99;
2055     convleadtrackalgos = -99;
2056     convleadtrackcharge = 0;
2057     convtrailtrackpt = -99.;
2058     convtrailtrackalgo = -99;
2059     convtrailtrackalgos = -99;
2060     trailtrackcharge = 0;
2061     }
2062    
2063     //electron quantities
2064     if (ele) {
2065     haselectron = kTRUE;
2066     eleisecaldriven = ele->IsEcalDriven();
2067     eleistrackerdriven = ele->IsTrackerDriven();
2068     elee = ele->E();
2069     elept = ele->Pt();
2070     eleeta = ele->Eta();
2071     elephi = ele->Phi();
2072     elecharge = ele->Charge();
2073     elefbrem = ele->FBrem();
2074     eledeta = ele->DeltaEtaSuperClusterTrackAtVtx();
2075     eledphi = ele->DeltaPhiSuperClusterTrackAtVtx();
2076     elep = s->Energy()/ele->ESuperClusterOverP();
2077     elepin = ele->PIn();
2078     elepout = ele->POut();
2079     }
2080     else {
2081     haselectron = kFALSE;
2082     eleisecaldriven = kFALSE;
2083     eleistrackerdriven = kFALSE;
2084     elee = -99.;
2085     elept = -99.;
2086     eleeta = -99.;
2087     elephi = -99.;
2088     elecharge = -99;
2089     elefbrem = -99.;
2090     eledeta = -99.;
2091     eledphi = -99.;
2092     elep = -99.;
2093     elepin = -99.;
2094     elepout = -99.;
2095     }
2096    
2097     //pf supercluster quantities
2098     if (pfsc) {
2099     haspfsc = kTRUE;
2100     pfsce = pfsc->Energy();
2101     pfscrawe = pfsc->RawEnergy();
2102     pfsceta = pfsc->Eta();
2103     pfscphi = pfsc->Phi();
2104 bendavid 1.20 pfscnclusters = pfsc->NClusters();
2105     pfscnhits = pfsc->NHits();
2106     pfscetawidth = pfsc->EtaWidth();
2107     pfscphiwidth = pfsc->PhiWidth();
2108     pfscnpsclusters = pfsc->NPsClusts();
2109 paus 1.12 }
2110     else {
2111     haspfsc = kFALSE;
2112     pfsce = -99.;
2113     pfscrawe = -99.;
2114     pfsceta = -99.;
2115     pfscphi = -99.;
2116 bendavid 1.20 pfscnclusters = 0;
2117     pfscnhits = 0;
2118     pfscetawidth = -99.;
2119     pfscphiwidth = -99.;
2120     pfscnpsclusters = 0;
2121 paus 1.12 }
2122    
2123     genz = -99.;
2124     if (m) {
2125     ispromptgen = kTRUE;
2126     gene = m->E();
2127     genpt = m->Pt();
2128     geneta = m->Eta();
2129     genphi = m->Phi();
2130     const MCParticle *mm = m->DistinctMother();
2131     if (mm) genz = mm->DecayVertex().Z();
2132     pdgid = m->PdgId();
2133     if (mm) motherpdgid = mm->PdgId();
2134     else motherpdgid = -99;
2135     }
2136     else {
2137     ispromptgen = kFALSE;
2138     gene = -99.;
2139     genpt = -99.;
2140     geneta = -99.;
2141     genphi = -99.;
2142     pdgid = -99;
2143     motherpdgid = -99;
2144     }
2145 bendavid 1.1 }
2146 bendavid 1.22
2147     void PhotonTreeWriterVtx::SetVars(const Vertex *v, const Photon *p1, const Photon *p2, const PFCandidateCol *pfcands, Int_t idx, Int_t numvtx, Float_t genvtxz)
2148     {
2149    
2150     //printf("start\n");
2151    
2152     n = idx;
2153     nvtx = numvtx;
2154     zgen = genvtxz;
2155    
2156     x = v->X();
2157     y = v->Y();
2158     z = v->Z();
2159    
2160     Double_t dsumpt = 0.;
2161     Double_t dsumptsq = 0.;
2162    
2163     nchalltoward = 0;
2164     nchalltransverse = 0;
2165     nchallaway = 0;
2166     nchcuttoward = 0;
2167     nchcuttransverse = 0;
2168     nchcutaway = 0;
2169    
2170     ThreeVector vtxmom;
2171    
2172     //printf("mom\n");
2173     FourVectorM diphoton = p1->MomVtx(v->Position()) + p2->MomVtx(v->Position());
2174     //printf("done mom\n");
2175     ptgg = diphoton.Pt();
2176     phigg = diphoton.Phi();
2177     etagg = diphoton.Eta();
2178     mgg = diphoton.M();
2179     pxgg = diphoton.Px();
2180     pygg = diphoton.Py();
2181     pzgg = diphoton.Pz();
2182    
2183     //printf("loop\n");
2184    
2185     for (UInt_t i = 0; i<pfcands->GetEntries(); ++i) {
2186     const PFCandidate *pfc = pfcands->At(i);
2187     if (pfc->PFType()!=PFCandidate::eHadron || !pfc->HasTrackerTrk()) continue;
2188     if (TMath::Abs( pfc->TrackerTrk()->DzCorrected(*v) ) > 0.2) continue;
2189     if (TMath::Abs( pfc->TrackerTrk()->D0Corrected(*v) ) > 0.1) continue;
2190    
2191     vtxmom += ThreeVector(pfc->Px(),pfc->Py(),pfc->Pz());
2192    
2193     dsumpt += pfc->Pt();
2194     dsumptsq += pfc->Pt()*pfc->Pt();
2195    
2196     Double_t dphi = TMath::Abs(MathUtils::DeltaPhi(*pfc,diphoton));
2197     if (dphi<(TMath::Pi()/3.0)) {
2198     ++nchalltoward;
2199     if (pfc->Pt()>0.5) ++nchcuttoward;
2200     }
2201     else if (dphi>(2.0*TMath::Pi()/3.0)) {
2202     ++nchallaway;
2203     if (pfc->Pt()>0.5) ++nchcutaway;
2204     }
2205     else {
2206     ++nchalltransverse;
2207     if (pfc->Pt()>0.5) ++nchcuttransverse;
2208     }
2209    
2210     }
2211    
2212     //printf("doneloop\n");
2213    
2214    
2215     sumpt = dsumpt;
2216     sumptsq = dsumptsq;
2217    
2218     pt = vtxmom.Rho();
2219     phi = vtxmom.Phi();
2220     eta = vtxmom.Eta();
2221     px = vtxmom.X();
2222     py = vtxmom.Y();
2223     pz = vtxmom.Z();
2224    
2225     //printf("done\n");
2226    
2227     return;
2228    
2229     }