CMS 3D CMS Logo

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

#include <PFECALHashNavigator.h>

Inheritance diagram for PFECALHashNavigator:
PFRecHitNavigatorBase

Public Member Functions

void associateNeighbours (reco::PFRecHit &rh, std::auto_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refprod)
 
void beginEvent (const edm::EventSetup &iSetup)
 
 PFECALHashNavigator ()
 
 PFECALHashNavigator (const edm::ParameterSet &iConfig)
 
- Public Member Functions inherited from PFRecHitNavigatorBase
 PFRecHitNavigatorBase ()
 
 PFRecHitNavigatorBase (const edm::ParameterSet &iConfig)
 
virtual ~PFRecHitNavigatorBase ()
 

Protected Member Functions

void ecalNeighbArray (const EcalBarrelGeometry &barrelGeom, const CaloSubdetectorTopology &barrelTopo, const EcalEndcapGeometry &endcapGeom, const CaloSubdetectorTopology &endcapTopo)
 
DetId move (DetId cell, const CaloDirection &dir) const
 
bool stdmove (DetId &cell, const CaloDirection &dir, const CaloSubdetectorTopology &barrelTopo, const CaloSubdetectorTopology &endcapTopo, const EcalBarrelGeometry &barrelGeom, const EcalEndcapGeometry &endcapGeom) const
 
bool stdsimplemove (DetId &cell, const CaloDirection &dir, const CaloSubdetectorTopology &barrelTopo, const CaloSubdetectorTopology &endcapTopo, const EcalBarrelGeometry &barrelGeom, const EcalEndcapGeometry &endcapGeom) const
 
- Protected Member Functions inherited from PFRecHitNavigatorBase
void associateNeighbour (const DetId &id, reco::PFRecHit &hit, std::auto_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refProd, short eta, short phi, short depth)
 

Protected Attributes

const EcalBarrelGeometrybarrelGeometry_
 
EcalBarrelTopologybarrelTopology_
 
bool crossBarrelEndcapBorder_
 if true, navigation will cross the barrel-endcap border More...
 
const EcalEndcapGeometryendcapGeometry_
 
EcalEndcapTopologyendcapTopology_
 
bool neighbourmapcalculated_
 set to true in ecalNeighbArray More...
 
std::vector< std::vector< DetId > > neighboursEB_
 for each ecal barrel rechit, keep track of the neighbours More...
 
std::vector< std::vector< DetId > > neighboursEE_
 for each ecal endcap rechit, keep track of the neighbours More...
 

Detailed Description

Definition at line 28 of file PFECALHashNavigator.h.

Constructor & Destructor Documentation

PFECALHashNavigator::PFECALHashNavigator ( )
inline

Definition at line 33 of file PFECALHashNavigator.h.

33  {
34 
35  }
PFECALHashNavigator::PFECALHashNavigator ( const edm::ParameterSet iConfig)
inline

Definition at line 39 of file PFECALHashNavigator.h.

References crossBarrelEndcapBorder_, edm::ParameterSet::getParameter(), and neighbourmapcalculated_.

39  :
40  PFRecHitNavigatorBase(iConfig){
41 
43  iConfig.getParameter<bool>("crossBarrelEndcapBorder");
44 
46 
47  }
T getParameter(std::string const &) const
bool crossBarrelEndcapBorder_
if true, navigation will cross the barrel-endcap border
bool neighbourmapcalculated_
set to true in ecalNeighbArray

Member Function Documentation

void PFECALHashNavigator::associateNeighbours ( reco::PFRecHit rh,
std::auto_ptr< reco::PFRecHitCollection > &  hits,
edm::RefProd< reco::PFRecHitCollection > &  refprod 
)
inlinevirtual

Implements PFRecHitNavigatorBase.

Definition at line 69 of file PFECALHashNavigator.h.

References PFRecHitNavigatorBase::associateNeighbour(), reco::PFRecHit::detId(), EAST, east, move(), NORTH, north, NORTHEAST, NORTHWEST, SOUTH, south, SOUTHEAST, SOUTHWEST, WEST, and west.

69  {
70 
71 
72 
73  DetId center( rh.detId() );
74 
75 
76  DetId north = move( center, NORTH );
77  DetId northeast = move( center, NORTHEAST );
78  DetId northwest = move( center, NORTHWEST );
79  DetId south = move( center, SOUTH );
80  DetId southeast = move( center, SOUTHEAST );
81  DetId southwest = move( center, SOUTHWEST );
82  DetId east = move( center, EAST );
83  DetId west = move( center, WEST );
84 
85 
86  associateNeighbour(north,rh,hits,refprod,0,1,0);
87  associateNeighbour(northeast,rh,hits,refprod,1,1,0);
88  associateNeighbour(south,rh,hits,refprod,0,-1,0);
89  associateNeighbour(southwest,rh,hits,refprod,-1,-1,0);
90  associateNeighbour(east,rh,hits,refprod,1,0,0);
91  associateNeighbour(southeast,rh,hits,refprod,1,-1,0);
92  associateNeighbour(west,rh,hits,refprod,-1,0,0);
93  associateNeighbour(northwest,rh,hits,refprod,-1,1,0);
94 
95  }
unsigned detId() const
rechit detId
Definition: PFRecHit.h:103
void associateNeighbour(const DetId &id, reco::PFRecHit &hit, std::auto_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refProd, short eta, short phi, short depth)
DetId move(DetId cell, const CaloDirection &dir) const
Definition: DetId.h:18
void PFECALHashNavigator::beginEvent ( const edm::EventSetup iSetup)
inlinevirtual

Implements PFRecHitNavigatorBase.

Definition at line 49 of file PFECALHashNavigator.h.

References barrelGeometry_, barrelTopology_, DetId::Ecal, EcalBarrel, EcalEndcap, ecalNeighbArray(), endcapGeometry_, endcapTopology_, and edm::EventSetup::get().

49  {
51  iSetup.get<CaloGeometryRecord>().get(geoHandle);
52 
53  const CaloSubdetectorGeometry *ebTmp =
54  geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
55  const CaloSubdetectorGeometry *eeTmp =
56  geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
57 
58  barrelGeometry_ = dynamic_cast< const EcalBarrelGeometry* > (ebTmp);
59  endcapGeometry_ = dynamic_cast < const EcalEndcapGeometry* > (eeTmp);
60 
61  // get the ecalBarrel topology
62  barrelTopology_ = new EcalBarrelTopology(geoHandle);
63  endcapTopology_ = new EcalEndcapTopology(geoHandle);
64 
66 
67  }
void ecalNeighbArray(const EcalBarrelGeometry &barrelGeom, const CaloSubdetectorTopology &barrelTopo, const EcalEndcapGeometry &endcapGeom, const CaloSubdetectorTopology &endcapTopo)
EcalBarrelTopology * barrelTopology_
const EcalEndcapGeometry * endcapGeometry_
const EcalBarrelGeometry * barrelGeometry_
const T & get() const
Definition: EventSetup.h:55
EcalEndcapTopology * endcapTopology_
void PFECALHashNavigator::ecalNeighbArray ( const EcalBarrelGeometry barrelGeom,
const CaloSubdetectorTopology barrelTopo,
const EcalEndcapGeometry endcapGeom,
const CaloSubdetectorTopology endcapTopo 
)
inlineprotected

Definition at line 107 of file PFECALHashNavigator.h.

References DetId::Ecal, EcalBarrel, EcalEndcap, CaloSubdetectorGeometry::getValidDetIds(), CaloSubdetectorTopology::getWindow(), EBDetId::hashedIndex(), EEDetId::hashedIndex(), recoMuon::in, LogDebug, neighbourmapcalculated_, neighboursEB_, neighboursEE_, orderedDir, findQualityFiles::size, ntuplemaker::status, and stdmove().

Referenced by beginEvent().

110  {
111 
112 
113 
114  const unsigned nbarrel = 62000;
115  // Barrel first. The hashed index runs from 0 to 61199
116  neighboursEB_.resize(nbarrel);
117 
118  //std::cout << " Building the array of neighbours (barrel) " ;
119 
120  const std::vector<DetId>& vec(barrelGeom.getValidDetIds(DetId::Ecal,
121  EcalBarrel));
122  unsigned size=vec.size();
123  for(unsigned ic=0; ic<size; ++ic)
124  {
125  // We get the 9 cells in a square.
126  std::vector<DetId> neighbours(barrelTopo.getWindow(vec[ic],3,3));
127  // std::cout << " Cell " << EBDetId(vec[ic]) << std::endl;
128  unsigned nneighbours=neighbours.size();
129 
130  unsigned hashedindex=EBDetId(vec[ic]).hashedIndex();
131  if(hashedindex>=nbarrel)
132  {
133  LogDebug("CaloGeometryTools") << " Array overflow " << std::endl;
134  }
135 
136 
137  // If there are 9 cells, it is easy, and this order is know:
138  // 6 7 8
139  // 3 4 5
140  // 0 1 2 (0 = SOUTHWEST)
141 
142  if(nneighbours==9)
143  {
144  neighboursEB_[hashedindex].reserve(8);
145  for(unsigned in=0;in<nneighbours;++in)
146  {
147  // remove the centre
148  if(neighbours[in]!=vec[ic])
149  {
150  neighboursEB_[hashedindex].push_back(neighbours[in]);
151  // std::cout << " Neighbour " << in << " " << EBDetId(neighbours[in]) << std::endl;
152  }
153  }
154  }
155  else
156  {
157  DetId central(vec[ic]);
158  neighboursEB_[hashedindex].resize(8,DetId(0));
159  for(unsigned idir=0;idir<8;++idir)
160  {
161  DetId testid=central;
162  bool status=stdmove(testid,orderedDir[idir],
163  barrelTopo, endcapTopo,
164  barrelGeom, endcapGeom);
165  if(status) neighboursEB_[hashedindex][idir]=testid;
166  }
167 
168  }
169  }
170 
171  // Moved to the endcap
172 
173  // std::cout << " done " << size << std::endl;
174  // std::cout << " Building the array of neighbours (endcap) " ;
175 
176  // vec.clear();
177  const std::vector<DetId>& vecee=endcapGeom.getValidDetIds(DetId::Ecal,EcalEndcap);
178  size=vecee.size();
179  // There are some holes in the hashedIndex for the EE. Hence the array is bigger than the number
180  // of crystals
181  const unsigned nendcap=19960;
182 
183  neighboursEE_.resize(nendcap);
184  for(unsigned ic=0; ic<size; ++ic)
185  {
186  // We get the 9 cells in a square.
187  std::vector<DetId> neighbours(endcapTopo.getWindow(vecee[ic],3,3));
188  unsigned nneighbours=neighbours.size();
189  // remove the centre
190  unsigned hashedindex=EEDetId(vecee[ic]).hashedIndex();
191 
192  if(hashedindex>=nendcap)
193  {
194  LogDebug("CaloGeometryTools") << " Array overflow " << std::endl;
195  }
196 
197  if(nneighbours==9)
198  {
199  neighboursEE_[hashedindex].reserve(8);
200  for(unsigned in=0;in<nneighbours;++in)
201  {
202  // remove the centre
203  if(neighbours[in]!=vecee[ic])
204  {
205  neighboursEE_[hashedindex].push_back(neighbours[in]);
206  }
207  }
208  }
209  else
210  {
211  DetId central(vecee[ic]);
212  neighboursEE_[hashedindex].resize(8,DetId(0));
213  for(unsigned idir=0;idir<8;++idir)
214  {
215  DetId testid=central;
216  bool status=stdmove(testid,orderedDir[idir],
217  barrelTopo, endcapTopo,
218  barrelGeom, endcapGeom);
219 
220  if(status) neighboursEE_[hashedindex][idir]=testid;
221  }
222 
223  }
224  }
225  // std::cout << " done " << size <<std::endl;
227  }
#define LogDebug(id)
std::vector< std::vector< DetId > > neighboursEB_
for each ecal barrel rechit, keep track of the neighbours
int hashedIndex() const
get a compact index for arrays
Definition: EBDetId.h:86
bool stdmove(DetId &cell, const CaloDirection &dir, const CaloSubdetectorTopology &barrelTopo, const CaloSubdetectorTopology &endcapTopo, const EcalBarrelGeometry &barrelGeom, const EcalEndcapGeometry &endcapGeom) const
std::vector< std::vector< DetId > > neighboursEE_
for each ecal endcap rechit, keep track of the neighbours
virtual const std::vector< DetId > & getValidDetIds(DetId::Detector det=DetId::Detector(0), int subdet=0) const
Get a list of valid detector ids (for the given subdetector)
static const CaloDirection orderedDir[8]
Definition: DetId.h:18
int hashedIndex() const
Definition: EEDetId.h:182
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
tuple status
Definition: ntuplemaker.py:245
bool neighbourmapcalculated_
set to true in ecalNeighbArray
tuple size
Write out results.
DetId PFECALHashNavigator::move ( DetId  cell,
const CaloDirection dir 
) const
inlineprotected

Definition at line 401 of file PFECALHashNavigator.h.

References dir, EcalBarrel, EBDetId::hashedIndex(), EEDetId::hashedIndex(), neighbourmapcalculated_, neighboursEB_, neighboursEE_, NONE, query::result, and DetId::subdetId().

Referenced by associateNeighbours(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

403 {
404  DetId originalcell = cell;
405  if(dir==NONE || cell==DetId(0)) return false;
406 
407  // Conversion CaloDirection and index in the table
408  // CaloDirection :NONE,SOUTH,SOUTHEAST,SOUTHWEST,EAST,WEST, NORTHEAST,NORTHWEST,NORTH
409  // Table : SOUTHWEST,SOUTH,SOUTHEAST,WEST,EAST,NORTHWEST,NORTH, NORTHEAST
410  static const int calodirections[9]={-1,1,2,0,4,3,7,5,6};
411 
412  assert(neighbourmapcalculated_);
413 
414  DetId result = (originalcell.subdetId()==EcalBarrel) ?
415  neighboursEB_[EBDetId(originalcell).hashedIndex()][calodirections[dir]]:
416  neighboursEE_[EEDetId(originalcell).hashedIndex()][calodirections[dir]];
417  return result;
418 }
std::vector< std::vector< DetId > > neighboursEB_
for each ecal barrel rechit, keep track of the neighbours
int hashedIndex() const
get a compact index for arrays
Definition: EBDetId.h:86
std::vector< std::vector< DetId > > neighboursEE_
for each ecal endcap rechit, keep track of the neighbours
tuple result
Definition: query.py:137
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
Definition: DetId.h:18
int hashedIndex() const
Definition: EEDetId.h:182
dbl *** dir
Definition: mlp_gen.cc:35
bool neighbourmapcalculated_
set to true in ecalNeighbArray
bool PFECALHashNavigator::stdmove ( DetId cell,
const CaloDirection dir,
const CaloSubdetectorTopology barrelTopo,
const CaloSubdetectorTopology endcapTopo,
const EcalBarrelGeometry barrelGeom,
const EcalEndcapGeometry endcapGeom 
) const
inlineprotected

Definition at line 308 of file PFECALHashNavigator.h.

References EAST, NORTH, NORTHEAST, NORTHWEST, query::result, SOUTH, SOUTHEAST, SOUTHWEST, stdsimplemove(), and WEST.

Referenced by ecalNeighbArray().

315  {
316 
317 
318  bool result;
319 
320  if(dir==NORTH) {
321  result = stdsimplemove(cell,NORTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
322  return result;
323  }
324  else if(dir==SOUTH) {
325  result = stdsimplemove(cell,SOUTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
326  return result;
327  }
328  else if(dir==EAST) {
329  result = stdsimplemove(cell,EAST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
330  return result;
331  }
332  else if(dir==WEST) {
333  result = stdsimplemove(cell,WEST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
334  return result;
335  }
336 
337 
338  // One has to try both paths
339  else if(dir==NORTHEAST)
340  {
341  result = stdsimplemove(cell,NORTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
342  if(result)
343  return stdsimplemove(cell,EAST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
344  else
345  {
346  result = stdsimplemove(cell,EAST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
347  if(result)
348  return stdsimplemove(cell,NORTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
349  else
350  return false;
351  }
352  }
353  else if(dir==NORTHWEST)
354  {
355  result = stdsimplemove(cell,NORTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
356  if(result)
357  return stdsimplemove(cell,WEST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
358  else
359  {
360  result = stdsimplemove(cell,WEST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
361  if(result)
362  return stdsimplemove(cell,NORTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
363  else
364  return false;
365  }
366  }
367  else if(dir == SOUTHEAST)
368  {
369  result = stdsimplemove(cell,SOUTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
370  if(result)
371  return stdsimplemove(cell,EAST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
372  else
373  {
374  result = stdsimplemove(cell,EAST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
375  if(result)
376  return stdsimplemove(cell,SOUTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
377  else
378  return false;
379  }
380  }
381  else if(dir == SOUTHWEST)
382  {
383  result = stdsimplemove(cell,SOUTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
384  if(result)
385  return stdsimplemove(cell,WEST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
386  else
387  {
388  result = stdsimplemove(cell,SOUTH, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
389  if(result)
390  return stdsimplemove(cell,WEST, barrelTopo, endcapTopo, barrelGeom, endcapGeom );
391  else
392  return false;
393  }
394  }
395  cell = DetId(0);
396  return false;
397 }
tuple result
Definition: query.py:137
Definition: DetId.h:18
bool stdsimplemove(DetId &cell, const CaloDirection &dir, const CaloSubdetectorTopology &barrelTopo, const CaloSubdetectorTopology &endcapTopo, const EcalBarrelGeometry &barrelGeom, const EcalEndcapGeometry &endcapGeom) const
dbl *** dir
Definition: mlp_gen.cc:35
bool PFECALHashNavigator::stdsimplemove ( DetId cell,
const CaloDirection dir,
const CaloSubdetectorTopology barrelTopo,
const CaloSubdetectorTopology endcapTopo,
const EcalBarrelGeometry barrelGeom,
const EcalEndcapGeometry endcapGeom 
) const
inlineprotected

Definition at line 231 of file PFECALHashNavigator.h.

References crossBarrelEndcapBorder_, EcalBarrel, EcalEndcap, EcalEndcapGeometry::getClosestBarrelCells(), EcalBarrelGeometry::getClosestEndcapCells(), CaloSubdetectorTopology::getNeighbours(), EBDetId::ietaAbs(), EEDetId::iPhiOuterRing(), EBDetId::MAX_IETA, and DetId::subdetId().

Referenced by stdmove().

237  {
238 
239  std::vector<DetId> neighbours;
240 
241  // BARREL CASE
242  if(cell.subdetId()==EcalBarrel) {
243  EBDetId ebDetId = cell;
244 
245  neighbours = barrelTopo.getNeighbours(ebDetId,dir);
246 
247  // first try to move according to the standard navigation
248  if(neighbours.size()>0 && !neighbours[0].null()) {
249  cell = neighbours[0];
250  return true;
251  }
252 
253  // failed.
254 
256  // are we on the outer ring ?
257  const int ietaAbs ( ebDetId.ietaAbs() ) ; // abs value of ieta
258  if( EBDetId::MAX_IETA == ietaAbs ) {
259  // get ee nbrs for for end of barrel crystals
260 
261  // yes we are
263  ol( * barrelGeom.getClosestEndcapCells( ebDetId ) ) ;
264 
265  // take closest neighbour on the other side, that is in the barrel.
266  cell = *(ol.begin() );
267  return true;
268  }
269  }
270  }
271 
272  // ENDCAP CASE
273  else if(cell.subdetId()==EcalEndcap) {
274 
275  EEDetId eeDetId = cell;
276 
277  neighbours= endcapTopo.getNeighbours(eeDetId,dir);
278 
279  if(neighbours.size()>0 && !neighbours[0].null()) {
280  cell = neighbours[0];
281  return true;
282  }
283 
284  // failed.
285 
287  // are we on the outer ring ?
288  const int iphi ( eeDetId.iPhiOuterRing() ) ;
289  if( iphi!= 0) {
290  // yes we are
292  ol( * endcapGeom.getClosestBarrelCells( eeDetId ) ) ;
293 
294  // take closest neighbour on the other side, that is in the barrel.
295  cell = *(ol.begin() );
296  return true;
297  }
298  }
299  }
300 
301  // everything failed
302  cell = DetId(0);
303  return false;
304 }
const OrderedListOfEEDetId * getClosestEndcapCells(EBDetId id) const
virtual std::vector< DetId > getNeighbours(const DetId &id, const CaloDirection &dir) const
bool crossBarrelEndcapBorder_
if true, navigation will cross the barrel-endcap border
int iPhiOuterRing() const
Definition: EEDetId.cc:388
const OrderedListOfEBDetId * getClosestBarrelCells(EEDetId id) const
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
Definition: DetId.h:18
static const int MAX_IETA
Definition: EBDetId.h:143
dbl *** dir
Definition: mlp_gen.cc:35
int ietaAbs() const
get the absolute value of the crystal ieta
Definition: EBDetId.h:49

Member Data Documentation

const EcalBarrelGeometry* PFECALHashNavigator::barrelGeometry_
protected

Definition at line 425 of file PFECALHashNavigator.h.

Referenced by beginEvent().

EcalBarrelTopology* PFECALHashNavigator::barrelTopology_
protected

Definition at line 422 of file PFECALHashNavigator.h.

Referenced by beginEvent().

bool PFECALHashNavigator::crossBarrelEndcapBorder_
protected

if true, navigation will cross the barrel-endcap border

Definition at line 437 of file PFECALHashNavigator.h.

Referenced by PFECALHashNavigator(), and stdsimplemove().

const EcalEndcapGeometry* PFECALHashNavigator::endcapGeometry_
protected

Definition at line 424 of file PFECALHashNavigator.h.

Referenced by beginEvent().

EcalEndcapTopology* PFECALHashNavigator::endcapTopology_
protected

Definition at line 421 of file PFECALHashNavigator.h.

Referenced by beginEvent().

bool PFECALHashNavigator::neighbourmapcalculated_
protected

set to true in ecalNeighbArray

Definition at line 434 of file PFECALHashNavigator.h.

Referenced by ecalNeighbArray(), move(), and PFECALHashNavigator().

std::vector<std::vector<DetId> > PFECALHashNavigator::neighboursEB_
protected

for each ecal barrel rechit, keep track of the neighbours

Definition at line 428 of file PFECALHashNavigator.h.

Referenced by ecalNeighbArray(), and move().

std::vector<std::vector<DetId> > PFECALHashNavigator::neighboursEE_
protected

for each ecal endcap rechit, keep track of the neighbours

Definition at line 431 of file PFECALHashNavigator.h.

Referenced by ecalNeighbArray(), and move().