ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerTracks.cc
Revision: 1.22
Committed: Thu Oct 16 16:17:17 2008 UTC (16 years, 6 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_005
Changes since 1.21: +2 -47 lines
Log Message:
Moved HitPattern parsing to a seperate class with more checks and now compatible with fixed hit layer mask format

File Contents

# User Rev Content
1 bendavid 1.22 // $Id: FillerTracks.cc,v 1.21 2008/10/13 10:41:36 bendavid Exp $
2 loizides 1.1
3 bendavid 1.11 #include "MitProd/TreeFiller/interface/FillerTracks.h"
4 loizides 1.1 #include "FWCore/MessageLogger/interface/MessageLogger.h"
5     #include "DataFormats/Common/interface/Handle.h"
6 bendavid 1.14 #include "DataFormats/TrackReco/interface/HitPattern.h"
7 loizides 1.1 #include "DataFormats/TrackReco/interface/Track.h"
8     #include "DataFormats/TrackReco/interface/TrackFwd.h"
9     #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h"
10     #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
11     #include "DataFormats/RecoCandidate/interface/TrackAssociation.h"
12    
13     using namespace std;
14     using namespace edm;
15     using namespace mithep;
16    
17 loizides 1.4 //--------------------------------------------------------------------------------------------------
18 loizides 1.16 FillerTracks::FillerTracks(const ParameterSet &cfg, const char *name, bool active,
19     const char *edmName, const char *mitName) :
20 loizides 1.7 BaseFiller(cfg,name,active),
21 loizides 1.16 edmName_(Conf().getUntrackedParameter<string>("edmName",edmName)),
22     mitName_(Conf().getUntrackedParameter<string>("mitName",mitName)),
23 loizides 1.19 edmSimAssocName_(Conf().getUntrackedParameter<string>("edmSimAssociationName","")),
24 bendavid 1.20 trackingMapName_(Conf().getUntrackedParameter<string>("trackingMapName","TrackingMap")),
25 loizides 1.13 trackMapName_(Conf().getUntrackedParameter<string>("trackMapName",
26     Form("%sMapName",mitName_.c_str()))),
27 bendavid 1.17 trackingMap_(0),
28 loizides 1.7 tracks_(new mithep::TrackArr(250)),
29 loizides 1.1 trackMap_(new mithep::TrackMap)
30     {
31 loizides 1.13 // Constructor.
32 loizides 1.1 }
33    
34 loizides 1.4 //--------------------------------------------------------------------------------------------------
35 loizides 1.1 FillerTracks::~FillerTracks()
36     {
37 loizides 1.13 // Destructor.
38    
39 loizides 1.5 delete tracks_;
40 loizides 1.1 delete trackMap_;
41     }
42    
43 loizides 1.4 //--------------------------------------------------------------------------------------------------
44 loizides 1.1 void FillerTracks::BookDataBlock(TreeWriter &tws)
45     {
46 loizides 1.13 // Add tracks branch to tree, publish and get our objects.
47    
48 loizides 1.1 tws.AddBranch(mitName_.c_str(),&tracks_);
49 loizides 1.12
50 bendavid 1.17 trackingMap_ = OS()->get<TrackingParticleMap>(trackingMapName_.c_str());
51 loizides 1.13 OS()->add<TrackMap>(trackMap_,trackMapName_.c_str());
52     OS()->add<TrackArr>(tracks_,mitName_.c_str());
53 loizides 1.1 }
54    
55 loizides 1.4 //--------------------------------------------------------------------------------------------------
56 loizides 1.1 void FillerTracks::FillDataBlock(const edm::Event &event,
57     const edm::EventSetup &setup)
58     {
59 loizides 1.13 // Fill tracks from edm collection into our collection.
60    
61 paus 1.10 tracks_ ->Reset();
62 loizides 1.1 trackMap_->Reset();
63 loizides 1.6
64     Handle<reco::TrackCollection> hTrackProduct;
65     GetProduct(edmName_, hTrackProduct, event);
66 loizides 1.1
67 loizides 1.6 trackMap_->SetEdmProductId(hTrackProduct.id().id());
68     const reco::TrackCollection inTracks = *(hTrackProduct.product());
69 loizides 1.1
70 paus 1.10 // for MC SimParticle association (reco->sim mappings)
71 loizides 1.1 reco::RecoToSimCollection simAssociation;
72 loizides 1.19 if (trackingMap_ && !edmSimAssocName_.empty()) {
73 loizides 1.1 Handle<reco::RecoToSimCollection> simAssociationProduct;
74 loizides 1.19 GetProduct(edmSimAssocName_, simAssociationProduct, event);
75 loizides 1.1 simAssociation = *(simAssociationProduct.product());
76 bendavid 1.17 //printf("SimAssociation Map Size = %i\n",simAssociation.size());
77 loizides 1.1 }
78    
79 paus 1.10 // loop through all tracks and fill the information
80     for (reco::TrackCollection::const_iterator it = inTracks.begin();
81     it != inTracks.end(); ++it) {
82 loizides 1.5 mithep::Track *outTrack = tracks_->Allocate();
83 paus 1.10 // create track and set the core parameters
84 loizides 1.19 new (outTrack) mithep::Track(it->qoverp(),it->lambda(),
85     it->phi(),it->dxy(),it->dsz());
86     outTrack->SetErrors(it->qoverpError(),it->lambdaError(),
87     it->phiError(),it->dxyError(),it->dszError());
88 loizides 1.1
89 loizides 1.19 // fill track quality information
90 bendavid 1.14 outTrack->SetChi2(it->chi2());
91 loizides 1.16 outTrack->SetNdof(static_cast<Int_t>(it->ndof()));
92 bendavid 1.14
93 loizides 1.19 //fill hit layer map
94 bendavid 1.14 const reco::HitPattern &hits = it->hitPattern();
95     for (Int_t i=0; i<hits.numberOfHits(); i++) {
96     uint32_t hit = hits.getHitPattern(i);
97 loizides 1.19 if (hits.validHitFilter(hit))
98     if (hits.trackerHitFilter(hit))
99 bendavid 1.22 outTrack->SetHit(hitReader_.Layer(hit));
100 bendavid 1.14
101 loizides 1.19 if (0) {
102     if (hits.muonDTHitFilter(hit))
103     printf("Muon DT Layer = %i\n", hits.getLayer(hit));
104     if (hits.muonCSCHitFilter(hit))
105     printf("Muon CSC Layer = %i\n", hits.getLayer(hit));
106     if (hits.muonRPCHitFilter(hit))
107     printf("Muon RPC Layer = %i\n", hits.getLayer(hit));
108     }
109 bendavid 1.14 }
110    
111 loizides 1.1 // add reference between mithep and edm object
112 paus 1.10 reco::TrackRef theRef(hTrackProduct, it - inTracks.begin());
113 loizides 1.1 trackMap_->Add(theRef, outTrack);
114    
115 loizides 1.19 if (trackingMap_ && !edmSimAssocName_.empty()) {
116 bendavid 1.17 //printf("Trying Track-Sim association\n");
117 loizides 1.1 reco::TrackBaseRef theBaseRef(theRef);
118     vector<pair<TrackingParticleRef, double> > simRefs;
119 paus 1.10 Bool_t noSimParticle = 0;
120 loizides 1.1 try {
121     simRefs = simAssociation[theBaseRef]; //try to get the sim references if existing
122     }
123 loizides 1.5 catch (edm::Exception &ex) {
124 paus 1.10 noSimParticle = 1;
125 loizides 1.1 }
126 paus 1.10
127 loizides 1.1 if (!noSimParticle) { //loop through sim match candidates
128 bendavid 1.17 //printf("Applying track-sim association\n");
129 loizides 1.1 for (vector<pair<TrackingParticleRef, double> >::const_iterator simRefPair=simRefs.begin();
130     simRefPair != simRefs.end(); ++simRefPair)
131    
132 paus 1.10 if (simRefPair->second > 0.5) // require more than 50% shared hits between reco and sim
133 bendavid 1.17 outTrack->SetMCPart(trackingMap_->GetMit(simRefPair->first)); //add reco->sim reference
134 loizides 1.1 }
135     }
136     }
137     tracks_->Trim();
138     }
139 bendavid 1.14