CMS 3D CMS Logo

CSCRecHitDBuilder.cc
Go to the documentation of this file.
1 // This is CSCRecHitDBuilder.cc
2 
10 
14 
16 
23 
26 
27 #include <iostream>
28 #include <cassert>
29 
31  // Receives ParameterSet percolated down from EDProducer
32 
33  useCalib = ps.getParameter<bool>("CSCUseCalibrations");
34  stripWireDeltaT = ps.getParameter<int>("CSCstripWireDeltaTime");
35 
38  make2DHits_ = new CSCMake2DRecHit(ps);
39 }
40 
42  delete hitsFromStripOnly_;
43  delete hitsFromWireOnly_;
44  delete make2DHits_;
45 }
46 
48  const CSCWireDigiCollection* wiredc,
50  LogTrace("CSCRecHitDBuilder") << "[CSCRecHitDBuilder] build entered";
51 
52  if (!geom_)
53  throw cms::Exception("MissingGeometry") << "[CSCRecHitDBuilder::getLayer] Missing geometry" << std::endl;
54 
55  // create 2-D hits by looking at superposition of strip and wire hit in a layer
56  //
57  // N.B. I've sorted the hits from layer 1-6 always, so can test if there are "holes",
58  // that is layers without hits for a given chamber.
59 
60  int layer_idx = 0;
61  CSCDetId old_id;
62 
63  for (CSCStripDigiCollection::DigiRangeIterator it = stripdc->begin(); it != stripdc->end(); ++it) {
64  const CSCDetId& id = (*it).first;
65  const CSCLayer* layer = getLayer(id);
66  const CSCStripDigiCollection::Range& rstripd = (*it).second;
67 
68  // Skip if no strip digis in this layer
69  if (rstripd.second == rstripd.first)
70  continue;
71 
72  const CSCDetId& sDetId = id;
73 
74  // This is used to test for gaps in layers and needs to be initialized here
75  if (layer_idx == 0) {
76  old_id = sDetId;
77  }
78 
79  CSCDetId compId = sDetId;
80  CSCWireDigiCollection::Range rwired = wiredc->get(sDetId);
81  // Skip if no wire digis in this layer
82  // But for ME11, real wire digis are labelled as belonging to ME1b, so that's where ME1a must look
83  // (We try ME1a - above - anyway, because simulated wire digis are labelled as ME1a.)
84  if (rwired.second == rwired.first) {
85  if (sDetId.station() != 1 || sDetId.ring() != 4) {
86  continue; // not ME1a, skip to next layer
87  }
88  // So if ME1a has no wire digis (always the case for data) make the
89  // wire digi ID point to ME1b. This is what is compared to the
90  // strip digi ID below (and not used anywhere else).
91  // Later, rechits use the strip digi ID for construction.
92 
93  // It is ME1a but no wire digis there, so try ME1b...
94  int endcap = sDetId.endcap();
95  int chamber = sDetId.chamber();
96  int layer = sDetId.layer();
97  CSCDetId idw(endcap, 1, 1, chamber, layer); // Set idw to same layer in ME1b
98  compId = idw;
99  rwired = wiredc->get(compId);
100  }
101 
102  // Fill bad channel bitsets for this layer
104 
105  // Build strip hits for this layer
106  std::vector<CSCStripHit> const& cscStripHit = hitsFromStripOnly_->runStrip(id, layer, rstripd);
107 
108  if (cscStripHit.empty())
109  continue;
110 
111  // now build collection of wire only hits !
112  std::vector<CSCWireHit> const& cscWireHit = hitsFromWireOnly_->runWire(compId, layer, rwired);
113 
114  // Build 2D hit for all possible strip-wire pairs
115  // overlapping within this layer
116 
117  LogTrace("CSCRecHitBuilder") << "[CSCRecHitDBuilder] found " << cscStripHit.size() << " strip and "
118  << cscWireHit.size() << " wire hits in layer " << sDetId;
119 
120  // Vector to store rechit within layer
121  std::vector<CSCRecHit2D> hitsInLayer;
122  unsigned int hits_in_layer = 0;
123 
124  for (auto const& s_hit : cscStripHit) {
125  for (auto const& w_hit : cscWireHit) {
126  CSCRecHit2D rechit = make2DHits_->hitFromStripAndWire(sDetId, layer, w_hit, s_hit);
127 
128  bool isInFiducial = make2DHits_->isHitInFiducial(layer, rechit);
129  if (isInFiducial) {
130  hitsInLayer.push_back(rechit);
131  hits_in_layer++;
132  }
133  }
134  }
135 
136  LogTrace("CSCRecHitDBuilder") << "[CSCRecHitDBuilder] " << hits_in_layer << " rechits found in layer " << sDetId;
137 
138  // output vector of 2D rechits to collection
139  if (hits_in_layer > 0) {
140  oc.put(sDetId, hitsInLayer.begin(), hitsInLayer.end());
141  }
142  layer_idx++;
143  old_id = sDetId;
144  }
145 
146  LogTrace("CSCRecHitDBuilder") << "[CSCRecHitDBuilder] " << oc.size() << " 2d rechits created in this event.";
147 }
148 
149 const CSCLayer* CSCRecHitDBuilder::getLayer(const CSCDetId& detId) { return geom_->layer(detId); }
150 
156 }
CSCRecHit2DCollection
MessageLogger.h
CSCHitFromStripOnly.h
CSCDetId::ring
int ring() const
Definition: CSCDetId.h:68
CSCRecHitDBuilder::setConditions
void setConditions(CSCRecoConditions *reco)
Definition: CSCRecHitDBuilder.cc:151
CSCStripDigiCollection
CSCStripHitCollection.h
CSCRecHitDBuilder::stripWireDeltaT
int stripWireDeltaT
Definition: CSCRecHitDBuilder.h:72
CSCRecHitDBuilder::getLayer
const CSCLayer * getLayer(const CSCDetId &detId)
Definition: CSCRecHitDBuilder.cc:149
CSCDBCrosstalk.h
CSCLayer
Definition: CSCLayer.h:24
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
makeMuonMisalignmentScenario.endcap
endcap
Definition: makeMuonMisalignmentScenario.py:320
CSCRecHitDBuilder::geom_
const CSCGeometry * geom_
Definition: CSCRecHitDBuilder.h:88
CSCRangeMapForRecHit.h
CSCMake2DRecHit
Definition: CSCMake2DRecHit.h:30
CSCDetId.h
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
CSCDBNoiseMatrixRcd.h
CSCDetId::layer
int layer() const
Definition: CSCDetId.h:56
CSCRecHitDBuilder::build
void build(const CSCStripDigiCollection *stripds, const CSCWireDigiCollection *wireds, CSCRecHit2DCollection &oc)
Definition: CSCRecHitDBuilder.cc:47
CSCRecHitDBuilder::hitsFromWireOnly_
CSCHitFromWireOnly * hitsFromWireOnly_
Definition: CSCRecHitDBuilder.h:81
CSCHitFromWireOnly.h
CSCWireHitCollection.h
CSCHitFromWireOnly
Definition: CSCHitFromWireOnly.h:36
edm::ParameterSet
Definition: ParameterSet.h:36
CSCRecHit2D
Definition: CSCRecHit2D.h:18
CSCRecHitDBuilder::CSCRecHitDBuilder
CSCRecHitDBuilder(const edm::ParameterSet &ps)
Definition: CSCRecHitDBuilder.cc:30
CSCDetId
Definition: CSCDetId.h:26
CSCRecoConditions::fillBadChannelWords
void fillBadChannelWords(const CSCDetId &id)
fill bad strip & bad wiregroup bitsets from conditions data
Definition: CSCRecoConditions.cc:13
CSCDBNoiseMatrix.h
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:271
CSCDBCrosstalkRcd.h
CSCHitFromStripOnly::setConditions
void setConditions(const CSCRecoConditions *reco)
Definition: CSCHitFromStripOnly.h:46
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
CSCRecHitDBuilder::useCalib
bool useCalib
Definition: CSCRecHitDBuilder.h:71
CSCWireDigiCollection
CSCGeometry::layer
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to given DetId.
Definition: CSCGeometry.cc:105
CSCRecHitDBuilder.h
CSCLayer.h
CSCRecoConditions
Definition: CSCRecoConditions.h:24
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
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:110
CSCDBGainsRcd.h
Exception
Definition: hltDiff.cc:246
CSCRecHitDBuilder::~CSCRecHitDBuilder
~CSCRecHitDBuilder()
Definition: CSCRecHitDBuilder.cc:41
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
MuonDigiCollection::Range
std::pair< const_iterator, const_iterator > Range
Definition: MuonDigiCollection.h:95
Exception.h
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
CSCDBGains.h
CSCChamberSpecs.h
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
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.h
CSCGeometry.h
CSCMake2DRecHit::setConditions
void setConditions(const CSCRecoConditions *reco)
Pass pointer to conditions data onwards.
Definition: CSCMake2DRecHit.cc:286