LCOV - code coverage report
Current view: top level - FMD/FMDbase - AliFMDRing.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 44 56 78.6 %
Date: 2016-06-14 17:26:59 Functions: 44 62 71.0 %

          Line data    Source code
       1             : #ifndef ALIFMDRING_H
       2             : #define ALIFMDRING_H
       3             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
       4             :  * reserved. 
       5             :  *
       6             :  * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
       7             :  *
       8             :  * See cxx source for full Copyright notice                               
       9             :  */
      10             : /** @file    AliFMDRing.h
      11             :     @author  Christian Holm Christensen <cholm@nbi.dk>
      12             :     @date    Mon Mar 27 12:47:43 2006
      13             :     @brief   FMD ring geometry parameters 
      14             : */
      15             : //__________________________________________________________________
      16             : //
      17             : // Parameters of the FMD rings. 
      18             : // This class is responsible to make the (common) rings of the three
      19             : // sub-detectors. 
      20             : //
      21             : #ifndef ROOT_TNamed
      22             : # include <TNamed.h>
      23             : #endif
      24             : #ifndef ROOT_TObjArray
      25             : # include <TObjArray.h>
      26             : #endif
      27             : 
      28             : class TBrowser;
      29             : class TVector2;
      30             : 
      31             : /** 
      32             :  * @brief Geometry description and parameters of a ring in the FMD 
      33             :  * detector. 
      34             :  *
      35             :  * As there are only 2 kinds of rings @e Inner (@c 'I') and @e Outer
      36             :  * (@c 'O') the two objects of this class is owned by the
      37             :  * AliFMDGeometry singleton object.  The 3 AliFMDDetector objects
      38             :  * shares these two instances as needed.
      39             :  * @ingroup FMD_base
      40             : */
      41             : class AliFMDRing : public TNamed
      42             : {
      43             : public:
      44             :   /** 
      45             :    * CTOR
      46             :    *
      47             :    * @param fId Ring ID  
      48             :    */
      49             :   AliFMDRing(Char_t fId);
      50             :   /** 
      51             :    * DTOR  
      52             :    */
      53           0 :   virtual ~AliFMDRing() {}
      54             :   /** 
      55             :    * Initialize the ring geometry 
      56             :    */
      57             :   virtual void Init();
      58             :   
      59             :   /** 
      60             :    *
      61             :    * @param x Value of The Id of this ring type
      62             :    */
      63           0 :   void SetId(Char_t x) { fId = x; }
      64             :   /** 
      65             :    *
      66             :    * @param x Value of With of bonding pad on sensor
      67             :    */
      68          12 :   void SetBondingWidth(Double_t x=.5) { fBondingWidth = x; }
      69             :   /** 
      70             :    *
      71             :    * @param x Value of Size of wafer the sensor was made from
      72             :    */
      73          12 :   void SetWaferRadius(Double_t x=13.4/2) { fWaferRadius = x; }
      74             :   /** 
      75             :    *
      76             :    * @param x Value of Thickness of sensor
      77             :    */
      78          12 :   void SetSiThickness(Double_t x=.032) { fSiThickness = x; }
      79             :   /** 
      80             :    *
      81             :    * @param x Value of Lower radius of ring
      82             :    */
      83          12 :   void SetLowR(Double_t x) { fLowR = x; }
      84             :   /** 
      85             :    *
      86             :    * @param x Value of Upper radius of ring
      87             :    */
      88          12 :   void SetHighR(Double_t x) { fHighR = x; }
      89             :   /** 
      90             :    *
      91             :    * @param x Value of Opening angle of the silicon wafers
      92             :    */
      93          12 :   void SetTheta(Double_t x) { fTheta = x; }
      94             :   /** 
      95             :    *
      96             :    * @param x Value of Number of strips
      97             :    */
      98          12 :   void SetNStrips(Int_t x) { fNStrips = x; }
      99             :   /** 
     100             :    *
     101             :    * @param x Value of How far the ring extends beyond the z value given.
     102             :    */
     103           0 :   void SetRingDepth(Double_t x) { fRingDepth = x; }
     104             :   /** 
     105             :    *
     106             :    * @param x Value of Radius of support legs
     107             :    */
     108          12 :   void SetLegRadius(Double_t x=.25) { fLegRadius = x; }
     109             :   /** 
     110             :    *
     111             :    * @param x Value of Radius of support legs
     112             :    */
     113          12 :   void SetLegLength(Double_t x=.9) { fLegLength = x; }
     114             :   /** 
     115             :    *
     116             :    * @param x Value of Radius of support legs
     117             :    */
     118          12 :   void SetLegOffset(Double_t x=2) { fLegOffset = x; }
     119             :   /** 
     120             :    *
     121             :    * @param x Value of Staggering offset
     122             :    */
     123          12 :   void SetModuleSpacing(Double_t x=.5) { fModuleSpacing = x; }
     124             :   /** 
     125             :    *
     126             :    * @param x Value of Thickness of print board
     127             :    */
     128          12 :   void SetPrintboardThickness(Double_t x=.08) { fPrintboardThickness = x; }
     129             :   /** 
     130             :    *
     131             :    * @param x Value of Thickness of copper on print board
     132             :    */
     133          12 :   void SetCopperThickness(Double_t x=.01) { fCopperThickness = x; }
     134             :   /** 
     135             :    *
     136             :    * @param x Value of Thickness of chip on print board
     137             :    */
     138          12 :   void SetChipThickness(Double_t x=.01) { fChipThickness = x; }
     139             :   /** 
     140             :    *
     141             :    * @param x Value of spacing between si and PCB
     142             :    */
     143          12 :   void SetSpacing(Double_t x=.05) { fSpacing = x; }
     144             :   /** 
     145             :    *
     146             :    * @param x Thickness of honeycomb plate
     147             :    */
     148          12 :   void SetHoneycombThickness(Double_t x=0.65) { fHoneycombThickness = x; }
     149             :   /** 
     150             :    *
     151             :    * @param x Thickness of aluminium of honeycomb
     152             :    */
     153          12 :   void SetAlThickness(Double_t x=.1) { fAlThickness = x; }
     154             : 
     155             :   /** 
     156             :    *
     157             :    * @return The Id of this ring type
     158             :    */
     159          22 :   Char_t GetId() const { return fId; }
     160             :   /** 
     161             :    *
     162             :    * @return With of bonding pad on sensor
     163             :    */
     164           0 :   Double_t GetBondingWidth() const { return fBondingWidth; }
     165             :   /** 
     166             :    *
     167             :    * @return Size of wafer the sensor was made from
     168             :    */
     169           0 :   Double_t GetWaferRadius() const { return fWaferRadius; }
     170             :   /** 
     171             :    *
     172             :    * @return Thickness of sensor
     173             :    */
     174      884770 :   Double_t GetSiThickness() const { return fSiThickness; }
     175             :   /** 
     176             :    *
     177             :    * @return Minimum r for an active strip
     178             :    */
     179      884736 :   Double_t GetMinR() const { return fMinR; }
     180             :   /** 
     181             :    *
     182             :    * @return Maximum r for an active strip
     183             :    */
     184      884736 :   Double_t GetMaxR() const { return fMaxR; }
     185             :   /** 
     186             :    *
     187             :    * @return Lower radius of ring
     188             :    */
     189         122 :   Double_t GetLowR() const { return fLowR; }
     190             :   /** 
     191             :    *
     192             :    * @return Upper radius of ring
     193             :    */
     194         122 :   Double_t GetHighR() const { return fHighR; }
     195             :   /** 
     196             :    *
     197             :    * @return Opening angle of the sector (half that of silicon wafers)
     198             :    */
     199      884820 :   Double_t GetTheta() const { return fTheta; }
     200             :   /** 
     201             :    *
     202             :    * @return Number of strips
     203             :    */
     204      886980 :   Int_t GetNStrips() const { return fNStrips; }
     205             :   /** 
     206             :    *
     207             :    * @return Number of sectors
     208             :    */
     209         750 :   Int_t GetNSectors() const { return Int_t(360. / fTheta); }
     210             :   /** 
     211             :    *
     212             :    * @return Number of modules (2 sectors per module)
     213             :    */
     214          74 :   Int_t GetNModules() const { return GetNSectors() / 2; }
     215             :   /** 
     216             :    *
     217             :    * @return How far the ring extends beyond the z value given.
     218             :    */
     219           0 :   Double_t GetRingDepth() const { return fRingDepth; }
     220             :   /** 
     221             :    *
     222             :    * @return Radius of support legs
     223             :    */
     224           4 :   Double_t GetLegRadius() const { return fLegRadius; }
     225             :   /** 
     226             :    *
     227             :    * @return Radius of support legs
     228             :    */
     229          28 :   Double_t GetLegLength() const { return fLegLength; }
     230             :   /** 
     231             :    *
     232             :    * @return Radius of support legs
     233             :    */
     234           0 :   Double_t GetLegOffset() const { return fLegOffset; }
     235             :   /** 
     236             :    *
     237             :    * @return Staggering offset
     238             :    */
     239          28 :   Double_t GetModuleSpacing() const { return fModuleSpacing; }
     240             :   /** 
     241             :    *
     242             :    * @return Thickness of print board
     243             :    */
     244          28 :   Double_t GetPrintboardThickness() const { return fPrintboardThickness; }
     245             :   /** 
     246             :    *
     247             :    * @return Thickness copper of print board
     248             :    */
     249          28 :   Double_t GetCopperThickness() const { return fCopperThickness; }
     250             :   /** 
     251             :    *
     252             :    * @return Thickness chip of print board
     253             :    */
     254          28 :   Double_t GetChipThickness() const { return fChipThickness; }
     255             :   /** 
     256             :    *
     257             :    * @return Value of spacing between si and PCB
     258             :    */
     259          28 :   Double_t GetSpacing() const { return fSpacing; }
     260             :   /** 
     261             :    *
     262             :    * @return Thickness of honeycomb plate
     263             :    */
     264          24 :   Double_t GetHoneycombThickness() const { return fHoneycombThickness; }
     265             :   /** 
     266             :    *
     267             :    * @return Thickness of aluminium of honeycomb
     268             :    */
     269          10 :   Double_t GetAlThickness() const { return fAlThickness; }
     270             :   /** 
     271             :    *
     272             :    * @return The strip pitch
     273             :    */ 
     274           0 :   Double_t GetPitch() const { return (fMaxR - fMinR) / fNStrips; }
     275             :   /** 
     276             :    *
     277             :    * @return Radius (in cm) correspondig to strip @a strip
     278             :    */
     279             :   Double_t GetStripRadius(UShort_t strip) const;
     280             :   /** 
     281             :    *
     282             :    * @return Full depth of (low) modules in this (half) ring
     283             :    */
     284             :   Double_t GetModuleDepth() const;
     285             :   /** 
     286             :    *
     287             :    * @return Full depth of this (half) ring
     288             :    */
     289             :   Double_t GetFullDepth() const;
     290             :   /** 
     291             :    * Get the inner radius of the digitizer cards 
     292             :    *
     293             :    * @return The inner radius of the digitizer cards 
     294             :    */
     295           4 :   Double_t GetFMDDLowR() const { return 1.2*GetLowR(); }
     296             :   /** 
     297             :    * Get the outer radius of the digitizer cards 
     298             :    *
     299             :    * @return The outer radius of the digitizer cards 
     300             :    */
     301           4 :   Double_t GetFMDDHighR() const { return .95*GetHighR(); }
     302             :   /** 
     303             :    *
     304             :    * @return Thickness of print board
     305             :    */
     306           8 :   Double_t GetFMDDPrintboardThickness() const { return 2*fPrintboardThickness; }
     307             :   /** 
     308             :    *
     309             :    * @return Thickness copper of print board
     310             :    */
     311           8 :   Double_t GetFMDDCopperThickness() const { return 2*fCopperThickness; }
     312             :   /** 
     313             :    *
     314             :    * @return Thickness chip of print board
     315             :    */
     316           8 :   Double_t GetFMDDChipThickness() const { return 2*fChipThickness; }
     317             : 
     318             :   /** 
     319             :    *
     320             :    * @return List of verticies
     321             :    */
     322           0 :   const TObjArray& GetVerticies() const { return fVerticies; }
     323             :   /** 
     324             :    *
     325             :    * @return Number of verticies
     326             :    */
     327           0 :   Int_t GetNVerticies() const { return fVerticies.GetEntries(); }
     328             :   /** 
     329             :    * @param i Vertex number 
     330             :    *
     331             :    * @return the ith vertex 
     332             :    */
     333             :   TVector2* GetVertex(Int_t i) const;
     334             :   /** 
     335             :    *
     336             :    * @return List of verticies
     337             :    */
     338           4 :   const TObjArray& GetSensorVerticies() const { return fSensorVerticies; }
     339             :   /** 
     340             :    * @param i Vertex number 
     341             :    *
     342             :    * @return the ith vertex 
     343             :    */
     344             :   TVector2* GetSensorVertex(Int_t i) const;
     345             :   /** 
     346             :    *
     347             :    * @return List of verticies
     348             :    */
     349          12 :   const TObjArray& GetHybridVerticies() const { return fHybridVerticies; }
     350             :   /** 
     351             :    * @param i Vertex number 
     352             :    *
     353             :    * @return the ith vertex 
     354             :    */
     355             :   TVector2* GetHybridVertex(Int_t i) const;
     356             : 
     357             :   /** 
     358             :    * Get a list of feet positions 
     359             :    * 
     360             :    * 
     361             :    * @return List TVector2 of feet positions on hybrid card
     362             :    */  
     363           0 :   const TObjArray& GetFeetPositions() const { return fFeetPositions; }
     364             :   /** 
     365             :    * Get the number of feet positions 
     366             :    * 
     367             :    * 
     368             :    * @return Number of feet positions 
     369             :    */
     370           0 :   Int_t GetNFeetPositions() const { return fFeetPositions.GetEntries(); }
     371             :   /** 
     372             :    * Get the @a i feet position
     373             :    * 
     374             :    * @param i Index
     375             :    * 
     376             :    * @return The foot position of stand-off @a i 
     377             :    */  
     378             :   TVector2* GetFootPosition(Int_t i) const;
     379             :   /** 
     380             :    * Get the real length of a strip
     381             :    * 
     382             :    * @param strip strip number
     383             :    * 
     384             :    * @return length of strip 
     385             :    */ 
     386             :   Float_t GetStripLength(UShort_t strip) const ;
     387             :   /** 
     388             :    * Get the length of a strip assuming the corners are not cut off
     389             :    * 
     390             :    * @param strip strip number
     391             :    * 
     392             :    * @return length of strip w/o corners 
     393             :    */ 
     394             :   Float_t GetBaseStripLength(UShort_t strip) const ;
     395             :   /** Not used */
     396             :   void Detector2XYZ(UShort_t sector, UShort_t strip, 
     397             :                     Double_t& x, Double_t& y, Double_t& z) const;
     398             :   /** Not used */
     399             :   Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z, 
     400             :                       UShort_t& sector, UShort_t& strip) const;
     401             : private: 
     402             :   Char_t        fId;                    // The Id of this ring type
     403             :   Double_t      fBondingWidth;          // With of bonding pad on sensor
     404             :   Double_t      fWaferRadius;           // Size of wafer sensor was made from
     405             :   Double_t      fSiThickness;           // Thickness of sensor
     406             :   Double_t      fLowR;                  // Lower radius of ring
     407             :   Double_t      fHighR;                 // Upper radius of ring
     408             :   Double_t      fMinR;                  // Lower radius of active strips
     409             :   Double_t      fMaxR;                  // Upper radius of active strips
     410             :   Double_t      fTheta;                 // Opening angle of the silicon wafers
     411             :   Int_t         fNStrips;               // Number of strips
     412             :   Double_t      fRingDepth;             // How far the ring extends beyond z
     413             :   Double_t      fLegRadius;             // Radius of support legs
     414             :   Double_t      fLegLength;             // Radius of support legs
     415             :   Double_t      fLegOffset;             // Radius of support legs
     416             :   Double_t      fModuleSpacing;         // Staggering offset
     417             :   Double_t      fPrintboardThickness;   // Thickness of print board
     418             :   Double_t      fCopperThickness;       // Thickness of Cu on print board
     419             :   Double_t      fChipThickness;         // Thickness of chip on print board
     420             :   Double_t      fSpacing;               // Spacing between si and PCB
     421             :   Double_t      fHoneycombThickness;    // Thickness of honeycomb plate
     422             :   Double_t      fAlThickness;           // Thickness of aluminium of honeycomb
     423             :   
     424             :   TObjArray     fVerticies;             // List of active sensor verticies
     425             :   TObjArray     fSensorVerticies;       // List of physical sensor verticies
     426             :   TObjArray     fHybridVerticies;       // List of hybrid card verticies
     427             :   TObjArray     fFeetPositions;         // List of feet positions
     428             :   
     429          12 :   ClassDef(AliFMDRing, 0);
     430             : };
     431             : #endif 
     432             : //____________________________________________________________________
     433             : //
     434             : // Local Variables:
     435             : //   mode: C++
     436             : // End:
     437             : //
     438             : // EOF
     439             : //

Generated by: LCOV version 1.11