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
Error occurred while calculating annotation data.
Log Message:
clean up histogram code, moved to analysis in UserCode/amagnan

File Contents

# Content
1 #include <iostream>
2 #include <fstream>
3
4 #include "Math/VectorUtil.h"
5
6 #include "FWCore/MessageLogger/interface/MessageLogger.h"
7
8 #include "DataFormats/TauReco/interface/PFTau.h"
9 #include "DataFormats/TauReco/interface/CaloTau.h"
10
11
12 #include "UserCode/HbbAnalysis/interface/HistosTaus.hh"
13
14 namespace HbbAnalysis {//namespace
15
16 void HistosTaus::FillEventHistograms(const edm::Handle<std::vector<pat::Tau> > & aCol){
17
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 void HistosTaus::FillHistograms(const pat::Tau & aTau, const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices, bool isLead){//FillHistograms
33
34 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
42 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 p_deltaRGenJet->Fill(ROOT::Math::VectorUtil::DeltaR(aTau.p4(),aTau.genJet()->p4()));
60 }
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 //std::cout << "CaloComp = " << aTau.caloComp() << ", segComp = " << aTau.segComp() << ", bremRec = " << aTau.bremsRecoveryEOverPLead() << ", elecPredIDoutput " << aTau.electronPreIDOutput() << std::endl;
159
160
161 p_particleIso->Fill(aTau.particleIso());
162 p_chargedParticleIso->Fill(aTau.chargedHadronIso());
163 p_neutralParticleIso->Fill(aTau.neutralHadronIso());
164 p_gammaParticleIso->Fill(aTau.photonIso());
165
166 }//pfTaus
167
168
169 FillBaseHistograms(aTau.pt(),aTau.eta(),aTau.phi(),aTau.charge());
170
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
183 if (lVec.size() == 0) return (aPatTau.genJet());
184
185 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 return (aPatTau.genJet());
193 }
194 }
195 return isGenMatched;
196 }
197
198 }//namespace
199
200