Skip to content

Commit 023cef5

Browse files
authored
ALICE 3: Add FWD and BWD RICH + Fixes to TOFs and cosmetics (#12738)
* Make RICH default 23 rings, enable even layout * Start fwd/bwd RICH development * Add Fwd and Bwd RICH + fix TOFs * Cosmetics + fixes * Fix wrongly formatted Form
1 parent 30ace10 commit 023cef5

12 files changed

Lines changed: 288 additions & 58 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ void Detector::createGeometry()
125125
TGeoTube* ecalShape = new TGeoTube("ECLsh", mInnerRadius, mOuterRadius, mLength);
126126
TGeoVolume* ecalVol = new TGeoVolume("ECL", ecalShape, medPb);
127127
ecalVol->SetLineColor(kCyan + 1);
128-
ecalVol->SetTransparency(50);
128+
ecalVol->SetTransparency(0);
129129
vECal->AddNode(ecalVol, 1, nullptr);
130130
}
131131

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ void Detector::configLayers(bool itof, bool otof, bool ftof, bool btof)
6565
mOTOFLayer = OTOFLayer(std::string{GeometryTGeo::getOTOFLayerPattern()}, 85.f, 0.f, 680.f, 0.f, 0.02f, true); // oTOF
6666
}
6767
if (ftof) {
68-
mFTOFLayer = FTOFLayer(std::string{GeometryTGeo::getFTOFLayerPattern()}, 15.f, 150.f, 0.f, 405.f, 0.02f, false); // fTOF
68+
mFTOFLayer = FTOFLayer(std::string{GeometryTGeo::getFTOFLayerPattern()}, 15.f, 100.f, 0.f, 370.f, 0.02f, false); // fTOF
6969
}
7070
if (btof) {
71-
mBTOFLayer = BTOFLayer(std::string{GeometryTGeo::getBTOFLayerPattern()}, 15.f, 150.f, 0.f, -405.f, 0.02f, false); // bTOF
71+
mBTOFLayer = BTOFLayer(std::string{GeometryTGeo::getBTOFLayerPattern()}, 15.f, 100.f, 0.f, -370.f, 0.02f, false); // bTOF
7272
}
7373
}
7474

Detectors/Upgrades/ALICE3/MID/simulation/src/MIDLayer.cxx

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,7 @@ MIDLayer::Stave::Module::Sensor::Sensor(std::string sensorName,
137137
void MIDLayer::createLayer(TGeoVolume* motherVolume)
138138
{
139139
LOGP(debug, "Creating MIDLayer: {}", mName);
140-
TGeoTube* layer = new TGeoTube(mName.c_str(), mRadius, mRadius + 10, mLength);
141-
auto* airMed = gGeoManager->GetMedium("MI3_AIR");
142-
TGeoVolume* layerVolume = new TGeoVolume(mName.c_str(), layer, airMed);
143-
layerVolume->SetVisibility(true);
144-
layerVolume->SetTransparency(0);
140+
TGeoVolumeAssembly* layerVolume = new TGeoVolumeAssembly(mName.c_str());
145141
motherVolume->AddNode(layerVolume, 0);
146142
for (auto& stave : mStaves) {
147143
stave.createStave(layerVolume);
@@ -151,11 +147,7 @@ void MIDLayer::createLayer(TGeoVolume* motherVolume)
151147
void MIDLayer::Stave::createStave(TGeoVolume* motherVolume)
152148
{
153149
LOGP(debug, "\tCreating MIDStave: {} layer: {}", mName, mLayer);
154-
TGeoBBox* stave = new TGeoBBox(mName.c_str(), mWidth, mThickness, mLength);
155-
auto* airMed = gGeoManager->GetMedium("MI3_AIR");
156-
TGeoVolume* staveVolume = new TGeoVolume(mName.c_str(), stave, airMed);
157-
staveVolume->SetVisibility(true);
158-
staveVolume->SetTransparency(0);
150+
TGeoVolumeAssembly* staveVolume = new TGeoVolumeAssembly(mName.c_str());
159151
// Create the modules
160152
for (auto& module : mModules) {
161153
module.createModule(staveVolume);
@@ -173,16 +165,8 @@ void MIDLayer::Stave::Module::createModule(TGeoVolume* motherVolume)
173165
// Module is an air box with floating bars inside for the moment
174166
auto sumWidth = ((mBarWidth * 2 + mBarSpacing) * mNBars) / 2;
175167
LOGP(debug, "\t\t\tCreating MIDModule: {} with ", mName);
176-
TGeoBBox* module = nullptr;
177-
if (!mLayer) {
178-
module = new TGeoBBox(mName.c_str(), sumWidth, mBarThickness, mBarLength);
179-
} else {
180-
module = new TGeoBBox(mName.c_str(), mBarLength, mBarThickness, sumWidth);
181-
}
182-
auto* airMed = gGeoManager->GetMedium("MI3_AIR");
183-
TGeoVolume* moduleVolume = new TGeoVolume(mName.c_str(), module, airMed);
184-
moduleVolume->SetVisibility(true);
185-
moduleVolume->SetTransparency(0);
168+
TGeoVolumeAssembly* moduleVolume = new TGeoVolumeAssembly(mName.c_str() /*, module, airMed*/);
169+
186170
// Create the bars
187171
for (auto& sensor : mSensors) {
188172
sensor.createSensor(moduleVolume);
@@ -213,9 +197,11 @@ void MIDLayer::Stave::Module::Sensor::createSensor(TGeoVolume* motherVolume)
213197
if (!mLayer) {
214198
sensorTrans = new TGeoTranslation(mModuleOffset + 2 * totWidth * mNumber + totWidth, 0, 0);
215199
sensorVolume->SetLineColor(kBlue);
200+
sensorVolume->SetTransparency(50);
216201
} else {
217202
sensorTrans = new TGeoTranslation(0, 0, mModuleOffset + 2 * totWidth * mNumber + totWidth);
218203
sensorVolume->SetLineColor(kPink);
204+
sensorVolume->SetTransparency(50);
219205
}
220206
motherVolume->AddNode(sensorVolume, 0, sensorTrans);
221207
}

Detectors/Upgrades/ALICE3/Passive/src/Absorber.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ void Alice3Absorber::ConstructGeometry()
156156
TGeoVolume* abso = new TGeoVolume("Absorber", absorings, kMedIron);
157157

158158
abso->SetVisibility(1);
159-
abso->SetLineColor(kGray);
159+
abso->SetLineColor(kBlack);
160160

161161
//
162162
// Adding volumes to mother volume

Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,10 @@ void Alice3Magnet::ConstructGeometry()
122122
TGeoVolume* outerWrapVol = new TGeoVolume("outerWrap", outerLayer, kMedAl);
123123

124124
innerWrapVol->SetLineColor(kRed);
125-
innerVacuumVol->SetLineColor(kGray);
126-
innerVacuumVol->SetVisibility(1);
127-
coilsVol->SetLineColor(kOrange);
125+
innerVacuumVol->SetLineColor(kRed);
126+
coilsVol->SetLineColor(kRed);
128127
restMaterialVol->SetLineColor(kRed);
129-
outerVacuumVol->SetLineColor(kGray);
130-
outerVacuumVol->SetVisibility(1);
128+
outerVacuumVol->SetLineColor(kRed);
131129
outerWrapVol->SetLineColor(kRed);
132130

133131
new TGeoVolumeAssembly("magnet");

Detectors/Upgrades/ALICE3/RICH/base/include/RICHBase/GeometryTGeo.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
3030
static const char* getRICHRingPattern() { return sRingName.c_str(); }
3131
static const char* getRICHChipPattern() { return sChipName.c_str(); }
3232
static const char* getRICHSensorPattern() { return sSensorName.c_str(); }
33+
static const char* getRICHSensorFWDPattern() { return sSensorFWDName.c_str(); }
34+
static const char* getRICHSensorBWDPattern() { return sSensorBWDName.c_str(); }
3335

3436
static const char* composeSymNameRICH(int d)
3537
{
@@ -38,12 +40,16 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
3840
static const char* composeSymNameRing(int d, int ring);
3941
static const char* composeSymNameChip(int d, int ring);
4042
static const char* composeSymNameSensor(int d, int ring);
43+
static const char* composeSymNameSensorFWD(int d);
44+
static const char* composeSymNameSensorBWD(int d);
4145

4246
protected:
4347
static std::string sVolumeName;
4448
static std::string sRingName;
4549
static std::string sChipName;
4650
static std::string sSensorName;
51+
static std::string sSensorFWDName;
52+
static std::string sSensorBWDName;
4753

4854
private:
4955
static std::unique_ptr<o2::rich::GeometryTGeo> sInstance;

Detectors/Upgrades/ALICE3/RICH/base/include/RICHBase/RICHBaseParam.h

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,28 @@ struct RICHBaseParam : public o2::conf::ConfigurableParamHelper<RICHBaseParam> {
2626
float radiatorThickness = 2.0; // cm
2727
float detectorThickness = 0.2; // cm
2828
float zRichLength = 700.0; // cm
29-
int nRings = 21;
29+
int nRings = 25;
3030
int nTiles = 36;
31-
std::string configFile = "";
31+
bool oddGeom = false;
32+
33+
// FWD and BWD RICH
34+
bool enableFWDRich = true;
35+
bool enableBWDRich = true;
36+
37+
float rFWDMin = 13.7413f;
38+
float rFWDMax = 103.947f;
39+
40+
// Aerogel:
41+
float zAerogelMin = 375.f;
42+
float zAerogelMax = 377.f;
43+
44+
// Argon:
45+
float zArgonMin = 377.f;
46+
float zArgonMax = 407.f;
47+
48+
// Detector:
49+
float zSiliconMin = 407.f;
50+
float zSiliconMax = 407.2f;
3251

3352
O2ParamDef(RICHBaseParam, "RICHBase");
3453
};

Detectors/Upgrades/ALICE3/RICH/base/src/GeometryTGeo.cxx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ std::string GeometryTGeo::sVolumeName = "RICHV";
2222
std::string GeometryTGeo::sRingName = "RICHRing";
2323
std::string GeometryTGeo::sChipName = "RICHChip";
2424
std::string GeometryTGeo::sSensorName = "RICHSensor";
25+
std::string GeometryTGeo::sSensorFWDName = "FWDRICHSensor"; // only one big sensor for now
26+
std::string GeometryTGeo::sSensorBWDName = "BWDRICHSensor"; // only one big sensor for now
2527

2628
GeometryTGeo::GeometryTGeo(bool build, int loadTrans) : DetMatrixCache()
2729
{
@@ -74,5 +76,15 @@ const char* GeometryTGeo::composeSymNameSensor(int d, int rg)
7476
return Form("%s/%s%d", composeSymNameChip(d, rg), getRICHSensorPattern(), rg);
7577
}
7678

79+
const char* GeometryTGeo::composeSymNameSensorFWD(int d)
80+
{
81+
return Form("%s/%s", composeSymNameRICH(d), getRICHSensorFWDPattern());
82+
}
83+
84+
const char* GeometryTGeo::composeSymNameSensorBWD(int d)
85+
{
86+
return Form("%s/%s", composeSymNameRICH(d), getRICHSensorBWDPattern());
87+
}
88+
7789
} // namespace rich
7890
} // namespace o2

Detectors/Upgrades/ALICE3/RICH/simulation/include/RICHSimulation/Detector.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,9 @@ class Detector : public o2::base::DetImpl<Detector>
6262
return nullptr;
6363
}
6464

65-
void configDefault();
66-
void configFromFile(std::string fileName = "alice3_RICH_layout.txt");
67-
void configToFile(std::string fileName = "alice3_RICH_layout.txt");
68-
6965
void createMaterials();
7066
void createGeometry();
71-
void prepareEvenLayout();
72-
void prepareOddLayout();
67+
void prepareLayout();
7368
void createRings(TGeoVolume*);
7469

7570
private:
@@ -110,6 +105,11 @@ class Detector : public o2::base::DetImpl<Detector>
110105
std::vector<double> mR0PhotoDet;
111106
template <typename Det>
112107
friend class o2::base::DetImpl;
108+
109+
// FWD and BWD RICH
110+
FWDRich mFWDRich;
111+
BWDRich mBWDRich;
112+
113113
ClassDefOverride(Detector, 1);
114114
};
115115
} // namespace rich

Detectors/Upgrades/ALICE3/RICH/simulation/include/RICHSimulation/RICHRing.h

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,73 @@ class Ring
6666
ClassDef(Ring, 0);
6767
};
6868

69+
// Definitions for fwd and bwd RICH are put here
70+
class FWDRich
71+
{
72+
public:
73+
FWDRich() = default;
74+
FWDRich(std::string name,
75+
float rMin,
76+
float rMax,
77+
float zAerogelMin,
78+
float dZAerogel,
79+
float zArgonMin,
80+
float dZArgon,
81+
float zSiliconMin,
82+
float dZSilicon);
83+
void createFWDRich(TGeoVolume* motherVolume);
84+
85+
protected:
86+
std::string mName;
87+
float mRmin;
88+
float mRmax;
89+
90+
// Aerogel:
91+
float mZAerogelMin;
92+
float mDZAerogel;
93+
94+
// Argon:
95+
float mZArgonMin;
96+
float mDZArgon;
97+
98+
// Silicon:
99+
float mZSiliconMin;
100+
float mDZSilicon;
101+
};
102+
103+
class BWDRich
104+
{
105+
public:
106+
BWDRich() = default;
107+
BWDRich(std::string name,
108+
float rMin,
109+
float rMax,
110+
float zAerogelMin,
111+
float dZAerogel,
112+
float zArgonMin,
113+
float dZArgon,
114+
float zSiliconMin,
115+
float dZSilicon);
116+
void createBWDRich(TGeoVolume* motherVolume);
117+
118+
protected:
119+
std::string mName;
120+
float mRmin;
121+
float mRmax;
122+
123+
// Aerogel:
124+
float mZAerogelMin;
125+
float mDZAerogel;
126+
127+
// Argon:
128+
float mZArgonMin;
129+
float mDZArgon;
130+
131+
// Silicon:
132+
float mZSiliconMin;
133+
float mDZSilicon;
134+
};
135+
69136
} // namespace rich
70137
} // namespace o2
71138
#endif // ALICEO2_RICH_RING_H

0 commit comments

Comments
 (0)