Skip to content

Commit 74bca51

Browse files
committed
added cherenkov modules
1 parent 5cb4830 commit 74bca51

3 files changed

Lines changed: 104 additions & 77 deletions

File tree

Detectors/Upgrades/ALICE3/FD3/base/include/FD3Base/Constants.h

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,39 @@ namespace fd3
2424
struct Constants {
2525
static constexpr unsigned int nsect = 8;
2626
static constexpr unsigned int nringsScint = 5;
27-
static constexpr unsigned int nringsCher = 5;
27+
static constexpr unsigned int nringsCher = 1;
2828

2929
static constexpr float dzscint = 4.0f;
30-
static constexpr float dzcher = 4.0f;
30+
static constexpr float dzcher = 4.0f;
3131

32-
static constexpr float etaMin_scint_v1 = 2.0f;
33-
static constexpr float etaMax_scint_v1 = 4.0f;
34-
static constexpr float etaMin_cher_v1 = 3.0f;
35-
static constexpr float etaMax_cher_v1 = 4.0f;
36-
static constexpr float zscint_v1 = 370.0f;
37-
static constexpr float zcher_v1 = 430.0f;
32+
static constexpr float etaMin_scintA_v1 = 2.5f; // modules of eta
33+
static constexpr float etaMax_scintA_v1 = 5.5f;
34+
static constexpr float etaMin_scintC_v1 = -4.9f;
35+
static constexpr float etaMax_scintC_v1 = -2.5f;
36+
static constexpr float etaMin_cherA_v1 = 4.0f;
37+
static constexpr float etaMax_cherA_v1 = 5.5f;
38+
static constexpr float etaMin_cherC_v1 = -4.9f;
39+
static constexpr float etaMax_cherC_v1 = -4.0f;
40+
static constexpr float zscintA_v1 = 410.0f;
41+
static constexpr float zcherA_v1 = 430.0f;
42+
static constexpr float zscintC_v1 = -410.0f;
43+
static constexpr float zcherC_v1 = -430.0f;
3844

3945
static constexpr float etaMin_scint_v2 = 4.0f;
46+
static constexpr float etaMin_cher_v2 = 5.0f;
4047
static constexpr float etaMax_scint_v2 = 7.0f;
41-
static constexpr float etaMin_cher_v2 = 5.0f;
42-
static constexpr float etaMax_cher_v2 = 7.0f;
48+
static constexpr float etaMax_cher_v2 = 7.0f;
4349
static constexpr float zscint_v2 = 1500.0f;
44-
static constexpr float zcher_v2 = 1560.0f;
45-
46-
static constexpr float etaMin_scint_v3 = 2.0f;
47-
static constexpr float etaMax_scint_v3 = 5.0f;
48-
static constexpr float etaMin_cher_v3 = 5.0f;
49-
static constexpr float etaMax_cher_v3 = 7.0f;
50-
static constexpr float zscint_v3 = 370.0f;
51-
static constexpr float zcher_v3 = 1560.0f;
50+
static constexpr float zcher_v2 = 1560.0f;
5251

52+
// static constexpr float etaMin_scintA_v3 = 2.0f;
53+
// static constexpr float etaMax_scintA_v3 = 5.0f;
54+
// static constexpr float etaMin_scintC_v3 = -4.9f;
55+
// static constexpr float etaMax_scintC_v3 = -2.5f;
56+
// static constexpr float etaMin_cher_v3 = 5.0f;
57+
// static constexpr float etaMax_cher_v3 = 7.0f;
58+
// static constexpr float zscint_v3 = 410.0f;
59+
// static constexpr float zcher_v3 = 1560.0f;
5360
};
5461

5562
} // namespace fd3

Detectors/Upgrades/ALICE3/FD3/simulation/include/FD3Simulation/Detector.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,11 @@ class Detector : public o2::base::DetImpl<Detector>
112112
unsigned int mNumberOfRingsScint, mNumberOfRingsCher, mNumberOfSectors;
113113
float mDzScint, mDzCher;
114114

115-
std::vector<float> mRingSizesScint = {}, mRingSizesCher = {};
116-
117-
float mEtaMinScint, mEtaMaxScint ;
118-
float mEtaMaxCher, mEtaMinCher;
119-
float mZScint, mZCher;
120-
char * mTopVolumeNameScint, *mTopVolumeNameCher;
115+
float mEtaMinScintA, mEtaMaxScintA, mEtaMinScintC, mEtaMaxScintC;
116+
float mEtaMaxCherA, mEtaMinCherA, mEtaMaxCherC, mEtaMinCherC;
117+
float mZScintA, mZScintC, mZCherA, mZCherC;
118+
float mYScint, mYCher;
119+
TString mTopVolumeNameScint, mTopVolumeNameCher;
121120

122121
void defineSensitiveVolumes();
123122
void definePassiveVolumes();

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

Lines changed: 74 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -66,48 +66,61 @@ Detector::Detector(bool active)
6666

6767
switch (baseParam.geoVersion) {
6868
case 1:
69-
mEtaMinScint = Constants::etaMin_scint_v1;
70-
mEtaMinCher = Constants::etaMin_cher_v1;
71-
mEtaMaxScint = Constants::etaMax_scint_v1;
72-
mEtaMaxCher = Constants::etaMax_cher_v1;
73-
mZScint = Constants::zscint_v1;
74-
mZCher = Constants::zcher_v1;
69+
mEtaMinScintA = Constants::etaMin_scintA_v1;
70+
mEtaMinScintC = Constants::etaMin_scintC_v1;
71+
mEtaMinCherA = Constants::etaMin_cherA_v1;
72+
mEtaMinCherC = Constants::etaMin_cherC_v1;
73+
mEtaMaxScintA = Constants::etaMax_scintA_v1;
74+
mEtaMaxScintC = Constants::etaMax_scintC_v1;
75+
mEtaMaxCherA = Constants::etaMax_cherA_v1;
76+
mEtaMaxCherC = Constants::etaMax_cherC_v1;
77+
mZScintA = Constants::zscintA_v1;
78+
mZCherA = Constants::zcherA_v1;
79+
mZScintC = Constants::zscintC_v1;
80+
mZCherC = Constants::zcherC_v1;
81+
mYScint = 30.f;
82+
mYCher = 30.f;
7583
mTopVolumeNameScint = "barrel";
7684
mTopVolumeNameCher = "barrel";
7785
break;
7886
case 2:
79-
mEtaMinScint = Constants::etaMin_scint_v2;
80-
mEtaMinCher = Constants::etaMin_cher_v2;
81-
mEtaMaxScint = Constants::etaMax_scint_v2;
82-
mEtaMaxCher = Constants::etaMax_cher_v2;
83-
mZScint = Constants::zscint_v2;
84-
mZCher = Constants::zcher_v2;
87+
mEtaMinScintA = Constants::etaMin_scint_v2;
88+
mEtaMinScintC = Constants::etaMin_scint_v2;
89+
mEtaMinCherA = Constants::etaMin_cher_v2;
90+
mEtaMinCherC = Constants::etaMin_cher_v2;
91+
mEtaMaxScintA = Constants::etaMax_scint_v2;
92+
mEtaMaxScintC = Constants::etaMax_scint_v2;
93+
mEtaMaxCherA = Constants::etaMax_cher_v2;
94+
mEtaMaxCherC = Constants::etaMax_cher_v2;
95+
mZScintA = Constants::zscint_v2;
96+
mZCherA = Constants::zcher_v2;
97+
mZScintC = -mZScintA;
98+
mZCherC = - mZCherC;
99+
mYScint = 0.f;
100+
mYCher = 0.f;
85101
mTopVolumeNameScint = "cave";
86102
mTopVolumeNameCher = "cave";
87103
break;
88104
case 3:
89-
mEtaMinScint = Constants::etaMin_scint_v3;
90-
mEtaMinCher = Constants::etaMin_cher_v3;
91-
mEtaMaxScint = Constants::etaMax_scint_v3;
92-
mEtaMaxCher = Constants::etaMax_cher_v3;
93-
mZScint = Constants::zscint_v3;
94-
mZCher = Constants::zcher_v3;
105+
mEtaMinScintA = Constants::etaMin_scintA_v1;
106+
mEtaMinScintC = Constants::etaMin_scintC_v1;
107+
mEtaMinCherA = Constants::etaMin_cher_v2;
108+
mEtaMinCherC = Constants::etaMin_cher_v2;
109+
mEtaMaxScintA = Constants::etaMax_scintA_v1;
110+
mEtaMaxScintC = Constants::etaMax_scintC_v1;
111+
mEtaMaxCherA = Constants::etaMax_cher_v2;
112+
mEtaMaxCherC = Constants::etaMax_cher_v2;
113+
mZScintA = Constants::zscintA_v1;
114+
mZScintC = Constants::zscintC_v1;
115+
mZCherA = Constants::zcher_v2;
116+
mZCherC = - mZCherA;
117+
mYScint = 30.f;
118+
mYCher = 0.f;
95119
mTopVolumeNameScint = "barrel";
96120
mTopVolumeNameCher = "cave";
97121
break;
98122
}
99123

100-
for (int i = 0; i <= mNumberOfRingsScint + 1; i++) {
101-
float eta = mEtaMaxScint - i * (mEtaMaxScint - mEtaMinScint) / mNumberOfRingsScint;
102-
float r = getRingSize(mZScint, eta);
103-
mRingSizesScint.emplace_back(r);
104-
}
105-
106-
for (int i = 0; i <= mNumberOfRingsCher + 1; i++) {
107-
float eta = mEtaMaxCher - i * (mEtaMaxCher - mEtaMinCher) / mNumberOfRingsCher;
108-
float r = getRingSize(mZCher, eta);
109-
mRingSizesCher.emplace_back(r);
110-
}
111124
}
112125

113126
Detector::Detector(const Detector& rhs)
@@ -269,12 +282,12 @@ void Detector::createMaterials()
269282

270283
int fieldType;
271284
float maxField;
272-
o2::base::Detector::initFieldTrackingParams(fieldType, maxField);
273-
LOG(info) << "FV0: createMaterials(): fieldType " << fieldType << ", maxField " << maxField;
274-
275285
// TODO: Comment out two lines below once tested that the above function assigns field type and max correctly
276286
fieldType = 3; // Field type
277287
maxField = 5.0; // Field max.
288+
// o2::base::Detector::initFieldTrackingParams(fieldType, maxField);
289+
LOG(info) << "FV0: createMaterials(): fieldType " << fieldType << ", maxField " << maxField;
290+
278291

279292
float tmaxfd3 = -10.0; // max deflection angle due to magnetic field in one step
280293
float stepmax = 0.1; // max step allowed [cm]
@@ -292,8 +305,8 @@ void Detector::createMaterials()
292305
o2::base::Detector::Medium(Aluminium, "Aluminium", matId, unsens, fieldType, maxField,
293306
tmaxfd3, stepmax, deemax, epsil, stepmin);
294307

295-
// Cherenkov part
296-
fieldType = 2; // magneticField->Integ();
308+
// Cherenkov radiator
309+
fieldType = 2; // magneticField->Integ();
297310
maxField = 10.; // magneticField->Max();
298311

299312
// Radiator glass SiO2
@@ -331,11 +344,11 @@ void Detector::buildModules()
331344
TGeoVolumeAssembly* vFD3_CherA = buildModuleCherA();
332345
TGeoVolumeAssembly* vFD3_CherC = buildModuleCherC();
333346

334-
topVolScint->AddNode(vFD3_ScintA, 1, new TGeoTranslation(0., 0., mZScint));
335-
topVolScint->AddNode(vFD3_ScintC, 2, new TGeoTranslation(0., 0., -mZScint));
347+
topVolScint->AddNode(vFD3_ScintA, 1, new TGeoTranslation(0., mYScint, mZScintA));
348+
topVolScint->AddNode(vFD3_ScintC, 2, new TGeoTranslation(0., mYScint, mZScintC));
336349

337-
topVolCher->AddNode(vFD3_CherA, 1, new TGeoTranslation(0., 0., mZCher));
338-
topVolCher->AddNode(vFD3_CherC, 2, new TGeoTranslation(0., 0., -mZCher));
350+
topVolCher->AddNode(vFD3_CherA, 1, new TGeoTranslation(0., mYCher, mZCherA));
351+
topVolCher->AddNode(vFD3_CherC, 2, new TGeoTranslation(0., mYCher, mZCherC));
339352
}
340353

341354
TGeoVolumeAssembly* Detector::buildModuleScintA()
@@ -349,8 +362,10 @@ TGeoVolumeAssembly* Detector::buildModuleScintA()
349362
for (int ir = 0; ir < mNumberOfRingsScint; ir++) {
350363
std::string rName = "fd3_ring" + std::to_string(ir + 1);
351364
TGeoVolumeAssembly* ring = new TGeoVolumeAssembly(rName.c_str());
352-
float rmin = mRingSizesScint[ir];
353-
float rmax = mRingSizesScint[ir + 1];
365+
float etaMin = mEtaMaxScintA - (ir + 1) * (mEtaMaxScintA - mEtaMinScintA) / mNumberOfRingsScint;
366+
float etaMax = mEtaMaxScintA - ir * (mEtaMaxScintA - mEtaMinScintA) / mNumberOfRingsScint;
367+
float zmod = mZScintA;
368+
float rmin = getRingSize(zmod, etaMax), rmax = getRingSize(zmod, etaMin);
354369
LOG(info) << "Scintillator ring" << ir << ": from " << rmin << " to " << rmax;
355370
for (int ic = 0; ic < mNumberOfSectors; ic++) {
356371
int cellId = ic + mNumberOfSectors * ir;
@@ -366,7 +381,7 @@ TGeoVolumeAssembly* Detector::buildModuleScintA()
366381
}
367382
ring->AddNode(nod, cellId);
368383
}
369-
mod->AddNode(ring, ir + 1);
384+
mod->AddNode(ring, 1);
370385
}
371386

372387
return mod;
@@ -383,8 +398,10 @@ TGeoVolumeAssembly* Detector::buildModuleScintC()
383398
for (int ir = 0; ir < mNumberOfRingsScint; ir++) {
384399
std::string rName = "fd3_ring" + std::to_string(ir + 1 + mNumberOfRingsScint);
385400
TGeoVolumeAssembly* ring = new TGeoVolumeAssembly(rName.c_str());
386-
float rmin = mRingSizesScint[ir];
387-
float rmax = mRingSizesScint[ir + 1];
401+
float etaMin = mEtaMinScintC + ir * (mEtaMaxScintC - mEtaMinScintC) / mNumberOfRingsScint;
402+
float etaMax = mEtaMinScintC + (ir + 1) * (mEtaMaxScintC - mEtaMinScintC) / mNumberOfRingsScint;
403+
float zmod = mZScintC;
404+
float rmin = getRingSize(zmod, etaMin), rmax = getRingSize(zmod, etaMax);
388405
LOG(info) << "Scintillator ring" << ir + mNumberOfRingsScint << ": from " << rmin << " to " << rmax;
389406
for (int ic = 0; ic < mNumberOfSectors; ic++) {
390407
int cellId = ic + mNumberOfSectors * (ir + mNumberOfRingsScint);
@@ -400,7 +417,7 @@ TGeoVolumeAssembly* Detector::buildModuleScintC()
400417
}
401418
ring->AddNode(nod, cellId);
402419
}
403-
mod->AddNode(ring, ir + 1);
420+
mod->AddNode(ring, 1);
404421
}
405422

406423
return mod;
@@ -412,16 +429,18 @@ TGeoVolumeAssembly* Detector::buildModuleCherA()
412429

413430
const TGeoMedium* medium = gGeoManager->GetMedium("FD3_Glass");
414431

415-
float dphiDeg = 360. / mNumberOfSectors;
432+
float dphiDeg = 360.;// / mNumberOfSectors;
416433

417434
for (int ir = 0; ir < mNumberOfRingsCher; ir++) {
418435
std::string rName = "fd3_ring" + std::to_string(ir + 1 + 2 * mNumberOfRingsScint);
419436
TGeoVolumeAssembly* ring = new TGeoVolumeAssembly(rName.c_str());
420-
float rmin = mRingSizesCher[ir];
421-
float rmax = mRingSizesCher[ir + 1];
437+
float etaMin = mEtaMaxCherA - (ir + 1) * (mEtaMaxCherA - mEtaMinCherA) / mNumberOfRingsCher;
438+
float etaMax = mEtaMaxCherA - ir * (mEtaMaxCherA - mEtaMinCherA) / mNumberOfRingsCher;
439+
float zmod = mZCherA;
440+
float rmin = getRingSize(zmod, etaMax), rmax = getRingSize(zmod, etaMin);
422441
LOG(info) << "Radiator ring" << ir << ": from " << rmin << " to " << rmax;
423442
for (int ic = 0; ic < mNumberOfSectors; ic++) {
424-
int cellId = ic + mNumberOfSectors * (ir + 2 * mNumberOfRingsCher);
443+
int cellId = ic + mNumberOfSectors * (ir + 2 * mNumberOfRingsScint);
425444
std::string nodeName = "fd3_node" + std::to_string(cellId);
426445
float phimin = dphiDeg * ic;
427446
float phimax = dphiDeg * (ic + 1);
@@ -434,7 +453,7 @@ TGeoVolumeAssembly* Detector::buildModuleCherA()
434453
}
435454
ring->AddNode(nod, cellId);
436455
}
437-
mod->AddNode(ring, ir + 1);
456+
mod->AddNode(ring, 1);
438457
}
439458

440459
return mod;
@@ -446,13 +465,15 @@ TGeoVolumeAssembly* Detector::buildModuleCherC()
446465

447466
const TGeoMedium* medium = gGeoManager->GetMedium("FD3_Glass");
448467

449-
float dphiDeg = 360. / mNumberOfSectors;
468+
float dphiDeg = 360.;// / mNumberOfSectors;
450469

451470
for (int ir = 0; ir < mNumberOfRingsCher; ir++) {
452471
std::string rName = "fd3_ring" + std::to_string(ir + 1 + 2 * mNumberOfRingsScint + mNumberOfRingsCher);
453472
TGeoVolumeAssembly* ring = new TGeoVolumeAssembly(rName.c_str());
454-
float rmin = mRingSizesCher[ir];
455-
float rmax = mRingSizesCher[ir + 1];
473+
float etaMin = mEtaMinCherC + ir * (mEtaMaxCherC - mEtaMinCherC) / mNumberOfRingsCher;
474+
float etaMax = mEtaMinCherC + (ir + 1) * (mEtaMaxCherC - mEtaMinCherC) / mNumberOfRingsCher;
475+
float zmod = mZCherC;
476+
float rmin = getRingSize(zmod, etaMin), rmax = getRingSize(zmod, etaMax);
456477
LOG(info) << "Radiator ring" << ir + mNumberOfRingsCher << ": from " << rmin << " to " << rmax;
457478
for (int ic = 0; ic < mNumberOfSectors; ic++) {
458479
int cellId = ic + mNumberOfSectors * (ir + 2* mNumberOfRingsScint + mNumberOfRingsCher);
@@ -468,7 +489,7 @@ TGeoVolumeAssembly* Detector::buildModuleCherC()
468489
}
469490
ring->AddNode(nod, cellId);
470491
}
471-
mod->AddNode(ring, ir + 1);
492+
mod->AddNode(ring, 1);
472493
}
473494

474495
return mod;

0 commit comments

Comments
 (0)