ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerPFTaus.cc
Revision: 1.12.2.2
Committed: Fri Jun 21 05:05:32 2013 UTC (11 years, 10 months ago) by paus
Content type: text/plain
Branch: Mit_025c_branch
CVS Tags: Mit_025c_branch2
Changes since 1.12.2.1: +87 -78 lines
Log Message:
Backport 3 fine tuning.

File Contents

# User Rev Content
1 paus 1.12.2.2 // $Id: FillerPFTaus.cc,v 1.12.2.1 2012/05/23 03:24:07 paus Exp $
2 bendavid 1.1
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 loizides 1.3 #include "MitAna/DataTree/interface/Names.h"
8     #include "MitAna/DataTree/interface/PFTauCol.h"
9     #include "MitProd/ObjectService/interface/ObjectService.h"
10 bendavid 1.1
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 mhchan 1.6 hpsActive_(Conf().getUntrackedParameter<bool>("hpsActive", false)),
19 bendavid 1.1 edmName_(Conf().getUntrackedParameter<string>("edmName","")),
20 mhchan 1.6 mitName_(Conf().getUntrackedParameter<string>("mitName",Names::gkPFTauBrn)),
21 bendavid 1.12 trackMapNames_(Conf().exists("trackMapNames") ?
22     Conf().getUntrackedParameter<vector<string> >("trackMapNames") :
23     vector<string>()),
24 bendavid 1.1 jetMapName_(Conf().getUntrackedParameter<string>("jetMapName","JetMapName")),
25     pfCandMapName_(Conf().getUntrackedParameter<string>("pfCandMapName","")),
26 paus 1.12.2.1 tauMapName_(Conf().getUntrackedParameter<string>("tauMapName","")),
27 bendavid 1.10 allowMissingTrackRef_(Conf().getUntrackedParameter<bool>("allowMissingTrackRef",false)),
28 bendavid 1.1 jetMap_(0),
29     pfCandMap_(0),
30 paus 1.12.2.1 tauMap_(new mithep::PFTauMap),
31 bendavid 1.1 taus_(new mithep::PFTauArr(16))
32     {
33     // Constructor.
34 paus 1.12.2.2
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 bendavid 1.1 }
80    
81     //--------------------------------------------------------------------------------------------------
82     FillerPFTaus::~FillerPFTaus()
83     {
84     // Destructor.
85     delete taus_;
86 paus 1.12.2.1 delete tauMap_;
87 bendavid 1.1 }
88    
89     //--------------------------------------------------------------------------------------------------
90 bendavid 1.5 void FillerPFTaus::BookDataBlock(TreeWriter &tws)
91 bendavid 1.1 {
92     // Add taus branch to tree.
93    
94     tws.AddBranch(mitName_,&taus_);
95     OS()->add<mithep::PFTauArr>(taus_,mitName_);
96    
97 bendavid 1.12 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 bendavid 1.1 }
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 paus 1.12.2.1 if (!tauMapName_.empty()) {
120     tauMap_->SetBrName(mitName_);
121     OS()->add<PFTauMap>(tauMap_,tauMapName_);
122     }
123 bendavid 1.1 }
124    
125     //--------------------------------------------------------------------------------------------------
126     void FillerPFTaus::FillDataBlock(const edm::Event &event,
127 loizides 1.2 const edm::EventSetup &setup)
128 bendavid 1.1 {
129     // Fill taus from edm collection into our collection.
130    
131 paus 1.12.2.1 taus_ ->Delete();
132     tauMap_->Reset();
133 bendavid 1.1
134     // handle for the tau collection
135     Handle<reco::PFTauCollection> hTauProduct;
136     GetProduct(edmName_, hTauProduct, event);
137 paus 1.12.2.1
138 paus 1.12.2.2 // Handles for HPS discriminator
139 mhchan 1.6 if(hpsActive_)
140     {
141 paus 1.12.2.2 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 mhchan 1.6 }
147    
148 bendavid 1.1 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 mhchan 1.11 tau->SetCharge(inTau->charge());
168 bendavid 1.1 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 mhchan 1.6 // fill HPS discriminants
185     if(hpsActive_)
186     {
187 paus 1.12.2.2 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 mhchan 1.6 }
223    
224 bendavid 1.1 // add track references
225 bendavid 1.12 // 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 bendavid 1.1
239 bendavid 1.7 // add source pfjet reference ( only filled since cmssw 311x )
240     if (jetMap_) {
241 bendavid 1.9 tau->SetPFJet(jetMap_->GetMit(refToPtrHack(inTau->jetRef())));
242 bendavid 1.7 }
243 bendavid 1.1
244 loizides 1.2 // add pf candidate references
245 bendavid 1.1 if (pfCandMap_) {
246     if (inTau->leadPFCand().isNonnull())
247 bendavid 1.9 tau->SetLeadPFCand(pfCandMap_->GetMit(refToPtrHack(inTau->leadPFCand())));
248 bendavid 1.1
249 loizides 1.2 if (inTau->leadPFChargedHadrCand().isNonnull()) {
250     const mithep::PFCandidate *pfc =
251 bendavid 1.9 pfCandMap_->GetMit(refToPtrHack(inTau->leadPFChargedHadrCand()));
252 loizides 1.2 tau->SetLeadChargedHadronPFCand(pfc);
253     }
254 bendavid 1.1
255     if (inTau->leadPFNeutralCand().isNonnull())
256 bendavid 1.9 tau->SetLeadNeutralPFCand(pfCandMap_->GetMit(refToPtrHack(inTau->leadPFNeutralCand())));
257 bendavid 1.1
258     for (uint i=0; i<inTau->signalPFCands().size(); ++i) {
259 bendavid 1.9 const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFCands().at(i)));
260 bendavid 1.1 tau->AddSignalPFCand(signalCand);
261     }
262 mhchan 1.11
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 bendavid 1.1
278     for (uint i=0; i<inTau->isolationPFCands().size(); ++i) {
279 bendavid 1.9 const PFCandidate *isoCand = pfCandMap_->GetMit(refToPtrHack(inTau->isolationPFCands().at(i)));
280 bendavid 1.1 tau->AddIsoPFCand(isoCand);
281     }
282     }
283 paus 1.12.2.1 // add Tau to map
284     edm::Ptr<reco::PFTau> thePtr(hTauProduct, inTau - inTaus.begin());
285     tauMap_->Add(thePtr, tau);
286 bendavid 1.1 }
287 paus 1.12.2.1
288 bendavid 1.1 taus_->Trim();
289     }
290 bendavid 1.12
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 paus 1.12.2.1 }