diff --git a/Detectors/Upgrades/ALICE3/MID/base/include/MI3Base/MI3BaseParam.h b/Detectors/Upgrades/ALICE3/MID/base/include/MI3Base/MI3BaseParam.h index 7061a05bfeb37..913e27e85c207 100644 --- a/Detectors/Upgrades/ALICE3/MID/base/include/MI3Base/MI3BaseParam.h +++ b/Detectors/Upgrades/ALICE3/MID/base/include/MI3Base/MI3BaseParam.h @@ -19,7 +19,19 @@ namespace o2 { namespace mi3 { + +// ** +// ** Parameters for MID base configuration +// ** + +enum MIDLayout : int { + StandardRadius = 0, + ReducedRadius = 1 +}; + struct MIDBaseParam : public o2::conf::ConfigurableParamHelper { + int mLayout = MIDLayout::StandardRadius; + O2ParamDef(MIDBaseParam, "MIDBase"); }; diff --git a/Detectors/Upgrades/ALICE3/MID/simulation/src/Detector.cxx b/Detectors/Upgrades/ALICE3/MID/simulation/src/Detector.cxx index 36f5b376563c0..0eaf401e40596 100644 --- a/Detectors/Upgrades/ALICE3/MID/simulation/src/Detector.cxx +++ b/Detectors/Upgrades/ALICE3/MID/simulation/src/Detector.cxx @@ -126,8 +126,16 @@ void Detector::createGeometry() // Build the MID mLayers.resize(2); - mLayers[0] = MIDLayer(0, GeometryTGeo::composeSymNameLayer(0), 301.f, 500.f); - mLayers[1] = MIDLayer(1, GeometryTGeo::composeSymNameLayer(1), 311.f, 520.f); // arbitrarily reduced to get multiple of 5.2f + auto& midParam = MIDBaseParam::Instance(); + const bool standardRadius = (midParam.mLayout == o2::mi3::MIDLayout::StandardRadius); + + if (standardRadius) { + mLayers[0] = MIDLayer(0, GeometryTGeo::composeSymNameLayer(0), 301.f, 500.f); + mLayers[1] = MIDLayer(1, GeometryTGeo::composeSymNameLayer(1), 311.f, 520.f); // arbitrarily reduced to get multiple of 5.2f + } else { + mLayers[0] = MIDLayer(0, GeometryTGeo::composeSymNameLayer(0), 266.f, 500.f); + mLayers[1] = MIDLayer(1, GeometryTGeo::composeSymNameLayer(1), 276.f, 520.f); + } for (auto& layer : mLayers) { layer.createLayer(vMID); diff --git a/Detectors/Upgrades/ALICE3/Passive/include/Alice3DetectorsPassive/PassiveBaseParam.h b/Detectors/Upgrades/ALICE3/Passive/include/Alice3DetectorsPassive/PassiveBaseParam.h index 3ac53c1bfb92b..671f436aabe7b 100644 --- a/Detectors/Upgrades/ALICE3/Passive/include/Alice3DetectorsPassive/PassiveBaseParam.h +++ b/Detectors/Upgrades/ALICE3/Passive/include/Alice3DetectorsPassive/PassiveBaseParam.h @@ -29,10 +29,16 @@ enum MagnetLayout : int { CopperStabilizer = 1 }; +enum DetLayout : int { + StandardRadius = 0, + ReducedRadius = 1 +}; + struct Alice3PassiveBaseParam : public o2::conf::ConfigurableParamHelper { // Geometry Builder parameters int mLayout = MagnetLayout::AluminiumStabilizer; + int mDetLayout = DetLayout::StandardRadius; O2ParamDef(Alice3PassiveBaseParam, "Alice3PassiveBase"); }; diff --git a/Detectors/Upgrades/ALICE3/Passive/src/Absorber.cxx b/Detectors/Upgrades/ALICE3/Passive/src/Absorber.cxx index 7ce753db89536..924d977247c89 100644 --- a/Detectors/Upgrades/ALICE3/Passive/src/Absorber.cxx +++ b/Detectors/Upgrades/ALICE3/Passive/src/Absorber.cxx @@ -12,6 +12,7 @@ #include #include #include +#include #include // for TGeoTrap #include #include @@ -130,25 +131,52 @@ void Alice3Absorber::ConstructGeometry() } TGeoPcon* absorings = new TGeoPcon(0., 360., 18); - - absorings->DefineSection(0, 500, 236, 274); - absorings->DefineSection(1, 400, 236, 274); - absorings->DefineSection(2, 400, 232.5, 277.5); - absorings->DefineSection(3, 300, 232.5, 277.5); - absorings->DefineSection(4, 300, 227.5, 282.5); - absorings->DefineSection(5, 200, 227.5, 282.5); - absorings->DefineSection(6, 200, 222.5, 287.5); - absorings->DefineSection(7, 100, 222.5, 287.5); - absorings->DefineSection(8, 100, 220, 290); - absorings->DefineSection(9, -100, 220, 290); - absorings->DefineSection(10, -100, 222.5, 287.5); - absorings->DefineSection(11, -200, 222.5, 287.5); - absorings->DefineSection(12, -200, 227.5, 282.5); - absorings->DefineSection(13, -300, 227.5, 282.5); - absorings->DefineSection(14, -300, 232.5, 277.5); - absorings->DefineSection(15, -400, 232.5, 277.5); - absorings->DefineSection(16, -400, 236, 274); - absorings->DefineSection(17, -500, 236, 274); + auto& passiveBaseParam = Alice3PassiveBaseParam::Instance(); + switch (passiveBaseParam.mDetLayout) { + case o2::passive::DetLayout::StandardRadius: + absorings->DefineSection(0, 500, 236, 274); + absorings->DefineSection(1, 400, 236, 274); + absorings->DefineSection(2, 400, 232.5, 277.5); + absorings->DefineSection(3, 300, 232.5, 277.5); + absorings->DefineSection(4, 300, 227.5, 282.5); + absorings->DefineSection(5, 200, 227.5, 282.5); + absorings->DefineSection(6, 200, 222.5, 287.5); + absorings->DefineSection(7, 100, 222.5, 287.5); + absorings->DefineSection(8, 100, 220, 290); + absorings->DefineSection(9, -100, 220, 290); + absorings->DefineSection(10, -100, 222.5, 287.5); + absorings->DefineSection(11, -200, 222.5, 287.5); + absorings->DefineSection(12, -200, 227.5, 282.5); + absorings->DefineSection(13, -300, 227.5, 282.5); + absorings->DefineSection(14, -300, 232.5, 277.5); + absorings->DefineSection(15, -400, 232.5, 277.5); + absorings->DefineSection(16, -400, 236, 274); + absorings->DefineSection(17, -500, 236, 274); + break; + case o2::passive::DetLayout::ReducedRadius: + absorings->DefineSection(0, 500, 201, 239); + absorings->DefineSection(1, 400, 201, 239); + absorings->DefineSection(2, 400, 197.5, 242.5); + absorings->DefineSection(3, 300, 197.5, 242.5); + absorings->DefineSection(4, 300, 192.5, 247.5); + absorings->DefineSection(5, 200, 192.5, 247.5); + absorings->DefineSection(6, 200, 187.5, 252.5); + absorings->DefineSection(7, 100, 187.5, 252.5); + absorings->DefineSection(8, 100, 185, 255); + absorings->DefineSection(9, -100, 185, 255); + absorings->DefineSection(10, -100, 187.5, 252.5); + absorings->DefineSection(11, -200, 187.5, 252.5); + absorings->DefineSection(12, -200, 192.5, 247.5); + absorings->DefineSection(13, -300, 192.5, 247.5); + absorings->DefineSection(14, -300, 197.5, 242.5); + absorings->DefineSection(15, -400, 197.5, 242.5); + absorings->DefineSection(16, -400, 201, 239); + absorings->DefineSection(17, -500, 201, 239); + break; + default: + LOG(fatal) << "Unknown detector layout " << passiveBaseParam.mDetLayout; + break; + } // Insert absorings->SetName("absorings"); diff --git a/Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx b/Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx index 5c94c3e31a244..e6c1171829bfc 100644 --- a/Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx +++ b/Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx @@ -106,11 +106,41 @@ void Alice3Magnet::ConstructGeometry() // Passive Base configuration parameters auto& passiveBaseParam = Alice3PassiveBaseParam::Instance(); - const bool doCopperStabilizer = (passiveBaseParam.mLayout == o2::passive::MagnetLayout::CopperStabilizer); - if (doCopperStabilizer) { - mRestMaterialThickness -= 3.3; // cm Remove the Aluminium stabiliser - mRestMaterialThickness += 2.2; // cm Add the Copper stabiliser - LOG(debug) << "Alice 3 magnet: using Copper Stabilizer with thickness " << mRestMaterialThickness << " cm"; + + switch (passiveBaseParam.mDetLayout) { + case o2::passive::DetLayout::StandardRadius: + // Defined in the header file + break; + case o2::passive::DetLayout::ReducedRadius: + mInnerWrapInnerRadius = 125.f; // cm + mInnerWrapThickness = 1.f; // cm + mCoilInnerRadius = 145.f; // cm + mCoilThickness = 0.3f; // cm + mRestMaterialRadius = 145.3f; // cm + mRestMaterialThickness = 6.8f; // cm + mOuterWrapInnerRadius = 165.f; // cm + mOuterWrapThickness = 3.f; // cm + mZLength = 800.f; // cm + break; + default: + LOG(fatal) << "Unknown detector layout " << passiveBaseParam.mDetLayout; + break; + } + + bool doCopperStabilizer = false; + switch (passiveBaseParam.mLayout) { + case o2::passive::MagnetLayout::AluminiumStabilizer: + // Handled in the header file + break; + case o2::passive::MagnetLayout::CopperStabilizer: + doCopperStabilizer = true; + mRestMaterialThickness -= 3.3; // cm Remove the Aluminium stabiliser + mRestMaterialThickness += 2.2; // cm Add the Copper stabiliser + LOG(debug) << "Alice 3 magnet: using Copper Stabilizer with thickness " << mRestMaterialThickness << " cm"; + break; + default: + LOG(fatal) << "Unknown magnet layout " << passiveBaseParam.mLayout; + break; } TGeoManager* geoManager = gGeoManager;