@@ -55,23 +55,37 @@ Detector::Detector(bool active)
5555 mGeometryTGeo(nullptr ),
5656 mTrackData()
5757{
58- mNumberOfRingsA = Constants::nringsA;
5958 mNumberOfRingsC = Constants::nringsC;
6059 mNumberOfSectors = Constants::nsect;
6160
61+ mEtaMax = Constants::etaMax;
62+ mEtaMin = Constants::etaMin;
63+
6264 auto & baseParam = FDBaseParam::Instance ();
6365
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+
6474 mDzScint = baseParam.dzscint / 2 ;
75+ mZmodA = baseParam.zmodA ;
76+ mZmodC = baseParam.zmodC ;
6577
6678 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);
6882 }
83+
6984 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);
7188 }
72-
73- mZmodA = baseParam.zmodA ;
74- mZmodC = baseParam.zmodC ;
7589}
7690
7791Detector::Detector (const Detector& rhs)
@@ -297,11 +311,12 @@ TGeoVolumeAssembly* Detector::buildModuleA()
297311 for (int ir = 0 ; ir < mNumberOfRingsA ; ir++) {
298312 std::string rName = " fd_ring" + std::to_string (ir + 1 );
299313 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;
300317 for (int ic = 0 ; ic < mNumberOfSectors ; ic++) {
301318 int cellId = ic + mNumberOfSectors * ir;
302319 std::string nodeName = " fd_node" + std::to_string (cellId);
303- float rmin = mRingRadiiA [ir];
304- float rmax = mRingRadiiA [ir + 1 ];
305320 float phimin = dphiDeg * ic;
306321 float phimax = dphiDeg * (ic + 1 );
307322 auto tbs = new TGeoTubeSeg (" tbs" , rmin, rmax, mDzScint , phimin, phimax);
@@ -326,11 +341,12 @@ TGeoVolumeAssembly* Detector::buildModuleC()
326341 for (int ir = 0 ; ir < mNumberOfRingsC ; ir++) {
327342 std::string rName = " fd_ring" + std::to_string (ir + 1 + mNumberOfRingsA );
328343 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;
329347 for (int ic = 0 ; ic < mNumberOfSectors ; ic++) {
330348 int cellId = ic + mNumberOfSectors * (ir + mNumberOfRingsA );
331349 std::string nodeName = " fd_node" + std::to_string (cellId);
332- float rmin = mRingRadiiC [ir];
333- float rmax = mRingRadiiC [ir + 1 ];
334350 float phimin = dphiDeg * ic;
335351 float phimax = dphiDeg * (ic + 1 );
336352 auto tbs = new TGeoTubeSeg (" tbs" , rmin, rmax, mDzScint , phimin, phimax);
@@ -354,6 +370,8 @@ void Detector::defineSensitiveVolumes()
354370 int nCellA = mNumberOfRingsA * mNumberOfSectors ;
355371 int nCellC = mNumberOfRingsC * mNumberOfSectors ;
356372
373+ LOG (info) << " number of A rings = " << mNumberOfRingsA << " number of cells = " << nCellA;
374+
357375 for (int iv = 0 ; iv < nCellA + nCellC; iv++) {
358376 volumeName = " fd_node" + std::to_string (iv);
359377 v = gGeoManager ->GetVolume (volumeName);
@@ -390,4 +408,9 @@ int Detector::getChannelId(TVector3 vec)
390408 return ir * mNumberOfSectors + isect + noff;
391409}
392410
411+ float Detector::ringRadius (float z, float eta)
412+ {
413+ return z * TMath::Tan (2 * TMath::ATan (TMath::Exp (-eta)));
414+ }
415+
393416ClassImp (o2::fd::Detector);
0 commit comments