Project
Loading...
Searching...
No Matches
GeometryTGeo.h
Go to the documentation of this file.
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.
4//
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".
7//
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
10// or submit itself to any jurisdiction.
11
12#ifndef ALICEO2_TRK_GEOMETRYTGEO_H
13#define ALICEO2_TRK_GEOMETRYTGEO_H
14
15#include <memory>
19
20namespace o2
21{
22namespace trk
23{
25{
26 public:
28 using DetMatrixCache::getMatrixL2G;
29 using DetMatrixCache::getMatrixT2GRot;
30 using DetMatrixCache::getMatrixT2L;
31 // this method is not advised for ITS: for barrel detectors whose tracking frame is just a rotation
32 // it is cheaper to use T2GRot
33 using DetMatrixCache::getMatrixT2G;
34 GeometryTGeo(bool build = false, int loadTrans = 0);
36 void Build(int loadTrans);
37 void fillMatrixCache(int mask);
39 {
40 if (!sInstance) {
41 sInstance = std::make_unique<GeometryTGeo>(true, 0);
42 }
43 return sInstance.get();
44 };
45 static const char* getTRKVolPattern() { return sVolumeName.c_str(); }
46 static const char* getTRKLayerPattern() { return sLayerName.c_str(); }
47 static const char* getTRKPetalAssemblyPattern() { return sPetalAssemblyName.c_str(); }
48 static const char* getTRKPetalPattern() { return sPetalName.c_str(); }
49 static const char* getTRKPetalDiskPattern() { return sPetalDiskName.c_str(); }
50 static const char* getTRKPetalLayerPattern() { return sPetalLayerName.c_str(); }
51 static const char* getTRKStavePattern() { return sStaveName.c_str(); }
52 static const char* getTRKHalfStavePattern() { return sHalfStaveName.c_str(); }
53 static const char* getTRKModulePattern() { return sModuleName.c_str(); }
54 static const char* getTRKChipPattern() { return sChipName.c_str(); }
55 static const char* getTRKSensorPattern() { return sSensorName.c_str(); }
56 static const char* getTRKDeadzonePattern() { return sDeadzoneName.c_str(); }
57 static const char* getTRKMetalStackPattern() { return sMetalStackName.c_str(); }
58
59 static const char* getTRKWrapVolPattern() { return sWrapperVolumeName.c_str(); }
60
61 int getNumberOfChips() const { return mSize; }
62
65 int extractNumberOfLayersVD() const;
66 int extractNumberOfPetalsVD() const;
68 int extractNumberOfDisksVD() const;
70 int extractNumberOfStavesMLOT(int lay) const;
71 int extractNumberOfHalfStavesMLOT(int lay) const;
72 int extractNumberOfModulesMLOT(int lay) const;
73 int extractNumberOfChipsMLOT(int lay) const;
74
76 int extractVolumeCopy(const char* name, const char* prefix) const;
77
80 int getNumberOfHalfStaves(int lay) const { return mNumberOfHalfStaves[lay]; }
81
82 bool isOwner() const { return mOwner; }
83 void setOwner(bool v) { mOwner = v; }
84
85 void Print(Option_t* opt = "") const;
86 void PrintChipID(int index, int subDetID, int petalcase, int disk, int lay, int stave, int halfstave, int mod, int chip) const;
87
88 int getSubDetID(int index) const;
89 int getPetalCase(int index) const;
90 int getDisk(int index) const;
91 int getLayer(int index) const;
92 int getStave(int index) const;
93 int getHalfStave(int index) const;
94 int getModule(int index) const;
95 int getChip(int index) const;
96
97 void defineMLOTSensors();
98 int getBarrelLayer(int) const;
99
100 // sensor ref X and alpha for ML & OT
101 void extractSensorXAlphaMLOT(int, float&, float&);
102
103 // cache for tracking frames (ML & OT)
104 bool isTrackingFrameCachedMLOT() const { return !mCacheRefXMLOT.empty(); }
106
108 float getSensorXMLOT(int index) const { return mCacheRefXMLOT[index]; }
109
110 // create matrix for tracking to local frame for MLOT
111 TGeoHMatrix& createT2LMatrixMLOT(int);
112
123 unsigned short getChipIndex(int subDetID, int petalcase, int disk, int lay, int stave, int halfstave, int mod, int chip) const;
124
133 unsigned short getChipIndex(int subDetID, int volume, int lay, int stave, int halfstave, int mod, int chip) const;
134
145 bool getChipID(int index, int& subDetID, int& petalcase, int& disk, int& lay, int& stave, int& halfstave, int& mod, int& chip) const;
146
147 unsigned short getLastChipIndex(int lay) const { return mLastChipIndex[lay]; }
148 unsigned short getFirstChipIndex(int lay, int petalcase, int subDetID) const
149 {
151 if (subDetID == 0) { // VD
152 return (petalcase == 0) ? 0 : mLastChipIndexVD[petalcase - 1] + 1;
153 } else if (subDetID == 1) { // MLOT
154 return mLastChipIndex[lay + mNumberOfPetalsVD - 1] + 1;
155 }
156 return -1; // not found
157 }
158
161 TGeoHMatrix* extractMatrixSensor(int index) const;
162
163 TString getMatrixPath(int index) const;
164
165#ifdef ENABLE_UPGRADES
166 static const char* composeSymNameTRK(int d)
167 {
168 return Form("%s_%d", o2::detectors::DetID(o2::detectors::DetID::TRK).getName(), d);
169 }
170#endif
171
172 static const char* composeSymNameLayer(int d, int layer);
173 static const char* composeSymNameStave(int d, int layer);
174 static const char* composeSymNameModule(int d, int layer);
175 static const char* composeSymNameChip(int d, int layer);
176 static const char* composeSymNameSensor(int d, int layer);
177
178 protected:
179 static constexpr int MAXLAYERS = 20;
180
181 static std::string sVolumeName;
182 static std::string sLayerName;
183 static std::string sPetalAssemblyName;
184 static std::string sPetalName;
185 static std::string sPetalDiskName;
186 static std::string sPetalLayerName;
187 static std::string sStaveName;
188 static std::string sHalfStaveName;
189 static std::string sModuleName;
190 static std::string sChipName;
191 static std::string sSensorName;
192 static std::string sDeadzoneName;
193 static std::string sMetalStackName;
194
195 static std::string sWrapperVolumeName;
196
202 std::vector<int> mNumberOfStaves;
203 std::vector<int> mNumberOfHalfStaves;
204 std::vector<int> mNumberOfModules;
205 std::vector<int> mNumberOfChips;
206 std::vector<int> mNumberOfChipsPerLayerVD;
207 std::vector<int> mNumberOfChipsPerLayerMLOT;
208 std::vector<int> mNumbersOfChipPerDiskVD;
209 std::vector<int> mNumberOfChipsPerPetalVD;
210 // std::vector<int> mNumberOfChipsPerStave; ///< number of chips per stave in ML/OT
211 // std::vector<int> mNumberOfChipsPerHalfStave; ///< number of chips per half stave in ML/OT
212 // std::vector<int> mNumberOfChipsPerModule; ///< number of chips per module in ML/OT
213 std::vector<unsigned short> mLastChipIndex;
214 std::vector<unsigned short> mLastChipIndexVD;
215 std::vector<unsigned short> mLastChipIndexMLOT;
216
217 std::array<char, MAXLAYERS> mLayerToWrapper;
218
219 bool mOwner = true;
220
221 std::vector<int> sensorsMLOT;
222 std::vector<float> mCacheRefXMLOT;
223 std::vector<float> mCacheRefAlphaMLOT;
224
225 eLayout mLayoutML; // Type of segmentation for the middle layers
226 eLayout mLayoutOL; // Type of segmentation for the outer layers
227
228 private:
229 static std::unique_ptr<o2::trk::GeometryTGeo> sInstance;
230};
231
232} // namespace trk
233} // namespace o2
234#endif
Static class with identifiers, bitmasks and names for ALICE detectors.
Definition DetID.h:58
const char * getName() const
int mSize
prebooked number of sensors
static const char * composeSymNameModule(int d, int layer)
static const char * getTRKPetalDiskPattern()
int getModule(int index) const
static std::string sPetalAssemblyName
static const char * getTRKStavePattern()
int getPetalCase(int index) const
static const char * getTRKChipPattern()
std::vector< int > mNumberOfChipsPerLayerVD
number of chips per layer VD ( = number of petals)
static std::string sVolumeName
int getSubDetID(int index) const
std::array< char, MAXLAYERS > mLayerToWrapper
Layer to wrapper correspondence, not implemented yet.
static const char * composeSymNameChip(int d, int layer)
static std::string sPetalLayerName
static const char * getTRKSensorPattern()
static std::string sStaveName
static constexpr int MAXLAYERS
max number of active layers
bool getChipID(int index, int &subDetID, int &petalcase, int &disk, int &lay, int &stave, int &halfstave, int &mod, int &chip) const
std::vector< int > mNumberOfHalfStaves
Number Of Half staves in each stave of the layer in ML/OT.
int extractNumberOfChipsPerPetalVD() const
bool isTrackingFrameCachedMLOT() const
int extractNumberOfHalfStavesMLOT(int lay) const
static const char * getTRKPetalLayerPattern()
int getChip(int index) const
int extractNumberOfLayersMLOT()
Determines the number of active parts in the Geometry.
int extractNumberOfChipsMLOT(int lay) const
std::vector< int > mNumbersOfChipPerDiskVD
numbersOfChipPerDiskVD
std::vector< int > mNumberOfStaves
Number Of Staves per layer in ML/OT.
float getSensorXMLOT(int index) const
Int_t mNumberOfPetalsVD
number of Petals = chip in each VD layer
std::vector< int > mNumberOfModules
Number Of Modules per stave (half stave) in ML/OT.
static std::string sPetalName
int extractNumberOfStavesMLOT(int lay) const
float getSensorRefAlphaMLOT(int index) const
static std::string sPetalDiskName
void Print(Option_t *opt="") const
int getLayer(int index) const
std::vector< unsigned short > mLastChipIndexVD
max ID of the detctor in the layer for the VD
static const char * getTRKWrapVolPattern()
std::vector< float > mCacheRefXMLOT
TString getMatrixPath(int index) const
static const char * getTRKDeadzonePattern()
static const char * getTRKPetalAssemblyPattern()
int getNumberOfChips() const
static const char * getTRKLayerPattern()
static std::string sHalfStaveName
eLayout mLayoutML
cache for sensor ref alpha ML and OT
unsigned short getFirstChipIndex(int lay, int petalcase, int subDetID) const
std::vector< int > mNumberOfChips
number of chips per module in ML/OT
static std::string sWrapperVolumeName
Wrapper volume name, not implemented at the moment.
TGeoHMatrix & createT2LMatrixMLOT(int)
std::vector< float > mCacheRefAlphaMLOT
cache for X of ML and OT
static const char * getTRKHalfStavePattern()
int extractNumberOfLayersVD() const
std::vector< int > mNumberOfChipsPerPetalVD
numbersOfChipPerPetalVD
static std::string sMetalStackName
static std::string sChipName
static std::string sSensorName
void fillMatrixCache(int mask)
std::vector< int > sensorsMLOT
is it owned by the singleton?
static std::string sDeadzoneName
static std::string sLayerName
unsigned short getChipIndex(int subDetID, int petalcase, int disk, int lay, int stave, int halfstave, int mod, int chip) const
int extractNumberOfActivePartsVD() const
void PrintChipID(int index, int subDetID, int petalcase, int disk, int lay, int stave, int halfstave, int mod, int chip) const
static const char * composeSymNameSensor(int d, int layer)
void setOwner(bool v)
int extractNumberOfModulesMLOT(int lay) const
int extractNumberOfDisksVD() const
int getNumberOfHalfStaves(int lay) const
static const char * getTRKPetalPattern()
int getNumberOfLayersMLOT() const
Int_t mNumberOfActivePartsVD
number of layers
int getNumberOfActivePartsVD() const
std::vector< int > mNumberOfChipsPerLayerMLOT
number of chips per layer MLOT
static const char * getTRKMetalStackPattern()
Int_t mNumberOfDisksVD
number of Disks = 6
std::vector< unsigned short > mLastChipIndexMLOT
max ID of the detctor in the layer for the MLOT
Int_t mNumberOfLayersMLOT
number of layers
static const char * composeSymNameLayer(int d, int layer)
int getStave(int index) const
int getBarrelLayer(int) const
static const char * getTRKVolPattern()
static const char * getTRKModulePattern()
static const char * composeSymNameStave(int d, int layer)
int getDisk(int index) const
int extractNumberOfPetalsVD() const
int extractVolumeCopy(const char *name, const char *prefix) const
Extract number following the prefix in the name string.
std::vector< unsigned short > mLastChipIndex
max ID of the detctor in the petal(VD) or layer(MLOT)
void extractSensorXAlphaMLOT(int, float &, float &)
void Build(int loadTrans)
Int_t mNumberOfLayersVD
number of layers
static GeometryTGeo * Instance()
int getHalfStave(int index) const
TGeoHMatrix * extractMatrixSensor(int index) const
static std::string sModuleName
unsigned short getLastChipIndex(int lay) const
const GLdouble * v
Definition glcorearb.h:832
GLuint index
Definition glcorearb.h:781
GLuint const GLchar * name
Definition glcorearb.h:781
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
GLint GLuint mask
Definition glcorearb.h:291
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...