Skip to content

Commit 747171b

Browse files
committed
FCT - Segmented: Sector and module names
1 parent 24d3b10 commit 747171b

File tree

6 files changed

+80
-54
lines changed

6 files changed

+80
-54
lines changed

Detectors/Upgrades/ALICE3/FCT/base/include/FCTBase/GeometryTGeo.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,24 +92,28 @@ class GeometryTGeo : public o2::itsmft::GeometryTGeo
9292
static const char* getFCTVolPattern() { return sVolumeName.c_str(); }
9393
static const char* getFCTInnerVolPattern() { return sInnerVolumeName.c_str(); }
9494
static const char* getFCTLayerPattern() { return sLayerName.c_str(); }
95+
static const char* getFCTSegmentPattern() { return sSegmentName.c_str(); }
9596
static const char* getFCTChipPattern() { return sChipName.c_str(); }
9697
static const char* getFCTSensorPattern() { return sSensorName.c_str(); }
9798

9899
static const char* composeSymNameFCT(Int_t d) { return Form("%s_%d", o2::detectors::DetID(o2::detectors::DetID::FCT).getName(), d); }
99100
static const char* composeSymNameLayer(Int_t d, Int_t lr);
101+
static const char* composeSymNameLayer(Int_t d, Int_t lr, Int_t sec, Int_t mod);
100102
static const char* composeSymNameChip(Int_t d, Int_t lr);
103+
static const char* composeSymNameChip(Int_t d, Int_t lr, Int_t sec, Int_t mod);
101104
static const char* composeSymNameSensor(Int_t d, Int_t lr);
105+
static const char* composeSymNameSensor(Int_t d, Int_t lr, Int_t sec, Int_t mod);
102106

103107
protected:
104-
static constexpr int MAXLAYERS = 200; ///< max number of active layers/segments
108+
static constexpr int MAXACTIVE = 200; ///< max number of active layers/segments
105109

106-
Int_t mNumberOfLayers; ///< number of layers
110+
Int_t mNumberOfActives; ///< number of layers/segments (whichever is selected)
107111
static std::string sInnerVolumeName; ///< Mother inner volume name
108112
static std::string sVolumeName; ///< Mother volume name
113+
static std::string sSegmentName; ///< Segment name
109114
static std::string sLayerName; ///< Layer name
110115
static std::string sChipName; ///< Chip name
111-
112-
static std::string sSensorName; ///< Sensor name
116+
static std::string sSensorName; ///< Sensor name
113117

114118
private:
115119
static std::unique_ptr<o2::fct::GeometryTGeo> sInstance; ///< singletone instance

Detectors/Upgrades/ALICE3/FCT/base/src/GeometryTGeo.cxx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ std::unique_ptr<o2::fct::GeometryTGeo> GeometryTGeo::sInstance;
5151

5252
std::string GeometryTGeo::sVolumeName = "FCTV"; ///< Mother volume name
5353
std::string GeometryTGeo::sInnerVolumeName = "FCTInner"; ///< Mother inner volume name
54+
std::string GeometryTGeo::sSegmentName = "FCTSegment"; ///< Segment name
5455
std::string GeometryTGeo::sLayerName = "FCTLayer"; ///< Layer name
5556
std::string GeometryTGeo::sChipName = "FCTChip"; ///< Sensor name
5657
std::string GeometryTGeo::sSensorName = "FCTSensor"; ///< Sensor name
@@ -104,6 +105,24 @@ const char* GeometryTGeo::composeSymNameSensor(Int_t d, Int_t lr)
104105
return Form("%s/%s%d", composeSymNameChip(d, lr), getFCTSensorPattern(), lr);
105106
}
106107

108+
//__________________________________________________________________________
109+
const char* GeometryTGeo::composeSymNameLayer(Int_t d, Int_t lr, Int_t sec, Int_t mod)
110+
{
111+
return Form("%s/%s%dSec%dMod%d", composeSymNameFCT(d), getFCTSegmentPattern(), lr, sec, mod);
112+
}
113+
114+
//__________________________________________________________________________
115+
const char* GeometryTGeo::composeSymNameChip(Int_t d, Int_t lr, Int_t sec, Int_t mod)
116+
{
117+
return Form("%s/%s%dSec%dMod%d", composeSymNameLayer(d, lr, sec, mod), getFCTChipPattern(), lr, sec, mod);
118+
}
119+
120+
//__________________________________________________________________________
121+
const char* GeometryTGeo::composeSymNameSensor(Int_t d, Int_t lr, Int_t sec, Int_t mod)
122+
{
123+
return Form("%s/%s%dSec%dMod%d", composeSymNameChip(d, lr, sec, mod), getFCTSensorPattern(), lr, sec, mod);
124+
}
125+
107126
//__________________________________________________________________________
108127
void GeometryTGeo::fillMatrixCache(int mask)
109128
{

Detectors/Upgrades/ALICE3/FCT/simulation/include/FCTSimulation/Detector.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class Detector : public o2::base::DetImpl<Detector>
111111
void PreTrack() override { ; }
112112

113113
/// Returns the number of layers
114-
Int_t getNumberOfLayers() const { return mNumberOfLayers; }
114+
Int_t getNumberOfLayers() const { return mNumberOfActives; }
115115

116116
void buildBasicFCT(const FCTBaseParam& param);
117117
void buildFCTV1();
@@ -123,11 +123,11 @@ class Detector : public o2::base::DetImpl<Detector>
123123
void exportLayout();
124124

125125
private:
126-
std::vector<Int_t> mLayerID;
126+
std::vector<Int_t> mActiveID;
127127
std::vector<Int_t> mConverterLayerId;
128-
std::vector<TString> mLayerName;
128+
std::vector<TString> mActiveName;
129129
std::vector<TString> mConverterLayerName;
130-
Int_t mNumberOfLayers;
130+
Int_t mNumberOfActives;
131131
Int_t mNumberOfConverterLayers;
132132

133133
/// this is transient data about track passing the sensor

Detectors/Upgrades/ALICE3/FCT/simulation/include/FCTSimulation/FCTSegment.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class FCTSegment : public TObject
3434
FCTSegment() = default;
3535

3636
// Segment constructor
37-
FCTSegment(Int_t segmentNumber, std::string segmentName, Double_t x, Double_t y, Double_t z, Double_t vertL, Double_t innerL, Double_t outerL, Double_t rotX, Double_t rotY, Double_t rotZ, Float_t segmentx2X0);
37+
FCTSegment(Int_t layerNumber, Int_t sectorNumber, Int_t moduleNumber, std::string segmentName, Double_t x, Double_t y, Double_t z, Double_t vertL, Double_t innerL, Double_t outerL, Double_t rotX, Double_t rotY, Double_t rotZ, Float_t segmentx2X0);
3838

3939
/// Copy constructor
4040
FCTSegment(const FCTSegment&) = default;
@@ -46,7 +46,9 @@ class FCTSegment : public TObject
4646
~FCTSegment() override;
4747

4848
/// getters
49-
auto getSegmentNumber() const { return mSegmentNumber; }
49+
auto getLayerNumber() const { return mLayerNumber; }
50+
auto getSectorNumber() const { return mSectorNumber; }
51+
auto getModuleNumber() const { return mModuleNumber; }
5052
auto getX() const { return mX; }
5153
auto getY() const { return mY; }
5254
auto getZ() const { return mZ; }
@@ -63,7 +65,9 @@ class FCTSegment : public TObject
6365
virtual void createSegment(TGeoVolume* motherVolume);
6466

6567
private:
66-
Int_t mSegmentNumber = -1; ///< Current segment number
68+
Int_t mLayerNumber = -1;
69+
Int_t mSectorNumber = -1;
70+
Int_t mModuleNumber = -1;
6771
std::string mSegmentName; ///< Current segment name
6872
Double_t mVertL; ///< Vertical length of the trapezoid
6973
Double_t mInnerL; ///< Inner side length of the trapezoid

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

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ void Detector::buildFCTFromFile(std::string configFileName)
8080
-77.5 3.92 14.35 0.0042 1
8181
*/
8282

83-
mLayerName.clear();
83+
mActiveName.clear();
8484
mLayers.clear();
8585
mConverterLayers.clear();
86-
mLayerID.clear();
86+
mActiveID.clear();
8787

8888
LOG(info) << "Building FCT Detector: From file";
8989
LOG(info) << " FCT detector configuration: " << configFileName;
@@ -125,7 +125,7 @@ void Detector::buildFCTFromFile(std::string configFileName)
125125
iss >> Layerx2X0;
126126

127127
std::string layerName = GeometryTGeo::getFCTLayerPattern() + std::string("_") + std::to_string(layerNumber);
128-
mLayerName.push_back(layerName);
128+
mActiveName.push_back(layerName);
129129
if (layerType == 0) {
130130
LOG(info) << "Adding Disk Layer " << layerName << " at z = " << z_layer << " ; r_in = " << r_in << " ; r_out = " << r_out_l_side << " x/X0 = " << Layerx2X0;
131131
layerNumberDisk++;
@@ -144,8 +144,8 @@ void Detector::buildFCTFromFile(std::string configFileName)
144144
layerNumber++;
145145
}
146146

147-
mNumberOfLayers = layerNumber;
148-
LOG(info) << " Loaded FCT Detector with " << mNumberOfLayers << " layers";
147+
mNumberOfActives = layerNumber;
148+
LOG(info) << " Loaded FCT Detector with " << mNumberOfActives << " layers";
149149
LOG(info) << " Of which " << layerNumberDisk << " are disks";
150150
LOG(info) << " Of which " << layerNumberSquare << " are disks";
151151
}
@@ -187,17 +187,17 @@ void Detector::buildBasicFCT(const FCTBaseParam& param)
187187
auto etaIn = param.etaIn;
188188
auto etaOut = param.etaOut;
189189
auto Layerx2X0 = param.Layerx2X0;
190-
mNumberOfLayers = param.nLayers;
191-
mLayerID.clear();
190+
mNumberOfActives = param.nLayers;
191+
mActiveID.clear();
192192

193193
Int_t type = 0; // Disk
194194

195-
for (Int_t layerNumber = 0; layerNumber < mNumberOfLayers; layerNumber++) {
196-
std::string layerName = GeometryTGeo::getFCTLayerPattern() + std::to_string(layerNumber); // + mNumberOfLayers * direction);
197-
mLayerName.push_back(layerName);
195+
for (Int_t layerNumber = 0; layerNumber < mNumberOfActives; layerNumber++) {
196+
std::string layerName = GeometryTGeo::getFCTLayerPattern() + std::to_string(layerNumber); // + mNumberOfActives * direction);
197+
mActiveName.push_back(layerName);
198198

199199
// Adds evenly spaced layers
200-
Float_t layerZ = z_first + (layerNumber * z_length / (mNumberOfLayers - 1)) * std::copysign(1, z_first);
200+
Float_t layerZ = z_first + (layerNumber * z_length / (mNumberOfActives - 1)) * std::copysign(1, z_first);
201201
Float_t rIn = std::abs(layerZ * std::tan(2.f * std::atan(std::exp(-etaIn))));
202202
Float_t rOut = std::abs(layerZ * std::tan(2.f * std::atan(std::exp(-etaOut))));
203203
mLayers.emplace_back(layerNumber, layerName, layerZ, rIn, rOut, Layerx2X0, type);
@@ -223,8 +223,8 @@ void Detector::buildSegmentedFCT(const FCTBaseParam& param){
223223
{490.0, 5.0, 19.0, layersx2X0},
224224
{500.0, 5.0, 19.0, layersx2X0}};
225225

226-
mLayerID.clear();
227-
mLayerName.clear();
226+
mActiveID.clear();
227+
mActiveName.clear();
228228
mLayers.clear();
229229

230230
Double_t segAngle = 2.*TMath::Pi() / (Double_t)param.nAziSeg;
@@ -247,13 +247,14 @@ void Detector::buildSegmentedFCT(const FCTBaseParam& param){
247247
Double_t xPosTrap = rTrapCenter * TMath::Cos(azimuthalNumber * segAngle);
248248
Double_t yPosTrap = rTrapCenter * TMath::Sin(azimuthalNumber * segAngle);
249249
Double_t xRot = -90 + azimuthalNumber*segAngle*kRadDeg;
250-
std::string segmentName = GeometryTGeo::getFCTLayerPattern() + std::to_string(segmentNumber);
251-
mSegments.emplace_back(segmentNumber, segmentName, xPosTrap, yPosTrap, zPosTrap, trapezoidVertLength, innerTrapLength, outerTrapLength, xRot, 0., 0., x2X0);
250+
std::string segmentName = Form("%s_Lay_%d_Sec_%d_Mod_%d", o2::fct::GeometryTGeo::getFCTLayerPattern(), layerNumber, azimuthalNumber, radialNumber);
251+
mActiveName.push_back(segmentName);
252+
mSegments.emplace_back(layerNumber, azimuthalNumber, radialNumber, segmentName, xPosTrap, yPosTrap, zPosTrap, trapezoidVertLength, innerTrapLength, outerTrapLength, xRot, 0., 0., x2X0);
252253
segmentNumber++;
253254
}
254255
}
255256
}
256-
mNumberOfLayers = segmentNumber;
257+
mNumberOfActives = segmentNumber;
257258
}
258259

259260
//_________________________________________________________________________________________________
@@ -263,7 +264,7 @@ void Detector::buildFCTV1()
263264

264265
LOG(info) << "Building FCT Detector: V1";
265266

266-
mNumberOfLayers = 11;
267+
mNumberOfActives = 11;
267268
Float_t layersx2X0 = 1.e-2;
268269

269270
std::vector<std::array<Float_t, 4>> layersConfig{
@@ -279,15 +280,15 @@ void Detector::buildFCTV1()
279280
{490.0, 5.0, 19.0, layersx2X0},
280281
{500.0, 5.0, 19.0, layersx2X0}};
281282

282-
mLayerID.clear();
283-
mLayerName.clear();
283+
mActiveID.clear();
284+
mActiveName.clear();
284285
mLayers.clear();
285286

286287
Int_t type = 0; // Disk
287288

288-
for (int layerNumber = 0; layerNumber < mNumberOfLayers; layerNumber++) {
289+
for (int layerNumber = 0; layerNumber < mNumberOfActives; layerNumber++) {
289290
std::string layerName = GeometryTGeo::getFCTLayerPattern() + std::to_string(layerNumber);
290-
mLayerName.push_back(layerName);
291+
mActiveName.push_back(layerName);
291292
Float_t z = layersConfig[layerNumber][0];
292293

293294
Float_t rIn = layersConfig[layerNumber][1];
@@ -316,9 +317,9 @@ Detector::Detector(const Detector& rhs)
316317
/// Container for data points
317318
mHits(o2::utils::createSimVector<o2::itsmft::Hit>())
318319
{
319-
mLayerID = rhs.mLayerID;
320-
mLayerName = rhs.mLayerName;
321-
mNumberOfLayers = rhs.mNumberOfLayers;
320+
mActiveID = rhs.mActiveID;
321+
mActiveName = rhs.mActiveName;
322+
mNumberOfActives = rhs.mNumberOfActives;
322323
}
323324

324325
//_________________________________________________________________________________________________
@@ -349,10 +350,11 @@ Detector& Detector::operator=(const Detector& rhs)
349350
// base class assignment
350351
base::Detector::operator=(rhs);
351352

352-
mLayerID = rhs.mLayerID;
353-
mLayerName = rhs.mLayerName;
354-
mNumberOfLayers = rhs.mNumberOfLayers;
353+
mActiveID = rhs.mActiveID;
354+
mActiveName = rhs.mActiveName;
355+
mNumberOfActives = rhs.mNumberOfActives;
355356
mLayers = rhs.mLayers;
357+
mSegments = rhs.mSegments;
356358
mTrackData = rhs.mTrackData;
357359

358360
/// Container for data points
@@ -381,7 +383,7 @@ Bool_t Detector::ProcessHits(FairVolume* vol)
381383
}
382384

383385
Int_t lay = 0, volID = vol->getMCid();
384-
while ((lay <= mLayerID.size()) && (volID != mLayerID[lay])) {
386+
while ((lay <= mActiveID.size()) && (volID != mActiveID[lay])) {
385387
++lay;
386388
}
387389

@@ -601,15 +603,15 @@ void Detector::createGeometry()
601603
if(!mLayers.size()){LOG(info) << "Registering FCT SensitiveLayerIDs:";}
602604
for (int iLayer = 0; iLayer < mLayers.size(); iLayer++) {
603605
auto layerID = gMC ? TVirtualMC::GetMC()->VolId(Form("%s_%d", GeometryTGeo::getFCTSensorPattern(), mLayers[iLayer].getLayerNumber())) : 0;
604-
mLayerID.push_back(layerID);
605-
LOG(info) << " mLayerID[" << mLayers[iLayer].getLayerNumber() << "] = " << layerID;
606+
mActiveID.push_back(layerID);
607+
LOG(info) << " mActiveID[" << mLayers[iLayer].getLayerNumber() << "] = " << layerID;
606608
}
607609

608610
if(!mSegments.size()){LOG(info) << "Registering FCT SensitiveSegmentIDs:";}
609611
for (int iSegment = 0; iSegment < mSegments.size(); iSegment++) {
610-
auto segmentID = gMC ? TVirtualMC::GetMC()->VolId(Form("%s_%d", GeometryTGeo::getFCTSensorPattern(), mSegments[iSegment].getSegmentNumber())) : 0;
611-
mLayerID.push_back(segmentID);
612-
LOG(info) << " mSegmentID[" << mSegments[iSegment].getSegmentNumber() << "] = " << segmentID;
612+
auto segmentID = gMC ? TVirtualMC::GetMC()->VolId(Form("%s_Lay_%d_Sec_%d_Mod_%d", GeometryTGeo::getFCTSensorPattern(), mSegments[iSegment].getLayerNumber(), mSegments[iSegment].getSectorNumber(), mSegments[iSegment].getModuleNumber())) : 0;
613+
mActiveID.push_back(segmentID);
614+
LOG(info) << " mActiveID[" << "Layer: " << mSegments[iSegment].getLayerNumber() << " Sector: " << mSegments[iSegment].getSectorNumber() << " Module: " << mSegments[iSegment].getModuleNumber() << "] = " << segmentID;
613615
}
614616
}
615617

@@ -619,20 +621,17 @@ void Detector::defineSensitiveVolumes()
619621
TGeoManager* geoManager = gGeoManager;
620622
TGeoVolume* v;
621623

622-
TString volumeName;
623624
LOG(info) << "Adding FCT Sensitive Volumes";
624625

625626
// The names of the FCT sensitive volumes have the format: FCTSensor_(0,1)_(0...sNumberLayers-1)
626627
for (Int_t iLayer = 0; iLayer < mLayers.size(); iLayer++) {
627-
volumeName = o2::fct::GeometryTGeo::getFCTSensorPattern() + std::to_string(mLayers[iLayer].getLayerNumber());
628628
v = geoManager->GetVolume(Form("%s_%d", GeometryTGeo::getFCTSensorPattern(), mLayers[iLayer].getLayerNumber()));
629629
LOG(info) << "Adding FCT Sensitive Volume => " << v->GetName();
630630
AddSensitiveVolume(v);
631631
}
632632

633633
for (Int_t iSegment = 0; iSegment < mSegments.size(); iSegment++) {
634-
volumeName = o2::fct::GeometryTGeo::getFCTSensorPattern() + std::to_string(mSegments[iSegment].getSegmentNumber());
635-
v = geoManager->GetVolume(Form("%s_%d", GeometryTGeo::getFCTSensorPattern(), mSegments[iSegment].getSegmentNumber()));
634+
v = geoManager->GetVolume(Form("%s_Lay_%d_Sec_%d_Mod_%d", GeometryTGeo::getFCTSensorPattern(), mSegments[iSegment].getLayerNumber(), mSegments[iSegment].getSectorNumber(), mSegments[iSegment].getModuleNumber()));
636635
LOG(info) << "Adding FCT Sensitive Volume => " << v->GetName();
637636
AddSensitiveVolume(v);
638637
}

Detectors/Upgrades/ALICE3/FCT/simulation/src/FCTSegment.cxx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,28 @@ ClassImp(FCTSegment);
4040

4141
FCTSegment::~FCTSegment() = default;
4242

43-
FCTSegment::FCTSegment(Int_t segmentNumber, std::string segmentName, Double_t x, Double_t y, Double_t z, Double_t vertL, Double_t innerL, Double_t outerL, Double_t rotX, Double_t rotY, Double_t rotZ, Float_t segmentx2X0) :
44-
mSegmentNumber(segmentNumber), mSegmentName(segmentName), mx2X0(segmentx2X0),
43+
FCTSegment::FCTSegment(Int_t layerNumber, Int_t sectorNumber, Int_t moduleNumber, std::string segmentName, Double_t x, Double_t y, Double_t z, Double_t vertL, Double_t innerL, Double_t outerL, Double_t rotX, Double_t rotY, Double_t rotZ, Float_t segmentx2X0) :
44+
mLayerNumber(layerNumber), mSectorNumber(sectorNumber), mModuleNumber(moduleNumber), mSegmentName(segmentName), mx2X0(segmentx2X0),
4545
mX(x), mY(y), mZ(z), mRotX(rotX), mRotY(rotY), mRotZ(rotZ),
4646
mVertL(vertL), mInnerL(innerL), mOuterL(outerL)
4747
{
4848

4949
Float_t Si_X0 = 9.37; // In cm
5050
mChipThickness = mx2X0 * Si_X0;
51-
LOG(info) << "Creating FCT segment: segment " << mSegmentNumber;
51+
LOG(info) << "Creating FCT segment: Layer " << mLayerNumber << " Sector: " << mSectorNumber << " Module: " << mModuleNumber;
5252
LOG(info) << " Using silicon X0 = " << Si_X0 << " to emulate segment radiation length.";
5353
LOG(info) << " Segment z = " << mZ << " ; vertL = " << mVertL << " ; innerL = " << mInnerL << " ; outerL = " << mOuterL << " ; x2X0 = " << mx2X0 << " ; ChipThickness = " << mChipThickness;
5454
}
5555

5656
void FCTSegment::createSegment(TGeoVolume* motherVolume)
5757
{
58-
if (mSegmentNumber < 0) {
58+
if (mLayerNumber < 0 || mSectorNumber < 0 || mModuleNumber < 0) {
5959
return;
6060
}
6161
// Create tube, set sensitive volume, add to mother volume
6262

63-
std::string chipName = o2::fct::GeometryTGeo::getFCTChipPattern() + std::to_string(mSegmentNumber),
64-
sensName = Form("%s_%d", GeometryTGeo::getFCTSensorPattern(), mSegmentNumber);
63+
std::string chipName = Form("%s_Lay_%d_Sec_%d_Mod_%d", o2::fct::GeometryTGeo::getFCTChipPattern(), mLayerNumber, mSectorNumber, mModuleNumber);
64+
std::string sensName = Form("%s_Lay_%d_Sec_%d_Mod_%d", GeometryTGeo::getFCTSensorPattern(), mLayerNumber, mSectorNumber, mModuleNumber);
6565
TGeoTrap *sensor = new TGeoTrap(mChipThickness/2., 0., 0.,
6666
mVertL/2., mInnerL/2., mOuterL/2., 0.,
6767
mVertL/2., mInnerL/2., mOuterL/2., 0.);

0 commit comments

Comments
 (0)