ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/src/HistosElecs.cc
Revision: 1.8
Committed: Wed Jun 9 14:34:17 2010 UTC (14 years, 11 months ago) by amagnan
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.7: +0 -0 lines
State: FILE REMOVED
Log Message:
clean up histogram code, moved to analysis in UserCode/amagnan

File Contents

# User Rev Content
1 amagnan 1.1 #include <iostream>
2     #include <fstream>
3    
4     #include "UserCode/HbbAnalysis/interface/HistosElecs.hh"
5    
6     namespace HbbAnalysis {//namespace
7    
8 amagnan 1.5 void HistosElecs::FillEventHistograms(const edm::Handle<std::vector<pat::Electron> > & aCol){
9 amagnan 1.2
10     if (doGenMatched_) {
11     unsigned int nMatched = 0;
12     for (std::vector<pat::Electron>::const_iterator iElec = aCol->begin();
13     iElec != aCol->end();
14     iElec++)
15     {
16     if (MatchesGenElectron(*iElec)) nMatched++;
17     }
18     p_nElectrons->Fill(nMatched);
19     }
20     else p_nElectrons->Fill(aCol->size());
21    
22     }
23    
24 amagnan 1.5 void HistosElecs::FillHistograms(const pat::Electron & aElec, const edm::Handle<std::vector<reco::Vertex> >& aRecoVertices, bool isLead){//FillHistograms
25 amagnan 1.1
26 amagnan 1.2 bool lIsGenMatched = !doGenMatched_ || (doGenMatched_ && MatchesGenElectron(aElec));
27     if (lIsGenMatched) {//genMatched
28     if (isLead) {//isLead
29 amagnan 1.6 FillBaseHistograms(aElec.pt(),aElec.eta(),aElec.phi(),aElec.charge());
30 amagnan 1.1
31 amagnan 1.3 if ( aElec.gsfTrack().isAvailable() && !aElec.gsfTrack().isNull() ) {
32     p_gsfTrk_pT->Fill(aElec.gsfTrack()->pt());
33     if ( aRecoVertices->size() >= 1 ) {
34     const reco::Vertex & thePrimaryEventVertex = (*aRecoVertices->begin());
35     p_gsfTrk_IPxy->Fill(aElec.gsfTrack()->dxy(thePrimaryEventVertex.position()));
36     p_gsfTrk_IPz->Fill(aElec.gsfTrack()->dz(thePrimaryEventVertex.position()));
37     }
38     }
39    
40     std::vector<std::pair<std::string,float> > lIds = aElec.electronIDs();
41     if (lIds.size() > 5) std::cout << "--- WARNING: histo will be out-of-range, number of electron IDs = " << lIds.size() << std::endl;
42     for (unsigned int iId(0); iId<lIds.size(); iId++){
43     const std::string & lName = lIds.at(iId).first;
44 amagnan 1.4 //std::cout << "--- ElectronID : Bin " << iId << ", id name = " << lName << std::endl;
45 amagnan 1.3 if (aElec.isElectronIDAvailable(lName)){
46     p_electronID->Fill(2*iId+aElec.electronID(lName));
47     assert (aElec.electronID(lName) == lIds.at(iId).second);
48     }
49     }
50    
51     p_scSigmaEtaEta->Fill(aElec.scSigmaEtaEta());
52     p_scSigmaIEtaIEta->Fill(aElec.scSigmaIEtaIEta());
53     p_scE1x5->Fill(aElec.scE1x5());
54     p_scE2x5Max->Fill(aElec.scE2x5Max());
55     p_scE5x5->Fill(aElec.scE5x5());
56    
57 amagnan 1.6 p_eSuperClusterOverP->Fill(aElec.eSuperClusterOverP());
58    
59     p_HoverE->Fill(aElec.hadronicOverEm());
60     p_deltaPhiIn->Fill(aElec.deltaPhiSuperClusterTrackAtVtx());
61     p_deltaEtaIn->Fill(aElec.deltaEtaSuperClusterTrackAtVtx());
62    
63 amagnan 1.4 if (aElec.scE5x5() > 0) {
64     p_scE1x5OverscE5x5->Fill(aElec.scE1x5()/aElec.scE5x5());
65     p_scE2x5MaxOverscE5x5->Fill(aElec.scE2x5Max()/aElec.scE5x5());
66     }
67    
68 amagnan 1.3 p_caloIso->Fill(aElec.caloIso());
69     p_hcalIso->Fill(aElec.hcalIso());
70    
71 amagnan 1.6 double lIsoVar[6] = {
72     aElec.trackIso(),
73     aElec.trackIso()/aElec.et(),
74     aElec.ecalIso(),
75     aElec.ecalIso()/aElec.et(),
76     aElec.trackIso()+aElec.ecalIso()+aElec.hcalIso(),
77     (aElec.trackIso()+aElec.ecalIso()+aElec.hcalIso())/aElec.et()
78     };
79    
80     p_trackIso->Fill(lIsoVar[0]);
81     p_trackIsoOverEt->Fill(lIsoVar[1]);
82     p_ecalIso->Fill(lIsoVar[2]);
83     p_ecalIsoOverEt->Fill(lIsoVar[3]);
84     p_combIso->Fill(lIsoVar[4]);
85     p_combIsoOverEt->Fill(lIsoVar[5]);
86    
87     double lIsoCut[6] = {1.,0.1,4.,0.1,5.,0.2};
88    
89     for (unsigned int i(0); i<6; i++){//loop on iso variables
90    
91     for (unsigned int lBin(0); lBin<isoEff_[i].numberOfBins(); lBin++){
92     double lCut = isoEff_[i].xMin()+isoEff_[i].stepSize()*lBin;
93    
94     isoEff_[i].incrementTotal(lBin);
95     if (lIsoVar[i] <= lCut){
96     isoEff_[i].incrementPass(lBin);
97     }
98     }
99    
100     //eff vs pT
101     for (unsigned int lBin(0); lBin<isoEffEt_[i].numberOfBins(); lBin++){
102     double lCutMin = isoEffEt_[i].xMin()+isoEffEt_[i].stepSize()*lBin;
103     double lCutMax = isoEffEt_[i].xMin()+isoEffEt_[i].stepSize()*(lBin+1);
104    
105     if (aElec.et() >= lCutMin && aElec.et() < lCutMax){
106     isoEffEt_[i].incrementTotal(lBin);
107    
108     if (lIsoVar[i] <= lIsoCut[i]){
109     isoEffEt_[i].incrementPass(lBin);
110     }
111     }
112     }
113    
114     //eff vs eta
115     for (unsigned int lBin(0); lBin<isoEffEta_[i].numberOfBins(); lBin++){
116     double lCutMin = isoEffEta_[i].xMin()+isoEffEta_[i].stepSize()*lBin;
117     double lCutMax = isoEffEta_[i].xMin()+isoEffEta_[i].stepSize()*(lBin+1);
118    
119     if (aElec.eta() >= lCutMin && aElec.eta() < lCutMax){
120     isoEffEta_[i].incrementTotal(lBin);
121    
122     if (lIsoVar[i] <= lIsoCut[i]){
123     isoEffEta_[i].incrementPass(lBin);
124     }
125     }
126     }
127    
128    
129     }//loop on iso variables
130    
131    
132 amagnan 1.3
133 amagnan 1.2 }//isLead
134     }//genMatched
135 amagnan 1.1
136     }//FillHistograms
137    
138 amagnan 1.2 bool HistosElecs::MatchesGenElectron(const pat::Electron& aPatElec)
139     {
140    
141     bool isGenMatched = false;
142    
143     const std::vector<reco::GenParticleRef> & lVec = aPatElec.genParticleRefs();
144     for ( std::vector<reco::GenParticleRef>::const_iterator it = lVec.begin();
145     it != lVec.end(); ++it ) {
146     if ( it->ref().isNonnull() && it->ref().isValid() ) {
147     const reco::GenParticleRef & genParticle = (*it);
148     if ( genParticle->pdgId() == -11 || genParticle->pdgId() == +11 ) isGenMatched = true;
149     } else {
150     edm::LogWarning("MatchesGenElectron") << " edm::Ref of genParticle associated to pat::Electron is invalid !!";
151     }
152     }
153     return isGenMatched;
154     }
155    
156 amagnan 1.1 }//namespace
157    
158