85e63751cf38da02012cf9e25e3bd1ac2307cf07
[u/mrichter/AliRoot.git] / FMD / AliFMDBaseDA.h
1 // -*- mode: C++ -*- 
2 #ifndef ALIFMDBASEDA_H
3 #define ALIFMDBASEDA_H
4
5 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
6  * reserved. 
7  *
8  * See cxx source for full Copyright notice                               
9  */
10 //
11 // This class provides a base interface for the Detector Algorithms
12 // (DA) of the FMD.  At least three implementations are needed:
13 // AliFMDPedestalDA, AliFMDGainDA and AliFMDPhysicsDA .  These classes
14 // will provide the calibration data for the AliFMDPreprocessor to be
15 // used in the shuttle.  The input for this class are raw data
16 // (AliRawReader) and the output is a comma-separated file
17 // (std::ofstream) that contains the values defined in the
18 // implementations of this class.
19 //
20 // Author: Hans Hjersing Dalsgaard, hans.dalsgaard@cern.ch
21 //
22
23 #include "TNamed.h"
24 #include "TObjArray.h"
25 #include "TClonesArray.h"
26 #include "TFile.h"
27 #include "iostream"
28 #include "fstream"
29 #include "TString.h"
30 #include "AliRawReader.h"
31 #include "AliFMDDigit.h"
32 #include "AliFMDParameters.h"
33 #include "TArrayS.h"
34 class TDirectory;
35 class AliFMDRawReader;
36
37 class AliFMDBaseDA: public TNamed {
38   
39 public:
40   AliFMDBaseDA() ;
41   AliFMDBaseDA(const AliFMDBaseDA & baseDA) ;
42   //  AliFMDBaseDA& operator = (const AliFMDBaseDA & baseDA) ; 
43   
44   ~AliFMDBaseDA() ;
45   
46   void Run(AliRawReader* fmdReader);
47   void SetSaveDiagnostics(Bool_t save) {fSaveHistograms = save;}
48   void SetRequiredEvents(Int_t nEvents) {fRequiredEvents = nEvents;}
49   Int_t GetRequiredEvents() {return fRequiredEvents ;}
50 protected:
51   
52   virtual void Init()  {};
53   virtual void FillChannels(AliFMDDigit* )  {};
54   virtual void Analyse(UShort_t, Char_t, UShort_t, UShort_t )  {};
55   virtual void WriteHeaderToFile()  {};
56   virtual void AddChannelContainer(TObjArray*, UShort_t, Char_t, UShort_t, UShort_t )  {};
57   virtual void FinishEvent()  {};
58   virtual void Terminate(TFile* ) {};
59   
60   Int_t GetCurrentEvent() {return fCurrentEvent;}
61   
62   static const UInt_t kBaseDDL = 3072;
63   //Char_t* fDiagnosticsFilename;
64   TString fDiagnosticsFilename;
65   std::ofstream fOutputFile;
66   std::ofstream fConditionsFile;
67   Bool_t fSaveHistograms;
68   TObjArray fDetectorArray;
69
70   Int_t GetHalfringIndex(UShort_t, Char_t, UShort_t);
71   Int_t GetPulseSize(UShort_t det , 
72                      Char_t ring, 
73                      UShort_t board) {return fPulseSize.At(GetHalfringIndex(det,ring,board));}
74   Int_t GetPulseLength(UShort_t det, 
75                        Char_t ring, 
76                        UShort_t board) {return fPulseLength.At(GetHalfringIndex(det,ring,board));}
77
78   
79   const char* GetDetectorPath(UShort_t det, Bool_t full=kTRUE) const;
80   const char* GetRingPath(UShort_t det, Char_t ring, Bool_t full=kTRUE) const;
81   const char* GetSectorPath(UShort_t det, Char_t ring, UShort_t sec, 
82                             Bool_t full=kTRUE) const;
83   const char* GetStripPath(UShort_t det, Char_t ring, UShort_t sec, 
84                            UShort_t str, Bool_t full=kTRUE) const;
85   
86
87   
88   TArrayS fPulseSize;
89   TArrayS fPulseLength;
90
91   Bool_t  fSeenDetectors[3];
92 private:
93  
94   void WriteConditionsData(AliFMDRawReader* fmdReader);
95   void SetCurrentEvent(Int_t currentEvent) {fCurrentEvent = currentEvent; }
96   void InitContainer(TDirectory* dir);
97   Int_t fRequiredEvents;
98   Int_t fCurrentEvent;   
99   
100   
101   
102   ClassDef(AliFMDBaseDA,0)
103
104 };
105 #endif
106