ATLAS Offline Software
LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // ***************************************************************************
6 // Liquid Argon FCAL detector description package
7 // -----------------------------------------
8 //
9 //
10 // 10-Sep-2000 S.Simion Handling of the FCAL read-out identifiers
11 // Jan-2001 R.Sobie Modify for persistency
12 // Feb-2002 R.Sobie Use same FCAL geometry files as simulation
13 //****************************************************************************
14 
15 #include "LArReadoutGeometry/FCAL_ChannelMap.h"
16 #include "CxxUtils/trapping_fp.h"
17 #include "GaudiKernel/SystemOfUnits.h"
18 #include <cstdio>
19 #include <iomanip>
20 #include <iostream>
21 #include <sstream>
22 #include <utility>
23 
24 /* === Geometrical parameters === */
26 
28 {
29 
30  /* === Initialize geometrical dimensions */
31  for(int i=0; i<3; i++){
32  m_tubeDx[i] = m_tubeSpacing[i] / 2.;
33  m_tubeDy[i] = m_tubeSpacing[i] * sqrt(3.)/2.;
34  }
35 
36  // FCAL1 small cells are 2x2 tubes
37  m_tileDx[0] = 2. * m_tubeSpacing[0];
38  m_tileDy[0] = 2. * m_tubeSpacing[0] * sqrt(3.)/2.;
39 
40  // FCAL2 small cells are 2x3 tubes
41  m_tileDx[1] = 2. * m_tubeSpacing[1];
42  m_tileDy[1] = 3. * m_tubeSpacing[1] * sqrt(3.)/2.;
43 
44  // FCAL3 cells are 6x6 tubes
45  m_tileDx[2] = 6. * m_tubeSpacing[2];
46  m_tileDy[2] = 6. * m_tubeSpacing[2] * sqrt(3.)/2.;
47 
48 
49  m_invert_x = flag & 1;
50  m_invert_xy = flag & 2;
51 
52 }
53 
54 
56  create_tileMap(1);
57  create_tileMap(2);
58  create_tileMap(3);
59 }
60 
61 // *********************************************************************
62 // Read tube mapping tables
63 //
64 // Jan 23,2002 R. Sobie
65 // ********************************************************************
66 
67 
68 //original
69 void FCAL_ChannelMap::add_tube(const std::string & tileName, int mod, int /*id*/, int i, int j, double x, double y) {
70 
71  // Get three integers from the tileName:
72  std::istringstream tileStream1(std::string(tileName,1,1));
73  std::istringstream tileStream2(std::string(tileName,3,2));
74  std::istringstream tileStream3(std::string(tileName,6,3));
75  int a1=0,a2=0,a3=0;
76  if (tileStream1) tileStream1 >> a1;
77  if (tileStream2) tileStream2 >> a2;
78  if (tileStream3) tileStream3 >> a3;
79 
80  tileName_t tilename = (a3 << 16) + a2;
81 
83  // Add offsets, becaues iy and ix can be negative HMA
84 
85  i = i+200;
86  j = j+200;
87  // m_tubeMap[mod-1][(j << 16) + i] = tb;
88  unsigned int ThisId = (j<<16) + i;
89  tubemap_const_iterator p = m_tubeMap[mod-1].insert(m_tubeMap[mod-1].end(),std::make_pair(ThisId,tb));
90  m_tubeIndex[mod-1].push_back(p);
91 }
92 
93 
94 //Gabe: new to include HV and LARFCALELECRTODES ID
95 void FCAL_ChannelMap::add_tube(const std::string & tileName, int mod, int /*id*/, int i, int j, double x, double y, std::string hvFT) {
96 
97  // Get three integers from the tileName:
98  std::istringstream tileStream1(std::string(tileName,1,1));
99  std::istringstream tileStream2(std::string(tileName,3,2));
100  std::istringstream tileStream3(std::string(tileName,6,3));
101  int a1=0,a2=0,a3=0;
102  if (tileStream1) tileStream1 >> a1;
103  if (tileStream2) tileStream2 >> a2;
104  if (tileStream3) tileStream3 >> a3;
105 
106  tileName_t tilename = (a3 << 16) + a2;
107 
108  TubePosition tb(tilename, x*Gaudi::Units::cm, y*Gaudi::Units::cm, std::move(hvFT));
109  // Add offsets, becaues iy and ix can be negative HMA
110 
111  i = i+200;
112  j = j+200;
113  // m_tubeMap[mod-1][(j << 16) + i] = tb;
114  unsigned int ThisId = (j<<16) + i;
115  tubemap_const_iterator p = m_tubeMap[mod-1].insert(m_tubeMap[mod-1].end(),std::make_pair(ThisId,tb));
116  m_tubeIndex[mod-1].push_back(p);
117 }
118 
120  return m_tubeIndex[isam-1][copyNo];
121 }
122 
123 
124 // *********************************************************************
125 // Create tile mapping tables
126 //
127 // Jan 23,2002 R. Sobie
128 // ********************************************************************
129 void
131 {
133  tubemap_const_iterator first = m_tubeMap[isam-1].begin();
134  tubemap_const_iterator last = m_tubeMap[isam-1].end();
135 
136  // Loop over tubes -> find unique tiles and fill the descriptors
137  while (first != last){
138 
139  tileName_t tileName = (first->second).get_tileName();
140  tile = m_tileMap[isam-1].find(tileName);
141 
142  if (tile == m_tileMap[isam-1].end()){ // New tile found
143  float x = (first->second).x();
144  float y = (first->second).y();
145  unsigned int ntubes = 1;
146  TilePosition tp(x, y, ntubes);
147  m_tileMap[isam-1][tileName] = tp;
148  }
149  else{ // Existing tile
150  float x = (tile->second).x() + (first->second).x();
151  float y = (tile->second).y() + (first->second).y();
152  unsigned int ntubes = (tile->second).ntubes() + 1;
153  TilePosition tp(x, y, ntubes);
154  m_tileMap[isam-1][tileName] = tp;
155  }
156  ++first;
157  }
158 
159  //
160  // List the number of tubes and tiles
161  //
162  // std::cout << "FCAL::create_tilemap: FCAL # " << isam
163  // << " Number of tiles = " << m_tileMap[isam-1].size()
164  // << " Number of tubes = " << m_tubeMap[isam-1].size()
165  // << std::endl;
166 
167  // this->print_tubemap(isam);
168 
169 
170  //
171  // loop over tiles and set (x,y) to average tile positions
172  //
173  tileMap_const_iterator tilefirst = m_tileMap[isam-1].begin();
174  tileMap_const_iterator tilelast = m_tileMap[isam-1].end();
175  while (tilefirst != tilelast) {
176  // Tell clang to optimize assuming that FP exceptions can trap.
177  // Otherwise, it can vectorize the division, which can lead to
178  // spurious division-by-zero traps from unused vector lanes.
180  tileName_t tileName = tilefirst->first;
181  unsigned int ntubes = (tilefirst->second).ntubes();
182  float xtubes = (float) ntubes;
183  float x = (tilefirst->second).x() / xtubes;
184  float y = (tilefirst->second).y() / xtubes;
185  TilePosition tp(x, y, ntubes);
186  m_tileMap[isam-1][tileName] = tp;
187  ++tilefirst;
188  }
189 
190 }
191 
192 //---------- for New LArFCAL_ID ------------------------
193 
194 // *********************************************************************
195 // get Tile ID
196 //
197 // Original code: Stefan Simion, Randy Sobie
198 // -------------------------------------------------------------------
199 // This function computes the tile identifier for any given position
200 // Inputs:
201 // - isam the sampling number, from G3 data;
202 // - x the tube x position, in CLHEP::cm, from G3 data;
203 // - y the tube y position, in CLHEP::cm, from G3 data.
204 // Outputs:
205 // - pair of indices eta, phi
206 //
207 // Attention side-effect: x is changed by this function.
208 // --------------------------------------------------------------------
209 // June 2002 HMA
210 // ***********************************************************************
211 bool
212 FCAL_ChannelMap::getTileID(int isam, float x_orig, float y_orig,
213  int& eta, int& phi) const
214 {
215 
216 // /* ### MIRROR for compatibility between G3 and ASCII files ### */
217 
218  float x = x_orig;
219  float y = y_orig;
220 
221  if(m_invert_xy){
222  x = y_orig;
223  y = x_orig;
224  }
225 
226  if(m_invert_x) x = -x;
227 
228  /* === Compute the tubeID */
229  int ktx = (int) (x / m_tubeDx[isam-1]);
230  int kty = (int) (y / m_tubeDy[isam-1]);
231  if (x < 0.) ktx--;
232  if (y < 0.) kty--;
233 
234  // S.M.: in case we lookup real positions inside the Tile (not only
235  // integer grids for the tubes) half of the time we are outisde a
236  // tube bin since the integer pattern of the tubes is like in this
237  // sketch:
238  //
239  // # # # #
240  // # # # #
241  // # # # #
242  //
243  // in order to avoid this problem we have to make sure the integer
244  // indices for x and y have either both to be even or both to be odd
245  // (For Module 0 one has to be odd the other even ...). We take the
246  // y-index and check for odd/even and change the x-index in case
247  // it's different from the first tube in the current sampling ...
248  //
249  // S.M. update: in case we are in a hole of the integer grid the
250  // relative x and y w.r.t to the original tube are used to assign a
251  // tube according to the hexagonal pattern.
252 
253  tubemap_const_iterator it = m_tubeMap[isam-1].begin();
254  unsigned int firstId = it->first;
255 
256  // take offset from actual map
257  int ix = ktx+((int)((firstId&0xffff)-it->second.x()/m_tubeDx[isam-1]))+1;
258  int iy = kty+((int)((firstId>>16)-it->second.y()/m_tubeDy[isam-1]))+1;
259 
260  int isOddEven = (((firstId>>16)%2)+(firstId%2))%2;
261  bool movex = false;
262 
263  if ( (iy%2) != ((ix+isOddEven)%2) ) {
264  double yc = y/m_tubeDy[isam-1] - kty - 0.5;
265  if ( fabs(yc) > 0.5/sqrt(3) ) {
266  double xk = x/m_tubeDx[isam-1] - ktx;
267  if ( xk > 0.5 ) {
268  xk = 1 - xk;
269  }
270  double yn = 0.5-xk*(1./3);
271  if ( fabs(yc) > fabs(yn) ) {
272  if ( yc > 0 )
273  iy++;
274  else
275  iy--;
276  }
277  else
278  movex = true;
279  }
280  else
281  movex = true;
282  if ( movex ) {
283  if ( x/m_tubeDx[isam-1] - ktx > 0.5 )
284  ix++;
285  else
286  ix--;
287  }
288  }
289 
290  tubeID_t tubeID = (iy << 16) + ix;
291 
292  it = m_tubeMap[isam-1].find(tubeID);
293  if (it != m_tubeMap[isam-1].end()){
294  tileName_t tilename = (it->second).get_tileName();
295  phi = tilename & 0xffff;
296  eta = tilename >> 16;
297  return true ;
298  }
299  // reach here only if it failed the second time.
300 
301  return false;
302 
303 }
304 
305 
306 
307 /* ----------------------------------------------------------------------
308  To decode the tile x position from the tile identifier
309  ---------------------------------------------------------------------- */
310 float
311 FCAL_ChannelMap::x(int isam, int eta, int phi) const
312 {
313  if(m_invert_xy) {
314  return y1(isam,eta,phi);
315  }
316  return x1 (isam, eta, phi);
317 }
318 
319 float
320 FCAL_ChannelMap::x1(int isam, int eta, int phi) const
321 {
322  float x;
323 
324  tileName_t tilename = (eta << 16) + phi ;
325 
326  tileMap_const_iterator it = m_tileMap[isam-1].find(tilename);
327  if(it != m_tileMap[isam-1].end())
328  {
329  x = (it->second).x();
330  } else
331  { // can't find the tile, throw exception.
332  char l_str[200] ;
333  snprintf(l_str, sizeof(l_str),
334  "Error in FCAL_ChannelMap::x, wrong tile,phi= %d ,eta=: %d ",phi,eta);
335  std::string errorMessage(l_str);
336  throw std::range_error(errorMessage.c_str());
337  }
338 
339  if(m_invert_x) {
340  return -x;
341  }
342  else {
343  return x;
344  }
345 
346  return x;
347 
348 }
349 
350 
351 /* ----------------------------------------------------------------------
352  To decode the tile y position from the tile identifier
353  ---------------------------------------------------------------------- */
354 float
355 FCAL_ChannelMap::y(int isam, int eta, int phi) const
356 {
357  if(m_invert_xy){
358  return x1(isam,eta,phi);
359  }
360  return y1 (isam, eta, phi);
361 }
362 
363 float
364 FCAL_ChannelMap::y1(int isam, int eta, int phi) const
365 {
366  float y;
367 
368  tileName_t tilename = (eta << 16) + phi ;
369 
370  tileMap_const_iterator it = m_tileMap[isam-1].find(tilename);
371  if(it != m_tileMap[isam-1].end())
372  {
373  y = (it->second).y();
374  } else
375  { // can't find the tile, throw exception.
376  char l_str[200] ;
377  snprintf(l_str, sizeof(l_str),
378  "Error in FCAL_ChannelMap::x, wrong tile,phi= %d ,eta=: %d",phi,eta);
379  std::string errorMessage(l_str);
380  throw std::range_error(errorMessage.c_str());
381  }
382 
383  return y;
384 }
385 
386 /* ----------------------------------------------------------------------
387  To decode the tile dx size from the tile identifier
388  ---------------------------------------------------------------------- */
389 
390 void FCAL_ChannelMap::tileSize(int sam, int ntubes, float &dx, float &dy) const {
391 
392  dx = m_tubeDx[sam-1];
393  dy = m_tubeDy[sam-1];
394  // float ntubes = (it->second).ntubes();
395  if(sam == 1 || sam == 3) {
396  float scale =sqrt(ntubes);
397  dx = dx * scale;
398  dy = dy * scale;
399  }
400  else {
401  const float inv_1_5 = 1. / 1.5;
402  float scale = sqrt(ntubes * inv_1_5);
403  dx = dx * scale;
404  dy = dy * scale * 1.5 ;
405  }
406 
407 
408  // There is a fundamental discrepancy between dx and dy. A cell will
409  // contain twice as many distinct x-positions as y-positions. Diagram:
410 
411  // . . . . -
412  //. . . . -
413  // . . . . - 4 x dy
414  // . . . . -
415  // ||||||||
416  // 8 x dx
417 
418  dx = 2*dx;
419 
420  if(m_invert_xy){
421  // switch xy
422  float temp = dx;
423  dx = dy;
424  dy = temp;
425  }
426 
427 }
428 
429 void FCAL_ChannelMap::tileSize(int sam, int eta, int phi,
430  float& dx, float& dy ) const
431 {
432 
433  tileName_t tilename = (eta << 16) + phi ;
434 
435  tileMap_const_iterator it = m_tileMap[sam-1].find(tilename);
436  if(it != m_tileMap[sam-1].end()) {
437  int ntubes = (it->second).ntubes();
438  tileSize(sam,ntubes,dx,dy);
439  return ;
440  }
441  else {
442  // can't find the tile, throw exception.
443  char l_str[200] ;
444  snprintf(l_str, sizeof(l_str),
445  "Error in FCAL_ChannelMap::tilesize, wrong tile,phi= %d ,eta=: %d ",phi,eta);
446  std::string errorMessage(l_str);
447  throw std::range_error(errorMessage.c_str());
448  }
449 }
450 
451 
452 // ********************** print_tubemap *************************************
453 void
455 {
457 
458  std::cout << "First 10 elements of the New FCAL tube map : " << imap << std::endl;
459  std::stringstream coutx;
460  coutx.precision(5);
461  for ( int i=0; i<10; ++i, ++it)
462  coutx << std::hex << it->first << "\t"
463  << (it->second).get_tileName() << std::dec <<"\t"
464  << (it->second).x() <<"\t"
465  << (it->second).y() << std::endl;
466  std::cout<<coutx.str();
467 }
468 
469 
470 // ********************** tubemap_begin **************************************
473 {
474  return m_tubeMap[imap-1].begin();
475 }
476 
477 
478 // ********************** tubemap_end ****************************************
481 {
482  return m_tubeMap[imap-1].end();
483 }
484 
485 // ********************** tubemap_size ***************************************
488 {
489  return m_tubeMap[imap-1].size();
490 }
491 
492 
FCAL_ChannelMap::m_tileDx
double m_tileDx[3]
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:163
FCAL_ChannelMap::m_invert_xy
bool m_invert_xy
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:166
CXXUTILS_TRAPPING_FP
#define CXXUTILS_TRAPPING_FP
Definition: trapping_fp.h:24
FCAL_ChannelMap::x1
float x1(int isam, int eta, int phi) const
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:320
FCAL_ChannelMap::getTubeByCopyNumber
tubemap_const_iterator getTubeByCopyNumber(int isam, int copyNo) const
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:119
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
FCAL_ChannelMap::end
tileMap_const_iterator end(int isam) const
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:148
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
FCAL_ChannelMap::tileName_t
unsigned int tileName_t
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:42
FCAL_ChannelMap::create_tileMap
void create_tileMap(int isam)
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:130
FCAL_ChannelMap::TubePosition
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:47
skel.it
it
Definition: skel.GENtoEVGEN.py:423
FCAL_ChannelMap::FCAL_ChannelMap
FCAL_ChannelMap(int itemp)
Constructors:
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:27
ParticleTest.tp
tp
Definition: ParticleTest.py:25
FCAL_ChannelMap::add_tube
void add_tube(const std::string &tileName, int mod, int id, int i, int j, double xCm, double yCm)
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:69
FCAL_ChannelMap::m_tubeSpacing
static const double m_tubeSpacing[]
Geometrical parameters here, in CLHEP::cm please to be compatible with G3.
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:160
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
x
#define x
FCAL_ChannelMap::m_tubeIndex
std::vector< tubemap_const_iterator > m_tubeIndex[3]
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:173
ReadCellNoiseFromCool.tile
tile
Definition: ReadCellNoiseFromCool.py:92
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
Execution.tb
tb
Definition: Execution.py:15
FCAL_ChannelMap::m_tubeDx
double m_tubeDx[3]
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:161
maskDeadModules.mod
mod
Definition: maskDeadModules.py:36
FCAL_ChannelMap::m_tubeDy
double m_tubeDy[3]
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:162
lumiFormat.i
int i
Definition: lumiFormat.py:92
FCAL_ChannelMap::x
float x(int isam, int eta, int phi) const
For reconstruction, decoding of tile identifiers.
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:311
master.flag
bool flag
Definition: master.py:29
FCAL_ChannelMap::getTileID
bool getTileID(int isam, float x, float y, int &eta, int &phi) const
-— For the new LArFCAL_ID Identifier
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:212
FCAL_ChannelMap::tubemap_size
tubemap_sizetype tubemap_size(int isam) const
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:487
FCAL_ChannelMap::tubemap_sizetype
tubeMap_t::size_type tubemap_sizetype
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:69
trapping_fp.h
Tell the compiler to optimize assuming that FP may trap.
FCAL_ChannelMap::finish
void finish()
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:55
FCAL_ChannelMap::TilePosition
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:127
FCAL_ChannelMap::m_tileMap
tileMap_t m_tileMap[3]
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:168
FCAL_ChannelMap::y
float y(int isam, int eta, int phi) const
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:355
FCAL_ChannelMap::m_tileDy
double m_tileDy[3]
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:164
makeTRTBarrelCans.dy
tuple dy
Definition: makeTRTBarrelCans.py:21
FCAL_ChannelMap::tileMap_const_iterator
tileMap_t::const_iterator tileMap_const_iterator
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:144
y
#define y
FCAL_ChannelMap::y1
float y1(int isam, int eta, int phi) const
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:364
FCAL_ChannelMap::tubemap_const_iterator
tubeMap_t::const_iterator tubemap_const_iterator
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:71
DeMoScan.first
bool first
Definition: DeMoScan.py:534
makeTRTBarrelCans.dx
tuple dx
Definition: makeTRTBarrelCans.py:20
FCAL_ChannelMap::tileSize
void tileSize(int sam, int eta, int phi, float &dx, float &dy) const
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:429
FCAL_ChannelMap::tubemap_end
tubemap_const_iterator tubemap_end(int isam) const
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:480
FCAL_ChannelMap::tubeID_t
unsigned int tubeID_t
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:43
FCAL_ChannelMap::tubemap_begin
tubemap_const_iterator tubemap_begin(int isam) const
tubeMap access functions
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:472
readCCLHist.float
float
Definition: readCCLHist.py:83
FCAL_ChannelMap::m_tubeMap
tubeMap_t m_tubeMap[3]
TubeMap.
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:172
FCAL_ChannelMap::m_invert_x
bool m_invert_x
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:165
FCAL_ChannelMap::print_tubemap
void print_tubemap(int isam) const
print functions
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:454