]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONChamber.h
New definition of the geometry based on builders and usign Ivana's envelop method...
[u/mrichter/AliRoot.git] / MUON / AliMUONChamber.h
1 #ifndef ALIMUONCHAMBER_H
2 #define ALIMUONCHAMBER_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 "TObjArray.h"
9 #include "AliSegmentation.h"
10 #include "AliMUONResponse.h"
11
12 class AliMUONClusterFinderVS;
13 //class AliMUONResponse ;
14 //class AliSegmentation ;
15 class AliMUONChamberGeometry;
16
17 class AliMUONChamber:
18 public TObject
19 {
20  public:
21     AliMUONChamber();
22     AliMUONChamber(Int_t id);
23     AliMUONChamber(const AliMUONChamber & rChamber);
24     virtual ~AliMUONChamber();
25     
26 //
27 // Get chamber Id
28   virtual Int_t   GetId() {return fId;}
29 //
30
31 // Get chamber Id
32   virtual Bool_t  IsSensId(Int_t volId) const;
33 /*
34 // Get GEANT id of sensitive volume
35   virtual Int_t   GetGid() {return fGid;}
36 // Set GEANT id of sensitive volume
37   virtual void    SetGid(Int_t id) {fGid=id;}
38 //
39 */
40   
41 // Initialisation
42   virtual void    Init();
43 // Set z-position of chamber  
44   virtual void    SetZ(Float_t Z) {fZ = Z;}
45 // Get z-position of chamber  
46   virtual Float_t Z(){return fZ;}
47 // Set inner radius of sensitive volume 
48   virtual void SetRInner(Float_t rmin) {frMin=rmin;}
49 // Set outer radius of sensitive volum  
50   virtual void SetROuter(Float_t rmax) {frMax=rmax;}  
51
52 // Return inner radius of sensitive volume 
53   virtual  Float_t RInner()            {return frMin;}
54 // Return outer radius of sensitive volum  
55   virtual Float_t ROuter()            {return frMax;}  
56 //  
57 // Set response model
58   virtual void    SetResponseModel(AliMUONResponse* thisResponse) {fResponse=thisResponse;}
59 //  
60 // Set segmentation model
61   virtual void    SetSegmentationModel(Int_t i, AliSegmentation* thisSegmentation) {
62       fSegmentation->AddAt(thisSegmentation,i-1);
63   }
64 // Set Cluster reconstruction model  
65   virtual void    SetReconstructionModel(AliMUONClusterFinderVS *thisReconstruction) {
66       fReconstruction = thisReconstruction;
67   }
68 //  
69 //  Get pointer to response model
70   virtual AliMUONResponse* &ResponseModel(){return fResponse;}
71 //  
72 //  Get reference to segmentation model
73   virtual AliSegmentation*  SegmentationModel(Int_t isec) {
74       return (AliSegmentation *) (*fSegmentation)[isec-1];
75   }
76   virtual TObjArray* ChamberSegmentation() {return fSegmentation;}
77 //  Get pointer to cluster reconstruction model
78   virtual AliMUONClusterFinderVS* &ReconstructionModel(){return fReconstruction;}
79 // Get number of segmentation sectors  
80   virtual Int_t Nsec()              {return fnsec;}
81 // Set number of segmented cathodes (1 or 2)  
82   virtual void  SetNsec(Int_t nsec) {fnsec=nsec;}
83 //
84 // Member function forwarding to the segmentation and response models
85 //
86 // Calculate pulse height from energy loss  
87   virtual Float_t IntPH(Float_t eloss) {return fResponse->IntPH(eloss);}
88 //  
89 // Ask segmentation if signal should be generated  
90   virtual Int_t   SigGenCond(Float_t x, Float_t y, Float_t z);
91 //
92 // Initialisation of segmentation for hit  
93   virtual void    SigGenInit(Float_t x, Float_t y, Float_t z);
94 // Initialisation of charge fluctuation for given hit
95   virtual void    ChargeCorrelationInit();
96
97 // Configuration forwarding
98 //
99 // Define signal distribution region
100 // by number of sigmas of the distribution function
101   virtual void   SetSigmaIntegration(Float_t p1)
102       {fResponse->SetSigmaIntegration(p1);}
103 // Set the single electron pulse-height (ADCchan/e)  
104   virtual void   SetChargeSlope(Float_t p1)              {fResponse->SetChargeSlope(p1);}
105 // Set width of charge distribution function  
106   virtual void   SetChargeSpread(Float_t p1, Float_t p2) {fResponse->SetChargeSpread(p1,p2);}
107 // Set maximum ADC count value
108   virtual void   SetMaxAdc(Int_t p1)                   {fResponse->SetMaxAdc(p1);}
109 // Set Pad size
110   virtual void   SetPadSize(Int_t isec, Float_t p1, Float_t p2) {
111       ((AliSegmentation*) (*fSegmentation)[isec-1])->SetPadSize(p1,p2);
112   }
113 //  
114 // Cluster formation method (charge disintegration)
115   virtual void   DisIntegration(Float_t eloss, Float_t tof,
116                                 Float_t xhit, Float_t yhit, Float_t zhit,
117                                 Int_t& x, Float_t newclust[6][500]);
118 // Initialize geometry related parameters  
119   virtual void    InitGeo(Float_t z);
120 //
121   virtual Float_t DGas() {return fdGas;}
122   virtual Float_t DAlu() {return fdAlu;}  
123   virtual void SetDGas(Float_t DGas) {fdGas = DGas;}
124   virtual void SetDAlu(Float_t DAlu) {fdAlu = DAlu;}  
125   virtual void SetChargeCorrel(Float_t correl) {fResponse->SetChargeCorrel(correl);}
126
127 // geometry  
128   void SetGeometry(AliMUONChamberGeometry* geometry) {fGeometry = geometry;}
129   AliMUONChamberGeometry* GetGeometry() const {return fGeometry; }
130
131 // assignment operator  
132   AliMUONChamber& operator =(const AliMUONChamber& rhs);
133   
134  protected:
135   Int_t   fId;   // chamber number
136   Float_t fdGas; // half gaz gap
137   Float_t fdAlu; // half Alu width  
138   //Int_t   fGid;  // GEANT volume if for sensitive volume of this chamber
139                    // moved to AliMUONChamberGeometry
140   Float_t fZ;    // Z position (cm)
141   Int_t   fnsec; // number of semented cathode planes
142   Float_t frMin; // innermost sensitive radius
143   Float_t frMax; // outermost sensitive radius
144   Float_t fCurrentCorrel; //! charge correlation for current hit.
145
146   TObjArray              *fSegmentation;    // pointer to segmentation
147   AliMUONClusterFinderVS *fReconstruction;  // pointer to reconstruction
148   AliMUONResponse        *fResponse;        // pointer to response
149   AliMUONChamberGeometry *fGeometry;        // pointer to geometry
150   ClassDef(AliMUONChamber,1) // Muon tracking chamber class
151 };
152
153 #endif