Skip to content

Commit dcef291

Browse files
committed
Flexible ring radii, a new Boolean switch for module A, module coverage in eta independent of their position
1 parent 96ad811 commit dcef291

File tree

4 files changed

+46
-15
lines changed

4 files changed

+46
-15
lines changed

Detectors/Upgrades/ALICE3/FD/base/include/FDBase/Constants.h

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ struct Constants {
2525
static constexpr int nsect = 8;
2626
static constexpr int nringsA = 5;
2727
static constexpr int nringsC = 6;
28+
29+
static constexpr float etaMax = 7.0f;
30+
static constexpr float etaMin = 4.0f;
31+
32+
static constexpr int nringsA_withFCT = 4;
33+
static constexpr float etaMinA_withFCT = 5.0f;
2834
};
2935

3036
} // namespace fd

Detectors/Upgrades/ALICE3/FD/base/include/FDBase/FDBaseParam.h

+4-5
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,11 @@ namespace fd
2222
{
2323
struct FDBaseParam : public o2::conf::ConfigurableParamHelper<FDBaseParam> {
2424

25-
float ringsA[Constants::nringsA + 1] = {3., 14.8, 26.6, 38.4, 50.2, 62.};
26-
float ringsC[Constants::nringsC + 1] = {3.5, 14.75, 26.0, 37.25, 48.5, 59.75, 71.};
25+
float zmodA = 1700.0f;
26+
float zmodC = -1950.0f;
27+
float dzscint = 4.0f;
2728

28-
float zmodA = 1700;
29-
float zmodC = -1950;
30-
float dzscint = 4.;
29+
bool withFCT = true;
3130

3231
O2ParamDef(FDBaseParam, "FDBase");
3332
};

Detectors/Upgrades/ALICE3/FD/simulation/include/FDSimulation/Detector.h

+3
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ class Detector : public o2::base::DetImpl<Detector>
9898
TGeoVolumeAssembly* buildModuleA();
9999
TGeoVolumeAssembly* buildModuleC();
100100

101+
float ringRadius(float zmod, float eta);
102+
101103
int mNumberOfSectors;
102104
int mNumberOfRingsA;
103105
int mNumberOfRingsC;
@@ -106,6 +108,7 @@ class Detector : public o2::base::DetImpl<Detector>
106108
std::vector<float> mRingRadiiA = {};
107109
std::vector<float> mRingRadiiC = {};
108110

111+
float mEtaMax, mEtaMin, mEtaMinA;
109112
float mZmodA;
110113
float mZmodC;
111114

Detectors/Upgrades/ALICE3/FD/simulation/src/Detector.cxx

+33-10
Original file line numberDiff line numberDiff line change
@@ -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

7791
Detector::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+
393416
ClassImp(o2::fd::Detector);

0 commit comments

Comments
 (0)