CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
ClusterCompatibilityProducer Class Reference
Inheritance diagram for ClusterCompatibilityProducer:
edm::stream::EDProducer<>

Classes

struct  ContainedHits
 
struct  VertexHit
 

Public Member Functions

 ClusterCompatibilityProducer (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
 ~ClusterCompatibilityProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Member Functions

ContainedHits getContainedHits (const std::vector< VertexHit > &hits, double z0) const
 

Private Attributes

edm::InputTag inputTag_
 
edm::EDGetTokenT< SiPixelRecHitCollectioninputToken_
 
double maxZ_
 
double minZ_
 
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordtrackerToken_
 
double zStep_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 37 of file ClusterCompatibilityProducer.cc.

Constructor & Destructor Documentation

◆ ClusterCompatibilityProducer()

ClusterCompatibilityProducer::ClusterCompatibilityProducer ( const edm::ParameterSet config)
explicit

Definition at line 67 of file ClusterCompatibilityProducer.cc.

References inputTag_, inputToken_, LogDebug, and trackerToken_.

68  : inputTag_(config.getParameter<edm::InputTag>("inputTag")),
69  minZ_(config.getParameter<double>("minZ")),
70  maxZ_(config.getParameter<double>("maxZ")),
71  zStep_(config.getParameter<double>("zStep")) {
72  inputToken_ = consumes<SiPixelRecHitCollection>(inputTag_);
73  trackerToken_ = esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>();
74  LogDebug("") << "Using the " << inputTag_ << " input collection";
75  produces<reco::ClusterCompatibility>();
76 }
Definition: config.py:1
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerToken_
edm::EDGetTokenT< SiPixelRecHitCollection > inputToken_
#define LogDebug(id)

◆ ~ClusterCompatibilityProducer()

ClusterCompatibilityProducer::~ClusterCompatibilityProducer ( )
override

Definition at line 78 of file ClusterCompatibilityProducer.cc.

78 {}

Member Function Documentation

◆ getContainedHits()

ClusterCompatibilityProducer::ContainedHits ClusterCompatibilityProducer::getContainedHits ( const std::vector< VertexHit > &  hits,
double  z0 
) const
private

Definition at line 140 of file ClusterCompatibilityProducer.cc.

References hfClusterShapes_cfi::hits, dqmiodumpmetadata::n, convertSQLitetoXML_cfg::output, AlCaHLTBitMon_ParallelJobs::p, hit::z, and HLTMuonOfflineAnalyzer_cfi::z0.

Referenced by produce().

141  {
142  // Calculate number of hits contained in v-shaped window in cluster y-width vs. z-position.
143  int n = 0;
144  double chi = 0.;
145 
146  for (std::vector<VertexHit>::const_iterator hit = hits.begin(); hit != hits.end(); hit++) {
147  // the calculation of the predicted cluster width p was
148  // marked 'FIXME' in the HLTPixelClusterShapeFilter. It should
149  // be revisited but is retained as it was for compatibility with the
150  // older filter.
151  double p = 2 * fabs(hit->z - z0) / hit->r + 0.5;
152  if (fabs(p - hit->w) <= 1.) {
153  chi += fabs(p - hit->w);
154  n++;
155  }
156  }
158  output.z0 = z0;
159  output.nHit = n;
160  output.chi = chi;
161  return output;
162 }
Definition: output.py:1

◆ produce()

void ClusterCompatibilityProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 80 of file ClusterCompatibilityProducer.cc.

References HltBtagPostValidation_cff::c, mps_fire::end, getContainedHits(), edm::EventSetup::getHandle(), hfClusterShapes_cfi::hits, l1ctLayer2EG_cff::id, TrackerGeometry::idToDet(), iEvent, inputToken_, createfilelist::int, PixelTopology::isItEdgePixelInX(), PixelTopology::isItEdgePixelInY(), maxZ_, minZ_, eostools::move(), muonClassificationByHits_cfi::pixel, PixelSubdetector::PixelBarrel, edm::ESHandle< T >::product(), ClusterCompatibilityProducer::VertexHit::r, PixelGeomDetUnit::specificTopology(), GeomDet::toGlobal(), trackerToken_, ClusterCompatibilityProducer::VertexHit::w, hit::x, hit::y, ClusterCompatibilityProducer::VertexHit::z, hit::z, HLTMuonOfflineAnalyzer_cfi::z0, and zStep_.

80  {
81  auto creco = std::make_unique<reco::ClusterCompatibility>();
82 
83  // get hold of products from Event
85  iEvent.getByToken(inputToken_, hRecHits);
86 
87  // get tracker geometry
88  if (hRecHits.isValid()) {
90  const TrackerGeometry *tgeo = trackerHandle.product();
91  const SiPixelRecHitCollection *hits = hRecHits.product();
92 
93  // loop over pixel rechits
94  int nPxlHits = 0;
95  std::vector<VertexHit> vhits;
96  for (SiPixelRecHitCollection::DataContainer::const_iterator hit = hits->data().begin(), end = hits->data().end();
97  hit != end;
98  ++hit) {
99  if (!hit->isValid())
100  continue;
101  ++nPxlHits;
102  DetId id(hit->geographicalId());
103  if (id.subdetId() != int(PixelSubdetector::PixelBarrel))
104  continue;
105  const PixelGeomDetUnit *pgdu = static_cast<const PixelGeomDetUnit *>(tgeo->idToDet(id));
106  const PixelTopology *pixTopo = &(pgdu->specificTopology());
107  std::vector<SiPixelCluster::Pixel> pixels(hit->cluster()->pixels());
108  bool pixelOnEdge = false;
109  for (std::vector<SiPixelCluster::Pixel>::const_iterator pixel = pixels.begin(); pixel != pixels.end(); ++pixel) {
110  int pixelX = pixel->x;
111  int pixelY = pixel->y;
112  if (pixTopo->isItEdgePixelInX(pixelX) || pixTopo->isItEdgePixelInY(pixelY)) {
113  pixelOnEdge = true;
114  break;
115  }
116  }
117  if (pixelOnEdge)
118  continue;
119 
120  LocalPoint lpos = LocalPoint(hit->localPosition().x(), hit->localPosition().y(), hit->localPosition().z());
121  GlobalPoint gpos = pgdu->toGlobal(lpos);
122  VertexHit vh;
123  vh.z = gpos.z();
124  vh.r = gpos.perp();
125  vh.w = hit->cluster()->sizeY();
126  vhits.push_back(vh);
127  }
128 
129  creco->setNValidPixelHits(nPxlHits);
130 
131  // append cluster compatibility for each z-position
132  for (double z0 = minZ_; z0 <= maxZ_; z0 += zStep_) {
133  ContainedHits c = getContainedHits(vhits, z0);
134  creco->append(c.z0, c.nHit, c.chi);
135  }
136  }
137  iEvent.put(std::move(creco));
138 }
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
T z() const
Definition: PV3DBase.h:61
virtual bool isItEdgePixelInX(int ixbin) const =0
int iEvent
Definition: GenABIO.cc:224
T const * product() const
Definition: ESHandle.h:86
ContainedHits getContainedHits(const std::vector< VertexHit > &hits, double z0) const
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
const TrackerGeomDet * idToDet(DetId) const override
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetId.h:17
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerToken_
edm::EDGetTokenT< SiPixelRecHitCollection > inputToken_
virtual bool isItEdgePixelInY(int iybin) const =0
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ inputTag_

edm::InputTag ClusterCompatibilityProducer::inputTag_
private

Definition at line 47 of file ClusterCompatibilityProducer.cc.

Referenced by ClusterCompatibilityProducer().

◆ inputToken_

edm::EDGetTokenT<SiPixelRecHitCollection> ClusterCompatibilityProducer::inputToken_
private

Definition at line 45 of file ClusterCompatibilityProducer.cc.

Referenced by ClusterCompatibilityProducer(), and produce().

◆ maxZ_

double ClusterCompatibilityProducer::maxZ_
private

Definition at line 49 of file ClusterCompatibilityProducer.cc.

Referenced by produce().

◆ minZ_

double ClusterCompatibilityProducer::minZ_
private

Definition at line 48 of file ClusterCompatibilityProducer.cc.

Referenced by produce().

◆ trackerToken_

edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> ClusterCompatibilityProducer::trackerToken_
private

Definition at line 46 of file ClusterCompatibilityProducer.cc.

Referenced by ClusterCompatibilityProducer(), and produce().

◆ zStep_

double ClusterCompatibilityProducer::zStep_
private

Definition at line 50 of file ClusterCompatibilityProducer.cc.

Referenced by produce().