16#include "TGeoMatrix.h"
17#include "TGeoManager.h"
20#include "TGeoCompositeShape.h"
21#include "TGeoBoolNode.h"
23#include <fairlogger/Logger.h>
43const Double_t Ladder::sLadderDeltaZ =
49Ladder::Ladder() : TNamed(), mSegmentation(nullptr), mFlex(nullptr), mLadderVolume(nullptr) {}
55 : TNamed(segmentation->GetName(), segmentation->GetName()), mSegmentation(segmentation), mFlex(nullptr)
58 LOG(debug1) <<
"Ladder " << Form(
"creating : %s", GetName());
59 mLadderVolume =
new TGeoVolumeAssembly(GetName());
73 mFlex =
new Flex(mSegmentation);
80 if (mftBaseParam.buildFlex) {
83 Double_t shiftFlex = 0.0;
84 if (mftBaseParam.buildAlignment) {
108 TString namePrefixS =
"MFTSensor";
111 TString namePrefixC =
112 Form(
"MFT_C_%d_%d_%d", mftGeom->
getHalfID(mSegmentation->GetUniqueID()),
113 mftGeom->
getDiskID(mSegmentation->GetUniqueID()), mftGeom->
getLadderID(mSegmentation->GetUniqueID()));
116 TString namePrefixG =
117 Form(
"MFT_G_%d_%d_%d", mftGeom->
getHalfID(mSegmentation->GetUniqueID()),
118 mftGeom->
getDiskID(mSegmentation->GetUniqueID()), mftGeom->
getLadderID(mSegmentation->GetUniqueID()));
120 TGeoMedium* kMedGlue = gGeoManager->GetMedium(
"MFT_SE4445$");
122 TGeoVolume* glue = gGeoManager->MakeBox(
125 glue->SetVisibility(kTRUE);
126 glue->SetLineColor(kRed - 10);
127 glue->SetLineWidth(1);
128 glue->SetFillColor(glue->GetLineColor());
129 glue->SetFillStyle(4000);
133 namePrefixC, namePrefixS, kFALSE);
137 for (
int ichip = 0; ichip < mSegmentation->
getNSensors(); ichip++) {
148 Double_t shiftGlue = 0.0;
149 if (mftBaseParam.buildAlignment) {
156 Double_t masterglue[3];
157 chipPos->LocalToMaster(
pos, master);
158 chipPosGlue->LocalToMaster(posglue, masterglue);
160 TGeoBBox* shape = (TGeoBBox*)mLadderVolume->GetShape();
161 master[0] -= shape->GetDX();
162 master[1] -= shape->GetDY();
163 master[2] -= shape->GetDZ();
165 masterglue[0] -= shape->GetDX();
166 masterglue[1] -= shape->GetDY();
167 masterglue[2] -= shape->GetDZ();
169 LOG(debug1) <<
"CreateSensors " << Form(
"adding chip %s_%d ", namePrefixS.Data(), ichip);
172 TGeoTranslation* trans =
new TGeoTranslation(master[0], master[1], master[2]);
174 mLadderVolume->AddNode(chipVol, ichip,
final);
175 mLadderVolume->AddNode(glue, ichip,
new TGeoTranslation(masterglue[0], masterglue[1], masterglue[2]));
Creates an ALPIDE chip in simulation.
Chip (sensor) segmentation description.
Flex (Printed Cabled Board) class for ALICE MFT upgrade.
Class handling both virtual segmentation and real volumes.
Description of the virtual segmentation of a ladder.
ClassImp(o2::mft::Ladder)
Class building the Ladder geometry.
Definition of the SegmentationAlpide class.
static const MFTBaseParam & Instance()
static TGeoVolume * createChip(Double_t yc, Double_t ys, char const *chipName="AlpideChip", char const *sensName="AlpideSensor", Bool_t dummy=kFALSE, const TGeoManager *mgr=gGeoManager)
static constexpr float SensorSizeCols
static constexpr float SensorSizeRows
TGeoVolumeAssembly * makeFlex(Int_t nbsensors, Double_t length)
static const Double_t sChipThickness
CMOS chip thickness.
static const Double_t sSensorTopOffset
Offset of sensor compare to ladder top edge.
static const Double_t sSensorSideOffset
Offset of sensor compare to ladder edge (close to the beam pipe)
Int_t getDiskID(UInt_t uniqueID) const
Returns Half-Disk ID based on Unique ID provided.
static const Double_t sFlexThickness
Flex Thickness.
static const Double_t sKaptonGlueThickness
Int_t getLadderID(UInt_t uniqueID) const
Returns Ladder ID based on Unique ID provided.
Int_t getHalfID(UInt_t uniqueID) const
Returns Half-MFT ID based on Unique ID provided.
static const Double_t sGlueThickness
static Geometry * instance()
Singleton access.
static const Double_t sSensorInterspace
Interspace between 2 sensors on a ladder.
static const Double_t sGlueEdge
static TGeoHMatrix sTransMFT2ITS
transformation due to the different conventions
static const Double_t sSensorThickness
CMOS sensor part thickness.
static const Double_t sFlexHeight
Flex Height.
static const Double_t sKaptonOnCarbonThickness
static const Double_t sLadderOffsetToEnd
Offset of sensor compare to ladder connector edge.
Int_t getNSensors() const
Returns number of Sensor on the ladder.
ChipSegmentation * getSensor(Int_t sensor) const
Ladder()
Default constructor.
void createSensors()
Build the sensors.
TGeoVolume * createVolume()
Build the ladder.
TGeoCombiTrans * getTransformation() const
Returns the Transformation Combining a Rotation followed by a Translation.
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"