CMS 3D CMS Logo

CrystalWindowMap.cc
Go to the documentation of this file.
1 //FAMOS headers
4 
5 #include <algorithm>
6 
7 CrystalWindowMap::CrystalWindowMap(const CaloGeometryHelper *calo,const std::vector<Crystal> & cw):
8  myCalorimeter_(calo),originalVector_(cw)
9 {
10  size_=cw.size();
11  if(size_==0) return;
12 
13  // Loop over the crystals in the grid and stores the index number of the 8 neighbours
14  myNeighbours_.resize(size_);
15 
16  for(unsigned ic=0; ic<size_; ++ic)
17  {
18  const CaloGeometryHelper::NeiVect& neighbours=myCalorimeter_->getNeighbours(cw[ic].getDetId());
19  myNeighbours_[ic].reserve(8);
20  for(unsigned in=0; in<8;++in)
21  {
22  // Check that the crystal is in the grid
23 
24  Crystal::crystalEqual myCrystal(neighbours[in]);
25  std::vector<Crystal>::const_iterator itcheck;
26  itcheck=find_if(cw.begin(),cw.end(),myCrystal);
27  // The neighbour might not be in the grid
28  if(itcheck==cw.end())
29  {
30 // std::cout << " Ouh la " << std::endl;
31 // for(unsigned ic=0;ic<size_;++ic)
32 // {
33 // std::cout << cw[ic].getDetId().rawId()<< " " ;
34 // }
35 // std::cout << std::endl ;
36 // std::cout << " We are looking for " << neighbours[in].rawId() << std::endl;
37 // edm::LogWarning("CrystalWindowMap") << " Inconsistency in the CellWindow " << std::endl;
38  }
39  else
40  {
41  myNeighbours_[ic].push_back(itcheck-cw.begin());
42  // std::cout << " index " << itcheck-cw.begin() << std::endl;
43  }
44  }
45  }
46 }
47 
48 bool
49 CrystalWindowMap::getCrystalWindow(unsigned iq,std::vector<unsigned>& cw ) const
50 {
51  if(iq<size_) // iq >= 0, since iq is unsigned
52  {
53  cw=myNeighbours_[iq];
54  return true;
55  }
56  else
57  return false;
58 }
59 
60 bool
61 CrystalWindowMap::getCrystalWindow(unsigned iq,const std::vector<unsigned>* cw) const
62 {
63 
64  if(iq<size_) // iq >= 0, since iq is unsigned
65  {
66  cw=&myNeighbours_[iq];
67  return true;
68  }
69  else
70  return false;
71  // std::map<CrystalID,CrystalWindow>::const_iterator itcheck=myMap.find(cell);
72 }
73 
74 const std::vector<unsigned>&
75 CrystalWindowMap::getCrystalWindow(unsigned iq, bool& status) const
76 {
77  return myNeighbours_[iq];
78 }
79 
bool getCrystalWindow(unsigned, std::vector< unsigned > &) const
get the ordered list of the crystals around the crystal given as a first argument ...
std::vector< std::vector< unsigned > > myNeighbours_
std::array< DetId, 8 > NeiVect
CrystalWindowMap(const CaloGeometryHelper *, const std::vector< Crystal > &cw)
Constructor from vector of Crystal.
const NeiVect & getNeighbours(const DetId &det) const
const CaloGeometryHelper * myCalorimeter_