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
2 changes: 1 addition & 1 deletion Detectors/ITSMFT/ITS/base/include/ITSBase/GeometryTGeo.h
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ class GeometryTGeo : public o2::itsmft::GeometryTGeo
static const char* getITS3PixelArrayPattern(int layer) { return Form("%s%d", getITS3PixelArrayPatternRaw(), layer); };

/// sym name of the layer
static const char* composeSymNameITS(bool isITS3 = false);
static const char* composeSymNameITS();
/// sym name of the layer
static const char* composeSymNameLayer(int lr, bool isITS3 = false);

Expand Down
8 changes: 1 addition & 7 deletions Detectors/ITSMFT/ITS/base/src/GeometryTGeo.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -290,14 +290,8 @@ bool GeometryTGeo::getChipId(int index, int& lay, int& hba, int& sta, int& hsta,
}

//__________________________________________________________________________
const char* GeometryTGeo::composeSymNameITS(bool isITS3)
const char* GeometryTGeo::composeSymNameITS()
{
if (isITS3) {
#ifdef ENABLE_UPGRADES
return o2::detectors::DetID(o2::detectors::DetID::IT3).getName();
#endif
}

return o2::detectors::DetID(o2::detectors::DetID::ITS).getName();
}

Expand Down
21 changes: 8 additions & 13 deletions Detectors/ITSMFT/ITS/simulation/src/Detector.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ using Segmentation = o2::itsmft::SegmentationAlpide;
using namespace o2::its;

#ifdef ENABLE_UPGRADES
#include "ITS3Simulation/DescriptorInnerBarrelITS3.h"
using namespace o2::its3;
#endif

Expand Down Expand Up @@ -1106,7 +1107,7 @@ void Detector::addAlignableVolumes() const

TString detName = GetName();
TString path = Form("/cave_1/barrel_1/%s_2", GeometryTGeo::getITSVolPattern());
TString sname = GeometryTGeo::composeSymNameITS((detName == "IT3"));
TString sname = GeometryTGeo::composeSymNameITS();

LOG(debug) << sname << " <-> " << path;

Expand All @@ -1117,15 +1118,19 @@ void Detector::addAlignableVolumes() const
Int_t lastUID = 0;
for (Int_t lr = 0; lr < mNumberLayers; lr++) {
if (lr < mNumberInnerLayers) {
#ifdef ENABLE_UPGRADES
if (detName == "ITS") {
((DescriptorInnerBarrelITS2*)mDescriptorIB.get())->addAlignableVolumesLayer(lr, mWrapperLayerId[lr], path, lastUID);
} else {
((DescriptorInnerBarrelITS3*)mDescriptorIB.get())->addAlignableVolumesLayer(lr, mWrapperLayerId[lr], path, lastUID);
}
#else
((DescriptorInnerBarrelITS2*)mDescriptorIB.get())->addAlignableVolumesLayer(lr, mWrapperLayerId[lr], path, lastUID);
#endif
} else {
addAlignableVolumesLayer(lr, path, lastUID);
}
}

return;
}

void Detector::addAlignableVolumesLayer(int lr, TString& parent, Int_t& lastUID) const
Expand All @@ -1148,8 +1153,6 @@ void Detector::addAlignableVolumesLayer(int lr, TString& parent, Int_t& lastUID)
for (Int_t hb = start; hb < nhbarrel; hb++) {
addAlignableVolumesHalfBarrel(lr, hb, path, lastUID);
}

return;
}

void Detector::addAlignableVolumesHalfBarrel(Int_t lr, Int_t hb, TString& parent, Int_t& lastUID) const
Expand Down Expand Up @@ -1177,8 +1180,6 @@ void Detector::addAlignableVolumesHalfBarrel(Int_t lr, Int_t hb, TString& parent
for (int st = 0; st < nstaves; st++) {
addAlignableVolumesStave(lr, hb, st, path, lastUID);
}

return;
}

void Detector::addAlignableVolumesStave(Int_t lr, Int_t hb, Int_t st, TString& parent, Int_t& lastUID) const
Expand All @@ -1205,8 +1206,6 @@ void Detector::addAlignableVolumesStave(Int_t lr, Int_t hb, Int_t st, TString& p
for (Int_t sst = start; sst < nhstave; sst++) {
addAlignableVolumesHalfStave(lr, hb, st, sst, path, lastUID);
}

return;
}

void Detector::addAlignableVolumesHalfStave(Int_t lr, Int_t hb, Int_t st, Int_t hst, TString& parent, Int_t& lastUID) const
Expand Down Expand Up @@ -1236,8 +1235,6 @@ void Detector::addAlignableVolumesHalfStave(Int_t lr, Int_t hb, Int_t st, Int_t
for (Int_t md = start; md < nmodules; md++) {
addAlignableVolumesModule(lr, hb, st, hst, md, path, lastUID);
}

return;
}

void Detector::addAlignableVolumesModule(Int_t lr, Int_t hb, Int_t st, Int_t hst, Int_t md, TString& parent, Int_t& lastUID) const
Expand Down Expand Up @@ -1266,8 +1263,6 @@ void Detector::addAlignableVolumesModule(Int_t lr, Int_t hb, Int_t st, Int_t hst
for (Int_t ic = 0; ic < nchips; ic++) {
addAlignableVolumesChip(lr, hb, st, hst, md, ic, path, lastUID);
}

return;
}

void Detector::addAlignableVolumesChip(Int_t lr, Int_t hb, Int_t st, Int_t hst, Int_t md, Int_t ch, TString& parent,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,19 @@ class DescriptorInnerBarrelITS3 : public o2::its::DescriptorInnerBarrel
void createLayer(int idLayer, TGeoVolume* dest);
void createServices(TGeoVolume* dest);
void configure() {}
void addAlignableVolumesLayer(int idLayer, int wrapperLayerId, TString& parentPath, int& lastUID) const;

protected:
int mNumLayers{constants::nLayers};

// wrapper volume properties
static constexpr double mTolerance{1e-3};
static constexpr double mWrapperMinRadiusITS3{constants::radiiInner[0] - mTolerance};
static constexpr double mWrapperMaxRadiusITS3{constants::services::radiusOuter + mTolerance};
static constexpr double mWrapperZSpanITS3{constants::services::length * 2 + mTolerance}; // z length is divided in half
static constexpr double mWrapperZSpanITS3{(constants::services::length * 2) + mTolerance}; // z length is divided in half

private:
void addAlignableVolumesHalfBarrel(int idLayer, int iHB, TString& parentPath, int& lastUID) const;
void addAlignableVolumesChips(int idLayer, int iHalfBarrel, TString& parentPath, int& lastUID) const;

std::array<std::unique_ptr<ITS3Layer>, constants::nLayers> mIBLayers;
std::unique_ptr<ITS3Services> mServices;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
// or submit itself to any jurisdiction.

#include "ITS3Simulation/DescriptorInnerBarrelITS3.h"
#include "ITSBase/GeometryTGeo.h"
#include "Framework/Logger.h"

using namespace o2::its3;

Expand All @@ -26,3 +28,45 @@ void DescriptorInnerBarrelITS3::createServices(TGeoVolume* dest)
mServices = std::make_unique<ITS3Services>();
mServices->createCYSSAssembly(dest);
}

void DescriptorInnerBarrelITS3::addAlignableVolumesLayer(int idLayer, int wrapperLayerId, TString& parentPath, int& lastUID) const
{
TString wrpV = wrapperLayerId != -1 ? Form("%s%d_1", its::GeometryTGeo::getITSWrapVolPattern(), wrapperLayerId) : "";
TString path = Form("%s/%s/%s%d_0", parentPath.Data(), wrpV.Data(), its::GeometryTGeo::getITS3LayerPattern(), idLayer);
TString sname = its::GeometryTGeo::composeSymNameLayer(idLayer, true);

for (int iHalfBarrel{0}; iHalfBarrel < 2; ++iHalfBarrel) {
addAlignableVolumesHalfBarrel(idLayer, iHalfBarrel, path, lastUID);
}
}

void DescriptorInnerBarrelITS3::addAlignableVolumesHalfBarrel(int idLayer, int iHB, TString& parentPath, int& lastUID) const
{
// for ITS3 smallest alignable volume is the half-barrel (e.g., the carbon-form composite structure with the sensors)
TString path = Form("%s/%s%d_%d", parentPath.Data(), its::GeometryTGeo::getITS3HalfBarrelPattern(), idLayer, iHB);
TString sname = its::GeometryTGeo::composeSymNameHalfBarrel(idLayer, iHB, true);
if (!gGeoManager->SetAlignableEntry(sname.Data(), path.Data())) {
LOG(fatal) << "Unable to set alignable entry ! " << sname << " : " << path;
}
addAlignableVolumesChips(idLayer, iHB, path, lastUID);
}

void DescriptorInnerBarrelITS3::addAlignableVolumesChips(int idLayer, int iHB, TString& parentPath, int& lastUID) const
{
for (int seg{0}; seg < constants::nSegments[idLayer]; ++seg) {
for (int rsu{0}; rsu < constants::segment::nRSUs; ++rsu) {
for (int tile{0}; tile < constants::rsu::nTiles; ++tile) {
TString path = parentPath;
path += Form("/%s_0/", its::GeometryTGeo::getITS3ChipPattern(idLayer));
path += Form("%s_%d/", its::GeometryTGeo::getITS3SegmentPattern(idLayer), seg);
path += Form("%s_%d/", its::GeometryTGeo::getITS3RSUPattern(idLayer), rsu);
path += Form("%s_%d/", its::GeometryTGeo::getITS3TilePattern(idLayer), tile);
TString sname = its::GeometryTGeo::composeSymNameChip(idLayer, iHB, 0, seg, rsu, tile, true);
if (!gGeoManager->SetAlignableEntry(sname.Data(), path.Data())) {
LOG(fatal) << "Unable to set alignable entry ! " << sname << " : " << path;
}
++lastUID;
}
}
}
}