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 //
48 
49 using namespace std;
50 
51 namespace {
52 
53  struct CmpTKD {
54  bool operator()(MeasurementDet const* rh, MeasurementDet const * lh) {
55  return rh->fastGeomDet().geographicalId().rawId() < lh->fastGeomDet().geographicalId().rawId();
56  }
57  bool operator()(MeasurementDet const & rh, MeasurementDet const & lh) {
59  }
60  };
61 
62  template<typename TKD>
63  void sortTKD( std::vector<TKD*> & det) {
64  std::sort(det.begin(),det.end(),CmpTKD());
65  }
66  template<typename TKD>
67  void sortTKD( std::vector<TKD> & det) {
68  std::sort(det.begin(),det.end(),CmpTKD());
69  }
70 
71 }
72 
73 
75  const PixelClusterParameterEstimator* pixelCPE,
76  const StripClusterParameterEstimator* stripCPE,
77  const SiStripRecHitMatcher* hitMatcher,
78  const TrackerGeometry* trackerGeom,
79  const GeometricSearchTracker* geometricSearchTracker,
80  const SiStripQuality *stripQuality,
81  int stripQualityFlags,
82  int stripQualityDebugFlags,
83  const SiPixelQuality *pixelQuality,
84  const SiPixelFedCabling *pixelCabling,
85  int pixelQualityFlags,
86  int pixelQualityDebugFlags,
87  bool isRegional) :
88  MeasurementTracker(trackerGeom,geometricSearchTracker),
89  pset_(conf),
90  name_(conf.getParameter<std::string>("ComponentName")),
91  theStDets(hitMatcher,stripCPE,isRegional),
92  thePixelCPE(pixelCPE),
93  theInactivePixelDetectorLabels(conf.getParameter<std::vector<edm::InputTag> >("inactivePixelDetectorLabels")),
94  theInactiveStripDetectorLabels(conf.getParameter<std::vector<edm::InputTag> >("inactiveStripDetectorLabels"))
95 {
96  this->initialize();
97  this->initializeStripStatus(stripQuality, stripQualityFlags, stripQualityDebugFlags);
98  this->initializePixelStatus(pixelQuality, pixelCabling, pixelQualityFlags, pixelQualityDebugFlags);
99  //the measurement tracking is set to skip clusters, the other option is set from outside
100  selfUpdateSkipClusters_=conf.exists("skipClusters");
102  {
103  edm::InputTag skip=conf.getParameter<edm::InputTag>("skipClusters");
104  if (skip==edm::InputTag("")) selfUpdateSkipClusters_=false;
105  }
106 
107 
108  LogDebug("MeasurementTracker")<<"skipping clusters: "<<selfUpdateSkipClusters_;
109 }
110 
112 {
113  for(vector<TkPixelMeasurementDet*>::const_iterator it=thePixelDets.begin(); it!=thePixelDets.end(); ++it){
114  delete *it;
115  }
116 
117 }
118 
119 
121 {
124 
129 
130  // fist all stripdets
131  sortTKD(theStripDets);
133  for (unsigned int i=0; i!=theStripDets.size(); ++i)
135 
136  // now the glued dets
137  sortTKD(theGluedDets);
138  for (unsigned int i=0; i!=theGluedDets.size(); ++i)
140 
141  sortTKD(thePixelDets);
142 
143 
144 }
145 
146 
148 {
149  for (TrackerGeometry::DetContainer::const_iterator gd=dets.begin();
150  gd != dets.end(); gd++) {
151  addPixelDet(*gd, thePixelCPE);
152  }
153 }
154 
156 {
157  for (TrackerGeometry::DetContainer::const_iterator gd=dets.begin();
158  gd != dets.end(); gd++) {
159 
160  const GeomDetUnit* gdu = dynamic_cast<const GeomDetUnit*>(*gd);
161 
162  // StripSubdetector stripId( (**gd).geographicalId());
163  // bool isDetUnit( gdu != 0);
164  // cout << "StripSubdetector glued? " << stripId.glued()
165  // << " is DetUnit? " << isDetUnit << endl;
166 
167  if (gdu != 0) {
168  addStripDet(*gd);
169  }
170  else {
171  const GluedGeomDet* gluedDet = dynamic_cast<const GluedGeomDet*>(*gd);
172  if (gluedDet == 0) {
173  throw MeasurementDetException("MeasurementTracker ERROR: GeomDet neither DetUnit nor GluedDet");
174  }
175  addGluedDet(gluedDet);
176  }
177  }
178 }
179 
181 {
182  try {
183  theStripDets.push_back(TkStripMeasurementDet( gd, theStDets));
184  }
185  catch(MeasurementDetException& err){
186  edm::LogError("MeasurementDet") << "Oops, got a MeasurementDetException: " << err.what() ;
187  }
188 }
189 
192 {
193  TkPixelMeasurementDet* det = new TkPixelMeasurementDet( gd, cpe);
194  thePixelDets.push_back(det);
196  theDetMap[gd->geographicalId()] = det;
197 }
198 
200 {
201  theGluedDets.push_back(TkGluedMeasurementDet( gd, theStDets.matcher(), theStDets.stripCPE()));
202 }
203 
204 void MeasurementTrackerImpl::initGluedDet( TkGluedMeasurementDet & det)
205 {
206  const GluedGeomDet& gd = det.specificGeomDet();
207  const MeasurementDet* monoDet = findDet( gd.monoDet()->geographicalId());
208  const MeasurementDet* stereoDet = findDet( gd.stereoDet()->geographicalId());
209  if (monoDet == 0 || stereoDet == 0) {
210  edm::LogError("MeasurementDet") << "MeasurementTracker ERROR: GluedDet components not found as MeasurementDets ";
211  throw MeasurementDetException("MeasurementTracker ERROR: GluedDet components not found as MeasurementDets");
212  }
213  det.init(monoDet,stereoDet);
214  theDetMap[gd.geographicalId()] = &det;
215 }
216 
217 
219 {
220  updatePixels(event);
221  updateStrips(event);
222 
223  /*
224  for (std::vector<TkStripMeasurementDet>::const_iterator i=theStripDets.begin();
225  i!=theStripDets.end(); i++) {
226  if( (*i).isEmpty()){
227  std::cout << "stripDet id, #hits: "
228  << (*i).geomDet().geographicalId().rawId() << " , "
229  << 0 << std::endl;
230  }else{
231  std::cout << "stripDet id, #hits: "
232  << (*i).geomDet().geographicalId().rawId() << " , "
233  << (*i).size() << " " << (*i).detSet().size() std::endl;
234  }
235  }
236  */
237 }
239 {
240  //method called by user of the measurement tracker to tell what needs to be skiped from the event.
241  //there it is incompatible with a configuration in which the measurement tracker already knows what to skip
242  // i.e selfUpdateSkipClusters_=True
243 
244  LogDebug("MeasurementTracker")<<"setClusterToSkip";
246  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";
247 
249  event.getByLabel(cluster,pixelClusterMask);
250 
251 
252  thePixelsToSkip.resize(pixelClusterMask->size());
253  pixelClusterMask->copyMaskTo(thePixelsToSkip);
254 
256  event.getByLabel(cluster,stripClusterMask);
257 
258  theStDets.theStripsToSkip.resize(stripClusterMask->size());
259  stripClusterMask->copyMaskTo(theStDets.theStripsToSkip);
260 
261 }
262 
264  //method called by user of the measurement tracker to tell what needs to be skiped from the event.
265  //there it is incompatible with a configuration in which the measurement tracker already knows what to skip
266  // i.e selfUpdateSkipClusters_=True
267 
268  LogDebug("MeasurementTracker")<<"unsetClusterToSkip";
270  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";
271 
272  thePixelsToSkip.clear();
273  theStDets.theStripsToSkip.clear();
274 }
275 
277 {
278  // avoid to update twice from the same event
279  if (!edm::Service<UpdaterService>()->checkOnce("MeasurementTrackerImpl::updatePixels::"+name_)) return;
280 
281  typedef edmNew::DetSet<SiPixelCluster> PixelDetSet;
282 
283  bool switchOffPixelsIfEmpty = (!pset_.existsAs<bool>("switchOffPixelsIfEmpty")) ||
284  (pset_.getParameter<bool>("switchOffPixelsIfEmpty"));
285 
286  std::vector<uint32_t> rawInactiveDetIds;
287  if (!theInactivePixelDetectorLabels.empty()) {
289  for (std::vector<edm::InputTag>::const_iterator itt = theInactivePixelDetectorLabels.begin(), edt = theInactivePixelDetectorLabels.end();
290  itt != edt; ++itt) {
291  if (event.getByLabel(*itt, detIds)){
292  rawInactiveDetIds.insert(rawInactiveDetIds.end(), detIds->begin(), detIds->end());
293  }else{
294  static bool iFailedAlready=false;
295  if (!iFailedAlready){
296  edm::LogError("MissingProduct")<<"I fail to get the list of inactive pixel modules, because of 4.2/4.4 event content change.";
297  iFailedAlready=true;
298  }
299  }
300  }
301  if (!rawInactiveDetIds.empty()) std::sort(rawInactiveDetIds.begin(), rawInactiveDetIds.end());
302  }
303  // Pixel Clusters
304  std::string pixelClusterProducer = pset_.getParameter<std::string>("pixelClusterProducer");
305  if( pixelClusterProducer.empty() ) { //clusters have not been produced
306  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
307  i!=thePixelDets.end(); i++) {
308  if (switchOffPixelsIfEmpty) {
309  (**i).setActiveThisEvent(false);
310  }else{
311  (**i).setEmpty();
312  }
313  }
314  }else{
315 
317  event.getByLabel(pixelClusterProducer, pixelClusters);
318  const edmNew::DetSetVector<SiPixelCluster>* pixelCollection = pixelClusters.product();
319 
320  if (switchOffPixelsIfEmpty && pixelCollection->empty()) {
321  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
322  i!=thePixelDets.end(); i++) {
323  (**i).setActiveThisEvent(false);
324  }
325  } else {
326 
327  //std::cout <<"updatePixels "<<pixelCollection->dataSize()<<std::endl;
328  thePixelsToSkip.resize(pixelCollection->dataSize());
329  std::fill(thePixelsToSkip.begin(),thePixelsToSkip.end(),false);
330 
333  //and get the collection of pixel ref to skip
334  event.getByLabel(pset_.getParameter<edm::InputTag>("skipClusters"),pixelClusterMask);
335  LogDebug("MeasurementTracker")<<"getting pxl refs to skip";
336  if (pixelClusterMask.failedToGet())edm::LogError("MeasurementTracker")<<"not getting the pixel clusters to skip";
337  if (pixelClusterMask->refProd().id()!=pixelClusters.id()){
338  edm::LogError("ProductIdMismatch")<<"The pixel masking does not point to the proper collection of clusters: "<<pixelClusterMask->refProd().id()<<"!="<<pixelClusters.id();
339  }
340  pixelClusterMask->copyMaskTo(thePixelsToSkip);
341  }
342 
343  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
344  i!=thePixelDets.end(); i++) {
345 
346  // foreach det get cluster range
347  unsigned int id = (**i).geomDet().geographicalId().rawId();
348  if (!rawInactiveDetIds.empty() && std::binary_search(rawInactiveDetIds.begin(), rawInactiveDetIds.end(), id)) {
349  (**i).setActiveThisEvent(false); continue;
350  }
351  //FIXME
352  //fill the set with what needs to be skipped
354  if ( it != pixelCollection->end() ){
355  // push cluster range in det
356  (**i).update( *it, pixelClusters, id );
357  } else{
358  (**i).setEmpty();
359  }
360  }
361  }
362  }
363 }
364 
366  std::vector<uint32_t> & rawInactiveDetIds) const {
367  if (!theInactiveStripDetectorLabels.empty()) {
369  for (std::vector<edm::InputTag>::const_iterator itt = theInactiveStripDetectorLabels.begin(), edt = theInactiveStripDetectorLabels.end();
370  itt != edt; ++itt) {
371  event.getByLabel(*itt, detIds);
372  rawInactiveDetIds.insert(rawInactiveDetIds.end(), detIds->begin(), detIds->end());
373  }
374  if (!rawInactiveDetIds.empty()) std::sort(rawInactiveDetIds.begin(), rawInactiveDetIds.end());
375  }
376 }
377 
379 {
380  // avoid to update twice from the same event
381  if (!edm::Service<UpdaterService>()->checkOnce("MeasurementTrackerImpl::updateStrips::"+name_)) return;
382 
383  typedef edmNew::DetSet<SiStripCluster> StripDetSet;
384 
385  std::vector<uint32_t> rawInactiveDetIds;
386  getInactiveStrips(event,rawInactiveDetIds);
387 
388  // Strip Clusters
389  std::string stripClusterProducer = pset_.getParameter<std::string>("stripClusterProducer");
390  //first clear all of them
392 
393 
394  if( !stripClusterProducer.compare("") ) return; //clusters have not been produced
395 
396  const int endDet = theStDets.id_.size();
397 
398 
399  // mark as inactive if in rawInactiveDetIds
400  int i=0;
401  unsigned int idp=0;
402  for ( auto id : rawInactiveDetIds) {
403  if (id==idp) continue; // skip multiple id
404  idp=id;
405  i=theStDets.find(id,i);
406  assert(i!=endDet && id == theStDets.id(i));
407  theStDets.setActiveThisEvent(i,false);
408  }
409 
410  //========= actually load cluster =============
411  if(!theStDets.isRegional()){
413  event.getByLabel(stripClusterProducer, clusterHandle);
414  const edmNew::DetSetVector<SiStripCluster>* clusterCollection = clusterHandle.product();
415 
416 
419  //and get the collection of pixel ref to skip
420  LogDebug("MeasurementTracker")<<"getting strp refs to skip";
421  event.getByLabel(pset_.getParameter<edm::InputTag>("skipClusters"),stripClusterMask);
422  if (stripClusterMask.failedToGet()) edm::LogError("MeasurementTracker")<<"not getting the strip clusters to skip";
423  if (stripClusterMask->refProd().id()!=clusterHandle.id()){
424  edm::LogError("ProductIdMismatch")<<"The strip masking does not point to the proper collection of clusters: "<<stripClusterMask->refProd().id()<<"!="<<clusterHandle.id();
425  }
426  stripClusterMask->copyMaskTo(theStDets.theStripsToSkip);
427  }
428 
429  theStDets.handle_ = clusterHandle;
430  int i=0;
431  edmNew::DetSetVector<SiStripCluster>::const_iterator it = (*clusterCollection).begin();
432  edmNew::DetSetVector<SiStripCluster>::const_iterator endColl = (*clusterCollection).end();
433  // cluster and det and in order (both) and unique so let's use set intersection
434  for (;it!=endColl; ++it) {
435  StripDetSet detSet = *it;
436  unsigned int id = detSet.id();
437  while ( id != theStDets.id(i)) { // eventually change to lower_bound
438  ++i;
439  if (endDet==i) throw "we have a problem!!!!";
440  }
441 
442  // push cluster range in det
443  if ( theStDets.isActive(i) )
444  theStDets.update(i,detSet);
445  }
446 
447  }else{ // regional
448 
449  //then set the not-empty ones only
451  event.getByLabel(stripClusterProducer, refClusterHandle);
452 
453  std::string lazyGetter = pset_.getParameter<std::string>("stripLazyGetterProducer");
455  event.getByLabel(lazyGetter,lazyClusterHandle);
456 
459  LogDebug("MeasurementTracker")<<"getting reg strp refs to skip";
460  event.getByLabel(pset_.getParameter<edm::InputTag>("skipClusters"),stripClusterMask);
461  if (stripClusterMask.failedToGet())edm::LogError("MeasurementTracker")<<"not getting the strip clusters to skip";
462  if (stripClusterMask->refProd().id()!=lazyClusterHandle.id()){
463  edm::LogError("ProductIdMismatch")<<"The strip masking does not point to the proper collection of clusters: "<<stripClusterMask->refProd().id()<<"!="<<lazyClusterHandle.id();
464  }
465  stripClusterMask->copyMaskTo(theStDets.theStripsToSkip);
466  }
467 
468  theStDets.regionalHandle_ = lazyClusterHandle;
469 
470  uint32_t tmpId=0;
471  vector<SiStripCluster>::const_iterator beginIterator;
472  edm::RefGetter<SiStripCluster>::const_iterator iregion = refClusterHandle->begin();
473  for(;iregion!=refClusterHandle->end();++iregion) {
474  const edm::RegionIndex<SiStripCluster>& region = *iregion;
475  vector<SiStripCluster>::const_iterator icluster = region.begin();
476  const vector<SiStripCluster>::const_iterator endIterator = region.end();
477  tmpId = icluster->geographicalId();
478  beginIterator = icluster;
479 
480  //std::cout << "== tmpId ad inizio loop dentro region: " << tmpId << std::endl;
481 
482  for (;icluster!=endIterator;icluster++) {
483  //std::cout << "===== cluster id,pos "
484  // << icluster->geographicalId() << " , " << icluster->barycenter()
485  // << std::endl;
486  //std::cout << "=====making ref in recHits() " << std::endl;
487  if( icluster->geographicalId() != tmpId){
488  //std::cout << "geo!=tmpId" << std::endl;
489 
490  //cannot we avoid to update the det with detId of itself?? (sure we can!, done!)
491  theStDets.update(concreteDetUpdatable(tmpId)->index(),beginIterator,icluster);
492 
493  tmpId = icluster->geographicalId();
494  beginIterator = icluster;
495  if( icluster == (endIterator-1)){
496  theStDets.update(concreteDetUpdatable(tmpId)->index(),icluster,endIterator);
497  }
498  }else if( icluster == (endIterator-1)){
499  theStDets.update(concreteDetUpdatable(tmpId)->index(),beginIterator,endIterator);
500  }
501  }//end loop cluster in one ragion
502  }
503  }//end of block for updating with regional clusters
504 }
505 
506 
507 TkStripMeasurementDet * MeasurementTrackerImpl::concreteDetUpdatable(DetId id) const {
508 #ifdef EDM_DEBUG //or similar
509  const TkStripMeasurementDet* theConcreteDet =
510  dynamic_cast<const TkStripMeasurementDet*>(findDet(id));
511  if(theConcreteDet == 0)
512  throw MeasurementDetException("failed casting to TkStripMeasurementDet*");
513 #endif
514  // will trigger ondemand unpacking
515  return const_cast<TkStripMeasurementDet*>(static_cast<const TkStripMeasurementDet*>(idToDet(id)));
516 }
517 
518 
519 void MeasurementTrackerImpl::initializeStripStatus(const SiStripQuality *quality, int qualityFlags, int qualityDebugFlags) {
520  edm::ParameterSet cutPset = pset_.getParameter<edm::ParameterSet>("badStripCuts");
521  theStDets.initializeStripStatus(quality, qualityFlags, qualityDebugFlags, cutPset);
522 }
523 
524 void MeasurementTrackerImpl::initializePixelStatus(const SiPixelQuality *quality, const SiPixelFedCabling *pixelCabling, int qualityFlags, int qualityDebugFlags) {
525  if ((quality != 0) && (qualityFlags != 0)) {
526  edm::LogInfo("MeasurementTracker") << "qualityFlags = " << qualityFlags;
527  unsigned int on = 0, tot = 0, badrocs = 0;
528  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
529  i!=thePixelDets.end(); i++) {
530  uint32_t detid = ((**i).geomDet().geographicalId()).rawId();
531  if (qualityFlags & BadModules) {
532  bool isOn = quality->IsModuleUsable(detid);
533  (*i)->setActive(isOn);
534  tot++; on += (unsigned int) isOn;
535  if (qualityDebugFlags & BadModules) {
536  edm::LogInfo("MeasurementTracker")<< "MeasurementTrackerImpl::initializePixelStatus : detid " << detid << " is " << (isOn ? "on" : "off");
537  }
538  } else {
539  (*i)->setActive(true);
540  }
541  if ((qualityFlags & BadROCs) && (quality->getBadRocs(detid) != 0)) {
542  std::vector<LocalPoint> badROCs = quality->getBadRocPositions(detid, *theTrackerGeom, pixelCabling);
543  badrocs += badROCs.size();
544  (*i)->setBadRocPositions(badROCs);
545  } else {
546  (*i)->clearBadRocPositions();
547  }
548  }
549  if (qualityDebugFlags & BadModules) {
550  edm::LogInfo("MeasurementTracker PixelModuleStatus") <<
551  " Total modules: " << tot << ", active " << on <<", inactive " << (tot - on);
552  }
553  if (qualityDebugFlags & BadROCs) {
554  edm::LogInfo("MeasurementTracker PixelROCStatus") << " Total of bad ROCs: " << badrocs ;
555  }
556  } else {
557  for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
558  i!=thePixelDets.end(); i++) {
559  (*i)->setActive(true); // module ON
560  }
561  }
562 }
563 
#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
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)
void initializeStripStatus(const SiStripQuality *quality, int qualityFlags, int qualityDebugFlags, const edm::ParameterSet &cutPset)
const TrackerGeometry * theTrackerGeom
void setClusterToSkip(const std::vector< bool > *skip)
const_iterator end() const
Get off the end iterator.
Definition: LazyGetter.h:191
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: SIMDVec.h:19
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
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
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:182
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
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