Project
Loading...
Searching...
No Matches
VDLayer.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_VD_LAYER_H
13#define ALICEO2_VD_LAYER_H
14
15#include <string>
16#include <Rtypes.h>
17
18class TGeoVolume;
19class TGeoMatrix;
20
21namespace o2
22{
23namespace trk
24{
25
26// Base class for a VD layer
28{
29 public:
30 VDLayer() = default;
31 VDLayer(int layerNumber, const std::string& layerName, double layerX2X0);
32 virtual ~VDLayer() = default;
33
34 // Create the layer (AIR container + sensors) and insert it into mother
35 virtual void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const = 0;
36
37 double getChipThickness() const { return mChipThickness; }
38
39 protected:
41 std::string mLayerName;
42 double mX2X0{0.f}; // Radiation length in units of X0
43 double mChipThickness{0.f}; // thickness derived from X/X0
44 double mSensorThickness{0.f}; //
45 double mModuleWidth{4.54f}; // cm
46
47 // ClassDef(VDLayer, 1)
48};
49
50// Cylindrical segment layer
52{
53 public:
54 VDCylindricalLayer(int layerNumber, const std::string& layerName, double layerX2X0,
55 double radius, double phiSpanDeg, double lengthZ, double lengthSensZ);
56
57 TGeoVolume* createSensor() const; // builds the sensor volume
58 TGeoVolume* createChip() const;
59 TGeoVolume* createMetalStack() const;
60 void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;
61
62 private:
63 double mRadius{0.f};
64 double mPhiSpanDeg{0.f}; // degrees
65 double mLengthZ{0.f}; // layer container length in Z
66 double mLengthSensZ{0.f}; // sensor length in Z
67
68 // ClassDef(VDCylindricalLayer, 1)
69};
70
71// Rectangular segment layer
73{
74 public:
75 VDRectangularLayer(int layerNumber, const std::string& layerName, double layerX2X0,
76 double width, double lengthZ, double lengthSensZ);
77
78 TGeoVolume* createSensor() const;
79 TGeoVolume* createChip() const;
80 TGeoVolume* createMetalStack() const;
81 void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;
82
83 private:
84 double mWidth{0.f};
85 double mLengthZ{0.f};
86 double mLengthSensZ{0.f};
87
88 // ClassDef(VDRectangularLayer, 1)
89};
90
91// Disk segment layer
92class VDDiskLayer : public VDLayer
93{
94 public:
95 VDDiskLayer(int layerNumber, const std::string& layerName, double layerX2X0,
96 double rMin, double rMax, double phiSpanDeg, double zPos);
97
98 TGeoVolume* createSensor() const;
99 TGeoVolume* createChip() const;
100 TGeoVolume* createMetalStack() const;
101 void createLayer(TGeoVolume* motherVolume, TGeoMatrix* combiTrans = nullptr) const override;
102
103 double getZPosition() const { return mZPos; }
104
105 private:
106 double mRMin{0.f};
107 double mRMax{0.f};
108 double mPhiSpanDeg{0.f}; // degrees
109 double mZPos{0.f}; // placement along Z
110
111 // ClassDef(VDDiskLayer, 1)
112};
113
114} // namespace trk
115} // namespace o2
116
117#endif // ALICEO2_VD_LAYER_H
void createLayer(TGeoVolume *motherVolume, TGeoMatrix *combiTrans=nullptr) const override
Definition VDLayer.cxx:395
TGeoVolume * createSensor() const
Definition VDLayer.cxx:76
TGeoVolume * createChip() const
Definition VDLayer.cxx:260
TGeoVolume * createMetalStack() const
Definition VDLayer.cxx:157
double getZPosition() const
Definition VDLayer.h:103
TGeoVolume * createMetalStack() const
Definition VDLayer.cxx:220
void createLayer(TGeoVolume *motherVolume, TGeoMatrix *combiTrans=nullptr) const override
Definition VDLayer.cxx:505
TGeoVolume * createChip() const
Definition VDLayer.cxx:341
TGeoVolume * createSensor() const
Definition VDLayer.cxx:123
double mModuleWidth
Definition VDLayer.h:45
std::string mLayerName
Definition VDLayer.h:41
double mSensorThickness
Definition VDLayer.h:44
VDLayer()=default
virtual void createLayer(TGeoVolume *motherVolume, TGeoMatrix *combiTrans=nullptr) const =0
double getChipThickness() const
Definition VDLayer.h:37
double mChipThickness
Definition VDLayer.h:43
virtual ~VDLayer()=default
TGeoVolume * createSensor() const
Definition VDLayer.cxx:99
void createLayer(TGeoVolume *motherVolume, TGeoMatrix *combiTrans=nullptr) const override
Definition VDLayer.cxx:451
TGeoVolume * createMetalStack() const
Definition VDLayer.cxx:189
TGeoVolume * createChip() const
Definition VDLayer.cxx:300
GLint GLsizei width
Definition glcorearb.h:270
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...