]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONClusterInput.h
Added protection and 2 levels for problems
[u/mrichter/AliRoot.git] / MUON / AliMUONClusterInput.h
1 #ifndef ALIMUONCLUSTERINPUT_H
2 #define ALIMUONCLUSTERINPUT_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 // Revision of includes 07/04/2006
8
9 /// \ingroup rec
10 /// \class AliMUONClusterInput
11 /// \brief Global data service for hit reconstruction
12
13 #include <TObject.h>
14 #include <TClonesArray.h> // needed for inline function Digit
15
16 class AliMUONDigit;
17 class AliMUONRawCluster;
18 class AliMUONMathieson;
19 class AliMUONGeometryTransformer;
20 class AliMUONSegmentation;
21 class AliMUONGeometrySegmentation;
22
23 class TMinuit;
24
25 class AliMUONClusterInput : public TObject 
26 {
27  public:
28     virtual ~AliMUONClusterInput();
29     static AliMUONClusterInput* Instance();
30 //  Configuration
31     void SetDigits(Int_t chamber, Int_t idDE, TClonesArray* dig1, TClonesArray* dig2);
32     void SetDigits(Int_t chamber, Int_t idDE, TClonesArray* dig);
33     void SetCluster(AliMUONRawCluster* cluster);
34 // Access functions
35     /// Return the current chamber number
36     Int_t Chamber() const {return fChamber;}
37     /// Return i-th digit for given cath
38     AliMUONDigit* Digit(Int_t cath, Int_t i) const {return (AliMUONDigit*) (fDigits[cath]->UncheckedAt(i));}
39     /// Return the array of digits for given cathod 
40     TClonesArray* Digits(Int_t cath) const {return fDigits[cath];}
41     /// Return number of digits for given cathod 
42     Int_t NDigits(Int_t cath) const {return fNDigits[cath];}
43     /// Return geometry segmentation for given cathod 
44     AliMUONGeometrySegmentation* Segmentation2(Int_t cath) const {return fSegmentation2[cath];}
45
46     /// Return Mathieson    
47     AliMUONMathieson* Mathieson() const {return fgMathieson;}    
48     /// Return charge correlation
49     Float_t ChargeCorrel() const {return fChargeCorrel;}    
50     /// Return detection elt id
51     Int_t DetElemId() const {return fDetElemId;}
52
53 // Fitting    
54     /// Return the fitter
55     TMinuit*      Fitter() const {return fgMinuit;}
56 // Current cluster information    
57     /// Return the total charge for given cathod 
58     Float_t       TotalCharge(Int_t cath) const {return fChargeTot[cath];}
59     /// Return the charge for the given cluster and cathod
60     Float_t       Charge(Int_t dig, Int_t cath) const {return fCharge[dig][cath];}
61     /// Return the x-position for the given cluster and cathod
62     Int_t         Ix(Int_t dig, Int_t cath) const {return fix[dig][cath];}
63     /// Return the y-position for the given cluster and cathod
64     Int_t         Iy(Int_t dig, Int_t cath) const {return fiy[dig][cath];}
65     /// Return the cluster multiplicity for given cathod 
66     Int_t         Nmul(Int_t cath) const {return fNmul[cath];}
67
68 //  Helpers for Fit     
69     Float_t DiscrChargeS1(Int_t i,Double_t *par);
70     Float_t DiscrChargeCombiS1(Int_t i,Double_t *par, Int_t cath);
71     Float_t DiscrChargeS2(Int_t i,Double_t *par);
72     Float_t DiscrChargeCombiS2(Int_t i,Double_t *par, Int_t cath);
73 // 
74  private:
75     /// Not implemented
76     AliMUONClusterInput();
77     /// Not implemented
78     AliMUONClusterInput(const AliMUONClusterInput& clusterInput);
79     /// Not implemented
80     AliMUONClusterInput & operator = (const AliMUONClusterInput& rhs);
81
82     static AliMUONClusterInput*  fgClusterInput;  //!< singleton instance
83     static AliMUONMathieson*     fgMathieson;     //!< Mathieson
84     static AliMUONGeometryTransformer*  fgTransformer;  //!< Geometry transformer
85     static AliMUONSegmentation*  fgSegmentation;  //!< Segmentation
86
87     // Digits
88     TClonesArray*        fDigits[2];       //!< Array of pointers to digits
89     Int_t                fNDigits[2];      //!< Number of digits
90     AliMUONGeometrySegmentation*     fSegmentation2[2]; //!< Geometry Segmentation per cathode
91
92     Int_t                fNseg;            //!< number of cathode planes
93     Int_t                fChamber;         //!< Current chamber number
94     
95     // Current cluster
96     AliMUONRawCluster*   fCluster;         //!< current cluster
97     Int_t                fNmul[2];         //!< current cluster multiplicity
98     // Digits contribuing to current cluster
99     Int_t                fix[500][2];      //!< List of x-positions for current cluster
100     Int_t                fiy[500][2];      //!< List of y-positions for current cluster
101     Float_t              fCharge[500][2];  //!< List of charges for current cluster
102     Int_t                fChargeTot[2];    //!< Total charge
103     Float_t              fQtot[2];         //!< Total charge
104     Float_t              fZ;               //!< Current z-position
105     Float_t              fChargeCorrel;    //!< charge correlation 
106     Int_t                fDetElemId;       //!< detection elt id    
107
108     // Fitter
109     static TMinuit*      fgMinuit;          //!< Fitter
110     ClassDef(AliMUONClusterInput, 0)        // Global data service for hit reconstruction
111 };
112 #endif
113