ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerPFTaus.cc
Revision: 1.15
Committed: Mon Mar 26 15:27:15 2012 UTC (13 years, 1 month ago) by mhchan
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_025e
Changes since 1.14: +5 -1 lines
Log Message:
Added medium muon rejection discriminator to PFTau

File Contents

# User Rev Content
1 mhchan 1.15 // $Id: FillerPFTaus.cc,v 1.14 2012/03/25 17:11:14 mhchan 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 mhchan 1.6 #include "DataFormats/TauReco/interface/PFTauDiscriminator.h"
8 loizides 1.3 #include "MitAna/DataTree/interface/Names.h"
9     #include "MitAna/DataTree/interface/PFTauCol.h"
10     #include "MitProd/ObjectService/interface/ObjectService.h"
11 bendavid 1.1
12     using namespace std;
13     using namespace edm;
14     using namespace mithep;
15    
16     //--------------------------------------------------------------------------------------------------
17     FillerPFTaus::FillerPFTaus(const ParameterSet &cfg, const char *name, bool active) :
18     BaseFiller(cfg,name,active),
19 mhchan 1.6 hpsActive_(Conf().getUntrackedParameter<bool>("hpsActive", false)),
20 bendavid 1.1 edmName_(Conf().getUntrackedParameter<string>("edmName","")),
21 mhchan 1.6 mitName_(Conf().getUntrackedParameter<string>("mitName",Names::gkPFTauBrn)),
22 mhchan 1.8 discriminationByLooseElectronRejectionName_(Conf().getUntrackedParameter<string>("discriminationByLooseElectronRejectionName", "hpsPFTauDiscriminationByLooseElecronRejection")),
23     discriminationByMediumElectronRejectionName_(Conf().getUntrackedParameter<string>("discriminationByMediumElectronRejectionName", "hpsPFTauDiscriminationByMediumElecronRejection")),
24     discriminationByTightElectronRejectionName_(Conf().getUntrackedParameter<string>("discriminationByTightElectronRejectionName", "hpsPFTauDiscriminationByTightElecronRejection")),
25 mhchan 1.14 discriminationByMVAElectronRejectionName_(Conf().getUntrackedParameter<string>("discriminationByMVAElectronRejectionName", "hpsPFTauDiscriminationByMVAElectronRejection")),
26 mhchan 1.8 discriminationByLooseMuonRejectionName_(Conf().getUntrackedParameter<string>("discriminationByLooseMuonRejectionName", "hpsPFTauDiscriminationByLooseMuonRejection")),
27 mhchan 1.15 discriminationByMediumMuonRejectionName_(Conf().getUntrackedParameter<string>("discriminationByMediumMuonRejectionName", "hpsPFTauDiscriminationByMediumMuonRejection")),
28 mhchan 1.8 discriminationByTightMuonRejectionName_(Conf().getUntrackedParameter<string>("discriminationByTightMuonRejectionName", "hpsPFTauDiscriminationByTightMuonRejection")),
29 mhchan 1.6 discriminationByDecayModeFindingName_(Conf().getUntrackedParameter<string>("discriminationByDecayModeFindingName", "hpsPFTauDiscriminationByDecayModeFinding")),
30 mhchan 1.8 discriminationByVLooseIsolationName_(Conf().getUntrackedParameter<string>("discriminationByVLooseIsolationName", "hpsPFTauDiscriminationByVLooseIsolation")),
31 mhchan 1.6 discriminationByLooseIsolationName_(Conf().getUntrackedParameter<string>("discriminationByLooseIsolationName", "hpsPFTauDiscriminationByLooseIsolation")),
32     discriminationByMediumIsolationName_(Conf().getUntrackedParameter<string>("discriminationByMediumIsolationName", "hpsPFTauDiscriminationByMediumIsolation")),
33 mhchan 1.11 discriminationByTightIsolationName_(Conf().getUntrackedParameter<string>("discriminationByTightIsolationName", "hpsPFTauDiscriminationByTightIsolation")),
34     discriminationByVLooseCombinedIsolationDBSumPtCorrName_(Conf().getUntrackedParameter<string>("discriminationByVLooseCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByVLooseCombinedIsolationDBSumPtCorr")),
35     discriminationByLooseCombinedIsolationDBSumPtCorrName_(Conf().getUntrackedParameter<string>("discriminationByLooseCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr")),
36     discriminationByMediumCombinedIsolationDBSumPtCorrName_(Conf().getUntrackedParameter<string>("discriminationByMediumCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByMediumCombinedIsolationDBSumPtCorr")),
37     discriminationByTightCombinedIsolationDBSumPtCorrName_(Conf().getUntrackedParameter<string>("discriminationByTightCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByTightCombinedIsolationDBSumPtCorr")),
38 mhchan 1.14 discriminationByRawCombinedIsolationDBSumPtCorrName_(Conf().getUntrackedParameter<string>("discriminationByRawCombinedIsolationDBSumPtCorrName", "hpsPFTauDiscriminationByRawCombinedIsolationDBSumPtCorr")),
39    
40 bendavid 1.12 trackMapNames_(Conf().exists("trackMapNames") ?
41     Conf().getUntrackedParameter<vector<string> >("trackMapNames") :
42     vector<string>()),
43 bendavid 1.1 jetMapName_(Conf().getUntrackedParameter<string>("jetMapName","JetMapName")),
44     pfCandMapName_(Conf().getUntrackedParameter<string>("pfCandMapName","")),
45 pharris 1.13 tauMapName_(Conf().getUntrackedParameter<string>("tauMapName","")),
46 bendavid 1.10 allowMissingTrackRef_(Conf().getUntrackedParameter<bool>("allowMissingTrackRef",false)),
47 bendavid 1.1 jetMap_(0),
48     pfCandMap_(0),
49 pharris 1.13 tauMap_(new mithep::PFTauMap),
50 bendavid 1.1 taus_(new mithep::PFTauArr(16))
51     {
52     // Constructor.
53     }
54    
55     //--------------------------------------------------------------------------------------------------
56     FillerPFTaus::~FillerPFTaus()
57     {
58     // Destructor.
59     delete taus_;
60 pharris 1.13 delete tauMap_;
61 bendavid 1.1 }
62    
63     //--------------------------------------------------------------------------------------------------
64 bendavid 1.5 void FillerPFTaus::BookDataBlock(TreeWriter &tws)
65 bendavid 1.1 {
66     // Add taus branch to tree.
67    
68     tws.AddBranch(mitName_,&taus_);
69     OS()->add<mithep::PFTauArr>(taus_,mitName_);
70    
71 bendavid 1.12 for (std::vector<std::string>::const_iterator bmapName = trackMapNames_.begin();
72     bmapName!=trackMapNames_.end(); ++bmapName) {
73     if (!bmapName->empty()) {
74     const TrackMap *map = OS()->get<TrackMap>(*bmapName);
75     if (map) {
76     trackMaps_.push_back(map);
77     AddBranchDep(mitName_,map->GetBrName());
78     }
79     }
80 bendavid 1.1 }
81    
82     if (!jetMapName_.empty()) {
83     jetMap_ = OS()->get<PFJetMap>(jetMapName_);
84     if (jetMap_)
85     AddBranchDep(mitName_, jetMap_->GetBrName());
86     }
87    
88     if (!pfCandMapName_.empty()) {
89     pfCandMap_ = OS()->get<PFCandidateMap>(pfCandMapName_);
90     if (pfCandMap_)
91     AddBranchDep(mitName_, pfCandMap_->GetBrName());
92     }
93 pharris 1.13 if (!tauMapName_.empty()) {
94     tauMap_->SetBrName(mitName_);
95     OS()->add<PFTauMap>(tauMap_,tauMapName_);
96     }
97 bendavid 1.1 }
98    
99     //--------------------------------------------------------------------------------------------------
100     void FillerPFTaus::FillDataBlock(const edm::Event &event,
101 loizides 1.2 const edm::EventSetup &setup)
102 bendavid 1.1 {
103     // Fill taus from edm collection into our collection.
104    
105 pharris 1.13 taus_ ->Delete();
106     tauMap_->Reset();
107 bendavid 1.1
108     // handle for the tau collection
109     Handle<reco::PFTauCollection> hTauProduct;
110     GetProduct(edmName_, hTauProduct, event);
111    
112 mhchan 1.6 // Handles for HPS discriminants
113 mhchan 1.8 Handle<reco::PFTauDiscriminator> hDiscriminationByLooseElectronRejection;
114     Handle<reco::PFTauDiscriminator> hDiscriminationByMediumElectronRejection;
115     Handle<reco::PFTauDiscriminator> hDiscriminationByTightElectronRejection;
116 mhchan 1.14 Handle<reco::PFTauDiscriminator> hDiscriminationByMVAElectronRejection;
117 mhchan 1.8 Handle<reco::PFTauDiscriminator> hDiscriminationByLooseMuonRejection;
118 mhchan 1.15 Handle<reco::PFTauDiscriminator> hDiscriminationByMediumMuonRejection;
119 mhchan 1.8 Handle<reco::PFTauDiscriminator> hDiscriminationByTightMuonRejection;
120 mhchan 1.6 Handle<reco::PFTauDiscriminator> hDiscriminationByDecayModeFinding;
121 mhchan 1.8 Handle<reco::PFTauDiscriminator> hDiscriminationByVLooseIsolation;
122 mhchan 1.6 Handle<reco::PFTauDiscriminator> hDiscriminationByLooseIsolation;
123     Handle<reco::PFTauDiscriminator> hDiscriminationByMediumIsolation;
124     Handle<reco::PFTauDiscriminator> hDiscriminationByTightIsolation;
125 mhchan 1.11 Handle<reco::PFTauDiscriminator> hDiscriminationByVLooseCombinedIsolationDBSumPtCorr;
126     Handle<reco::PFTauDiscriminator> hDiscriminationByLooseCombinedIsolationDBSumPtCorr;
127     Handle<reco::PFTauDiscriminator> hDiscriminationByMediumCombinedIsolationDBSumPtCorr;
128     Handle<reco::PFTauDiscriminator> hDiscriminationByTightCombinedIsolationDBSumPtCorr;
129 mhchan 1.14 Handle<reco::PFTauDiscriminator> hDiscriminationByRawCombinedIsolationDBSumPtCorr;
130 mhchan 1.6
131     if(hpsActive_)
132     {
133 mhchan 1.8 GetProduct(discriminationByLooseElectronRejectionName_, hDiscriminationByLooseElectronRejection, event);
134     GetProduct(discriminationByMediumElectronRejectionName_, hDiscriminationByMediumElectronRejection, event);
135     GetProduct(discriminationByTightElectronRejectionName_, hDiscriminationByTightElectronRejection, event);
136 mhchan 1.14 GetProduct(discriminationByMVAElectronRejectionName_, hDiscriminationByMVAElectronRejection, event);
137 mhchan 1.8 GetProduct(discriminationByLooseMuonRejectionName_, hDiscriminationByLooseMuonRejection, event);
138 mhchan 1.15 GetProduct(discriminationByMediumMuonRejectionName_, hDiscriminationByMediumMuonRejection, event);
139 mhchan 1.8 GetProduct(discriminationByTightMuonRejectionName_, hDiscriminationByTightMuonRejection, event);
140 mhchan 1.6 GetProduct(discriminationByDecayModeFindingName_, hDiscriminationByDecayModeFinding, event);
141 mhchan 1.8 GetProduct(discriminationByVLooseIsolationName_, hDiscriminationByVLooseIsolation, event);
142 mhchan 1.6 GetProduct(discriminationByLooseIsolationName_, hDiscriminationByLooseIsolation, event);
143     GetProduct(discriminationByMediumIsolationName_, hDiscriminationByMediumIsolation, event);
144     GetProduct(discriminationByTightIsolationName_, hDiscriminationByTightIsolation, event);
145 mhchan 1.11 GetProduct(discriminationByVLooseCombinedIsolationDBSumPtCorrName_, hDiscriminationByVLooseCombinedIsolationDBSumPtCorr, event);
146     GetProduct(discriminationByLooseCombinedIsolationDBSumPtCorrName_, hDiscriminationByLooseCombinedIsolationDBSumPtCorr, event);
147     GetProduct(discriminationByMediumCombinedIsolationDBSumPtCorrName_, hDiscriminationByMediumCombinedIsolationDBSumPtCorr, event);
148     GetProduct(discriminationByTightCombinedIsolationDBSumPtCorrName_, hDiscriminationByTightCombinedIsolationDBSumPtCorr, event);
149 mhchan 1.14 GetProduct(discriminationByRawCombinedIsolationDBSumPtCorrName_, hDiscriminationByRawCombinedIsolationDBSumPtCorr, event);
150 mhchan 1.6 }
151    
152 bendavid 1.1 const reco::PFTauCollection inTaus = *(hTauProduct.product());
153     // loop through all taus
154     for (reco::PFTauCollection::const_iterator inTau = inTaus.begin();
155     inTau != inTaus.end(); ++inTau) {
156    
157     reco::PFTauRef tauRef(hTauProduct, inTau - inTaus.begin());
158    
159     mithep::PFTau *tau = taus_->Allocate();
160     new (tau) mithep::PFTau(inTau->px(),
161     inTau->py(),
162     inTau->pz(),
163     inTau->energy());
164    
165     tau->SetMomAlt(inTau->alternatLorentzVect().x(),
166     inTau->alternatLorentzVect().y(),
167     inTau->alternatLorentzVect().z(),
168     inTau->alternatLorentzVect().e());
169    
170     // fill pftau-specific quantities
171 mhchan 1.11 tau->SetCharge(inTau->charge());
172 bendavid 1.1 tau->SetBremRecoveryEOverP(inTau->bremsRecoveryEOverPLead());
173     tau->SetCaloCompatibility(inTau->caloComp());
174     tau->SetECalStripSumEOverP(inTau->ecalStripSumEOverPLead());
175     tau->SetEMFraction(inTau->emFraction());
176     tau->SetElectronPreIDDecision(inTau->electronPreIDDecision());
177     tau->SetElectronPreIDOutput(inTau->electronPreIDOutput());
178     tau->SetHCal3x3EOverP(inTau->hcal3x3OverPLead());
179     tau->SetHCalMaxEOverP(inTau->hcalMaxOverPLead());
180     tau->SetHCalTotalEOverP(inTau->hcalTotOverPLead());
181     tau->SetIsoChargedHadronPtSum(inTau->isolationPFChargedHadrCandsPtSum());
182     tau->SetIsoGammaEtSum(inTau->isolationPFGammaCandsEtSum());
183     tau->SetLeadPFCandSignD0Sig(inTau->leadPFChargedHadrCandsignedSipt());
184     tau->SetMaxHCalPFClusterEt(inTau->maximumHCALPFClusterEt());
185     tau->SetMuonDecision(inTau->muonDecision());
186     tau->SetSegmentCompatibility(inTau->segComp());
187    
188 mhchan 1.6 // fill HPS discriminants
189     if(hpsActive_)
190     {
191 mhchan 1.8 tau->SetDiscriminationByLooseElectronRejection((*(hDiscriminationByLooseElectronRejection.product()))[tauRef]);
192     tau->SetDiscriminationByMediumElectronRejection((*(hDiscriminationByMediumElectronRejection.product()))[tauRef]);
193     tau->SetDiscriminationByTightElectronRejection((*(hDiscriminationByTightElectronRejection.product()))[tauRef]);
194 mhchan 1.14 tau->SetDiscriminationByMVAElectronRejection((*(hDiscriminationByMVAElectronRejection.product()))[tauRef]);
195 mhchan 1.8 tau->SetDiscriminationByLooseMuonRejection((*(hDiscriminationByLooseMuonRejection.product()))[tauRef]);
196 mhchan 1.15 tau->SetDiscriminationByMediumMuonRejection((*(hDiscriminationByMediumMuonRejection.product()))[tauRef]);
197 mhchan 1.8 tau->SetDiscriminationByTightMuonRejection((*(hDiscriminationByTightMuonRejection.product()))[tauRef]);
198 mhchan 1.6 tau->SetDiscriminationByDecayModeFinding((*(hDiscriminationByDecayModeFinding.product()))[tauRef]);
199 mhchan 1.8 tau->SetDiscriminationByVLooseIsolation((*(hDiscriminationByVLooseIsolation.product()))[tauRef]);
200 mhchan 1.6 tau->SetDiscriminationByLooseIsolation((*(hDiscriminationByLooseIsolation.product()))[tauRef]);
201     tau->SetDiscriminationByMediumIsolation((*(hDiscriminationByMediumIsolation.product()))[tauRef]);
202     tau->SetDiscriminationByTightIsolation((*(hDiscriminationByTightIsolation.product()))[tauRef]);
203 mhchan 1.11 tau->SetDiscriminationByVLooseCombinedIsolationDBSumPtCorr((*(hDiscriminationByVLooseCombinedIsolationDBSumPtCorr.product()))[tauRef]);
204     tau->SetDiscriminationByLooseCombinedIsolationDBSumPtCorr((*(hDiscriminationByLooseCombinedIsolationDBSumPtCorr.product()))[tauRef]);
205     tau->SetDiscriminationByMediumCombinedIsolationDBSumPtCorr((*(hDiscriminationByMediumCombinedIsolationDBSumPtCorr.product()))[tauRef]);
206     tau->SetDiscriminationByTightCombinedIsolationDBSumPtCorr((*(hDiscriminationByTightCombinedIsolationDBSumPtCorr.product()))[tauRef]);
207 mhchan 1.14 tau->SetDiscriminationByRawCombinedIsolationDBSumPtCorr((*(hDiscriminationByRawCombinedIsolationDBSumPtCorr.product()))[tauRef]);
208 mhchan 1.6 }
209    
210 bendavid 1.1 // add track references
211 bendavid 1.12 // if (trackMap_) {
212     // // electron preid track reference
213     // if (inTau->electronPreIDTrack().isNonnull()) {
214     // if (!allowMissingTrackRef_ || trackMap_->HasMit(refToPtrHack(inTau->electronPreIDTrack()))) {
215     // tau->SetElectronTrack(trackMap_->GetMit(refToPtrHack(inTau->electronPreIDTrack())));
216     // }
217     // }
218     // }
219    
220     if (inTau->electronPreIDTrack().isNonnull()) {
221     const mithep::Track *theTrack = getMitTrack(refToPtrHack(inTau->electronPreIDTrack()),allowMissingTrackRef_);
222     tau->SetElectronTrack(theTrack);
223     }
224 bendavid 1.1
225 bendavid 1.7 // add source pfjet reference ( only filled since cmssw 311x )
226     if (jetMap_) {
227 bendavid 1.9 tau->SetPFJet(jetMap_->GetMit(refToPtrHack(inTau->jetRef())));
228 bendavid 1.7 }
229 bendavid 1.1
230 loizides 1.2 // add pf candidate references
231 bendavid 1.1 if (pfCandMap_) {
232     if (inTau->leadPFCand().isNonnull())
233 bendavid 1.9 tau->SetLeadPFCand(pfCandMap_->GetMit(refToPtrHack(inTau->leadPFCand())));
234 bendavid 1.1
235 loizides 1.2 if (inTau->leadPFChargedHadrCand().isNonnull()) {
236     const mithep::PFCandidate *pfc =
237 bendavid 1.9 pfCandMap_->GetMit(refToPtrHack(inTau->leadPFChargedHadrCand()));
238 loizides 1.2 tau->SetLeadChargedHadronPFCand(pfc);
239     }
240 bendavid 1.1
241     if (inTau->leadPFNeutralCand().isNonnull())
242 bendavid 1.9 tau->SetLeadNeutralPFCand(pfCandMap_->GetMit(refToPtrHack(inTau->leadPFNeutralCand())));
243 bendavid 1.1
244     for (uint i=0; i<inTau->signalPFCands().size(); ++i) {
245 bendavid 1.9 const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFCands().at(i)));
246 bendavid 1.1 tau->AddSignalPFCand(signalCand);
247     }
248 mhchan 1.11
249     for (uint i=0; i<inTau->signalPFChargedHadrCands().size(); ++i) {
250     const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFChargedHadrCands().at(i)));
251     tau->AddSignalPFChargedHadrCand(signalCand);
252     }
253    
254     for (uint i=0; i<inTau->signalPFNeutrHadrCands().size(); ++i) {
255     const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFNeutrHadrCands().at(i)));
256     tau->AddSignalPFNeutrHadrCand(signalCand);
257     }
258    
259     for (uint i=0; i<inTau->signalPFGammaCands().size(); ++i) {
260     const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFGammaCands().at(i)));
261     tau->AddSignalPFGammaCand(signalCand);
262     }
263 bendavid 1.1
264     for (uint i=0; i<inTau->isolationPFCands().size(); ++i) {
265 bendavid 1.9 const PFCandidate *isoCand = pfCandMap_->GetMit(refToPtrHack(inTau->isolationPFCands().at(i)));
266 bendavid 1.1 tau->AddIsoPFCand(isoCand);
267     }
268     }
269 pharris 1.13 // add Tau to map
270     edm::Ptr<reco::PFTau> thePtr(hTauProduct, inTau - inTaus.begin());
271     tauMap_->Add(thePtr, tau);
272 bendavid 1.1 }
273 pharris 1.13
274 bendavid 1.1 taus_->Trim();
275     }
276 bendavid 1.12
277     //--------------------------------------------------------------------------------------------------
278     const mithep::Track *FillerPFTaus::getMitTrack(mitedm::TrackPtr ptr, bool allowmissing) const
279     {
280     // Return our particle referenced by the edm pointer.
281    
282     mithep::Track *mitPart = 0;
283     for (std::vector<const mithep::TrackMap*>::const_iterator bmap = trackMaps_.begin();
284     bmap!=trackMaps_.end(); ++bmap) {
285     const mithep::TrackMap *theMap = *bmap;
286     if (theMap->HasMit(ptr)) {
287     mitPart = theMap->GetMit(ptr);
288     return mitPart;
289     }
290     }
291    
292     if (!mitPart && !allowmissing)
293     throw edm::Exception(edm::errors::Configuration, "FillerPFCandidates::FillDataBlock()\n")
294     << "Error! MITHEP Object "
295     << "not found in AssociationMaps (" << typeid(*this).name() << ")." << std::endl;
296    
297     return mitPart;
298 pharris 1.13 }