ROOT logo
#ifndef ALIITSSEGMENTATIONSDD_H
#define ALIITSSEGMENTATIONSDD_H


#include "AliITSsegmentation.h"

//////////////////////////////////////////////////////
// Segmentation class for SDD                       //
//                                                  //
//////////////////////////////////////////////////////
class AliITSsegmentationSDD :
public AliITSsegmentation {
 public:


    AliITSsegmentationSDD(Option_t *opt="");
    AliITSsegmentationSDD(const AliITSsegmentationSDD &source);
    AliITSsegmentationSDD& operator=(const AliITSsegmentationSDD &source);
    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;}

    // Maximum number of cells along the two coordinates z,x (anodes,samples) 
    virtual void    SetNPads(Int_t p1, Int_t p2) 
                         {fNanodes=2*p1;fNsamples=p2;}
    // Returns the maximum number of cells (digits) posible
    virtual Int_t   GetNPads() const {return fNanodes*fNsamples;}

    // 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;    

    // 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
    // to detector segmentation/cell coordiantes starting from (0,0).
    virtual Bool_t  LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz) const;
    // Transformation from detector segmentation/cell coordiantes starting
    // 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
    //
    // Cell size in x
    virtual Float_t Dpx(Int_t) const {return fTimeStep;}
    // Cell size in z 
    virtual Float_t Dpz(Int_t) const {return fPitch;} 

    // Maximum number of samples in x
    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 
    virtual void Neighbours(Int_t iX,Int_t iZ,Int_t* Nlist,Int_t Xlist[10],
			    Int_t Zlist[10]) const;

    // Current integration limits 
    virtual void  IntegrationLimits(Float_t&,Float_t&,Float_t&,Float_t&) {}
    // Print Parameters
    virtual void    Print(Option_t *opt="") const;
// 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;

    Int_t      fNsamples; // Number of time samples in x
    Int_t      fNanodes;  // Summed # of anodes in the two det halves (z)
    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
    static const Float_t fgkPitchDefault; //Default value for fPitch
    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
    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
 AliITSsegmentationSDD.h:1
 AliITSsegmentationSDD.h:2
 AliITSsegmentationSDD.h:3
 AliITSsegmentationSDD.h:4
 AliITSsegmentationSDD.h:5
 AliITSsegmentationSDD.h:6
 AliITSsegmentationSDD.h:7
 AliITSsegmentationSDD.h:8
 AliITSsegmentationSDD.h:9
 AliITSsegmentationSDD.h:10
 AliITSsegmentationSDD.h:11
 AliITSsegmentationSDD.h:12
 AliITSsegmentationSDD.h:13
 AliITSsegmentationSDD.h:14
 AliITSsegmentationSDD.h:15
 AliITSsegmentationSDD.h:16
 AliITSsegmentationSDD.h:17
 AliITSsegmentationSDD.h:18
 AliITSsegmentationSDD.h:19
 AliITSsegmentationSDD.h:20
 AliITSsegmentationSDD.h:21
 AliITSsegmentationSDD.h:22
 AliITSsegmentationSDD.h:23
 AliITSsegmentationSDD.h:24
 AliITSsegmentationSDD.h:25
 AliITSsegmentationSDD.h:26
 AliITSsegmentationSDD.h:27
 AliITSsegmentationSDD.h:28
 AliITSsegmentationSDD.h:29
 AliITSsegmentationSDD.h:30
 AliITSsegmentationSDD.h:31
 AliITSsegmentationSDD.h:32
 AliITSsegmentationSDD.h:33
 AliITSsegmentationSDD.h:34
 AliITSsegmentationSDD.h:35
 AliITSsegmentationSDD.h:36
 AliITSsegmentationSDD.h:37
 AliITSsegmentationSDD.h:38
 AliITSsegmentationSDD.h:39
 AliITSsegmentationSDD.h:40
 AliITSsegmentationSDD.h:41
 AliITSsegmentationSDD.h:42
 AliITSsegmentationSDD.h:43
 AliITSsegmentationSDD.h:44
 AliITSsegmentationSDD.h:45
 AliITSsegmentationSDD.h:46
 AliITSsegmentationSDD.h:47
 AliITSsegmentationSDD.h:48
 AliITSsegmentationSDD.h:49
 AliITSsegmentationSDD.h:50
 AliITSsegmentationSDD.h:51
 AliITSsegmentationSDD.h:52
 AliITSsegmentationSDD.h:53
 AliITSsegmentationSDD.h:54
 AliITSsegmentationSDD.h:55
 AliITSsegmentationSDD.h:56
 AliITSsegmentationSDD.h:57
 AliITSsegmentationSDD.h:58
 AliITSsegmentationSDD.h:59
 AliITSsegmentationSDD.h:60
 AliITSsegmentationSDD.h:61
 AliITSsegmentationSDD.h:62
 AliITSsegmentationSDD.h:63
 AliITSsegmentationSDD.h:64
 AliITSsegmentationSDD.h:65
 AliITSsegmentationSDD.h:66
 AliITSsegmentationSDD.h:67
 AliITSsegmentationSDD.h:68
 AliITSsegmentationSDD.h:69
 AliITSsegmentationSDD.h:70
 AliITSsegmentationSDD.h:71
 AliITSsegmentationSDD.h:72
 AliITSsegmentationSDD.h:73
 AliITSsegmentationSDD.h:74
 AliITSsegmentationSDD.h:75
 AliITSsegmentationSDD.h:76
 AliITSsegmentationSDD.h:77
 AliITSsegmentationSDD.h:78
 AliITSsegmentationSDD.h:79
 AliITSsegmentationSDD.h:80
 AliITSsegmentationSDD.h:81
 AliITSsegmentationSDD.h:82
 AliITSsegmentationSDD.h:83
 AliITSsegmentationSDD.h:84
 AliITSsegmentationSDD.h:85
 AliITSsegmentationSDD.h:86
 AliITSsegmentationSDD.h:87
 AliITSsegmentationSDD.h:88
 AliITSsegmentationSDD.h:89
 AliITSsegmentationSDD.h:90
 AliITSsegmentationSDD.h:91
 AliITSsegmentationSDD.h:92
 AliITSsegmentationSDD.h:93
 AliITSsegmentationSDD.h:94
 AliITSsegmentationSDD.h:95
 AliITSsegmentationSDD.h:96
 AliITSsegmentationSDD.h:97
 AliITSsegmentationSDD.h:98
 AliITSsegmentationSDD.h:99
 AliITSsegmentationSDD.h:100
 AliITSsegmentationSDD.h:101
 AliITSsegmentationSDD.h:102
 AliITSsegmentationSDD.h:103
 AliITSsegmentationSDD.h:104
 AliITSsegmentationSDD.h:105
 AliITSsegmentationSDD.h:106
 AliITSsegmentationSDD.h:107
 AliITSsegmentationSDD.h:108
 AliITSsegmentationSDD.h:109
 AliITSsegmentationSDD.h:110
 AliITSsegmentationSDD.h:111
 AliITSsegmentationSDD.h:112
 AliITSsegmentationSDD.h:113
 AliITSsegmentationSDD.h:114
 AliITSsegmentationSDD.h:115
 AliITSsegmentationSDD.h:116
 AliITSsegmentationSDD.h:117
 AliITSsegmentationSDD.h:118
 AliITSsegmentationSDD.h:119
 AliITSsegmentationSDD.h:120
 AliITSsegmentationSDD.h:121
 AliITSsegmentationSDD.h:122
 AliITSsegmentationSDD.h:123
 AliITSsegmentationSDD.h:124
 AliITSsegmentationSDD.h:125
 AliITSsegmentationSDD.h:126
 AliITSsegmentationSDD.h:127
 AliITSsegmentationSDD.h:128
 AliITSsegmentationSDD.h:129
 AliITSsegmentationSDD.h:130
 AliITSsegmentationSDD.h:131
 AliITSsegmentationSDD.h:132
 AliITSsegmentationSDD.h:133
 AliITSsegmentationSDD.h:134
 AliITSsegmentationSDD.h:135