Line data Source code
1 : #ifndef AliMFTGeometry_H
2 : #define AliMFTGeometry_H
3 :
4 :
5 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 : * See cxx source for full Copyright notice */
7 :
8 : // $Id$
9 :
10 : /// \ingroup MFTbase
11 : /// \class AliMFTGeometry
12 : /// \brief Class Handling both Virutal Segmentation and Real Volumes
13 : ///
14 : /// \author Raphael Tieulent <raphael.tieulent@cern.ch>
15 : /// \date June 9th, 2015
16 :
17 : # include "AliGeometry.h"
18 : # include "AliMFTSegmentation.h"
19 :
20 : class AliMFTGeometryBuilder;
21 :
22 : //__________________________________________________________________
23 :
24 0 : class AliMFTGeometry : public AliGeometry
25 : {
26 : public:
27 :
28 : static const Int_t kNDisks = 5; ///< \brief Number of Disk
29 : static const Double_t kSensorLength; ///< \brief CMOS Sensor Length
30 : static const Double_t kSensorHeight; ///< \brief CMOS Sensor Height
31 : static const Double_t kSensorActiveHeight; ///< \brief CMOS Sensor Active height
32 : static const Double_t kSensorActiveWidth; ///< \brief CMOS Sensor Active width
33 : static const Double_t kSensorThickness; ///< \brief CMOS Sensor Thickness
34 : static const Double_t kXPixelPitch; ///< \brief Pixel pitch along X
35 : static const Double_t kYPixelPitch; ///< \brief Pixel pitch along Y
36 : static const Int_t kNPixelX = 1024; ///< \brief Number of Pixel along X
37 : static const Int_t kNPixelY = 512; ///< \brief Number of Pixel along Y
38 : static const Double_t kSensorMargin; ///< \brief Inactive margin around active area
39 :
40 : static const Double_t kSensorInterspace; ///< \brief Interspace between 2 sensors on a ladder
41 : static const Double_t kSensorSideOffset; ///< \brief Offset of sensor compare to ladder edge (close to the beam pipe)
42 : static const Double_t kSensorTopOffset; ///< \brief Offset of sensor compare to ladder top edge
43 : static const Double_t kLadderOffsetToEnd; ///< \brief Offset of sensor compare to ladder connector edge
44 : static const Double_t fHeightActive; ///< height of the active elements
45 : static const Double_t fHeightReadout; ///< height of the readout elements attached to the active ones
46 :
47 : static const Double_t kFlexHeight; ///< \brief Flex Height
48 : static const Double_t kLineWidth;
49 : static const Double_t kVarnishThickness;
50 : static const Double_t kAluThickness;
51 : static const Double_t kKaptonThickness;
52 : static const Double_t kFlexThickness; ///< \brief Flex Thickness
53 : static const Double_t kClearance;
54 : static const Double_t kRadiusHole1;
55 : static const Double_t kRadiusHole2;
56 : static const Double_t kHoleShift1;
57 : static const Double_t kHoleShift2;
58 : static const Double_t kConnectorOffset;
59 : static const Double_t kCapacitorDz;
60 : static const Double_t kCapacitorDy;
61 : static const Double_t kCapacitorDx;
62 : static const Double_t kConnectorLength;
63 : static const Double_t kConnectorWidth;
64 : static const Double_t kConnectorHeight;
65 : static const Double_t kConnectorThickness;
66 : static const Double_t kEpsilon;
67 : static const Double_t kGlueThickness;
68 : static const Double_t kGlueEdge;
69 : static const Double_t kShiftDDGNDline;
70 : static const Double_t kShiftline;
71 :
72 :
73 : /// \brief Retuns MFT Geometry singleton object
74 : static AliMFTGeometry* Instance();
75 :
76 : enum ObjectTypes {kHalfMFTType, kHalfDiskType, kPlaneType, kLadderType, kSensorType};
77 :
78 : virtual ~AliMFTGeometry();
79 0 : virtual void GetGlobal(const AliRecPoint * p, TVector3 & pos, TMatrixF & mat) const {};
80 0 : virtual void GetGlobal(const AliRecPoint * p, TVector3 & pos) const {};
81 0 : virtual Bool_t Impact(const TParticle * particle) const {return kFALSE;};
82 : void Build();
83 :
84 : /// \brief Returns Object type based on Unique ID provided
85 0 : Int_t GetObjectType(UInt_t uniqueID) const {return ((uniqueID>>14)&0x7);};
86 : /// \brief Returns Half-MFT ID based on Unique ID provided
87 0 : Int_t GetHalfMFTID(UInt_t uniqueID) const {return ((uniqueID>>13)&0x1);};
88 : /// \brief Returns Half-Disk ID based on Unique ID provided
89 0 : Int_t GetHalfDiskID(UInt_t uniqueID) const {return ((uniqueID>>10)&0x7);};
90 : /// \brief Returns Ladder ID based on Unique ID provided
91 0 : Int_t GetLadderID(UInt_t uniqueID) const {return ((uniqueID>>4)&0x3F);};
92 : /// \brief Returns Sensor ID based on Unique ID provided
93 0 : Int_t GetSensorID(UInt_t uniqueID) const {return (uniqueID&0xF);};
94 :
95 : UInt_t GetObjectID(ObjectTypes type, Int_t half=0, Int_t disk=0, Int_t ladder=0, Int_t chip=0) const;
96 :
97 : /// \brief Returns TGeo ID of the volume describing the sensors
98 0 : Int_t GetSensorVolumeID() const {return fSensorVolumeId;};
99 : /// \brief Set the TGeo ID of the volume describing the sensors
100 0 : void SetSensorVolumeID(Int_t val) { fSensorVolumeId= val;};
101 :
102 : /// \brief Returns pointer to the segmentation
103 0 : AliMFTSegmentation * GetSegmentation() const {return fSegmentation;};
104 :
105 : Bool_t Hit2PixelID(Double_t xHit, Double_t yHit, Double_t zHit, Int_t detElemID, Int_t &xPixel, Int_t &yPixel) const;
106 : void GetPixelCenter(Int_t xPixel, Int_t yPixel, Int_t detElemID, Double_t &xCenter, Double_t &yCenter, Double_t &zCenter ) const ;
107 : Int_t GetDiskNSensors(Int_t diskId) const;
108 : Int_t GetDetElemLocalID(Int_t detElem) const;
109 :
110 : void LoadSegmentation();
111 :
112 :
113 : private:
114 :
115 : static AliMFTGeometry* fgInstance; ///< \brief Singleton instance
116 : AliMFTGeometry();
117 : AliMFTGeometry(const char* name);
118 :
119 : AliMFTGeometryBuilder* fBuilder; ///< \brief Geometry Builder
120 : AliMFTSegmentation *fSegmentation; ///< \brief Segmentation of the detector
121 : Int_t fSensorVolumeId; ///< \brief ID of the volume describing the CMOS Sensor
122 :
123 : /// \cond CLASSIMP
124 14 : ClassDef(AliMFTGeometry, 1);
125 : /// \endcond
126 :
127 : };
128 :
129 :
130 : #endif
131 :
|