Adding new AddHit function
[u/mrichter/AliRoot.git] / MUON / AliMUON.h
1 #ifndef ALIMUON_H
2 #define ALIMUON_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 ////////////////////////////////////////////////
9 //  AliDetector Class for MUON subsystem      //
10 ////////////////////////////////////////////////
11 #include "AliDetector.h"
12
13 class AliMUONChamber;
14 class AliMUONLocalTrigger;
15 class AliMUONGlobalTrigger;
16 class AliMUONTriggerCircuit;
17 class AliMUONTriggerDecision;
18 class AliSegmentation;
19 class AliMUONResponse;
20 class AliMUONMerger;
21 class AliMUONHit;
22 class AliMUONPadHit;
23 class AliMUONRawCluster;
24 class AliMUONClusterFinderVS;
25 class AliMUONReconstHit;
26 class AliMUONMerger;
27
28 class TVector;
29 #include "TObjArray.h"
30 class TFile;
31 class TTree;
32
33
34 class AliMUON : public  AliDetector {
35  public:
36     AliMUON();
37     AliMUON(const char *name, const char *title);
38     AliMUON(const AliMUON& rMUON);
39     virtual       ~AliMUON();
40     virtual void   AddHit(Int_t track , Int_t *vol, Float_t *hits);
41     virtual void   AddHit(Int_t fIshunt, Int_t track, Int_t iChamber, 
42                           Int_t idpart, Float_t X, Float_t Y, Float_t Z, 
43                           Float_t tof, Float_t momentum, Float_t theta, 
44                           Float_t phi, Float_t length, Float_t destep);
45     virtual void   AddPadHit(Int_t* clhits); // To be removed !
46     virtual void   AddDigits(Int_t id, Int_t* tracks, Int_t* charges,
47                              Int_t* digits);
48     virtual void   AddRawCluster(Int_t id, const AliMUONRawCluster& clust);
49     virtual void   BuildGeometry();
50     void           AddGlobalTrigger(Int_t *singlePlus, Int_t *singleMinus,
51                                     Int_t *singleUndef, Int_t *pairUnlike, 
52                                     Int_t *pairLike);
53     void           AddLocalTrigger(Int_t* ltrigger);
54     Int_t          DistancetoPrimitive(Int_t px, Int_t py);
55     virtual Int_t  IsVersion() const {return 0;}
56     TClonesArray  *PadHits() {return fPadHits;}
57     TClonesArray  *LocalTrigger() {return fLocalTrigger;}
58     TClonesArray  *GlobalTrigger() {return fGlobalTrigger;}
59     virtual void   MakeBranch(Option_t *opt=" ", const char *file=0);
60     virtual void   MakeBranchInTreeD(TTree *treeD, const char *file=0);
61     void           SetTreeAddress();
62     virtual void   ResetHits();
63     virtual void   ResetDigits();
64     virtual void   ResetTrigger();
65     virtual void   ResetRawClusters();
66     // Cluster Finding
67     virtual void   Digits2Reco();
68     virtual void   FindClusters();
69     // Digitisation 
70     virtual void   SDigits2Digits();      
71 // Configuration Methods (per station id)
72 //
73 // Set Chamber Segmentation Parameters
74 // id refers to the station and isec to the cathode plane
75 // Set Z values for all chambers
76     virtual void SetChambersZ(const Float_t *Z);
77     virtual void SetChambersZToDefault(void);
78     virtual void SetPadSize(Int_t id, Int_t isec, Float_t p1, Float_t p2);
79 // Set Signal Generation Parameters
80     virtual void   SetSigmaIntegration(Int_t id, Float_t p1);
81     virtual void   SetChargeSlope(Int_t id, Float_t p1);
82     virtual void   SetChargeSpread(Int_t id, Float_t p1, Float_t p2);
83     virtual void   SetMaxAdc(Int_t id, Int_t p1);
84 // Set Segmentation and Response Model
85     virtual void   SetSegmentationModel(Int_t id, Int_t isec,
86                                         AliSegmentation *segmentation);
87     virtual void   SetResponseModel(Int_t id, AliMUONResponse *response);
88     virtual void   SetNsec(Int_t id, Int_t nsec);
89 // Set Reconstruction Model
90     virtual void   SetReconstructionModel(Int_t id, AliMUONClusterFinderVS *reconstruction);
91 // Set Merger/Digitizer
92     virtual void   SetMerger(AliMUONMerger* merger);
93     virtual AliMUONMerger* Merger();
94     
95 // Set Stepping Parameters
96     virtual void   SetMaxStepGas(Float_t p1);
97     virtual void   SetMaxStepAlu(Float_t p1);
98     virtual void   SetMaxDestepGas(Float_t p1);
99     virtual void   SetMaxDestepAlu(Float_t p1);
100     virtual void   SetAcceptance(Bool_t acc=0, Float_t angmin=2, Float_t angmax=9);
101 // Response Simulation
102     virtual void   MakePadHits(Float_t xhit,Float_t yhit, Float_t zhit,
103                                Float_t eloss, Float_t tof, Int_t id);
104 // get Trigger answer
105     void   Trigger(Int_t nev);
106 // Return reference to Chamber #id
107     virtual AliMUONChamber& Chamber(Int_t id)
108         {return *((AliMUONChamber *) (*fChambers)[id]);}
109 // Return reference to Circuit #id
110     virtual AliMUONTriggerCircuit& TriggerCircuit(Int_t id)
111       {return *((AliMUONTriggerCircuit *) (*fTriggerCircuits)[id]);}
112 // Retrieve pad hits for a given Hit
113     virtual AliMUONPadHit* FirstPad(AliMUONHit *hit, TClonesArray *padHits);
114     virtual AliMUONPadHit* NextPad(TClonesArray *padHits);
115 // Return pointers to digits
116     TObjArray            *Dchambers() {return fDchambers;}
117     Int_t                *Ndch() {return fNdch;}
118     virtual TClonesArray *DigitsAddress(Int_t id)
119         {return ((TClonesArray *) (*fDchambers)[id]);}
120 // Return pointers to reconstructed clusters
121     TObjArray            *RawClusters() {return fRawClusters;}
122     Int_t                *Nrawch() {return fNrawch;} 
123     virtual TClonesArray *RawClustAddress(Int_t id) 
124         {return ((TClonesArray *) (*fRawClusters)[id]);}
125
126     AliMUONRawCluster    *RawCluster(Int_t ichamber, Int_t icathod,
127                                      Int_t icluster);
128 // Copy Operator
129     AliMUON& operator = (const AliMUON& rhs);
130     
131             
132  protected:
133     Int_t                 fNCh;                // Number of chambers   
134     Int_t                 fNTrackingCh;        // Number of tracking chambers
135     TObjArray            *fChambers;           // List of Tracking Chambers
136     TObjArray            *fTriggerCircuits;    // List of Trigger Circuits
137     Int_t                 fNPadHits;           // Number of pad hits
138     TClonesArray         *fPadHits;            // List of pad hits
139     TObjArray            *fDchambers;          // List of digits
140     Int_t                *fNdch;               // [fNCh] Number of digits per chamber
141     TObjArray            *fRawClusters;        // List of raw clusters
142     Int_t                *fNrawch;             // [fNTrackingCh] Number of raw clusters  per chamber
143     Int_t                 fNLocalTrigger;      // Number of Local Trigger 
144     TClonesArray         *fLocalTrigger;       // List of Local Trigger      
145     Int_t                 fNGlobalTrigger;     // Number of Global Trigger
146     TClonesArray         *fGlobalTrigger;      // List of Global Trigger  
147     
148 //
149     Bool_t   fAccCut;          //Transport acceptance cut
150     Float_t  fAccMin;          //Minimum acceptance cut used during transport
151     Float_t  fAccMax;          //Minimum acceptance cut used during transport
152 //  
153
154 //  Stepping Parameters
155    Float_t fMaxStepGas;      // Maximum step size inside the chamber gas
156    Float_t fMaxStepAlu;      // Maximum step size inside the chamber aluminum
157    Float_t fMaxDestepGas;    // Maximum relative energy loss in gas
158    Float_t fMaxDestepAlu;    // Maximum relative energy loss in aluminum
159
160
161
162 // Pad Iterator
163    Int_t fMaxIterPad;        // Maximum pad index
164    Int_t fCurIterPad;        // Current pad index
165 // Background eent for event mixing
166    Text_t *fFileName;           // ! File with background hits
167    AliMUONMerger *fMerger;   // ! pointer to merger
168
169    ClassDef(AliMUON,2)  // MUON Detector base class
170 };
171 #endif
172