CMS 3D CMS Logo

ClusterCompatibilityProducer.cc
Go to the documentation of this file.
1 //
2 // Derived from HLTrigger/special/src/HLTPixelClusterShapeFilter.cc
3 // at version 7_5_0_pre3
4 //
5 // Original Author (of Derivative Producer): Eric Appelt
6 // Created: Mon Apr 27, 2015
7 
8 #include <iostream>
9 
19 
26 
32 
33 //
34 // class declaration
35 //
36 
38 public:
41 
42  void produce(edm::Event &, const edm::EventSetup &) override;
43 
44 private:
47  edm::InputTag inputTag_; // input tag identifying product containing pixel clusters
48  double minZ_; // beginning z-vertex position
49  double maxZ_; // end z-vertex position
50  double zStep_; // size of steps in z-vertex test
51 
52  struct VertexHit {
53  float z;
54  float r;
55  float w;
56  };
57 
58  struct ContainedHits {
59  float z0;
60  int nHit;
61  float chi;
62  };
63 
64  ContainedHits getContainedHits(const std::vector<VertexHit> &hits, double z0) const;
65 };
66 
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 }
77 
79 
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_) {
134  creco->append(c.z0, c.nHit, c.chi);
135  }
136  }
137  iEvent.put(std::move(creco));
138 }
139 
141  const std::vector<VertexHit> &hits, double z0) const {
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 }
163 
164 //define this as a plug-in
TrackerGeometry::idToDet
const TrackerGeomDet * idToDet(DetId) const override
Definition: TrackerGeometry.cc:193
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
ClusterCompatibilityProducer::VertexHit
Definition: ClusterCompatibilityProducer.cc:52
Handle.h
PixelSubdetector.h
MessageLogger.h
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
ClusterCompatibilityProducer::VertexHit::w
float w
Definition: ClusterCompatibilityProducer.cc:55
TrackerGeometry.h
PixelSubdetector::PixelBarrel
Definition: PixelSubdetector.h:11
edm::Handle::product
T const * product() const
Definition: Handle.h:70
PixelTopology.h
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
hit::y
double y
Definition: SiStripHitEffFromCalibTree.cc:90
ESHandle.h
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:72
edm::EDGetTokenT
Definition: EDGetToken.h:33
ClusterCompatibilityProducer::~ClusterCompatibilityProducer
~ClusterCompatibilityProducer() override
Definition: ClusterCompatibilityProducer.cc:78
edm
HLT enums.
Definition: AlignableModifier.h:19
vh
ValidHit vh
Definition: classes.h:14
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
ClusterCompatibilityProducer::ContainedHits::z0
float z0
Definition: ClusterCompatibilityProducer.cc:59
edmNew::DetSetVector::const_iterator
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetSetVectorNew.h:197
ClusterCompatibilityProducer::inputTag_
edm::InputTag inputTag_
Definition: ClusterCompatibilityProducer.cc:47
muonClassificationByHits_cfi.pixel
pixel
Definition: muonClassificationByHits_cfi.py:9
EDProducer.h
ClusterCompatibilityProducer::VertexHit::r
float r
Definition: ClusterCompatibilityProducer.cc:54
ClusterCompatibilityProducer::zStep_
double zStep_
Definition: ClusterCompatibilityProducer.cc:50
align::LocalPoint
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
edm::Handle
Definition: AssociativeIterator.h:50
ClusterCompatibilityProducer::ClusterCompatibilityProducer
ClusterCompatibilityProducer(const edm::ParameterSet &)
Definition: ClusterCompatibilityProducer.cc:67
ESGetToken.h
ClusterCompatibilityProducer::maxZ_
double maxZ_
Definition: ClusterCompatibilityProducer.cc:49
hit::x
double x
Definition: SiStripHitEffFromCalibTree.cc:89
config
Definition: config.py:1
DetId
Definition: DetId.h:17
MakerMacros.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
PixelGeomDetUnit
Definition: PixelGeomDetUnit.h:15
mps_fire.end
end
Definition: mps_fire.py:242
ClusterCompatibilityProducer::getContainedHits
ContainedHits getContainedHits(const std::vector< VertexHit > &hits, double z0) const
Definition: ClusterCompatibilityProducer.cc:140
edm::ESHandle< TrackerGeometry >
HLTMuonOfflineAnalyzer_cfi.z0
z0
Definition: HLTMuonOfflineAnalyzer_cfi.py:98
Point3DBase< float, LocalTag >
PixelTopology
Definition: PixelTopology.h:10
ClusterCompatibilityProducer::ContainedHits
Definition: ClusterCompatibilityProducer.cc:58
hit::z
double z
Definition: SiStripHitEffFromCalibTree.cc:91
ClusterCompatibilityProducer::inputToken_
edm::EDGetTokenT< SiPixelRecHitCollection > inputToken_
Definition: ClusterCompatibilityProducer.cc:45
TrackerDigiGeometryRecord.h
SiPixelRecHitCollection.h
GeomDet::toGlobal
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
edm::ParameterSet
Definition: ParameterSet.h:47
AlCaHLTBitMon_ParallelJobs.p
def p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
Event.h
ClusterCompatibilityProducer
Definition: ClusterCompatibilityProducer.cc:37
ClusterCompatibility.h
PixelGeomDetUnit::specificTopology
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
Definition: PixelGeomDetUnit.cc:17
ClusterCompatibilityProducer::ContainedHits::nHit
int nHit
Definition: ClusterCompatibilityProducer.cc:60
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
ClusterCompatibilityProducer::trackerToken_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerToken_
Definition: ClusterCompatibilityProducer.cc:46
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
edm::stream::EDProducer
Definition: EDProducer.h:36
ClusterCompatibilityProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: ClusterCompatibilityProducer.cc:80
edm::EventSetup
Definition: EventSetup.h:58
ClusterCompatibilityProducer::VertexHit::z
float z
Definition: ClusterCompatibilityProducer.cc:53
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord >
GeomDet.h
edmNew::DetSetVector
Definition: DetSetNew.h:13
eostools.move
def move(src, dest)
Definition: eostools.py:511
Frameworkfwd.h
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
LocalPoint.h
ClusterCompatibilityProducer::minZ_
double minZ_
Definition: ClusterCompatibilityProducer.cc:48
PixelGeomDetUnit.h
EventSetup.h
ParameterSet.h
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:56
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
GlobalPoint.h
edm::InputTag
Definition: InputTag.h:15
ClusterCompatibilityProducer::ContainedHits::chi
float chi
Definition: ClusterCompatibilityProducer.cc:61
hit
Definition: SiStripHitEffFromCalibTree.cc:88
TrackerGeometry
Definition: TrackerGeometry.h:14