CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Protected Types | Protected Member Functions
CaloSubdetectorTopology Class Referenceabstract

#include <CaloSubdetectorTopology.h>

Inheritance diagram for CaloSubdetectorTopology:
CaloTowerTopology CastorTopology EcalBarrelHardcodedTopology EcalBarrelTopology EcalEndcapHardcodedTopology EcalEndcapTopology EcalPreshowerTopology HcalTopology ZdcTopology

Classes

struct  CellInfo
 

Public Member Functions

 CaloSubdetectorTopology ()
 standard constructor More...
 
virtual DetId denseId2detId (unsigned int) const
 return a linear packed id More...
 
virtual bool denseIdConsistent (int topoVer) const
 return whether this topology is consistent with the numbering in the given topology More...
 
virtual unsigned int detId2denseId (const DetId &) const
 return a linear packed id More...
 
virtual std::vector< DetIddown (const DetId &id) const =0
 
virtual std::vector< DetIdeast (const DetId &id) const =0
 
virtual std::vector< DetIdgetAllNeighbours (const DetId &id) const
 
virtual std::vector< DetIdgetNeighbours (const DetId &id, const CaloDirection &dir) const
 
virtual std::vector< DetIdgetWindow (const DetId &id, const int &northSouthSize, const int &eastWestSize) const
 
virtual DetId goDown (const DetId &id) const
 
virtual DetId goEast (const DetId &id) const
 
virtual DetId goNorth (const DetId &id) const
 
virtual DetId goSouth (const DetId &id) const
 
virtual DetId goUp (const DetId &id) const
 
virtual DetId goWest (const DetId &id) const
 
virtual unsigned int ncells () const
 return a count of valid cells (for dense indexing use) More...
 
virtual std::vector< DetIdnorth (const DetId &id) const =0
 
virtual std::vector< DetIdsouth (const DetId &id) const =0
 
virtual int topoVersion () const
 return a version which identifies the given topology More...
 
virtual std::vector< DetIdup (const DetId &id) const =0
 
virtual bool valid (const DetId &) const
 is this detid present in the Topology? More...
 
virtual std::vector< DetIdwest (const DetId &id) const =0
 
virtual ~CaloSubdetectorTopology ()
 virtual destructor More...
 

Protected Types

typedef std::pair< int, int > Coordinate
 

Protected Member Functions

Coordinate getNeighbourIndex (const Coordinate &coord, const CaloDirection &dir) const
 

Detailed Description

Revision:
1.7
Author
P.Meridiani INFN Roma1
J. Mans - Minnesota

Definition at line 20 of file CaloSubdetectorTopology.h.

Member Typedef Documentation

typedef std::pair<int,int> CaloSubdetectorTopology::Coordinate
protected

Definition at line 117 of file CaloSubdetectorTopology.h.

Constructor & Destructor Documentation

CaloSubdetectorTopology::CaloSubdetectorTopology ( )
inline

standard constructor

Definition at line 23 of file CaloSubdetectorTopology.h.

23 {};
virtual CaloSubdetectorTopology::~CaloSubdetectorTopology ( )
inlinevirtual

virtual destructor

Definition at line 25 of file CaloSubdetectorTopology.h.

25 { }

Member Function Documentation

virtual DetId CaloSubdetectorTopology::denseId2detId ( unsigned int  ) const
inlinevirtual

return a linear packed id

Reimplemented in HcalTopology.

Definition at line 31 of file CaloSubdetectorTopology.h.

31 { return DetId(0); }
Definition: DetId.h:18
virtual bool CaloSubdetectorTopology::denseIdConsistent ( int  topoVer) const
inlinevirtual

return whether this topology is consistent with the numbering in the given topology

Definition at line 37 of file CaloSubdetectorTopology.h.

References topoVersion().

Referenced by HcalCondObjectContainerBase::setTopo().

37 { return topoVer==topoVersion(); }
virtual int topoVersion() const
return a version which identifies the given topology
virtual unsigned int CaloSubdetectorTopology::detId2denseId ( const DetId ) const
inlinevirtual

return a linear packed id

Reimplemented in HcalTopology.

Definition at line 29 of file CaloSubdetectorTopology.h.

29 { return 0; }
virtual std::vector<DetId> CaloSubdetectorTopology::down ( const DetId id) const
pure virtual
virtual std::vector<DetId> CaloSubdetectorTopology::east ( const DetId id) const
pure virtual
virtual std::vector<DetId> CaloSubdetectorTopology::getAllNeighbours ( const DetId id) const
inlinevirtual

Get all the neighbors of the given cell

Definition at line 111 of file CaloSubdetectorTopology.h.

References getWindow().

Referenced by CaloTopology::getAllNeighbours().

112  {
113  return getWindow(id,3,3);
114  }
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
Coordinate CaloSubdetectorTopology::getNeighbourIndex ( const Coordinate coord,
const CaloDirection dir 
) const
inlineprotected

Definition at line 137 of file CaloSubdetectorTopology.h.

References EAST, edm::hlt::Exception, NORTH, SOUTH, and WEST.

Referenced by getWindow().

138  {
139  switch (dir)
140  {
141  case NORTH: return Coordinate(coord.first,coord.second + 1);
142  case SOUTH: return Coordinate(coord.first,coord.second - 1);
143 
144  case EAST: return Coordinate(coord.first + 1,coord.second);
145  case WEST: return Coordinate(coord.first - 1,coord.second);
146 
147  default:
148  throw cms::Exception("getWindowError") << "Unsopported direction";
149  }
150  }
std::pair< int, int > Coordinate
dbl *** dir
Definition: mlp_gen.cc:35
virtual std::vector<DetId> CaloSubdetectorTopology::getNeighbours ( const DetId id,
const CaloDirection dir 
) const
inlinevirtual

Get the neighbors of the given cell given direction

Definition at line 81 of file CaloSubdetectorTopology.h.

References EAST, east(), edm::hlt::Exception, NONE, NORTH, north(), SOUTH, south(), WEST, and west().

Referenced by CaloTopology::getNeighbours(), getWindow(), spr::simpleMove(), CaloGeometryHelper::simplemove(), and PFECALHashNavigator::stdsimplemove().

82  {
83  std::vector<DetId> aNullVector;
84  switch(dir)
85  {
86  case NONE:
87  return aNullVector;
88  break;
89  case SOUTH:
90  return south(id);
91  break;
92  case NORTH:
93  return north(id);
94  break;
95  case EAST:
96  return east(id);
97  break;
98  case WEST:
99  return west(id);
100  break;
101  default:
102  throw cms::Exception("getNeighboursError") << "Unsopported direction";
103  }
104  return aNullVector;
105  }
virtual std::vector< DetId > west(const DetId &id) const =0
virtual std::vector< DetId > north(const DetId &id) const =0
virtual std::vector< DetId > south(const DetId &id) const =0
dbl *** dir
Definition: mlp_gen.cc:35
virtual std::vector< DetId > east(const DetId &id) const =0
std::vector< DetId > CaloSubdetectorTopology::getWindow ( const DetId id,
const int &  northSouthSize,
const int &  eastWestSize 
) const
virtual

Get the neighbors of the given cell in a window of given size

Definition at line 4 of file CaloSubdetectorTopology.cc.

References EAST, edm::hlt::Exception, getNeighbourIndex(), getNeighbours(), i, NORTH, SOUTH, and WEST.

Referenced by HLTAlCaMonPi0::analyze(), DQMSourcePi0::analyze(), HLTAlCa::analyze(), CaloGeometryHelper::buildNeighbourArray(), HLTEcalResonanceFilter::calcShowerShape(), PFECALHashNavigator::ecalNeighbArray(), HLTEcalResonanceFilter::filter(), getAllNeighbours(), BetaCalculatorECAL::getDetailedTrackLengthInXtals(), CaloTopology::getWindow(), EgammaHLTNxNClusterProducer::makeNxNClusters(), EcalDeadChannelRecoveryNN< EEDetId >::makeNxNMatrice_RelDC(), EcalDeadChannelRecoveryNN< EBDetId >::makeNxNMatrice_RelDC(), PiZeroAnalyzer::makePizero(), InterestingEcalDetIdProducer::produce(), InterestingDetIdCollectionProducer::produce(), InterestingDetIdFromSuperClusterProducer::produce(), ReducedEGProducer::produce(), InterestingTrackEcalDetIdProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATElectronProducer::produce(), HighPtTrackEcalDetIdProducer::produce(), and SingleEleCalibSelector::select().

5 {
6 
7  std::vector<DetId> cellsInWindow;
8  // check pivot
9  if (id.null())
10  return cellsInWindow;
11 
12  //
13  DetId myTmpId(id);
14  std::vector<std::pair<Coordinate,DetId> > fringe;
15  fringe.push_back(std::pair<Coordinate,DetId>(Coordinate(0,0),myTmpId));
16 
17  int halfWestEast = eastWestSize/2 ;
18  int halfNorthSouth = northSouthSize/2 ;
19 
20  std::vector<CellInfo> visited_cells;
21  visited_cells.resize(northSouthSize * eastWestSize);
22 
23  while (fringe.size() > 0)
24  {
25  std::pair<Coordinate,DetId> cur = fringe.back();
26  fringe.pop_back();
27 
28  // check all four neighbours
29  const CaloDirection directions[4] = { NORTH, SOUTH, EAST, WEST };
30 
31  for (unsigned dirnum = 0; dirnum < 4; ++dirnum)
32  {
33  Coordinate neighbour = getNeighbourIndex(cur.first,directions[dirnum]);
34  //If outside the window range
35  if ( neighbour.first < -halfWestEast ||
36  neighbour.first > halfWestEast ||
37  neighbour.second < -halfNorthSouth ||
38  neighbour.second > halfNorthSouth )
39  continue;
40 
41 
42  //Found integer index in the matrix
43  unsigned int_index = neighbour.first + halfWestEast +
44  eastWestSize * (neighbour.second + halfNorthSouth );
45  assert(int_index < visited_cells.size());
46 
47  // check whether we have seen this neighbour already
48  if (visited_cells[int_index].visited)
49  // we have seen this one already
50  continue;
51 
52  // a new cell, get the DetId of the neighbour, mark it
53  // as visited and add it to the fringe
54  visited_cells[int_index].visited = true;
55  std::vector<DetId> neighbourCells = getNeighbours(cur.second,directions[dirnum]);
56 
57  if ( neighbourCells.size() == 1 )
58  visited_cells[int_index].cell = neighbourCells[0];
59  else if ( neighbourCells.size() == 0 )
60  visited_cells[int_index].cell = DetId(0);
61  else
62  throw cms::Exception("getWindowError") << "Not supported subdetector for getWindow method";
63 
64  if (!visited_cells[int_index].cell.null())
65  fringe.push_back(std::pair<Coordinate,DetId>(neighbour,visited_cells[int_index].cell));
66 
67  } // loop over all possible directions
68  } // while some cells are left on the fringe
69 
70 
71  for (unsigned int i=0; i<visited_cells.size(); i++)
72  if (!visited_cells[i].cell.null())
73  cellsInWindow.push_back(visited_cells[i].cell);
74 
75  return cellsInWindow;
76 }
int i
Definition: DBlmapReader.cc:9
virtual std::vector< DetId > getNeighbours(const DetId &id, const CaloDirection &dir) const
std::pair< int, int > Coordinate
Coordinate getNeighbourIndex(const Coordinate &coord, const CaloDirection &dir) const
Definition: DetId.h:18
CaloDirection
Codes the local directions in the cell lattice.
Definition: CaloDirection.h:9
virtual DetId CaloSubdetectorTopology::goDown ( const DetId id) const
inlinevirtual

Reimplemented in EcalPreshowerTopology.

Definition at line 74 of file CaloSubdetectorTopology.h.

References down().

74  {
75  std::vector<DetId> ids = down(id);
76  return ids.empty() ? DetId() : ids[0];
77  }
Definition: DetId.h:18
virtual std::vector< DetId > down(const DetId &id) const =0
virtual DetId CaloSubdetectorTopology::goEast ( const DetId id) const
inlinevirtual

Reimplemented in EcalBarrelTopology, EcalPreshowerTopology, EcalEndcapTopology, EcalBarrelHardcodedTopology, and EcalEndcapHardcodedTopology.

Definition at line 54 of file CaloSubdetectorTopology.h.

References east().

54  {
55  std::vector<DetId> ids = east(id);
56  return ids.empty() ? DetId() : ids[0];
57  }
Definition: DetId.h:18
virtual std::vector< DetId > east(const DetId &id) const =0
virtual DetId CaloSubdetectorTopology::goNorth ( const DetId id) const
inlinevirtual

Reimplemented in EcalBarrelTopology, EcalPreshowerTopology, EcalEndcapTopology, EcalBarrelHardcodedTopology, and EcalEndcapHardcodedTopology.

Definition at line 62 of file CaloSubdetectorTopology.h.

References north().

62  {
63  std::vector<DetId> ids = north(id);
64  return ids.empty() ? DetId() : ids[0];
65  }
virtual std::vector< DetId > north(const DetId &id) const =0
Definition: DetId.h:18
virtual DetId CaloSubdetectorTopology::goSouth ( const DetId id) const
inlinevirtual

Reimplemented in EcalBarrelTopology, EcalPreshowerTopology, EcalEndcapTopology, EcalBarrelHardcodedTopology, and EcalEndcapHardcodedTopology.

Definition at line 66 of file CaloSubdetectorTopology.h.

References south().

66  {
67  std::vector<DetId> ids = south(id);
68  return ids.empty() ? DetId() : ids[0];
69  }
Definition: DetId.h:18
virtual std::vector< DetId > south(const DetId &id) const =0
virtual DetId CaloSubdetectorTopology::goUp ( const DetId id) const
inlinevirtual

Reimplemented in EcalPreshowerTopology.

Definition at line 70 of file CaloSubdetectorTopology.h.

References up().

70  {
71  std::vector<DetId> ids = up(id);
72  return ids.empty() ? DetId() : ids[0];
73  }
Definition: DetId.h:18
virtual std::vector< DetId > up(const DetId &id) const =0
virtual DetId CaloSubdetectorTopology::goWest ( const DetId id) const
inlinevirtual

Reimplemented in EcalBarrelTopology, EcalPreshowerTopology, EcalEndcapTopology, EcalBarrelHardcodedTopology, and EcalEndcapHardcodedTopology.

Definition at line 58 of file CaloSubdetectorTopology.h.

References west().

58  {
59  std::vector<DetId> ids = west(id);
60  return ids.empty() ? DetId() : ids[0];
61  }
virtual std::vector< DetId > west(const DetId &id) const =0
Definition: DetId.h:18
virtual unsigned int CaloSubdetectorTopology::ncells ( ) const
inlinevirtual

return a count of valid cells (for dense indexing use)

Reimplemented in HcalTopology.

Definition at line 33 of file CaloSubdetectorTopology.h.

Referenced by ZdcTopology::ncells(), and CastorTopology::ncells().

33 { return 1; }
virtual std::vector<DetId> CaloSubdetectorTopology::north ( const DetId id) const
pure virtual
virtual std::vector<DetId> CaloSubdetectorTopology::south ( const DetId id) const
pure virtual
virtual int CaloSubdetectorTopology::topoVersion ( ) const
inlinevirtual

return a version which identifies the given topology

Reimplemented in HcalTopology.

Definition at line 35 of file CaloSubdetectorTopology.h.

Referenced by denseIdConsistent().

35 { return 0; }
virtual std::vector<DetId> CaloSubdetectorTopology::up ( const DetId id) const
pure virtual
virtual bool CaloSubdetectorTopology::valid ( const DetId ) const
inlinevirtual

is this detid present in the Topology?

Reimplemented in HcalTopology, and CaloTowerTopology.

Definition at line 27 of file CaloSubdetectorTopology.h.

Referenced by CaloTopology::valid().

27 { return false; };
virtual std::vector<DetId> CaloSubdetectorTopology::west ( const DetId id) const
pure virtual