ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerPFTaus.cc
Revision: 1.17
Committed: Wed Dec 26 16:07:08 2012 UTC (12 years, 4 months ago) by mhchan
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_032, Mit_031, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, HEAD
Changes since 1.16: +87 -78 lines
Error occurred while calculating annotation data.
Log Message:
Fill MVA2ElectronRejection, MVA3ElectronRejection, and CombinedIsolationDBSumPtCorr3Hits.

File Contents

# Content
1 // $Id: FillerPFTaus.cc,v 1.16 2012/04/11 16:36:43 mhchan Exp $
2
3 #include "MitProd/TreeFiller/interface/FillerPFTaus.h"
4 #include "DataFormats/Common/interface/RefToPtr.h"
5 #include "DataFormats/TauReco/interface/PFTau.h"
6 #include "DataFormats/TauReco/interface/PFTauFwd.h"
7 #include "MitAna/DataTree/interface/Names.h"
8 #include "MitAna/DataTree/interface/PFTauCol.h"
9 #include "MitProd/ObjectService/interface/ObjectService.h"
10
11 using namespace std;
12 using namespace edm;
13 using namespace mithep;
14
15 //--------------------------------------------------------------------------------------------------
16 FillerPFTaus::FillerPFTaus(const ParameterSet &cfg, const char *name, bool active) :
17 BaseFiller(cfg,name,active),
18 hpsActive_(Conf().getUntrackedParameter<bool>("hpsActive", false)),
19 edmName_(Conf().getUntrackedParameter<string>("edmName","")),
20 mitName_(Conf().getUntrackedParameter<string>("mitName",Names::gkPFTauBrn)),
21 trackMapNames_(Conf().exists("trackMapNames") ?
22 Conf().getUntrackedParameter<vector<string> >("trackMapNames") :
23 vector<string>()),
24 jetMapName_(Conf().getUntrackedParameter<string>("jetMapName","JetMapName")),
25 pfCandMapName_(Conf().getUntrackedParameter<string>("pfCandMapName","")),
26 tauMapName_(Conf().getUntrackedParameter<string>("tauMapName","")),
27 allowMissingTrackRef_(Conf().getUntrackedParameter<bool>("allowMissingTrackRef",false)),
28 jetMap_(0),
29 pfCandMap_(0),
30 tauMap_(new mithep::PFTauMap),
31 taus_(new mithep::PFTauArr(16))
32 {
33 // Constructor.
34
35 // Retrieve EDM names of HPS Tau Discriminators
36 vector<pair<string, string> > hpsNames;
37 hpsNames.push_back(make_pair("discriminationByLooseElectronRejectionName", "hpsPFTauDiscriminationByLooseElectronRejection"));
38 hpsNames.push_back(make_pair("discriminationByMediumElectronRejectionName", "hpsPFTauDiscriminationByMediumElectronRejection"));
39 hpsNames.push_back(make_pair("discriminationByTightElectronRejectionName", "hpsPFTauDiscriminationByTightElectronRejection"));
40 hpsNames.push_back(make_pair("discriminationByMVAElectronRejectionName", "hpsPFTauDiscriminationByMVAElectronRejection"));
41 hpsNames.push_back(make_pair("discriminationByLooseMuonRejectionName", "hpsPFTauDiscriminationByLooseMuonRejection"));
42 hpsNames.push_back(make_pair("discriminationByMediumMuonRejectionName", "hpsPFTauDiscriminationByMediumMuonRejection"));
43 hpsNames.push_back(make_pair("discriminationByTightMuonRejectionName", "hpsPFTauDiscriminationByTightMuonRejection"));
44 hpsNames.push_back(make_pair("discriminationByDecayModeFindingName", "hpsPFTauDiscriminationByDecayModeFinding"));
45 hpsNames.push_back(make_pair("discriminationByVLooseIsolationName", "hpsPFTauDiscriminationByVLooseIsolation"));
46 hpsNames.push_back(make_pair("discriminationByLooseIsolationName", "hpsPFTauDiscriminationByLooseIsolation"));
47 hpsNames.push_back(make_pair("discriminationByMediumIsolationName", "hpsPFTauDiscriminationByMediumIsolation"));
48 hpsNames.push_back(make_pair("discriminationByTightIsolationName", "hpsPFTauDiscriminationByTightIsolation"));
49 hpsNames.push_back(make_pair("discriminationByVLooseCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByVLooseCombinedIsolationDBSumPtCorr"));
50 hpsNames.push_back(make_pair("discriminationByLooseCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr"));
51 hpsNames.push_back(make_pair("discriminationByMediumCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByMediumCombinedIsolationDBSumPtCorr"));
52 hpsNames.push_back(make_pair("discriminationByTightCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByTightCombinedIsolationDBSumPtCorr"));
53 hpsNames.push_back(make_pair("discriminationByRawCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByRawCombinedIsolationDBSumPtCorr"));
54 hpsNames.push_back(make_pair("mva2rawElectronRejectionName", "hpsPFTauDiscriminationByMVA2rawElectronRejection"));
55 hpsNames.push_back(make_pair("mva2rawElectronRejectionCategoryName", "hpsPFTauDiscriminationByMVA2rawElectronRejection:category"));
56 hpsNames.push_back(make_pair("mva2LooseElectronRejectionName", "hpsPFTauDiscriminationByMVA2LooseElectronRejection"));
57 hpsNames.push_back(make_pair("mva2MediumElectronRejectionName", "hpsPFTauDiscriminationByMVA2MediumElectronRejection"));
58 hpsNames.push_back(make_pair("mva2TightElectronRejectionName", "hpsPFTauDiscriminationByMVA2TightElectronRejection"));
59 hpsNames.push_back(make_pair("mva3rawElectronRejectionName", "hpsPFTauDiscriminationByMVA3rawElectronRejection"));
60 hpsNames.push_back(make_pair("mva3rawElectronRejectionCategoryName", "hpsPFTauDiscriminationByMVA3rawElectronRejection:category"));
61 hpsNames.push_back(make_pair("mva3LooseElectronRejectionName", "hpsPFTauDiscriminationByMVA3LooseElectronRejection"));
62 hpsNames.push_back(make_pair("mva3MediumElectronRejectionName", "hpsPFTauDiscriminationByMVA3MediumElectronRejection"));
63 hpsNames.push_back(make_pair("mva3TightElectronRejectionName", "hpsPFTauDiscriminationByMVA3TightElectronRejection"));
64 hpsNames.push_back(make_pair("mva3VTightElectronRejectionName", "hpsPFTauDiscriminationByMVA3VTightElectronRejection"));
65 hpsNames.push_back(make_pair("looseCombinedIsolationDBSumPtCorr3HitsName", "hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits"));
66 hpsNames.push_back(make_pair("mediumCombinedIsolationDBSumPtCorr3HitsName", "hpsPFTauDiscriminationByMediumCombinedIsolationDBSumPtCorr3Hits"));
67 hpsNames.push_back(make_pair("tightCombinedIsolationDBSumPtCorr3HitsName", "hpsPFTauDiscriminationByTightCombinedIsolationDBSumPtCorr3Hits"));
68 hpsNames.push_back(make_pair("rawCombinedIsolationDBSumPtCorr3HitsName", "hpsPFTauDiscriminationByRawCombinedIsolationDBSumPtCorr3Hits"));
69 hpsNames.push_back(make_pair("looseMuonRejection2Name", "hpsPFTauDiscriminationByLooseMuonRejection2"));
70 hpsNames.push_back(make_pair("mediumMuonRejection2Name", "hpsPFTauDiscriminationByMediumMuonRejection2"));
71 hpsNames.push_back(make_pair("tightMuonRejection2Name", "hpsPFTauDiscriminationByTightMuonRejection2"));
72
73 for(vector<pair<string, string> >::iterator it = hpsNames.begin(); it != hpsNames.end(); it++)
74 {
75 string paramName = it->first;
76 string defaultEDMName = it->second;
77 hpsHandles_[paramName].name = Conf().getUntrackedParameter<string>(paramName, defaultEDMName);
78 }
79 }
80
81 //--------------------------------------------------------------------------------------------------
82 FillerPFTaus::~FillerPFTaus()
83 {
84 // Destructor.
85 delete taus_;
86 delete tauMap_;
87 }
88
89 //--------------------------------------------------------------------------------------------------
90 void FillerPFTaus::BookDataBlock(TreeWriter &tws)
91 {
92 // Add taus branch to tree.
93
94 tws.AddBranch(mitName_,&taus_);
95 OS()->add<mithep::PFTauArr>(taus_,mitName_);
96
97 for (std::vector<std::string>::const_iterator bmapName = trackMapNames_.begin();
98 bmapName!=trackMapNames_.end(); ++bmapName) {
99 if (!bmapName->empty()) {
100 const TrackMap *map = OS()->get<TrackMap>(*bmapName);
101 if (map) {
102 trackMaps_.push_back(map);
103 AddBranchDep(mitName_,map->GetBrName());
104 }
105 }
106 }
107
108 if (!jetMapName_.empty()) {
109 jetMap_ = OS()->get<PFJetMap>(jetMapName_);
110 if (jetMap_)
111 AddBranchDep(mitName_, jetMap_->GetBrName());
112 }
113
114 if (!pfCandMapName_.empty()) {
115 pfCandMap_ = OS()->get<PFCandidateMap>(pfCandMapName_);
116 if (pfCandMap_)
117 AddBranchDep(mitName_, pfCandMap_->GetBrName());
118 }
119 if (!tauMapName_.empty()) {
120 tauMap_->SetBrName(mitName_);
121 OS()->add<PFTauMap>(tauMap_,tauMapName_);
122 }
123 }
124
125 //--------------------------------------------------------------------------------------------------
126 void FillerPFTaus::FillDataBlock(const edm::Event &event,
127 const edm::EventSetup &setup)
128 {
129 // Fill taus from edm collection into our collection.
130
131 taus_ ->Delete();
132 tauMap_->Reset();
133
134 // handle for the tau collection
135 Handle<reco::PFTauCollection> hTauProduct;
136 GetProduct(edmName_, hTauProduct, event);
137
138 // Handles for HPS discriminator
139 if(hpsActive_)
140 {
141 for(map<string, PFTauDiscHandle>::iterator it = hpsHandles_.begin(); it != hpsHandles_.end(); it++)
142 {
143 PFTauDiscHandle &hpsDisc = it->second;
144 GetProductSafe(hpsDisc.name, hpsDisc.handle, event);
145 }
146 }
147
148 const reco::PFTauCollection inTaus = *(hTauProduct.product());
149 // loop through all taus
150 for (reco::PFTauCollection::const_iterator inTau = inTaus.begin();
151 inTau != inTaus.end(); ++inTau) {
152
153 reco::PFTauRef tauRef(hTauProduct, inTau - inTaus.begin());
154
155 mithep::PFTau *tau = taus_->Allocate();
156 new (tau) mithep::PFTau(inTau->px(),
157 inTau->py(),
158 inTau->pz(),
159 inTau->energy());
160
161 tau->SetMomAlt(inTau->alternatLorentzVect().x(),
162 inTau->alternatLorentzVect().y(),
163 inTau->alternatLorentzVect().z(),
164 inTau->alternatLorentzVect().e());
165
166 // fill pftau-specific quantities
167 tau->SetCharge(inTau->charge());
168 tau->SetBremRecoveryEOverP(inTau->bremsRecoveryEOverPLead());
169 tau->SetCaloCompatibility(inTau->caloComp());
170 tau->SetECalStripSumEOverP(inTau->ecalStripSumEOverPLead());
171 tau->SetEMFraction(inTau->emFraction());
172 tau->SetElectronPreIDDecision(inTau->electronPreIDDecision());
173 tau->SetElectronPreIDOutput(inTau->electronPreIDOutput());
174 tau->SetHCal3x3EOverP(inTau->hcal3x3OverPLead());
175 tau->SetHCalMaxEOverP(inTau->hcalMaxOverPLead());
176 tau->SetHCalTotalEOverP(inTau->hcalTotOverPLead());
177 tau->SetIsoChargedHadronPtSum(inTau->isolationPFChargedHadrCandsPtSum());
178 tau->SetIsoGammaEtSum(inTau->isolationPFGammaCandsEtSum());
179 tau->SetLeadPFCandSignD0Sig(inTau->leadPFChargedHadrCandsignedSipt());
180 tau->SetMaxHCalPFClusterEt(inTau->maximumHCALPFClusterEt());
181 tau->SetMuonDecision(inTau->muonDecision());
182 tau->SetSegmentCompatibility(inTau->segComp());
183
184 // fill HPS discriminants
185 if(hpsActive_)
186 {
187 tau->SetDiscriminationByLooseElectronRejection(hpsHandles_["discriminationByLooseElectronRejectionName"].value(tauRef));
188 tau->SetDiscriminationByMediumElectronRejection(hpsHandles_["discriminationByMediumElectronRejectionName"].value(tauRef));
189 tau->SetDiscriminationByTightElectronRejection(hpsHandles_["discriminationByTightElectronRejectionName"].value(tauRef));
190 tau->SetDiscriminationByMVAElectronRejection(hpsHandles_["discriminationByMVAElectronRejectionName"].value(tauRef));
191 tau->SetDiscriminationByLooseMuonRejection(hpsHandles_["discriminationByLooseMuonRejectionName"].value(tauRef));
192 tau->SetDiscriminationByMediumMuonRejection(hpsHandles_["discriminationByMediumMuonRejectionName"].value(tauRef));
193 tau->SetDiscriminationByTightMuonRejection(hpsHandles_["discriminationByTightMuonRejectionName"].value(tauRef));
194 tau->SetDiscriminationByDecayModeFinding(hpsHandles_["discriminationByDecayModeFindingName"].value(tauRef));
195 tau->SetDiscriminationByVLooseIsolation(hpsHandles_["discriminationByVLooseIsolationName"].value(tauRef));
196 tau->SetDiscriminationByLooseIsolation(hpsHandles_["discriminationByLooseIsolationName"].value(tauRef));
197 tau->SetDiscriminationByMediumIsolation(hpsHandles_["discriminationByMediumIsolationName"].value(tauRef));
198 tau->SetDiscriminationByTightIsolation(hpsHandles_["discriminationByTightIsolationName"].value(tauRef));
199 tau->SetDiscriminationByVLooseCombinedIsolationDBSumPtCorr(hpsHandles_["discriminationByVLooseCombinedIsolationDBSumPtCorrName"].value(tauRef));
200 tau->SetDiscriminationByLooseCombinedIsolationDBSumPtCorr(hpsHandles_["discriminationByLooseCombinedIsolationDBSumPtCorrName"].value(tauRef));
201 tau->SetDiscriminationByMediumCombinedIsolationDBSumPtCorr(hpsHandles_["discriminationByMediumCombinedIsolationDBSumPtCorrName"].value(tauRef));
202 tau->SetDiscriminationByTightCombinedIsolationDBSumPtCorr(hpsHandles_["discriminationByTightCombinedIsolationDBSumPtCorrName"].value(tauRef));
203 tau->SetDiscriminationByRawCombinedIsolationDBSumPtCorr(hpsHandles_["discriminationByRawCombinedIsolationDBSumPtCorrName"].value(tauRef));
204 tau->SetMVA2rawElectronRejection(hpsHandles_["mva2rawElectronRejectionName"].value(tauRef));
205 tau->SetMVA2rawElectronRejectionCategory(hpsHandles_["mva2rawElectronRejectionCategoryName"].value(tauRef));
206 tau->SetMVA2LooseElectronRejection(hpsHandles_["mva2LooseElectronRejectionName"].value(tauRef));
207 tau->SetMVA2MediumElectronRejection(hpsHandles_["mva2MediumElectronRejectionName"].value(tauRef));
208 tau->SetMVA2TightElectronRejection(hpsHandles_["mva2TightElectronRejectionName"].value(tauRef));
209 tau->SetMVA3rawElectronRejection(hpsHandles_["mva3rawElectronRejectionName"].value(tauRef));
210 tau->SetMVA3rawElectronRejectionCategory(hpsHandles_["mva3rawElectronRejectionCategoryName"].value(tauRef));
211 tau->SetMVA3LooseElectronRejection(hpsHandles_["mva3LooseElectronRejectionName"].value(tauRef));
212 tau->SetMVA3MediumElectronRejection(hpsHandles_["mva3MediumElectronRejectionName"].value(tauRef));
213 tau->SetMVA3TightElectronRejection(hpsHandles_["mva3TightElectronRejectionName"].value(tauRef));
214 tau->SetMVA3VTightElectronRejection(hpsHandles_["mva3VTightElectronRejectionName"].value(tauRef));
215 tau->SetLooseCombinedIsolationDBSumPtCorr3Hits(hpsHandles_["looseCombinedIsolationDBSumPtCorr3HitsName"].value(tauRef));
216 tau->SetMediumCombinedIsolationDBSumPtCorr3Hits(hpsHandles_["mediumCombinedIsolationDBSumPtCorr3HitsName"].value(tauRef));
217 tau->SetTightCombinedIsolationDBSumPtCorr3Hits(hpsHandles_["tightCombinedIsolationDBSumPtCorr3HitsName"].value(tauRef));
218 tau->SetRawCombinedIsolationDBSumPtCorr3Hits(hpsHandles_["rawCombinedIsolationDBSumPtCorr3HitsName"].value(tauRef));
219 tau->SetLooseMuonRejection2(hpsHandles_["looseMuonRejection2Name"].value(tauRef));
220 tau->SetMediumMuonRejection2(hpsHandles_["mediumMuonRejection2Name"].value(tauRef));
221 tau->SetTightMuonRejection2(hpsHandles_["tightMuonRejection2Name"].value(tauRef));
222 }
223
224 // add track references
225 // if (trackMap_) {
226 // // electron preid track reference
227 // if (inTau->electronPreIDTrack().isNonnull()) {
228 // if (!allowMissingTrackRef_ || trackMap_->HasMit(refToPtrHack(inTau->electronPreIDTrack()))) {
229 // tau->SetElectronTrack(trackMap_->GetMit(refToPtrHack(inTau->electronPreIDTrack())));
230 // }
231 // }
232 // }
233
234 if (inTau->electronPreIDTrack().isNonnull()) {
235 const mithep::Track *theTrack = getMitTrack(refToPtrHack(inTau->electronPreIDTrack()),allowMissingTrackRef_);
236 tau->SetElectronTrack(theTrack);
237 }
238
239 // add source pfjet reference ( only filled since cmssw 311x )
240 if (jetMap_) {
241 tau->SetPFJet(jetMap_->GetMit(refToPtrHack(inTau->jetRef())));
242 }
243
244 // add pf candidate references
245 if (pfCandMap_) {
246 if (inTau->leadPFCand().isNonnull())
247 tau->SetLeadPFCand(pfCandMap_->GetMit(refToPtrHack(inTau->leadPFCand())));
248
249 if (inTau->leadPFChargedHadrCand().isNonnull()) {
250 const mithep::PFCandidate *pfc =
251 pfCandMap_->GetMit(refToPtrHack(inTau->leadPFChargedHadrCand()));
252 tau->SetLeadChargedHadronPFCand(pfc);
253 }
254
255 if (inTau->leadPFNeutralCand().isNonnull())
256 tau->SetLeadNeutralPFCand(pfCandMap_->GetMit(refToPtrHack(inTau->leadPFNeutralCand())));
257
258 for (uint i=0; i<inTau->signalPFCands().size(); ++i) {
259 const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFCands().at(i)));
260 tau->AddSignalPFCand(signalCand);
261 }
262
263 for (uint i=0; i<inTau->signalPFChargedHadrCands().size(); ++i) {
264 const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFChargedHadrCands().at(i)));
265 tau->AddSignalPFChargedHadrCand(signalCand);
266 }
267
268 for (uint i=0; i<inTau->signalPFNeutrHadrCands().size(); ++i) {
269 const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFNeutrHadrCands().at(i)));
270 tau->AddSignalPFNeutrHadrCand(signalCand);
271 }
272
273 for (uint i=0; i<inTau->signalPFGammaCands().size(); ++i) {
274 const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFGammaCands().at(i)));
275 tau->AddSignalPFGammaCand(signalCand);
276 }
277
278 for (uint i=0; i<inTau->isolationPFCands().size(); ++i) {
279 const PFCandidate *isoCand = pfCandMap_->GetMit(refToPtrHack(inTau->isolationPFCands().at(i)));
280 tau->AddIsoPFCand(isoCand);
281 }
282 }
283 // add Tau to map
284 edm::Ptr<reco::PFTau> thePtr(hTauProduct, inTau - inTaus.begin());
285 tauMap_->Add(thePtr, tau);
286 }
287
288 taus_->Trim();
289 }
290
291 //--------------------------------------------------------------------------------------------------
292 const mithep::Track *FillerPFTaus::getMitTrack(mitedm::TrackPtr ptr, bool allowmissing) const
293 {
294 // Return our particle referenced by the edm pointer.
295
296 mithep::Track *mitPart = 0;
297 for (std::vector<const mithep::TrackMap*>::const_iterator bmap = trackMaps_.begin();
298 bmap!=trackMaps_.end(); ++bmap) {
299 const mithep::TrackMap *theMap = *bmap;
300 if (theMap->HasMit(ptr)) {
301 mitPart = theMap->GetMit(ptr);
302 return mitPart;
303 }
304 }
305
306 if (!mitPart && !allowmissing)
307 throw edm::Exception(edm::errors::Configuration, "FillerPFCandidates::FillDataBlock()\n")
308 << "Error! MITHEP Object "
309 << "not found in AssociationMaps (" << typeid(*this).name() << ")." << std::endl;
310
311 return mitPart;
312 }