]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSsegmentationSDD.h
Bug fix - chack the abs values
[u/mrichter/AliRoot.git] / ITS / AliITSsegmentationSDD.h
index b5f7b01d313045a58e815e90f8285db0f45040cf..dacd449e5bda047afc4f9ed70dc6e1631aa48294 100644 (file)
@@ -8,21 +8,25 @@
 // Segmentation class for SDD                       //
 //                                                  //
 //////////////////////////////////////////////////////
-class AliITSCalibration;
 class AliITSsegmentationSDD :
 public AliITSsegmentation {
  public:
 
 
-    AliITSsegmentationSDD();
+    AliITSsegmentationSDD(Option_t *opt="");
     AliITSsegmentationSDD(const AliITSsegmentationSDD &source);
     AliITSsegmentationSDD& operator=(const AliITSsegmentationSDD &source);
-    AliITSsegmentationSDD(AliITSgeom *gm, AliITSCalibration *resp);
     virtual ~AliITSsegmentationSDD(){}
 
     // Set Detector Segmentation Parameters
     //
-
+    // get the drift speed used for this segmentation
+    virtual Float_t GetDriftSpeed()const{return fDriftSpeed;}
+    // Set the drift speed needed for this segmentation
+    virtual void SetDriftSpeed(Float_t ds){
+      fDriftSpeed = ds;
+      fSetDriftSpeed=kTRUE;
+    }
     // Cell size dz*dx  
     virtual void    SetPadSize(Float_t pitch, Float_t clock) 
                          {fPitch=pitch;fTimeStep=1000./clock;}
@@ -36,11 +40,8 @@ public AliITSsegmentation {
     // Transform from real local to cell coordinates
     virtual void    GetPadIxz(Float_t x ,Float_t z ,Int_t   &ix,Int_t   &iz) const;
     // Transform from cell to real local coordinates
-    virtual void    GetPadCxz(Int_t   ix,Int_t   iz,Float_t &x ,Float_t &z ) const;
-    // Transform from real global to local coordinates
-    virtual void    GetLocal(Int_t module,Float_t *g ,Float_t *l) const;
-    // Transform from real local to global coordinates
-    virtual void    GetGlobal(Int_t module,Float_t *l ,Float_t *g) const;
+    virtual void    GetPadCxz(Int_t   ix,Int_t   iz,Float_t &x ,Float_t &z ) const;    
+
     // Get anode and time bucket as floats - numbering from 0
     virtual void    GetPadTxz(Float_t &x ,Float_t &z) const;
     // Transformation from Geant cm detector center local coordinates
@@ -50,8 +51,35 @@ public AliITSsegmentation {
     // from (0,0) to Geant cm detector center local coordinates.
     virtual void    DetToLocal(Int_t ix,Int_t iz,Float_t &x,Float_t &z) const;
     //
+    virtual Float_t GetAnodeFromLocal(Float_t x,Float_t z) const;
+    virtual Int_t   GetSideFromLocalX(Float_t xloc) const {
+      if(xloc>0) return 0;   // left side (channel 0) positive xloc
+      else return 1;         // right side (channel 1) negative xloc
+    }
+    virtual Float_t GetLocalZFromAnode(Int_t nAnode) const;
+    virtual Float_t GetLocalZFromAnode(Float_t zAnode) const;
+    virtual Float_t GetDriftTimeFromTb(Int_t tb) const {
+      Float_t xtb=(Float_t)tb+0.5;
+      return GetDriftTimeFromTb(xtb);
+    }
+    virtual Float_t GetDriftTimeFromTb(Float_t xtb) const {
+      return xtb*fTimeStep;
+    }
+    virtual Int_t    GetNumberOfChips() const {
+      return fgkNchipsPerHybrid;
+    }
+    virtual Int_t    GetMaximumChipIndex() const{
+      return fgkNchipsPerHybrid*2-1;
+    }
+    virtual Int_t    GetChipFromLocal(Float_t xloc, Float_t zloc) const;
+    virtual Int_t    GetChipsInLocalWindow(Int_t* array, Float_t zmin, Float_t zmax, Float_t xmin, Float_t xmax) const;
+      
+
+    virtual Int_t    GetChipFromChannel(Int_t ix, Int_t iz) const; 
+
     // Initialisation
     virtual void Init();
+
     //
     // Get member data
     //
@@ -64,6 +92,8 @@ public AliITSsegmentation {
     virtual Int_t    Npx() const {return fNsamples;}
     // Maximum number of anodes in z
     virtual Int_t    Npz() const {return fNanodes;}
+    // Maximum number of anodes in z
+    virtual Int_t    NpzHalf() const {return fNanodes/2;}
 
     //
     // Get next neighbours 
@@ -77,6 +107,7 @@ public AliITSsegmentation {
 // Print default parameters (static const data members, if any)
     virtual void PrintDefaultParameters() const;           
 
+    static Int_t GetNAnodesPerHybrid()  { return fgkHalfNanodesDefault;}
   protected:
 
     virtual void Copy(TObject &obj) const;
@@ -86,6 +117,7 @@ public AliITSsegmentation {
     Float_t    fPitch;    // Anode pitch - microns
     Float_t    fTimeStep; // Sampling time - ns
     Float_t    fDriftSpeed;  // Drift speed 
+    Bool_t     fSetDriftSpeed; // flag for usage of drift speed
     static const Float_t fgkDxDefault;  // Default value for fDx
     static const Float_t fgkDzDefault;  // Default value for fDz
     static const Float_t fgkDyDefault;  // Default value for fDy
@@ -93,8 +125,11 @@ public AliITSsegmentation {
     static const Float_t fgkClockDefault; //Default value for the clock freq.
     static const Int_t fgkHalfNanodesDefault; //Default value for fNanodes/2
     static const Int_t fgkNsamplesDefault; //Default value for fNsamples
-
-    ClassDef(AliITSsegmentationSDD,3) // SDD segmentation
+    static const Int_t fgkNchipsPerHybrid;    //number of chips per hybrid
+    static const Int_t fgkNanodesPerChip;    //number of chips per hybrid
+    static const Float_t fgkCm2Micron;  // conversion from cm to micron
+    static const Float_t fgkMicron2Cm;  // conversion from micron to cm
+    ClassDef(AliITSsegmentationSDD,6) // SDD segmentation
 };
 
 #endif