Export some headers for AMORE
[u/mrichter/AliRoot.git] / FMD / AliFMDSpectraDisplay.h
1 #ifndef AliFMDSPECTRADISPLAY_H
2 #define AliFMDSPECTRADISPLAY_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
4  * reserved. 
5  *
6  * See cxx source for full Copyright notice                               
7  */
8 /** @file    AliFMDDisplay.h
9     @author  Christian Holm Christensen <cholm@nbi.dk>
10     @date    Mon Mar 27 12:39:09 2006
11     @brief   FMD Event display 
12 */
13 //___________________________________________________________________
14 //
15 // The classes defined here, are utility classes for reading in data
16 // for the FMD.  They are  put in a seperate library to not polute the
17 // normal libraries.  The classes are intended to be used as base
18 // classes for customized class that do some sort of analysis on the
19 // various types of data produced by the FMD. 
20 //
21 #include "AliFMDPattern.h"
22 #include <TGFrame.h>
23 #include <TGListTree.h>
24 #include <TObjArray.h>
25 #include <TQObject.h>
26 #include <RQ_OBJECT.h>
27
28 class TGPicture;
29 class TH1;
30 class TAxis;
31
32 //____________________________________________________________________
33 /**
34  * FMD event and spectra display
35  * 
36  */
37 class AliFMDSpectraDisplay : public AliFMDPattern
38 {
39 public:
40   class AliFMDSpectraDisplayTop;
41   class AliFMDSpectraDisplayDetector;
42   class AliFMDSpectraDisplayRing;
43   class AliFMDSpectraDisplaySector;
44   class AliFMDSpectraDisplayStrip;
45
46   //__________________________________________________________________
47   /**
48    * Base class for elements in the tree.
49    * 
50    */
51   class AliFMDSpectraDisplayElement : public TNamed 
52   {
53   public:
54     /** 
55      * Destructor.
56      * 
57      * 
58      */  
59     virtual ~AliFMDSpectraDisplayElement() {}
60     /** 
61      * Draw it
62      * 
63      * @param option Draw option
64      * @param l      Low cut 
65      * @param h      High cut
66      */
67     virtual void Show(Option_t* option, Double_t l, Double_t h);
68     /** 
69      * Get the top of the tree
70      * 
71      * @return Top element
72      */
73     virtual AliFMDSpectraDisplayTop& GetTop() = 0;
74     /** 
75      * Make histograms for this element.
76      * 
77      * @param axis Axis specs
78      */
79     virtual void MakeHistograms(const TAxis* axis);
80     /** 
81      * Compare to object
82      * 
83      * @param o 
84      * 
85      * @return 
86      */  
87     virtual Int_t Compare(const TObject* o) const;
88   protected:
89     /** 
90      * Constructor
91      * 
92      * @param name  Name 
93      * @param title Title
94      */  
95     AliFMDSpectraDisplayElement(const char* name, const char* title) 
96       : TNamed(name, title), fFull(0), fCut(0)
97     {}
98     AliFMDSpectraDisplayElement(const AliFMDSpectraDisplayElement& o) 
99       : TNamed(o), 
100         fFull(o.fFull), 
101         fCut(o.fCut) 
102     {}
103     AliFMDSpectraDisplayElement&
104     operator=(const AliFMDSpectraDisplayElement&) { return *this; }
105     /** 
106      * Fill histogram
107      * 
108      * @param v Value to fill
109      */
110     void DoFill(Double_t v);
111     TH1* fFull; // Full spectra
112     TH1* fCut;  // Spectra after cut
113     ClassDef(AliFMDSpectraDisplayElement,0); // Element in FMD spectra display
114   };
115
116   //__________________________________________________________________
117   /**
118    * Top element in FMD spectra display
119    * 
120    */
121   class AliFMDSpectraDisplayTop : public AliFMDSpectraDisplayElement, 
122                                   public TQObject
123   {
124   public:
125     /** 
126      * Constructor
127      * 
128      * @param frame   Parent frame
129      * @param canvas  Canvas
130      */
131     AliFMDSpectraDisplayTop(TGCompositeFrame& frame, TCanvas* canvas);
132     /** 
133      * Get the list tree
134      * 
135      * @return List tree
136      */
137     TGListTree& GetList() { return fList; }
138     /** 
139      * Get or add a detector element
140      * 
141      * @param id Element id
142      * 
143      * @return element
144      */
145     AliFMDSpectraDisplayDetector& GetOrAdd(UShort_t id);
146     /** 
147      * Fill histograms
148      * 
149      * @param d    Detector
150      * @param ring Ring 
151      * @param sec  Sector
152      * @param str  Strip
153      * @param v    value
154      */
155     void      Fill(UShort_t d, Char_t ring, 
156                    UShort_t sec, UShort_t str, Double_t v);
157     /** 
158      * Get the axis spec.
159      *
160      * @return Axis spec,
161      */
162     TAxis* GetAxis() const { return fAxis; }
163     /** 
164      * Set the axis spec.
165      * 
166      * @param a Axis spec.
167      */
168     void SetAxis(TAxis* a);
169     /** 
170      * Get the top.
171      * 
172      * @return top element
173      */
174     AliFMDSpectraDisplayTop&   GetTop() { return *this; }
175        
176     /** 
177      * Handle entries 
178      *
179      * @param e  selected entry, if any 
180      * @param id Id of entry 
181      */
182     virtual void HandleEntry(TGListTreeItem* e, Int_t id);
183     /** 
184      * Handle key strokes 
185      * @param f      Item selected, if any 
186      * @param keysym Key symbol 
187      * @param mask   Modifier mask 
188      */
189     virtual void HandleKey(TGListTreeItem* f, UInt_t keysym, UInt_t mask);
190     /**
191      * Handle Return 
192      * @param f Selected item, if any 
193      */
194     virtual void HandleReturn(TGListTreeItem* f);
195     /** 
196      * Clear the list 
197      */
198     virtual void ClearList();
199     /** 
200      * Clear the canvas 
201      */ 
202     virtual void ClearCanvas();
203     /** 
204      * Update canvas 
205      */ 
206     virtual void UpdateCanvas();
207     /** 
208      * Update canvas 
209      */ 
210     virtual void UpdateList();
211     /** 
212      * Return the currently selected entry 
213      */ 
214     TGListTreeItem* CurrentEntry() const { return fCurrentEntry; }
215     /** 
216      * @return the currently selected user data (possibly 0) 
217      */
218     TObject* Current() const;
219     /** 
220      * Selection changed signal 
221      */
222     void SelectionChanged() { Emit("SelectionChanged()"); }//*SIGNAL*
223     /** 
224      * Get Picture for 1D histogram 
225      */
226     const TGPicture* GetH1Pic() const { return fkHist1DIcon; }
227     /** 
228      * 2D Histogram Icon 
229      */
230     const TGPicture* GetH2Pic() const { return fkHist2DIcon; }
231     /** 
232      * 3D Histogram Icon 
233      */
234     const TGPicture* GetH3Pic() const { return fkHist3DIcon; }
235     /** 
236      * Graph Icon 
237      */
238     const TGPicture* GetGPic() const { return fkGraphIcon; }
239     /** 
240      * Get the entry 
241      *
242      * @return 
243      */
244     TGListTreeItem&  GetEntry() const { return fEntry; }
245     /** 
246      * Compare to object
247      * 
248      * @param o 
249      * 
250      * @return 
251      */  
252     virtual Int_t Compare(const TObject* o) const;
253   protected:
254     AliFMDSpectraDisplayTop(const AliFMDSpectraDisplayTop& o) 
255       : AliFMDSpectraDisplayElement(o), 
256         TQObject(),
257         fHints(o.fHints),
258         fContainer(), // o.fContainer), 
259         fList(), // o.fList), 
260         fChildren(o.fChildren), 
261         fCurrentEntry(o.fCurrentEntry),
262         fCanvas(o.fCanvas),
263         fkHist1DIcon(o.fkHist1DIcon),
264         fkHist2DIcon(o.fkHist2DIcon),
265         fkHist3DIcon(o.fkHist3DIcon),
266         fkGraphIcon(o.fkGraphIcon),
267         fAxis(o.fAxis),
268         fEntry(o.fEntry)
269     {}
270   
271     AliFMDSpectraDisplayTop& operator=(const AliFMDSpectraDisplayTop&) 
272     {
273       return *this;
274     }
275     TGLayoutHints fHints;                // Layout hints
276     TGCanvas      fContainer;            // Container
277     TGListTree    fList;                 // List
278     TObjArray     fChildren;             // Children
279     TGListTreeItem* fCurrentEntry;       // Current entry
280     TCanvas*        fCanvas;             // Canvas
281     const TGPicture*    fkHist1DIcon;    // 1D Histogram Icon
282     const TGPicture*    fkHist2DIcon;    // 2D Histogram Icon
283     const TGPicture*    fkHist3DIcon;    // 3D Histogram Icon
284     const TGPicture*    fkGraphIcon;     // Graph Icon 
285     TAxis* fAxis;                        // The axis to use 
286     TGListTreeItem& fEntry;              // Entry
287
288     ClassDef(AliFMDSpectraDisplayTop,0);
289   };
290
291   //__________________________________________________________________
292   /**
293    * Detector element in FMD spectra display
294    * 
295    */
296   class AliFMDSpectraDisplayDetector : public AliFMDSpectraDisplayElement 
297   {
298   public:
299     /** 
300      * Constructor
301      * 
302      * @param det 
303      * @param top 
304      */
305     AliFMDSpectraDisplayDetector(UShort_t det, AliFMDSpectraDisplayTop& top);
306     /** 
307      * Get identifier
308      * 
309      * @return 
310      */
311     UShort_t Id() const { return fId; }
312     /** 
313      * Get top of hierarcy
314      * 
315      * @return 
316      */
317     AliFMDSpectraDisplayTop&     GetTop() { return fParent; }
318     /** 
319      * Get parent
320      * 
321      * @return 
322      */
323     AliFMDSpectraDisplayTop&     GetParent() const { return fParent; }
324     /** 
325      * Get or add a ring element
326      * 
327      * @param id 
328      * 
329      * @return 
330      */
331     AliFMDSpectraDisplayRing&    GetOrAdd(Char_t id);
332     /** 
333      * Fill histograms
334      * 
335      * @param ring 
336      * @param sec 
337      * @param str 
338      * @param v 
339      */
340     void     Fill(Char_t ring, UShort_t sec, UShort_t str, Double_t v);
341     /** 
342      * Get the entry
343      * 
344      * 
345      * @return 
346      */
347     TGListTreeItem&  GetEntry() const { return fEntry; }
348     /** 
349      * Compare to object
350      * 
351      * @param o 
352      * 
353      * @return 
354      */  
355     virtual Int_t Compare(const TObject* o) const;
356   protected:
357     UShort_t                            fId; // Identifier
358     AliFMDSpectraDisplayTop&            fParent; // Parent
359     TObjArray                           fChildren; // Children
360     TGListTreeItem&                     fEntry; // The entry
361     ClassDef(AliFMDSpectraDisplayDetector,0); // Detector element in FMD spectra
362   };
363
364   //__________________________________________________________________
365   /**
366    * Ring element in FMD spectra display
367    * 
368    */
369   class AliFMDSpectraDisplayRing : public AliFMDSpectraDisplayElement 
370   {
371   public:
372     /** 
373      * Constructor
374      * 
375      * @param id 
376      * @param d 
377      */
378     AliFMDSpectraDisplayRing(Char_t id, AliFMDSpectraDisplayDetector& d);
379     /** 
380      * Get identifier
381      * 
382      * @return 
383      */
384     Char_t    Id() const { return fId; }
385     /** 
386      * Get detector identifier
387      * 
388      * @return 
389      */
390     UShort_t  DetectorId() const { return fParent.Id(); }
391     /** 
392      * Get top of hierarcy
393      * 
394      * @return 
395      */  
396     AliFMDSpectraDisplayTop&      GetTop() { return fParent.GetTop(); }
397     /** 
398      * Get parent detector
399      * 
400      * @return 
401      */
402     AliFMDSpectraDisplayDetector& GetDetector() const { return GetParent(); }
403     /** 
404      * Get parent detector
405      * 
406      * @return 
407      */
408     AliFMDSpectraDisplayDetector& GetParent() const { return fParent; }
409     /** 
410      * Get or add a sector element
411      * 
412      * @param id 
413      * 
414      * @return 
415      */
416     AliFMDSpectraDisplaySector&   GetOrAdd(UShort_t id);
417     /** 
418      * Fill histograms
419      * 
420      * @param sec 
421      * @param str 
422      * @param v 
423      */
424     void      Fill(UShort_t sec, UShort_t str, Double_t v);
425     /** 
426      * Get the entry
427      * 
428      * @return 
429      */
430     TGListTreeItem&  GetEntry() const { return fEntry; }
431     /** 
432      * Compare to object
433      * 
434      * @param o 
435      * 
436      * @return 
437      */  
438     virtual Int_t Compare(const TObject* o) const;
439   protected:
440     AliFMDSpectraDisplayDetector&       fParent; // Parent
441     Char_t                              fId;        // Identifier
442     TObjArray                           fChildren;  // Children
443     TGListTreeItem&                     fEntry;     // Entry
444     ClassDef(AliFMDSpectraDisplayRing,0); // Ring element in FMD spectra
445   };
446   
447   //__________________________________________________________________
448   /**
449    * Sector element in FMD spectra display
450    * 
451    */
452   class AliFMDSpectraDisplaySector : public AliFMDSpectraDisplayElement 
453   {
454   public:
455     /** 
456      * Constructor
457      * 
458      * @param id 
459      * @param r 
460      */
461     AliFMDSpectraDisplaySector(UShort_t id, AliFMDSpectraDisplayRing& r);
462     /** 
463      * Get identifier
464      * 
465      * @return 
466      */
467     UShort_t  Id() const    { return fId; }
468     /** 
469      * Get detector identifier
470      * 
471      * @return 
472      */
473     UShort_t  DetectorId()  const { return fParent.DetectorId(); }
474     /** 
475      * Get ring identifier
476      * 
477      * @return 
478      */
479     Char_t    RingId()      const { return fParent.Id(); }
480     /** 
481      * Get top of hierarcy
482      * 
483      * @return 
484      */
485     AliFMDSpectraDisplayTop&      GetTop()    { return fParent.GetTop(); }
486     /** 
487      * Get parent detector
488      * 
489      * @return 
490      */
491     AliFMDSpectraDisplayDetector& GetDetector() { return fParent.GetDetector(); }
492     /** 
493      * Get parent ring.
494      * 
495      * @return 
496      */
497     AliFMDSpectraDisplayRing&     GetRing()     { return fParent; }
498     /** 
499      * Get parent ring.
500      * 
501      * @return 
502      */
503     AliFMDSpectraDisplayRing&     GetParent()   { return fParent; }
504     /** 
505      * Get or add a strip element
506      * 
507      * @param id 
508      * 
509      * @return 
510      */
511     AliFMDSpectraDisplayStrip&    GetOrAdd(UShort_t id);
512     /** 
513      * Fill histograms
514      * 
515      * @param str 
516      * @param v 
517      */  
518     void      Fill(UShort_t str, Double_t v);
519     /** 
520      * Get the entry
521      * 
522      * @return 
523      */  
524     TGListTreeItem&  GetEntry() const { return fEntry; }
525     /** 
526      * Compare to object
527      * 
528      * @param o 
529      * 
530      * @return 
531      */  
532     virtual Int_t Compare(const TObject* o) const;
533   protected:
534     AliFMDSpectraDisplayRing&           fParent;  // PArent
535     UShort_t                            fId;      // Identifier
536     TObjArray                           fChildren;// Children
537     TGListTreeItem&                     fEntry;   // Entry
538     ClassDef(AliFMDSpectraDisplaySector,0); // Sector element in FMD spectra
539   };
540
541   //__________________________________________________________________
542   /**
543    * Strip element in FMD spectra display
544    * 
545    */
546   class AliFMDSpectraDisplayStrip : public AliFMDSpectraDisplayElement 
547   {
548   public:
549     /** 
550      * Constructor
551      * 
552      * @param id 
553      * @param s 
554      */
555     AliFMDSpectraDisplayStrip(UShort_t id, AliFMDSpectraDisplaySector& s);
556     /** 
557      * Get identifier
558      * 
559      * @return 
560      */
561     UShort_t  Id() const    { return fId; }
562     /** 
563      * Get detector identifier
564      * 
565      * @return 
566      */
567     UShort_t  DetectorId()  const { return fParent.DetectorId(); }
568     /** 
569      * Get ring identifier
570      * 
571      * @return 
572      */
573     Char_t    RingId()  const    { return fParent.RingId(); }
574     /** 
575      * Get sector identifier
576      * 
577      * @return 
578      */
579     UShort_t  SectorId()  const  { return fParent.Id(); }
580     /** 
581      * Get top of hierarcy
582      * 
583      * @return 
584      */
585     AliFMDSpectraDisplayTop&      GetTop()    { return fParent.GetTop(); }
586     /** 
587      * Get parent detector
588      * 
589      * @return 
590      */
591     AliFMDSpectraDisplayDetector& GetDetector()  { return fParent.GetDetector(); }
592     /** 
593      * Get parent ring
594      * 
595      * @return 
596      */
597     AliFMDSpectraDisplayRing&     GetRing()    { return fParent.GetRing(); }
598     /** 
599      * Get parent sector
600      * 
601      * @return 
602      */
603     AliFMDSpectraDisplaySector&   GetSector()  { return fParent; }
604     /** 
605      * Get parent sector
606      * 
607      * @return 
608      */
609     AliFMDSpectraDisplaySector&   GetParent() { return fParent; }
610     /** 
611      * Fill histograms
612      * 
613      * @param v 
614      */  
615     void      Fill(Double_t v);
616     /** 
617      * Get entry
618      * 
619      * @return 
620      */
621     TGListTreeItem&  GetEntry() const { return fEntry; }
622     /** 
623      * Compare to object
624      * 
625      * @param o 
626      * 
627      * @return 
628      */  
629     virtual Int_t Compare(const TObject* o) const;
630   protected:
631     AliFMDSpectraDisplaySector&         fParent; // Parent
632     UShort_t                            fId;     // Identifier 
633     TGListTreeItem&                     fEntry;  // Entry
634     ClassDef(AliFMDSpectraDisplayStrip,0);
635   };
636
637   /** 
638    * Constructor
639    * 
640    */
641   AliFMDSpectraDisplay();
642   /** 
643    * Handle draw
644    * 
645    * @return 
646    */
647   Bool_t HandleDraw(); 
648   /** 
649    * Make AUX canvas
650    * 
651    */
652   void MakeAux();
653   /** 
654    * Draw spectra
655    * 
656    */
657   void DrawAux();
658   /** 
659    * Process a hit
660    * 
661    * @param hit 
662    * @param p 
663    * 
664    * @return 
665    */
666   Bool_t ProcessHit(AliFMDHit* hit, TParticle* p);
667   /** 
668    * Process a digit
669    * 
670    * @param digit 
671    * 
672    * @return 
673    */
674   Bool_t ProcessDigit(AliFMDDigit* digit);
675   /** 
676    * Process a summable digit
677    * 
678    * @param sdigit 
679    * 
680    * @return 
681    */
682   Bool_t ProcessSDigit(AliFMDSDigit* sdigit);
683   /** 
684    * Process a raw digit
685    * 
686    * @param digit 
687    * 
688    * @return 
689    */
690   Bool_t ProcessRawDigit(AliFMDDigit* digit);
691   /** 
692    * Process a reconstruction point
693    * 
694    * @param recpoint 
695    * 
696    * @return 
697    */  
698   Bool_t ProcessRecPoint(AliFMDRecPoint* recpoint);
699   /** 
700    * Process and ESD entry
701    * 
702    * @param det 
703    * @param rng 
704    * @param sec 
705    * @param str 
706    * @param x 
707    * @param mult 
708    * 
709    * @return 
710    */
711   Bool_t ProcessESD(UShort_t det, Char_t rng, UShort_t sec, UShort_t str,
712                     Float_t x, Float_t mult);
713 protected:
714   TGMainFrame  fSelector; // GUI to select spectra
715   AliFMDSpectraDisplayTop fTop;     // Top of hierarcy
716   ClassDef(AliFMDSpectraDisplay,0); // FMD event and spectra display
717 }
718   ;
719
720 #endif
721 //____________________________________________________________________
722 //
723 // Local Variables:
724 //   mode: C++
725 // End:
726 //
727 // EOF
728 //
729