48 theMinLayers = pset.
getParameter<
unsigned int>(
"minLayers");
51 cout <<
"[DTClusterer] Constructor called" << endl;
53 produces<DTRecClusterCollection>();
62 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;
118 for (vector<pair<float, DTRecHit1DPair> >::const_iterator
hit = hits.begin();
hit != hits.end(); ++
hit) {
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<pair<float, DTRecHit1DPair> >
result;
162 for (vector<DTRecHit1DPair>::const_iterator pair = pairs.begin(); pair != pairs.end(); ++pair) {
171 result.push_back(make_pair(posInSL.
x(), *pair));
183 for (vector<DTRecHit1DPair>::const_iterator
hit = hits.begin();
hit != hits.end(); ++
hit) {
184 int pos = (1 << ((*hit).wireId().layer() - 1));
185 if (!(pos & layers)) {
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
float wirePosition(int wireNumber) const
Returns the x position in the layer of a given wire number.
unsigned int differentLayers(std::vector< DTRecHit1DPair > &hits)
std::pair< const_iterator, const_iterator > range
iterator range
Point3DBase< Scalar, LocalTag > LocalPoint
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
static std::pair< DTLayerId, DTSuperLayerIdComparator > layersBySuperLayer(DTSuperLayerId slId)
Access by SL objects written into a RangeMap by layer.
void produce(edm::Event &event, const edm::EventSetup &setup) override
const DTLayer * layer(const DTLayerId &id) const
Return the layer corresponding to the given id.
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
int layer() const
Return the layer number.
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
DTSuperLayerId id() const
Return the DetId of this SL.
const DTTopology & specificTopology() const
Abs< T >::type abs(const T &t)
std::vector< DTSLRecCluster > buildClusters(const DTSuperLayer *sl, std::vector< DTRecHit1DPair > &pairs)
int wire() const
Return the wire number.
DTClusterer(const edm::ParameterSet &)
std::vector< std::pair< float, DTRecHit1DPair > > initHits(const DTSuperLayer *sl, std::vector< DTRecHit1DPair > &pairs)
const DTSuperLayer * superLayer(const DTSuperLayerId &id) const
Return a DTSuperLayer given its id.