Skip to content

Commit 938d4c1

Browse files
committed
Fixed hits in sensitive volumes + fixed CMakeLists.txt
1 parent 674a93e commit 938d4c1

File tree

9 files changed

+79
-64
lines changed

9 files changed

+79
-64
lines changed
Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,29 @@
1-
#Copyright 2019 - 2020 CERN and copyright holders of ALICE O2.
2-
#See https: // alice-o2.web.cern.ch/copyright for details of the copyright holders.
3-
#All rights not expressly granted are reserved.
1+
# Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
# See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
# All rights not expressly granted are reserved.
44
#
5-
#This software is distributed under the terms of the GNU General Public
6-
#License v3(GPL Version 3), copied verbatim in the file "COPYING".
5+
# This software is distributed under the terms of the GNU General Public
6+
# License v3 (GPL Version 3), copied verbatim in the file "COPYING".
77
#
8-
#In applying this license CERN does not waive the privileges and immunities
9-
#granted to it by virtue of its status as an Intergovernmental Organization
8+
# In applying this license CERN does not waive the privileges and immunities
9+
# granted to it by virtue of its status as an Intergovernmental Organization
1010
# or submit itself to any jurisdiction.
1111

1212
o2_add_library(TRKSimulation
13-
SOURCES src /
14-
TRKLayer.cxx
15-
src /
16-
TRKPetalCase.cxx
17-
src /
18-
TRKPetalLayer.cxx
19-
src /
20-
TRKPetalDisk.cxx
21-
src /
22-
Detector.cxx
23-
src /
24-
TRKServices.cxx
25-
PUBLIC_LINK_LIBRARIES O2::TRKBase
26-
O2::FT3Simulation
27-
O2::ITSMFTSimulation)
13+
SOURCES src/TRKLayer.cxx
14+
src/Detector.cxx
15+
src/TRKServices.cxx
16+
src/TRKPetalCase.cxx
17+
src/TRKPetalLayer.cxx
18+
src/TRKPetalDisk.cxx
19+
PUBLIC_LINK_LIBRARIES O2::TRKBase
20+
O2::FT3Simulation
21+
O2::ITSMFTSimulation)
2822

29-
o2_target_root_dictionary(TRKSimulation
30-
HEADERS include /
31-
TRKSimulation / Detector.h include / TRKSimulation / TRKLayer.h include / TRKSimulation / TRKServices.h include / TRKSimulation / TRKPetalCase.h include / TRKSimulation / TRKPetalLayer.h include / TRKSimulation / TRKPetalDisk.h)
23+
o2_target_root_dictionary(TRKSimulation
24+
HEADERS include/TRKSimulation/Detector.h
25+
include/TRKSimulation/TRKLayer.h
26+
include/TRKSimulation/TRKServices.h
27+
include/TRKSimulation/TRKPetalCase.h
28+
include/TRKSimulation/TRKPetalLayer.h
29+
include/TRKSimulation/TRKPetalDisk.h)

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ class Detector : public o2::base::DetImpl<Detector>
9191
TRKServices mServices; // Houses the services of the TRK, but not the Iris tracker
9292
std::vector<TRKPetalCase> mPetalCases; // Houses the Iris tracker and its services. Created fully in the beam pipe
9393

94+
std::vector<std::string> mFirstOrLastLayers; // Names of the first or last layers
95+
bool InsideFirstOrLastLayer(std::string layerName);
96+
9497
void defineSensitiveVolumes();
9598

9699
template <typename Det>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class TRKPetalDisk
3939
auto getZ() const { return mZ; }
4040
auto getx2X0() const { return mx2X0; }
4141
auto getName() const { return mDiskName; }
42+
auto getSensorName() const { return mSensorName; }
4243

4344
/// Creates the actual Disk and places inside its mother volume
4445
/// \param motherVolume the TGeoVolume owing the volume structure
@@ -47,6 +48,7 @@ class TRKPetalDisk
4748
private:
4849
Int_t mDiskNumber = -1; ///< Current disk number
4950
std::string mDiskName; ///< Current disk name
51+
std::string mSensorName;
5052
Double_t mInnerRadius; ///< Inner radius of this disk
5153
Double_t mOuterRadius; ///< Outer radius of this disk
5254
Double_t mAngularCoverage;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ class TRKPetalLayer
3636
auto getChipThickness() const { return mChipThickness; }
3737
auto getNumber() const { return mLayerNumber; }
3838
auto getName() const { return mLayerName; }
39-
40-
auto getShapeName() const { return mLayer->GetName(); }
39+
auto getSensorName() const { return mSensorName; }
4140

4241
void createLayer(TGeoVolume* motherVolume, TGeoCombiTrans* combiTrans);
4342

4443
private:
4544
Int_t mLayerNumber;
4645
std::string mLayerName;
46+
std::string mSensorName;
4747
Float_t mInnerRadius;
4848
Float_t mZ;
4949
Float_t mX2X0;

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

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,14 @@ void Detector::configDefault()
8383
// mLayers.emplace_back(0, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(0)}, 0.5f, 50.f, 100.e-4);
8484
// mLayers.emplace_back(1, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(1)}, 1.2f, 50.f, 100.e-4);
8585
// mLayers.emplace_back(2, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(2)}, 2.5f, 50.f, 100.e-4);
86-
mLayers.emplace_back(3, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(3)}, 3.78f, 124.f, 100.e-3);
87-
mLayers.emplace_back(4, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(4)}, 7.f, 124.f, 100.e-3);
88-
mLayers.emplace_back(5, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(5)}, 12.f, 124.f, 100.e-3);
89-
mLayers.emplace_back(6, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(6)}, 20.f, 124.f, 100.e-3);
90-
mLayers.emplace_back(7, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(7)}, 30.f, 124.f, 100.e-3);
91-
mLayers.emplace_back(8, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(8)}, 45.f, 258.f, 100.e-3);
92-
mLayers.emplace_back(9, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(9)}, 60.f, 258.f, 100.e-3);
93-
mLayers.emplace_back(10, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(10)}, 80.f, 258.f, 100.e-3);
86+
mLayers.emplace_back(0, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(0)}, 3.78f, 124.f, 100.e-3);
87+
mLayers.emplace_back(1, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(1)}, 7.f, 124.f, 100.e-3);
88+
mLayers.emplace_back(2, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(2)}, 12.f, 124.f, 100.e-3);
89+
mLayers.emplace_back(3, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(3)}, 20.f, 124.f, 100.e-3);
90+
mLayers.emplace_back(4, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(4)}, 30.f, 124.f, 100.e-3);
91+
mLayers.emplace_back(5, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(5)}, 45.f, 258.f, 100.e-3);
92+
mLayers.emplace_back(6, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(6)}, 60.f, 258.f, 100.e-3);
93+
mLayers.emplace_back(7, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(7)}, 80.f, 258.f, 100.e-3);
9494
}
9595

9696
void Detector::buildTRKNewVacuumVessel()
@@ -106,28 +106,29 @@ void Detector::buildTRKNewVacuumVessel()
106106
// mLayers.emplace_back(0, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(0)}, 0.5f, 50.f, 100.e-4);
107107
// mLayers.emplace_back(1, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(1)}, 1.2f, 50.f, 100.e-4);
108108
// mLayers.emplace_back(2, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(2)}, 2.5f, 50.f, 100.e-4);
109-
mLayers.emplace_back(3, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(3)}, 7.f, 124.f, 100.e-3);
110-
mLayers.emplace_back(4, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(4)}, 9.f, 124.f, 100.e-3);
111-
mLayers.emplace_back(5, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(5)}, 12.f, 124.f, 100.e-3);
112-
mLayers.emplace_back(6, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(6)}, 20.f, 124.f, 100.e-3);
113-
mLayers.emplace_back(7, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(7)}, 30.f, 124.f, 100.e-3);
114-
mLayers.emplace_back(8, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(8)}, 45.f, 258.f, 100.e-3);
115-
mLayers.emplace_back(9, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(9)}, 60.f, 258.f, 100.e-3);
116-
mLayers.emplace_back(10, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(10)}, 80.f, 258.f, 100.e-3);
109+
mLayers.emplace_back(0, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(0)}, 7.f, 124.f, 100.e-3);
110+
LOGP(info, "TRKLayer created. Name: {}", std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(0)});
111+
mLayers.emplace_back(1, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(1)}, 9.f, 124.f, 100.e-3);
112+
mLayers.emplace_back(2, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(2)}, 12.f, 124.f, 100.e-3);
113+
mLayers.emplace_back(3, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(3)}, 20.f, 124.f, 100.e-3);
114+
mLayers.emplace_back(4, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(4)}, 30.f, 124.f, 100.e-3);
115+
mLayers.emplace_back(5, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(5)}, 45.f, 258.f, 100.e-3);
116+
mLayers.emplace_back(6, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(6)}, 60.f, 258.f, 100.e-3);
117+
mLayers.emplace_back(7, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(7)}, 80.f, 258.f, 100.e-3);
117118

118119
auto& trkPars = TRKBaseParam::Instance();
119120

120121
// Middle layers
122+
mLayers[0].setLayout(trkPars.layoutML);
123+
mLayers[1].setLayout(trkPars.layoutML);
124+
mLayers[2].setLayout(trkPars.layoutML);
121125
mLayers[3].setLayout(trkPars.layoutML);
122-
mLayers[4].setLayout(trkPars.layoutML);
123-
mLayers[5].setLayout(trkPars.layoutML);
124-
mLayers[6].setLayout(trkPars.layoutML);
125126

126127
// Outer tracker
128+
mLayers[4].setLayout(trkPars.layoutOL);
129+
mLayers[5].setLayout(trkPars.layoutOL);
130+
mLayers[6].setLayout(trkPars.layoutOL);
127131
mLayers[7].setLayout(trkPars.layoutOL);
128-
mLayers[8].setLayout(trkPars.layoutOL);
129-
mLayers[9].setLayout(trkPars.layoutOL);
130-
mLayers[10].setLayout(trkPars.layoutOL);
131132
}
132133

133134
void Detector::configFromFile(std::string fileName)
@@ -266,15 +267,16 @@ void Detector::defineSensitiveVolumes()
266267
for (int petalCase = 0; petalCase < 4; ++petalCase) {
267268
// Petal layers
268269
for (int petalLayer = 0; petalLayer < mPetalCases[petalCase].mPetalLayers.size(); ++petalLayer) {
269-
volumeName = mPetalCases[petalCase].mPetalLayers[petalLayer].getName();
270+
volumeName = mPetalCases[petalCase].mPetalLayers[petalLayer].getSensorName();
271+
if(petalLayer == 0){mFirstOrLastLayers.push_back(volumeName.Data());}
270272
LOGP(info, "Trying {}", volumeName.Data());
271273
v = geoManager->GetVolume(volumeName.Data());
272274
LOGP(info, "Adding TRK Sensitive Volume {}", v->GetName());
273275
AddSensitiveVolume(v);
274276
}
275277
// Petal disks
276278
for (int petalDisk = 0; petalDisk < mPetalCases[petalCase].mPetalDisks.size(); ++petalDisk) {
277-
volumeName = mPetalCases[petalCase].mPetalDisks[petalDisk].getName();
279+
volumeName = mPetalCases[petalCase].mPetalDisks[petalDisk].getSensorName();
278280
LOGP(info, "Trying {}", volumeName.Data());
279281
v = geoManager->GetVolume(volumeName.Data());
280282
LOGP(info, "Adding TRK Sensitive Volume {}", v->GetName());
@@ -285,6 +287,7 @@ void Detector::defineSensitiveVolumes()
285287
// The names of the TRK sensitive volumes have the format: TRKLayer(0...mLayers.size()-1)
286288
for (int j{0}; j < mLayers.size(); j++) {
287289
volumeName = GeometryTGeo::getTRKSensorPattern() + TString::Itoa(j, 10);
290+
if(j == mLayers.size() - 1){mFirstOrLastLayers.push_back(volumeName.Data());}
288291
LOGP(info, "Trying {}", volumeName.Data());
289292
v = geoManager->GetVolume(volumeName.Data());
290293
LOGP(info, "Adding TRK Sensitive Volume {}", v->GetName());
@@ -312,6 +315,17 @@ void Detector::Reset()
312315
}
313316
}
314317

318+
bool Detector::InsideFirstOrLastLayer(std::string layerName){
319+
bool inside = false;
320+
for(auto &firstOrLastLayer: mFirstOrLastLayers){
321+
if(firstOrLastLayer == layerName){
322+
inside = true;
323+
break;
324+
}
325+
}
326+
return inside;
327+
}
328+
315329
bool Detector::ProcessHits(FairVolume* vol)
316330
{
317331
// This method is called from the MC stepping
@@ -324,7 +338,8 @@ bool Detector::ProcessHits(FairVolume* vol)
324338

325339
// Is it needed to keep a track reference when the outer ITS volume is encountered?
326340
auto stack = (o2::data::Stack*)fMC->GetStack();
327-
if (fMC->IsTrackExiting() && (lay == 0 || lay == mLayers.size() - 1)) {
341+
// if (fMC->IsTrackExiting() && (lay == 0 || lay == mLayers.size() - 1)) {
342+
if (fMC->IsTrackExiting() && InsideFirstOrLastLayer(vol->GetName())) {
328343
// Keep the track refs for the innermost and outermost layers only
329344
o2::TrackReference tr(*fMC, GetDetId());
330345
tr.setTrackID(stack->GetCurrentTrackNumber());

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ void TRKPetalCase::constructDetectionPetals(TGeoVolume* motherVolume)
165165

166166
void TRKPetalCase::addDetectionPetelsToFullComposite()
167167
{
168-
LOGP(info, "Excavating layers from vacuum");
169168
for (Int_t i = 0; i < mPetalLayers.size(); ++i) {
170169
Double_t zLength = mPetalLayers[i].getZLength();
171170
Double_t rIn = mPetalLayers[i].getInnerRadius();
@@ -179,7 +178,6 @@ void TRKPetalCase::addDetectionPetelsToFullComposite()
179178
addToPetalCaseComposite(layerForExcavationCompositeFormula);
180179
}
181180

182-
LOGP(info, "Excavating disks vacuum");
183181
for (Int_t i = 0; i < mPetalDisks.size(); ++i) {
184182
Double_t zPos = mPetalDisks[i].getZ();
185183
Double_t rIn = mPetalDisks[i].getInnerRadius();

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,10 @@ void TRKPetalDisk::createDisk(TGeoVolume* motherVolume, TGeoCombiTrans* combiTra
5555
{
5656
// Create tube, set sensitive volume, add to mother volume
5757
Double_t toDeg = 180 / TMath::Pi();
58-
std::string chipName = o2::trk::GeometryTGeo::getTRKChipPattern() + std::to_string(mDiskNumber),
59-
sensName = Form("%s%d", GeometryTGeo::getTRKSensorPattern(), mDiskNumber);
58+
std::string chipName = mDiskName + "_" + o2::trk::GeometryTGeo::getTRKChipPattern() + std::to_string(mDiskNumber),
59+
sensName = mDiskName + "_" + Form("%s%d", GeometryTGeo::getTRKSensorPattern(), mDiskNumber);
60+
61+
mSensorName = sensName;
6062

6163
TGeoTubeSeg* sensor = new TGeoTubeSeg(mInnerRadius, mOuterRadius, mChipThickness / 2., -0.5 * mAngularCoverage * toDeg, 0.5 * mAngularCoverage * toDeg);
6264
TGeoTubeSeg* chip = new TGeoTubeSeg(mInnerRadius, mOuterRadius, mChipThickness / 2., -0.5 * mAngularCoverage * toDeg, 0.5 * mAngularCoverage * toDeg);

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ void TRKPetalLayer::createLayer(TGeoVolume* motherVolume, TGeoCombiTrans* combiT
3939
TGeoMedium* medSi = gGeoManager->GetMedium("TRK_SILICON$");
4040
TGeoMedium* medAir = gGeoManager->GetMedium("TRK_AIR$");
4141

42-
std::string staveName = o2::trk::GeometryTGeo::getTRKStavePattern() + std::to_string(mLayerNumber),
43-
chipName = o2::trk::GeometryTGeo::getTRKChipPattern() + std::to_string(mLayerNumber),
44-
sensName = Form("%s%d", GeometryTGeo::getTRKSensorPattern(), mLayerNumber);
42+
std::string staveName = mLayerName + "_" + o2::trk::GeometryTGeo::getTRKStavePattern() + std::to_string(mLayerNumber),
43+
chipName = mLayerName + "_" + o2::trk::GeometryTGeo::getTRKChipPattern() + std::to_string(mLayerNumber),
44+
sensName = mLayerName + "_" + Form("%s%d", GeometryTGeo::getTRKSensorPattern(), mLayerNumber);
45+
46+
mSensorName = sensName;
4547

4648
Double_t toDeg = 180 / TMath::Pi();
4749
mLayer = new TGeoTubeSeg(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2., -0.5 * mAngularCoverage * toDeg, 0.5 * mAngularCoverage * toDeg);
48-
LOGP(info, "mLayerName: {}", mLayerName);
4950
TGeoVolume* layerVol = new TGeoVolume(mLayerName.c_str(), mLayer, medAir);
5051
layerVol->SetLineColor(kYellow);
5152

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,19 +160,15 @@ void TRKServices::createVacuumCompositeShape()
160160

161161
void TRKServices::excavateFromVacuum(TString shapeToExcavate)
162162
{
163-
LOGP(info, "vacuumCompositeFormula: {}", mVacuumCompositeFormula.Data());
164163
mVacuumCompositeFormula += "-";
165164
mVacuumCompositeFormula += shapeToExcavate;
166-
LOGP(info, "vacuumCompositeFormula: {}", mVacuumCompositeFormula.Data());
167165
}
168166

169167
void TRKServices::registerVacuum(TGeoVolume* motherVolume)
170168
{
171169
auto& matmgr = o2::base::MaterialManager::Instance();
172170
const TGeoMedium* kMedVac = matmgr.getTGeoMedium("ALICE3_PIPE_VACUUM");
173171

174-
LOGP(info, "vacuumCompositeFormula: {}", mVacuumCompositeFormula.Data());
175-
176172
TGeoCompositeShape* vacuumComposite = new TGeoCompositeShape("A3IP_VACUUMsh", mVacuumCompositeFormula);
177173
TGeoVolume* vacuumVolume = new TGeoVolume("A3IP_VACUUM", vacuumComposite, kMedVac);
178174

0 commit comments

Comments
 (0)