dd43267f9d2100091f6ec5e9f6ae6b41f2d27c2e
[u/mrichter/AliRoot.git] / ITS / AliITSgeomSDD.h
1 #ifndef ALIITSGEOMSDD_H
2 #define ALIITSGEOMSDD_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 #include <TObject.h>
8 #include <TBRIK.h>
9
10 class TShape;
11
12 class AliITSgeomSDD: public TObject {
13  public:
14     AliITSgeomSDD();
15     AliITSgeomSDD(const Float_t *box,Float_t per,Float_t vel,
16                   Float_t axL,Float_t axR,
17                   Int_t nA0,Float_t *le0,Int_t nA1,Float_t *le1);
18     AliITSgeomSDD(AliITSgeomSDD &source);
19     AliITSgeomSDD& operator=(AliITSgeomSDD &source);
20     virtual ~AliITSgeomSDD();
21     void ResetSDD(const Float_t *box,Float_t per,Float_t vel,
22                   Float_t axL,Float_t axR,
23                   Int_t nA0,Float_t *le0,Int_t nA1,Float_t *le1);
24     virtual TShape *GetShape() const {return fShapeSDD;}
25     virtual Float_t GetDx() const { // Get TBRIK Dx
26         if(fShapeSDD!=0) return fShapeSDD->GetDx();
27         else return 0.0;}
28     virtual Float_t GetDy() const {// Get TBRIK Dy
29         if(fShapeSDD!=0) return fShapeSDD->GetDy();
30         else return 0.0;}
31     virtual Float_t GetDz() const {// Get TBRIK Dz
32         if(fShapeSDD!=0) return fShapeSDD->GetDz();
33         else return 0.0;}
34     virtual Float_t GetAnodeX(Int_t a,Int_t s) const { // returns X position of anode
35         if(s==0) return fAnodeXL; else return fAnodeXR;}
36     virtual Float_t GetAnodeZ(Int_t a,Int_t s)const { // returns X position of anode
37         if(s==0) return 0.5*(fAnodeLowEdgeL[a]+fAnodeLowEdgeL[a+1]);
38         else return 0.5*(fAnodeLowEdgeR[a]+fAnodeLowEdgeR[a+1]);}
39     virtual void SetNAnodesL(Int_t s)
40         {fNAnodesL = s;} // sets the number of anodes on side 0.
41     virtual void SetNAnodesR(Int_t s)
42         {fNAnodesR = s;} // sets the anodes spacing for side 1.
43     virtual void SetSamplingPeriod(Float_t s)
44         {fPeriod = s;} // sets the clock sampling period s.
45     virtual void SetDriftVelocity(Float_t s)
46         {fDvelocity = s;} // sets the SDD Drift velocity cm/s.
47     virtual void SetShape(char *name,char *title,char *mat,
48                           Float_t dx,Float_t dy,Float_t dz)
49                          {fShapeSDD = new TBRIK(name,title,mat,dx,dy,dz);}
50     virtual void Local2Det(Float_t xl,Float_t zl,Int_t &a,Int_t &t,Int_t &s);
51     virtual void Det2Local(Int_t a,Int_t t,Int_t s,Float_t &xl,Float_t &zl);
52     virtual void Print(ostream *os) const; // Output streamer to standard out.
53     virtual void Read(istream *is);   // Input streamer to standard in.
54     // or what other or different information that is needed.
55
56  protected:
57     // (L)  -+-> x  (R)
58     //       |
59     //       V z
60     Float_t fPeriod; // ADC sampiling period
61     Float_t fDvelocity; // Drift velocity
62     Int_t   fNAnodesL;  // number of Anodes on size 0
63     Int_t   fNAnodesR;  // number of Anodes on size 1
64     Float_t fAnodeXL;   // Anode location in x Left side
65     Float_t fAnodeXR;   // Anode location in x Right side
66     Float_t *fAnodeLowEdgeL; //[fNAnodesL] Anode spacing left edge
67     Float_t *fAnodeLowEdgeR; //[fNAnodesR] Anode spacing right edge
68     TBRIK *fShapeSDD;     // shape of sensitive volume
69
70     ClassDef(AliITSgeomSDD,1) // ITS SDD detector geometry class
71
72 };
73 // Input and output function for standard C++ input/output.
74 ostream &operator<<(ostream &os,AliITSgeomSDD &source);
75 istream &operator>>(istream &os,AliITSgeomSDD &source);
76 #endif
77 //======================================================================
78 #ifndef ALIITSGEOMSDD256_H
79 #define ALIITSGEOMSDD256_H
80 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
81  * See cxx source for full Copyright notice                               */
82
83 /*
84   $Id$
85 */
86
87 //#include "AliITSgeomSDD.h"
88
89
90 class AliITSgeomSDD256 : public AliITSgeomSDD {
91
92  public:
93     AliITSgeomSDD256();
94
95     // This clas now has version 0 so that it will not be written to a root
96     // file. This is good since there are no longer any data members to this
97     // class. It is only designed to make it easer to define this standard
98     // SDD detector geometry.
99     ClassDef(AliITSgeomSDD256,0) // ITS SDD detector geometry class for 256 anodes per side
100
101 };
102 // Input and output function for standard C++ input/output.
103 ostream &operator<<(ostream &os,AliITSgeomSDD256 &source);
104 istream &operator>>(istream &os,AliITSgeomSDD256 &source);
105 #endif
106 //======================================================================
107 #ifndef ALIITSGEOMSDD300_H
108 #define ALIITSGEOMSDD300_H
109 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
110  * See cxx source for full Copyright notice                               */
111
112 /*
113   $Id$
114 */
115
116 //#include "AliITSgeomSDD.h"
117
118
119 class AliITSgeomSDD300 : public AliITSgeomSDD {
120
121  public:
122     AliITSgeomSDD300();
123
124     // This clas now has version 0 so that it will not be written to a root
125     // file. This is good since there are no longer any data members to this
126     // class. It is only designed to make it easer to define this standard
127     // SDD detector geometry.
128     ClassDef(AliITSgeomSDD300,0) // ITS SDD detector geometry class for 300 anodes per side
129
130 };
131 // Input and output function for standard C++ input/output.
132 ostream &operator<<(ostream &os,AliITSgeomSDD300 &source);
133 istream &operator>>(istream &os,AliITSgeomSDD300 &source);
134 #endif