- moved AliHLTDisplay files from TPCLib to TPCLib/OnlineDisplay
[u/mrichter/AliRoot.git] / HLT / TPCLib / OnlineDisplay / AliHLTTPCDisplayMain.h
1 // XEmacs -*-C++-*-
2 // $Id$
3
4 #ifndef ALIHLTTPCDISPLAYMAIN_H
5 #define ALIHLTTPCDISPLAYMAIN_H
6 /** \class AliHLTTPCDisplayMain
7 <pre>
8 //_____________________________________________________________
9 // AliHLTTPCDisplayMain
10 //
11 // Display class for the HLT events.
12 </pre>
13 */
14 // Author: Jochen Thaeder <mailto:thaeder@kip.uni-heidelberg.de>
15 //*-- Copyright &copy ALICE HLT Group 
16
17 #include <TGeometry.h>
18 #include <TObject.h>
19 #include <TCanvas.h>
20
21 #include "AliHLTTPCTransform.h"
22 #include "AliHLTLogging.h"
23
24 class AliHLTTPCSpacePointData;
25 class AliHLTTPCTrackArray;
26 class AliHLTTPCDisplayCharge;
27 class AliHLTTPCDisplayPadRow;
28 class AliHLTTPCDisplayPad;
29 class AliHLTTPCDisplay3D;
30 class AliHLTTPCDisplayResiduals;
31 class AliHLTTPCDisplayFront;
32
33 class AliHLTTPCDisplayMain : public TObject , public AliHLTLogging {
34
35  public:
36     AliHLTTPCDisplayMain(void* pt2GUI, void (*pt2Function)(void*, Int_t));
37     virtual ~AliHLTTPCDisplayMain();
38
39     Int_t Connect( unsigned int cnt, const char** hostnames, unsigned short* ports,Char_t *gfile="$(ALIHLT_BASEDIR)/geo/alice.geom" );
40     
41     void ReadData(Bool_t nextSwitch = kTRUE);
42     void DisplayEvent();
43     void SaveHistograms();
44
45     // SETUP
46     void SetupCluster(Int_t slice, Int_t patch, UInt_t nofClusters, AliHLTTPCSpacePointData* data);
47     void SetupTracks();
48
49     // SETTER   
50     void SetConnectionStatus(Bool_t f) {fConnect = f;}
51
52     // canvas ----
53     void SetCanvasCharge(TCanvas *f){fCanvasCharge = f;}
54     void SetCanvasPadRow(TCanvas *f){fCanvasPadRow = f;}
55     void SetCanvasPad(TCanvas *f){fCanvasPad = f;}
56     void SetCanvas3D(TCanvas *f){fCanvas3D = f;}
57     void SetCanvasResiduals(TCanvas *f){fCanvasResiduals = f;}
58     void SetCanvasFront(TCanvas *f){fCanvasFront = f;}
59     void SetCanvasHits_S(TCanvas *f){fCanvasHits_S = f;}
60     void SetCanvasQ_Track(TCanvas *f){fCanvasQ_Track = f;}
61     void SetCanvasQ_S(TCanvas *f){fCanvasQ_S = f;}
62
63     // slices ----
64     void SetSlices(){fMinSlice = 0; fMaxSlice = 35; fSlicePair = kFALSE; SetSliceArray();}
65     void SetSlices(Int_t s){fMinSlice = s; fMaxSlice = s; fSlicePair = kFALSE; SetSliceArray();}
66     void SetSlices(Int_t mins, Int_t maxs){fMinSlice = mins; fMaxSlice = maxs; fSlicePair = kFALSE; SetSliceArray();}
67     void SetSlicesPair(Int_t s){fMinSlice = s; fMaxSlice = s; fSlicePair = kTRUE; SetSliceArray();}
68     void SetSlicesPair(Int_t mins, Int_t maxs){fMinSlice = mins; fMaxSlice = maxs; fSlicePair = kTRUE; SetSliceArray();}
69
70     // cuts ----
71     //    void SetCutHits(Int_t f){fMinHits = f;}
72     //    void SetCutPt(Float_t f){fPtThreshold = f;}
73     void SetCutHits(Int_t f){fCutHits = f;}
74     void SetCutPt(Float_t f){fCutPt = f;}
75     void SetCutPsi(Float_t f){fCutPsi = f;}
76     void SetCutLambda(Float_t f){fCutLambda = f;}
77     void SetCutS(Float_t f){fCut_S = f;}
78     void SetIncidentPadrow(Int_t f){fCutPadrow = f;}
79
80     void SetInvert() {Int_t tmp = fBackColor; fBackColor = fLineColor; fLineColor = tmp; }
81     void SetKeepView(Bool_t f){fKeepView = f;} 
82
83     // raw ----
84     void SetPad(Int_t f){fPad = f;}
85     void SetPadRow(Int_t f){fPadRow = f; fNPads = AliHLTTPCTransform::GetNPads(f); }
86     void SetSlicePadRow(Int_t f){fSlicePadRow = f;}
87     void SetTimebin(Int_t f){fTimebin = f;}
88
89     void SetAllTimebins(Bool_t f){fAllTimebins = f;}
90     void SetSplitPadRow(Bool_t f){fSplitPadRow = f;}
91
92     void SetSelectTrack(Int_t f) {fSelectTrack = f;}
93     void SetSelectTrackSlice(Int_t f) {fSelectTrackSlice = f;}
94     void SetSelectTrackSwitch(Bool_t f) {fSelectTrackSwitch = f;}
95     void SetSelectCluster(Int_t f) {fSelectCluster = f;}
96
97     void SetSwitches(Bool_t f1, Bool_t f2, Bool_t f3, Bool_t f4) {fSwitch3DTracks = f1; fSwitch3DCluster = f2; fSwitch3DPadRow = f3; fSwitch3DGeometry = f4;} 
98
99     void SetTheta(Float_t f) {fTheta = f;}
100
101
102     // GETTER
103     Bool_t GetConnectionStatus() {return fConnect;}
104
105     AliHLTTPCSpacePointData* GetSpacePointDataPointer(Int_t slice,Int_t patch){return fClusters[slice][patch];}
106     AliHLTTPCTrackArray* GetTrackArrayPointer() {return fTracks;}
107     AliHLTTPCDisplayPadRow * GetPadRowPointer() {return fDisplayPadRow;}
108     AliHLTTPCDisplayPad * GetPadPointer() {return fDisplayPad;}
109
110     // canvas ----
111     TCanvas * GetCanvasHits_S(){return fCanvasHits_S;}
112     TCanvas * GetCanvasQ_Track(){return fCanvasQ_Track;}
113     TCanvas * GetCanvasQ_S(){return fCanvasQ_S;}
114     TCanvas * GetCanvasResiduals(){return fCanvasResiduals;}
115     TCanvas * GetCanvasCharge(){return fCanvasCharge;}
116     TCanvas * GetCanvasPadRow(){return fCanvasPadRow;}
117     TCanvas * GetCanvasPad(){return fCanvasPad;}
118     TCanvas * GetCanvas3D(){return fCanvas3D;}
119     TCanvas * GetCanvasFront(){return fCanvasFront;}
120
121     // cuts ----
122     Int_t GetCutHits(){return fCutHits;}
123     Float_t GetCutPt(){return fCutPt;}
124     Float_t GetCutPsi(){return fCutPsi;}
125     Float_t GetCutLambda(){return fCutLambda;}
126     Float_t GetCutS(){return fCut_S;}
127     Int_t GetIncidentPadrow(){return fCutPadrow;}
128
129     Int_t GetNumberSpacePoints(Int_t slice,Int_t patch){return fNcl[slice][patch];}
130     Int_t GetTracksPerSlice(Int_t slice){return fTracksPerSlice[slice];}
131     Bool_t GetDisplaySlice(Int_t slice){ return fSliceArray[slice];}
132
133     Int_t GetSelectCluster(){return fSelectCluster;}
134     Bool_t GetSelectTrackSwitch() {return fSelectTrackSwitch;}
135     Int_t GetSelectTrack() {return fSelectTrack;}
136     Int_t GetSelectTrackSlice() {return fSelectTrackSlice;}
137
138     Int_t GetGlobalTrack(Int_t slice);
139
140     Int_t GetPad(){return fPad;}
141     Int_t GetPadRow(){return fPadRow;}
142     Int_t GetSlicePadRow(){return fSlicePadRow;}
143     Bool_t GetSplitPadRow(){return fSplitPadRow;}
144
145     Int_t GetNPads(){return fNPads;}
146     Int_t GetTimebin(){return fTimebin;}
147     Bool_t GetAllTimebins(){return fAllTimebins;}
148
149     Int_t GetLineColor(){return fLineColor;}
150     Int_t GetBackColor(){return fBackColor;}
151     Bool_t GetKeepView(){return fKeepView;}
152     Float_t GetTheta(){return fTheta;}
153     Float_t GetPhi(){return fPhi;}
154
155     Bool_t Get3DSwitchTracks() {return fSwitch3DTracks;}
156     Bool_t Get3DSwitchCluster() {return fSwitch3DCluster;}
157     Bool_t Get3DSwitchPadRow() {return fSwitch3DPadRow;}
158     Bool_t Get3DSwitchGeometry() {return fSwitch3DGeometry;}
159
160     Int_t GetTrackParamNHits(){ return fTrackParam.nHits;}
161
162 #if 0
163     Char_t GetTrackParamSlice(){ return Char_t GetTrackParamId();
164     Char_t GetTrackParamKappa());
165     Char_t GetTrackParamPt());
166 Char_t GetTrackParamNHits());
167 Char_t GetTrackParamCharge());
168 Char_t GetTrackParamRadius());
169 Char_t GetTrackParamPhi0());
170 Char_t GetTrackParamPsi());
171 Char_t GetTrackParamLambda());
172 Char_t GetTrackParamBfield());
173 #endif
174     // EXISTS
175     Bool_t ExistsRawData() {return fExistsRawData;}   
176     Bool_t ExistsClusterData() {return fExistsClusterData;}   
177     Bool_t ExistsTrackData() {return fExistsTrackData;}   
178
179     // EVENTS
180     void ExecPadEvent(Int_t event, Int_t x, Int_t y, TObject *selected);
181
182     // Callback Handler
183     void * fPt2Gui;
184     void (*fPadCallback)(void*, Int_t);
185
186     struct AliHLTTPCTrackParameter{
187         Int_t nHits;
188         Int_t charge;
189         Double_t kappa;
190         Double_t radius;
191         Int_t slice;
192         Double_t phi0;
193         Double_t psi;
194         Double_t lambda;
195         Double_t pt;
196         Int_t id;
197         Double_t bfield;
198         Double_t s;
199     };
200     
201     AliHLTTPCTrackParameter fTrackParam;
202
203 // ---------------------------------------------------
204  private:
205     AliHLTTPCDisplayMain(const AliHLTTPCDisplayMain &/*d*/):TObject(){;}
206     AliHLTTPCDisplayMain& operator=(const AliHLTTPCDisplayMain &/*d*/){return *this;}
207    
208     void SetSliceArray();
209
210     Bool_t fConnect;               // Connection status
211   
212     Bool_t fExistsRawData;         // Raw data present
213     Bool_t fExistsClusterData;     // Cluster data present
214     Bool_t fExistsTrackData;       // Track data present
215
216     void* fReader;                 // really HOMERReader*
217
218     Int_t fTracksPerSlice[36];     // TrackCount per slice
219
220     AliHLTTPCSpacePointData *fClusters[36][6]; 
221     AliHLTTPCTrackArray *fTracks; 
222     
223     UInt_t fNcl[36][6];            // Number of cluster
224
225     Int_t fMinSlice;               // Min slice
226     Int_t fMaxSlice;               // Max slice
227     Bool_t fSlicePair;             // Pair of slices;
228     Bool_t fSliceArray[36];        // Array if slice should be drawn or not
229
230     Int_t fSelectCluster;          // select all=0, used=1, unused=2 cluster
231
232     // cuts ----
233 //    Int_t fMinHits;                // minimum cluster per track
234 //    Float_t fPtThreshold;          // pt threshold for tracks
235     Int_t fCutHits;
236     Float_t fCutPt;
237     Float_t fCutPsi;
238     Float_t fCutLambda;
239     Float_t fCut_S;
240     Int_t fCutPadrow;
241
242     Int_t fBackColor;              // Background color
243     Int_t fLineColor;              // Line color
244     Bool_t fKeepView;              // Keep View when redisplaying
245
246     Bool_t fSwitch3DCluster;
247     Bool_t fSwitch3DTracks;
248     Bool_t fSwitch3DPadRow;
249     Bool_t fSwitch3DGeometry;
250
251     Int_t fPad;                    // pad
252     Int_t fPadRow;                 // padrow
253     Int_t fSlicePadRow;            // slice where padrow is in
254     Int_t fNPads;                  // number of pads in padrow
255     Int_t fTimebin;
256
257     Bool_t fAllTimebins;
258     Bool_t fSplitPadRow;
259
260     Bool_t fSelectTrackSwitch;     // switch ti single track mode
261     Int_t fSelectTrack;            // select single track
262     Int_t fSelectTrackSlice;       // select slice for single track
263
264     Float_t fTheta;
265     Float_t fPhi;
266
267     AliHLTTPCDisplayCharge* fDisplayCharge; 
268     AliHLTTPCDisplayPadRow* fDisplayPadRow;
269     AliHLTTPCDisplayPad* fDisplayPad;
270     AliHLTTPCDisplay3D* fDisplay3D;
271     AliHLTTPCDisplayResiduals* fDisplayResiduals;
272     AliHLTTPCDisplayFront * fDisplayFront;
273
274     TCanvas * fCanvasCharge;
275     TCanvas * fCanvasPadRow;
276     TCanvas * fCanvasPad;
277     TCanvas * fCanvas3D;
278     TCanvas * fCanvasResiduals;
279     TCanvas * fCanvasFront;
280     TCanvas * fCanvasHits_S;
281     TCanvas * fCanvasQ_Track;
282     TCanvas * fCanvasQ_S;
283
284     ClassDef(AliHLTTPCDisplayMain,0) //Display class
285 };
286 #endif