ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/src/HistosTaus.cc
Revision: 1.10
Committed: Wed Jun 9 14:34:18 2010 UTC (14 years, 11 months ago) by amagnan
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.9: +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 amagnan 1.6 #include "Math/VectorUtil.h"
5    
6 amagnan 1.2 #include "FWCore/MessageLogger/interface/MessageLogger.h"
7    
8 amagnan 1.1 #include "DataFormats/TauReco/interface/PFTau.h"
9 amagnan 1.2 #include "DataFormats/TauReco/interface/CaloTau.h"
10 amagnan 1.1
11    
12     #include "UserCode/HbbAnalysis/interface/HistosTaus.hh"
13    
14     namespace HbbAnalysis {//namespace
15    
16 amagnan 1.4 void HistosTaus::FillEventHistograms(const edm::Handle<std::vector<pat::Tau> > & aCol){
17 amagnan 1.2
18     if (doGenMatched_) {
19     unsigned int nMatched = 0;
20     for (std::vector<pat::Tau>::const_iterator iTau = aCol->begin();
21     iTau != aCol->end();
22     iTau++)
23     {
24     if (MatchesGenTau(*iTau)) nMatched++;
25     }
26     p_nTaus->Fill(nMatched);
27     }
28     else p_nTaus->Fill(aCol->size());
29    
30     }
31    
32 amagnan 1.4 void HistosTaus::FillHistograms(const pat::Tau & aTau, const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices, bool isLead){//FillHistograms
33 amagnan 1.1
34 amagnan 1.2 bool lIsGenMatched = !doGenMatched_ || (doGenMatched_ && MatchesGenTau(aTau));
35     if (lIsGenMatched) {//genMatched
36     if (isLead) {
37     if ( aTau.leadTrack().isAvailable() && aTau.leadTrack().isNonnull() ) {
38     p_leadTrk_pT->Fill(aTau.leadTrack()->pt());
39     p_leadTrk_eta->Fill(aTau.leadTrack()->eta());
40     p_leadTrk_phi->Fill(aTau.leadTrack()->phi());
41 amagnan 1.1
42 amagnan 1.2 p_leadTrk_matchDist->Fill(reco::deltaR(aTau.leadTrack()->momentum(), aTau.p4()));
43    
44     if ( aRecoVertices->size() >= 1 ) {
45     const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
46     p_leadTrk_IPxy->Fill(aTau.leadTrack()->dxy(thePrimaryEventVertex.position()));
47     p_leadTrk_IPz->Fill(aTau.leadTrack()->dz(thePrimaryEventVertex.position()));
48     }
49     }
50    
51     p_nIsolationTracks->Fill(aTau.isolationTracks().size());
52    
53     p_nSignalTracks->Fill(aTau.signalTracks().size());
54    
55     if (aTau.genJet()) {
56     p_genJet_pT->Fill(aTau.genJet()->pt());
57     p_genJet_eta->Fill(aTau.genJet()->eta());
58     p_genJet_phi->Fill(aTau.genJet()->phi());
59 amagnan 1.6 p_deltaRGenJet->Fill(ROOT::Math::VectorUtil::DeltaR(aTau.p4(),aTau.genJet()->p4()));
60 amagnan 1.2 }
61    
62     const std::vector<std::pair<std::string,float> > & lIDs = aTau.tauIDs();
63    
64     bool lPrint = false;
65     //a few warning if additional discriminants are found:
66     if ((aTau.isPFTau() && lIDs.size() != 7) ||
67     (aTau.isCaloTau() && lIDs.size() != 3))
68     lPrint = true;
69    
70     if (lPrint) {
71     std::cout << "!!!!!!! Discriminants changed, please update histograms !!!!!!!" << std::endl;
72     std::cout << "--- isCaloTau = " << aTau.isCaloTau() << ", isPFTau = " << aTau.isPFTau() << std::endl;
73     std::cout << "------ ID names = " << std::endl;
74     }
75     for (unsigned int id(0); id<lIDs.size(); id++){
76    
77     std::string lName = lIDs.at(id).first;
78     float lDiscri = lIDs.at(id).second;
79    
80     if (lPrint) std::cout << "--------- " << lName << " = " << lDiscri << std::endl;
81    
82     //pf
83     if (aTau.isPFTau()) {
84     if (lName.find("leadingTrackFinding") != lName.npos) p_pfTauID_ByLeadingTrackFinding->Fill(lDiscri);
85     if (lName.find("leadingTrackPtCut") != lName.npos) p_pfTauID_ByLeadingTrackPtCut->Fill(lDiscri);
86     if (lName.find("trackIsolation") != lName.npos) p_pfTauID_ByTrackIsolation->Fill(lDiscri);
87     if (lName.find("ecalIsolation") != lName.npos) p_pfTauID_ByECALIsolation->Fill(lDiscri);
88     if (lName.find("byIsolation") != lName.npos) p_pfTauID_ByIsolation->Fill(lDiscri);
89     if (lName.find("againstElectron") != lName.npos) p_pfTauID_AgainstElectron->Fill(lDiscri);
90     if (lName.find("againstMuon") != lName.npos) p_pfTauID_AgainstMuon->Fill(lDiscri);
91     }
92     if (aTau.isCaloTau()){
93     if (lName.find("byIsolation") != lName.npos) p_caloTauID_ByIsolation->Fill(lDiscri);
94     if (lName.find("leadingTrackFinding") != lName.npos) p_caloTauID_ByLeadingTrackFinding->Fill(lDiscri);
95     if (lName.find("leadingTrackPtCut") != lName.npos) p_caloTauID_ByLeadingTrackPtCut->Fill(lDiscri);
96     }
97    
98     }
99    
100     if (aTau.isCaloTau()) {//caloTaus
101     p_tauType->Fill(0);
102    
103     //for calo taus
104     p_leadTracksignedSipt->Fill(aTau.leadTracksignedSipt());
105     p_leadTrackHCAL3x3hitsEtSum->Fill(aTau.leadTrackHCAL3x3hitsEtSum());
106     p_leadTrackHCAL3x3hottesthitDEta->Fill(aTau.leadTrackHCAL3x3hottesthitDEta());
107     p_signalTracksInvariantMass->Fill(aTau.signalTracksInvariantMass());
108     p_TracksInvariantMass->Fill(aTau.TracksInvariantMass());
109     p_isolationTracksPtSum->Fill(aTau.isolationTracksPtSum());
110     p_isolationECALhitsEtSum->Fill(aTau.isolationECALhitsEtSum());
111     p_maximumHCALhitEt->Fill(aTau.maximumHCALhitEt());
112    
113     }//caloTaus
114    
115     //for PF taus
116     if (aTau.isPFTau()) {//pfTaus
117     p_tauType->Fill(1);
118    
119    
120     if ( aTau.leadPFChargedHadrCand().isAvailable() && aTau.leadPFChargedHadrCand().isNonnull() ) {
121     p_leadPFChargedHadrCand_pT->Fill(aTau.leadPFChargedHadrCand()->pt());
122     p_leadPFChargedHadrCand_eta->Fill(aTau.leadPFChargedHadrCand()->eta());
123     p_leadPFChargedHadrCand_phi->Fill(aTau.leadPFChargedHadrCand()->phi());
124     }
125    
126     p_leadPFChargedHadrCandsignedSipt->Fill(aTau.leadPFChargedHadrCandsignedSipt());
127     p_nSignalPFCands->Fill(aTau.signalPFCands().size());
128     p_nSignalPFChargedHadrCands->Fill(aTau.signalPFChargedHadrCands().size());
129     p_nSignalPFNeutrHadrCands->Fill(aTau.signalPFNeutrHadrCands().size());
130     p_nSignalPFGammaCands->Fill(aTau.signalPFGammaCands().size());
131     p_nIsolationPFCands->Fill(aTau.isolationPFCands().size());
132     p_nIsolationPFChargedHadrCands->Fill(aTau.isolationPFChargedHadrCands().size());
133     p_nIsolationPFNeutrHadrCands->Fill(aTau.isolationPFNeutrHadrCands().size());
134     p_nIsolationPFGammaCands->Fill(aTau.isolationPFGammaCands().size());
135    
136     p_isolationPFChargedHadrCandsPtSum->Fill(aTau.isolationPFChargedHadrCandsPtSum());
137     p_isolationPFGammaCandsEtSum->Fill(aTau.isolationPFGammaCandsEtSum());
138     p_maximumHCALPFClusterEt->Fill(aTau.maximumHCALPFClusterEt());
139     p_emFraction->Fill(aTau.emFraction());
140     p_hcalTotOverPLead->Fill(aTau.hcalTotOverPLead());
141     p_hcalMaxOverPLead->Fill(aTau.hcalMaxOverPLead());
142     p_hcal3x3OverPLead->Fill(aTau.hcal3x3OverPLead());
143     p_ecalStripSumEOverPLead->Fill(aTau.ecalStripSumEOverPLead());
144     p_bremsRecoveryEOverPLead->Fill(aTau.bremsRecoveryEOverPLead());
145    
146     if ( aTau.electronPreIDTrack().isAvailable() && aTau.electronPreIDTrack().isNonnull() ) {
147     p_electronPreIDTrack_pT->Fill(aTau.electronPreIDTrack()->pt());
148     p_electronPreIDTrack_eta->Fill(aTau.electronPreIDTrack()->eta());
149     p_electronPreIDTrack_phi->Fill(aTau.electronPreIDTrack()->phi());
150     }
151    
152     p_electronPreIDOutput->Fill(aTau.electronPreIDOutput());
153     p_electronPreIDDecision->Fill(aTau.electronPreIDDecision());
154     p_caloComp->Fill(aTau.caloComp());
155     p_segComp->Fill(aTau.segComp());
156     p_muonDecision->Fill(aTau.muonDecision());
157    
158 amagnan 1.7 //std::cout << "CaloComp = " << aTau.caloComp() << ", segComp = " << aTau.segComp() << ", bremRec = " << aTau.bremsRecoveryEOverPLead() << ", elecPredIDoutput " << aTau.electronPreIDOutput() << std::endl;
159    
160    
161 amagnan 1.2 p_particleIso->Fill(aTau.particleIso());
162 amagnan 1.9 p_chargedParticleIso->Fill(aTau.chargedHadronIso());
163     p_neutralParticleIso->Fill(aTau.neutralHadronIso());
164     p_gammaParticleIso->Fill(aTau.photonIso());
165 amagnan 1.1
166 amagnan 1.2 }//pfTaus
167    
168    
169 amagnan 1.5 FillBaseHistograms(aTau.pt(),aTau.eta(),aTau.phi(),aTau.charge());
170 amagnan 1.2
171     }//isLead
172     }//genMatched
173    
174     }//FillHistograms
175    
176     bool HistosTaus::MatchesGenTau(const pat::Tau& aPatTau)
177     {
178    
179     bool isGenMatched = false;
180    
181     const std::vector<reco::GenParticleRef> & lVec = aPatTau.genParticleRefs();
182 amagnan 1.6
183     if (lVec.size() == 0) return (aPatTau.genJet());
184    
185 amagnan 1.2 for ( std::vector<reco::GenParticleRef>::const_iterator it = lVec.begin();
186     it != lVec.end(); ++it ) {
187     if ( it->ref().isNonnull() && it->ref().isValid() ) {
188     const reco::GenParticleRef & genParticle = (*it);
189     if ( genParticle->pdgId() == -15 || genParticle->pdgId() == +15 ) isGenMatched = true;
190     } else {
191     edm::LogWarning("MatchesGenTau") << " edm::Ref of genParticle associated to pat::Tau is invalid !!";
192 amagnan 1.6 return (aPatTau.genJet());
193 amagnan 1.1 }
194     }
195 amagnan 1.2 return isGenMatched;
196     }
197 amagnan 1.1
198     }//namespace
199    
200