Skip to content

Commit 61f03b7

Browse files
Improve modularity
1 parent 53ed758 commit 61f03b7

File tree

2 files changed

+81
-33
lines changed

2 files changed

+81
-33
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ class TRKLayer
3939
auto getNumber() const { return mLayerNumber; }
4040
auto getName() const { return mLayerName; }
4141

42+
TGeoVolume* createSensor(std::string type);
43+
TGeoVolume* createChip(std::string type);
44+
TGeoVolume* createStave(std::string type);
4245
void createLayer(TGeoVolume* motherVolume);
4346

4447
private:

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

Lines changed: 78 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,82 @@ TRKLayer::TRKLayer(int layerNumber, std::string layerName, float rInn, float zLe
4141
LOGP(info, "Creating layer: id: {} rInner: {} rOuter: {} zLength: {} x2X0: {}", mLayerNumber, mInnerRadius, mOuterRadius, mZ, mX2X0);
4242
}
4343

44+
TGeoVolume* TRKLayer::createSensor(std::string type)
45+
{
46+
TGeoMedium* medSi = gGeoManager->GetMedium("TRK_SILICON$");
47+
std::string sensName = Form("%s%d", GeometryTGeo::getTRKSensorPattern(), this->mLayerNumber);
48+
49+
TGeoShape* sensor;
50+
51+
if (type == "cylinder") {
52+
sensor = new TGeoTube(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2);
53+
} else if (type == "flat") {
54+
double width = mModuleWidth * 2; // Each stave has two modules (based on the LOI design)
55+
sensor = new TGeoBBox(width / 2, mChipThickness / 2, mZ / 2);
56+
} else {
57+
LOGP(fatal, "Sensor of type '{}' is not implemented", type);
58+
}
59+
60+
TGeoVolume* sensVol = new TGeoVolume(sensName.c_str(), sensor, medSi);
61+
sensVol->SetLineColor(kYellow);
62+
63+
return sensVol;
64+
};
65+
66+
TGeoVolume* TRKLayer::createChip(std::string type)
67+
{
68+
TGeoMedium* medSi = gGeoManager->GetMedium("TRK_SILICON$");
69+
std::string chipName = o2::trk::GeometryTGeo::getTRKChipPattern() + std::to_string(mLayerNumber);
70+
71+
TGeoShape* chip;
72+
TGeoVolume* sensVol;
73+
74+
if (type == "cylinder") {
75+
chip = new TGeoTube(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2);
76+
sensVol = createSensor("cylinder");
77+
} else if (type == "flat") {
78+
double width = mModuleWidth * 2; // Each stave has two modules (based on the LOI design)
79+
chip = new TGeoBBox(width / 2, mChipThickness / 2, mZ / 2);
80+
sensVol = createSensor("flat");
81+
} else {
82+
LOGP(fatal, "Sensor of type '{}' is not implemented", type);
83+
}
84+
85+
TGeoVolume* chipVol = new TGeoVolume(chipName.c_str(), chip, medSi);
86+
LOGP(info, "Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
87+
chipVol->AddNode(sensVol, 1, nullptr);
88+
chipVol->SetLineColor(kYellow);
89+
90+
return chipVol;
91+
}
92+
93+
TGeoVolume* TRKLayer::createStave(std::string type)
94+
{
95+
TGeoMedium* medAir = gGeoManager->GetMedium("TRK_AIR$");
96+
std::string staveName = o2::trk::GeometryTGeo::getTRKStavePattern() + std::to_string(mLayerNumber);
97+
98+
TGeoShape* stave;
99+
TGeoVolume* chipVol;
100+
101+
if (type == "cylinder") {
102+
stave = new TGeoTube(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2);
103+
chipVol = createChip("cylinder");
104+
} else if (type == "flat") {
105+
double width = mModuleWidth * 2; // Each stave has two modules (based on the LOI design)
106+
stave = new TGeoBBox(width / 2, mChipThickness / 2, mZ / 2);
107+
chipVol = createChip("flat");
108+
} else {
109+
LOGP(fatal, "Chip of type '{}' is not implemented", type);
110+
}
111+
112+
TGeoVolume* staveVol = new TGeoVolume(staveName.c_str(), stave, medAir);
113+
LOGP(info, "Inserting {} in {} ", chipVol->GetName(), staveVol->GetName());
114+
staveVol->AddNode(chipVol, 1, nullptr);
115+
staveVol->SetLineColor(kYellow);
116+
117+
return staveVol;
118+
}
119+
44120
void TRKLayer::createLayer(TGeoVolume* motherVolume)
45121
{
46122
TGeoMedium* medSi = gGeoManager->GetMedium("TRK_SILICON$");
@@ -56,23 +132,7 @@ void TRKLayer::createLayer(TGeoVolume* motherVolume)
56132
layerVol->SetLineColor(kYellow);
57133

58134
if (mLayout == eLayout::kCylinder) {
59-
TGeoTube* stave = new TGeoTube(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2);
60-
TGeoTube* chip = new TGeoTube(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2);
61-
TGeoTube* sensor = new TGeoTube(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2);
62-
63-
TGeoVolume* sensVol = new TGeoVolume(sensName.c_str(), sensor, medSi);
64-
sensVol->SetLineColor(kYellow);
65-
TGeoVolume* chipVol = new TGeoVolume(chipName.c_str(), chip, medSi);
66-
chipVol->SetLineColor(kYellow);
67-
TGeoVolume* staveVol = new TGeoVolume(staveName.c_str(), stave, medSi);
68-
staveVol->SetLineColor(kYellow);
69-
70-
LOGP(info, "Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
71-
chipVol->AddNode(sensVol, 1, nullptr);
72-
73-
LOGP(info, "Inserting {} in {} ", chipVol->GetName(), staveVol->GetName());
74-
staveVol->AddNode(chipVol, 1, nullptr);
75-
135+
auto staveVol = createStave("cylinder");
76136
LOGP(info, "Inserting {} in {} ", staveVol->GetName(), layerVol->GetName());
77137
layerVol->AddNode(staveVol, 1, nullptr);
78138
} else if (mLayout == eLayout::kTurboStaves) {
@@ -91,16 +151,7 @@ void TRKLayer::createLayer(TGeoVolume* motherVolume)
91151
LOGP(info, "Creating a layer with {} staves and {} mm overlap", nStaves, overlap * 10);
92152

93153
for (int iStave = 0; iStave < nStaves; iStave++) {
94-
TGeoBBox* sensor = new TGeoBBox(width / 2, mChipThickness / 2, mZ / 2);
95-
TGeoBBox* chip = new TGeoBBox(width / 2, mChipThickness / 2, mZ / 2);
96-
TGeoBBox* stave = new TGeoBBox(width / 2, mChipThickness / 2, mZ / 2);
97-
98-
TGeoVolume* sensVol = new TGeoVolume(sensName.c_str(), sensor, medSi);
99-
sensVol->SetLineColor(kYellow);
100-
TGeoVolume* chipVol = new TGeoVolume(chipName.c_str(), chip, medSi);
101-
chipVol->SetLineColor(kYellow);
102-
TGeoVolume* staveVol = new TGeoVolume(staveName.c_str(), stave, medSi);
103-
staveVol->SetLineColor(kYellow);
154+
TGeoVolume* staveVol = createStave("flat");
104155

105156
// Put the staves in the correct position and orientation
106157
TGeoCombiTrans* trans = new TGeoCombiTrans();
@@ -109,12 +160,6 @@ void TRKLayer::createLayer(TGeoVolume* motherVolume)
109160
trans->SetRotation(rot);
110161
trans->SetTranslation(mInnerRadius * std::cos(2. * TMath::Pi() * iStave / nStaves), mInnerRadius * std::sin(2 * TMath::Pi() * iStave / nStaves), 0);
111162

112-
LOGP(info, "Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
113-
chipVol->AddNode(sensVol, 1, nullptr);
114-
115-
LOGP(info, "Inserting {} in {} ", chipVol->GetName(), staveVol->GetName());
116-
staveVol->AddNode(chipVol, 1, nullptr);
117-
118163
LOGP(info, "Inserting {} in {} ", staveVol->GetName(), layerVol->GetName());
119164
layerVol->AddNode(staveVol, iStave, trans);
120165
}

0 commit comments

Comments
 (0)