Project
Loading...
Searching...
No Matches
SpecsV2.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
16
17#ifndef O2_ALICE_ITS3_SPECS
18#define O2_ALICE_ITS3_SPECS
19
20#include "Rtypes.h"
21
22#include <array>
23
24// This files defines the design specifications of the chip.
25// Each TGeoShape has the following properties
26// length: dimension in z-axis
27// width: dimension in xy-axes
28// color: for visulisation
30{
31constexpr double cm{1e+2}; // This is the default unit of TGeo so we use this as scale
32constexpr double mu{1e-6 * cm};
33constexpr double mm{1e-3 * cm};
34namespace pixelarray
35{
36constexpr double width{9.197 * mm};
37constexpr double length{3.571 * mm};
38constexpr int nCols{156};
39constexpr int nRows{442};
40constexpr int nPixels{nRows * nCols};
41constexpr EColor color{kGreen};
42constexpr double area{width * length};
43} // namespace pixelarray
44namespace tile
45{
46namespace biasing
47{
48constexpr double width{0.06 * mm};
49constexpr double length{3.571 * mm};
50constexpr EColor color{kYellow};
51static_assert(length == pixelarray::length);
52} // namespace biasing
53namespace powerswitches
54{
55constexpr double width{9.257 * mm};
56constexpr double length{0.02 * mm};
57constexpr double z{pixelarray::width};
58constexpr EColor color{kBlue};
59} // namespace powerswitches
60namespace readout
61{
62constexpr double width{0.525 * mm};
63constexpr double length{3.591 * mm};
64constexpr EColor color{kMagenta};
65static_assert(length == (biasing::length + powerswitches::length));
66} // namespace readout
67constexpr double length{readout::length};
69} // namespace tile
70namespace rsu
71{
72namespace databackbone
73{
74constexpr double width{9.782 * mm};
75constexpr double length{0.06 * mm};
76constexpr EColor color{kRed};
77} // namespace databackbone
78constexpr double width{19.564 * mm};
79constexpr double length{21.666 * mm};
80constexpr unsigned int nTiles{12};
81} // namespace rsu
82namespace segment
83{
84constexpr double width{rsu::width};
85namespace lec
86{
87constexpr double width{segment::width};
88constexpr double length{4.5 * mm};
89constexpr EColor color{kCyan};
90} // namespace lec
91namespace rec
92{
93constexpr double width{segment::width};
94constexpr double length{1.5 * mm};
95constexpr EColor color{kCyan};
96} // namespace rec
97constexpr unsigned int nRSUs{12};
98constexpr unsigned int nTilesPerSegment{nRSUs * rsu::nTiles};
101} // namespace segment
102namespace carbonfoam
103{
104// TODO: Waiting for the further information from WP5(Corrado)
105constexpr double longeronsWidth{2.0 * mm}; // what is the height of the longerons?
106constexpr double longeronsLength{263 * mm}; // from blueprint
107constexpr double HringLength{6.0 * mm}; // from blueprint
108constexpr double edgeBetwChipAndFoam{1.0 * mm}; // from blueprint but not used cause forms are already overlapping
109constexpr double gapBetwHringsLongerons{0.05 * mm}; // from blueprint
110constexpr std::array<int, 3> nHoles{11, 11, 11}; // how many holes for each layer?
111constexpr std::array<double, 3> radiusHoles{1.0 * mm, 1.0 * mm, 2.0 * mm}; // what is the radius of the holes for each layer?
112constexpr EColor color{kGray};
113} // namespace carbonfoam
114namespace metalstack
115{
116constexpr double thickness{5 * mu}; // physical thickness of the copper metal stack
117constexpr double length{segment::length};
118constexpr double width{segment::width};
119constexpr EColor color{kBlack};
120} // namespace metalstack
121namespace silicon
122{
123constexpr double thickness{45 * mu}; // thickness of silicon
124constexpr double thicknessIn{(thickness + metalstack::thickness) / 2.}; // inner silicon thickness
125constexpr double thicknessOut{(thickness - metalstack::thickness) / 2.}; // outer silicon thickness
126} // namespace silicon
127constexpr unsigned int nLayers{3};
128constexpr unsigned int nTotLayers{7};
129constexpr unsigned int nSensorsIB{2 * nLayers};
130constexpr double equatorialGap{1 * mm};
131constexpr std::array<unsigned int, nLayers> nSegments{3, 4, 5};
132constexpr double totalThickness{silicon::thickness + metalstack::thickness}; // total chip thickness
133constexpr std::array<double, nLayers> radii{19.0006 * mm, 25.228 * mm, 31.4554 * mm}; // nominal radius
134constexpr std::array<double, nLayers> radiiInner{radii[0] - silicon::thicknessIn, radii[1] - silicon::thicknessIn, radii[2] - silicon::thicknessIn}; // inner silicon radius
135constexpr std::array<double, nLayers> radiiOuter{radii[0] + silicon::thicknessOut, radii[1] + silicon::thicknessOut, radii[2] + silicon::thicknessOut}; // outer silicon radius
136constexpr std::array<double, nLayers> radiiMiddle{(radiiInner[0] + radiiOuter[0]) / 2., (radiiInner[1] + radiiOuter[1]) / 2., (radiiInner[2] + radiiOuter[2]) / 2.}; // middle silicon radius
137constexpr double nominalYShift{-metalstack::thickness / 2.}; // shift to position in silicion volume to the chip volume (silicon+metalstack)
138
139// extra information of pixels and their response functions
140namespace pixelarray::pixels
141{
142namespace mosaix
143{
144constexpr double pitchX{width / static_cast<double>(nRows)};
145constexpr double pitchZ{length / static_cast<double>(nCols)};
146} // namespace mosaix
147namespace apts
148{
149constexpr double pitchX{15.0 * mu};
150constexpr double pitchZ{15.0 * mu};
151constexpr double responseUpperLimit{10 * mu};
152constexpr double responseYShift{responseUpperLimit - silicon::thicknessOut};
153} // namespace apts
154namespace moss
155{
156namespace top
157{
158constexpr double pitchX{22.5 * mu};
159constexpr double pitchZ{22.5 * mu};
160} // namespace top
161namespace bot
162{
163constexpr double pitchX{18.0 * mu};
164constexpr double pitchZ{18.0 * mu};
165} // namespace bot
166} // namespace moss
167} // namespace pixelarray::pixels
168
169namespace detID
170{
171constexpr unsigned int mDetIDs{2 * 12 * 12 * 12}; //< 2 Hemispheres * (3,4,5=12 segments in a layer) * 12 RSUs in a segment * 12 Tiles in a RSU
172constexpr unsigned int l0IDStart{0}; //< Start DetID layer 0
173constexpr unsigned int l0IDEnd{(2 * 3 * 12 * 12) - 1}; //< End First DetID layer 0; inclusive range
174constexpr unsigned int l0IDTot{2 * 3 * 12 * 12}; //< Total DetID in Layer 0
175constexpr unsigned int l1IDStart{l0IDEnd + 1}; //< Start DetID layer 1
176constexpr unsigned int l1IDEnd{l1IDStart + (2 * 4 * 12 * 12) - 1}; //< End First DetID layer 1; inclusive range
177constexpr unsigned int l1IDTot{2 * 4 * 12 * 12}; //< Total DetID in Layer 1
178constexpr unsigned int l2IDStart{l1IDEnd + 1}; //< Start DetID layer 2
179constexpr unsigned int l2IDEnd{l2IDStart + (2 * 5 * 12 * 12) - 1}; //< End First DetID layer 2; inclusive range
180constexpr unsigned int l2IDTot{2 * 5 * 12 * 12}; //< Total DetID in Layer 2
181constexpr unsigned int nChips{l2IDEnd + 1}; //< number of Chips (PixelArrays) in IB
182
183template <typename T = int>
184inline T getDetID2Layer(T detID)
185{
186 if (static_cast<T>(l0IDStart) <= detID && detID <= static_cast<T>(l0IDEnd)) {
187 return 0;
188 } else if (static_cast<T>(l1IDStart) <= detID && detID <= static_cast<T>(l1IDEnd)) {
189 return 1;
190 } else if (static_cast<T>(l2IDStart) <= detID && detID <= static_cast<T>(l2IDEnd)) {
191 return 2;
192 }
193 return -1;
194}
195
196template <typename T = int>
197inline T getSensorID(T detID)
198{
199 auto layer = getDetID2Layer(detID);
200 if (layer == 0) {
201 return ((detID - l0IDStart) < static_cast<T>(l0IDTot) / 2) ? 0 : 1;
202 } else if (layer == 1) {
203 return ((detID - l1IDStart) < static_cast<T>(l1IDTot) / 2) ? 2 : 3;
204 } else if (layer == 2) {
205 return ((detID - l2IDStart) < static_cast<T>(l2IDTot) / 2) ? 4 : 5;
206 }
207 return -1;
208}
209
210template <typename T = int>
211inline bool isDetITS3(T detID)
212{
213 return detID < static_cast<T>(nChips);
214}
215
216} // namespace detID
217} // namespace o2::its3::constants
218
219#endif
GLuint segment
Definition glcorearb.h:4945
GLuint color
Definition glcorearb.h:1272
GLdouble GLdouble GLdouble GLdouble top
Definition glcorearb.h:4077
GLint GLsizei width
Definition glcorearb.h:270
GLuint GLsizei GLsizei * length
Definition glcorearb.h:790
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
constexpr std::array< double, 3 > radiusHoles
Definition SpecsV2.h:111
constexpr double longeronsLength
Definition SpecsV2.h:106
constexpr double edgeBetwChipAndFoam
Definition SpecsV2.h:108
constexpr double longeronsWidth
Definition SpecsV2.h:105
constexpr double HringLength
Definition SpecsV2.h:107
constexpr std::array< int, 3 > nHoles
Definition SpecsV2.h:110
constexpr double gapBetwHringsLongerons
Definition SpecsV2.h:109
constexpr unsigned int nChips
Definition SpecsV2.h:181
constexpr unsigned int l2IDTot
Definition SpecsV2.h:180
constexpr unsigned int l1IDStart
Definition SpecsV2.h:175
constexpr unsigned int l0IDStart
Definition SpecsV2.h:172
constexpr unsigned int l2IDEnd
Definition SpecsV2.h:179
constexpr unsigned int l2IDStart
Definition SpecsV2.h:178
constexpr unsigned int l0IDTot
Definition SpecsV2.h:174
constexpr unsigned int l1IDEnd
Definition SpecsV2.h:176
bool isDetITS3(T detID)
Definition SpecsV2.h:211
constexpr unsigned int l1IDTot
Definition SpecsV2.h:177
constexpr unsigned int mDetIDs
Definition SpecsV2.h:171
constexpr unsigned int l0IDEnd
Definition SpecsV2.h:173
constexpr double thickness
Definition SpecsV2.h:116
constexpr double length
Definition SpecsV2.h:37
constexpr double width
Definition SpecsV2.h:78
constexpr double length
Definition SpecsV2.h:79
constexpr unsigned int nTiles
Definition SpecsV2.h:80
constexpr double lengthSensitive
Definition SpecsV2.h:100
constexpr unsigned int nRSUs
Definition SpecsV2.h:97
constexpr unsigned int nTilesPerSegment
Definition SpecsV2.h:98
constexpr double thicknessOut
Definition SpecsV2.h:125
constexpr double thicknessIn
Definition SpecsV2.h:124
constexpr double thickness
Definition SpecsV2.h:123
constexpr std::array< double, nLayers > radiiOuter
Definition SpecsV2.h:135
constexpr double nominalYShift
Definition SpecsV2.h:137
constexpr unsigned int nSensorsIB
Definition SpecsV2.h:129
constexpr double totalThickness
Definition SpecsV2.h:132
constexpr double cm
Definition SpecsV2.h:31
constexpr std::array< unsigned int, nLayers > nSegments
Definition SpecsV2.h:131
constexpr double mu
Definition SpecsV2.h:32
constexpr std::array< double, nLayers > radii
Definition SpecsV2.h:133
constexpr std::array< double, nLayers > radiiInner
Definition SpecsV2.h:134
constexpr double mm
Definition SpecsV2.h:33
constexpr double equatorialGap
Definition SpecsV2.h:130
constexpr std::array< double, nLayers > radiiMiddle
Definition SpecsV2.h:136
constexpr unsigned int nTotLayers
Definition SpecsV2.h:128
constexpr unsigned int nLayers
Definition SpecsV2.h:127
GPUReconstruction * rec