CMS 3D CMS Logo

ClusterShapeSeedComparitor.cc
Go to the documentation of this file.
20 #include <cstdio>
21 #include <cassert>
22 
23 #include <iostream>
24 
26 public:
29  void init(const edm::Event &ev, const edm::EventSetup &es) override;
30  bool compatible(const SeedingHitSet &hits) const override { return true; }
32  bool compatible(const SeedingHitSet &hits,
33  const GlobalTrajectoryParameters &helixStateAtVertex,
34  const FastHelix &helix) const override;
35 
36 private:
37  bool compatibleHit(const TrackingRecHit &hit, const GlobalVector &direction) const;
38 
43  const bool filterAtHelixStage_;
45 };
46 
49  : filterName_(cfg.getParameter<std::string>("ClusterShapeHitFilterName")),
50  pixelClusterShapeCache_(nullptr),
51  filterAtHelixStage_(cfg.getParameter<bool>("FilterAtHelixStage")),
52  filterPixelHits_(cfg.getParameter<bool>("FilterPixelHits")),
53  filterStripHits_(cfg.getParameter<bool>("FilterStripHits")) {
54  if (filterPixelHits_) {
56  iC.consumes<SiPixelClusterShapeCache>(cfg.getParameter<edm::InputTag>("ClusterShapeCacheSrc"));
57  }
58 }
59 
61 
64  if (filterPixelHits_) {
66  ev.getByToken(pixelClusterShapeCacheToken_, hcache);
68  }
69 }
70 
74  return true;
75  assert(hit->isValid() && tsos.isValid());
76  return compatibleHit(*hit, tsos.globalDirection());
77 }
78 
80  const GlobalTrajectoryParameters &helixStateAtVertex,
81  const FastHelix &helix) const {
83  return true;
84 
85  if (!helix.isValid() //check still if it's a straight line, which are OK
86  && !helix.circle().isLine()) //complain if it's not even a straight line
87  edm::LogWarning("InvalidHelix") << "PixelClusterShapeSeedComparitor helix is not valid, result is bad";
88 
89  float xc = helix.circle().x0(), yc = helix.circle().y0();
90 
91  GlobalPoint vertex = helixStateAtVertex.position();
92  GlobalVector momvtx = helixStateAtVertex.momentum();
93  float x0 = vertex.x(), y0 = vertex.y();
94  for (unsigned int i = 0, n = hits.size(); i < n; ++i) {
95  auto const &hit = *hits[i];
96  GlobalPoint pos = hit.globalPosition();
97  float x1 = pos.x(), y1 = pos.y(), dx1 = x1 - xc, dy1 = y1 - yc;
98 
99  // now figure out the proper tangent vector
100  float perpx = -dy1, perpy = dx1;
101  if (perpx * (x1 - x0) + perpy * (y1 - y0) < 0) {
102  perpy = -perpy;
103  perpx = -perpx;
104  }
105 
106  // now normalize (perpx, perpy, 1.0) to momentum (px, py, pz)
107  float perp2 = perpx * perpx + perpy * perpy;
108  float pmom2 = momvtx.x() * momvtx.x() + momvtx.y() * momvtx.y(), momz2 = momvtx.z() * momvtx.z(),
109  mom2 = pmom2 + momz2;
110  float perpscale = sqrt(pmom2 / mom2 / perp2), zscale = sqrt((1 - pmom2 / mom2));
111  GlobalVector gdir(perpx * perpscale, perpy * perpscale, (momvtx.z() > 0 ? zscale : -zscale));
112 
113  if (!compatibleHit(hit, gdir)) {
114  return false; // not yet
115  }
116  }
117  return true;
118 }
119 
121  if (hit.geographicalId().subdetId() <= 2) {
122  if (!filterPixelHits_)
123  return true;
124  const SiPixelRecHit *pixhit = dynamic_cast<const SiPixelRecHit *>(&hit);
125  if (pixhit == nullptr)
126  throw cms::Exception("LogicError", "Found a valid hit on the pixel detector which is not a SiPixelRecHit\n");
127  //printf("Cheching hi hit on detid %10d, local direction is x = %9.6f, y = %9.6f, z = %9.6f\n", hit.geographicalId().rawId(), direction.x(), direction.y(), direction.z());
128  return filterHandle_->isCompatible(*pixhit, direction, *pixelClusterShapeCache_);
129  } else {
130  if (!filterStripHits_)
131  return true;
132  const std::type_info &tid = typeid(*&hit);
133  if (tid == typeid(SiStripMatchedRecHit2D)) {
134  const SiStripMatchedRecHit2D *matchedHit = dynamic_cast<const SiStripMatchedRecHit2D *>(&hit);
135  assert(matchedHit != nullptr);
136  return (filterHandle_->isCompatible(DetId(matchedHit->monoId()), matchedHit->monoCluster(), direction) &&
137  filterHandle_->isCompatible(DetId(matchedHit->stereoId()), matchedHit->stereoCluster(), direction));
138  } else if (tid == typeid(SiStripRecHit2D)) {
139  const SiStripRecHit2D *recHit = dynamic_cast<const SiStripRecHit2D *>(&hit);
140  assert(recHit != nullptr);
141  return filterHandle_->isCompatible(*recHit, direction);
142  } else if (tid == typeid(ProjectedSiStripRecHit2D)) {
143  const ProjectedSiStripRecHit2D *precHit = dynamic_cast<const ProjectedSiStripRecHit2D *>(&hit);
144  assert(precHit != nullptr);
145  return filterHandle_->isCompatible(precHit->originalHit(), direction);
146  } else {
147  //printf("Questo e' un %s, che ci fo?\n", tid.name());
148  return true;
149  }
150  }
151 }
152 
153 DEFINE_EDM_PLUGIN(SeedComparitorFactory, PixelClusterShapeSeedComparitor, "PixelClusterShapeSeedComparitor");
Vector3DBase
Definition: Vector3DBase.h:8
TrajectoryStateOnSurface::globalDirection
GlobalVector globalDirection() const
Definition: TrajectoryStateOnSurface.h:67
ClusterShapeHitFilter.h
SiStripMatchedRecHit2D::monoId
unsigned int monoId() const
Definition: SiStripMatchedRecHit2D.h:29
Handle.h
PixelClusterShapeSeedComparitor::filterPixelHits_
const bool filterPixelHits_
Definition: ClusterShapeSeedComparitor.cc:44
electrons_cff.bool
bool
Definition: electrons_cff.py:366
mps_fire.i
i
Definition: mps_fire.py:428
PixelClusterShapeSeedComparitor::filterAtHelixStage_
const bool filterAtHelixStage_
Definition: ClusterShapeSeedComparitor.cc:43
MessageLogger.h
SiPixelClusterShapeCache
Definition: SiPixelClusterShapeCache.h:43
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
edm::Handle::product
T const * product() const
Definition: Handle.h:70
PixelClusterShapeSeedComparitor::compatibleHit
bool compatibleHit(const TrackingRecHit &hit, const GlobalVector &direction) const
Definition: ClusterShapeSeedComparitor.cc:120
FastHelix.h
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
ESHandle.h
SiStripMatchedRecHit2D::stereoCluster
SiStripCluster const & stereoCluster() const
Definition: SiStripMatchedRecHit2D.h:40
SeedingHitSet
Definition: SeedingHitSet.h:6
GlobalTrajectoryParameters::position
GlobalPoint position() const
Definition: GlobalTrajectoryParameters.h:60
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
FastHelix
Definition: FastHelix.h:26
PixelClusterShapeSeedComparitor::PixelClusterShapeSeedComparitor
PixelClusterShapeSeedComparitor(const edm::ParameterSet &cfg, edm::ConsumesCollector &iC)
Definition: ClusterShapeSeedComparitor.cc:47
edm::EDGetTokenT< SiPixelClusterShapeCache >
pos
Definition: PixelAliasList.h:18
SeedingHitSet::ConstRecHitPointer
BaseTrackerRecHit const * ConstRecHitPointer
Definition: SeedingHitSet.h:10
FastCircle::y0
double y0() const
Definition: FastCircle.h:45
cms::cuda::assert
assert(be >=bs)
SiStripRecHit2D
Definition: SiStripRecHit2D.h:7
CkfComponentsRecord.h
edm::Handle< SiPixelClusterShapeCache >
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
ProjectedSiStripRecHit2D
Definition: ProjectedSiStripRecHit2D.h:8
SiPixelRecHit
Our base class.
Definition: SiPixelRecHit.h:23
FastCircle::isLine
bool isLine() const
Definition: FastCircle.h:51
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
PixelClusterShapeSeedComparitor::filterName_
std::string filterName_
Definition: ClusterShapeSeedComparitor.cc:39
DetId
Definition: DetId.h:17
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
testProducerWithPsetDescEmpty_cfi.y1
y1
Definition: testProducerWithPsetDescEmpty_cfi.py:29
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
CkfComponentsRecord
Definition: CkfComponentsRecord.h:22
SeedingHitSet.h
SeedComparitor
Definition: SeedComparitor.h:25
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
edm::ESHandle< ClusterShapeHitFilter >
ProjectedSiStripRecHit2D::originalHit
SiStripRecHit2D originalHit() const
Definition: ProjectedSiStripRecHit2D.h:56
ClusterShapeHitFilter::isCompatible
bool isCompatible(const SiPixelRecHit &recHit, const LocalVector &ldir, const SiPixelClusterShapeCache &clusterShapeCache, PixelData const *pd=nullptr) const
Definition: ClusterShapeHitFilter.cc:283
edm::ConsumesCollector::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: ConsumesCollector.h:55
GlobalTrajectoryParameters
Definition: GlobalTrajectoryParameters.h:15
PixelClusterShapeSeedComparitor
Definition: ClusterShapeSeedComparitor.cc:25
Point3DBase< float, GlobalTag >
DEFINE_EDM_PLUGIN
#define DEFINE_EDM_PLUGIN(factory, type, name)
Definition: PluginFactory.h:124
SiPixelRecHit.h
EDGetToken.h
GlobalTrajectoryParameters::momentum
GlobalVector momentum() const
Definition: GlobalTrajectoryParameters.h:65
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
FastHelix::circle
const FastCircle & circle() const
Definition: FastHelix.h:61
FastCircle::x0
double x0() const
Definition: FastCircle.h:43
PixelClusterShapeSeedComparitor::compatible
bool compatible(const SeedingHitSet &hits) const override
Definition: ClusterShapeSeedComparitor.cc:30
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
SiStripMatchedRecHit2D::stereoId
unsigned int stereoId() const
Definition: SiStripMatchedRecHit2D.h:28
edm::ParameterSet
Definition: ParameterSet.h:47
SeedComparitorFactory.h
Event.h
edmplugin::PluginFactory
Definition: PluginFactory.h:34
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
ProjectedSiStripRecHit2D.h
MagneticField.h
edm::EventSetup
Definition: EventSetup.h:58
perp2
T perp2() const
Squared magnitude of transverse component.
Definition: Basic3DVectorLD.h:130
PixelClusterShapeSeedComparitor::filterStripHits_
const bool filterStripHits_
Definition: ClusterShapeSeedComparitor.cc:44
get
#define get
PixelClusterShapeSeedComparitor::init
void init(const edm::Event &ev, const edm::EventSetup &es) override
Definition: ClusterShapeSeedComparitor.cc:62
looper.cfg
cfg
Definition: looper.py:297
TrackingRecHit
Definition: TrackingRecHit.h:21
FastHelix::isValid
bool isValid() const
Definition: FastHelix.h:57
SeedComparitor.h
std
Definition: JetResolutionObject.h:76
PixelClusterShapeSeedComparitor::pixelClusterShapeCacheToken_
edm::EDGetTokenT< SiPixelClusterShapeCache > pixelClusterShapeCacheToken_
Definition: ClusterShapeSeedComparitor.cc:41
SiStripMatchedRecHit2D
Definition: SiStripMatchedRecHit2D.h:8
SiStripMatchedRecHit2D::monoCluster
SiStripCluster const & monoCluster() const
Definition: SiStripMatchedRecHit2D.h:41
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
Exception
Definition: hltDiff.cc:245
PixelClusterShapeSeedComparitor::~PixelClusterShapeSeedComparitor
~PixelClusterShapeSeedComparitor() override
Definition: ClusterShapeSeedComparitor.cc:60
PixelClusterShapeSeedComparitor::pixelClusterShapeCache_
const SiPixelClusterShapeCache * pixelClusterShapeCache_
Definition: ClusterShapeSeedComparitor.cc:42
ConsumesCollector.h
ParameterSet.h
SiStripMatchedRecHit2D.h
edm::Event
Definition: Event.h:73
edm::Log
Definition: MessageLogger.h:70
SiStripRecHit2D.h
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
hit
Definition: SiStripHitEffFromCalibTree.cc:88
SiPixelClusterShapeCache.h
PixelClusterShapeSeedComparitor::filterHandle_
edm::ESHandle< ClusterShapeHitFilter > filterHandle_
Definition: ClusterShapeSeedComparitor.cc:40