CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
CSCRecHitDBuilder Class Reference

#include <CSCRecHitDBuilder.h>

Public Member Functions

void build (const CSCStripDigiCollection *stripds, const CSCWireDigiCollection *wireds, CSCRecHit2DCollection &oc)
 
 CSCRecHitDBuilder (const edm::ParameterSet &ps)
 
const CSCLayergetLayer (const CSCDetId &detId)
 
void setConditions (CSCRecoConditions *reco)
 
void setGeometry (const CSCGeometry *geom)
 
 ~CSCRecHitDBuilder ()
 

Private Attributes

const CSCGeometrygeom_
 
CSCHitFromStripOnlyhitsFromStripOnly_
 
CSCHitFromWireOnlyhitsFromWireOnly_
 
CSCMake2DRecHitmake2DHits_
 
bool makePseudo2DHits
 
CSCRecoConditionsrecoConditions_
 
int stripWireDeltaT
 
bool useCalib
 

Detailed Description

Algorithm to build 2-D RecHit from wire and strip digis in endcap muon CSCs by implementing a 'build' function required by CSCRecHitDProducer.

The builder goes through many stages before building 2-D hits: 1) It finds wire clusters and form wire hits which it stores in CSCWireHit. 2) From these wire hits, it builds pseudo-wire segments to clean up the wire hit collection from noisy hits. Only the hits falling on the segment or far away from existing segments are retained. 1) It then finds strip cluster and hits which it stores in CSCStripHit. 2) Similary to the wire hits, segments are build using the strip hits. Because of the trapezoidal geometry of the strips, all strip hits falling close to the pseudo-strip segments are retained.

Author
Stoyan Stoynev - NU

Definition at line 38 of file CSCRecHitDBuilder.h.

Constructor & Destructor Documentation

◆ CSCRecHitDBuilder()

CSCRecHitDBuilder::CSCRecHitDBuilder ( const edm::ParameterSet ps)
explicit

Configure the algorithm via ctor. Receives ParameterSet percolated down from EDProducer which owns this Builder.

Definition at line 31 of file CSCRecHitDBuilder.cc.

31  : geom_(nullptr) {
32  // Receives ParameterSet percolated down from EDProducer
33 
34  useCalib = ps.getParameter<bool>("CSCUseCalibrations");
35  stripWireDeltaT = ps.getParameter<int>("CSCstripWireDeltaTime");
36 
39  make2DHits_ = new CSCMake2DRecHit(ps);
40 }

References edm::ParameterSet::getParameter(), hitsFromStripOnly_, hitsFromWireOnly_, make2DHits_, stripWireDeltaT, and useCalib.

◆ ~CSCRecHitDBuilder()

CSCRecHitDBuilder::~CSCRecHitDBuilder ( )

Definition at line 42 of file CSCRecHitDBuilder.cc.

42  {
43  delete hitsFromStripOnly_;
44  delete hitsFromWireOnly_;
45  delete make2DHits_;
46 }

References hitsFromStripOnly_, hitsFromWireOnly_, and make2DHits_.

Member Function Documentation

◆ build()

void CSCRecHitDBuilder::build ( const CSCStripDigiCollection stripds,
const CSCWireDigiCollection wireds,
CSCRecHit2DCollection oc 
)

Find digis in each CSCLayer, build strip and wire proto-hits in each layer from which pseudo-segments are build to select hits. Then, strip/wire hits are combined to form 2-D hits, whereas remaining "good" strip and wire only hits are also stored
into output collection.

Definition at line 48 of file CSCRecHitDBuilder.cc.

50  {
51  LogTrace("CSCRecHitDBuilder") << "[CSCRecHitDBuilder] build entered";
52 
53  if (!geom_)
54  throw cms::Exception("MissingGeometry") << "[CSCRecHitDBuilder::getLayer] Missing geometry" << std::endl;
55 
56  // create 2-D hits by looking at superposition of strip and wire hit in a layer
57  //
58  // N.B. I've sorted the hits from layer 1-6 always, so can test if there are "holes",
59  // that is layers without hits for a given chamber.
60 
61  int layer_idx = 0;
62  CSCDetId old_id;
63 
64  for (CSCStripDigiCollection::DigiRangeIterator it = stripdc->begin(); it != stripdc->end(); ++it) {
65  const CSCDetId& id = (*it).first;
66  const CSCLayer* layer = getLayer(id);
67  const CSCStripDigiCollection::Range& rstripd = (*it).second;
68 
69  // Skip if no strip digis in this layer
70  if (rstripd.second == rstripd.first)
71  continue;
72 
73  const CSCDetId& sDetId = id;
74 
75  // This is used to test for gaps in layers and needs to be initialized here
76  if (layer_idx == 0) {
77  old_id = sDetId;
78  }
79 
80  CSCDetId compId = sDetId;
81  CSCWireDigiCollection::Range rwired = wiredc->get(sDetId);
82  // Skip if no wire digis in this layer
83  // But for ME11, real wire digis are labelled as belonging to ME1b, so that's where ME1a must look
84  // (We try ME1a - above - anyway, because simulated wire digis are labelled as ME1a.)
85  if (rwired.second == rwired.first) {
86  if (sDetId.station() != 1 || sDetId.ring() != 4) {
87  continue; // not ME1a, skip to next layer
88  }
89  // So if ME1a has no wire digis (always the case for data) make the
90  // wire digi ID point to ME1b. This is what is compared to the
91  // strip digi ID below (and not used anywhere else).
92  // Later, rechits use the strip digi ID for construction.
93 
94  // It is ME1a but no wire digis there, so try ME1b...
95  int endcap = sDetId.endcap();
96  int chamber = sDetId.chamber();
97  int layer = sDetId.layer();
98  CSCDetId idw(endcap, 1, 1, chamber, layer); // Set idw to same layer in ME1b
99  compId = idw;
100  rwired = wiredc->get(compId);
101  }
102 
103  // Fill bad channel bitsets for this layer
105 
106  // Build strip hits for this layer
107  std::vector<CSCStripHit> const& cscStripHit = hitsFromStripOnly_->runStrip(id, layer, rstripd);
108 
109  if (cscStripHit.empty())
110  continue;
111 
112  // now build collection of wire only hits !
113  std::vector<CSCWireHit> const& cscWireHit = hitsFromWireOnly_->runWire(compId, layer, rwired);
114 
115  // Build 2D hit for all possible strip-wire pairs
116  // overlapping within this layer
117 
118  LogTrace("CSCRecHitBuilder") << "[CSCRecHitDBuilder] found " << cscStripHit.size() << " strip and "
119  << cscWireHit.size() << " wire hits in layer " << sDetId;
120 
121  // Vector to store rechit within layer
122  std::vector<CSCRecHit2D> hitsInLayer;
123  unsigned int hits_in_layer = 0;
124 
125  for (auto const& s_hit : cscStripHit) {
126  for (auto const& w_hit : cscWireHit) {
127  CSCRecHit2D rechit = make2DHits_->hitFromStripAndWire(sDetId, layer, w_hit, s_hit);
128  // Store rechit as a Local Point:
129  LocalPoint rhitlocal = rechit.localPosition();
130  float yreco = rhitlocal.y();
131  bool isInFiducial = false;
132  //in me1/1 chambers the strip cut region is at local y = 30 cm, +-5 cm area around it proved to be a suitabla region for omiting the check
133  if ((sDetId.station() == 1) && (sDetId.ring() == 1 || sDetId.ring() == 4) && (fabs(yreco + 30.) < 5.)) {
134  isInFiducial = true;
135  } else {
136  isInFiducial = make2DHits_->isHitInFiducial(layer, rechit);
137  }
138  if (isInFiducial) {
139  hitsInLayer.push_back(rechit);
140  hits_in_layer++;
141  }
142  }
143  }
144 
145  LogTrace("CSCRecHitDBuilder") << "[CSCRecHitDBuilder] " << hits_in_layer << " rechits found in layer " << sDetId;
146 
147  // output vector of 2D rechits to collection
148  if (hits_in_layer > 0) {
149  oc.put(sDetId, hitsInLayer.begin(), hitsInLayer.end());
150  }
151  layer_idx++;
152  old_id = sDetId;
153  }
154 
155  LogTrace("CSCRecHitDBuilder") << "[CSCRecHitDBuilder] " << oc.size() << " 2d rechits created in this event.";
156 }

References relativeConstraints::chamber, CSCDetId::chamber(), CSCDetId::endcap(), makeMuonMisalignmentScenario::endcap, Exception, CSCRecoConditions::fillBadChannelWords(), geom_, getLayer(), CSCMake2DRecHit::hitFromStripAndWire(), hitsFromStripOnly_, hitsFromWireOnly_, triggerObjects_cff::id, CSCMake2DRecHit::isHitInFiducial(), CSCDetId::layer(), phase1PixelTopology::layer, CSCRecHit2D::localPosition(), LogTrace, make2DHits_, recoConditions_, CSCDetId::ring(), CSCHitFromStripOnly::runStrip(), CSCHitFromWireOnly::runWire(), CSCDetId::station(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by CSCRecHitDProducer::produce().

◆ getLayer()

const CSCLayer * CSCRecHitDBuilder::getLayer ( const CSCDetId detId)

Definition at line 158 of file CSCRecHitDBuilder.cc.

158 { return geom_->layer(detId); }

References geom_, and CSCGeometry::layer().

Referenced by build().

◆ setConditions()

void CSCRecHitDBuilder::setConditions ( CSCRecoConditions reco)

◆ setGeometry()

void CSCRecHitDBuilder::setGeometry ( const CSCGeometry geom)
inline

Cache pointer to geometry so it can be passed downstream

Definition at line 61 of file CSCRecHitDBuilder.h.

61 { geom_ = geom; }

References relativeConstraints::geom, and geom_.

Referenced by CSCRecHitDProducer::produce().

Member Data Documentation

◆ geom_

const CSCGeometry* CSCRecHitDBuilder::geom_
private

Definition at line 88 of file CSCRecHitDBuilder.h.

Referenced by build(), getLayer(), and setGeometry().

◆ hitsFromStripOnly_

CSCHitFromStripOnly* CSCRecHitDBuilder::hitsFromStripOnly_
private

The Program first constructs proto wire/strip hits which it stores in a special collection. Proto strip/wire segments are then build from these hits and allow to clean up up the list of hits.

Definition at line 80 of file CSCRecHitDBuilder.h.

Referenced by build(), CSCRecHitDBuilder(), setConditions(), and ~CSCRecHitDBuilder().

◆ hitsFromWireOnly_

CSCHitFromWireOnly* CSCRecHitDBuilder::hitsFromWireOnly_
private

Definition at line 81 of file CSCRecHitDBuilder.h.

Referenced by build(), CSCRecHitDBuilder(), setConditions(), and ~CSCRecHitDBuilder().

◆ make2DHits_

CSCMake2DRecHit* CSCRecHitDBuilder::make2DHits_
private

Definition at line 83 of file CSCRecHitDBuilder.h.

Referenced by build(), CSCRecHitDBuilder(), setConditions(), and ~CSCRecHitDBuilder().

◆ makePseudo2DHits

bool CSCRecHitDBuilder::makePseudo2DHits
private

Definition at line 73 of file CSCRecHitDBuilder.h.

◆ recoConditions_

CSCRecoConditions* CSCRecHitDBuilder::recoConditions_
private

Definition at line 92 of file CSCRecHitDBuilder.h.

Referenced by build(), and setConditions().

◆ stripWireDeltaT

int CSCRecHitDBuilder::stripWireDeltaT
private

Definition at line 72 of file CSCRecHitDBuilder.h.

Referenced by CSCRecHitDBuilder().

◆ useCalib

bool CSCRecHitDBuilder::useCalib
private

Definition at line 71 of file CSCRecHitDBuilder.h.

Referenced by CSCRecHitDBuilder().

CSCDetId::ring
int ring() const
Definition: CSCDetId.h:68
CSCRecHitDBuilder::stripWireDeltaT
int stripWireDeltaT
Definition: CSCRecHitDBuilder.h:72
CSCRecHitDBuilder::getLayer
const CSCLayer * getLayer(const CSCDetId &detId)
Definition: CSCRecHitDBuilder.cc:158
CSCLayer
Definition: CSCLayer.h:24
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:46
makeMuonMisalignmentScenario.endcap
endcap
Definition: makeMuonMisalignmentScenario.py:320
CSCRecHitDBuilder::geom_
const CSCGeometry * geom_
Definition: CSCRecHitDBuilder.h:88
CSCMake2DRecHit
Definition: CSCMake2DRecHit.h:30
CSCHitFromStripOnly::runStrip
std::vector< CSCStripHit > runStrip(const CSCDetId &id, const CSCLayer *layer, const CSCStripDigiCollection::Range &rstripd)
Definition: CSCHitFromStripOnly.cc:54
CSCHitFromWireOnly::runWire
std::vector< CSCWireHit > runWire(const CSCDetId &id, const CSCLayer *layer, const CSCWireDigiCollection::Range &rwired)
Definition: CSCHitFromWireOnly.cc:31
CSCDetId::layer
int layer() const
Definition: CSCDetId.h:56
CSCRecHitDBuilder::hitsFromWireOnly_
CSCHitFromWireOnly * hitsFromWireOnly_
Definition: CSCRecHitDBuilder.h:81
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
Point3DBase< float, LocalTag >
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
CSCHitFromWireOnly
Definition: CSCHitFromWireOnly.h:36
CSCRecHit2D
Definition: CSCRecHit2D.h:18
CSCRecHit2D::localPosition
LocalPoint localPosition() const override
Definition: CSCRecHit2D.h:56
CSCDetId
Definition: CSCDetId.h:26
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
CSCRecoConditions::fillBadChannelWords
void fillBadChannelWords(const CSCDetId &id)
fill bad strip & bad wiregroup bitsets from conditions data
Definition: CSCRecoConditions.cc:13
CSCDetId::chamber
int chamber() const
Definition: CSCDetId.h:62
CSCRecHitDBuilder::recoConditions_
CSCRecoConditions * recoConditions_
Definition: CSCRecHitDBuilder.h:92
CSCHitFromWireOnly::setConditions
void setConditions(const CSCRecoConditions *reco)
Definition: CSCHitFromWireOnly.h:47
CSCMake2DRecHit::isHitInFiducial
bool isHitInFiducial(const CSCLayer *layer, const CSCRecHit2D &rh)
Test if rechit is in fiducial volume.
Definition: CSCMake2DRecHit.cc:279
CSCHitFromStripOnly::setConditions
void setConditions(const CSCRecoConditions *reco)
Definition: CSCHitFromStripOnly.h:46
CSCRecHitDBuilder::useCalib
bool useCalib
Definition: CSCRecHitDBuilder.h:71
CSCGeometry::layer
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to given DetId.
Definition: CSCGeometry.cc:105
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
CSCRecHitDBuilder::hitsFromStripOnly_
CSCHitFromStripOnly * hitsFromStripOnly_
Definition: CSCRecHitDBuilder.h:80
CSCDetId::endcap
int endcap() const
Definition: CSCDetId.h:85
dt_dqm_sourceclient_common_cff.reco
reco
Definition: dt_dqm_sourceclient_common_cff.py:111
Exception
Definition: hltDiff.cc:245
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
MuonDigiCollection::Range
std::pair< const_iterator, const_iterator > Range
Definition: MuonDigiCollection.h:95
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
CSCMake2DRecHit::hitFromStripAndWire
CSCRecHit2D hitFromStripAndWire(const CSCDetId &id, const CSCLayer *layer, const CSCWireHit &wHit, const CSCStripHit &sHit)
Make 2D hits when have both wire and strip hit available in same layer.
Definition: CSCMake2DRecHit.cc:35
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
CSCDetId::station
int station() const
Definition: CSCDetId.h:79
CSCHitFromStripOnly
Definition: CSCHitFromStripOnly.h:34
DigiContainerIterator
Definition: MuonDigiCollection.h:30
CSCRecHitDBuilder::make2DHits_
CSCMake2DRecHit * make2DHits_
Definition: CSCRecHitDBuilder.h:83
CSCMake2DRecHit::setConditions
void setConditions(const CSCRecoConditions *reco)
Pass pointer to conditions data onwards.
Definition: CSCMake2DRecHit.cc:294