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 
20 
23 
24 // class TrackAssociatorByHits;
25 
27  : SiPixelPhase1Base(iConfig),
28  pixelBarrelLowToken_(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("pixBarrelLowSrc"))),
29  pixelBarrelHighToken_(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("pixBarrelHighSrc"))),
30  pixelForwardLowToken_(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("pixForwardLowSrc"))),
31  pixelForwardHighToken_(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("pixForwardHighSrc"))),
32 
33  tracksToken_(consumes<edm::View<reco::Track>>(iConfig.getParameter<edm::InputTag>("tracksTag"))),
34  tpToken_(consumes<TrackingParticleCollection>(iConfig.getParameter<edm::InputTag>("tpTag"))),
35  trackAssociatorByHitsToken_(consumes<reco::TrackToTrackingParticleAssociator>(
36  iConfig.getParameter<edm::InputTag>("trackAssociatorByHitsTag"))) {}
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 
65 
66  // get low barrel info
67  for (it = barrelLowInput->begin(); it != barrelLowInput->end(); ++it) {
68  auto id = DetId(it->detUnitId());
69  const GeomDetUnit *det = (const GeomDetUnit *)tracker->idToDetUnit(id);
70  GlobalPoint gpos = det->toGlobal(it->localPosition());
71 
72  float tof = it->timeOfFlight();
73  float globalR = gpos.mag();
74 
75  float energyLoss = it->energyLoss();
76 
77  float entryExitX = (it->entryPoint().x() - it->exitPoint().x());
78  float entryExitY = (it->entryPoint().y() - it->exitPoint().y());
79  float entryExitZ = std::abs(it->entryPoint().z() - it->exitPoint().z());
80 
81  float localX = it->localPosition().x();
82  float localY = it->localPosition().y();
83  float localZ = it->localPosition().z();
84  float localPhi = it->localPosition().phi();
85  float localEta = it->localPosition().eta();
86 
87  histo[TOF_R].fill(globalR, tof, id, &iEvent);
88  histo[ELOSS].fill(energyLoss, id, &iEvent);
89  histo[ENTRY_EXIT_X].fill(entryExitX, id, &iEvent);
90  histo[ENTRY_EXIT_Y].fill(entryExitY, id, &iEvent);
91  histo[ENTRY_EXIT_Z].fill(entryExitZ, id, &iEvent);
92  histo[LOCAL_X].fill(localX, id, &iEvent);
93  histo[LOCAL_Y].fill(localY, id, &iEvent);
94  histo[LOCAL_Z].fill(localZ, id, &iEvent);
95  histo[LOCAL_PHI].fill(localPhi, id, &iEvent);
96  histo[LOCAL_ETA].fill(localEta, id, &iEvent);
97  }
98  // get high barrel info
99  for (it = barrelHighInput->begin(); it != barrelHighInput->end(); ++it) {
100  auto id = DetId(it->detUnitId());
101  const GeomDetUnit *det = (const GeomDetUnit *)tracker->idToDetUnit(id);
102  GlobalPoint gpos = det->toGlobal(it->localPosition());
103 
104  float tof = it->timeOfFlight();
105  float globalR = gpos.mag();
106 
107  float energyLoss = it->energyLoss();
108 
109  float entryExitX = (it->entryPoint().x() - it->exitPoint().x());
110  float entryExitY = (it->entryPoint().y() - it->exitPoint().y());
111  float entryExitZ = std::abs(it->entryPoint().z() - it->exitPoint().z());
112 
113  float localX = it->localPosition().x();
114  float localY = it->localPosition().y();
115  float localZ = it->localPosition().z();
116  float localPhi = it->localPosition().phi();
117  float localEta = it->localPosition().eta();
118 
119  histo[TOF_R].fill(globalR, tof, id, &iEvent);
120  histo[ELOSS].fill(energyLoss, id, &iEvent);
121  histo[ENTRY_EXIT_X].fill(entryExitX, id, &iEvent);
122  histo[ENTRY_EXIT_Y].fill(entryExitY, id, &iEvent);
123  histo[ENTRY_EXIT_Z].fill(entryExitZ, id, &iEvent);
124  histo[LOCAL_X].fill(localX, id, &iEvent);
125  histo[LOCAL_Y].fill(localY, id, &iEvent);
126  histo[LOCAL_Z].fill(localZ, id, &iEvent);
127  histo[LOCAL_PHI].fill(localPhi, id, &iEvent);
128  histo[LOCAL_ETA].fill(localEta, id, &iEvent);
129  }
130 
131  // get low forward info
132  for (it = forwardLowInput->begin(); it != forwardLowInput->end(); ++it) {
133  auto id = DetId(it->detUnitId());
134  const GeomDetUnit *det = (const GeomDetUnit *)tracker->idToDetUnit(id);
135  GlobalPoint gpos = det->toGlobal(it->localPosition());
136 
137  float tof = it->timeOfFlight();
138  float globalR = gpos.mag();
139 
140  float energyLoss = it->energyLoss();
141 
142  float entryExitX = (it->entryPoint().x() - it->exitPoint().x());
143  float entryExitY = (it->entryPoint().y() - it->exitPoint().y());
144  float entryExitZ = std::abs(it->entryPoint().z() - it->exitPoint().z());
145 
146  float localX = it->localPosition().x();
147  float localY = it->localPosition().y();
148  float localZ = it->localPosition().z();
149  float localPhi = it->localPosition().phi();
150  float localEta = it->localPosition().eta();
151 
152  histo[TOF_R].fill(globalR, tof, id, &iEvent);
153  histo[ELOSS].fill(energyLoss, id, &iEvent);
154  histo[ENTRY_EXIT_X].fill(entryExitX, id, &iEvent);
155  histo[ENTRY_EXIT_Y].fill(entryExitY, id, &iEvent);
156  histo[ENTRY_EXIT_Z].fill(entryExitZ, id, &iEvent);
157  histo[LOCAL_X].fill(localX, id, &iEvent);
158  histo[LOCAL_Y].fill(localY, id, &iEvent);
159  histo[LOCAL_Z].fill(localZ, id, &iEvent);
160  histo[LOCAL_PHI].fill(localPhi, id, &iEvent);
161  histo[LOCAL_ETA].fill(localEta, id, &iEvent);
162  }
163 
164  // get high forward info
165  for (it = forwardHighInput->begin(); it != forwardHighInput->end(); ++it) {
166  auto id = DetId(it->detUnitId());
167  const GeomDetUnit *det = (const GeomDetUnit *)tracker->idToDetUnit(id);
168  GlobalPoint gpos = det->toGlobal(it->localPosition());
169 
170  float tof = it->timeOfFlight();
171  float globalR = gpos.mag();
172 
173  float energyLoss = it->energyLoss();
174 
175  float entryExitX = (it->entryPoint().x() - it->exitPoint().x());
176  float entryExitY = (it->entryPoint().y() - it->exitPoint().y());
177  float entryExitZ = std::abs(it->entryPoint().z() - it->exitPoint().z());
178 
179  float localX = it->localPosition().x();
180  float localY = it->localPosition().y();
181  float localZ = it->localPosition().z();
182  float localPhi = it->localPosition().phi();
183  float localEta = it->localPosition().eta();
184 
185  histo[TOF_R].fill(globalR, tof, id, &iEvent);
186  histo[ELOSS].fill(energyLoss, id, &iEvent);
187  histo[ENTRY_EXIT_X].fill(entryExitX, id, &iEvent);
188  histo[ENTRY_EXIT_Y].fill(entryExitY, id, &iEvent);
189  histo[ENTRY_EXIT_Z].fill(entryExitZ, id, &iEvent);
190  histo[LOCAL_X].fill(localX, id, &iEvent);
191  histo[LOCAL_Y].fill(localY, id, &iEvent);
192  histo[LOCAL_Z].fill(localZ, id, &iEvent);
193  histo[LOCAL_PHI].fill(localPhi, id, &iEvent);
194  histo[LOCAL_ETA].fill(localEta, id, &iEvent);
195  }
196 
197  // Sim Hit efficiency info
198  edm::Handle<edm::View<reco::Track>> trackCollectionH;
199  iEvent.getByToken(tracksToken_, trackCollectionH);
200  const edm::View<reco::Track> &tC = *(trackCollectionH.product());
201 
203  iEvent.getByToken(tpToken_, TPCollectionH);
204 
206  iEvent.getByToken(trackAssociatorByHitsToken_, theHitsAssociator);
207  if (!theHitsAssociator.isValid()) {
208  throw cms::Exception("NO VALID HIT ASSOCIATOR");
209  }
210  reco::TrackToTrackingParticleAssociator const *associatorByHits = theHitsAssociator.product();
211 
212  if (TPCollectionH.isValid() && trackCollectionH.isValid()) {
213  reco::RecoToSimCollection const &p = associatorByHits->associateRecoToSim(trackCollectionH, TPCollectionH);
214 
215  for (edm::View<reco::Track>::size_type i = 0; i < tC.size(); ++i) {
216  edm::RefToBase<reco::Track> track(trackCollectionH, i);
217  // const reco::Track& t = *track;
218  auto id = DetId(track->innerDetId()); // histo manager requires a det ID,
219  // use innermost ID for ease
220 
221  auto iter = p.find(track);
222  histo[EFFICIENCY_TRACK].fill(iter != p.end() ? 1 : 0, id, &iEvent);
223  }
224  }
225 }
226 
SiPixelPhase1HitsV::EFFICIENCY_TRACK
Definition: SiPixelPhase1HitsV.h:33
SiPixelPhase1HitsV::LOCAL_PHI
Definition: SiPixelPhase1HitsV.h:31
mps_fire.i
i
Definition: mps_fire.py:355
TrackerGeometry.h
GeomDet
Definition: GeomDet.h:27
edm::Handle::product
T const * product() const
Definition: Handle.h:70
SiPixelPhase1HitsV::LOCAL_X
Definition: SiPixelPhase1HitsV.h:28
phase1PixelTopology::localY
constexpr uint16_t localY(uint16_t py)
Definition: phase1PixelTopology.h:58
ESHandle.h
sistrip::View
View
Definition: ConstantsForView.h:26
edm
HLT enums.
Definition: AlignableModifier.h:19
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
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
reco::TrackToTrackingParticleAssociator
Definition: TrackToTrackingParticleAssociator.h:51
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:48
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
SiPixelPhase1HitsV::LOCAL_ETA
Definition: SiPixelPhase1HitsV.h:32
edm::Handle< edm::PSimHitContainer >
TrackToTrackingParticleAssociator
SiPixelPhase1Base
Definition: SiPixelPhase1Base.h:46
DetId
Definition: DetId.h:17
MakerMacros.h
PSimHit.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
SiPixelPhase1HitsV::ENTRY_EXIT_Z
Definition: SiPixelPhase1HitsV.h:27
SiPixelPhase1HitsV::ELOSS
Definition: SiPixelPhase1HitsV.h:24
SiPixelPhase1HitsV::ENTRY_EXIT_X
Definition: SiPixelPhase1HitsV.h:25
SiPixelPhase1HitsV::tpToken_
edm::EDGetTokenT< TrackingParticleCollection > tpToken_
Definition: SiPixelPhase1HitsV.h:47
SiPixelPhase1HitsV::pixelForwardLowToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelForwardLowToken_
Definition: SiPixelPhase1HitsV.h:43
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:15
edm::ESHandle< TrackerGeometry >
Point3DBase< float, GlobalTag >
SiPixelPhase1HitsV::pixelForwardHighToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelForwardHighToken_
Definition: SiPixelPhase1HitsV.h:44
edm::View::size
size_type size() const
SiPixelPhase1HitsV::LOCAL_Y
Definition: SiPixelPhase1HitsV.h:29
SiPixelPhase1HitsV::ENTRY_EXIT_Y
Definition: SiPixelPhase1HitsV.h:26
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
phase1PixelTopology::localX
constexpr uint16_t localX(uint16_t px)
Definition: phase1PixelTopology.h:49
edm::View
Definition: CaloClusterFwd.h:14
TrackerDigiGeometryRecord.h
SiPixelPhase1HitsV::SiPixelPhase1HitsV
SiPixelPhase1HitsV(const edm::ParameterSet &conf)
Definition: SiPixelPhase1HitsV.cc:26
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
SiPixelPhase1HitsV
Definition: SiPixelPhase1HitsV.h:21
edm::AssociationMap< edm::OneToManyWithQualityGeneric< edm::View< reco::Track >, TrackingParticleCollection, double > >
iEvent
int iEvent
Definition: GenABIO.cc:224
SiPixelPhase1HitsV::LOCAL_Z
Definition: SiPixelPhase1HitsV.h:30
edm::EventSetup
Definition: EventSetup.h:57
get
#define get
PV3DBase::mag
T mag() const
Definition: PV3DBase.h:64
SiPixelPhase1HitsV.h
SiPixelPhase1HitsV::pixelBarrelLowToken_
edm::EDGetTokenT< edm::PSimHitContainer > pixelBarrelLowToken_
Definition: SiPixelPhase1HitsV.h:41
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
LocalPoint.h
SiPixelPhase1HitsV::TOF_R
Definition: SiPixelPhase1HitsV.h:23
Exception
Definition: hltDiff.cc:246
SiPixelPhase1HitsV::tracksToken_
edm::EDGetTokenT< edm::View< reco::Track > > tracksToken_
Definition: SiPixelPhase1HitsV.h:46
TrackingParticleCollection
std::vector< TrackingParticle > TrackingParticleCollection
Definition: TrackingParticleFwd.h:8
edm::RefToBase< reco::Track >
Exception.h
HLT_2018_cff.track
track
Definition: HLT_2018_cff.py:10352
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::PSimHitContainer
std::vector< PSimHit > PSimHitContainer
Definition: PSimHitContainer.h:11
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
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:42