Project
Loading...
Searching...
No Matches
Layer.cxx
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
14
15#include "Framework/Logger.h"
16
17#include <TGeoTube.h>
18#include <TGeoVolume.h>
19
20namespace o2
21{
22namespace iotof
23{
24Layer::Layer(std::string layerName, float rInn, float rOut, float zLength, float zOffset, float layerX2X0, bool isBarrel)
25 : mLayerName(layerName), mInnerRadius(rInn), mOuterRadius(rOut), mZLength(zLength), mZOffset(zOffset), mX2X0(layerX2X0), mIsBarrel(isBarrel)
27 float Si_X0 = 9.5f;
28 mChipThickness = mX2X0 * Si_X0;
29 if (isBarrel) {
30 mOuterRadius = mInnerRadius + mChipThickness;
31 } else {
32 mZLength = mChipThickness;
33 }
34 LOGP(info, "TOF: Creating {} layer: rInner: {} (cm) rOuter: {} (cm) zLength: {} (cm) zOffset: {} x2X0: {}", isBarrel ? std::string("barrel") : std::string("forward"), mInnerRadius, mOuterRadius, mZLength, mZOffset, mX2X0);
35}
36
37void ITOFLayer::createLayer(TGeoVolume* motherVolume)
38{
39 std::string chipName = o2::iotof::GeometryTGeo::getITOFChipPattern(),
41
42 TGeoTube* sensor = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
43 TGeoTube* chip = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
44 TGeoTube* layer = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
45
46 TGeoMedium* medSi = gGeoManager->GetMedium("TF3_SILICON$");
47 TGeoMedium* medAir = gGeoManager->GetMedium("TF3_AIR$");
48
49 LOGP(info, "Media: {} {}", (void*)medSi, (void*)medAir);
50
51 TGeoVolume* sensVol = new TGeoVolume(sensName.c_str(), sensor, medSi);
52 TGeoVolume* chipVol = new TGeoVolume(chipName.c_str(), chip, medSi);
53 TGeoVolume* layerVol = new TGeoVolume(mLayerName.c_str(), layer, medAir);
54 sensVol->SetLineColor(kRed + 3);
55 chipVol->SetLineColor(kRed + 3);
56 layerVol->SetLineColor(kRed + 3);
57
58 LOGP(info, "Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
59 chipVol->AddNode(sensVol, 1, nullptr);
60
61 LOGP(info, "Inserting {} in {} ", chipVol->GetName(), layerVol->GetName());
62 layerVol->AddNode(chipVol, 1, nullptr);
63
64 LOGP(info, "Inserting {} in {} ", layerVol->GetName(), motherVolume->GetName());
65 motherVolume->AddNode(layerVol, 1, nullptr);
66}
67
68void OTOFLayer::createLayer(TGeoVolume* motherVolume)
69{
70 std::string chipName = o2::iotof::GeometryTGeo::getOTOFChipPattern(),
72
73 TGeoTube* sensor = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
74 TGeoTube* chip = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
75 TGeoTube* layer = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
76
77 TGeoMedium* medSi = gGeoManager->GetMedium("TF3_SILICON$");
78 TGeoMedium* medAir = gGeoManager->GetMedium("TF3_AIR$");
79
80 TGeoVolume* sensVol = new TGeoVolume(sensName.c_str(), sensor, medSi);
81 TGeoVolume* chipVol = new TGeoVolume(chipName.c_str(), chip, medSi);
82 TGeoVolume* layerVol = new TGeoVolume(mLayerName.c_str(), layer, medAir);
83 sensVol->SetLineColor(kRed + 3);
84 chipVol->SetLineColor(kRed + 3);
85 layerVol->SetLineColor(kRed + 3);
86
87 LOGP(info, "Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
88 chipVol->AddNode(sensVol, 1, nullptr);
89
90 LOGP(info, "Inserting {} in {} ", chipVol->GetName(), layerVol->GetName());
91 layerVol->AddNode(chipVol, 1, nullptr);
92
93 LOGP(info, "Inserting {} in {} ", layerVol->GetName(), motherVolume->GetName());
94 motherVolume->AddNode(layerVol, 1, nullptr);
95}
96
97void FTOFLayer::createLayer(TGeoVolume* motherVolume)
98{
99 std::string chipName = o2::iotof::GeometryTGeo::getFTOFChipPattern(),
101
102 TGeoTube* sensor = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
103 TGeoTube* chip = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
104 TGeoTube* layer = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
105
106 TGeoMedium* medSi = gGeoManager->GetMedium("TF3_SILICON$");
107 TGeoMedium* medAir = gGeoManager->GetMedium("TF3_AIR$");
108
109 TGeoVolume* sensVol = new TGeoVolume(sensName.c_str(), sensor, medSi);
110 TGeoVolume* chipVol = new TGeoVolume(chipName.c_str(), chip, medSi);
111 TGeoVolume* layerVol = new TGeoVolume(mLayerName.c_str(), layer, medAir);
112 sensVol->SetLineColor(kRed + 3);
113 chipVol->SetLineColor(kRed + 3);
114 layerVol->SetLineColor(kRed + 3);
115
116 LOGP(info, "Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
117 chipVol->AddNode(sensVol, 1, nullptr);
118
119 LOGP(info, "Inserting {} in {} ", chipVol->GetName(), layerVol->GetName());
120 layerVol->AddNode(chipVol, 1, nullptr);
121
122 auto* fwdTOFRotation = new TGeoRotation("fwdTOFRotation", 0, 0, 180);
123 auto* fwdTOFCombiTrans = new TGeoCombiTrans(0, 0, mZOffset, fwdTOFRotation);
124
125 LOGP(info, "Inserting {} in {} ", layerVol->GetName(), motherVolume->GetName());
126 motherVolume->AddNode(layerVol, 1, fwdTOFCombiTrans);
127}
128
129void BTOFLayer::createLayer(TGeoVolume* motherVolume)
130{
131 std::string chipName = o2::iotof::GeometryTGeo::getBTOFChipPattern(),
133
134 TGeoTube* sensor = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
135 TGeoTube* chip = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
136 TGeoTube* layer = new TGeoTube(mInnerRadius, mOuterRadius, mZLength / 2);
137
138 TGeoMedium* medSi = gGeoManager->GetMedium("TF3_SILICON$");
139 TGeoMedium* medAir = gGeoManager->GetMedium("TF3_AIR$");
140
141 TGeoVolume* sensVol = new TGeoVolume(sensName.c_str(), sensor, medSi);
142 TGeoVolume* chipVol = new TGeoVolume(chipName.c_str(), chip, medSi);
143 TGeoVolume* layerVol = new TGeoVolume(mLayerName.c_str(), layer, medAir);
144 sensVol->SetLineColor(kRed + 3);
145 chipVol->SetLineColor(kRed + 3);
146 layerVol->SetLineColor(kRed + 3);
147
148 LOGP(info, "Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
149 chipVol->AddNode(sensVol, 1, nullptr);
150
151 LOGP(info, "Inserting {} in {} ", chipVol->GetName(), layerVol->GetName());
152 layerVol->AddNode(chipVol, 1, nullptr);
153
154 auto* bwdTOFRotation = new TGeoRotation("bwdTOFRotation", 0, 0, 180);
155 auto* fwdTOFCombiTrans = new TGeoCombiTrans(0, 0, mZOffset, bwdTOFRotation);
156
157 LOGP(info, "Inserting {} in {} ", layerVol->GetName(), motherVolume->GetName());
158 motherVolume->AddNode(layerVol, 1, fwdTOFCombiTrans);
159}
160
161} // namespace iotof
162} // namespace o2
virtual void createLayer(TGeoVolume *motherVolume) override
Definition Layer.cxx:129
virtual void createLayer(TGeoVolume *motherVolume) override
Definition Layer.cxx:97
static const char * getITOFChipPattern()
static const char * getFTOFSensorPattern()
static const char * getFTOFChipPattern()
static const char * getBTOFChipPattern()
static const char * getOTOFSensorPattern()
static const char * getITOFSensorPattern()
static const char * getOTOFChipPattern()
static const char * getBTOFSensorPattern()
virtual void createLayer(TGeoVolume *motherVolume) override
Definition Layer.cxx:37
float mZOffset
Definition Layer.h:45
float mOuterRadius
Definition Layer.h:43
float mZLength
Definition Layer.h:44
std::string mLayerName
Definition Layer.h:41
float mInnerRadius
Definition Layer.h:42
virtual void createLayer(TGeoVolume *motherVolume) override
Definition Layer.cxx:68
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...