Code from MUON-dev joined
[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 "AliMUONSegmentation.h"
10 #include "AliMUONResponse.h"
11
12 class AliMUONClusterFinder;
13 //class AliMUONResponse ;
14 //class AliMUONSegmentation ;
15
16 class AliMUONChamber:
17 public TObject
18 {
19  public:
20     AliMUONChamber();
21     AliMUONChamber(const AliMUONChamber & rChamber);
22     virtual ~AliMUONChamber();
23     
24 //
25 // Get GEANT id of sensitive volume
26   virtual Int_t   GetGid() {return fGid;}
27 // Set GEANT id of sensitive volume
28   virtual void    SetGid(Int_t id) {fGid=id;}
29 //  
30 // Initialisation
31   virtual void    Init();
32 // Set z-position of chamber  
33   virtual void    SetZ(Float_t Z) {fZ = Z;}
34 // Get z-position of chamber  
35   virtual Float_t Z(){return fZ;}
36 // Set inner radius of sensitive volume 
37   virtual void SetRInner(Float_t rmin) {frMin=rmin;}
38 // Set outer radius of sensitive volum  
39   virtual void SetROuter(Float_t rmax) {frMax=rmax;}  
40
41 // Return inner radius of sensitive volume 
42   virtual  Float_t RInner()            {return frMin;}
43 // Return outer radius of sensitive volum  
44   virtual Float_t ROuter()            {return frMax;}  
45 //  
46 // Set response model
47   virtual void    SetResponseModel(AliMUONResponse* thisResponse) {fResponse=thisResponse;}
48 //  
49 // Set segmentation model
50   virtual void    SetSegmentationModel(Int_t i, AliMUONSegmentation* thisSegmentation) {
51       (*fSegmentation)[i-1] = thisSegmentation;
52   }
53 // Set Cluster reconstruction model  
54   virtual void    SetReconstructionModel(AliMUONClusterFinder *thisReconstruction) {
55       fReconstruction = thisReconstruction;
56   }
57 //  
58 //  Get pointer to response model
59   virtual AliMUONResponse* &ResponseModel(){return fResponse;}
60 //  
61 //  Get reference to segmentation model
62   virtual AliMUONSegmentation*  SegmentationModel(Int_t isec) {
63       return (AliMUONSegmentation *) (*fSegmentation)[isec-1];
64   }
65   virtual TObjArray* ChamberSegmentation() {return fSegmentation;}
66 //  Get pointer to cluster reconstruction model
67   virtual AliMUONClusterFinder* &ReconstructionModel(){return fReconstruction;}
68 // Get number of segmentation sectors  
69   virtual Int_t Nsec()              {return fnsec;}
70 // Set number of segmented cathodes (1 or 2)  
71   virtual void  SetNsec(Int_t nsec) {fnsec=nsec;}
72 //
73 // Member function forwarding to the segmentation and response models
74 //
75 // Calculate pulse height from energy loss  
76   virtual Float_t IntPH(Float_t eloss) {return fResponse->IntPH(eloss);}
77 //  
78 // Ask segmentation if signal should be generated  
79   virtual Int_t   SigGenCond(Float_t x, Float_t y, Float_t z);
80 //
81 // Initialisation of segmentation for hit  
82   virtual void    SigGenInit(Float_t x, Float_t y, Float_t z);
83 // Configuration forwarding
84 //
85 // Define signal distribution region
86 // by number of sigmas of the distribution function
87   virtual void   SetSigmaIntegration(Float_t p1)
88       {fResponse->SetSigmaIntegration(p1);}
89 // Set the single electron pulse-height (ADCchan/e)  
90   virtual void   SetChargeSlope(Float_t p1)              {fResponse->SetChargeSlope(p1);}
91 // Set width of charge distribution function  
92   virtual void   SetChargeSpread(Float_t p1, Float_t p2) {fResponse->SetChargeSpread(p1,p2);}
93 // Set maximum ADC count value
94   virtual void   SetMaxAdc(Float_t p1)                   {fResponse->SetMaxAdc(p1);}
95 // Set Pad size
96   virtual void   SetPadSize(Int_t isec, Float_t p1, Float_t p2) {
97       ((AliMUONSegmentation*) (*fSegmentation)[isec-1])->SetPadSize(p1,p2);
98   }
99 //  
100 // Cluster formation method (charge disintegration)
101   virtual void   DisIntegration(Float_t eloss, Float_t tof,
102                                 Float_t xhit, Float_t yhit,
103                                 Int_t& x, Float_t newclust[6][500]);
104 // Initialize geometry related parameters  
105   virtual void    InitGeo(Float_t z);
106 //
107   virtual Float_t DGas() {return fdGas;}
108   virtual Float_t DAlu() {return fdAlu;}  
109 // assignment operator  
110   virtual AliMUONChamber& operator =(const AliMUONChamber& rhs);
111   
112  protected:
113
114   Float_t fdGas; // half gaz gap
115   Float_t fdAlu; // half Alu width  
116   Int_t   fGid;  // GEANT volume if for sensitive volume of this chamber
117   Float_t fZ;    // Z position (cm)
118   Int_t   fnsec; // number of semented cathode planes
119   Float_t frMin; // innermost sensitive radius
120   Float_t frMax; // outermost sensitive radius
121
122   TObjArray            *fSegmentation;    // pointer to segmentation
123   AliMUONClusterFinder *fReconstruction;  // pointer to reconstruction
124   AliMUONResponse      *fResponse;        // pointer to response
125   ClassDef(AliMUONChamber,1) // Muon tracking and trigger chamber class
126 };
127
128 #endif