9 #include <ecl/geometry/ECLGeometryPar.h>
10 #include <framework/logging/Logger.h>
12 #include <G4VTouchable.hh>
13 #include <G4PhysicalVolumeStore.hh>
14 #include <G4NavigationHistory.hh>
15 #include <G4Transform3D.hh>
16 #include <G4Point3D.hh>
17 #include <G4Vector3D.hh>
28 static void Mapping(
int id,
int& ThetaId,
int& PhiId)
30 ThetaId = m_Theta[((
unsigned int)
id) >> 4];
31 PhiId =
id - m_dTheta[ThetaId] * 16 - ThetaId * 128;
34 static void Mapping(
int id,
int& ThetaId,
int& PhiId,
int& nrep,
int& indx)
36 Mapping(
id, ThetaId, PhiId);
38 int off = m_offsets[ThetaId];
39 int i = m_tbl[ThetaId];
44 nrep = (PhiId * r) >> m_RECIPROCAL_SHIFT;
45 indx = off + (PhiId - nrep * d);
48 static int CellID(
int ThetaId,
int PhiId)
50 return PhiId + m_dTheta[ThetaId] * 16 + ThetaId * 128;
53 static int Offset(
int ThetaId)
55 return m_dTheta[ThetaId] + ThetaId * 8;
58 static int Indx2ThetaId(
int indx)
63 static int ThetaId2NCry(
int ThetaId)
65 return m_denom[m_tbl[ThetaId]];
69 static const char m_dTheta[69];
70 static const unsigned char m_Theta[546], m_tbl[69], m_offsets[69];
72 static const unsigned char m_RECIPROCAL_SHIFT = 16;
73 static const unsigned int m_recip[5], m_denom[5];
76 const unsigned char Mapping_t::m_Theta[546] = {
78 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4,
79 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
80 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
81 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12,
83 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15,
84 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18,
85 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,
86 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24,
87 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27,
88 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30,
89 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33,
90 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36,
91 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39,
92 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42,
93 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45,
94 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48,
95 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51,
96 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54,
97 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57,
98 58, 58, 58, 58, 58, 58, 58, 58, 58,
100 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 60,
101 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62,
102 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64,
103 65, 65, 65, 65, 65, 65,
104 66, 66, 66, 66, 67, 67, 67, 67, 68, 68, 68, 68
107 const char Mapping_t::m_dTheta[69] = {
108 0, -5, -10, -14, -18, -22, -24, -26, -28, -30, -32, -34, -33,
110 -32, -31, -30, -29, -28, -27, -26, -25, -24,
111 -23, -22, -21, -20, -19, -18, -17, -16, -15,
112 -14, -13, -12, -11, -10, -9, -8, -7, -6,
113 -5, -4, -3, -2, -1, 0, 1, 2, 3,
114 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
116 14, 15, 16, 14, 12, 10, 8, 6, 2, -2
119 const unsigned char Mapping_t::m_tbl[69] = {
120 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4,
122 0, 0, 0, 0, 0, 0, 0, 0, 0,
123 0, 0, 0, 0, 0, 0, 0, 0, 0,
124 0, 0, 0, 0, 0, 0, 0, 0, 0,
125 0, 0, 0, 0, 0, 0, 0, 0, 0,
126 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
128 4, 4, 3, 3, 3, 3, 3, 2, 2, 2
131 const unsigned char Mapping_t::m_offsets[69] = {
132 0, 3, 6, 10, 14, 18, 24, 30, 36, 42, 48, 54, 63,
134 132, 134, 136, 138, 140, 142, 144, 146, 148,
135 150, 152, 154, 156, 158, 160, 162, 164, 166,
136 168, 170, 172, 174, 176, 178, 180, 182, 184,
137 186, 188, 190, 192, 194, 196, 198, 200, 202,
138 204, 206, 208, 210, 212, 214, 216, 218, 220, 222,
140 72, 81, 90, 96, 102, 108, 114, 120, 124, 128
143 #define pack(x) ((1<<Mapping_t::m_RECIPROCAL_SHIFT)/x+1)
144 const unsigned int Mapping_t::m_recip[] = {pack(2), pack(3), pack(4), pack(6), pack(9)};
145 const unsigned int Mapping_t::m_denom[] = { (2), (3), (4), (6), (9)};
151 if (!m_B4ECLGeometryParDB) m_B4ECLGeometryParDB =
new ECLGeometryPar();
152 return m_B4ECLGeometryParDB;
155 ECLGeometryPar::ECLGeometryPar()
162 ECLGeometryPar::~ECLGeometryPar()
164 if (m_B4ECLGeometryParDB) {
165 delete m_B4ECLGeometryParDB;
166 B2DEBUG(150,
"m_B4ECLGeometryParDB deleted ");
168 if (m_ECLForwardGlobalT)
delete m_ECLForwardGlobalT;
169 if (m_ECLBarrelGlobalT)
delete m_ECLBarrelGlobalT;
170 if (m_ECLBackwardGlobalT)
delete m_ECLBackwardGlobalT;
173 void ECLGeometryPar::clear()
184 void ParticleGunParameters(
const G4String& comment,
const G4ThreeVector& n,
const G4ThreeVector& r0,
double dphi)
186 cout << comment << endl;
187 cout <<
"Center position = " << r0 <<
", Direction = " << n << endl;
189 double t = -(n.z() * r0.z() - n * r0) / (n.z() * n.z() - n * n);
190 G4ThreeVector r = n * t + r0;
191 cout <<
"Closest point to z-axis = " << r << endl;
192 const double r2d = 180 / M_PI;
193 double th = r2d * n.theta();
194 double phi = r2d * n.phi();
197 cout <<
" 'thetaParams': [" << th <<
", " << th <<
"]," << endl;
198 cout <<
" 'phiParams': [" << phi <<
"+0*" << dphi <<
", " << phi <<
"+0*" << dphi <<
"]," << endl;
199 cout <<
" 'zVertexParams': [" << z <<
", " << z <<
"]" << endl;
202 G4Transform3D getT(
const G4VPhysicalVolume& v)
204 return G4Transform3D(v.GetObjectRotationValue(), v.GetObjectTranslation());
207 G4Transform3D getT(
const G4String& n)
209 G4PhysicalVolumeStore* store = G4PhysicalVolumeStore::GetInstance();
221 G4VPhysicalVolume* v = store->GetVolume(n);
225 void print_trans(
const G4Transform3D& t)
227 for (
int i = 0; i < 4; i++) {
228 for (
int j = 0; j < 3; j++)
229 cout << t(j, i) <<
" ";
234 void ECLGeometryPar::read()
237 m_crystals.reserve(46 * 2 + 132);
244 G4Point3D p0(0, 0, 0); G4Vector3D v0(0, 0, 1);
247 m_ECLForwardGlobalT =
new G4Transform3D(getT(
"ECLForwardPhysical"));
248 G4Transform3D T = getT(
"ECLForwardCrystalSectorPhysical_1");
249 G4String tnamef(
"ECLForwardWrappedCrystal_Physical_");
250 for (
int i = 0; i < 72; i++) {
251 G4String vname(tnamef); vname += to_string(i);
252 G4Transform3D cT = T * getT(vname);
254 m_crystals.push_back(c);
260 m_ECLBackwardGlobalT =
new G4Transform3D(getT(
"ECLBackwardPhysical"));
261 G4Transform3D T = getT(
"ECLBackwardCrystalSectorPhysical_0");
262 G4String tnamef(
"ECLBackwardWrappedCrystal_Physical_");
263 for (
int i = 0; i < 60; i++) {
264 G4String vname(tnamef); vname += to_string(i);
265 G4Transform3D cT = T * getT(vname);
267 m_crystals.push_back(c);
276 m_ECLBarrelGlobalT =
new G4Transform3D(getT(
"ECLBarrelSectorPhysical_0") * G4RotateZ3D(M_PI / 2));
277 G4Transform3D Ts = G4RotateZ3D(-M_PI / 2);
281 G4Transform3D Ts1 = G4RotateZ3D(M_PI / 36) * Ts;
283 G4String tname(
"ECLBarrelWrappedCrystal_Physical_");
284 for (
int i = 0; i < 2 * 46; i++) {
285 G4String vname(tname); vname += to_string(i);
286 G4Transform3D cT = ((i % 2) ? Ts1 : Ts) * getT(vname);
288 m_crystals.push_back(c);
293 B2DEBUG(150,
"ECLGeometryPar::read() initialized with " << m_crystals.size() <<
" crystals.");
297 void sincos(
const double* ss,
int iphi,
double& s,
double& c)
303 if (iq & 1) {
int t = is; is = ic; ic = t;}
307 if ((((0 << 0) + (0 << 1) + (1 << 2) + (1 << 3)) >> iq) & 1) ls = -ls;
308 if ((((0 << 0) + (1 << 1) + (1 << 2) + (0 << 3)) >> iq) & 1) lc = -lc;
313 const double ss72[] = {
314 0.0000000000000000000000,
315 0.0871557427476581735581,
316 0.1736481776669303488517,
317 0.2588190451025207623489,
318 0.3420201433256687330441,
319 0.4226182617406994361870,
320 0.5000000000000000000000,
321 0.5735764363510460961080,
322 0.6427876096865393263226,
323 0.7071067811865475244008,
324 0.7660444431189780352024,
325 0.8191520442889917896845,
326 0.8660254037844386467637,
327 0.9063077870366499632426,
328 0.9396926207859083840541,
329 0.9659258262890682867497,
330 0.9848077530122080593667,
331 0.9961946980917455322950,
332 1.0000000000000000000000
335 const double ss16[] = {
336 0.0000000000000000000000,
337 0.3826834323650897717285,
338 0.7071067811865475244008,
339 0.9238795325112867561282,
340 1.0000000000000000000000
343 void ECLGeometryPar::InitCrystal(
int cid)
345 if (m_crystals.size() == 0) read();
346 int thetaid, phiid, nreplica, indx;
347 Mapping_t::Mapping(cid, thetaid, phiid, nreplica, indx);
352 sincos<72>(ss72, nreplica, s, c);
354 sincos<16>(ss16, nreplica, s, c);
358 T = m_ECLForwardGlobalT;
359 }
else if (cid < 7776) {
360 T = m_ECLBarrelGlobalT;
362 T = m_ECLBackwardGlobalT;
365 double xp = c * t.pos.x() - s * t.pos.y();
366 double yp = s * t.pos.x() + c * t.pos.y();
369 double xv = c * t.dir.x() - s * t.dir.y();
370 double yv = s * t.dir.x() + c * t.dir.y();
373 m_current_crystal.pos = (1 / CLHEP::cm) * (*T * G4Point3D(xp, yp, t.pos.z()));
374 m_current_crystal.dir = *T * G4Vector3D(xv, yv, t.dir.z());
380 int ECLGeometryPar::GetCellID(
int ThetaId,
int PhiId)
382 return Mapping_t::CellID(ThetaId, PhiId);
385 void ECLGeometryPar::Mapping(
int cid)
388 Mapping_t::Mapping(mPar_cellID, mPar_thetaID, mPar_phiID);
391 int ECLGeometryPar::TouchableDiodeToCellID(
const G4VTouchable* touch)
393 return TouchableToCellID(touch);
396 int ECLGeometryPar::TouchableToCellID(
const G4VTouchable* touch)
401 const G4NavigationHistory* h = touch->GetHistory();
402 int hd = h->GetDepth();
403 int i1 = h->GetReplicaNo(hd - 1);
404 int i2 = h->GetReplicaNo(hd - 2);
406 int ThetaId = Mapping_t::Indx2ThetaId(i1);
407 int NCryst = Mapping_t::ThetaId2NCry(ThetaId);
408 int Offset = Mapping_t::Offset(ThetaId);
410 int ik = i1 - Offset;
413 PhiId = (i2 - (ik % 2)) * NCryst + ik;
414 if (PhiId < 0) PhiId += 144;
416 int i3 = h->GetReplicaNo(hd - 3);
418 PhiId = (i2 + 2 * i3) * NCryst + ik;
425 int i3r = (3 - (i3 % 4)) + 4 * (i3 / 4);
426 PhiId = (2 * i3r + (1 - i2)) * NCryst + ik;
430 int cellID = Offset * 16 + PhiId;
435 G4AffineTransform t = h->GetTopTransform();
436 G4ThreeVector o(0, 0, 0), n(0, 0, 1);
437 G4ThreeVector ro = t.Inverse().TransformPoint(o);
438 G4ThreeVector
rn = t.Inverse().TransformAxis(n);
443 G4ThreeVector dr = m_current_crystal.pos - ro, dn = m_current_crystal.dir -
rn;
444 if (dr.mag() > 1e-10 || dn.mag() > 1e-10) {
445 cout <<
"Missmatch " << h->GetVolume(hd - 1)->GetName() <<
" " << cellID <<
" " << ThetaId <<
" " << PhiId <<
" " << NCryst <<
" "
446 << hd <<
" " << i2 <<
" " << i1 <<
" " << m_current_crystal.pos <<
" " << ro <<
" " <<
rn <<
" " << dr <<
" " << dn << endl;
448 for (
int i = 0; i < 144; i++) {
449 int ci = Mapping_t::CellID(ThetaId, i);
451 dr = m_current_crystal.pos - ro;
452 if (dr.mag() < 1e-10) cout <<
"best PhiId = " << i << endl;
459 int ECLGeometryPar::ECLVolumeToCellID(
const G4VTouchable* touch)
461 int depth = touch->GetHistoryDepth();
462 if ((depth != 3) && (depth != 5)) {
463 B2WARNING(
"ECLGeometryPar::ECLVolumeToCellID: History depth = " << depth <<
" is out of range: should be 3 or 5.");
466 const G4String& vname = touch->GetVolume()->GetName();
467 std::size_t pos0 = vname.find(
"lv_forward_crystal_");
468 std::size_t pos1 = vname.find(
"lv_barrel_crystal_");
469 std::size_t pos2 = vname.find(
"lv_backward_crystal_");
470 if (pos0 == string::npos && pos1 == string::npos && pos2 == string::npos) {
471 B2WARNING(
"ECLGeometryPar::ECLVolumeToCellID: Volume name does not match pattern. NAME=" << vname);
474 return TouchableToCellID(touch);
477 double ECLGeometryPar::time2sensor(
int cid,
const G4ThreeVector& hit_pos)
479 if (cid != m_ini_cid) InitCrystal(cid);
480 double z = 15. - (hit_pos - m_current_crystal.pos) * m_current_crystal.dir;
481 double dt = 6.05 + z * (0.0749 - z * 0.00112);
494 m_nbrs(*new std::vector<
Identifier > (aNbr.m_nbrs)) ,
495 m_nearSize(aNbr.m_nearSize)
503 const std::vector< Identifier >& aNbrs ,
504 const std::vector< Identifier >::size_type aNearSize
506 m_nbrs(*new std::vector<
Identifier > (aNbrs)) ,
507 m_nearSize(aNearSize)
510 std::sort(
m_nbrs.begin() ,
m_nbrs.begin() + aNearSize , std::less< Identifier >()) ;
511 std::sort(
m_nbrs.begin() + aNearSize ,
m_nbrs.end() , std::less< Identifier >()) ;
521 unsigned short i(0) ;
522 for (std::vector< EclNbr::Identifier >::const_iterator
523 iNbr(aNbr.
nbrs().begin()) ;
524 iNbr != aNbr.
nbrs().end() ; ++iNbr) {
526 if (iNbr != aNbr.
nbrs().begin() && i != aNbr.
nearSize() + 1) os <<
"," ;
527 if (i == aNbr.
nearSize() + 1) os <<
"|" ;
528 os << std::setw(4) << (*iNbr) ;
537 unsigned short Nri(0) ;
539 for (std::vector< EclNbr::Identifier >::const_iterator
541 iNbr !=
m_nbrs.end() ; ++iNbr) {
545 cout << std::setw(4) << (*iNbr) ;
574 const std::vector< EclNbr::Identifier >&
580 const std::vector< EclNbr::Identifier >::const_iterator
586 const std::vector< EclNbr::Identifier >::const_iterator
592 const std::vector< EclNbr::Identifier >::const_iterator
598 const std::vector< EclNbr::Identifier >::const_iterator
604 std::vector< EclNbr::Identifier >::size_type
610 std::vector< EclNbr::Identifier >::size_type
617 int EclNbr::GetCellID(
int ThetaId,
int PhiId)
636 const int cellID = aCellId;
640 std::vector< EclNbr::Identifier >::size_type
nearSize(0);
641 std::vector< EclNbr::Identifier > vNbr;
646 int tm1 = thetaId - 1;
647 int tm2 = thetaId - 2;
648 int tp1 = thetaId + 1;
649 int tp2 = thetaId + 2;
651 if (aCellId > 1151 && aCellId < 7776) {
660 int fm1 = (phiId + 143) % 144;
661 int fp1 = (phiId + 1) % 144;
662 int fm2 = (phiId + 142) % 144;
663 int fp2 = (phiId + 2) % 144;
700 if (aCellId < 1153) {
701 const EclIdentifier mPerRingForward[]
702 = { 48, 48, 64, 64, 64, 96, 96, 96, 96, 96, 96, 144, 144, 144, 144 };
703 if (thetaId > 1) nm2 = mPerRingForward[ thetaId - 2 ];
704 if (thetaId > 0) nm1 = mPerRingForward[ thetaId - 1 ];
705 n00 = mPerRingForward[ thetaId ];
706 np1 = mPerRingForward[ thetaId + 1 ];
707 np2 = mPerRingForward[ thetaId + 2 ];
709 const EclIdentifier mPerRingBackward[]
710 = { 64, 64, 64, 96, 96, 96, 96, 96, 144, 144, 144, 144 };
711 if (thetaId < 67) np2 = mPerRingBackward[ 66 - thetaId ];
712 if (thetaId < 68) np1 = mPerRingBackward[ 67 - thetaId ];
713 n00 = mPerRingBackward[ 68 - thetaId ];
714 nm1 = mPerRingBackward[ 69 - thetaId ];
715 nm2 = mPerRingBackward[ 70 - thetaId ];
722 int fp100 = (f0000 * np1 + np1 / 2) / n00;
723 int fp200 = (f0000 * np2 + np2 / 2) / n00;
724 int fm100 = (f0000 * nm1 + nm1 / 2) / n00;
725 int fm200 = (f0000 * nm2 + nm2 / 2) / n00;
727 int f00m1 = (f0000 + n00 - 1) % n00;
728 int f00m2 = (f0000 + n00 - 2) % n00;
729 int f00p1 = (f0000 + 1) % n00;
730 int f00p2 = (f0000 + 2) % n00;
732 int fp1m1 = (fp100 + np1 - 1) % np1;
733 int fp1m2 = (fp100 + np1 - 2) % np1;
734 int fp1p1 = (fp100 + 1) % np1;
735 int fp1p2 = (fp100 + 2) % np1;
737 int fm1m1 = (fm100 + nm1 - 1) % nm1;
738 int fm1m2 = (fm100 + nm1 - 2) % nm1;
739 int fm1p1 = (fm100 + 1) % nm1;
740 int fm1p2 = (fm100 + 2) % nm1;
742 int fp2m1 = (fp200 + np2 - 1) % np2;
743 int fp2m2 = (fp200 + np2 - 2) % np2;
744 int fp2p1 = (fp200 + 1) % np2;
745 int fp2p2 = (fp200 + 2) % np2;
747 int fm2m1 = (fm200 + nm2 - 1) % nm2;
748 int fm2m2 = (fm200 + nm2 - 2) % nm2;
749 int fm2p1 = (fm200 + 1) % nm2;
750 int fm2p2 = (fm200 + 2) % nm2;
751 int delta = n00 / 16;
753 int nth = phiId % delta;
768 if ((nth == 0) || (nth == 1)) {
772 }
else if ((nth == 2) || (nth == 3)) {
779 if ((nth == 0) || (nth == 3)) {
780 fm2p2 = fm2m2 = 1000;
781 }
else if (nth == 1) {
783 }
else if (nth == 2) {
788 if ((nth == 2) || (nth == 5)) {
800 if ((nth == 0) || (nth == 2) || (nth == 3) || (nth == 5)) {
805 if ((nth == 2) || (nth == 5) || (nth == 8)) {
817 if ((nth == 0) || (nth == 2) || (nth == 3)
818 || (nth == 5) || (nth == 6) || (nth == 8))
822 if ((nth == 2) || (nth == 5)) {
834 if ((nth == 0) || (nth == 2) || (nth == 3) || (nth == 5))
838 if ((nth == 2) || (nth == 5) || (nth == 8)) {
850 if ((nth == 0) || (nth == 2) || (nth == 3) || (nth == 5)
851 || (nth == 6) || (nth == 8))
The Class for ECL Geometry Parameters.
std::vector< Identifier >::size_type nextSize() const
get crystals nextSize
const std::vector< Identifier >::const_iterator nextEnd() const
get crystals nextEnd
EclNbr getNbr(const Identifier aCellId)
get crystals nbr
int GetPhiID()
Get Theta Id.
EclNbr()
Constructors and destructor.
int mNbr_thetaID
The Theta ID information.
std::vector< Identifier >::size_type m_nearSize
size of near brs
virtual ~EclNbr()
destructor
const std::vector< Identifier > & nbrs() const
get crystals nbrs
int mNbr_cellID
Get Phi Id.
const std::vector< Identifier >::const_iterator nearEnd() const
get crystals nearEnd
int mNbr_phiID
The Phi ID information.
void printNbr()
print crystals nbrs
void Mapping(int cid)
Mapping theta, phi Id.
int GetCellID(int ThetaId, int PhiId)
Get Cell Id.
const std::vector< Identifier >::const_iterator nearBegin() const
get crystals nearBegin
const std::vector< Identifier >::const_iterator nextBegin() const
get crystals nextBegin
EclIdentifier Identifier
constants, enums and typedefs
std::vector< Identifier >::size_type nearSize() const
get crystals nearSize
std::vector< Identifier > & m_nbrs
id of m_brs
int GetThetaID()
Get Cell Id.
EclNbr & operator=(const EclNbr &aNbr)
assignment operator(s)
std::ostream & operator<<(std::ostream &output, const IntervalOfValidity &iov)
TString rn()
Get random string.
Abstract base class for different kinds of events.