ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerPFCandidates.cc
Revision: 1.1
Committed: Wed Mar 11 20:08:23 2009 UTC (16 years, 2 months ago) by bendavid
Content type: text/plain
Branch: MAIN
Log Message:
add FillerPFCandidates and FillerPFJets

File Contents

# User Rev Content
1 bendavid 1.1 // $Id: FillerPFCandidates.cc,v 1.17 2009/03/03 18:10:19 bendavid Exp $
2    
3     #include "MitProd/TreeFiller/interface/FillerPFCandidates.h"
4     #include "FWCore/MessageLogger/interface/MessageLogger.h"
5     #include "DataFormats/Common/interface/Handle.h"
6     #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
7     #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
8     #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
9     #include "DataFormats/MuonReco/interface/Muon.h"
10     #include "DataFormats/MuonReco/interface/MuonFwd.h"
11     #include "DataFormats/Common/interface/RefToPtr.h"
12     #include "MitAna/DataTree/interface/Muon.h"
13     #include "MitAna/DataTree/interface/Track.h"
14     #include "MitAna/DataTree/interface/Names.h"
15    
16     using namespace std;
17     using namespace edm;
18     using namespace mithep;
19    
20     //--------------------------------------------------------------------------------------------------
21     FillerPFCandidates::FillerPFCandidates(const edm::ParameterSet &cfg, const char *name, bool active) :
22     BaseFiller(cfg,name,active),
23     edmName_(Conf().getUntrackedParameter<string>("edmName","particleFlow")),
24     mitName_(Conf().getUntrackedParameter<string>("mitName",Names::gkPFCandidatesBrn)),
25     trackerTrackMapName_(Conf().getUntrackedParameter<string>("trackerTrackMapName","")),
26     gsfTrackMapName_(Conf().getUntrackedParameter<string>("gsfTrackMapName","")),
27     muonMapName_(Conf().getUntrackedParameter<string>("muonMapName","")),
28     conversionMapName_(Conf().getUntrackedParameter<string>("conversionMapName","")),
29     pfCandMapName_(Conf().getUntrackedParameter<string>("pfCandMapName","")),
30     trackerTrackMap_(0),
31     gsfTrackMap_(0),
32     muonMap_(0),
33     conversionMap_(0),
34     pfCandMap_(new mithep::PFCandidateMap),
35     pfCands_(new mithep::PFCandidateArr(16))
36     {
37     // Constructor.
38     }
39    
40     //--------------------------------------------------------------------------------------------------
41     FillerPFCandidates::~FillerPFCandidates() {
42     delete pfCands_;
43     delete pfCandMap_;
44     }
45    
46     //--------------------------------------------------------------------------------------------------
47     void FillerPFCandidates::BookDataBlock(TreeWriter &tws) {
48     // Add pf candidate branch to tree and get pointers to maps.
49    
50     tws.AddBranch(mitName_.c_str(),&pfCands_);
51    
52     if (!trackerTrackMapName_.empty())
53     trackerTrackMap_ = OS()->get<TrackMap>(trackerTrackMapName_.c_str());
54     if (!gsfTrackMapName_.empty())
55     gsfTrackMap_ = OS()->get<TrackMap>(gsfTrackMapName_.c_str());
56     if (!muonMapName_.empty())
57     muonMap_ = OS()->get<MuonMap>(muonMapName_.c_str());
58     if (!conversionMapName_.empty())
59     conversionMap_ = OS()->get<ConversionMap>(conversionMapName_.c_str());
60    
61     OS()->add<PFCandidateMap>(pfCandMap_,pfCandMapName_.c_str());
62     }
63    
64    
65    
66     //--------------------------------------------------------------------------------------------------
67     void FillerPFCandidates::FillDataBlock(const edm::Event &event,
68     const edm::EventSetup &setup)
69     {
70     // Fill muon information.
71    
72     pfCands_->Delete();
73     pfCandMap_->Reset();
74    
75     Handle<reco::PFCandidateCollection> hPfCandProduct;
76     GetProduct(edmName_, hPfCandProduct, event);
77     const reco::PFCandidateCollection &inPfCands = *(hPfCandProduct.product());
78    
79     for (reco::PFCandidateCollection::const_iterator iP = inPfCands.begin(); iP != inPfCands.end(); ++iP) {
80     mithep::PFCandidate *outPfCand = pfCands_->Allocate();
81     new (outPfCand) mithep::PFCandidate(iP->px(),iP->py(),iP->pz(),iP->energy());
82    
83     //fill variables
84     outPfCand->SetCharge(iP->charge());
85     outPfCand->SetEECal(iP->ecalEnergy());
86     outPfCand->SetEHCal(iP->hcalEnergy());
87     outPfCand->SetEECalRaw(iP->rawEcalEnergy());
88     outPfCand->SetEHCalRaw(iP->rawHcalEnergy());
89     outPfCand->SetEPS1(iP->pS1Energy());
90     outPfCand->SetEPS2(iP->pS2Energy());
91     outPfCand->SetPError(iP->deltaP());
92     outPfCand->SetMvaEPi(iP->mva_e_pi());
93     outPfCand->SetMvaEMu(iP->mva_e_mu());
94     outPfCand->SetMvaPiMu(iP->mva_pi_mu());
95     outPfCand->SetMvaGamma(iP->mva_nothing_gamma());
96     outPfCand->SetMvaNeutralH(iP->mva_nothing_nh());
97     outPfCand->SetMvaGammaNeutralH(iP->mva_gamma_nh());
98     outPfCand->SetEtaECal(iP->positionAtECALEntrance().eta());
99     outPfCand->SetPhiECal(iP->positionAtECALEntrance().eta());
100    
101     //fill source vertex
102     outPfCand->SetVertex(iP->vertex().x(),iP->vertex().y(),iP->vertex().z());
103    
104     //fill pf type enum
105     if (iP->particleId()==reco::PFCandidate::X)
106     outPfCand->SetPFType(mithep::PFCandidate::eX);
107     else if (iP->particleId()==reco::PFCandidate::h)
108     outPfCand->SetPFType(mithep::PFCandidate::eHadron);
109     else if (iP->particleId()==reco::PFCandidate::e)
110     outPfCand->SetPFType(mithep::PFCandidate::eElectron);
111     else if (iP->particleId()==reco::PFCandidate::mu)
112     outPfCand->SetPFType(mithep::PFCandidate::eMuon);
113     else if (iP->particleId()==reco::PFCandidate::gamma)
114     outPfCand->SetPFType(mithep::PFCandidate::eGamma);
115     else if (iP->particleId()==reco::PFCandidate::h0)
116     outPfCand->SetPFType(mithep::PFCandidate::eNeutralHadron);
117     else if (iP->particleId()==reco::PFCandidate::h_HF)
118     outPfCand->SetPFType(mithep::PFCandidate::eHadronHF);
119     else if (iP->particleId()==reco::PFCandidate::egamma_HF)
120     outPfCand->SetPFType(mithep::PFCandidate::eEGammaHF);
121    
122     //fill pf flags bitmask
123     outPfCand->SetFlag(mithep::PFCandidate::eNormal, iP->flag(reco::PFCandidate::NORMAL));
124     outPfCand->SetFlag(mithep::PFCandidate::eEMPhiSModules, iP->flag(reco::PFCandidate::E_PHI_SMODULES));
125     outPfCand->SetFlag(mithep::PFCandidate::eEMEta0, iP->flag(reco::PFCandidate::E_ETA_0));
126     outPfCand->SetFlag(mithep::PFCandidate::eEMEtaModules, iP->flag(reco::PFCandidate::E_ETA_MODULES));
127     outPfCand->SetFlag(mithep::PFCandidate::eEMBarrelEndcap, iP->flag(reco::PFCandidate::E_BARREL_ENDCAP));
128     outPfCand->SetFlag(mithep::PFCandidate::eEMPreshowerEdge, iP->flag(reco::PFCandidate::E_PRESHOWER_EDGE));
129     outPfCand->SetFlag(mithep::PFCandidate::eEMPreshower, iP->flag(reco::PFCandidate::E_PRESHOWER));
130     outPfCand->SetFlag(mithep::PFCandidate::eEMEndCapEdge, iP->flag(reco::PFCandidate::E_ENDCAP_EDGE));
131     outPfCand->SetFlag(mithep::PFCandidate::eHEta0, iP->flag(reco::PFCandidate::H_ETA_0));
132     outPfCand->SetFlag(mithep::PFCandidate::eHBarrelEndcap, iP->flag(reco::PFCandidate::H_BARREL_ENDCAP));
133     outPfCand->SetFlag(mithep::PFCandidate::eHEndcapVFCal, iP->flag(reco::PFCandidate::H_ENDCAP_VFCAL));
134     outPfCand->SetFlag(mithep::PFCandidate::eHVFCalEdge, iP->flag(reco::PFCandidate::H_VFCAL_EDGE));
135     outPfCand->SetFlag(mithep::PFCandidate::eToNuclInt, iP->flag(reco::PFCandidate::T_TO_NUCLINT));
136     outPfCand->SetFlag(mithep::PFCandidate::eFromNuclInt, iP->flag(reco::PFCandidate::T_FROM_NUCLINT));
137     outPfCand->SetFlag(mithep::PFCandidate::eFromV0, iP->flag(reco::PFCandidate::T_FROM_V0));
138     outPfCand->SetFlag(mithep::PFCandidate::eFromGammaConv, iP->flag(reco::PFCandidate::T_FROM_GAMMACONV));
139     outPfCand->SetFlag(mithep::PFCandidate::eToConversion, iP->flag(reco::PFCandidate::GAMMA_TO_GAMMACONV));
140    
141     //fill references to other branches
142     if (trackerTrackMap_ && iP->trackRef().isNonnull())
143     outPfCand->SetTrackerTrk(trackerTrackMap_->GetMit(refToPtr(iP->trackRef())));
144     if (gsfTrackMap_ && iP->gsfTrackRef().isNonnull())
145     outPfCand->SetGsfTrk(gsfTrackMap_->GetMit(refToPtr(iP->gsfTrackRef())));
146     if (muonMap_ && iP->muonRef().isNonnull())
147     outPfCand->SetMuon(muonMap_->GetMit(refToPtr(iP->muonRef())));
148     if (conversionMap_ && iP->conversionRef().isNonnull())
149     outPfCand->SetConversion(conversionMap_->GetMit(iP->conversionRef()));
150    
151     //add to exported pf candidate map
152     reco::PFCandidatePtr thePtr(hPfCandProduct, iP - inPfCands.begin());
153     pfCandMap_->Add(thePtr, outPfCand);
154    
155     }
156     pfCands_->Trim();
157     }
158    
159     //--------------------------------------------------------------------------------------------------
160     void FillerPFCandidates::ResolveLinks(const edm::Event &event,
161     const edm::EventSetup &setup)
162     {
163    
164     Handle<reco::PFCandidateCollection> hPfCandProduct;
165     GetProduct(edmName_, hPfCandProduct, event);
166     const reco::PFCandidateCollection &inPfCands = *(hPfCandProduct.product());
167    
168     //loop through pf candidates and resolve mother-daughter links
169     for (reco::PFCandidateCollection::const_iterator iP = inPfCands.begin(); iP != inPfCands.end(); ++iP) {
170    
171     reco::PFCandidatePtr thePtr(hPfCandProduct, iP - inPfCands.begin());
172     mithep::PFCandidate *outPfCand = pfCandMap_->GetMit(thePtr);
173    
174     //fill mother-daughter links
175     const reco::CandidatePtr motherCandPtr = iP->sourceCandidatePtr(0);
176     const reco::PFCandidatePtr motherPtr(motherCandPtr);
177     if (motherCandPtr.isNonnull()) {
178     mithep::PFCandidate *mother = pfCandMap_->GetMit(motherPtr);
179     outPfCand->SetMother(mother);
180     mother->AddDaughter(outPfCand);
181     }
182    
183     }
184    
185     }