]> git.uio.no Git - u/mrichter/AliRoot.git/blob - FMD/AliFMDRawReader.h
Added calculation of a strip in a FMD ring
[u/mrichter/AliRoot.git] / FMD / AliFMDRawReader.h
1 #ifndef ALIFMDRAWREADER_H
2 #define ALIFMDRAWREADER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
4  * reserved. 
5  *
6  * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
7  *
8  * See cxx source for full Copyright notice                               
9  */
10 //____________________________________________________________________
11 // 
12 // Class to read ADC values from a AliRawReader object. 
13 // Note, that it uses an ALTRO reader, which is wrong. 
14 // Perhaps we need to implement it our selves
15 // 
16 /* $Id$ */
17 /** @file    AliFMDRawReader.h
18     @author  Christian Holm Christensen <cholm@nbi.dk>
19     @date    Mon Mar 27 12:45:23 2006
20     @brief   Class to read raw data 
21     @ingroup FMD_rec
22 */
23 #ifndef ROOT_TTask
24 # include <TTask.h>
25 #endif
26 #include "AliFMDUShortMap.h"
27
28 //____________________________________________________________________
29 class AliRawReader;
30 class TTree;
31 class TClonesArray;
32 class TArrayS;
33 class AliFMDCalibSampleRate;
34 class AliFMDCalibStripRange;
35
36 //____________________________________________________________________
37 /** @brief Class to read ALTRO formated raw data from an AliRawReader
38     object. 
39     @code 
40     AliRawReader*    reader    = new AliRawReaderFile(0);
41     AliFMDRawReader* fmdReader = new AliFMDRawReader(reader);
42     TClonesArray*    array     = new TClonesArray("AliFMDDigit");
43     fmdReader->ReadAdcs(array);
44     @endcode 
45     @ingroup FMD_rec
46 */
47 class AliFMDRawReader : public TTask 
48 {
49 public:
50   /** CTOR 
51       @param reader Raw reader
52       @param array  Output tree */
53   AliFMDRawReader(AliRawReader* reader, TTree* array);
54   /** DTOR */
55   virtual ~AliFMDRawReader() {}
56   /** Read in, and store in output tree 
57       @param option Not used */
58   virtual void   Exec(Option_t* option="");
59   /** Read ADC's into a TClonesArray of AliFMDDigit objects. 
60       @param array Array to read into 
61       @return @c true on success */
62   virtual Bool_t ReadAdcs(TClonesArray* array);
63   /** 
64    * Read SOD event into passed objects.
65    * 
66    * @param samplerate   The sample rate object to fill
67    * @param striprange   The strip range object to fill
68    * @param pulseSize    The pulse size object to fill
69    * @param pulseLength  The pulse length (in events) object to fill
70    * 
71    * @return @c true on success
72    */  
73   virtual Bool_t ReadSODevent(AliFMDCalibSampleRate* samplerate, 
74                               AliFMDCalibStripRange* striprange, 
75                               TArrayS &pulseSize, 
76                               TArrayS &pulseLength);
77   /** 
78    * Check of the data from DDL @a ddl is zero-suppressed
79    * 
80    * @param ddl DDL number (0-2)
81    * 
82    * @return @c true if the data from this DDL is zero-suppressed. 
83    */  
84   Bool_t IsZeroSuppressed(UShort_t ddl) const { return fZeroSuppress[ddl]; }
85   /** 
86    * The factor used to multiply the noise when making on-line
87    * pedestal subtraction.
88    * 
89    * @param ddl DDL number (0-2)
90    * 
91    * @return The factor used. 
92    */
93   UShort_t NoiseFactor(UShort_t ddl) const { return fNoiseFactor[ddl]; }
94
95   Bool_t NextSignal(UShort_t& det, Char_t&   rng, 
96                     UShort_t& sec, UShort_t& str, 
97                     Short_t&  adc, Bool_t&   zs, 
98                     UShort_t& fac);
99 protected:
100   AliFMDRawReader(const AliFMDRawReader& o) 
101     : TTask(o), 
102       fTree(0), 
103       fReader(0), 
104       fSampleRate(0),
105       fData(0),
106       fNbytes(0), 
107       fSeen()
108   {}
109   AliFMDRawReader& operator=(const AliFMDRawReader&) { return *this; }
110   ULong_t GetNwords() const {return fNbytes / 4;}
111   UInt_t Get32bitWord(Int_t idx);
112   Int_t GetHalfringIndex(UShort_t det, Char_t ring, UShort_t board);
113   TTree*          fTree;       //! Pointer to tree to read into 
114   AliRawReader*   fReader;     //! Pointer to raw reader 
115   UShort_t        fSampleRate; // The sample rate (if 0, inferred from data)
116   UChar_t*        fData; 
117   ULong_t         fNbytes; 
118   Bool_t          fZeroSuppress[3];
119   UShort_t        fNoiseFactor[3];
120   AliFMDUShortMap fSeen;
121   
122   ClassDef(AliFMDRawReader, 0) // Read FMD raw data into a cache 
123 };
124
125 #endif
126 //____________________________________________________________________
127 //
128 // Local Variables:
129 //   mode: C++
130 // End:
131 //
132 // EOF
133 //