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 
SiPixelPhase1HitsV::ENTRY_EXIT_X
Definition: SiPixelPhase1HitsV.h:27
mps_fire.i
i
Definition: mps_fire.py:428
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11724
GeomDet
Definition: GeomDet.h:27
edm::Handle::product
T const * product() const
Definition: Handle.h:70
SiPixelPhase1HitsV::EFFICIENCY_TRACK
Definition: SiPixelPhase1HitsV.h:35
phase1PixelTopology::localY
constexpr uint16_t localY(uint16_t py)
Definition: phase1PixelTopology.h:151
ESHandle.h
sistrip::View
View
Definition: ConstantsForView.h:26
edm
HLT enums.
Definition: AlignableModifier.h:19
SiPixelPhase1HitsV::LOCAL_Y
Definition: SiPixelPhase1HitsV.h:31
reco::TrackToTrackingParticleAssociator::associateRecoToSim
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
Definition: TrackToTrackingParticleAssociator.h:64
PSimHitContainer.h
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
reco::TrackToTrackingParticleAssociator
Definition: TrackToTrackingParticleAssociator.h:51
SiPixelPhase1HitsV::ENTRY_EXIT_Z
Definition: SiPixelPhase1HitsV.h:29
TrackingGeometry.h
SiPixelPhase1HitsV::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: SiPixelPhase1HitsV.cc:38
HistogramManagerHolder::histo
std::vector< HistogramManager > histo
Definition: SiPixelPhase1Base.h:37
SiPixelPhase1HitsV::trackAssociatorByHitsToken_
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > trackAssociatorByHitsToken_
Definition: SiPixelPhase1HitsV.h:50
SiPixelPhase1HitsV::TOF_R
Definition: SiPixelPhase1HitsV.h:25
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:46
SiPixelPhase1HitsV::LOCAL_ETA
Definition: SiPixelPhase1HitsV.h:34
edm::Handle< edm::PSimHitContainer >
TrackToTrackingParticleAssociator
SiPixelPhase1Base
Definition: SiPixelPhase1Base.h:46
DetId
Definition: DetId.h:17
MakerMacros.h
PSimHit.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
SiPixelPhase1HitsV::tpToken_
edm::EDGetTokenT< TrackingParticleCollection > tpToken_
Definition: SiPixelPhase1HitsV.h:49
SiPixelPhase1HitsV::pixelForwardLowToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelForwardLowToken_
Definition: SiPixelPhase1HitsV.h:45
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:16
edm::ESHandle< TrackerGeometry >
Point3DBase< float, GlobalTag >
SiPixelPhase1HitsV::pixelForwardHighToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelForwardHighToken_
Definition: SiPixelPhase1HitsV.h:46
edm::View::size
size_type size() const
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
phase1PixelTopology::localX
constexpr uint16_t localX(uint16_t px)
Definition: phase1PixelTopology.h:142
edm::View
Definition: CaloClusterFwd.h:14
SiPixelPhase1HitsV::SiPixelPhase1HitsV
SiPixelPhase1HitsV(const edm::ParameterSet &conf)
Definition: SiPixelPhase1HitsV.cc:24
edm::ParameterSet
Definition: ParameterSet.h:47
AlCaHLTBitMon_ParallelJobs.p
def p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
SiPixelPhase1HitsV
Definition: SiPixelPhase1HitsV.h:23
edm::AssociationMap< edm::OneToManyWithQualityGeneric< edm::View< reco::Track >, TrackingParticleCollection, double > >
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
edm::EventSetup
Definition: EventSetup.h:58
SiPixelPhase1HitsV::ENTRY_EXIT_Y
Definition: SiPixelPhase1HitsV.h:28
SiPixelPhase1HitsV::LOCAL_PHI
Definition: SiPixelPhase1HitsV.h:33
SiPixelPhase1HitsV::trackerGeomToken_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeomToken_
Definition: SiPixelPhase1HitsV.h:52
PV3DBase::mag
T mag() const
Definition: PV3DBase.h:64
SiPixelPhase1HitsV::LOCAL_X
Definition: SiPixelPhase1HitsV.h:30
SiPixelPhase1HitsV.h
SiPixelPhase1HitsV::LOCAL_Z
Definition: SiPixelPhase1HitsV.h:32
SiPixelPhase1HitsV::pixelBarrelLowToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelBarrelLowToken_
Definition: SiPixelPhase1HitsV.h:43
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
LocalPoint.h
Exception
Definition: hltDiff.cc:245
SiPixelPhase1HitsV::tracksToken_
edm::EDGetTokenT< edm::View< reco::Track > > tracksToken_
Definition: SiPixelPhase1HitsV.h:48
TrackingParticleCollection
std::vector< TrackingParticle > TrackingParticleCollection
Definition: TrackingParticleFwd.h:9
edm::RefToBase< reco::Track >
Exception.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
SiPixelPhase1HitsV::ELOSS
Definition: SiPixelPhase1HitsV.h:26
edm::PSimHitContainer
std::vector< PSimHit > PSimHitContainer
Definition: PSimHitContainer.h:11
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
edm::Event
Definition: Event.h:73
fastSimProducer_cff.energyLoss
energyLoss
Definition: fastSimProducer_cff.py:55
edm::View::size_type
unsigned int size_type
Definition: View.h:90
SiPixelPhase1HitsV::pixelBarrelHighToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelBarrelHighToken_
Definition: SiPixelPhase1HitsV.h:44
TrackerGeometry
Definition: TrackerGeometry.h:14