diff --git a/Detectors/Upgrades/ALICE3/Passive/CMakeLists.txt b/Detectors/Upgrades/ALICE3/Passive/CMakeLists.txt index 2689130c495d9..2bd732dfe3b31 100644 --- a/Detectors/Upgrades/ALICE3/Passive/CMakeLists.txt +++ b/Detectors/Upgrades/ALICE3/Passive/CMakeLists.txt @@ -12,6 +12,7 @@ o2_add_library(Alice3DetectorsPassive SOURCES src/Pipe.cxx src/PassiveBase.cxx + src/PassiveBaseParam.cxx src/Absorber.cxx src/Magnet.cxx PUBLIC_LINK_LIBRARIES O2::Field O2::DetectorsBase O2::SimConfig) @@ -19,6 +20,7 @@ o2_add_library(Alice3DetectorsPassive o2_target_root_dictionary(Alice3DetectorsPassive HEADERS include/Alice3DetectorsPassive/Pipe.h include/Alice3DetectorsPassive/PassiveBase.h + include/Alice3DetectorsPassive/PassiveBaseParam.h include/Alice3DetectorsPassive/Absorber.h include/Alice3DetectorsPassive/Magnet.h LINKDEF src/PassiveLinkDef.h) diff --git a/Detectors/Upgrades/ALICE3/Passive/include/Alice3DetectorsPassive/PassiveBaseParam.h b/Detectors/Upgrades/ALICE3/Passive/include/Alice3DetectorsPassive/PassiveBaseParam.h new file mode 100644 index 0000000000000..3ac53c1bfb92b --- /dev/null +++ b/Detectors/Upgrades/ALICE3/Passive/include/Alice3DetectorsPassive/PassiveBaseParam.h @@ -0,0 +1,43 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +#ifndef ALICEO2_PASSIVE_BASEPARAM_H_ +#define ALICEO2_PASSIVE_BASEPARAM_H_ + +#include "CommonUtils/ConfigurableParam.h" +#include "CommonUtils/ConfigurableParamHelper.h" + +namespace o2 +{ +namespace passive +{ + +// ** +// ** Parameters for Passive base configuration +// ** + +enum MagnetLayout : int { + AluminiumStabilizer = 0, + CopperStabilizer = 1 +}; + +struct Alice3PassiveBaseParam : public o2::conf::ConfigurableParamHelper { + // Geometry Builder parameters + + int mLayout = MagnetLayout::AluminiumStabilizer; + + O2ParamDef(Alice3PassiveBaseParam, "Alice3PassiveBase"); +}; + +} // namespace passive +} // end namespace o2 + +#endif // ALICEO2_PASSIVE_BASEPARAM_H_ diff --git a/Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx b/Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx index 3e3e6590720cf..5c94c3e31a244 100644 --- a/Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx +++ b/Detectors/Upgrades/ALICE3/Passive/src/Magnet.cxx @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -54,11 +55,24 @@ void Alice3Magnet::createMaterials() // | Support cylinder | 20 | 8.896 | 0.225 | // | Al-strip | 1 | 8.896 | 0.011 | // | NbTi/Cu | 3 | 1.598 | 0.188 | - // | Insulation | 11 | 17.64 | 0.062 | + // | Insulation | 11 | 17.64 | 0.062 | // | Al-stabiliser | 33 | 8.896 | 0.371 | // | Inner cryostat | 10 | 8.896 | 0.112 | // | Outer cryostat | 30 | 8.896 | 0.337 | // +------------------+-------------------------+----------+--------+ + // Update: 2025-06-16 enabledby setting Alice3PassiveBase.mLayout=1 + // +------------------+-------------------------+----------+--------+ + // | layer | effective thickness [mm]| X0 [cm] | X0 [%] | + // +------------------+-------------------------+----------+--------+ + // | Support cylinder | 20 | 8.896 | 0.225 | + // | Al-strip | 1 | 8.896 | 0.011 | + // | NbTi/Cu | 3 | 1.598 | 0.188 | + // | Insulation | 11 | 17.64 | 0.062 | + // | Cu-stabiliser | 22 | 1.436 | 1.532 | + // | Inner cryostat | 10 | 8.896 | 0.112 | + // | Outer cryostat | 30 | 8.896 | 0.337 | + // | total | | | 2.468 | + // +------------------+-------------------------+----------+--------+ // Geometry will be oversimplified in two wrapping cylindrical Al layers (symmetric for the time being) with a Copper layer in between. // @@ -90,6 +104,15 @@ void Alice3Magnet::ConstructGeometry() { createMaterials(); + // 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"; + } + TGeoManager* geoManager = gGeoManager; TGeoVolume* barrel = geoManager->GetVolume("barrel"); if (!barrel) { @@ -102,22 +125,22 @@ void Alice3Magnet::ConstructGeometry() auto kMedVac = matmgr.getTGeoMedium("ALICE3_MAGNET_VACUUM"); // inner wrap - LOGP(debug, "Alice 3 magnet: creating inner wrap with inner radius {} and thickness {}", mInnerWrapInnerRadius, mInnerWrapThickness); + LOGP(debug, "Alice 3 magnet: creating inner wrap with inner radius {} cm and thickness {} cm", mInnerWrapInnerRadius, mInnerWrapThickness); TGeoTube* innerLayer = new TGeoTube(mInnerWrapInnerRadius, mInnerWrapInnerRadius + mInnerWrapThickness, mZLength / 2); TGeoTube* innerVacuum = new TGeoTube(mInnerWrapInnerRadius + mInnerWrapThickness, mCoilInnerRadius, mZLength / 2); // coils layer - LOGP(debug, "Alice 3 magnet: creating coils layer with inner radius {} and thickness {}", mCoilInnerRadius, mCoilThickness); + LOGP(debug, "Alice 3 magnet: creating coils layer with inner radius {} cm and thickness {} cm", mCoilInnerRadius, mCoilThickness); TGeoTube* coilsLayer = new TGeoTube(mCoilInnerRadius, mCoilInnerRadius + mCoilThickness, mZLength / 2); TGeoTube* restMaterial = new TGeoTube(mRestMaterialRadius, mRestMaterialRadius + mRestMaterialThickness, mZLength / 2); TGeoTube* outerVacuum = new TGeoTube(mRestMaterialRadius + mRestMaterialThickness, mOuterWrapInnerRadius, mZLength / 2); // outer wrap - LOGP(debug, "Alice 3 magnet: creating outer wrap with inner radius {} and thickness {}", mOuterWrapInnerRadius, mOuterWrapThickness); + LOGP(debug, "Alice 3 magnet: creating outer wrap with inner radius {} cm and thickness {} cm", mOuterWrapInnerRadius, mOuterWrapThickness); TGeoTube* outerLayer = new TGeoTube(mOuterWrapInnerRadius, mOuterWrapInnerRadius + mOuterWrapThickness, mZLength / 2); TGeoVolume* innerWrapVol = new TGeoVolume("innerWrap", innerLayer, kMedAl); TGeoVolume* innerVacuumVol = new TGeoVolume("innerVacuum", innerVacuum, kMedVac); TGeoVolume* coilsVol = new TGeoVolume("coils", coilsLayer, kMedCu); - TGeoVolume* restMaterialVol = new TGeoVolume("restMaterial", restMaterial, kMedAl); + TGeoVolume* restMaterialVol = new TGeoVolume("restMaterial", restMaterial, doCopperStabilizer ? kMedCu : kMedAl); TGeoVolume* outerVacuumVol = new TGeoVolume("outerVacuum", outerVacuum, kMedVac); TGeoVolume* outerWrapVol = new TGeoVolume("outerWrap", outerLayer, kMedAl); diff --git a/Detectors/Upgrades/ALICE3/Passive/src/PassiveBaseParam.cxx b/Detectors/Upgrades/ALICE3/Passive/src/PassiveBaseParam.cxx new file mode 100644 index 0000000000000..6b6a6191f0bf5 --- /dev/null +++ b/Detectors/Upgrades/ALICE3/Passive/src/PassiveBaseParam.cxx @@ -0,0 +1,13 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +#include "Alice3DetectorsPassive/PassiveBaseParam.h" +O2ParamImpl(o2::passive::Alice3PassiveBaseParam); diff --git a/Detectors/Upgrades/ALICE3/Passive/src/PassiveLinkDef.h b/Detectors/Upgrades/ALICE3/Passive/src/PassiveLinkDef.h index daac6de56a124..803d308671536 100644 --- a/Detectors/Upgrades/ALICE3/Passive/src/PassiveLinkDef.h +++ b/Detectors/Upgrades/ALICE3/Passive/src/PassiveLinkDef.h @@ -16,6 +16,7 @@ #pragma link off all functions; #pragma link C++ class o2::passive::Alice3PassiveBase + ; +#pragma link C++ class o2::passive::Alice3PassiveBaseParam + ; #pragma link C++ class o2::passive::Alice3Pipe + ; #pragma link C++ class o2::passive::Alice3Absorber + ; #pragma link C++ class o2::passive::Alice3Magnet + ;