CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions
MeasurementTrackerEventProducer Class Referencefinal

#include <MeasurementTrackerEventProducer.h>

Inheritance diagram for MeasurementTrackerEventProducer:
edm::stream::EDProducer<>

Public Member Functions

 MeasurementTrackerEventProducer (const edm::ParameterSet &iConfig)
 
 ~MeasurementTrackerEventProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Protected Member Functions

void getInactiveStrips (const edm::Event &event, std::vector< uint32_t > &rawInactiveDetIds) const
 
void updatePhase2OT (const edm::Event &, Phase2OTMeasurementDetSet &thePh2OTDets) const
 
void updatePixels (const edm::Event &, PxMeasurementDetSet &thePxDets, std::vector< bool > &pixelClustersToSkip, const TrackerGeometry &trackerGeom, const edm::EventSetup &iSetup) const
 
void updateStacks (const edm::Event &, Phase2OTMeasurementDetSet &theStDets) const
 
void updateStrips (const edm::Event &, StMeasurementDetSet &theStDets, std::vector< bool > &stripClustersToSkip) const
 

Protected Attributes

bool isPhase2
 
std::string measurementTrackerLabel_
 
std::string pixelCablingMapLabel_
 
bool selfUpdateSkipClusters_
 
bool switchOffPixelsIfEmpty_
 
std::vector< edm::EDGetTokenT< PixelFEDChannelCollection > > theBadPixelFEDChannelsLabels
 
std::vector< edm::EDGetTokenT< DetIdCollection > > theInactivePixelDetectorLabels
 
std::vector< edm::EDGetTokenT< DetIdCollection > > theInactiveStripDetectorLabels
 
edm::EDGetTokenT< edmNew::DetSetVector< Phase2TrackerCluster1D > > thePh2OTClusterLabel
 
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > thePixelClusterLabel
 
edm::EDGetTokenT< edm::ContainerMask< edmNew::DetSetVector< SiPixelCluster > > > thePixelClusterMask
 
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > theStripClusterLabel
 
edm::EDGetTokenT< edm::ContainerMask< edmNew::DetSetVector< SiStripCluster > > > theStripClusterMask
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 16 of file MeasurementTrackerEventProducer.h.

Constructor & Destructor Documentation

◆ MeasurementTrackerEventProducer()

MeasurementTrackerEventProducer::MeasurementTrackerEventProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 17 of file MeasurementTrackerEventProducer.cc.

18  : measurementTrackerLabel_(iConfig.getParameter<std::string>("measurementTracker")),
19  switchOffPixelsIfEmpty_(iConfig.getParameter<bool>("switchOffPixelsIfEmpty")) {
20  std::vector<edm::InputTag> inactivePixelDetectorTags(
21  iConfig.getParameter<std::vector<edm::InputTag>>("inactivePixelDetectorLabels"));
22  for (auto& t : inactivePixelDetectorTags)
23  theInactivePixelDetectorLabels.push_back(consumes<DetIdCollection>(t));
24 
25  std::vector<edm::InputTag> badPixelFEDChannelCollectionTags =
26  iConfig.getParameter<std::vector<edm::InputTag>>("badPixelFEDChannelCollectionLabels");
27  if (!badPixelFEDChannelCollectionTags.empty()) {
28  for (auto& t : badPixelFEDChannelCollectionTags)
29  theBadPixelFEDChannelsLabels.push_back(consumes<PixelFEDChannelCollection>(t));
30  pixelCablingMapLabel_ = iConfig.getParameter<std::string>("pixelCablingMapLabel");
31  }
32 
33  std::vector<edm::InputTag> inactiveStripDetectorTags(
34  iConfig.getParameter<std::vector<edm::InputTag>>("inactiveStripDetectorLabels"));
35  for (auto& t : inactiveStripDetectorTags)
36  theInactiveStripDetectorLabels.push_back(consumes<DetIdCollection>(t));
37 
38  //the measurement tracking is set to skip clusters, the other option is set from outside
39  edm::InputTag skip = iConfig.getParameter<edm::InputTag>("skipClusters");
41  LogDebug("MeasurementTracker") << "skipping clusters: " << selfUpdateSkipClusters_;
42  isPhase2 = false;
43 
44  if (!iConfig.getParameter<std::string>("stripClusterProducer").empty()) {
45  theStripClusterLabel = consumes<edmNew::DetSetVector<SiStripCluster>>(
46  edm::InputTag(iConfig.getParameter<std::string>("stripClusterProducer")));
48  theStripClusterMask = consumes<edm::ContainerMask<edmNew::DetSetVector<SiStripCluster>>>(
49  iConfig.getParameter<edm::InputTag>("skipClusters"));
50  }
51  if (!iConfig.getParameter<std::string>("pixelClusterProducer").empty()) {
52  thePixelClusterLabel = consumes<edmNew::DetSetVector<SiPixelCluster>>(
53  edm::InputTag(iConfig.getParameter<std::string>("pixelClusterProducer")));
55  thePixelClusterMask = consumes<edm::ContainerMask<edmNew::DetSetVector<SiPixelCluster>>>(
56  iConfig.getParameter<edm::InputTag>("skipClusters"));
57  }
58  if (!iConfig.getParameter<std::string>("Phase2TrackerCluster1DProducer").empty()) {
59  thePh2OTClusterLabel = consumes<edmNew::DetSetVector<Phase2TrackerCluster1D>>(
60  edm::InputTag(iConfig.getParameter<std::string>("Phase2TrackerCluster1DProducer")));
61  isPhase2 = true;
62  }
63 
64  produces<MeasurementTrackerEvent>();
65 }

References edm::ParameterSet::getParameter(), HLT_2018_cff::InputTag, isPhase2, LogDebug, pixelCablingMapLabel_, selfUpdateSkipClusters_, optionsL1T::skip, AlCaHLTBitMon_QueryRunRegistry::string, OrderedSet::t, theBadPixelFEDChannelsLabels, theInactivePixelDetectorLabels, theInactiveStripDetectorLabels, thePh2OTClusterLabel, thePixelClusterLabel, thePixelClusterMask, theStripClusterLabel, and theStripClusterMask.

◆ ~MeasurementTrackerEventProducer()

MeasurementTrackerEventProducer::~MeasurementTrackerEventProducer ( )
inlineoverride

Definition at line 19 of file MeasurementTrackerEventProducer.h.

19 {}

Member Function Documentation

◆ fillDescriptions()

void MeasurementTrackerEventProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 67 of file MeasurementTrackerEventProducer.cc.

67  {
69 
70  desc.add<std::string>("measurementTracker", "");
71  desc.add<edm::InputTag>("skipClusters", edm::InputTag());
72  desc.add<std::string>("pixelClusterProducer", "siPixelClusters");
73  desc.add<std::string>("stripClusterProducer", "siStripClusters");
74  desc.add<std::string>("Phase2TrackerCluster1DProducer", "");
75 
76  desc.add<std::vector<edm::InputTag>>("inactivePixelDetectorLabels",
77  std::vector<edm::InputTag>{{edm::InputTag("siPixelDigis")}})
78  ->setComment("One or more DetIdCollections of modules to mask on the fly for a given event");
79  desc.add<std::vector<edm::InputTag>>("badPixelFEDChannelCollectionLabels", std::vector<edm::InputTag>())
80  ->setComment("One or more PixelFEDChannelCollections of modules+ROCs to mask on the fly for a given event");
81  desc.add<std::string>("pixelCablingMapLabel", "");
82 
83  desc.add<std::vector<edm::InputTag>>("inactiveStripDetectorLabels",
84  std::vector<edm::InputTag>{{edm::InputTag("siStripDigis")}})
85  ->setComment("One or more DetIdCollections of modules to mask on the fly for a given event");
86 
87  desc.add<bool>("switchOffPixelsIfEmpty", true)->setComment("let's keep it like this, for cosmics");
88 
89  descriptions.add("measurementTrackerEventDefault", desc);
90 }

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), HLT_2018_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

◆ getInactiveStrips()

void MeasurementTrackerEventProducer::getInactiveStrips ( const edm::Event event,
std::vector< uint32_t > &  rawInactiveDetIds 
) const
protected

Definition at line 390 of file MeasurementTrackerEventProducer.cc.

391  {
392  if (!theInactiveStripDetectorLabels.empty()) {
395  if (event.getByToken(tk, detIds)) {
396  rawInactiveDetIds.insert(rawInactiveDetIds.end(), detIds->begin(), detIds->end());
397  }
398  }
399  if (!rawInactiveDetIds.empty())
400  std::sort(rawInactiveDetIds.begin(), rawInactiveDetIds.end());
401  }
402 }

References edm::EDCollection< T >::begin(), edm::EDCollection< T >::end(), and theInactiveStripDetectorLabels.

Referenced by updateStrips().

◆ produce()

void MeasurementTrackerEventProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 92 of file MeasurementTrackerEventProducer.cc.

92  {
95 
96  // create new data structures from templates
97  auto stripData = std::make_unique<StMeasurementDetSet>(measurementTracker->stripDetConditions());
98  auto pixelData = std::make_unique<PxMeasurementDetSet>(measurementTracker->pixelDetConditions());
99  auto phase2OTData = std::make_unique<Phase2OTMeasurementDetSet>(measurementTracker->phase2DetConditions());
100  std::vector<bool> stripClustersToSkip;
101  std::vector<bool> pixelClustersToSkip;
102  std::vector<bool> phase2ClustersToSkip;
103  // fill them
104  updateStrips(iEvent, *stripData, stripClustersToSkip);
106  *pixelData,
107  pixelClustersToSkip,
108  dynamic_cast<const TrackerGeometry&>(*(measurementTracker->geomTracker())),
109  iSetup);
110  updatePhase2OT(iEvent, *phase2OTData);
111  updateStacks(iEvent, *phase2OTData);
112 
113  // put into MTE
114  // put into event
115  iEvent.put(std::make_unique<MeasurementTrackerEvent>(*measurementTracker,
116  stripData.release(),
117  pixelData.release(),
118  phase2OTData.release(),
119  stripClustersToSkip,
120  pixelClustersToSkip,
121  phase2ClustersToSkip));
122 }

References edm::EventSetup::get(), get, iEvent, HLTSiStripMonitoring_cff::measurementTracker, measurementTrackerLabel_, updatePhase2OT(), updatePixels(), updateStacks(), and updateStrips().

◆ updatePhase2OT()

void MeasurementTrackerEventProducer::updatePhase2OT ( const edm::Event event,
Phase2OTMeasurementDetSet thePh2OTDets 
) const
protected

Definition at line 351 of file MeasurementTrackerEventProducer.cc.

352  {
353  // Phase2OT Clusters
354  if (isPhase2) {
355  if (thePh2OTClusterLabel.isUninitialized()) { //clusters have not been produced
356  thePh2OTDets.setActiveThisEvent(false);
357  } else {
359  if (event.getByToken(thePh2OTClusterLabel, phase2OTClusters)) {
360  const edmNew::DetSetVector<Phase2TrackerCluster1D>* phase2OTCollection = phase2OTClusters.product();
361 
362  int i = 0, endDet = thePh2OTDets.size();
364  ed = phase2OTCollection->end();
365  it != ed;
366  ++it) {
368  unsigned int id = set.id();
369  while (id != thePh2OTDets.id(i)) {
370  ++i;
371  if (endDet == i)
372  throw "we have a problem!!!!";
373  }
374  // push cluster range in det
375  if (thePh2OTDets.isActive(i)) {
376  thePh2OTDets.update(i, set);
377  }
378  }
379  } else {
381  labelsForToken(thePh2OTClusterLabel, labels);
382  edm::LogWarning("MeasurementTrackerEventProducer")
383  << "input Phase2TrackerCluster1D collection " << labels.module << " is not valid";
384  }
385  }
386  }
387  return;
388 }

References edmNew::DetSetVector< T >::begin(), edmNew::DetSetVector< T >::end(), Phase2OTMeasurementDetSet::handle(), mps_fire::i, edmNew::DetSet< T >::id(), Phase2OTMeasurementDetSet::id(), Phase2OTMeasurementDetSet::isActive(), isPhase2, edm::EDGetTokenT< T >::isUninitialized(), SummaryClient_cfi::labels, seedClusterRemoverPhase2_cfi::phase2OTClusters, Phase2OTMeasurementDetSet::setActiveThisEvent(), Phase2OTMeasurementDetSet::size(), thePh2OTClusterLabel, and Phase2OTMeasurementDetSet::update().

Referenced by produce().

◆ updatePixels()

void MeasurementTrackerEventProducer::updatePixels ( const edm::Event event,
PxMeasurementDetSet thePxDets,
std::vector< bool > &  pixelClustersToSkip,
const TrackerGeometry trackerGeom,
const edm::EventSetup iSetup 
) const
protected

Definition at line 124 of file MeasurementTrackerEventProducer.cc.

128  {
129  // start by clearinng everything
130  thePxDets.setEmpty();
131 
132  std::vector<uint32_t> rawInactiveDetIds;
133  if (!theInactivePixelDetectorLabels.empty()) {
136  if (event.getByToken(tk, detIds)) {
137  rawInactiveDetIds.insert(rawInactiveDetIds.end(), detIds->begin(), detIds->end());
138  } else {
139  static std::atomic<bool> iFailedAlready{false};
140  bool expected = false;
141  if (iFailedAlready.compare_exchange_strong(expected, true, std::memory_order_acq_rel)) {
142  edm::LogError("MissingProduct")
143  << "I fail to get the list of inactive pixel modules, because of 4.2/4.4 event content change.";
144  }
145  }
146  }
147  if (!rawInactiveDetIds.empty())
148  std::sort(rawInactiveDetIds.begin(), rawInactiveDetIds.end());
149  // mark as inactive if in rawInactiveDetIds
150  int i = 0, endDet = thePxDets.size();
151  unsigned int idp = 0;
152  for (auto id : rawInactiveDetIds) {
153  if (id == idp)
154  continue; // skip multiple id
155  idp = id;
156  i = thePxDets.find(id, i);
157  assert(i != endDet && id == thePxDets.id(i));
158  thePxDets.setActiveThisEvent(i, false);
159  }
160  }
161 
162  if (!theBadPixelFEDChannelsLabels.empty()) {
164  iSetup.get<SiPixelFedCablingMapRcd>().get(pixelCablingMapLabel_, cablingMap);
165 
166  edm::Handle<PixelFEDChannelCollection> pixelFEDChannelCollectionHandle;
168  if (!event.getByToken(tk, pixelFEDChannelCollectionHandle))
169  continue;
170  int i = 0;
171  for (const auto& disabledChannels : *pixelFEDChannelCollectionHandle) {
173  for (const auto& ch : disabledChannels) {
174  const sipixelobjects::PixelROC *roc_first = nullptr, *roc_last = nullptr;
175  sipixelobjects::CablingPathToDetUnit path = {ch.fed, ch.link, 0};
176  // PixelFEDChannelCollection addresses the ROCs by their 'idInDetUnit' (from 0 to 15), ROCs also know their on 'idInDetUnit',
177  // however the cabling map uses a numbering [1,numberOfROCs], see sipixelobjects::PixelFEDLink::roc(unsigned int id), not necessarily sorted in the same direction.
178  // PixelFEDChannelCollection MUST be filled such that ch.roc_first (ch.roc_last) correspond to the lowest (highest) 'idInDetUnit' in the channel
179  for (path.roc = 1; path.roc <= (ch.roc_last - ch.roc_first) + 1; path.roc++) {
180  const sipixelobjects::PixelROC* roc = cablingMap->findItem(path);
181  if (roc == nullptr)
182  continue;
183  assert(roc->rawId() == disabledChannels.detId());
184  if (roc->idInDetUnit() == ch.roc_first)
185  roc_first = roc;
186  if (roc->idInDetUnit() == ch.roc_last)
187  roc_last = roc;
188  }
189  if (roc_first == nullptr || roc_last == nullptr) {
190  edm::LogError("PixelFEDChannelCollection")
191  << "Do not find either roc_first or roc_last in the cabling map.";
192  continue;
193  }
194  const PixelGeomDetUnit* theGeomDet =
195  dynamic_cast<const PixelGeomDetUnit*>(trackerGeom.idToDet(roc_first->rawId()));
196  PixelTopology const* topology = &(theGeomDet->specificTopology());
198  topology->rowsperroc() / 2, topology->colsperroc() / 2}; //corresponding to center of ROC row, col
200  LocalPoint lp1 = topology->localPosition(MeasurementPoint(global.row, global.col));
201  global = roc_last->toGlobal(sipixelobjects::LocalPixel(local));
202  LocalPoint lp2 = topology->localPosition(MeasurementPoint(global.row, global.col));
203  LocalPoint ll(std::min(lp1.x(), lp2.x()), std::min(lp1.y(), lp2.y()), std::min(lp1.z(), lp2.z()));
204  LocalPoint ur(std::max(lp1.x(), lp2.x()), std::max(lp1.y(), lp2.y()), std::max(lp1.z(), lp2.z()));
205  positions.push_back(std::make_pair(ll, ur));
206  } // loop on channels
207  if (!positions.empty()) {
208  i = thePxDets.find(disabledChannels.detId(), i);
209  assert(i != thePxDets.size() && thePxDets.id(i) == disabledChannels.detId());
210  thePxDets.addBadFEDChannelPositions(i, positions);
211  }
212  } // loop on DetId-s
213  } // loop on labels
214  } // if collection labels are populated
215 
216  // Pixel Clusters
217  if (thePixelClusterLabel.isUninitialized()) { //clusters have not been produced
219  thePxDets.setActiveThisEvent(false);
220  }
221  } else {
223  if (event.getByToken(thePixelClusterLabel, pixelClusters)) {
224  const edmNew::DetSetVector<SiPixelCluster>* pixelCollection = pixelClusters.product();
225 
226  if (switchOffPixelsIfEmpty_ && pixelCollection->empty()) {
227  thePxDets.setActiveThisEvent(false);
228  } else {
229  //std::cout <<"updatePixels "<<pixelCollection->dataSize()<<std::endl;
230  pixelClustersToSkip.resize(pixelCollection->dataSize());
231  std::fill(pixelClustersToSkip.begin(), pixelClustersToSkip.end(), false);
232 
235  //and get the collection of pixel ref to skip
236  event.getByToken(thePixelClusterMask, pixelClusterMask);
237  LogDebug("MeasurementTracker") << "getting pxl refs to skip";
238  if (pixelClusterMask.failedToGet())
239  edm::LogError("MeasurementTracker") << "not getting the pixel clusters to skip";
240  if (pixelClusterMask->refProd().id() != pixelClusters.id()) {
241  edm::LogError("ProductIdMismatch")
242  << "The pixel masking does not point to the proper collection of clusters: "
243  << pixelClusterMask->refProd().id() << "!=" << pixelClusters.id();
244  }
245  pixelClusterMask->copyMaskTo(pixelClustersToSkip);
246  }
247 
248  // FIXME: should check if lower_bound is better
249  int i = 0, endDet = thePxDets.size();
250  for (edmNew::DetSetVector<SiPixelCluster>::const_iterator it = pixelCollection->begin(),
251  ed = pixelCollection->end();
252  it != ed;
253  ++it) {
255  unsigned int id = set.id();
256  while (id != thePxDets.id(i)) {
257  ++i;
258  if (endDet == i)
259  throw "we have a problem!!!!";
260  }
261  // push cluster range in det
262  if (thePxDets.isActive(i)) {
263  thePxDets.update(i, set);
264  }
265  }
266  }
267  } else {
269  labelsForToken(thePixelClusterLabel, labels);
270  edm::LogWarning("MeasurementTrackerEventProducer")
271  << "input pixel clusters collection " << labels.module << " is not valid";
272  }
273  }
274 }

References PxMeasurementDetSet::addBadFEDChannelPositions(), cms::cuda::assert(), edm::EDCollection< T >::begin(), edmNew::DetSetVector< T >::begin(), sipixelobjects::GlobalPixel::col, edmNew::DetSetVector< T >::dataSize(), edmNew::DetSetVector< T >::empty(), edm::EDCollection< T >::end(), edmNew::DetSetVector< T >::end(), edm::HandleBase::failedToGet(), ntuplemaker::fill, PxMeasurementDetSet::find(), SiPixelFedCablingMap::findItem(), edm::EventSetup::get(), get, PxMeasurementDetSet::handle(), mps_fire::i, triggerObjects_cff::id, edmNew::DetSet< T >::id(), edm::HandleBase::id(), PxMeasurementDetSet::id(), TrackerGeometry::idToDet(), PxMeasurementDetSet::isActive(), edm::EDGetTokenT< T >::isUninitialized(), SummaryClient_cfi::labels, DTRecHitClients_cfi::local, LogDebug, SiStripPI::max, min(), castor_dqm_sourceclient_file_cfg::path, pixelCablingMapLabel_, LumiMonitor_cff::pixelClusters, sipixelobjects::PixelROC::rawId(), PixelMapPlotter::roc, sipixelobjects::GlobalPixel::row, selfUpdateSkipClusters_, PxMeasurementDetSet::setActiveThisEvent(), PxMeasurementDetSet::setEmpty(), PxMeasurementDetSet::size(), PixelGeomDetUnit::specificTopology(), switchOffPixelsIfEmpty_, theBadPixelFEDChannelsLabels, theInactivePixelDetectorLabels, thePixelClusterLabel, thePixelClusterMask, sipixelobjects::PixelROC::toGlobal(), ecaldqm::topology(), PxMeasurementDetSet::update(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce().

◆ updateStacks()

void MeasurementTrackerEventProducer::updateStacks ( const edm::Event ,
Phase2OTMeasurementDetSet theStDets 
) const
inlineprotected

Definition at line 35 of file MeasurementTrackerEventProducer.h.

35 {};

Referenced by produce().

◆ updateStrips()

void MeasurementTrackerEventProducer::updateStrips ( const edm::Event event,
StMeasurementDetSet theStDets,
std::vector< bool > &  stripClustersToSkip 
) const
protected

Definition at line 276 of file MeasurementTrackerEventProducer.cc.

278  {
279  typedef edmNew::DetSet<SiStripCluster> StripDetSet;
280 
281  std::vector<uint32_t> rawInactiveDetIds;
282  getInactiveStrips(event, rawInactiveDetIds);
283 
284  // Strip Clusters
285  //first clear all of them
286  theStDets.setEmpty();
287 
289  return; //clusters have not been produced
290 
291  const int endDet = theStDets.size();
292 
293  // mark as inactive if in rawInactiveDetIds
294  int i = 0;
295  unsigned int idp = 0;
296  for (auto id : rawInactiveDetIds) {
297  if (id == idp)
298  continue; // skip multiple id
299  idp = id;
300  i = theStDets.find(id, i);
301  assert(i != endDet && id == theStDets.id(i));
302  theStDets.setActiveThisEvent(i, false);
303  }
304 
305  //========= actually load cluster =============
306  {
308  if (event.getByToken(theStripClusterLabel, clusterHandle)) {
309  const edmNew::DetSetVector<SiStripCluster>* clusterCollection = clusterHandle.product();
310 
313  //and get the collection of pixel ref to skip
314  LogDebug("MeasurementTracker") << "getting strp refs to skip";
315  event.getByToken(theStripClusterMask, stripClusterMask);
316  if (stripClusterMask.failedToGet())
317  edm::LogError("MeasurementTracker") << "not getting the strip clusters to skip";
318  if (stripClusterMask->refProd().id() != clusterHandle.id()) {
319  edm::LogError("ProductIdMismatch")
320  << "The strip masking does not point to the proper collection of clusters: "
321  << stripClusterMask->refProd().id() << "!=" << clusterHandle.id();
322  }
323  stripClusterMask->copyMaskTo(stripClustersToSkip);
324  }
325 
326  theStDets.handle() = clusterHandle;
327  int i = 0;
328  // cluster and det and in order (both) and unique so let's use set intersection
329  for (auto j = 0U; j < (*clusterCollection).size(); ++j) {
330  unsigned int id = (*clusterCollection).id(j);
331  while (id != theStDets.id(i)) { // eventually change to lower_bound
332  ++i;
333  if (endDet == i)
334  throw "we have a problem in strips!!!!";
335  }
336 
337  // push cluster range in det
338  if (theStDets.isActive(i))
339  theStDets.update(i, j);
340  }
341  } else {
343  labelsForToken(theStripClusterLabel, labels);
344  edm::LogWarning("MeasurementTrackerEventProducer")
345  << "input strip cluster collection " << labels.module << " is not valid";
346  }
347  }
348 }

References cms::cuda::assert(), edm::HandleBase::failedToGet(), StMeasurementDetSet::find(), getInactiveStrips(), StMeasurementDetSet::handle(), mps_fire::i, triggerObjects_cff::id, edm::HandleBase::id(), StMeasurementDetSet::id(), StMeasurementDetSet::isActive(), edm::EDGetTokenT< T >::isUninitialized(), dqmiolumiharvest::j, SummaryClient_cfi::labels, LogDebug, edm::Handle< T >::product(), selfUpdateSkipClusters_, StMeasurementDetSet::setActiveThisEvent(), StMeasurementDetSet::setEmpty(), StMeasurementDetSet::size(), theStripClusterLabel, theStripClusterMask, mitigatedMETSequence_cff::U, and StMeasurementDetSet::update().

Referenced by produce().

Member Data Documentation

◆ isPhase2

bool MeasurementTrackerEventProducer::isPhase2
protected

◆ measurementTrackerLabel_

std::string MeasurementTrackerEventProducer::measurementTrackerLabel_
protected

Definition at line 39 of file MeasurementTrackerEventProducer.h.

Referenced by produce().

◆ pixelCablingMapLabel_

std::string MeasurementTrackerEventProducer::pixelCablingMapLabel_
protected

◆ selfUpdateSkipClusters_

bool MeasurementTrackerEventProducer::selfUpdateSkipClusters_
protected

◆ switchOffPixelsIfEmpty_

bool MeasurementTrackerEventProducer::switchOffPixelsIfEmpty_
protected

Definition at line 52 of file MeasurementTrackerEventProducer.h.

Referenced by updatePixels().

◆ theBadPixelFEDChannelsLabels

std::vector<edm::EDGetTokenT<PixelFEDChannelCollection> > MeasurementTrackerEventProducer::theBadPixelFEDChannelsLabels
protected

◆ theInactivePixelDetectorLabels

std::vector<edm::EDGetTokenT<DetIdCollection> > MeasurementTrackerEventProducer::theInactivePixelDetectorLabels
protected

◆ theInactiveStripDetectorLabels

std::vector<edm::EDGetTokenT<DetIdCollection> > MeasurementTrackerEventProducer::theInactiveStripDetectorLabels
protected

◆ thePh2OTClusterLabel

edm::EDGetTokenT<edmNew::DetSetVector<Phase2TrackerCluster1D> > MeasurementTrackerEventProducer::thePh2OTClusterLabel
protected

◆ thePixelClusterLabel

edm::EDGetTokenT<edmNew::DetSetVector<SiPixelCluster> > MeasurementTrackerEventProducer::thePixelClusterLabel
protected

◆ thePixelClusterMask

edm::EDGetTokenT<edm::ContainerMask<edmNew::DetSetVector<SiPixelCluster> > > MeasurementTrackerEventProducer::thePixelClusterMask
protected

◆ theStripClusterLabel

edm::EDGetTokenT<edmNew::DetSetVector<SiStripCluster> > MeasurementTrackerEventProducer::theStripClusterLabel
protected

◆ theStripClusterMask

edm::EDGetTokenT<edm::ContainerMask<edmNew::DetSetVector<SiStripCluster> > > MeasurementTrackerEventProducer::theStripClusterMask
protected
TrackerGeometry::idToDet
const TrackerGeomDet * idToDet(DetId) const override
Definition: TrackerGeometry.cc:193
SummaryClient_cfi.labels
labels
Definition: SummaryClient_cfi.py:61
edm::EDCollection::begin
const_iterator begin() const
Definition: EDCollection.h:117
mps_fire.i
i
Definition: mps_fire.py:355
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
LumiMonitor_cff.pixelClusters
pixelClusters
Definition: LumiMonitor_cff.py:10
MeasurementTrackerEventProducer::theStripClusterMask
edm::EDGetTokenT< edm::ContainerMask< edmNew::DetSetVector< SiStripCluster > > > theStripClusterMask
Definition: MeasurementTrackerEventProducer.h:44
MeasurementTrackerEventProducer::thePh2OTClusterLabel
edm::EDGetTokenT< edmNew::DetSetVector< Phase2TrackerCluster1D > > thePh2OTClusterLabel
Definition: MeasurementTrackerEventProducer.h:42
edm::Handle::product
T const * product() const
Definition: Handle.h:70
MeasurementTrackerEventProducer::theInactivePixelDetectorLabels
std::vector< edm::EDGetTokenT< DetIdCollection > > theInactivePixelDetectorLabels
Definition: MeasurementTrackerEventProducer.h:46
PxMeasurementDetSet::update
void update(int i, const PixelDetSet &detSet)
Definition: TkMeasurementDetSet.h:339
HLTSiStripMonitoring_cff.measurementTracker
measurementTracker
Definition: HLTSiStripMonitoring_cff.py:178
StMeasurementDetSet::size
int size() const
Definition: TkMeasurementDetSet.h:173
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
min
T min(T a, T b)
Definition: MathUtil.h:58
edm::EDGetTokenT
Definition: EDGetToken.h:33
PxMeasurementDetSet::size
int size() const
Definition: TkMeasurementDetSet.h:334
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
StMeasurementDetSet::setEmpty
void setEmpty(int i)
Definition: TkMeasurementDetSet.h:181
edmNew::DetSetVector::const_iterator
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetSetVectorNew.h:231
Phase2OTMeasurementDetSet::setActiveThisEvent
void setActiveThisEvent(bool active)
Definition: TkMeasurementDetSet.h:465
cms::cuda::assert
assert(be >=bs)
PxMeasurementDetSet::find
int find(unsigned int jd, int i=0) const
Definition: TkMeasurementDetSet.h:337
sipixelobjects::GlobalPixel::row
int row
Definition: GlobalPixel.h:7
edmNew::DetSetVector::begin
const_iterator begin(bool update=false) const
Definition: DetSetVectorNew.h:572
Phase2OTMeasurementDetSet::update
void update(int i, const Phase2DetSet &detSet)
Definition: TkMeasurementDetSet.h:448
edm::Handle
Definition: AssociativeIterator.h:50
sipixelobjects::GlobalPixel::col
int col
Definition: GlobalPixel.h:8
sipixelobjects::LocalPixel
identify pixel inside single ROC
Definition: LocalPixel.h:7
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
optionsL1T.skip
skip
Definition: optionsL1T.py:30
PxMeasurementDetSet::id
unsigned int id(int i) const
Definition: TkMeasurementDetSet.h:336
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
sipixelobjects::GlobalPixel
global coordinates (row and column in DetUnit, as in PixelDigi)
Definition: GlobalPixel.h:6
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
MeasurementTrackerEventProducer::updateStrips
void updateStrips(const edm::Event &, StMeasurementDetSet &theStDets, std::vector< bool > &stripClustersToSkip) const
Definition: MeasurementTrackerEventProducer.cc:276
CkfComponentsRecord
Definition: CkfComponentsRecord.h:22
ecaldqm::topology
const CaloTopology * topology(nullptr)
MeasurementTrackerEventProducer::thePixelClusterMask
edm::EDGetTokenT< edm::ContainerMask< edmNew::DetSetVector< SiPixelCluster > > > thePixelClusterMask
Definition: MeasurementTrackerEventProducer.h:43
MeasurementTrackerEventProducer::theInactiveStripDetectorLabels
std::vector< edm::EDGetTokenT< DetIdCollection > > theInactiveStripDetectorLabels
Definition: MeasurementTrackerEventProducer.h:49
edm::EDGetTokenT::isUninitialized
bool isUninitialized() const
Definition: EDGetToken.h:70
PixelGeomDetUnit
Definition: PixelGeomDetUnit.h:15
sipixelobjects::CablingPathToDetUnit
Definition: CablingPathToDetUnit.h:5
PxMeasurementDetSet::handle
const edm::Handle< edmNew::DetSetVector< SiPixelCluster > > & handle() const
Definition: TkMeasurementDetSet.h:385
PxMeasurementDetSet::setEmpty
void setEmpty(int i)
Definition: TkMeasurementDetSet.h:347
edm::ESHandle< MeasurementTracker >
edmNew::DetSet
Definition: DetSetNew.h:22
Phase2OTMeasurementDetSet::handle
const edm::Handle< edmNew::DetSetVector< Phase2TrackerCluster1D > > & handle() const
Definition: TkMeasurementDetSet.h:471
Point3DBase< float, LocalTag >
OrderedSet.t
t
Definition: OrderedSet.py:90
PixelTopology
Definition: PixelTopology.h:10
sipixelobjects::PixelROC::rawId
uint32_t rawId() const
return the DetUnit to which this ROC belongs to.
Definition: PixelROC.h:34
Phase2OTMeasurementDetSet::id
unsigned int id(int i) const
Definition: TkMeasurementDetSet.h:445
edmNew::DetSetVector::dataSize
size_type dataSize() const
Definition: DetSetVectorNew.h:594
mitigatedMETSequence_cff.U
U
Definition: mitigatedMETSequence_cff.py:36
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::LogWarning
Definition: MessageLogger.h:141
MeasurementPoint
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
Definition: MeasurementPoint.h:12
ntuplemaker.fill
fill
Definition: ntuplemaker.py:304
MeasurementTrackerEventProducer::measurementTrackerLabel_
std::string measurementTrackerLabel_
Definition: MeasurementTrackerEventProducer.h:39
PxMeasurementDetSet::BadFEDChannelPositions
std::vector< std::pair< LocalPoint, LocalPoint > > BadFEDChannelPositions
Definition: TkMeasurementDetSet.h:327
edm::HandleBase::failedToGet
bool failedToGet() const
Definition: HandleBase.h:72
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::LogError
Definition: MessageLogger.h:183
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
edmNew::DetSetVector::empty
bool empty() const
Definition: DetSetVectorNew.h:592
PixelGeomDetUnit::specificTopology
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
Definition: PixelGeomDetUnit.cc:17
MeasurementTrackerEventProducer::updatePixels
void updatePixels(const edm::Event &, PxMeasurementDetSet &thePxDets, std::vector< bool > &pixelClustersToSkip, const TrackerGeometry &trackerGeom, const edm::EventSetup &iSetup) const
Definition: MeasurementTrackerEventProducer.cc:124
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
iEvent
int iEvent
Definition: GenABIO.cc:224
MeasurementTrackerEventProducer::updateStacks
void updateStacks(const edm::Event &, Phase2OTMeasurementDetSet &theStDets) const
Definition: MeasurementTrackerEventProducer.h:35
MeasurementTrackerEventProducer::pixelCablingMapLabel_
std::string pixelCablingMapLabel_
Definition: MeasurementTrackerEventProducer.h:48
MeasurementTrackerEventProducer::isPhase2
bool isPhase2
Definition: MeasurementTrackerEventProducer.h:53
sipixelobjects::PixelROC::toGlobal
GlobalPixel toGlobal(const LocalPixel &loc) const
Definition: PixelROC.h:55
get
#define get
StMeasurementDetSet::find
int find(unsigned int jd, int i=0) const
Definition: TkMeasurementDetSet.h:176
PxMeasurementDetSet::addBadFEDChannelPositions
void addBadFEDChannelPositions(int i, BadFEDChannelPositions &positions)
Definition: TkMeasurementDetSet.h:369
seedClusterRemoverPhase2_cfi.phase2OTClusters
phase2OTClusters
Definition: seedClusterRemoverPhase2_cfi.py:5
MeasurementTrackerEventProducer::theBadPixelFEDChannelsLabels
std::vector< edm::EDGetTokenT< PixelFEDChannelCollection > > theBadPixelFEDChannelsLabels
Definition: MeasurementTrackerEventProducer.h:47
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
MeasurementTrackerEventProducer::thePixelClusterLabel
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > thePixelClusterLabel
Definition: MeasurementTrackerEventProducer.h:40
sipixelobjects::PixelROC
Definition: PixelROC.h:23
edmNew::DetSetVector
Definition: DetSetNew.h:13
StMeasurementDetSet::handle
edm::Handle< edmNew::DetSetVector< SiStripCluster > > & handle()
Definition: TkMeasurementDetSet.h:204
MeasurementTrackerEventProducer::theStripClusterLabel
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > theStripClusterLabel
Definition: MeasurementTrackerEventProducer.h:41
Phase2OTMeasurementDetSet::isActive
bool isActive(int i) const
Definition: TkMeasurementDetSet.h:454
MeasurementTrackerEventProducer::updatePhase2OT
void updatePhase2OT(const edm::Event &, Phase2OTMeasurementDetSet &thePh2OTDets) const
Definition: MeasurementTrackerEventProducer.cc:351
sipixelobjects::LocalPixel::RocRowCol
row and collumn in ROC representation
Definition: LocalPixel.h:13
StMeasurementDetSet::setActiveThisEvent
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 ...
Definition: TkMeasurementDetSet.h:198
PxMeasurementDetSet::isActive
bool isActive(int i) const
Definition: TkMeasurementDetSet.h:345
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
edmNew::DetSetVector::end
const_iterator end(bool update=false) const
Definition: DetSetVectorNew.h:577
PixelMapPlotter.roc
roc
Definition: PixelMapPlotter.py:498
StMeasurementDetSet::id
unsigned int id(int i) const
Definition: TkMeasurementDetSet.h:175
StMeasurementDetSet::isActive
bool isActive(int i) const
Definition: TkMeasurementDetSet.h:179
castor_dqm_sourceclient_file_cfg.path
path
Definition: castor_dqm_sourceclient_file_cfg.py:37
DTRecHitClients_cfi.local
local
Definition: DTRecHitClients_cfi.py:10
PxMeasurementDetSet::setActiveThisEvent
void setActiveThisEvent(bool active)
Definition: TkMeasurementDetSet.h:361
StMeasurementDetSet::update
void update(int i, const StripDetset &detSet)
Definition: TkMeasurementDetSet.h:159
SiPixelFedCablingMapRcd
Definition: SiPixelFedCablingMapRcd.h:5
MeasurementTrackerEventProducer::getInactiveStrips
void getInactiveStrips(const edm::Event &event, std::vector< uint32_t > &rawInactiveDetIds) const
Definition: MeasurementTrackerEventProducer.cc:390
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
event
Definition: event.py:1
edm::HandleBase::id
ProductID id() const
Definition: HandleBase.cc:13
SiPixelFedCablingMap::findItem
const sipixelobjects::PixelROC * findItem(const sipixelobjects::CablingPathToDetUnit &path) const final
Definition: SiPixelFedCablingMap.cc:124
edm::InputTag
Definition: InputTag.h:15
edm::EDCollection::end
const_iterator end() const
Definition: EDCollection.h:122
Phase2OTMeasurementDetSet::size
int size() const
Definition: TkMeasurementDetSet.h:443
MeasurementTrackerEventProducer::switchOffPixelsIfEmpty_
bool switchOffPixelsIfEmpty_
Definition: MeasurementTrackerEventProducer.h:52
edm::ProductLabels
Definition: ProductLabels.h:4
MeasurementTrackerEventProducer::selfUpdateSkipClusters_
bool selfUpdateSkipClusters_
Definition: MeasurementTrackerEventProducer.h:51