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 ( const edm::ParameterSet iConfig)
explicit

Definition at line 17 of file MeasurementTrackerEventProducer.cc.

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.

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");
40  selfUpdateSkipClusters_ = !(skip == edm::InputTag(""));
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")));
47  if (selfUpdateSkipClusters_)
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")));
54  if (selfUpdateSkipClusters_)
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 }
#define LogDebug(id)
T getParameter(std::string const &) const
std::vector< edm::EDGetTokenT< DetIdCollection > > theInactiveStripDetectorLabels
edm::EDGetTokenT< edmNew::DetSetVector< Phase2TrackerCluster1D > > thePh2OTClusterLabel
std::vector< edm::EDGetTokenT< PixelFEDChannelCollection > > theBadPixelFEDChannelsLabels
edm::EDGetTokenT< edm::ContainerMask< edmNew::DetSetVector< SiPixelCluster > > > thePixelClusterMask
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > theStripClusterLabel
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > thePixelClusterLabel
edm::EDGetTokenT< edm::ContainerMask< edmNew::DetSetVector< SiStripCluster > > > theStripClusterMask
std::vector< edm::EDGetTokenT< DetIdCollection > > theInactivePixelDetectorLabels
MeasurementTrackerEventProducer::~MeasurementTrackerEventProducer ( )
inlineoverride

Definition at line 19 of file MeasurementTrackerEventProducer.h.

References fillDescriptions().

19 {}

Member Function Documentation

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

Definition at line 67 of file MeasurementTrackerEventProducer.cc.

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

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 }
void setComment(std::string const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void MeasurementTrackerEventProducer::getInactiveStrips ( const edm::Event event,
std::vector< uint32_t > &  rawInactiveDetIds 
) const
protected

Definition at line 390 of file MeasurementTrackerEventProducer.cc.

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

Referenced by updateStrips().

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 }
std::vector< edm::EDGetTokenT< DetIdCollection > > theInactiveStripDetectorLabels
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
const_iterator end() const
Definition: EDCollection.h:122
const_iterator begin() const
Definition: EDCollection.h:117
void MeasurementTrackerEventProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 92 of file MeasurementTrackerEventProducer.cc.

References MeasurementTracker::geomTracker(), edm::EventSetup::get(), HLTSiStripMonitoring_cff::measurementTracker, measurementTrackerLabel_, MeasurementTracker::phase2DetConditions(), MeasurementTracker::pixelDetConditions(), edm::Event::put(), MeasurementTracker::stripDetConditions(), updatePhase2OT(), updatePixels(), updateStacks(), and updateStrips().

92  {
94  iSetup.get<CkfComponentsRecord>().get(measurementTrackerLabel_, measurementTracker);
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);
105  updatePixels(iEvent,
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 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
void updateStrips(const edm::Event &, StMeasurementDetSet &theStDets, std::vector< bool > &stripClustersToSkip) const
virtual const Phase2OTMeasurementConditionSet & phase2DetConditions() const =0
void updatePhase2OT(const edm::Event &, Phase2OTMeasurementDetSet &thePh2OTDets) const
const TrackingGeometry * geomTracker() const
void updateStacks(const edm::Event &, Phase2OTMeasurementDetSet &theStDets) const
virtual const StMeasurementConditionSet & stripDetConditions() const =0
Provide templates to be filled in.
void updatePixels(const edm::Event &, PxMeasurementDetSet &thePxDets, std::vector< bool > &pixelClustersToSkip, const TrackerGeometry &trackerGeom, const edm::EventSetup &iSetup) const
T get() const
Definition: EventSetup.h:73
virtual const PxMeasurementConditionSet & pixelDetConditions() const =0
void MeasurementTrackerEventProducer::updatePhase2OT ( const edm::Event event,
Phase2OTMeasurementDetSet thePh2OTDets 
) const
protected

Definition at line 351 of file MeasurementTrackerEventProducer.cc.

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

Referenced by produce().

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 }
const_iterator end(bool update=false) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
edm::EDGetTokenT< edmNew::DetSetVector< Phase2TrackerCluster1D > > thePh2OTClusterLabel
const edm::Handle< edmNew::DetSetVector< Phase2TrackerCluster1D > > & handle() const
char const * module
Definition: ProductLabels.h:5
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
T const * product() const
Definition: Handle.h:69
id_type id() const
Definition: DetSetNew.h:64
bool isUninitialized() const
Definition: EDGetToken.h:70
void setActiveThisEvent(bool active)
unsigned int id(int i) const
void update(int i, const Phase2DetSet &detSet)
const_iterator begin(bool update=false) const
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.

References PxMeasurementDetSet::addBadFEDChannelPositions(), edm::EDCollection< T >::begin(), edmNew::DetSetVector< T >::begin(), sipixelobjects::GlobalPixel::col, PixelTopology::colsperroc(), 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(), edm::Event::getByToken(), PxMeasurementDetSet::handle(), mps_fire::i, triggerObjects_cff::id, edmNew::DetSet< T >::id(), edm::HandleBase::id(), PxMeasurementDetSet::id(), sipixelobjects::PixelROC::idInDetUnit(), TrackerGeometry::idToDet(), PxMeasurementDetSet::isActive(), edm::EDGetTokenT< T >::isUninitialized(), SummaryClient_cfi::labels, DTRecHitClients_cfi::local, Topology::localPosition(), LogDebug, SiStripPI::max, min(), edm::ProductLabels::module, castor_dqm_sourceclient_file_cfg::path, pixelCablingMapLabel_, LumiMonitor_cff::pixelClusters, edm::Handle< T >::product(), sipixelobjects::PixelROC::rawId(), sipixelobjects::CablingPathToDetUnit::roc, PixelMapPlotter::roc, sipixelobjects::GlobalPixel::row, PixelTopology::rowsperroc(), 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().

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 }
#define LogDebug(id)
std::vector< std::pair< LocalPoint, LocalPoint > > BadFEDChannelPositions
const_iterator end(bool update=false) const
size_type dataSize() const
virtual int rowsperroc() const =0
CaloTopology const * topology(0)
ProductID id() const
Definition: HandleBase.cc:13
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
const_iterator end() const
Definition: EDCollection.h:122
T y() const
Definition: PV3DBase.h:60
const edm::Handle< edmNew::DetSetVector< SiPixelCluster > > & handle() const
identify pixel inside single ROC
Definition: LocalPixel.h:7
global coordinates (row and column in DetUnit, as in PixelDigi)
Definition: GlobalPixel.h:6
unsigned int id(int i) const
std::vector< edm::EDGetTokenT< PixelFEDChannelCollection > > theBadPixelFEDChannelsLabels
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
virtual int colsperroc() const =0
bool isActive(int i) const
T z() const
Definition: PV3DBase.h:61
unsigned int idInDetUnit() const
id of this ROC in DetUnit etermined by token path
Definition: PixelROC.h:37
uint32_t rawId() const
return the DetUnit to which this ROC belongs to.
Definition: PixelROC.h:34
T min(T a, T b)
Definition: MathUtil.h:58
void update(int i, const PixelDetSet &detSet)
void addBadFEDChannelPositions(int i, BadFEDChannelPositions &positions)
char const * module
Definition: ProductLabels.h:5
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
bool failedToGet() const
Definition: HandleBase.h:72
const_iterator begin() const
Definition: EDCollection.h:117
T const * product() const
Definition: Handle.h:69
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
edm::EDGetTokenT< edm::ContainerMask< edmNew::DetSetVector< SiPixelCluster > > > thePixelClusterMask
row and collumn in ROC representation
Definition: LocalPixel.h:13
const sipixelobjects::PixelROC * findItem(const sipixelobjects::CablingPathToDetUnit &path) const final
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
void setActiveThisEvent(bool active)
T get() const
Definition: EventSetup.h:73
const TrackerGeomDet * idToDet(DetId) const override
id_type id() const
Definition: DetSetNew.h:64
int find(unsigned int jd, int i=0) const
bool isUninitialized() const
Definition: EDGetToken.h:70
T x() const
Definition: PV3DBase.h:59
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > thePixelClusterLabel
const_iterator begin(bool update=false) const
std::vector< edm::EDGetTokenT< DetIdCollection > > theInactivePixelDetectorLabels
GlobalPixel toGlobal(const LocalPixel &loc) const
Definition: PixelROC.h:55
void MeasurementTrackerEventProducer::updateStacks ( const edm::Event ,
Phase2OTMeasurementDetSet theStDets 
) const
inlineprotected

Definition at line 35 of file MeasurementTrackerEventProducer.h.

Referenced by produce().

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

Definition at line 276 of file MeasurementTrackerEventProducer.cc.

References edm::HandleBase::failedToGet(), StMeasurementDetSet::find(), edm::Event::getByToken(), 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::ProductLabels::module, edm::Handle< T >::product(), selfUpdateSkipClusters_, StMeasurementDetSet::setActiveThisEvent(), StMeasurementDetSet::setEmpty(), StMeasurementDetSet::size(), theStripClusterLabel, theStripClusterMask, mitigatedMETSequence_cff::U, and StMeasurementDetSet::update().

Referenced by produce().

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 }
#define LogDebug(id)
ProductID id() const
Definition: HandleBase.cc:13
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
void update(int i, const StripDetset &detSet)
unsigned int id(int i) const
int find(unsigned int jd, int i=0) const
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 ...
void getInactiveStrips(const edm::Event &event, std::vector< uint32_t > &rawInactiveDetIds) const
char const * module
Definition: ProductLabels.h:5
bool failedToGet() const
Definition: HandleBase.h:72
T const * product() const
Definition: Handle.h:69
bool isActive(int i) const
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > theStripClusterLabel
bool isUninitialized() const
Definition: EDGetToken.h:70
edm::Handle< edmNew::DetSetVector< SiStripCluster > > & handle()
edm::EDGetTokenT< edm::ContainerMask< edmNew::DetSetVector< SiStripCluster > > > theStripClusterMask

Member Data Documentation

bool MeasurementTrackerEventProducer::isPhase2
protected
std::string MeasurementTrackerEventProducer::measurementTrackerLabel_
protected

Definition at line 39 of file MeasurementTrackerEventProducer.h.

Referenced by produce().

std::string MeasurementTrackerEventProducer::pixelCablingMapLabel_
protected
bool MeasurementTrackerEventProducer::selfUpdateSkipClusters_
protected
bool MeasurementTrackerEventProducer::switchOffPixelsIfEmpty_
protected

Definition at line 52 of file MeasurementTrackerEventProducer.h.

Referenced by updatePixels().

std::vector<edm::EDGetTokenT<PixelFEDChannelCollection> > MeasurementTrackerEventProducer::theBadPixelFEDChannelsLabels
protected
std::vector<edm::EDGetTokenT<DetIdCollection> > MeasurementTrackerEventProducer::theInactivePixelDetectorLabels
protected
std::vector<edm::EDGetTokenT<DetIdCollection> > MeasurementTrackerEventProducer::theInactiveStripDetectorLabels
protected
edm::EDGetTokenT<edmNew::DetSetVector<Phase2TrackerCluster1D> > MeasurementTrackerEventProducer::thePh2OTClusterLabel
protected
edm::EDGetTokenT<edmNew::DetSetVector<SiPixelCluster> > MeasurementTrackerEventProducer::thePixelClusterLabel
protected
edm::EDGetTokenT<edm::ContainerMask<edmNew::DetSetVector<SiPixelCluster> > > MeasurementTrackerEventProducer::thePixelClusterMask
protected
edm::EDGetTokenT<edmNew::DetSetVector<SiStripCluster> > MeasurementTrackerEventProducer::theStripClusterLabel
protected
edm::EDGetTokenT<edm::ContainerMask<edmNew::DetSetVector<SiStripCluster> > > MeasurementTrackerEventProducer::theStripClusterMask
protected