Skip to content

Commit dd70bca

Browse files
authored
ALICE 3: add fully cylindrical IRIS, correct Si thickness, add v3 building (#14979)
* VD layer sensitive silicon 20 um, 80 um non-sens * Add an option for pure cylindrical IRIS * add v3 building option for FT3 * build pure cyl IRIS v3 by default
1 parent 515ba3a commit dd70bca

File tree

8 files changed

+585
-91
lines changed

8 files changed

+585
-91
lines changed

Detectors/Upgrades/ALICE3/FT3/simulation/include/FT3Simulation/Detector.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class Detector : public o2::base::DetImpl<Detector>
116116
void buildFT3V3b();
117117
void buildFT3Scoping();
118118
void buildFT3NewVacuumVessel();
119+
void buildFT3ScopingV3();
119120
void buildFT3FromFile(std::string);
120121

121122
GeometryTGeo* mGeometryTGeo; //! access to geometry details

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

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,65 @@ void Detector::buildFT3NewVacuumVessel()
346346
}
347347
}
348348

349+
void Detector::buildFT3ScopingV3()
350+
{
351+
// Build the FT3 detector according to v3 layout
352+
// https://indico.cern.ch/event/1596309/contributions/6728167/attachments/3190117/5677220/2025-12-10-AW-ALICE3planning.pdf
353+
// Middle disks inner radius 10 cm
354+
// Outer disks inner radius 20 cm
355+
356+
LOG(info) << "Building FT3 Detector: v3 scoping version";
357+
358+
mNumberOfLayers = 6;
359+
float sensorThickness = 30.e-4;
360+
float layersx2X0 = 1.e-2;
361+
std::vector<std::array<float, 5>> layersConfigCSide{
362+
{77., 10.0, 35., layersx2X0}, // {z_layer, r_in, r_out, Layerx2X0}
363+
{100., 10.0, 35., layersx2X0},
364+
{122., 10.0, 35., layersx2X0},
365+
{150., 20.0, 68.f, layersx2X0},
366+
{180., 20.0, 68.f, layersx2X0},
367+
{220., 20.0, 68.f, layersx2X0}};
368+
369+
std::vector<std::array<float, 5>> layersConfigASide{
370+
{77., 10.0, 35., layersx2X0}, // {z_layer, r_in, r_out, Layerx2X0}
371+
{100., 10.0, 35., layersx2X0},
372+
{122., 10.0, 35., layersx2X0},
373+
{150., 20.0, 68.f, layersx2X0},
374+
{180., 20.0, 68.f, layersx2X0},
375+
{220., 20.0, 68.f, layersx2X0}};
376+
377+
mLayerName.resize(2);
378+
mLayerName[0].resize(mNumberOfLayers);
379+
mLayerName[1].resize(mNumberOfLayers);
380+
mLayerID.clear();
381+
mLayers.resize(2);
382+
383+
for (auto direction : {0, 1}) {
384+
for (int layerNumber = 0; layerNumber < mNumberOfLayers; layerNumber++) {
385+
std::string directionName = std::to_string(direction);
386+
std::string layerName = GeometryTGeo::getFT3LayerPattern() + directionName + std::string("_") + std::to_string(layerNumber);
387+
mLayerName[direction][layerNumber] = layerName;
388+
float z, rIn, rOut, x0;
389+
if (direction == 0) { // C-Side
390+
z = layersConfigCSide[layerNumber][0];
391+
rIn = layersConfigCSide[layerNumber][1];
392+
rOut = layersConfigCSide[layerNumber][2];
393+
x0 = layersConfigCSide[layerNumber][3];
394+
} else if (direction == 1) { // A-Side
395+
z = layersConfigASide[layerNumber][0];
396+
rIn = layersConfigASide[layerNumber][1];
397+
rOut = layersConfigASide[layerNumber][2];
398+
x0 = layersConfigASide[layerNumber][3];
399+
}
400+
401+
LOG(info) << "Adding Layer " << layerName << " at z = " << z;
402+
// Add layers
403+
auto& thisLayer = mLayers[direction].emplace_back(direction, layerNumber, layerName, z, rIn, rOut, x0);
404+
}
405+
}
406+
}
407+
349408
//_________________________________________________________________________________________________
350409
void Detector::buildFT3Scoping()
351410
{
@@ -411,7 +470,7 @@ Detector::Detector(bool active)
411470
} else {
412471
switch (ft3BaseParam.geoModel) {
413472
case Default:
414-
buildFT3NewVacuumVessel(); // FT3 after Upgrade days March 2024
473+
buildFT3ScopingV3(); // v3 Dec 25
415474
break;
416475
case Telescope:
417476
buildBasicFT3(ft3BaseParam); // BasicFT3 = Parametrized telescopic detector (equidistant layers)

Detectors/Upgrades/ALICE3/TRK/base/include/TRKBase/Specs.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ namespace VD // TODO: add a primitive segmentation with more granularity wrt 1/4
3434
{
3535
namespace silicon
3636
{
37-
constexpr double thickness{30 * mu}; // thickness of the silicon (should be 10 um epitaxial layer + 20 um substrate)?
37+
constexpr double thickness{20 * mu}; // thickness of the silicon (should be 10 um epitaxial layer + 20 um substrate)?
3838
} // namespace silicon
3939
namespace metalstack
4040
{
41-
constexpr double thickness{0 * mu}; // thickness of the copper metal stack - for the moment it is not implemented
41+
constexpr double thickness{80 * mu}; // thickness of the copper metal stack - for the moment it is not implemented. PL: set to 80 um considering silicon as material
4242
} // namespace metalstack
4343
namespace petal
4444
{

Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/VDGeometryBuilder.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ namespace o2::trk
2424
// Each function builds one local petal assembly (walls + layers + disks)
2525
// and then places/rotates the petal once into the mother volume.
2626

27-
void createIRIS4Geometry(TGeoVolume* motherVolume); // 4 petals, cylindrical L0
28-
void createIRIS4aGeometry(TGeoVolume* motherVolume); // 3 petals, cylindrical L0
29-
void createIRIS5Geometry(TGeoVolume* motherVolume); // 4 petals, rectangular L0
27+
void createIRISGeometryFullCyl(TGeoVolume* motherVolume); // Full-cylinder IRIS geometry (no petals, no gaps, no side walls)
28+
void createIRISGeometryFullCylwithDisks(TGeoVolume* motherVolume); // Full-cylinder IRIS geometry (no petals, no gaps, no side walls) incl. disks
29+
void createIRIS4Geometry(TGeoVolume* motherVolume); // 4 petals, cylindrical L0
30+
void createIRIS4aGeometry(TGeoVolume* motherVolume); // 3 petals, cylindrical L0
31+
void createIRIS5Geometry(TGeoVolume* motherVolume); // 4 petals, rectangular L0
3032

3133
void createSinglePetalDebug(TGeoVolume* motherVolume, int petalID = 0, int nPetals = 4, bool rectangularL0 = false);
3234

Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/VDLayer.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ class VDLayer
3939
protected:
4040
int mLayerNumber{0};
4141
std::string mLayerName;
42-
double mX2X0{0.f}; // Radiation length in units of X0
43-
double mChipThickness{0.f}; // thickness derived from X/X0
44-
double mModuleWidth{4.54f}; // cm
42+
double mX2X0{0.f}; // Radiation length in units of X0
43+
double mChipThickness{0.f}; // thickness derived from X/X0
44+
double mSensorThickness{0.f}; //
45+
double mModuleWidth{4.54f}; // cm
4546

4647
// ClassDef(VDLayer, 1)
4748
};
@@ -54,6 +55,8 @@ class VDCylindricalLayer : public VDLayer
5455
double radius, double phiSpanDeg, double lengthZ, double lengthSensZ);
5556

5657
TGeoVolume* createSensor() const; // builds the sensor volume
58+
TGeoVolume* createChip() const;
59+
TGeoVolume* createMetalStack() const;
5760
void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;
5861

5962
private:
@@ -73,6 +76,8 @@ class VDRectangularLayer : public VDLayer
7376
double width, double lengthZ, double lengthSensZ);
7477

7578
TGeoVolume* createSensor() const;
79+
TGeoVolume* createChip() const;
80+
TGeoVolume* createMetalStack() const;
7681
void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;
7782

7883
private:
@@ -91,6 +96,8 @@ class VDDiskLayer : public VDLayer
9196
double rMin, double rMax, double phiSpanDeg, double zPos);
9297

9398
TGeoVolume* createSensor() const;
99+
TGeoVolume* createChip() const;
100+
TGeoVolume* createMetalStack() const;
94101
void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;
95102

96103
double getZPosition() const { return mZPos; }

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ void Detector::createGeometry()
266266
// Alternatives: createIRIS5Geometry(vTRK); createIRIS4aGeometry(vTRK);
267267

268268
o2::trk::clearVDSensorRegistry();
269-
o2::trk::createIRIS4Geometry(vTRK);
269+
o2::trk::createIRISGeometryFullCyl(vTRK);
270270

271271
// Fill sensor names from registry right after geometry creation
272272
const auto& regs = o2::trk::vdSensorRegistry();

0 commit comments

Comments
 (0)