ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerPFTaus.cc
Revision: 1.12.2.1
Committed: Wed May 23 03:24:07 2012 UTC (12 years, 11 months ago) by paus
Content type: text/plain
Branch: Mit_025c_branch
CVS Tags: Mit_025c_branch1, Mit_025c_branch0
Changes since 1.12: +33 -4 lines
Log Message:
Backport.

File Contents

# User Rev Content
1 paus 1.12.2.1 // $Id: FillerPFTaus.cc,v 1.12 2011/10/10 20:57:40 bendavid 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 paus 1.12.2.1 discriminationByMVAElectronRejectionName_(Conf().getUntrackedParameter<string>("discriminationByMVAElectronRejectionName", "hpsPFTauDiscriminationByMVAElectronRejection")),
26 mhchan 1.8 discriminationByLooseMuonRejectionName_(Conf().getUntrackedParameter<string>("discriminationByLooseMuonRejectionName", "hpsPFTauDiscriminationByLooseMuonRejection")),
27 paus 1.12.2.1 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 paus 1.12.2.1 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 paus 1.12.2.1 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 paus 1.12.2.1 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 paus 1.12.2.1 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 paus 1.12.2.1 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 paus 1.12.2.1 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 paus 1.12.2.1 Handle<reco::PFTauDiscriminator> hDiscriminationByMVAElectronRejection;
117 mhchan 1.8 Handle<reco::PFTauDiscriminator> hDiscriminationByLooseMuonRejection;
118 paus 1.12.2.1 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 paus 1.12.2.1 Handle<reco::PFTauDiscriminator> hDiscriminationByRawCombinedIsolationDBSumPtCorr;
130 mhchan 1.6
131 paus 1.12.2.1 Bool_t hpsEleRejMVAValid = kFALSE;
132     Bool_t hpsMuonRejMediumValid = kFALSE;
133     Bool_t hpsIsoRawValid = kFALSE;
134    
135 mhchan 1.6 if(hpsActive_)
136     {
137 mhchan 1.8 GetProduct(discriminationByLooseElectronRejectionName_, hDiscriminationByLooseElectronRejection, event);
138     GetProduct(discriminationByMediumElectronRejectionName_, hDiscriminationByMediumElectronRejection, event);
139     GetProduct(discriminationByTightElectronRejectionName_, hDiscriminationByTightElectronRejection, event);
140 paus 1.12.2.1 hpsEleRejMVAValid = GetProductSafe(discriminationByMVAElectronRejectionName_, hDiscriminationByMVAElectronRejection, event);
141 mhchan 1.8 GetProduct(discriminationByLooseMuonRejectionName_, hDiscriminationByLooseMuonRejection, event);
142 paus 1.12.2.1 hpsMuonRejMediumValid = GetProductSafe(discriminationByMediumMuonRejectionName_, hDiscriminationByMediumMuonRejection, event);
143 mhchan 1.8 GetProduct(discriminationByTightMuonRejectionName_, hDiscriminationByTightMuonRejection, event);
144 mhchan 1.6 GetProduct(discriminationByDecayModeFindingName_, hDiscriminationByDecayModeFinding, event);
145 mhchan 1.8 GetProduct(discriminationByVLooseIsolationName_, hDiscriminationByVLooseIsolation, event);
146 mhchan 1.6 GetProduct(discriminationByLooseIsolationName_, hDiscriminationByLooseIsolation, event);
147     GetProduct(discriminationByMediumIsolationName_, hDiscriminationByMediumIsolation, event);
148     GetProduct(discriminationByTightIsolationName_, hDiscriminationByTightIsolation, event);
149 mhchan 1.11 GetProduct(discriminationByVLooseCombinedIsolationDBSumPtCorrName_, hDiscriminationByVLooseCombinedIsolationDBSumPtCorr, event);
150     GetProduct(discriminationByLooseCombinedIsolationDBSumPtCorrName_, hDiscriminationByLooseCombinedIsolationDBSumPtCorr, event);
151     GetProduct(discriminationByMediumCombinedIsolationDBSumPtCorrName_, hDiscriminationByMediumCombinedIsolationDBSumPtCorr, event);
152     GetProduct(discriminationByTightCombinedIsolationDBSumPtCorrName_, hDiscriminationByTightCombinedIsolationDBSumPtCorr, event);
153 paus 1.12.2.1 hpsIsoRawValid = GetProductSafe(discriminationByRawCombinedIsolationDBSumPtCorrName_, hDiscriminationByRawCombinedIsolationDBSumPtCorr, event);
154 mhchan 1.6 }
155    
156 bendavid 1.1 const reco::PFTauCollection inTaus = *(hTauProduct.product());
157     // loop through all taus
158     for (reco::PFTauCollection::const_iterator inTau = inTaus.begin();
159     inTau != inTaus.end(); ++inTau) {
160    
161     reco::PFTauRef tauRef(hTauProduct, inTau - inTaus.begin());
162    
163     mithep::PFTau *tau = taus_->Allocate();
164     new (tau) mithep::PFTau(inTau->px(),
165     inTau->py(),
166     inTau->pz(),
167     inTau->energy());
168    
169     tau->SetMomAlt(inTau->alternatLorentzVect().x(),
170     inTau->alternatLorentzVect().y(),
171     inTau->alternatLorentzVect().z(),
172     inTau->alternatLorentzVect().e());
173    
174     // fill pftau-specific quantities
175 mhchan 1.11 tau->SetCharge(inTau->charge());
176 bendavid 1.1 tau->SetBremRecoveryEOverP(inTau->bremsRecoveryEOverPLead());
177     tau->SetCaloCompatibility(inTau->caloComp());
178     tau->SetECalStripSumEOverP(inTau->ecalStripSumEOverPLead());
179     tau->SetEMFraction(inTau->emFraction());
180     tau->SetElectronPreIDDecision(inTau->electronPreIDDecision());
181     tau->SetElectronPreIDOutput(inTau->electronPreIDOutput());
182     tau->SetHCal3x3EOverP(inTau->hcal3x3OverPLead());
183     tau->SetHCalMaxEOverP(inTau->hcalMaxOverPLead());
184     tau->SetHCalTotalEOverP(inTau->hcalTotOverPLead());
185     tau->SetIsoChargedHadronPtSum(inTau->isolationPFChargedHadrCandsPtSum());
186     tau->SetIsoGammaEtSum(inTau->isolationPFGammaCandsEtSum());
187     tau->SetLeadPFCandSignD0Sig(inTau->leadPFChargedHadrCandsignedSipt());
188     tau->SetMaxHCalPFClusterEt(inTau->maximumHCALPFClusterEt());
189     tau->SetMuonDecision(inTau->muonDecision());
190     tau->SetSegmentCompatibility(inTau->segComp());
191    
192 mhchan 1.6 // fill HPS discriminants
193     if(hpsActive_)
194     {
195 mhchan 1.8 tau->SetDiscriminationByLooseElectronRejection((*(hDiscriminationByLooseElectronRejection.product()))[tauRef]);
196     tau->SetDiscriminationByMediumElectronRejection((*(hDiscriminationByMediumElectronRejection.product()))[tauRef]);
197     tau->SetDiscriminationByTightElectronRejection((*(hDiscriminationByTightElectronRejection.product()))[tauRef]);
198 paus 1.12.2.1
199     if(hpsEleRejMVAValid) tau->SetDiscriminationByMVAElectronRejection((*(hDiscriminationByMVAElectronRejection.product()))[tauRef]);
200 mhchan 1.8 tau->SetDiscriminationByLooseMuonRejection((*(hDiscriminationByLooseMuonRejection.product()))[tauRef]);
201 paus 1.12.2.1 if(hpsMuonRejMediumValid) tau->SetDiscriminationByMediumMuonRejection((*(hDiscriminationByMediumMuonRejection.product()))[tauRef]);
202 mhchan 1.8 tau->SetDiscriminationByTightMuonRejection((*(hDiscriminationByTightMuonRejection.product()))[tauRef]);
203 mhchan 1.6 tau->SetDiscriminationByDecayModeFinding((*(hDiscriminationByDecayModeFinding.product()))[tauRef]);
204 mhchan 1.8 tau->SetDiscriminationByVLooseIsolation((*(hDiscriminationByVLooseIsolation.product()))[tauRef]);
205 mhchan 1.6 tau->SetDiscriminationByLooseIsolation((*(hDiscriminationByLooseIsolation.product()))[tauRef]);
206     tau->SetDiscriminationByMediumIsolation((*(hDiscriminationByMediumIsolation.product()))[tauRef]);
207     tau->SetDiscriminationByTightIsolation((*(hDiscriminationByTightIsolation.product()))[tauRef]);
208 mhchan 1.11 tau->SetDiscriminationByVLooseCombinedIsolationDBSumPtCorr((*(hDiscriminationByVLooseCombinedIsolationDBSumPtCorr.product()))[tauRef]);
209     tau->SetDiscriminationByLooseCombinedIsolationDBSumPtCorr((*(hDiscriminationByLooseCombinedIsolationDBSumPtCorr.product()))[tauRef]);
210     tau->SetDiscriminationByMediumCombinedIsolationDBSumPtCorr((*(hDiscriminationByMediumCombinedIsolationDBSumPtCorr.product()))[tauRef]);
211     tau->SetDiscriminationByTightCombinedIsolationDBSumPtCorr((*(hDiscriminationByTightCombinedIsolationDBSumPtCorr.product()))[tauRef]);
212 paus 1.12.2.1 if(hpsIsoRawValid) tau->SetDiscriminationByRawCombinedIsolationDBSumPtCorr((*(hDiscriminationByRawCombinedIsolationDBSumPtCorr.product()))[tauRef]);
213 mhchan 1.6 }
214    
215 bendavid 1.1 // add track references
216 bendavid 1.12 // if (trackMap_) {
217     // // electron preid track reference
218     // if (inTau->electronPreIDTrack().isNonnull()) {
219     // if (!allowMissingTrackRef_ || trackMap_->HasMit(refToPtrHack(inTau->electronPreIDTrack()))) {
220     // tau->SetElectronTrack(trackMap_->GetMit(refToPtrHack(inTau->electronPreIDTrack())));
221     // }
222     // }
223     // }
224    
225     if (inTau->electronPreIDTrack().isNonnull()) {
226     const mithep::Track *theTrack = getMitTrack(refToPtrHack(inTau->electronPreIDTrack()),allowMissingTrackRef_);
227     tau->SetElectronTrack(theTrack);
228     }
229 bendavid 1.1
230 bendavid 1.7 // add source pfjet reference ( only filled since cmssw 311x )
231     if (jetMap_) {
232 bendavid 1.9 tau->SetPFJet(jetMap_->GetMit(refToPtrHack(inTau->jetRef())));
233 bendavid 1.7 }
234 bendavid 1.1
235 loizides 1.2 // add pf candidate references
236 bendavid 1.1 if (pfCandMap_) {
237     if (inTau->leadPFCand().isNonnull())
238 bendavid 1.9 tau->SetLeadPFCand(pfCandMap_->GetMit(refToPtrHack(inTau->leadPFCand())));
239 bendavid 1.1
240 loizides 1.2 if (inTau->leadPFChargedHadrCand().isNonnull()) {
241     const mithep::PFCandidate *pfc =
242 bendavid 1.9 pfCandMap_->GetMit(refToPtrHack(inTau->leadPFChargedHadrCand()));
243 loizides 1.2 tau->SetLeadChargedHadronPFCand(pfc);
244     }
245 bendavid 1.1
246     if (inTau->leadPFNeutralCand().isNonnull())
247 bendavid 1.9 tau->SetLeadNeutralPFCand(pfCandMap_->GetMit(refToPtrHack(inTau->leadPFNeutralCand())));
248 bendavid 1.1
249     for (uint i=0; i<inTau->signalPFCands().size(); ++i) {
250 bendavid 1.9 const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFCands().at(i)));
251 bendavid 1.1 tau->AddSignalPFCand(signalCand);
252     }
253 mhchan 1.11
254     for (uint i=0; i<inTau->signalPFChargedHadrCands().size(); ++i) {
255     const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFChargedHadrCands().at(i)));
256     tau->AddSignalPFChargedHadrCand(signalCand);
257     }
258    
259     for (uint i=0; i<inTau->signalPFNeutrHadrCands().size(); ++i) {
260     const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFNeutrHadrCands().at(i)));
261     tau->AddSignalPFNeutrHadrCand(signalCand);
262     }
263    
264     for (uint i=0; i<inTau->signalPFGammaCands().size(); ++i) {
265     const PFCandidate *signalCand = pfCandMap_->GetMit(refToPtrHack(inTau->signalPFGammaCands().at(i)));
266     tau->AddSignalPFGammaCand(signalCand);
267     }
268 bendavid 1.1
269     for (uint i=0; i<inTau->isolationPFCands().size(); ++i) {
270 bendavid 1.9 const PFCandidate *isoCand = pfCandMap_->GetMit(refToPtrHack(inTau->isolationPFCands().at(i)));
271 bendavid 1.1 tau->AddIsoPFCand(isoCand);
272     }
273     }
274 paus 1.12.2.1 // add Tau to map
275     edm::Ptr<reco::PFTau> thePtr(hTauProduct, inTau - inTaus.begin());
276     tauMap_->Add(thePtr, tau);
277 bendavid 1.1 }
278 paus 1.12.2.1
279 bendavid 1.1 taus_->Trim();
280     }
281 bendavid 1.12
282     //--------------------------------------------------------------------------------------------------
283     const mithep::Track *FillerPFTaus::getMitTrack(mitedm::TrackPtr ptr, bool allowmissing) const
284     {
285     // Return our particle referenced by the edm pointer.
286    
287     mithep::Track *mitPart = 0;
288     for (std::vector<const mithep::TrackMap*>::const_iterator bmap = trackMaps_.begin();
289     bmap!=trackMaps_.end(); ++bmap) {
290     const mithep::TrackMap *theMap = *bmap;
291     if (theMap->HasMit(ptr)) {
292     mitPart = theMap->GetMit(ptr);
293     return mitPart;
294     }
295     }
296    
297     if (!mitPart && !allowmissing)
298     throw edm::Exception(edm::errors::Configuration, "FillerPFCandidates::FillDataBlock()\n")
299     << "Error! MITHEP Object "
300     << "not found in AssociationMaps (" << typeid(*this).name() << ")." << std::endl;
301    
302     return mitPart;
303 paus 1.12.2.1 }