CMS 3D CMS Logo

PixelClusterShapeExtractor.cc
Go to the documentation of this file.
1 // VI January 2012: needs to be migrated to use cluster directly
2 
10 
13 
16 
19 
22 
25 #
26 
27 #include "TROOT.h"
28 #include "TFile.h"
29 #include "TH1F.h"
30 #include "TH2F.h"
31 
32 #include <map>
33 #include <memory>
34 
35 #include <fstream>
36 #include <vector>
37 
38 #include <mutex>
39 
40 using namespace std;
41 
42 // pixel
43 #define exMax 10
44 #define eyMax 15
45 
46 namespace {
47 
48  const std::set<unsigned> RelevantProcesses = {0};
49  //const std::set<unsigned> RelevantProcesses = { 2, 7, 9, 11, 13, 15 };
50 
51 } // namespace
52 
53 /*****************************************************************************/
55 public:
57  void analyze(edm::StreamID, const edm::Event& evt, const edm::EventSetup&) const override;
58  void endJob() override;
59 
60 private:
61  void init();
62 
63  bool isSuitable(const PSimHit& simHit, const GeomDetUnit& gdu) const;
64 
65  // Sim
66  void processSim(const SiPixelRecHit& recHit,
67  ClusterShapeHitFilter const& theClusterFilter,
68  const PSimHit& simHit,
70  const vector<TH2F*>& histo) const;
71 
72  // Rec
73  void processRec(const SiPixelRecHit& recHit,
74  ClusterShapeHitFilter const& theFilter,
75  LocalVector ldir,
77  const vector<TH2F*>& histo) const;
78 
79  bool checkSimHits(const TrackingRecHit& recHit,
80  TrackerHitAssociator const& theAssociator,
81  PSimHit& simHit,
82  pair<unsigned int, float>& key,
83  unsigned int& ss) const;
84 
85  void processPixelRecHits(SiPixelRecHitCollection::DataContainer const& recHits,
86  TrackerHitAssociator const& theAssociator,
87  ClusterShapeHitFilter const& theFilter,
89  const TrackerTopology& tkTpl) const;
90 
91  void analyzeSimHits(const edm::Event& ev, const edm::EventSetup& es) const;
92  void analyzeRecTracks(const edm::Event& ev, const edm::EventSetup& es) const;
93 
94  TFile* file;
95 
96  const bool hasSimHits;
97  const bool hasRecTracks;
98  const bool noBPIX1;
99 
104 
105  using Lock = std::unique_lock<std::mutex>;
106  std::unique_ptr<std::mutex[]> theMutex;
107  std::vector<TH2F*> hspc; // simulated pixel cluster
108  std::vector<TH2F*> hrpc; // reconstructed pixel cluster
109 };
110 
111 /*****************************************************************************/
113  // Declare histograms
114  char histName[256];
115 
116  // pixel
117  for (int subdet = 0; subdet <= 1; subdet++) {
118  for (int ex = 0; ex <= exMax; ex++)
119  for (int ey = 0; ey <= eyMax; ey++) {
120  sprintf(histName, "hspc_%d_%d_%d", subdet, ex, ey);
121  hspc.push_back(new TH2F(histName,
122  histName,
123  10 * 2 * (exMax + 2),
124  -(exMax + 2),
125  (exMax + 2),
126  10 * 2 * (eyMax + 2),
127  -(eyMax + 2),
128  (eyMax + 2)));
129 
130  sprintf(histName, "hrpc_%d_%d_%d", subdet, ex, ey);
131  hrpc.push_back(new TH2F(histName,
132  histName,
133  10 * 2 * (exMax + 2),
134  -(exMax + 2),
135  (exMax + 2),
136  10 * 2 * (eyMax + 2),
137  -(eyMax + 2),
138  (eyMax + 2)));
139  }
140  }
141  theMutex = std::make_unique<std::mutex[]>(hspc.size());
142 }
143 
144 /*****************************************************************************/
146  : hasSimHits(pset.getParameter<bool>("hasSimHits")),
147  hasRecTracks(pset.getParameter<bool>("hasRecTracks")),
148  noBPIX1(pset.getParameter<bool>("noBPIX1")),
149  tracks_token(hasRecTracks ? consumes<reco::TrackCollection>(pset.getParameter<edm::InputTag>("tracks"))
150  : edm::EDGetTokenT<reco::TrackCollection>()),
151  pixelRecHits_token(consumes<edmNew::DetSetVector<SiPixelRecHit>>(edm::InputTag("siPixelRecHits"))),
152  clusterShapeCache_token(
153  consumes<SiPixelClusterShapeCache>(pset.getParameter<edm::InputTag>("clusterShapeCacheSrc"))),
154  trackerHitAssociatorConfig_(pset, consumesCollector()) {
155  file = new TFile("clusterShape.root", "RECREATE");
156  file->cd();
157  init();
158 }
159 
160 /*****************************************************************************/
162  file->cd();
163 
164  // simulated
165  for (auto h = hspc.begin(); h != hspc.end(); h++)
166  (*h)->Write();
167 
168  // reconstructed
169  for (auto h = hrpc.begin(); h != hrpc.end(); h++)
170  (*h)->Write();
171 
172  file->Close();
173 }
174 
175 /*****************************************************************************/
177  // Outgoing?
178  // very expensive....
179  GlobalVector gvec = gdu.position() - GlobalPoint(0, 0, 0);
180  LocalVector lvec = gdu.toLocal(gvec);
181  LocalVector ldir = simHit.exitPoint() - simHit.entryPoint();
182 
183  // cut on size as well (pixel is 285um thick...
184  bool isOutgoing = std::abs(ldir.z()) > 0.01f && (lvec.z() * ldir.z() > 0);
185 
187  const bool isRelevant = RelevantProcesses.count(simHit.processType());
188  // From a relevant process? primary or decay
189  //bool isRelevant = (simHit.processType() == 2 ||
190  // simHit.processType() == 4);
191 
192  constexpr float ptCut2 = 0.2 * 0.2; // 0.050*0.050;
193  // Fast enough? pt > 50 MeV/c FIXME (at least 200MeV....
194  bool isFast = (simHit.momentumAtEntry().perp2() > ptCut2);
195 
196  //std::cout << "isOutgoing = " << isOutgoing << ", isRelevant = " << simHit.processType() << ", isFast = " << isFast << std::endl;
197  return (isOutgoing && isRelevant && isFast);
198 }
199 
200 /*****************************************************************************/
202  ClusterShapeHitFilter const& theClusterShape,
203  LocalVector ldir,
205  const vector<TH2F*>& histo) const {
206  int part;
208  pair<float, float> pred;
209 
210  if (theClusterShape.getSizes(recHit, ldir, clusterShapeCache, part, meas, pred))
211  if (meas.size() == 1)
212  if (meas.front().first <= exMax && meas.front().second <= eyMax) {
213  int i = (part * (exMax + 1) + meas.front().first) * (eyMax + 1) + meas.front().second;
214 #ifdef DO_DEBUG
215  if (meas.front().second == 0 && std::abs(pred.second) > 3) {
216  Lock lock(theMutex[0]);
217  int id = recHit.geographicalId();
218  std::cout << id << " bigpred " << meas.front().first << '/' << meas.front().second << ' ' << pred.first << '/'
219  << pred.second << ' ' << ldir << ' ' << ldir.mag() << std::endl;
220  }
221 #endif
222  Lock lock(theMutex[i]);
223  histo[i]->Fill(pred.first, pred.second);
224  }
225 }
226 
227 /*****************************************************************************/
229  ClusterShapeHitFilter const& theClusterFilter,
230  const PSimHit& simHit,
232  const vector<TH2F*>& histo) const {
233  LocalVector ldir = simHit.exitPoint() - simHit.entryPoint();
234  processRec(recHit, theClusterFilter, ldir, clusterShapeCache, histo);
235 }
236 
237 /*****************************************************************************/
239  TrackerHitAssociator const& theHitAssociator,
240  PSimHit& simHit,
241  pair<unsigned int, float>& key,
242  unsigned int& ss) const {
243  auto const& simHits = theHitAssociator.associateHit(recHit);
244 
245  //std::cout << "simHits.size() = " << simHits.size() << std::endl;
246  for (auto const& sh : simHits) {
247  if (isSuitable(sh, *recHit.detUnit())) {
248  simHit = sh;
249  key = {simHit.trackId(), simHit.timeOfFlight()};
250  ss = simHits.size();
251  return true;
252  }
253  }
254 
255  return false;
256 }
257 
258 /*****************************************************************************/
260  TrackerHitAssociator const& theHitAssociator,
261  ClusterShapeHitFilter const& theFilter,
263  const TrackerTopology& tkTpl) const {
264  struct Elem {
265  const SiPixelRecHit* rhit;
266  PSimHit shit;
267  unsigned int size;
268  };
269  std::map<pair<unsigned int, float>, Elem> simHitMap;
270 
271  PSimHit simHit;
272  pair<unsigned int, float> key;
273  unsigned int ss;
274 
275  for (auto const& recHit : recHits) {
276  if (noBPIX1 && tkTpl.pxbLayer(recHit.geographicalId()) == 1)
277  continue;
278  if (!checkSimHits(recHit, theHitAssociator, simHit, key, ss))
279  continue;
280  // Fill map
281  if (simHitMap.count(key) == 0) {
282  simHitMap[key] = {&recHit, simHit, ss};
283  } else if (recHit.cluster()->size() > simHitMap[key].rhit->cluster()->size())
284  simHitMap[key] = {&recHit, simHit, std::max(ss, simHitMap[key].size)};
285  }
286  for (auto const& elem : simHitMap) {
287  /* irrelevant
288  auto const rh = *elem.second.rhit;
289  auto const& topol = reinterpret_cast<const PixelGeomDetUnit*>(rh.detUnit())->specificTopology();
290  auto const & cl = *rh.cluster();
291  if (cl.minPixelCol()==0) continue;
292  if (cl.maxPixelCol()+1==topol.ncolumns()) continue;
293  if (cl.minPixelRow()==0) continue;
294  if (cl.maxPixelRow()+1==topol.nrows()) continue;
295  */
296  if (elem.second.size == 1)
297  processSim(*elem.second.rhit, theFilter, elem.second.shit, clusterShapeCache, hspc);
298  }
299 }
300 
301 /*****************************************************************************/
304  es.get<CkfComponentsRecord>().get("ClusterShapeHitFilter", shape);
305  auto const& theClusterShape = *shape.product();
306 
307  edm::ESHandle<TrackerTopology> tTopoHandle;
308  es.get<TrackerTopologyRcd>().get(tTopoHandle);
309  auto const& tkTpl = *tTopoHandle;
310 
313 
314  // Get associator
315  auto theHitAssociator = std::make_unique<TrackerHitAssociator>(ev, trackerHitAssociatorConfig_);
316 
317  // Pixel hits
318  {
320  ev.getByToken(pixelRecHits_token, coll);
321 
324 
325  auto const& recHits = coll.product()->data();
326  processPixelRecHits(recHits, *theHitAssociator, theClusterShape, *clusterShapeCache, tkTpl);
327  }
328 }
329 
330 /*****************************************************************************/
333  es.get<CkfComponentsRecord>().get("ClusterShapeHitFilter", shape);
334  auto const& theClusterShape = *shape.product();
335 
336  edm::ESHandle<TrackerTopology> tTopoHandle;
337  es.get<TrackerTopologyRcd>().get(tTopoHandle);
338  auto const& tkTpl = *tTopoHandle;
339 
340  // Get tracks
342  ev.getByToken(tracks_token, tracks);
343 
346 
347  for (auto const& track : *tracks) {
348  if (!track.quality(reco::Track::highPurity))
349  continue;
350  if (track.numberOfValidHits() < 8)
351  continue;
352  auto const& trajParams = track.extra()->trajParams();
353  assert(trajParams.size() == track.recHitsSize());
354  auto hb = track.recHitsBegin();
355  for (unsigned int h = 0; h < track.recHitsSize(); h++) {
356  auto recHit = *(hb + h);
357  if (!recHit->isValid())
358  continue;
359  auto id = recHit->geographicalId();
360  if (noBPIX1 && tkTpl.pxbLayer(id) == 1)
361  continue;
362 
363  // check that we are in the pixel
364  auto subdetid = (id.subdetId());
365  bool isPixel = subdetid == PixelSubdetector::PixelBarrel || subdetid == PixelSubdetector::PixelEndcap;
366 
367  auto const& ltp = trajParams[h];
368  auto ldir = ltp.momentum() / ltp.momentum().mag();
369 
370  if (isPixel) {
371  // Pixel
372  const SiPixelRecHit* pixelRecHit = dynamic_cast<const SiPixelRecHit*>(recHit);
373 
374  if (pixelRecHit != nullptr)
375  processRec(*pixelRecHit, theClusterShape, ldir, *clusterShapeCache, hrpc);
376  }
377  }
378  }
379 }
380 
381 /*****************************************************************************/
383  if (hasSimHits) {
384  LogTrace("MinBiasTracking") << " [ClusterShape] analyze simHits, recHits";
385  analyzeSimHits(ev, es);
386  }
387 
388  if (hasRecTracks) {
389  LogTrace("MinBiasTracking") << " [ClusterShape] analyze recHits on recTracks";
390  analyzeRecTracks(ev, es);
391  }
392 }
393 
SiPixelPhase1OnlineDQM_cff.clusterShapeCache
clusterShapeCache
Definition: SiPixelPhase1OnlineDQM_cff.py:120
Vector3DBase< float, LocalTag >
PixelClusterShapeExtractor::hasRecTracks
const bool hasRecTracks
Definition: PixelClusterShapeExtractor.cc:97
GeomDet::position
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:43
PixelClusterShapeExtractor::init
void init()
Definition: PixelClusterShapeExtractor.cc:112
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
edm::StreamID
Definition: StreamID.h:30
ClusterShapeHitFilter.h
Handle.h
PDWG_EXOHSCP_cff.tracks
tracks
Definition: PDWG_EXOHSCP_cff.py:28
init
int init
Definition: HydjetWrapper.h:64
electrons_cff.bool
bool
Definition: electrons_cff.py:393
PixelClusterShapeExtractor::checkSimHits
bool checkSimHits(const TrackingRecHit &recHit, TrackerHitAssociator const &theAssociator, PSimHit &simHit, pair< unsigned int, float > &key, unsigned int &ss) const
Definition: PixelClusterShapeExtractor.cc:238
mps_fire.i
i
Definition: mps_fire.py:428
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11779
SiPixelClusterShapeCache
Definition: SiPixelClusterShapeCache.h:43
PixelSubdetector::PixelEndcap
Definition: PixelSubdetector.h:11
GeomDet
Definition: GeomDet.h:27
PixelSubdetector::PixelBarrel
Definition: PixelSubdetector.h:11
edm::Handle::product
T const * product() const
Definition: Handle.h:70
PixelTopology.h
ESHandle.h
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
edm::EDGetTokenT< reco::TrackCollection >
PixelClusterShapeExtractor::PixelClusterShapeExtractor
PixelClusterShapeExtractor(const edm::ParameterSet &pset)
Definition: PixelClusterShapeExtractor.cc:145
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackerTopology
Definition: TrackerTopology.h:16
h
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
Definition: L1TUtmAlgorithmRcd.h:4
gather_cfg.cout
cout
Definition: gather_cfg.py:144
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
PixelClusterShapeExtractor::theMutex
std::unique_ptr< std::mutex[]> theMutex
Definition: PixelClusterShapeExtractor.cc:106
TrackerHitAssociator::associateHit
std::vector< PSimHit > associateHit(const TrackingRecHit &thit) const
Definition: TrackerHitAssociator.cc:212
timingPdfMaker.histo
histo
Definition: timingPdfMaker.py:279
ClusterShapeHitFilter
Definition: ClusterShapeHitFilter.h:149
cms::cuda::assert
assert(be >=bs)
FastTrackerRecHitCombiner_cfi.simHits
simHits
Definition: FastTrackerRecHitCombiner_cfi.py:5
ClusterShapeExtractor_cfi.noBPIX1
noBPIX1
Definition: ClusterShapeExtractor_cfi.py:9
TrackerHitAssociator.h
PixelClusterShapeExtractor::clusterShapeCache_token
const edm::EDGetTokenT< SiPixelClusterShapeCache > clusterShapeCache_token
Definition: PixelClusterShapeExtractor.cc:102
CkfComponentsRecord.h
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
TrackerHitAssociator::Config
Definition: TrackerHitAssociator.h:57
edm::Handle< SiPixelClusterShapeCache >
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
PixelClusterShapeExtractor::noBPIX1
const bool noBPIX1
Definition: PixelClusterShapeExtractor.cc:98
SiPixelRecHit
Our base class.
Definition: SiPixelRecHit.h:23
edmNew
Definition: DetSet2RangeMap.h:11
TrackerTopology::pxbLayer
unsigned int pxbLayer(const DetId &id) const
Definition: TrackerTopology.h:144
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
PixelClusterShapeExtractor::analyzeSimHits
void analyzeSimHits(const edm::Event &ev, const edm::EventSetup &es) const
Definition: PixelClusterShapeExtractor.cc:302
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
PixelClusterShapeExtractor::hspc
std::vector< TH2F * > hspc
Definition: PixelClusterShapeExtractor.cc:107
part
part
Definition: HCALResponse.h:20
PixelClusterShapeExtractor::analyzeRecTracks
void analyzeRecTracks(const edm::Event &ev, const edm::EventSetup &es) const
Definition: PixelClusterShapeExtractor.cc:331
PSimHit.h
h
Track.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
TrackFwd.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
CkfComponentsRecord
Definition: CkfComponentsRecord.h:22
ClusterShapeExtractor_cfi.hasRecTracks
hasRecTracks
Definition: ClusterShapeExtractor_cfi.py:8
PixelClusterShapeExtractor::processRec
void processRec(const SiPixelRecHit &recHit, ClusterShapeHitFilter const &theFilter, LocalVector ldir, const SiPixelClusterShapeCache &clusterShapeCache, const vector< TH2F * > &histo) const
Definition: PixelClusterShapeExtractor.cc:201
rpcPointValidation_cfi.simHit
simHit
Definition: rpcPointValidation_cfi.py:24
edm::ESHandle< ClusterShapeHitFilter >
PixelClusterShapeExtractor::processPixelRecHits
void processPixelRecHits(SiPixelRecHitCollection::DataContainer const &recHits, TrackerHitAssociator const &theAssociator, ClusterShapeHitFilter const &theFilter, SiPixelClusterShapeCache const &clusterShapeCache, const TrackerTopology &tkTpl) const
Definition: PixelClusterShapeExtractor.cc:259
edm::VecArray::front
reference front()
Definition: VecArray.h:50
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
GeomDet::toLocal
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
EDGetToken.h
eyMax
#define eyMax
Definition: PixelClusterShapeExtractor.cc:44
FastTrackerRecHitMaskProducer_cfi.recHits
recHits
Definition: FastTrackerRecHitMaskProducer_cfi.py:8
SiPixelRecHitCollection.h
edm::VecArray< std::pair< int, int >, 9 >
PixelClusterShapeExtractor
Definition: PixelClusterShapeExtractor.cc:54
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
fastTrackerRecHitType::isPixel
bool isPixel(HitType hitType)
Definition: FastTrackerRecHit.h:37
CommonMethods.lock
def lock()
Definition: CommonMethods.py:82
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
ClusterShapeHitFilter::getSizes
bool getSizes(const SiPixelRecHit &recHit, const LocalVector &ldir, const SiPixelClusterShapeCache &clusterShapeCache, int &part, ClusterData::ArrayType &meas, std::pair< float, float > &predr, PixelData const *pd=nullptr) const
Definition: ClusterShapeHitFilter.cc:231
PixelClusterShapeExtractor::endJob
void endJob() override
Definition: PixelClusterShapeExtractor.cc:161
PixelClusterShapeExtractor::processSim
void processSim(const SiPixelRecHit &recHit, ClusterShapeHitFilter const &theClusterFilter, const PSimHit &simHit, const SiPixelClusterShapeCache &clusterShapeCache, const vector< TH2F * > &histo) const
Definition: PixelClusterShapeExtractor.cc:228
PixelClusterShapeExtractor::Lock
std::unique_lock< std::mutex > Lock
Definition: PixelClusterShapeExtractor.cc:105
analyze
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
edm::EventSetup
Definition: EventSetup.h:57
edmNew::DetSetVector::DataContainer
std::vector< data_type > DataContainer
Definition: DetSetVectorNew.h:170
PixelClusterShapeExtractor::trackerHitAssociatorConfig_
const TrackerHitAssociator::Config trackerHitAssociatorConfig_
Definition: PixelClusterShapeExtractor.cc:103
get
#define get
hcalSimParameters_cfi.hb
hb
Definition: hcalSimParameters_cfi.py:60
PixelClusterShapeExtractor::file
TFile * file
Definition: PixelClusterShapeExtractor.cc:94
TrackingRecHit
Definition: TrackingRecHit.h:21
PV3DBase::mag
T mag() const
Definition: PV3DBase.h:64
TrackerHitAssociator
Definition: TrackerHitAssociator.h:55
std
Definition: JetResolutionObject.h:76
edmNew::DetSetVector::data
data_type const * data(size_t cell) const
Definition: DetSetVectorNew.h:560
PixelClusterShapeExtractor::pixelRecHits_token
const edm::EDGetTokenT< edmNew::DetSetVector< SiPixelRecHit > > pixelRecHits_token
Definition: PixelClusterShapeExtractor.cc:101
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
ClusterShapeExtractor_cfi.hasSimHits
hasSimHits
Definition: ClusterShapeExtractor_cfi.py:7
PixelGeomDetUnit.h
PixelClusterShapeExtractor::analyze
void analyze(edm::StreamID, const edm::Event &evt, const edm::EventSetup &) const override
Definition: PixelClusterShapeExtractor.cc:382
EventSetup.h
edm::VecArray::size
constexpr size_type size() const noexcept
Definition: VecArray.h:70
PixelClusterShapeExtractor::hasSimHits
const bool hasSimHits
Definition: PixelClusterShapeExtractor.cc:96
exMax
#define exMax
Definition: PixelClusterShapeExtractor.cc:43
PixelClusterShapeExtractor::isSuitable
bool isSuitable(const PSimHit &simHit, const GeomDetUnit &gdu) const
Definition: PixelClusterShapeExtractor.cc:176
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:224
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
ParameterSet.h
PSimHit
Definition: PSimHit.h:15
edm::Event
Definition: Event.h:73
PixelClusterShapeExtractor::tracks_token
const edm::EDGetTokenT< reco::TrackCollection > tracks_token
Definition: PixelClusterShapeExtractor.cc:100
crabWrapper.key
key
Definition: crabWrapper.py:19
EDAnalyzer.h
reco::TrackCollection
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
PixelClusterShapeExtractor::hrpc
std::vector< TH2F * > hrpc
Definition: PixelClusterShapeExtractor.cc:108
edm::global::EDAnalyzer
Definition: EDAnalyzer.h:32
SiPixelClusterShapeCache.h
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
trackerHitRTTI::isFast
bool isFast(TrackingRecHit const &hit)
Definition: trackerHitRTTI.h:37
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
reco::TrackBase::highPurity
Definition: TrackBase.h:154