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 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
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
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.
const uint16_t range(const Frame &aFrame)
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 &)
T getParameter(std::string const &) const
std::vector< std::pair< float, DTRecHit1DPair > > initHits(const DTSuperLayer *sl, std::vector< DTRecHit1DPair > &pairs)