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  size_ = cw.size();
10  if (size_ == 0)
11  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  const CaloGeometryHelper::NeiVect& neighbours = myCalorimeter_->getNeighbours(cw[ic].getDetId());
18  myNeighbours_[ic].reserve(8);
19  for (unsigned in = 0; in < 8; ++in) {
20  // Check that the crystal is in the grid
21 
22  Crystal::crystalEqual myCrystal(neighbours[in]);
23  std::vector<Crystal>::const_iterator itcheck;
24  itcheck = find_if(cw.begin(), cw.end(), myCrystal);
25  // The neighbour might not be in the grid
26  if (itcheck == cw.end()) {
27  // std::cout << " Ouh la " << std::endl;
28  // for(unsigned ic=0;ic<size_;++ic)
29  // {
30  // std::cout << cw[ic].getDetId().rawId()<< " " ;
31  // }
32  // std::cout << std::endl ;
33  // std::cout << " We are looking for " << neighbours[in].rawId() << std::endl;
34  // edm::LogWarning("CrystalWindowMap") << " Inconsistency in the CellWindow " << std::endl;
35  } else {
36  myNeighbours_[ic].push_back(itcheck - cw.begin());
37  // std::cout << " index " << itcheck-cw.begin() << std::endl;
38  }
39  }
40  }
41 }
42 
43 bool CrystalWindowMap::getCrystalWindow(unsigned iq, std::vector<unsigned>& cw) const {
44  if (iq < size_) // iq >= 0, since iq is unsigned
45  {
46  cw = myNeighbours_[iq];
47  return true;
48  } else
49  return false;
50 }
51 
52 bool CrystalWindowMap::getCrystalWindow(unsigned iq, const std::vector<unsigned>* cw) const {
53  if (iq < size_) // iq >= 0, since iq is unsigned
54  {
55  cw = &myNeighbours_[iq];
56  return true;
57  } else
58  return false;
59  // std::map<CrystalID,CrystalWindow>::const_iterator itcheck=myMap.find(cell);
60 }
61 
62 const std::vector<unsigned>& CrystalWindowMap::getCrystalWindow(unsigned iq, bool& status) const {
63  return myNeighbours_[iq];
64 }
std::array< DetId, 8 > NeiVect
std::vector< std::vector< unsigned > > myNeighbours_
bool getCrystalWindow(unsigned, std::vector< unsigned > &) const
get the ordered list of the crystals around the crystal given as a first argument ...
CrystalWindowMap(const CaloGeometryHelper *, const std::vector< Crystal > &cw)
Constructor from vector of Crystal.
const NeiVect & getNeighbours(const DetId &det) const
const CaloGeometryHelper * myCalorimeter_