48 theMinLayers = pset.
getParameter<
unsigned int>(
"minLayers");
51 cout <<
"[DTClusterer] Constructor called" << endl;
53 produces<DTRecClusterCollection>();
63 cout <<
"[DTClusterer] produce called" << endl;
70 event.getByToken(recHits1DToken_, allHits);
76 DTRecHitCollection::id_iterator dtLayerIt;
78 for (dtLayerIt = allHits->id_begin(); dtLayerIt != allHits->id_end(); ++dtLayerIt){
82 if (SLId==oldSlId)
continue;
85 if(
debug)
cout <<
"Reconstructing the clusters in "<< SLId << endl;
94 vector<DTRecHit1DPair> pairs(range.first,range.second);
95 if(
debug)
cout <<
"Number of 1D-RecHit pairs " << pairs.size() << endl;
96 vector<DTSLRecCluster> clus=buildClusters(sl, pairs);
97 if(
debug)
cout <<
"Number of clusters build " << clus.size() << endl;
99 clusters->put(sl->
id(), clus.begin(), clus.end());
105 vector<DTRecHit1DPair>& pairs) {
107 vector<pair<float, DTRecHit1DPair> > hits = initHits(sl, pairs);
109 vector<DTSLRecCluster>
result;
111 vector<DTRecHit1DPair> adiacentPairs;
112 float lastPos=hits.front().first;
113 const float cellWidth=4.2;
117 for (vector<pair<float, DTRecHit1DPair> >::const_iterator
hit=hits.begin();
hit!=hits.end();
119 if(
debug)
cout <<
"Hit: " << (*hit).first <<
" lastPos: " << lastPos << endl;
122 if(
abs((*hit).first-lastPos)>cellWidth ) {
123 if (adiacentPairs.size() >= theMinHits && differentLayers(adiacentPairs)>=theMinLayers) {
125 float mean=sum/adiacentPairs.size();
126 float err2=sum2/adiacentPairs.size()-mean*
mean;
131 if(
debug)
cout <<
"Cluster " << cluster << endl;
132 result.push_back(cluster);
135 adiacentPairs.clear();
140 adiacentPairs.push_back((*hit).second);
141 if(
debug)
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;
155 if(
debug)
cout <<
"Cluster " << cluster << endl;
156 result.push_back(cluster);
163 vector<DTRecHit1DPair>& pairs) {
164 vector<pair<float, DTRecHit1DPair> >
result;
165 for (vector<DTRecHit1DPair>::const_iterator pair=pairs.begin();
166 pair!=pairs.end(); ++pair ) {
177 result.push_back(make_pair(posInSL.
x(), *pair));
189 for (vector<DTRecHit1DPair>::const_iterator
hit=hits.begin();
hit!=hits.end();
191 int pos = (1 << ((*hit).wireId().layer() -1 ));
192 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
virtual void produce(edm::Event &event, const edm::EventSetup &setup)
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
edm::RangeMap< DTSuperLayerId, edm::OwnVector< DTSLRecCluster > > DTRecClusterCollection
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.
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)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::vector< DTSLRecCluster > buildClusters(const DTSuperLayer *sl, std::vector< DTRecHit1DPair > &pairs)
const DTLayer * layer(DTLayerId id) const
Return the layer corresponding to the given id.
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)