ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerPFTaus.cc
Revision: 1.12
Committed: Mon Oct 10 20:57:40 2011 UTC (13 years, 6 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_025c, Mit_025b, Mit_025a, Mit_025
Branch point for: Mit_025c_branch
Changes since 1.11: +49 -15 lines
Log Message:
fix track collection problem in tau filler

File Contents

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