Replacing Header with Id
[u/mrichter/AliRoot.git] / STEER / AliSegmentation.h
1 #ifndef ALISEGMENTATION_H
2 #define ALISEGMENTATION_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 #include "TObject.h"
9
10 class TF1;
11
12 //----------------------------------------------
13 //
14 // Chamber segmentation virtual base class
15 //
16 class AliSegmentation :
17 public TObject {
18  public:
19     // Set Chamber Segmentation Parameters
20     //
21     virtual ~AliSegmentation() {}
22     // Pad size Dx*Dy 
23     virtual void    SetPadSize(Float_t p1, Float_t p2)                                 = 0;
24     // Anod Pitch
25     virtual void    SetDAnod(Float_t D)                                                = 0;
26     // Transform from pad (wire) to real coordinates and vice versa
27     //
28     // Anod wire coordinate closest to xhit
29     virtual Float_t GetAnod(Float_t xhit) const                                        = 0;
30     // Transform from pad to real coordinates
31     virtual void    GetPadI(Float_t x, Float_t y, Float_t  z, Int_t   &ix, Int_t  &iy) = 0;
32     // Transform from real to pad coordinatesi
33     virtual void    GetPadC(Int_t  ix, Int_t  iy, Float_t &x, Float_t  &y, Float_t &z) = 0;
34     //
35     // Initialisation
36     virtual void Init(Int_t chamber)                                                   = 0;
37     //
38     // Get member data
39     //
40     // Pad size in x
41     virtual Float_t Dpx() const                                                         = 0;
42     // Pad size in y 
43     virtual Float_t Dpy() const                                                         = 0;
44     // Pad size in x by Sector 
45     virtual Float_t Dpx(Int_t) const                                                    = 0;
46     // Pad size in y by Sector 
47     virtual Float_t Dpy(Int_t) const                                                    = 0;
48     // Maximum number of Pads in x
49     virtual Int_t    Npx() const                                                        = 0;
50     // Maximum number of Pads in y
51     virtual Int_t    Npy() const                                                        = 0;
52     // Set pad position
53     virtual void     SetPad(Int_t, Int_t)                                               = 0;
54     // Set hit position
55     virtual void     SetHit(Float_t, Float_t, Float_t )                                 = 0;
56     
57     //
58     // Iterate over pads
59     // Initialiser
60     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy)   = 0;
61     // Stepper
62     virtual void  NextPad()                                                             = 0;
63     // Condition
64     virtual Int_t MorePads()                                                            = 0;
65     //
66     // Distance between 1 pad and a position
67     virtual Float_t Distance2AndOffset(Int_t iX, Int_t iY, Float_t X, Float_t Y, Int_t *dummy) = 0;
68     // Number of pads read in parallel and offset to add to x 
69     // (specific to LYON, but mandatory for display)
70     virtual void GetNParallelAndOffset(Int_t iX, Int_t iY,
71                                        Int_t *Nparallel, Int_t *Offset)                 = 0;
72     // Get next neighbours 
73     virtual void Neighbours
74         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10])            = 0;
75     //
76     // Current pad cursor during disintegration
77     // x-coordinate
78     virtual Int_t  Ix()                                                           = 0;
79     // y-coordinate
80     virtual Int_t  Iy()                                                           = 0;
81     // current sector
82     virtual Int_t  ISector()                                                      = 0;
83     // calculate sector from pad coordinates
84     virtual Int_t  Sector(Int_t ix, Int_t iy)                                     = 0;
85     virtual Int_t  Sector(Float_t x, Float_t y)                                   = 0;
86     //
87     // Signal Generation Condition during Stepping
88     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z)                           = 0;
89     // Initialise signal generation at coord (x,y,z)
90     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z)                           = 0;
91     // Current integration limits 
92     virtual void  IntegrationLimits
93         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2)                            = 0;
94     // Test points for auto calibration
95     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const                 = 0;
96     // Draw the segmentation zones
97     virtual void Draw(const char *opt = "")  const                                  = 0;
98     // Function for systematic corrections
99     // Set the correction function
100     virtual void SetCorrFunc(Int_t,  TF1*)                                               = 0;
101     // Get the correction Function
102     virtual TF1* CorrFunc(Int_t)  const                                                 = 0;
103             
104     ClassDef(AliSegmentation,1) //Segmentation abstract base class 
105 };
106 #endif