41 debug =
pset.getUntrackedParameter<
bool>(
"debug");
44 recHits1DToken_ = consumes<DTRecHitCollection>(
pset.getParameter<
InputTag>(
"recHits1DLabel"));
46 theMinHits =
pset.getParameter<
unsigned int>(
"minHits");
48 theMinLayers =
pset.getParameter<
unsigned int>(
"minLayers");
52 cout <<
"[DTClusterer] Constructor called" << endl;
54 produces<DTRecClusterCollection>();
63 cout <<
"[DTClusterer] produce called" << endl;
69 event.getByToken(recHits1DToken_, allHits);
72 auto clusters = std::make_unique<DTRecClusterCollection>();
77 for (dtLayerIt = allHits->id_begin(); dtLayerIt != allHits->id_end(); ++dtLayerIt) {
86 cout <<
"Reconstructing the clusters in " << SLId << endl;
94 vector<DTRecHit1DPair> pairs(
range.first,
range.second);
96 cout <<
"Number of 1D-RecHit pairs " << pairs.size() << endl;
97 vector<DTSLRecCluster> clus = buildClusters(sl, pairs);
99 cout <<
"Number of clusters build " << clus.size() << endl;
101 clusters->put(sl->
id(), clus.begin(), clus.end());
108 vector<pair<float, DTRecHit1DPair> >
hits = initHits(sl, pairs);
110 vector<DTSLRecCluster>
result;
112 vector<DTRecHit1DPair> adiacentPairs;
113 float lastPos =
hits.front().first;
114 const float cellWidth = 4.2;
120 cout <<
"Hit: " << (*hit).first <<
" lastPos: " << lastPos << endl;
123 if (
abs((*hit).first - lastPos) > cellWidth) {
124 if (adiacentPairs.size() >= theMinHits && differentLayers(adiacentPairs) >= theMinLayers) {
126 float mean = sum / adiacentPairs.size();
127 float err2 = sum2 / adiacentPairs.size() -
mean *
mean;
130 cout <<
"Cluster " << cluster << endl;
131 result.push_back(cluster);
134 adiacentPairs.clear();
139 adiacentPairs.push_back((*hit).second);
141 cout <<
"adiacentPairs " << adiacentPairs.size() << endl;
143 sum2 += (*hit).first * (*hit).first;
145 lastPos = (*hit).first;
148 if (adiacentPairs.size() >= theMinHits && differentLayers(adiacentPairs) >= theMinLayers) {
149 float mean = sum / adiacentPairs.size();
150 float err2 = sum2 / adiacentPairs.size() -
mean *
mean;
153 cout <<
"Cluster " << cluster << endl;
154 result.push_back(cluster);
161 vector<DTRecHit1DPair>& pairs)
const {
162 vector<pair<float, DTRecHit1DPair> >
result;
163 for (vector<DTRecHit1DPair>::const_iterator pair = pairs.begin(); pair != pairs.end(); ++pair) {
172 result.push_back(make_pair(posInSL.
x(), *pair));
184 for (vector<DTRecHit1DPair>::const_iterator
hit =
hits.begin();
hit !=
hits.end(); ++
hit) {
185 int pos = (1 << ((*hit).wireId().layer() - 1));
std::pair< const_iterator, const_iterator > range
iterator range
Point3DBase< Scalar, LocalTag > LocalPoint
unsigned int differentLayers(std::vector< DTRecHit1DPair > &hits) const
int wire() const
Return the wire number.
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
void produce(edm::StreamID, edm::Event &event, const edm::EventSetup &setup) const override
static std::pair< DTLayerId, DTSuperLayerIdComparator > layersBySuperLayer(DTSuperLayerId slId)
Access by SL objects written into a RangeMap by layer.
const DTSuperLayer * superLayer(const DTSuperLayerId &id) const
Return a DTSuperLayer given its id.
const DTLayer * layer(const DTLayerId &id) const
Return the layer corresponding to the given id.
Abs< T >::type abs(const T &t)
const DTTopology & specificTopology() const
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
DTClusterer(const edm::ParameterSet &)
int layer() const
Return the layer number.
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
std::vector< std::pair< float, DTRecHit1DPair > > initHits(const DTSuperLayer *sl, std::vector< DTRecHit1DPair > &pairs) const
std::vector< DTSLRecCluster > buildClusters(const DTSuperLayer *sl, std::vector< DTRecHit1DPair > &pairs) const
DTSuperLayerId id() const
Return the DetId of this SL.
float wirePosition(int wireNumber) const
Returns the x position in the layer of a given wire number.