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