1 #ifndef ALIFMDRAWREADER_H
2 #define ALIFMDRAWREADER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
6 * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
8 * See cxx source for full Copyright notice
10 //____________________________________________________________________
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
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
26 #include "AliFMDUShortMap.h"
28 //____________________________________________________________________
33 class AliFMDCalibSampleRate;
34 class AliFMDCalibStripRange;
36 //____________________________________________________________________
37 /** @brief Class to read ALTRO formated raw data from an AliRawReader
40 AliRawReader* reader = new AliRawReaderFile(0);
41 AliFMDRawReader* fmdReader = new AliFMDRawReader(reader);
42 TClonesArray* array = new TClonesArray("AliFMDDigit");
43 fmdReader->ReadAdcs(array);
47 class AliFMDRawReader : public TTask
53 * @param reader Raw reader
54 * @param array Output tree
56 AliFMDRawReader(AliRawReader* reader, TTree* array);
60 virtual ~AliFMDRawReader() {}
62 * Read in, and store in output tree
64 * @param option Not used
66 virtual void Exec(Option_t* option="");
68 * Read ADC's into a TClonesArray of AliFMDDigit objects.
70 * @param array Array to read into
71 * @param summable Create SDigits rather than digits
72 * @param pedSub Whether to do pedestal subtraction.
73 * @param noiseFactor If we do pedestal subtraction, then this is
74 * the number we use to suppress remenants of the noise.
76 * @return @c true on success
78 virtual Bool_t ReadAdcs(TClonesArray* array);
80 * Read SOD event into passed objects.
82 * @param samplerate The sample rate object to fill
83 * @param striprange The strip range object to fill
84 * @param pulseSize The pulse size object to fill
85 * @param pulseLength The pulse length (in events) object to fill
87 * @return @c true on success
89 virtual Bool_t ReadSODevent(AliFMDCalibSampleRate* samplerate,
90 AliFMDCalibStripRange* striprange,
92 TArrayS &pulseLength);
94 * Check of the data from DDL @a ddl is zero-suppressed
96 * @param ddl DDL number (0-2)
98 * @return @c true if the data from this DDL is zero-suppressed.
100 Bool_t IsZeroSuppressed(UShort_t ddl) const { return fZeroSuppress[ddl]; }
102 * The factor used to multiply the noise when making on-line
103 * pedestal subtraction.
105 * @param ddl DDL number (0-2)
107 * @return The factor used.
109 UShort_t NoiseFactor(UShort_t ddl) const { return fNoiseFactor[ddl]; }
112 * Get the next signal
114 * @param det On return, the detector
115 * @param rng On return, the ring
116 * @param sec On return, the sector
117 * @param str On return, the strip
118 * @param sam On return, the sample
119 * @param rat On return, the sample rate
120 * @param adc On return, the ADC value
121 * @param zs On return, whether zero-supp. is enabled
122 * @param fac On return, the usd noise factor
124 * @return true if valid data is returned
126 Bool_t NextSample(UShort_t& det, Char_t& rng, UShort_t& sec, UShort_t& str,
127 UShort_t& sam, UShort_t& rat, Short_t& adc,
128 Bool_t& zs, UShort_t& fac);
130 * Get the next signal
132 * @param det On return, the detector
133 * @param rng On return, the ring
134 * @param sec On return, the sector
135 * @param str On return, the strip
136 * @param adc On return, the ADC value
137 * @param zs On return, whether zero-supp. is enabled
138 * @param fac On return, the usd noise factor
140 * @return true if valid data is returned
142 Bool_t NextSignal(UShort_t& det, Char_t& rng,
143 UShort_t& sec, UShort_t& str,
144 Short_t& adc, Bool_t& zs,
147 * Whether to keep a sample based on the rate used.
149 * @param samp Sample number
150 * @param rate Over sampling rate
152 * @return Whether to keep the sample or not
154 static Bool_t SelectSample(UShort_t samp, UShort_t rate);
156 AliFMDRawReader(const AliFMDRawReader& o)
164 AliFMDRawReader& operator=(const AliFMDRawReader&) { return *this; }
165 ULong_t GetNwords() const {return fNbytes / 4;}
166 UInt_t Get32bitWord(Int_t idx);
167 Int_t GetHalfringIndex(UShort_t det, Char_t ring, UShort_t board);
168 TTree* fTree; //! Pointer to tree to read into
169 AliRawReader* fReader; //! Pointer to raw reader
170 UShort_t fSampleRate[3]; // The sample rate (if 0, inferred from data)
173 Bool_t fZeroSuppress[3];
174 UShort_t fNoiseFactor[3];
175 AliFMDUShortMap fSeen;
177 ClassDef(AliFMDRawReader, 0) // Read FMD raw data into a cache
181 //____________________________________________________________________