Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ class Detector : public o2::base::DetImpl<Detector>
void buildFT3V3b();
void buildFT3Scoping();
void buildFT3NewVacuumVessel();
void buildFT3ScopingV3();
void buildFT3FromFile(std::string);

GeometryTGeo* mGeometryTGeo; //! access to geometry details
Expand Down
61 changes: 60 additions & 1 deletion Detectors/Upgrades/ALICE3/FT3/simulation/src/Detector.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,65 @@ void Detector::buildFT3NewVacuumVessel()
}
}

void Detector::buildFT3ScopingV3()
{
// Build the FT3 detector according to v3 layout
// https://indico.cern.ch/event/1596309/contributions/6728167/attachments/3190117/5677220/2025-12-10-AW-ALICE3planning.pdf
// Middle disks inner radius 10 cm
// Outer disks inner radius 20 cm

LOG(info) << "Building FT3 Detector: v3 scoping version";

mNumberOfLayers = 6;
float sensorThickness = 30.e-4;
float layersx2X0 = 1.e-2;
std::vector<std::array<float, 5>> layersConfigCSide{
{77., 10.0, 35., layersx2X0}, // {z_layer, r_in, r_out, Layerx2X0}
{100., 10.0, 35., layersx2X0},
{122., 10.0, 35., layersx2X0},
{150., 20.0, 68.f, layersx2X0},
{180., 20.0, 68.f, layersx2X0},
{220., 20.0, 68.f, layersx2X0}};

std::vector<std::array<float, 5>> layersConfigASide{
{77., 10.0, 35., layersx2X0}, // {z_layer, r_in, r_out, Layerx2X0}
{100., 10.0, 35., layersx2X0},
{122., 10.0, 35., layersx2X0},
{150., 20.0, 68.f, layersx2X0},
{180., 20.0, 68.f, layersx2X0},
{220., 20.0, 68.f, layersx2X0}};

mLayerName.resize(2);
mLayerName[0].resize(mNumberOfLayers);
mLayerName[1].resize(mNumberOfLayers);
mLayerID.clear();
mLayers.resize(2);

for (auto direction : {0, 1}) {
for (int layerNumber = 0; layerNumber < mNumberOfLayers; layerNumber++) {
std::string directionName = std::to_string(direction);
std::string layerName = GeometryTGeo::getFT3LayerPattern() + directionName + std::string("_") + std::to_string(layerNumber);
mLayerName[direction][layerNumber] = layerName;
float z, rIn, rOut, x0;
if (direction == 0) { // C-Side
z = layersConfigCSide[layerNumber][0];
rIn = layersConfigCSide[layerNumber][1];
rOut = layersConfigCSide[layerNumber][2];
x0 = layersConfigCSide[layerNumber][3];
} else if (direction == 1) { // A-Side
z = layersConfigASide[layerNumber][0];
rIn = layersConfigASide[layerNumber][1];
rOut = layersConfigASide[layerNumber][2];
x0 = layersConfigASide[layerNumber][3];
}

LOG(info) << "Adding Layer " << layerName << " at z = " << z;
// Add layers
auto& thisLayer = mLayers[direction].emplace_back(direction, layerNumber, layerName, z, rIn, rOut, x0);
}
}
}

//_________________________________________________________________________________________________
void Detector::buildFT3Scoping()
{
Expand Down Expand Up @@ -411,7 +470,7 @@ Detector::Detector(bool active)
} else {
switch (ft3BaseParam.geoModel) {
case Default:
buildFT3NewVacuumVessel(); // FT3 after Upgrade days March 2024
buildFT3ScopingV3(); // v3 Dec 25
break;
case Telescope:
buildBasicFT3(ft3BaseParam); // BasicFT3 = Parametrized telescopic detector (equidistant layers)
Expand Down
4 changes: 2 additions & 2 deletions Detectors/Upgrades/ALICE3/TRK/base/include/TRKBase/Specs.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ namespace VD // TODO: add a primitive segmentation with more granularity wrt 1/4
{
namespace silicon
{
constexpr double thickness{30 * mu}; // thickness of the silicon (should be 10 um epitaxial layer + 20 um substrate)?
constexpr double thickness{20 * mu}; // thickness of the silicon (should be 10 um epitaxial layer + 20 um substrate)?
} // namespace silicon
namespace metalstack
{
constexpr double thickness{0 * mu}; // thickness of the copper metal stack - for the moment it is not implemented
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
} // namespace metalstack
namespace petal
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@ namespace o2::trk
// Each function builds one local petal assembly (walls + layers + disks)
// and then places/rotates the petal once into the mother volume.

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,10 @@ class VDLayer
protected:
int mLayerNumber{0};
std::string mLayerName;
double mX2X0{0.f}; // Radiation length in units of X0
double mChipThickness{0.f}; // thickness derived from X/X0
double mModuleWidth{4.54f}; // cm
double mX2X0{0.f}; // Radiation length in units of X0
double mChipThickness{0.f}; // thickness derived from X/X0
double mSensorThickness{0.f}; //
double mModuleWidth{4.54f}; // cm

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

TGeoVolume* createSensor() const; // builds the sensor volume
TGeoVolume* createChip() const;
TGeoVolume* createMetalStack() const;
void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;

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

TGeoVolume* createSensor() const;
TGeoVolume* createChip() const;
TGeoVolume* createMetalStack() const;
void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;

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

TGeoVolume* createSensor() const;
TGeoVolume* createChip() const;
TGeoVolume* createMetalStack() const;
void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;

double getZPosition() const { return mZPos; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ void Detector::createGeometry()
// Alternatives: createIRIS5Geometry(vTRK); createIRIS4aGeometry(vTRK);

o2::trk::clearVDSensorRegistry();
o2::trk::createIRIS4Geometry(vTRK);
o2::trk::createIRISGeometryFullCyl(vTRK);

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