CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes
Multi5x5ClusterAlgo Class Reference

#include <Multi5x5ClusterAlgo.h>

Classes

class  ProtoBasicCluster
 

Public Types

typedef math::XYZPoint Point
 point in the space More...
 

Public Member Functions

std::vector< reco::BasicClustermakeClusters (const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry, const CaloSubdetectorTopology *topology_p, const CaloSubdetectorGeometry *geometryES_p, reco::CaloID::Detectors detector, bool regional=false, const std::vector< EcalEtaPhiRegion > &regions=std::vector< EcalEtaPhiRegion >())
 
 Multi5x5ClusterAlgo ()
 
 Multi5x5ClusterAlgo (double ebst, double ecst, const std::vector< int > &v_chstatus, const PositionCalc &posCalc, bool reassignSeedCrysToClusterItSeeds=false)
 
virtual ~Multi5x5ClusterAlgo ()
 

Private Member Functions

void addCrystal (const DetId &det)
 
bool checkMaxima (CaloNavigator< DetId > &navigator, const EcalRecHitCollection *hits)
 
void mainSearch (const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry_p, const CaloSubdetectorTopology *topology_p, const CaloSubdetectorGeometry *geometryES_p)
 
void makeCluster (const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry_p, const CaloSubdetectorGeometry *geometryES_p, const EcalRecHitCollection::const_iterator &seedIt, bool seedOutside)
 
void prepareCluster (CaloNavigator< DetId > &navigator, const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry)
 

Private Attributes

std::set< DetIdcanSeed_s
 
std::vector< reco::BasicClusterclusters_v
 
std::vector< std::pair< DetId,
float > > 
current_v
 
reco::CaloID::Detectors detector_
 The ecal region used. More...
 
double ecalBarrelSeedThreshold
 
double ecalEndcapSeedThreshold
 
PositionCalc posCalculator_
 
std::vector< ProtoBasicClusterprotoClusters_
 
bool reassignSeedCrysToClusterItSeeds_
 
const EcalRecHitCollectionrecHits_
 
std::vector< EcalRecHitseeds
 
std::set< DetIdused_s
 
std::vector< int > v_chstatus_
 
std::vector< std::pair< DetId,
int > > 
whichClusCrysBelongsTo_
 

Detailed Description

Definition at line 28 of file Multi5x5ClusterAlgo.h.

Member Typedef Documentation

point in the space

Definition at line 81 of file Multi5x5ClusterAlgo.h.

Constructor & Destructor Documentation

Multi5x5ClusterAlgo::Multi5x5ClusterAlgo ( )
inline

Definition at line 57 of file Multi5x5ClusterAlgo.h.

57  {
58  }
Multi5x5ClusterAlgo::Multi5x5ClusterAlgo ( double  ebst,
double  ecst,
const std::vector< int > &  v_chstatus,
const PositionCalc posCalc,
bool  reassignSeedCrysToClusterItSeeds = false 
)
inline

Definition at line 60 of file Multi5x5ClusterAlgo.h.

References posCalculator_, python.multivaluedict::sort(), and v_chstatus_.

60  :
61  ecalBarrelSeedThreshold(ebst), ecalEndcapSeedThreshold(ecst), v_chstatus_(v_chstatus) ,reassignSeedCrysToClusterItSeeds_(reassignSeedCrysToClusterItSeeds) {
62  posCalculator_ = posCalc;
63  std::sort( v_chstatus_.begin(), v_chstatus_.end() );
64  }
std::vector< int > v_chstatus_
virtual Multi5x5ClusterAlgo::~Multi5x5ClusterAlgo ( )
inlinevirtual

Definition at line 66 of file Multi5x5ClusterAlgo.h.

67  {
68  }

Member Function Documentation

void Multi5x5ClusterAlgo::addCrystal ( const DetId det)
private

Definition at line 407 of file Multi5x5ClusterAlgo.cc.

References current_v, edm::SortedCollection< T, SORT >::end(), edm::SortedCollection< T, SORT >::find(), recHits_, and used_s.

Referenced by prepareCluster().

408 {
409 
411  if ((thisIt != recHits_->end()) && (thisIt->id() != DetId(0)))
412  {
413  if ((used_s.find(thisIt->id()) == used_s.end()))
414  {
415  //std::cout << " ... this is a good crystal and will be added" << std::endl;
416  current_v.push_back( std::pair<DetId, float>(det, 1.) ); // by default hit energy fractions are set at 1.
417  used_s.insert(det);
418  }
419  }
420 
421 }
const EcalRecHitCollection * recHits_
std::vector< EcalRecHit >::const_iterator const_iterator
std::set< DetId > used_s
std::vector< std::pair< DetId, float > > current_v
const_iterator end() const
Definition: DetId.h:18
iterator find(key_type k)
bool Multi5x5ClusterAlgo::checkMaxima ( CaloNavigator< DetId > &  navigator,
const EcalRecHitCollection hits 
)
private

Definition at line 298 of file Multi5x5ClusterAlgo.cc.

References CaloNavigator< T, TOPO >::east(), edm::SortedCollection< T, SORT >::end(), spr::find(), edm::SortedCollection< T, SORT >::find(), CaloNavigator< T, TOPO >::home(), i, CaloNavigator< T, TOPO >::north(), CaloNavigator< T, TOPO >::pos(), recHits_, CaloNavigator< T, TOPO >::south(), v_chstatus_, and CaloNavigator< T, TOPO >::west().

Referenced by mainSearch().

300 {
301 
302  bool maxima = true;
304  EcalRecHitCollection::const_iterator seedHit = hits->find(navigator.pos());
305  double seedEnergy = seedHit->energy();
306 
307  std::vector<DetId> swissCrossVec;
308  swissCrossVec.clear();
309 
310  swissCrossVec.push_back(navigator.west());
311  navigator.home();
312  swissCrossVec.push_back(navigator.east());
313  navigator.home();
314  swissCrossVec.push_back(navigator.north());
315  navigator.home();
316  swissCrossVec.push_back(navigator.south());
317  navigator.home();
318 
319  std::vector<DetId>::const_iterator detItr;
320  for (unsigned int i = 0; i < swissCrossVec.size(); ++i)
321  {
322 
323  // look for this hit
324  thisHit = recHits_->find(swissCrossVec[i]);
325 
326  // continue if this hit was not found
327  if ((swissCrossVec[i] == DetId(0)) || thisHit == recHits_->end()) continue;
328 
329  // the recHit has to be skipped in the local maximum search if it was found
330  // in the map of channels to be excluded
331  uint32_t rhFlag = thisHit->recoFlag();
332  std::vector<int>::const_iterator vit = std::find(v_chstatus_.begin(), v_chstatus_.end(), rhFlag);
333  if (vit != v_chstatus_.end()) continue;
334 
335  // if this crystal has more energy than the seed then we do
336  // not have a local maxima
337  if (thisHit->energy() > seedEnergy)
338  {
339  maxima = false;
340  break;
341  }
342  }
343 
344  return maxima;
345 
346 }
int i
Definition: DBlmapReader.cc:9
const EcalRecHitCollection * recHits_
std::vector< EcalRecHit >::const_iterator const_iterator
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
std::vector< int > v_chstatus_
T west() const
move the navigator west
Definition: CaloNavigator.h:59
T south() const
move the navigator south
Definition: CaloNavigator.h:45
T pos() const
get the current position
Definition: CaloNavigator.h:32
const_iterator end() const
T east() const
move the navigator east
Definition: CaloNavigator.h:52
void home() const
move the navigator back to the starting point
Definition: DetId.h:18
iterator find(key_type k)
T north() const
move the navigator north
Definition: CaloNavigator.h:38
void Multi5x5ClusterAlgo::mainSearch ( const EcalRecHitCollection hits,
const CaloSubdetectorGeometry geometry_p,
const CaloSubdetectorTopology topology_p,
const CaloSubdetectorGeometry geometryES_p 
)
private

Definition at line 136 of file Multi5x5ClusterAlgo.cc.

References PositionCalc::Calculate_Location(), canSeed_s, checkMaxima(), clusters_v, current_v, detector_, Multi5x5ClusterAlgo::ProtoBasicCluster::energy(), edm::SortedCollection< T, SORT >::find(), Multi5x5ClusterAlgo::ProtoBasicCluster::hits(), EcalRecHit::id(), EcalRecHit::kGood, LogTrace, makeCluster(), reco::CaloCluster::multi5x5, HLT_25ns14e33_v1_cff::navigator, posCalculator_, position, prepareCluster(), protoClusters_, reassignSeedCrysToClusterItSeeds_, query::result, Multi5x5ClusterAlgo::ProtoBasicCluster::seed(), seeds, python.multivaluedict::sort(), used_s, v_chstatus_, and whichClusCrysBelongsTo_.

Referenced by makeClusters().

141 {
142 
143  LogTrace("EcalClusters") << "Building clusters............";
144 
145  // Loop over seeds:
146  std::vector<EcalRecHit>::iterator it;
147  for (it = seeds.begin(); it != seeds.end(); it++)
148  {
149 
150  // check if this crystal is able to seed
151  // (event though it is already used)
152  bool usedButCanSeed = false;
153  if (canSeed_s.find(it->id()) != canSeed_s.end()) usedButCanSeed = true;
154 
155  // avoid seeding for anomalous channels
156  if(! it->checkFlag(EcalRecHit::kGood)){ // if rechit is good, no need for further checks
157  if (it->checkFlags( v_chstatus_ )) continue;
158  }
159 
160  // make sure the current seed does not belong to a cluster already.
161  if ((used_s.find(it->id()) != used_s.end()) && (usedButCanSeed == false))
162  {
163  if (it == seeds.begin())
164  {
165  LogTrace("EcalClusters") << "##############################################################" ;
166  LogTrace("EcalClusters") << "DEBUG ALERT: Highest energy seed already belongs to a cluster!";
167  LogTrace("EcalClusters") << "##############################################################";
168 
169  }
170 
171  // seed crystal is used or is used and cannot seed a cluster
172  // so continue to the next seed crystal...
173  continue;
174  }
175 
176  // clear the vector of hits in current cluster
177  current_v.clear();
178 
179  // Create a navigator at the seed and get seed
180  // energy
181  CaloNavigator<DetId> navigator(it->id(), topology_p);
182  DetId seedId = navigator.pos();
183  EcalRecHitCollection::const_iterator seedIt = hits->find(seedId);
184  navigator.setHome(seedId);
185 
186  // Is the seed a local maximum?
187  bool localMaxima = checkMaxima(navigator, hits);
188 
189  if (localMaxima)
190  {
191  // build the 5x5 taking care over which crystals
192  // can seed new clusters and which can't
193  prepareCluster(navigator, hits, geometry_p);
194  }
195 
196  // If some crystals in the current vector then
197  // make them into a cluster
198  if (current_v.size() > 0)
199  {
200  makeCluster(hits, geometry_p, geometryES_p, seedIt, usedButCanSeed);
201  }
202 
203  } // End loop on seed crystals
204 
205 
208 
209 
210  for(size_t clusNr=0;clusNr<protoClusters_.size();clusNr++){
211  if(!protoClusters_[clusNr].containsSeed()){
212  const EcalRecHit& seedHit =protoClusters_[clusNr].seed();
213  typedef std::vector<std::pair<DetId,int> >::iterator It;
214  std::pair<It,It> result = std::equal_range(whichClusCrysBelongsTo_.begin(),whichClusCrysBelongsTo_.end(),seedHit.id(),PairSortByFirst<DetId,int>());
215 
216  if(result.first!=result.second) protoClusters_[result.first->second].removeHit(seedHit);
217  protoClusters_[clusNr].addSeed();
218 
219  }
220  }
221  }
222 
223 
224 
225  for(size_t clusNr=0;clusNr<protoClusters_.size();clusNr++){
226  const ProtoBasicCluster& protoCluster= protoClusters_[clusNr];
227  Point position;
228  position = posCalculator_.Calculate_Location(protoCluster.hits(), hits,geometry_p, geometryES_p);
229  clusters_v.push_back(reco::BasicCluster(protoCluster.energy(), position, reco::CaloID(detector_), protoCluster.hits(),
230  reco::CaloCluster::multi5x5, protoCluster.seed().id()));
231  }
232 
233  protoClusters_.clear();
234  whichClusCrysBelongsTo_.clear();
235 }
void makeCluster(const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry_p, const CaloSubdetectorGeometry *geometryES_p, const EcalRecHitCollection::const_iterator &seedIt, bool seedOutside)
std::set< DetId > canSeed_s
std::vector< EcalRecHit >::const_iterator const_iterator
std::vector< int > v_chstatus_
void prepareCluster(CaloNavigator< DetId > &navigator, const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry)
std::vector< std::pair< DetId, int > > whichClusCrysBelongsTo_
tuple result
Definition: query.py:137
math::XYZPoint Point
std::set< DetId > used_s
std::vector< std::pair< DetId, float > > current_v
#define LogTrace(id)
std::vector< ProtoBasicCluster > protoClusters_
std::vector< EcalRecHit > seeds
Definition: DetId.h:18
DetId id() const
get the id
Definition: EcalRecHit.h:76
bool checkMaxima(CaloNavigator< DetId > &navigator, const EcalRecHitCollection *hits)
iterator find(key_type k)
math::XYZPoint Calculate_Location(const HitsAndFractions &iDetIds, const edm::SortedCollection< HitType > *iRecHits, const CaloSubdetectorGeometry *iSubGeom, const CaloSubdetectorGeometry *iESGeom=0)
Definition: PositionCalc.h:68
static int position[264][3]
Definition: ReadPGInfo.cc:509
reco::CaloID::Detectors detector_
The ecal region used.
std::vector< reco::BasicCluster > clusters_v
void Multi5x5ClusterAlgo::makeCluster ( const EcalRecHitCollection hits,
const CaloSubdetectorGeometry geometry_p,
const CaloSubdetectorGeometry geometryES_p,
const EcalRecHitCollection::const_iterator seedIt,
bool  seedOutside 
)
private

Definition at line 237 of file Multi5x5ClusterAlgo.cc.

References PositionCalc::Calculate_Location(), current_v, reco::CaloID::DET_ECAL_BARREL, reco::CaloID::DET_ECAL_ENDCAP, EcalBarrel, relval_parameters_module::energy, EcalRecHit::energy(), edm::SortedCollection< T, SORT >::find(), getDQMSummary::iter, LogTrace, posCalculator_, position, protoClusters_, reassignSeedCrysToClusterItSeeds_, used_s, and whichClusCrysBelongsTo_.

Referenced by mainSearch().

242 {
243 
244  double energy = 0;
245  //double chi2 = 0;
246  reco::CaloID caloID;
247  Point position;
248  position = posCalculator_.Calculate_Location(current_v, hits,geometry, geometryES);
249 
250  std::vector<std::pair<DetId, float> >::iterator it;
251  for (it = current_v.begin(); it != current_v.end(); it++)
252  {
253  EcalRecHitCollection::const_iterator itt = hits->find( (*it).first );
254  EcalRecHit hit_p = *itt;
255  energy += hit_p.energy();
256  //chi2 += 0;
257  if ( (*it).first.subdetId() == EcalBarrel ) {
259  } else {
261  }
262 
263  }
264  //chi2 /= energy;
265 
266  LogTrace("EcalClusters") << "******** NEW CLUSTER ********";
267  LogTrace("EcalClusters") << "No. of crystals = " << current_v.size();
268  LogTrace("EcalClusters") << " Energy = " << energy ;
269  LogTrace("EcalClusters") << " Phi = " << position.phi();
270  LogTrace("EcalClusters") << " Eta " << position.eta();
271  LogTrace("EcalClusters") << "*****************************";
272 
273 
274  // to be a valid cluster the cluster energy
275  // must be at least the seed energy
276  double seedEnergy = seedIt->energy();
277  if ((seedOutside && energy>=0) || (!seedOutside && energy >= seedEnergy))
278  {
279  if(reassignSeedCrysToClusterItSeeds_){ //if we're not doing this, we dont need this info so lets not bother filling it
280  for(size_t hitNr=0;hitNr<current_v.size();hitNr++) whichClusCrysBelongsTo_.push_back(std::pair<DetId,int>(current_v[hitNr].first,protoClusters_.size()));
281  }
282  protoClusters_.push_back(ProtoBasicCluster(energy,*seedIt,current_v));
283 
284  // clusters_v.push_back(reco::BasicCluster(energy, position, reco::CaloID(detector_), current_v, reco::CaloCluster::multi5x5, seedIt->id()));
285 
286  // if no valid cluster was built,
287  // then free up these crystals to be used in the next...
288  } else {
289  std::vector<std::pair<DetId, float> >::iterator iter;
290  for (iter = current_v.begin(); iter != current_v.end(); iter++)
291  {
292  used_s.erase(iter->first);
293  } //for(iter)
294  } //else
295 
296 }
std::vector< EcalRecHit >::const_iterator const_iterator
std::vector< std::pair< DetId, int > > whichClusCrysBelongsTo_
math::XYZPoint Point
std::set< DetId > used_s
float energy() const
Definition: EcalRecHit.h:68
std::vector< std::pair< DetId, float > > current_v
#define LogTrace(id)
std::vector< ProtoBasicCluster > protoClusters_
ESHandle< TrackerGeometry > geometry
iterator find(key_type k)
math::XYZPoint Calculate_Location(const HitsAndFractions &iDetIds, const edm::SortedCollection< HitType > *iRecHits, const CaloSubdetectorGeometry *iSubGeom, const CaloSubdetectorGeometry *iESGeom=0)
Definition: PositionCalc.h:68
static int position[264][3]
Definition: ReadPGInfo.cc:509
std::vector< reco::BasicCluster > Multi5x5ClusterAlgo::makeClusters ( const EcalRecHitCollection hits,
const CaloSubdetectorGeometry geometry,
const CaloSubdetectorTopology topology_p,
const CaloSubdetectorGeometry geometryES_p,
reco::CaloID::Detectors  detector,
bool  regional = false,
const std::vector< EcalEtaPhiRegion > &  regions = std::vector<EcalEtaPhiRegion>() 
)

Definition at line 46 of file Multi5x5ClusterAlgo.cc.

References edm::SortedCollection< T, SORT >::begin(), canSeed_s, clusters_v, reco::CaloID::DET_ECAL_BARREL, reco::CaloID::DET_ECAL_ENDCAP, reco::CaloID::DET_NONE, detector_, ecalBarrelSeedThreshold, ecalEndcapSeedThreshold, edm::SortedCollection< T, SORT >::end(), relval_parameters_module::energy, ET, CaloSubdetectorGeometry::getGeometry(), CaloCellGeometry::getPosition(), LogTrace, mainSearch(), position, recHits_, HLT_25ns14e33_v3_cff::region, seeds, funct::sin(), python.multivaluedict::sort(), AlCaHLTBitMon_QueryRunRegistry::string, PV3DBase< T, PVType, FrameType >::theta(), dtDQMClient_cfg::threshold, and used_s.

Referenced by Multi5x5ClusterProducer::clusterizeECALPart(), and EgammaHLTMulti5x5ClusterProducer::clusterizeECALPart().

55 {
56  seeds.clear();
57  used_s.clear();
58  canSeed_s.clear();
59  clusters_v.clear();
60 
61  recHits_ = hits;
62 
63  double threshold = 0;
64  std::string ecalPart_string;
66  if (detector == reco::CaloID::DET_ECAL_ENDCAP)
67  {
69  threshold = ecalEndcapSeedThreshold;
70  ecalPart_string = "EndCap";
71  }
72  if (detector == reco::CaloID::DET_ECAL_BARREL)
73  {
75  threshold = ecalBarrelSeedThreshold;
76  ecalPart_string = "Barrel";
77  }
78 
79  LogTrace("EcalClusters") << "-------------------------------------------------------------";
80  LogTrace("EcalClusters") << "Island algorithm invoked for ECAL" << ecalPart_string ;
81  LogTrace("EcalClusters") << "Looking for seeds, energy threshold used = " << threshold << " GeV";
82 
83 
84  int nregions=0;
85  if(regional) nregions=regions.size();
86 
87  if(!regional || nregions) {
88 
90  for(it = hits->begin(); it != hits->end(); it++)
91  {
92  double energy = it->energy();
93  if (energy < threshold) continue; // need to check to see if this line is useful!
94 
95  const CaloCellGeometry *thisCell = geometry_p->getGeometry(it->id());
96  GlobalPoint position = thisCell->getPosition();
97 
98  // Require that RecHit is within clustering region in case
99  // of regional reconstruction
100  bool withinRegion = false;
101  if (regional) {
102  std::vector<EcalEtaPhiRegion>::const_iterator region;
103  for (region=regions.begin(); region!=regions.end(); region++) {
104  if (region->inRegion(position)) {
105  withinRegion = true;
106  break;
107  }
108  }
109  }
110 
111  if (!regional || withinRegion) {
112  float ET = it->energy() * sin(position.theta());
113  if (ET > threshold) seeds.push_back(*it);
114  }
115  }
116 
117  }
118 
119  sort(seeds.begin(), seeds.end(), EcalRecHitLess());
120 
121  LogTrace("EcalClusters") << "Total number of seeds found in event = " << seeds.size();
122 
123 
124  mainSearch(hits, geometry_p, topology_p, geometryES_p);
125  sort(clusters_v.rbegin(), clusters_v.rend(), ClusterEtLess());
126 
127  LogTrace("EcalClusters") << "---------- end of main search. clusters have been sorted ----";
128 
129 
130  return clusters_v;
131 
132 }
std::set< DetId > canSeed_s
const EcalRecHitCollection * recHits_
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
std::vector< EcalRecHit >::const_iterator const_iterator
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
void mainSearch(const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry_p, const CaloSubdetectorTopology *topology_p, const CaloSubdetectorGeometry *geometryES_p)
std::set< DetId > used_s
#define LogTrace(id)
const_iterator end() const
std::vector< EcalRecHit > seeds
static int position[264][3]
Definition: ReadPGInfo.cc:509
reco::CaloID::Detectors detector_
The ecal region used.
std::vector< reco::BasicCluster > clusters_v
#define ET
const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
const_iterator begin() const
void Multi5x5ClusterAlgo::prepareCluster ( CaloNavigator< DetId > &  navigator,
const EcalRecHitCollection hits,
const CaloSubdetectorGeometry geometry 
)
private

Definition at line 348 of file Multi5x5ClusterAlgo.cc.

References funct::abs(), addCrystal(), canSeed_s, CaloNavigator< T, TOPO >::home(), and CaloNavigator< T, TOPO >::offsetBy().

Referenced by mainSearch().

351 {
352 
353  DetId thisDet;
354  std::set<DetId>::iterator setItr;
355 
356  // now add the 5x5 taking care to mark the edges
357  // as able to seed and where overlapping in the central
358  // region with crystals that were previously able to seed
359  // change their status so they are not able to seed
360  //std::cout << std::endl;
361  for (int dx = -2; dx < 3; ++dx)
362  {
363  for (int dy = -2; dy < 3; ++ dy)
364  {
365 
366  // navigate in free steps forming
367  // a full 5x5
368  thisDet = navigator.offsetBy(dx, dy);
369  navigator.home();
370 
371  // add the current crystal
372  //std::cout << "adding " << dx << ", " << dy << std::endl;
373  addCrystal(thisDet);
374 
375  // now consider if we are in an edge (outer 16)
376  // or central (inner 9) region
377  if ((abs(dx) > 1) || (abs(dy) > 1))
378  {
379  // this is an "edge" so should be allowed to seed
380  // provided it is not already used
381  //std::cout << " setting can seed" << std::endl;
382  canSeed_s.insert(thisDet);
383  } // end if "edge"
384  else
385  {
386  // or else we are in the central 3x3
387  // and must remove any of these crystals from the canSeed set
388  setItr = canSeed_s.find(thisDet);
389  if (setItr != canSeed_s.end())
390  {
391  //std::cout << " unsetting can seed" << std::endl;
392  canSeed_s.erase(setItr);
393  }
394  } // end if "centre"
395 
396 
397  } // end loop on dy
398 
399  } // end loop on dx
400 
401  //std::cout << "*** " << std::endl;
402  //std::cout << " current_v contains " << current_v.size() << std::endl;
403  //std::cout << "*** " << std::endl;
404 }
std::set< DetId > canSeed_s
T offsetBy(int deltaX, int deltaY) const
Free movement of arbitray steps.
Definition: CaloNavigator.h:80
void addCrystal(const DetId &det)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void home() const
move the navigator back to the starting point
Definition: DetId.h:18

Member Data Documentation

std::set<DetId> Multi5x5ClusterAlgo::canSeed_s
private

Definition at line 105 of file Multi5x5ClusterAlgo.h.

Referenced by mainSearch(), makeClusters(), and prepareCluster().

std::vector<reco::BasicCluster> Multi5x5ClusterAlgo::clusters_v
private

Definition at line 113 of file Multi5x5ClusterAlgo.h.

Referenced by mainSearch(), and makeClusters().

std::vector<std::pair<DetId, float> > Multi5x5ClusterAlgo::current_v
private

Definition at line 110 of file Multi5x5ClusterAlgo.h.

Referenced by addCrystal(), mainSearch(), and makeCluster().

reco::CaloID::Detectors Multi5x5ClusterAlgo::detector_
private

The ecal region used.

Definition at line 89 of file Multi5x5ClusterAlgo.h.

Referenced by mainSearch(), and makeClusters().

double Multi5x5ClusterAlgo::ecalBarrelSeedThreshold
private

Definition at line 92 of file Multi5x5ClusterAlgo.h.

Referenced by makeClusters().

double Multi5x5ClusterAlgo::ecalEndcapSeedThreshold
private

Definition at line 93 of file Multi5x5ClusterAlgo.h.

Referenced by makeClusters().

PositionCalc Multi5x5ClusterAlgo::posCalculator_
private

Definition at line 86 of file Multi5x5ClusterAlgo.h.

Referenced by mainSearch(), makeCluster(), and Multi5x5ClusterAlgo().

std::vector<ProtoBasicCluster> Multi5x5ClusterAlgo::protoClusters_
private

Definition at line 114 of file Multi5x5ClusterAlgo.h.

Referenced by mainSearch(), and makeCluster().

bool Multi5x5ClusterAlgo::reassignSeedCrysToClusterItSeeds_
private

Definition at line 118 of file Multi5x5ClusterAlgo.h.

Referenced by mainSearch(), and makeCluster().

const EcalRecHitCollection* Multi5x5ClusterAlgo::recHits_
private

Definition at line 96 of file Multi5x5ClusterAlgo.h.

Referenced by addCrystal(), checkMaxima(), and makeClusters().

std::vector<EcalRecHit> Multi5x5ClusterAlgo::seeds
private

Definition at line 99 of file Multi5x5ClusterAlgo.h.

Referenced by mainSearch(), and makeClusters().

std::set<DetId> Multi5x5ClusterAlgo::used_s
private

Definition at line 104 of file Multi5x5ClusterAlgo.h.

Referenced by addCrystal(), mainSearch(), makeCluster(), and makeClusters().

std::vector<int> Multi5x5ClusterAlgo::v_chstatus_
private

Definition at line 116 of file Multi5x5ClusterAlgo.h.

Referenced by checkMaxima(), mainSearch(), and Multi5x5ClusterAlgo().

std::vector<std::pair<DetId,int> > Multi5x5ClusterAlgo::whichClusCrysBelongsTo_
private

Definition at line 101 of file Multi5x5ClusterAlgo.h.

Referenced by mainSearch(), and makeCluster().