CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MeasurementTrackerImpl.cc
Go to the documentation of this file.
2 
5 
11 
13 
15 
21 
23 
28 
31 #include "TkStripMeasurementDet.h"
32 #include "TkPixelMeasurementDet.h"
33 #include "TkGluedMeasurementDet.h"
34 
37 
40 
41 #include <iostream>
42 #include <typeinfo>
43 #include <map>
44 #include <algorithm>
45 
46 
47 // here just while testing
48 
49 #if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ > 4)
50 #include <x86intrin.h>
51 
52 #else
53 
54 #ifdef __SSE2__
55 #include <mmintrin.h>
56 #include <emmintrin.h>
57 #endif
58 #ifdef __SSE3__
59 #include <pmmintrin.h>
60 #endif
61 #ifdef __SSE4_1__
62 #include <smmintrin.h>
63 #endif
64 
65 #endif
66 
67 
68 //
69 
70 using namespace std;
71 
72 namespace {
73 
74  struct CmpTKD {
75  bool operator()(MeasurementDet const* rh, MeasurementDet const * lh) {
76  return rh->fastGeomDet().geographicalId().rawId() < lh->fastGeomDet().geographicalId().rawId();
77  }
78  bool operator()(MeasurementDet const & rh, MeasurementDet const & lh) {
80  }
81  };
82 
83  template<typename TKD>
84  void sortTKD( std::vector<TKD*> & det) {
85  std::sort(det.begin(),det.end(),CmpTKD());
86  }
87  template<typename TKD>
88  void sortTKD( std::vector<TKD> & det) {
89  std::sort(det.begin(),det.end(),CmpTKD());
90  }
91 
92 }
93 
94 
96  const PixelClusterParameterEstimator* pixelCPE,
97  const StripClusterParameterEstimator* stripCPE,
98  const SiStripRecHitMatcher* hitMatcher,
99  const TrackerGeometry* trackerGeom,
100  const GeometricSearchTracker* geometricSearchTracker,
101  const SiStripQuality *stripQuality,
102  int stripQualityFlags,
103  int stripQualityDebugFlags,
104  const SiPixelQuality *pixelQuality,
105  const SiPixelFedCabling *pixelCabling,
106  int pixelQualityFlags,
107  int pixelQualityDebugFlags,
108  bool isRegional) :
109  MeasurementTracker(trackerGeom,geometricSearchTracker),
110  pset_(conf),
111  name_(conf.getParameter<std::string>("ComponentName")),
112  theStDets(hitMatcher,stripCPE,isRegional),
113  thePixelCPE(pixelCPE),
114  theInactivePixelDetectorLabels(conf.getParameter<std::vector<edm::InputTag> >("inactivePixelDetectorLabels")),
115  theInactiveStripDetectorLabels(conf.getParameter<std::vector<edm::InputTag> >("inactiveStripDetectorLabels"))
116 {
117  this->initialize();
118  this->initializeStripStatus(stripQuality, stripQualityFlags, stripQualityDebugFlags);
119  this->initializePixelStatus(pixelQuality, pixelCabling, pixelQualityFlags, pixelQualityDebugFlags);
120  //the measurement tracking is set to skip clusters, the other option is set from outside
121  selfUpdateSkipClusters_=conf.exists("skipClusters");
123  {
124  edm::InputTag skip=conf.getParameter<edm::InputTag>("skipClusters");
125  if (skip==edm::InputTag("")) selfUpdateSkipClusters_=false;
126  }
127 
128 
129  LogDebug("MeasurementTracker")<<"skipping clusters: "<<selfUpdateSkipClusters_;
130 }
131 
133 {
134  for(vector<TkPixelMeasurementDet*>::const_iterator it=thePixelDets.begin(); it!=thePixelDets.end(); ++it){
135  delete *it;
136  }
137 
138 }
139 
140 
142 {
145 
150 
151  // fist all stripdets
152  sortTKD(theStripDets);
154  for (unsigned int i=0; i!=theStripDets.size(); ++i)
156 
157  // now the glued dets
158  sortTKD(theGluedDets);
159  for (unsigned int i=0; i!=theGluedDets.size(); ++i)
161 
162  sortTKD(thePixelDets);
163 
164 
165 }
166 
167 
169 {
170  for (TrackerGeometry::DetContainer::const_iterator gd=dets.begin();
171  gd != dets.end(); gd++) {
172  addPixelDet(*gd, thePixelCPE);
173  }
174 }
175 
177 {
178  for (TrackerGeometry::DetContainer::const_iterator gd=dets.begin();
179  gd != dets.end(); gd++) {
180 
181  const GeomDetUnit* gdu = dynamic_cast<const GeomDetUnit*>(*gd);
182 
183  // StripSubdetector stripId( (**gd).geographicalId());
184  // bool isDetUnit( gdu != 0);
185  // cout << "StripSubdetector glued? " << stripId.glued()
186  // << " is DetUnit? " << isDetUnit << endl;
187 
188  if (gdu != 0) {
189  addStripDet(*gd);
190  }
191  else {
192  const GluedGeomDet* gluedDet = dynamic_cast<const GluedGeomDet*>(*gd);
193  if (gluedDet == 0) {
194  throw MeasurementDetException("MeasurementTracker ERROR: GeomDet neither DetUnit nor GluedDet");
195  }
196  addGluedDet(gluedDet);
197  }
198  }
199 }
200 
202 {
203  try {
205  }
206  catch(MeasurementDetException& err){
207  edm::LogError("MeasurementDet") << "Oops, got a MeasurementDetException: " << err.what() ;
208  }
209 }
210 
213 {
214  TkPixelMeasurementDet* det = new TkPixelMeasurementDet( gd, cpe);
215  thePixelDets.push_back(det);
217  theDetMap[gd->geographicalId()] = det;
218 }
219 
221 {
223 }
224 
226 {
227  const GluedGeomDet& gd = det.specificGeomDet();
228  const MeasurementDet* monoDet = findDet( gd.monoDet()->geographicalId());
229  const MeasurementDet* stereoDet = findDet( gd.stereoDet()->geographicalId());
230  if (monoDet == 0 || stereoDet == 0) {
231  edm::LogError("MeasurementDet") << "MeasurementTracker ERROR: GluedDet components not found as MeasurementDets ";
232  throw MeasurementDetException("MeasurementTracker ERROR: GluedDet components not found as MeasurementDets");
233  }
234  det.init(monoDet,stereoDet);
235  theDetMap[gd.geographicalId()] = &det;
236 }
237 
238 
240 {
241  updatePixels(event);
242  updateStrips(event);
243 
244  /*
245  for (std::vector<TkStripMeasurementDet>::const_iterator i=theStripDets.begin();
246  i!=theStripDets.end(); i++) {
247  if( (*i).isEmpty()){
248  std::cout << "stripDet id, #hits: "
249  << (*i).geomDet().geographicalId().rawId() << " , "
250  << 0 << std::endl;
251  }else{
252  std::cout << "stripDet id, #hits: "
253  << (*i).geomDet().geographicalId().rawId() << " , "
254  << (*i).size() << " " << (*i).detSet().size() std::endl;
255  }
256  }
257  */
258 }
260 {
261  //method called by user of the measurement tracker to tell what needs to be skiped from the event.
262  //there it is incompatible with a configuration in which the measurement tracker already knows what to skip
263  // i.e selfUpdateSkipClusters_=True
264 
265  LogDebug("MeasurementTracker")<<"setClusterToSkip";
267  edm::LogError("MeasurementTracker")<<"this mode of operation is not supported, either the measurement tracker is set to skip clusters, or is being told to skip clusters. not both";
268 
270  event.getByLabel(cluster,pixelClusterMask);
271 
272 
273  thePixelsToSkip.resize(pixelClusterMask->size());
274  pixelClusterMask->copyMaskTo(thePixelsToSkip);
275 
277  event.getByLabel(cluster,stripClusterMask);
278 
279  theStDets.theStripsToSkip.resize(stripClusterMask->size());
280  stripClusterMask->copyMaskTo(theStDets.theStripsToSkip);
281 
282 }
283 
285  //method called by user of the measurement tracker to tell what needs to be skiped from the event.
286  //there it is incompatible with a configuration in which the measurement tracker already knows what to skip
287  // i.e selfUpdateSkipClusters_=True
288 
289  LogDebug("MeasurementTracker")<<"unsetClusterToSkip";
291  edm::LogError("MeasurementTracker")<<"this mode of operation is not supported, either the measurement tracker is set to skip clusters, or is being told to skip clusters. not both";
292 
293  thePixelsToSkip.clear();
294  theStDets.theStripsToSkip.clear();
295 }
296 
298 {
299  // avoid to update twice from the same event
300  if (!edm::Service<UpdaterService>()->checkOnce("MeasurementTrackerImpl::updatePixels::"+name_)) return;
301 
302  typedef edmNew::DetSet<SiPixelCluster> PixelDetSet;
303 
304  bool switchOffPixelsIfEmpty = (!pset_.existsAs<bool>("switchOffPixelsIfEmpty")) ||
305  (pset_.getParameter<bool>("switchOffPixelsIfEmpty"));
306 
307  std::vector<uint32_t> rawInactiveDetIds;
308  if (!theInactivePixelDetectorLabels.empty()) {
310  for (std::vector<edm::InputTag>::const_iterator itt = theInactivePixelDetectorLabels.begin(), edt = theInactivePixelDetectorLabels.end();
311  itt != edt; ++itt) {
312  if (event.getByLabel(*itt, detIds)){
313  rawInactiveDetIds.insert(rawInactiveDetIds.end(), detIds->begin(), detIds->end());
314  }else{
315  static bool iFailedAlready=false;
316  if (!iFailedAlready){
317  edm::LogError("MissingProduct")<<"I fail to get the list of inactive pixel modules, because of 4.2/4.4 event content change.";
318  iFailedAlready=true;
319  }
320  }
321  }
322  if (!rawInactiveDetIds.empty()) std::sort(rawInactiveDetIds.begin(), rawInactiveDetIds.end());
323  }
324  // Pixel Clusters
325  std::string pixelClusterProducer = pset_.getParameter<std::string>("pixelClusterProducer");
326  if( pixelClusterProducer.empty() ) { //clusters have not been produced
327  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
328  i!=thePixelDets.end(); i++) {
329  if (switchOffPixelsIfEmpty) {
330  (**i).setActiveThisEvent(false);
331  }else{
332  (**i).setEmpty();
333  }
334  }
335  }else{
336 
338  event.getByLabel(pixelClusterProducer, pixelClusters);
339  const edmNew::DetSetVector<SiPixelCluster>* pixelCollection = pixelClusters.product();
340 
341  if (switchOffPixelsIfEmpty && pixelCollection->empty()) {
342  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
343  i!=thePixelDets.end(); i++) {
344  (**i).setActiveThisEvent(false);
345  }
346  } else {
347 
348  //std::cout <<"updatePixels "<<pixelCollection->dataSize()<<std::endl;
349  thePixelsToSkip.resize(pixelCollection->dataSize());
350  std::fill(thePixelsToSkip.begin(),thePixelsToSkip.end(),false);
351 
354  //and get the collection of pixel ref to skip
355  event.getByLabel(pset_.getParameter<edm::InputTag>("skipClusters"),pixelClusterMask);
356  LogDebug("MeasurementTracker")<<"getting pxl refs to skip";
357  if (pixelClusterMask.failedToGet())edm::LogError("MeasurementTracker")<<"not getting the pixel clusters to skip";
358  if (pixelClusterMask->refProd().id()!=pixelClusters.id()){
359  edm::LogError("ProductIdMismatch")<<"The pixel masking does not point to the proper collection of clusters: "<<pixelClusterMask->refProd().id()<<"!="<<pixelClusters.id();
360  }
361  pixelClusterMask->copyMaskTo(thePixelsToSkip);
362  }
363 
364  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
365  i!=thePixelDets.end(); i++) {
366 
367  // foreach det get cluster range
368  unsigned int id = (**i).geomDet().geographicalId().rawId();
369  if (!rawInactiveDetIds.empty() && std::binary_search(rawInactiveDetIds.begin(), rawInactiveDetIds.end(), id)) {
370  (**i).setActiveThisEvent(false); continue;
371  }
372  //FIXME
373  //fill the set with what needs to be skipped
375  if ( it != pixelCollection->end() ){
376  // push cluster range in det
377  (**i).update( *it, pixelClusters, id );
378  } else{
379  (**i).setEmpty();
380  }
381  }
382  }
383  }
384 }
385 
387  std::vector<uint32_t> & rawInactiveDetIds) const {
388  if (!theInactiveStripDetectorLabels.empty()) {
390  for (std::vector<edm::InputTag>::const_iterator itt = theInactiveStripDetectorLabels.begin(), edt = theInactiveStripDetectorLabels.end();
391  itt != edt; ++itt) {
392  event.getByLabel(*itt, detIds);
393  rawInactiveDetIds.insert(rawInactiveDetIds.end(), detIds->begin(), detIds->end());
394  }
395  if (!rawInactiveDetIds.empty()) std::sort(rawInactiveDetIds.begin(), rawInactiveDetIds.end());
396  }
397 }
398 
400 {
401  // avoid to update twice from the same event
402  if (!edm::Service<UpdaterService>()->checkOnce("MeasurementTrackerImpl::updateStrips::"+name_)) return;
403 
404  typedef edmNew::DetSet<SiStripCluster> StripDetSet;
405 
406  std::vector<uint32_t> rawInactiveDetIds;
407  getInactiveStrips(event,rawInactiveDetIds);
408 
409  // Strip Clusters
410  std::string stripClusterProducer = pset_.getParameter<std::string>("stripClusterProducer");
411  //first clear all of them
413 
414 
415  if( !stripClusterProducer.compare("") ) return; //clusters have not been produced
416 
417  const int endDet = theStDets.id_.size();
418 
419 
420  // mark as inactive if in rawInactiveDetIds
421  int i=0;
422  unsigned int idp=0;
423  for ( auto id : rawInactiveDetIds) {
424  if (id==idp) continue; // skip multiple id
425  idp=id;
426  i=theStDets.find(id,i);
427  assert(i!=endDet && id == theStDets.id(i));
428  theStDets.setActiveThisEvent(i,false);
429  }
430 
431  //========= actually load cluster =============
432  if(!theStDets.isRegional()){
434  event.getByLabel(stripClusterProducer, clusterHandle);
435  const edmNew::DetSetVector<SiStripCluster>* clusterCollection = clusterHandle.product();
436 
437 
440  //and get the collection of pixel ref to skip
441  LogDebug("MeasurementTracker")<<"getting strp refs to skip";
442  event.getByLabel(pset_.getParameter<edm::InputTag>("skipClusters"),stripClusterMask);
443  if (stripClusterMask.failedToGet()) edm::LogError("MeasurementTracker")<<"not getting the strip clusters to skip";
444  if (stripClusterMask->refProd().id()!=clusterHandle.id()){
445  edm::LogError("ProductIdMismatch")<<"The strip masking does not point to the proper collection of clusters: "<<stripClusterMask->refProd().id()<<"!="<<clusterHandle.id();
446  }
447  stripClusterMask->copyMaskTo(theStDets.theStripsToSkip);
448  }
449 
450  theStDets.handle_ = clusterHandle;
451  int i=0;
452  edmNew::DetSetVector<SiStripCluster>::const_iterator it = (*clusterCollection).begin();
453  edmNew::DetSetVector<SiStripCluster>::const_iterator endColl = (*clusterCollection).end();
454  // cluster and det and in order (both) and unique so let's use set intersection
455  for (;it!=endColl; ++it) {
456  StripDetSet detSet = *it;
457  unsigned int id = detSet.id();
458  while ( id != theStDets.id(i)) { // eventually change to lower_bound
459  ++i;
460  if (endDet==i) throw "we have a problem!!!!";
461  }
462 
463  // push cluster range in det
464  if ( theStDets.isActive(i) )
465  theStDets.update(i,detSet);
466  }
467 
468  }else{ // regional
469 
470  //then set the not-empty ones only
472  event.getByLabel(stripClusterProducer, refClusterHandle);
473 
474  std::string lazyGetter = pset_.getParameter<std::string>("stripLazyGetterProducer");
476  event.getByLabel(lazyGetter,lazyClusterHandle);
477 
480  LogDebug("MeasurementTracker")<<"getting reg strp refs to skip";
481  event.getByLabel(pset_.getParameter<edm::InputTag>("skipClusters"),stripClusterMask);
482  if (stripClusterMask.failedToGet())edm::LogError("MeasurementTracker")<<"not getting the strip clusters to skip";
483  if (stripClusterMask->refProd().id()!=lazyClusterHandle.id()){
484  edm::LogError("ProductIdMismatch")<<"The strip masking does not point to the proper collection of clusters: "<<stripClusterMask->refProd().id()<<"!="<<lazyClusterHandle.id();
485  }
486  stripClusterMask->copyMaskTo(theStDets.theStripsToSkip);
487  }
488 
489  theStDets.regionalHandle_ = lazyClusterHandle;
490 
491  uint32_t tmpId=0;
492  vector<SiStripCluster>::const_iterator beginIterator;
493  edm::RefGetter<SiStripCluster>::const_iterator iregion = refClusterHandle->begin();
494  for(;iregion!=refClusterHandle->end();++iregion) {
495  const edm::RegionIndex<SiStripCluster>& region = *iregion;
496  vector<SiStripCluster>::const_iterator icluster = region.begin();
497  const vector<SiStripCluster>::const_iterator endIterator = region.end();
498  tmpId = icluster->geographicalId();
499  beginIterator = icluster;
500 
501  //std::cout << "== tmpId ad inizio loop dentro region: " << tmpId << std::endl;
502 
503  for (;icluster!=endIterator;icluster++) {
504  //std::cout << "===== cluster id,pos "
505  // << icluster->geographicalId() << " , " << icluster->barycenter()
506  // << std::endl;
507  //std::cout << "=====making ref in recHits() " << std::endl;
508  if( icluster->geographicalId() != tmpId){
509  //std::cout << "geo!=tmpId" << std::endl;
510 
511  //cannot we avoid to update the det with detId of itself?? (sure we can!, done!)
512  theStDets.update(concreteDetUpdatable(tmpId)->index(),beginIterator,icluster);
513 
514  tmpId = icluster->geographicalId();
515  beginIterator = icluster;
516  if( icluster == (endIterator-1)){
517  theStDets.update(concreteDetUpdatable(tmpId)->index(),icluster,endIterator);
518  }
519  }else if( icluster == (endIterator-1)){
520  theStDets.update(concreteDetUpdatable(tmpId)->index(),beginIterator,endIterator);
521  }
522  }//end loop cluster in one ragion
523  }
524  }//end of block for updating with regional clusters
525 }
526 
527 
529 #ifdef EDM_DEBUG //or similar
530  const TkStripMeasurementDet* theConcreteDet =
531  dynamic_cast<const TkStripMeasurementDet*>(findDet(id));
532  if(theConcreteDet == 0)
533  throw MeasurementDetException("failed casting to TkStripMeasurementDet*");
534 #endif
535  // will trigger ondemand unpacking
536  return const_cast<TkStripMeasurementDet*>(static_cast<const TkStripMeasurementDet*>(idToDet(id)));
537 }
538 
539 
540 void MeasurementTrackerImpl::initializeStripStatus(const SiStripQuality *quality, int qualityFlags, int qualityDebugFlags) {
541  edm::ParameterSet cutPset = pset_.getParameter<edm::ParameterSet>("badStripCuts");
542  theStDets.initializeStripStatus(quality, qualityFlags, qualityDebugFlags, cutPset);
543 }
544 
545 void MeasurementTrackerImpl::initializePixelStatus(const SiPixelQuality *quality, const SiPixelFedCabling *pixelCabling, int qualityFlags, int qualityDebugFlags) {
546  if ((quality != 0) && (qualityFlags != 0)) {
547  edm::LogInfo("MeasurementTracker") << "qualityFlags = " << qualityFlags;
548  unsigned int on = 0, tot = 0, badrocs = 0;
549  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
550  i!=thePixelDets.end(); i++) {
551  uint32_t detid = ((**i).geomDet().geographicalId()).rawId();
552  if (qualityFlags & BadModules) {
553  bool isOn = quality->IsModuleUsable(detid);
554  (*i)->setActive(isOn);
555  tot++; on += (unsigned int) isOn;
556  if (qualityDebugFlags & BadModules) {
557  edm::LogInfo("MeasurementTracker")<< "MeasurementTrackerImpl::initializePixelStatus : detid " << detid << " is " << (isOn ? "on" : "off");
558  }
559  } else {
560  (*i)->setActive(true);
561  }
562  if ((qualityFlags & BadROCs) && (quality->getBadRocs(detid) != 0)) {
563  std::vector<LocalPoint> badROCs = quality->getBadRocPositions(detid, *theTrackerGeom, pixelCabling);
564  badrocs += badROCs.size();
565  (*i)->setBadRocPositions(badROCs);
566  } else {
567  (*i)->clearBadRocPositions();
568  }
569  }
570  if (qualityDebugFlags & BadModules) {
571  edm::LogInfo("MeasurementTracker PixelModuleStatus") <<
572  " Total modules: " << tot << ", active " << on <<", inactive " << (tot - on);
573  }
574  if (qualityDebugFlags & BadROCs) {
575  edm::LogInfo("MeasurementTracker PixelROCStatus") << " Total of bad ROCs: " << badrocs ;
576  }
577  } else {
578  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
579  i!=thePixelDets.end(); i++) {
580  (*i)->setActive(true); // module ON
581  }
582  }
583 }
584 
#define LogDebug(id)
virtual char const * what() const
Definition: Exception.cc:141
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
size_type dataSize() const
void init(const MeasurementDet *monoDet, const MeasurementDet *stereoDet)
string fill
Definition: lumiContext.py:319
void addStripDet(const GeomDet *gd)
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:187
std::vector< TkStripMeasurementDet > theStripDets
const GeomDetUnit * monoDet() const
Definition: GluedGeomDet.h:20
const MeasurementDet * findDet(const DetId &id) const
const SiStripRecHitMatcher * matcher() const
ProductID id() const
Definition: HandleBase.cc:15
void initializeStripStatus(const SiStripQuality *stripQuality, int qualityFlags, int qualityDebugFlags)
const TrackerGeometry * theTrackerGeom
void setClusterToSkip(const std::vector< bool > *skip)
const_iterator end() const
Get off the end iterator.
Definition: LazyGetter.h:189
void initGluedDet(TkGluedMeasurementDet &det)
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::vector< unsigned int > id_
void updateStrips(const edm::Event &) const
void update(int i, const StripDetset &detSet)
const std::vector< edm::InputTag > theInactiveStripDetectorLabels
bool int lh
Definition: SSEVec.h:55
std::vector< GeomDet * > DetContainer
const_iterator find(id_type i) const
id_type id(size_t cell) const
void addPixelDets(const TrackingGeometry::DetContainer &dets)
const StripClusterParameterEstimator * stripCPE() const
void addStripDets(const TrackingGeometry::DetContainer &dets)
unsigned int id(int i) const
const GeomDet & fastGeomDet() const
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
virtual void update(const edm::Event &) const
void initializeStripStatus(const SiStripQuality *quality, int qualityFlags, int qualityDebugFlags, edm::ParameterSet cutPset)
MeasurementTrackerImpl(const edm::ParameterSet &conf, const PixelClusterParameterEstimator *pixelCPE, const StripClusterParameterEstimator *stripCPE, const SiStripRecHitMatcher *hitMatcher, const TrackerGeometry *trackerGeom, const GeometricSearchTracker *geometricSearchTracker, const SiStripQuality *stripQuality, int stripQualityFlags, int stripQualityDebugFlags, const SiPixelQuality *pixelQuality, const SiPixelFedCabling *pixelCabling, int pixelQualityFlags, int pixelQualityDebugFlags, bool isRegional=false)
const PixelClusterParameterEstimator * thePixelCPE
const DetContainer & detsTEC() const
edm::Handle< edm::LazyGetter< SiStripCluster > > regionalHandle_
void initializePixelStatus(const SiPixelQuality *stripQuality, const SiPixelFedCabling *pixelCabling, int qualityFlags, int qualityDebugFlags)
void setActiveThisEvent(int i, bool active)
Turn on/off the module for reconstruction for one events. This per-event flag is cleared by any call ...
const std::vector< LocalPoint > getBadRocPositions(const uint32_t &detid, const TrackerGeometry &theTracker, const SiPixelFedCabling *map) const
const GluedGeomDet & specificGeomDet() const
TkStripMeasurementDet * concreteDetUpdatable(DetId id) const
void updatePixels(const edm::Event &) const
const DetContainer & detsPXB() const
const std::vector< edm::InputTag > theInactivePixelDetectorLabels
void setClusterToSkip(const edm::InputTag &cluster, const edm::Event &event) const
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:72
const edm::ParameterSet & pset_
const_iterator end() const
bool IsModuleUsable(const uint32_t &detid) const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
const_iterator begin() const
Get begin iterator.
Definition: LazyGetter.h:180
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
void getInactiveStrips(const edm::Event &event, std::vector< uint32_t > &rawInactiveDetIds) const
tuple conf
Definition: dbtoconf.py:185
const DetContainer & detsTIB() const
int find(unsigned int jd, int i=0)
bool failedToGet() const
Definition: HandleBase.h:80
Definition: DetId.h:20
boost::indirect_iterator< typename collection_type::const_iterator > const_iterator
Definition: RefGetter.h:25
void addGluedDet(const GluedGeomDet *gd)
virtual const MeasurementDet * idToDet(const DetId &id) const
MeasurementDetSystem interface (can be overloaded!)
std::vector< TkGluedMeasurementDet > theGluedDets
T const * product() const
Definition: Handle.h:74
short getBadRocs(const uint32_t &detid) const
bool isActive(int i) const
void addPixelDet(const GeomDet *gd, const PixelClusterParameterEstimator *cpe)
edm::Handle< edmNew::DetSetVector< SiStripCluster > > handle_
const DetContainer & detsPXF() const
const DetContainer & detsTOB() const
std::vector< bool > thePixelsToSkip
std::vector< TkPixelMeasurementDet * > thePixelDets
std::vector< bool > theStripsToSkip
void init(std::vector< TkStripMeasurementDet > &stripDets)
const GeomDetUnit * stereoDet() const
Definition: GluedGeomDet.h:21
const DetContainer & detsTID() const
StMeasurementDetSet theStDets