During simulation: fill STU region w/ non null time sums
[u/mrichter/AliRoot.git] / TPC / AliTPCAltroEmulator.h
CommitLineData
eb7e0771 1#ifndef ALI_TPC_ALTRO_EMULATOR_H
2#define ALI_TPC_ALTRO_EMULATOR_H
3
4
5/** @file AliTPCAltroEmulator.h
6 * @brief This the header File for the Altro class
7 *
8 * @author Roland Bramm
9 * @version $LastChangedRevision: 688 $
10 * @date $LastChangedDate: 2005-12-16 14:07:11 +0100 (Fri, 16 Dec 2005) $
11 *
12 * \verbinclude Altro/Altro.h.log
13*/
14
15
16///////////////////////////////////////////////////////////////////////////////
17// Class AliTPCAltroEmulator //
18// Class for emulation of the ALTRO chip (Altro digital Chain) in C++ //
19///////////////////////////////////////////////////////////////////////////////
20
b479e253 21#include "TSystem.h"
22
23
eb7e0771 24#include <iostream>
25#include <stdlib.h>
26#include <stdio.h>
27#include <string.h>
338e0dd9 28#include <AliRawReader.h>
29#include <AliTPCRawStreamV3.h>
30
eb7e0771 31
32using namespace std;
33
b479e253 34class AliTPCAltroEmulator : public TNamed {
35
338e0dd9 36 public:
37 AliTPCAltroEmulator(Int_t timebins=0, Short_t* Channel=0);
b3b5d5c9 38
338e0dd9 39 ~AliTPCAltroEmulator();
338e0dd9 40
41 void ConfigAltro(Int_t ONBaselineCorrection1, Int_t ONTailcancellation, Int_t ONBaselineCorrection2, Int_t ONClipping, Int_t ONZerosuppression, Int_t ONDataFormatting);
42 void ConfigBaselineCorrection1(Int_t mode, Int_t ValuePeDestal, Int_t *PedestalMem, Int_t polarity);
43 void ConfigTailCancellationFilter(Int_t K1, Int_t K2, Int_t K3, Int_t L1, Int_t L2, Int_t L3);
b3b5d5c9 44 void ConfigTailCancellationFilterForRAWfiles(const Int_t* K1, const Int_t* K2, const Int_t* K3,
45 const Int_t* L1, const Int_t* L2, const Int_t* L3);
338e0dd9 46 void ConfigBaselineCorrection2(Int_t HighThreshold, Int_t LowThreshold, Int_t Offset, Int_t Presamples, Int_t Postsamples);
47 void ConfigZerosuppression(Int_t Threshold, Int_t MinSamplesaboveThreshold, Int_t Presamples, Int_t Postsamples);
48
49 void SetChannelData(Int_t timebins, Short_t* Channel);
50 void PrintParameters();
cd10c6cd 51 void RunEmulation(Int_t roc=-1); // if -1, the standard "single" TCF is used
338e0dd9 52 Float_t CalculateCompression();
53
54 // perform altro emulation on raw-reader level
55
56 void RunEmulationOnRAWdata(AliRawReader *reader, Int_t plotFlag=0);
57
58 TString GetDDLFolderName() const {return fDDLFolderName ;}
59 TString GetOutputDateFileName() const {return fOutputDateFileName;}
60 TString GetOutputRootFileName() const {return fOutputRootFileName;}
61 void SetDDLFolderName (const TString &name) {fDDLFolderName =name;}
62 void SetOutputDateFileName(const TString &name) {fOutputDateFileName=name;}
63 void SetOutputRootFileName(const TString &name) {fOutputRootFileName=name;}
64
65
66
67
68 enum {
69 /**din - fpd*/ kDINxFPD,
70 /**din - f(t)*/ kDINxFT,
71 /**din - f(din)*/ kDINxFDIN,
72 /**din - f(din-vpd)*/ kDINxFDINxVPD,
73 /**din - vpd - fpd*/ kDINxVPDxFPD,
74 /**din - vpd - f(t)*/ kDINxVPDxFT,
75 /**din - vpd - f(din)*/ kDINxVPDxFDIN,
76 /**din - vpd - f(din - vpd)*/ kDINxVPDxFDINxVPD,
77 /**f(din) - fpd*/ kFDINxFPD,
78 /**f(din - vpd) - fpd*/ kFDINxVPDxFPD,
79 /**f(t) - fpd*/ kFTxFPD,
80 /**f(t) - f(t)*/ kFTxFT,
81 /**f(din) - f(din)*/ kFDINxFDIN,
82 /**f(din - vpd) - f(din - vpd)*/ kFDINxVPDxFDINxVPD,
83 /**din - fpd*/ kDINxFPD1,
b3b5d5c9 84 /**din - fpd*/ kDINxFPD2,
85 /** 16. din-mean*/ kDINxMPD
338e0dd9 86 };
87
88 private:
89
b3b5d5c9 90 AliTPCAltroEmulator(const AliTPCAltroEmulator &sig);
91 AliTPCAltroEmulator& operator = (const AliTPCAltroEmulator &source);
92
338e0dd9 93 Int_t ftimebins; // timebins
94
95 // Short_t *fChannelIn; // ChannelIn
96 Short_t *fChannelShort; // incoming signal in Short_t format
97 Short_t *fADCkeep; // ADCkeep
98
99 Int_t fOnBSL1; // Baseline correction and substraction 1 on
100 Int_t fOnTCF; // Tail Cancelation Filter on
101 Int_t fOnBSL2; // Baseline correction and substraction 2 (MAF) on
102 Int_t fOnClip; // Clipping on (to reverse the signal for ZSU if BSL2 is on)
103 Int_t fOnZSU; // Zero Suppression on
104
105 Int_t fConfiguredAltro; // ConfiguredAltro
106 Int_t fConfiguredBSL1; // ConfiguredBSL1
107 Int_t fConfiguredTCF; // ConfiguredTCF
cd10c6cd 108 Int_t fConfiguredTCFraw; // ConfiguredTCF for RAW data files
338e0dd9 109 Int_t fConfiguredBSL2; // ConfiguredBSL2
110 Int_t fConfiguredZSU; // ConfiguredZSU
111
112 Int_t fBSL1mode; // BSL1mode
113 Int_t fBSL1ValuePeDestal; // BSL1ValuePeDestal
114 Int_t* fBSL1PedestalMem; // BSL1PedestalMem
115 Int_t fBSL1polarity; // BSL1polarity
116
117 Float_t fTCFK1; // K1
118 Float_t fTCFK2; // K2
119 Float_t fTCFK3; // K3
120 Float_t fTCFL1; // L1
121 Float_t fTCFL2; // L2
122 Float_t fTCFL3; // L3
123
124 Int_t fTCFK1Int; // K1Int
125 Int_t fTCFK2Int; // K2Int
126 Int_t fTCFK3Int; // K3Int
127 Int_t fTCFL1Int; // L1Int
128 Int_t fTCFL2Int; // L2Int
129 Int_t fTCFL3Int; // L3Int
130
cd10c6cd 131 Int_t fTCFK1IntROC[2]; // K1Int (IROC/OROC)
132 Int_t fTCFK2IntROC[2]; // K2Int (IROC/OROC)
133 Int_t fTCFK3IntROC[2]; // K3Int (IROC/OROC)
134 Int_t fTCFL1IntROC[2]; // L1Int (IROC/OROC)
135 Int_t fTCFL2IntROC[2]; // L2Int (IROC/OROC)
136 Int_t fTCFL3IntROC[2]; // L3Int (IROC/OROC)
137
338e0dd9 138 Int_t fBSL2HighThreshold; // BSL2HighThreshold
139 Int_t fBSL2LowThreshold; // BSL2LowThreshold
140 Int_t fBSL2Offset; // BSL2Offset
141 Int_t fBSL2Presamples; // BSL2Presamples;
142 Int_t fBSL2Postsamples; // BSL2Postsamples
143
144 Int_t fZSUThreshold; // ZSUThreshold
145 Int_t fZSUMinSamplesaboveThreshold; // ZSUMinSamplesaboveThreshold
146 Int_t fZSUPresamples; // ZSUPresamples
147 Int_t fZSUPostsamples; // ZSUPostsamples
148
149 void BaselineCorrection1(Int_t mode, Int_t FixedPeDestal, Int_t *PedestalMem, Int_t polarity);
150 void TailCancellationFilterFixedPoint(Int_t K1, Int_t K2, Int_t K3, Int_t L1, Int_t L2, Int_t L3);
151 void BaselineCorrection2RTL(Int_t HighThreshold, Int_t LowThreshold, Int_t Offset, Int_t Presamples, Int_t Postsamples);
152 void Clipping();
153 void Zerosuppression(Int_t Threshold, Int_t MinSamplesaboveThreshold, Int_t Presamples, Int_t Postsamples);
7ee86790 154 void DataFormater();
338e0dd9 155
7ee86790 156 Short_t GetElement(short* Array,Int_t index);
338e0dd9 157 void SetElement(short* Array,Int_t index,Short_t value);
158
7ee86790 159 Int_t InBand(Int_t ADC,Int_t bsl, Int_t LowThreshold, Int_t HighThreshold);
160 Int_t InRange(Int_t parameter,Int_t Low,Int_t High,const char *Module,const char *ParameterName);
338e0dd9 161 Short_t GetShortChannel(Int_t i);
162 Short_t GetKeepChannel(Int_t i);
163 Int_t Multiply36(Int_t P, Int_t N);
164 long long Mask(long long in, Int_t left, Int_t right);
165 long long Maskandshift(long long in, Int_t left, Int_t right);
166
b3b5d5c9 167
338e0dd9 168
169 void InitBuffers();
170 Bool_t AddEvent(Int_t dt,Bool_t isFirst);
171 Bool_t CreateEvent(Int_t ievent);
172 Bool_t GDC2DDLs(AliRawVEvent *gdc,Int_t ievent);
173 Bool_t ConvertRawFilesToDate(Int_t nevents);
174 Bool_t ConvertDateToRoot();
175 Bool_t WriteEvent(Int_t ievent);
176
177 AliRawReader *fReader ; // RAW reader
178 AliTPCRawStreamV3 *fDecoder; // ALTRO decoder
179
13af8d96 180 Int_t fRunNumber; // Run Number
181
338e0dd9 182 TString fDDLFolderName; // folder name for ddl files
183 TString fOutputDateFileName; // filename for date output
184 TString fOutputRootFileName; // filename for root output
185
7ee86790 186 // Float_t fP[2047] ; // Interaction probabilities for times (T-1023,...T,...T+1023)
338e0dd9 187 Bool_t fIsRandom; // Indicates if fP are treated as probabilities (in terms of Possionian statistics), or fixed numbers
188 Bool_t *fChannels; //! field of active channels
189 UInt_t *fCDHs ; //! CDHs
190 Short_t *fADCs ; //! field of ADC counts
191 UInt_t *fTrailers; //! RCU trailers
192 UInt_t *fRawData ; //! Raw Data
193
194
195 ClassDef(AliTPCAltroEmulator,1);
eb7e0771 196};
197#endif