CMS 3D CMS Logo

SiPixelPhase1HitsV.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiPixelPhase1HitsV
4 // Class: SiPixelPhase1HitsV
5 //
6 
7 // Original Author: Marcel Schneider
8 // Additional Authors: Alexander Morton - modifying code for validation use
9 
13 
16 
18 
21 
22 // class TrackAssociatorByHits;
23 
25  : SiPixelPhase1Base(iConfig),
26  pixelBarrelLowToken_(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("pixBarrelLowSrc"))),
27  pixelBarrelHighToken_(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("pixBarrelHighSrc"))),
28  pixelForwardLowToken_(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("pixForwardLowSrc"))),
29  pixelForwardHighToken_(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("pixForwardHighSrc"))),
30 
31  tracksToken_(consumes<edm::View<reco::Track>>(iConfig.getParameter<edm::InputTag>("tracksTag"))),
32  tpToken_(consumes<TrackingParticleCollection>(iConfig.getParameter<edm::InputTag>("tpTag"))),
33  trackAssociatorByHitsToken_(consumes<reco::TrackToTrackingParticleAssociator>(
34  iConfig.getParameter<edm::InputTag>("trackAssociatorByHitsTag"))),
35 
36  trackerGeomToken_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()) {}
37 
40  iEvent.getByToken(pixelBarrelLowToken_, barrelLowInput);
41  if (!barrelLowInput.isValid())
42  return;
43 
44  edm::Handle<edm::PSimHitContainer> barrelHighInput;
45  iEvent.getByToken(pixelBarrelHighToken_, barrelHighInput);
46  if (!barrelHighInput.isValid())
47  return;
48 
49  edm::Handle<edm::PSimHitContainer> forwardLowInput;
50  iEvent.getByToken(pixelForwardLowToken_, forwardLowInput);
51  if (!forwardLowInput.isValid())
52  return;
53 
54  edm::Handle<edm::PSimHitContainer> forwardHighInput;
55  iEvent.getByToken(pixelForwardHighToken_, forwardHighInput);
56  if (!forwardHighInput.isValid())
57  return;
58 
59  edm::PSimHitContainer::const_iterator it;
60 
61  // Get geometry information
62 
64 
65  // get low barrel info
66  for (it = barrelLowInput->begin(); it != barrelLowInput->end(); ++it) {
67  auto id = DetId(it->detUnitId());
68  const GeomDetUnit *det = (const GeomDetUnit *)tracker->idToDetUnit(id);
69  GlobalPoint gpos = det->toGlobal(it->localPosition());
70 
71  float tof = it->timeOfFlight();
72  float globalR = gpos.mag();
73 
74  float energyLoss = it->energyLoss();
75 
76  float entryExitX = (it->entryPoint().x() - it->exitPoint().x());
77  float entryExitY = (it->entryPoint().y() - it->exitPoint().y());
78  float entryExitZ = std::abs(it->entryPoint().z() - it->exitPoint().z());
79 
80  float localX = it->localPosition().x();
81  float localY = it->localPosition().y();
82  float localZ = it->localPosition().z();
83  float localPhi = it->localPosition().phi();
84  float localEta = it->localPosition().eta();
85 
86  histo[TOF_R].fill(globalR, tof, id, &iEvent);
87  histo[ELOSS].fill(energyLoss, id, &iEvent);
88  histo[ENTRY_EXIT_X].fill(entryExitX, id, &iEvent);
89  histo[ENTRY_EXIT_Y].fill(entryExitY, id, &iEvent);
90  histo[ENTRY_EXIT_Z].fill(entryExitZ, id, &iEvent);
91  histo[LOCAL_X].fill(localX, id, &iEvent);
92  histo[LOCAL_Y].fill(localY, id, &iEvent);
93  histo[LOCAL_Z].fill(localZ, id, &iEvent);
94  histo[LOCAL_PHI].fill(localPhi, id, &iEvent);
95  histo[LOCAL_ETA].fill(localEta, id, &iEvent);
96  }
97  // get high barrel info
98  for (it = barrelHighInput->begin(); it != barrelHighInput->end(); ++it) {
99  auto id = DetId(it->detUnitId());
100  const GeomDetUnit *det = (const GeomDetUnit *)tracker->idToDetUnit(id);
101  GlobalPoint gpos = det->toGlobal(it->localPosition());
102 
103  float tof = it->timeOfFlight();
104  float globalR = gpos.mag();
105 
106  float energyLoss = it->energyLoss();
107 
108  float entryExitX = (it->entryPoint().x() - it->exitPoint().x());
109  float entryExitY = (it->entryPoint().y() - it->exitPoint().y());
110  float entryExitZ = std::abs(it->entryPoint().z() - it->exitPoint().z());
111 
112  float localX = it->localPosition().x();
113  float localY = it->localPosition().y();
114  float localZ = it->localPosition().z();
115  float localPhi = it->localPosition().phi();
116  float localEta = it->localPosition().eta();
117 
118  histo[TOF_R].fill(globalR, tof, id, &iEvent);
119  histo[ELOSS].fill(energyLoss, id, &iEvent);
120  histo[ENTRY_EXIT_X].fill(entryExitX, id, &iEvent);
121  histo[ENTRY_EXIT_Y].fill(entryExitY, id, &iEvent);
122  histo[ENTRY_EXIT_Z].fill(entryExitZ, id, &iEvent);
123  histo[LOCAL_X].fill(localX, id, &iEvent);
124  histo[LOCAL_Y].fill(localY, id, &iEvent);
125  histo[LOCAL_Z].fill(localZ, id, &iEvent);
126  histo[LOCAL_PHI].fill(localPhi, id, &iEvent);
127  histo[LOCAL_ETA].fill(localEta, id, &iEvent);
128  }
129 
130  // get low forward info
131  for (it = forwardLowInput->begin(); it != forwardLowInput->end(); ++it) {
132  auto id = DetId(it->detUnitId());
133  const GeomDetUnit *det = (const GeomDetUnit *)tracker->idToDetUnit(id);
134  GlobalPoint gpos = det->toGlobal(it->localPosition());
135 
136  float tof = it->timeOfFlight();
137  float globalR = gpos.mag();
138 
139  float energyLoss = it->energyLoss();
140 
141  float entryExitX = (it->entryPoint().x() - it->exitPoint().x());
142  float entryExitY = (it->entryPoint().y() - it->exitPoint().y());
143  float entryExitZ = std::abs(it->entryPoint().z() - it->exitPoint().z());
144 
145  float localX = it->localPosition().x();
146  float localY = it->localPosition().y();
147  float localZ = it->localPosition().z();
148  float localPhi = it->localPosition().phi();
149  float localEta = it->localPosition().eta();
150 
151  histo[TOF_R].fill(globalR, tof, id, &iEvent);
152  histo[ELOSS].fill(energyLoss, id, &iEvent);
153  histo[ENTRY_EXIT_X].fill(entryExitX, id, &iEvent);
154  histo[ENTRY_EXIT_Y].fill(entryExitY, id, &iEvent);
155  histo[ENTRY_EXIT_Z].fill(entryExitZ, id, &iEvent);
156  histo[LOCAL_X].fill(localX, id, &iEvent);
157  histo[LOCAL_Y].fill(localY, id, &iEvent);
158  histo[LOCAL_Z].fill(localZ, id, &iEvent);
159  histo[LOCAL_PHI].fill(localPhi, id, &iEvent);
160  histo[LOCAL_ETA].fill(localEta, id, &iEvent);
161  }
162 
163  // get high forward info
164  for (it = forwardHighInput->begin(); it != forwardHighInput->end(); ++it) {
165  auto id = DetId(it->detUnitId());
166  const GeomDetUnit *det = (const GeomDetUnit *)tracker->idToDetUnit(id);
167  GlobalPoint gpos = det->toGlobal(it->localPosition());
168 
169  float tof = it->timeOfFlight();
170  float globalR = gpos.mag();
171 
172  float energyLoss = it->energyLoss();
173 
174  float entryExitX = (it->entryPoint().x() - it->exitPoint().x());
175  float entryExitY = (it->entryPoint().y() - it->exitPoint().y());
176  float entryExitZ = std::abs(it->entryPoint().z() - it->exitPoint().z());
177 
178  float localX = it->localPosition().x();
179  float localY = it->localPosition().y();
180  float localZ = it->localPosition().z();
181  float localPhi = it->localPosition().phi();
182  float localEta = it->localPosition().eta();
183 
184  histo[TOF_R].fill(globalR, tof, id, &iEvent);
185  histo[ELOSS].fill(energyLoss, id, &iEvent);
186  histo[ENTRY_EXIT_X].fill(entryExitX, id, &iEvent);
187  histo[ENTRY_EXIT_Y].fill(entryExitY, id, &iEvent);
188  histo[ENTRY_EXIT_Z].fill(entryExitZ, id, &iEvent);
189  histo[LOCAL_X].fill(localX, id, &iEvent);
190  histo[LOCAL_Y].fill(localY, id, &iEvent);
191  histo[LOCAL_Z].fill(localZ, id, &iEvent);
192  histo[LOCAL_PHI].fill(localPhi, id, &iEvent);
193  histo[LOCAL_ETA].fill(localEta, id, &iEvent);
194  }
195 
196  // Sim Hit efficiency info
197  edm::Handle<edm::View<reco::Track>> trackCollectionH;
198  iEvent.getByToken(tracksToken_, trackCollectionH);
199  const edm::View<reco::Track> &tC = *(trackCollectionH.product());
200 
202  iEvent.getByToken(tpToken_, TPCollectionH);
203 
205  iEvent.getByToken(trackAssociatorByHitsToken_, theHitsAssociator);
206  if (!theHitsAssociator.isValid()) {
207  throw cms::Exception("NO VALID HIT ASSOCIATOR");
208  }
209  reco::TrackToTrackingParticleAssociator const *associatorByHits = theHitsAssociator.product();
210 
211  if (TPCollectionH.isValid() && trackCollectionH.isValid()) {
212  reco::RecoToSimCollection const &p = associatorByHits->associateRecoToSim(trackCollectionH, TPCollectionH);
213 
214  for (edm::View<reco::Track>::size_type i = 0; i < tC.size(); ++i) {
215  edm::RefToBase<reco::Track> track(trackCollectionH, i);
216  // const reco::Track& t = *track;
217  auto id = DetId(track->innerDetId()); // histo manager requires a det ID,
218  // use innermost ID for ease
219 
220  auto iter = p.find(track);
221  histo[EFFICIENCY_TRACK].fill(iter != p.end() ? 1 : 0, id, &iEvent);
222  }
223  }
224 }
225 
unsigned int size_type
Definition: View.h:92
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
T const * product() const
Definition: Handle.h:70
edm::EDGetTokenT< edm::PSimHitContainer > pixelBarrelHighToken_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeomToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelForwardHighToken_
SiPixelPhase1HitsV(const edm::ParameterSet &conf)
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > trackAssociatorByHitsToken_
size_type size() const
int iEvent
Definition: GenABIO.cc:224
T mag() const
Definition: PV3DBase.h:64
edm::EDGetTokenT< edm::View< reco::Track > > tracksToken_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::EDGetTokenT< edm::PSimHitContainer > pixelBarrelLowToken_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
Definition: DetId.h:17
void analyze(const edm::Event &, const edm::EventSetup &) override
bool isValid() const
Definition: HandleBase.h:70
std::vector< HistogramManager > histo
fixed size matrix
HLT enums.
std::vector< PSimHit > PSimHitContainer
std::vector< TrackingParticle > TrackingParticleCollection
edm::EDGetTokenT< TrackingParticleCollection > tpToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelForwardLowToken_