00001 #ifndef ALIFMDRING_H 00002 #define ALIFMDRING_H 00003 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights 00004 * reserved. 00005 * 00006 * Latest changes by Christian Holm Christensen <cholm@nbi.dk> 00007 * 00008 * See cxx source for full Copyright notice 00009 */ 00010 //__________________________________________________________________ 00011 // 00012 // Parameters of the FMD rings. 00013 // 00014 // This class is responsible to make the (common) rings of the three 00015 // sub-detectors. 00016 // 00017 #ifndef ROOT_TNamed 00018 # include <TNamed.h> 00019 #endif 00020 #ifndef ROOT_TObjArray 00021 # include <TObjArray.h> 00022 #endif 00023 00024 class TBrowser; 00025 class TVector2; 00026 00036 class AliFMDRing : public TNamed 00037 { 00038 public: 00041 AliFMDRing(Char_t fId); 00043 virtual ~AliFMDRing() {} 00045 virtual void Init(); 00046 00048 void SetId(Char_t x) { fId = x; } 00050 void SetBondingWidth(Double_t x=.5) { fBondingWidth = x; } 00052 void SetWaferRadius(Double_t x=13.4/2) { fWaferRadius = x; } 00054 void SetSiThickness(Double_t x=.03) { fSiThickness = x; } 00056 void SetLowR(Double_t x) { fLowR = x; } 00058 void SetHighR(Double_t x) { fHighR = x; } 00060 void SetTheta(Double_t x) { fTheta = x; } 00062 void SetNStrips(Int_t x) { fNStrips = x; } 00064 void SetRingDepth(Double_t x) { fRingDepth = x; } 00066 void SetLegRadius(Double_t x=.5) { fLegRadius = x; } 00068 void SetLegLength(Double_t x=1) { fLegLength = x; } 00070 void SetLegOffset(Double_t x=2) { fLegOffset = x; } 00072 void SetModuleSpacing(Double_t x=1) { fModuleSpacing = x; } 00074 void SetPrintboardThickness(Double_t x=.1) { fPrintboardThickness = x; } 00076 void SetCopperThickness(Double_t x=.01) { fCopperThickness = x; } 00078 void SetChipThickness(Double_t x=.01) { fChipThickness = x; } 00080 void SetSpacing(Double_t x=.05) { fSpacing = x; } 00081 00083 Char_t GetId() const { return fId; } 00085 Double_t GetBondingWidth() const { return fBondingWidth; } 00087 Double_t GetWaferRadius() const { return fWaferRadius; } 00089 Double_t GetSiThickness() const { return fSiThickness; } 00091 Double_t GetMinR() const { return fMinR; } 00093 Double_t GetMaxR() const { return fMaxR; } 00095 Double_t GetLowR() const { return fLowR; } 00097 Double_t GetHighR() const { return fHighR; } 00099 Double_t GetTheta() const { return fTheta; } 00101 Int_t GetNStrips() const { return fNStrips; } 00103 Int_t GetNSectors() const { return Int_t(360. / fTheta); } 00105 Int_t GetNModules() const { return GetNSectors() / 2; } 00107 Double_t GetRingDepth() const { return fRingDepth; } 00109 Double_t GetLegRadius() const { return fLegRadius; } 00111 Double_t GetLegLength() const { return fLegLength; } 00113 Double_t GetLegOffset() const { return fLegOffset; } 00115 Double_t GetModuleSpacing() const { return fModuleSpacing; } 00117 Double_t GetPrintboardThickness() const { return fPrintboardThickness; } 00119 Double_t GetCopperThickness() const { return fCopperThickness; } 00121 Double_t GetChipThickness() const { return fChipThickness; } 00123 Double_t GetSpacing() const { return fSpacing; } 00125 Double_t GetPitch() const { return (fMaxR - fMinR) / fNStrips; } 00127 Double_t GetStripRadius(UShort_t strip) const; 00128 00130 const TObjArray& GetVerticies() const { return fVerticies; } 00132 Int_t GetNVerticies() const { return fVerticies.GetEntries(); } 00135 TVector2* GetVertex(Int_t i) const; 00136 00138 void Detector2XYZ(UShort_t sector, UShort_t strip, 00139 Double_t& x, Double_t& y, Double_t& z) const; 00141 Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z, 00142 UShort_t& sector, UShort_t& strip) const; 00143 private: 00144 Char_t fId; // The Id of this ring type 00145 Double_t fBondingWidth; // With of bonding pad on sensor 00146 Double_t fWaferRadius; // Size of wafer sensor was made from 00147 Double_t fSiThickness; // Thickness of sensor 00148 Double_t fLowR; // Lower radius of ring 00149 Double_t fHighR; // Upper radius of ring 00150 Double_t fMinR; // Lower radius of active strips 00151 Double_t fMaxR; // Upper radius of active strips 00152 Double_t fTheta; // Opening angle of the silicon wafers 00153 Int_t fNStrips; // Number of strips 00154 Double_t fRingDepth; // How far the ring extends beyond z 00155 Double_t fLegRadius; // Radius of support legs 00156 Double_t fLegLength; // Radius of support legs 00157 Double_t fLegOffset; // Radius of support legs 00158 Double_t fModuleSpacing; // Staggering offset 00159 Double_t fPrintboardThickness; // Thickness of print board 00160 Double_t fCopperThickness; // Thickness of Cu on print board 00161 Double_t fChipThickness; // Thickness of chip on print board 00162 Double_t fSpacing; // Spacing between si and PCB 00163 00164 TObjArray fVerticies; // List of verticies 00165 00166 ClassDef(AliFMDRing, 0); 00167 }; 00168 #endif 00169 //____________________________________________________________________ 00170 // 00171 // Local Variables: 00172 // mode: C++ 00173 // End: 00174 // 00175 // EOF 00176 //