@@ -55,23 +55,37 @@ Detector::Detector(bool active)
55
55
mGeometryTGeo(nullptr ),
56
56
mTrackData()
57
57
{
58
- mNumberOfRingsA = Constants::nringsA;
59
58
mNumberOfRingsC = Constants::nringsC;
60
59
mNumberOfSectors = Constants::nsect;
61
60
61
+ mEtaMax = Constants::etaMax;
62
+ mEtaMin = Constants::etaMin;
63
+
62
64
auto & baseParam = FDBaseParam::Instance ();
63
65
66
+ if (baseParam.withFCT ) {
67
+ mNumberOfRingsA = Constants::nringsA_withFCT;
68
+ mEtaMinA = Constants::etaMinA_withFCT;
69
+ } else {
70
+ mNumberOfRingsA = Constants::nringsA;
71
+ mEtaMinA = mEtaMin ;
72
+ }
73
+
64
74
mDzScint = baseParam.dzscint / 2 ;
75
+ mZmodA = baseParam.zmodA ;
76
+ mZmodC = baseParam.zmodC ;
65
77
66
78
for (int i = 0 ; i <= mNumberOfRingsA + 1 ; i++) {
67
- mRingRadiiA .emplace_back (baseParam.ringsA [i]);
79
+ float eta = mEtaMax - i * (mEtaMax - mEtaMinA ) / mNumberOfRingsA ;
80
+ float r = ringRadius (mZmodA , eta);
81
+ mRingRadiiA .emplace_back (r);
68
82
}
83
+
69
84
for (int i = 0 ; i <= mNumberOfRingsC + 1 ; i++) {
70
- mRingRadiiC .emplace_back (baseParam.ringsC [i]);
85
+ float eta = -mEtaMax + i * (mEtaMax - mEtaMin ) / mNumberOfRingsC ;
86
+ float r = ringRadius (mZmodC , eta);
87
+ mRingRadiiC .emplace_back (r);
71
88
}
72
-
73
- mZmodA = baseParam.zmodA ;
74
- mZmodC = baseParam.zmodC ;
75
89
}
76
90
77
91
Detector::Detector (const Detector& rhs)
@@ -297,11 +311,12 @@ TGeoVolumeAssembly* Detector::buildModuleA()
297
311
for (int ir = 0 ; ir < mNumberOfRingsA ; ir++) {
298
312
std::string rName = " fd_ring" + std::to_string (ir + 1 );
299
313
TGeoVolumeAssembly* ring = new TGeoVolumeAssembly (rName.c_str ());
314
+ float rmin = mRingRadiiA [ir];
315
+ float rmax = mRingRadiiA [ir + 1 ];
316
+ LOG (info) << " ring" << ir << " : from " << rmin << " to " << rmax;
300
317
for (int ic = 0 ; ic < mNumberOfSectors ; ic++) {
301
318
int cellId = ic + mNumberOfSectors * ir;
302
319
std::string nodeName = " fd_node" + std::to_string (cellId);
303
- float rmin = mRingRadiiA [ir];
304
- float rmax = mRingRadiiA [ir + 1 ];
305
320
float phimin = dphiDeg * ic;
306
321
float phimax = dphiDeg * (ic + 1 );
307
322
auto tbs = new TGeoTubeSeg (" tbs" , rmin, rmax, mDzScint , phimin, phimax);
@@ -326,11 +341,12 @@ TGeoVolumeAssembly* Detector::buildModuleC()
326
341
for (int ir = 0 ; ir < mNumberOfRingsC ; ir++) {
327
342
std::string rName = " fd_ring" + std::to_string (ir + 1 + mNumberOfRingsA );
328
343
TGeoVolumeAssembly* ring = new TGeoVolumeAssembly (rName.c_str ());
344
+ float rmin = mRingRadiiC [ir];
345
+ float rmax = mRingRadiiC [ir + 1 ];
346
+ LOG (info) << " ring" << ir + mNumberOfRingsA << " : from " << rmin << " to " << rmax;
329
347
for (int ic = 0 ; ic < mNumberOfSectors ; ic++) {
330
348
int cellId = ic + mNumberOfSectors * (ir + mNumberOfRingsA );
331
349
std::string nodeName = " fd_node" + std::to_string (cellId);
332
- float rmin = mRingRadiiC [ir];
333
- float rmax = mRingRadiiC [ir + 1 ];
334
350
float phimin = dphiDeg * ic;
335
351
float phimax = dphiDeg * (ic + 1 );
336
352
auto tbs = new TGeoTubeSeg (" tbs" , rmin, rmax, mDzScint , phimin, phimax);
@@ -354,6 +370,8 @@ void Detector::defineSensitiveVolumes()
354
370
int nCellA = mNumberOfRingsA * mNumberOfSectors ;
355
371
int nCellC = mNumberOfRingsC * mNumberOfSectors ;
356
372
373
+ LOG (info) << " number of A rings = " << mNumberOfRingsA << " number of cells = " << nCellA;
374
+
357
375
for (int iv = 0 ; iv < nCellA + nCellC; iv++) {
358
376
volumeName = " fd_node" + std::to_string (iv);
359
377
v = gGeoManager ->GetVolume (volumeName);
@@ -390,4 +408,9 @@ int Detector::getChannelId(TVector3 vec)
390
408
return ir * mNumberOfSectors + isect + noff;
391
409
}
392
410
411
+ float Detector::ringRadius (float z, float eta)
412
+ {
413
+ return z * TMath::Tan (2 * TMath::ATan (TMath::Exp (-eta)));
414
+ }
415
+
393
416
ClassImp (o2::fd::Detector);
0 commit comments