Project
Loading...
Searching...
No Matches
TRKPetalLayer.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 "TGeoBBox.h"
19#include "TGeoVolume.h"
20#include "TGeoTube.h"
21#include "TGeoMatrix.h"
22
23#include "TMath.h"
24
25namespace o2
26{
27namespace trk
28{
29TRKPetalLayer::TRKPetalLayer(Int_t layerNumber, std::string layerName, Float_t rIn, Float_t angularCoverage, Float_t zLength, Float_t layerX2X0)
30 : mLayerNumber(layerNumber), mLayerName(layerName), mInnerRadius(rIn), mAngularCoverage(angularCoverage), mZ(zLength), mX2X0(layerX2X0), mModuleWidth(4.54)
31{
32 Float_t Si_X0 = 9.5f;
33 mChipThickness = mX2X0 * Si_X0;
34 LOGP(info, "Creating layer: id: {} rInner: {} thickness: {} zLength: {} x2X0: {}", mLayerNumber, mInnerRadius, mChipThickness, mZ, mX2X0);
35}
36
37void TRKPetalLayer::createLayer(TGeoVolume* motherVolume, TGeoCombiTrans* combiTrans)
38{
39 TGeoMedium* medSi = gGeoManager->GetMedium("TRK_SILICON$");
40 TGeoMedium* medAir = gGeoManager->GetMedium("TRK_AIR$");
41
42 std::string staveName = mLayerName + "_" + o2::trk::GeometryTGeo::getTRKStavePattern() + std::to_string(mLayerNumber),
43 chipName = mLayerName + "_" + o2::trk::GeometryTGeo::getTRKChipPattern() + std::to_string(mLayerNumber),
44 sensName = mLayerName + "_" + Form("%s%d", GeometryTGeo::getTRKSensorPattern(), mLayerNumber);
45
46 mSensorName = sensName;
47
48 Double_t toDeg = 180 / TMath::Pi();
49 mLayer = new TGeoTubeSeg(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2., -0.5 * mAngularCoverage * toDeg, 0.5 * mAngularCoverage * toDeg);
50 TGeoVolume* layerVol = new TGeoVolume(mLayerName.c_str(), mLayer, medAir);
51 layerVol->SetLineColor(kYellow);
52
53 TGeoTubeSeg* stave = new TGeoTubeSeg(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2., -0.5 * mAngularCoverage * toDeg, 0.5 * mAngularCoverage * toDeg);
54 TGeoTubeSeg* chip = new TGeoTubeSeg(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2., -0.5 * mAngularCoverage * toDeg, 0.5 * mAngularCoverage * toDeg);
55 TGeoTubeSeg* sensor = new TGeoTubeSeg(mInnerRadius, mInnerRadius + mChipThickness, mZ / 2., -0.5 * mAngularCoverage * toDeg, 0.5 * mAngularCoverage * toDeg);
56
57 TGeoVolume* sensVol = new TGeoVolume(sensName.c_str(), sensor, medSi);
58 sensVol->SetLineColor(kYellow);
59 TGeoVolume* chipVol = new TGeoVolume(chipName.c_str(), chip, medSi);
60 chipVol->SetLineColor(kYellow);
61 TGeoVolume* staveVol = new TGeoVolume(staveName.c_str(), stave, medSi);
62 staveVol->SetLineColor(kYellow);
63
64 LOGP(info, "Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
65 chipVol->AddNode(sensVol, 1, nullptr);
66
67 LOGP(info, "Inserting {} in {} ", chipVol->GetName(), staveVol->GetName());
68 staveVol->AddNode(chipVol, 1, nullptr);
69
70 LOGP(info, "Inserting {} in {} ", staveVol->GetName(), layerVol->GetName());
71 layerVol->AddNode(staveVol, 1, nullptr);
72
73 LOGP(info, "Inserting {} in {} ", layerVol->GetName(), motherVolume->GetName());
74 motherVolume->AddNode(layerVol, 1, combiTrans);
75}
76// ClassImp(TRKPetalLayer);
77
78} // namespace trk
79} // namespace o2
static const char * getTRKStavePattern()
static const char * getTRKChipPattern()
static const char * getTRKSensorPattern()
void createLayer(TGeoVolume *motherVolume, TGeoCombiTrans *combiTrans)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::string to_string(gsl::span< T, Size > span)
Definition common.h:52