]> git.uio.no Git - u/mrichter/AliRoot.git/blob - VZERO/AliVZEROTriggerData.cxx
Change of STANDALONE run types in Preprocessor + retrieval and use of two more FEE...
[u/mrichter/AliRoot.git] / VZERO / AliVZEROTriggerData.cxx
1 \r
2 /**************************************************************************\r
3  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
4  *                                                                        *\r
5  * Author: The ALICE Off-line Project.                                    *\r
6  * Contributors are mentioned in the code where appropriate.              *\r
7  *                                                                        *\r
8  * Permission to use, copy, modify and distribute this software and its   *\r
9  * documentation strictly for non-commercial purposes is hereby granted   *\r
10  * without fee, provided that the above copyright notice appears in all   *\r
11  * copies and that both the copyright notice and this permission notice   *\r
12  * appear in the supporting documentation. The authors make no claims     *\r
13  * about the suitability of this software for any purpose. It is          *\r
14  * provided "as is" without express or implied warranty.                  *\r
15  **************************************************************************/\r
16 \r
17 // Class AliVZEROTriggerData\r
18 // -------------------------\r
19 // Retrieves and hold the FEE parameters\r
20 // The parameters are recieved from the shuttle \r
21 // AliVZEROTriggerData is then used in the AliVZEROTriggerSimulator\r
22 //\r
23 \r
24 #include <TObjString.h>\r
25 #include <TMap.h>\r
26 \r
27 #include "AliLog.h"\r
28 #include "AliDCSValue.h"\r
29 #include "AliVZEROTriggerData.h"\r
30 \r
31 ClassImp(AliVZEROTriggerData)\r
32 //________________________________________________________________\r
33 \r
34 AliVZEROTriggerData::AliVZEROTriggerData() :\r
35         TNamed(),\r
36         fBBAThreshold(0),\r
37         fBBCThreshold(0) ,  \r
38         fBGAThreshold(0) ,  \r
39         fBGCThreshold(0) ,  \r
40         fBBAForBGThreshold(0) ,  \r
41         fBBCForBGThreshold(0) ,  \r
42         fCentralityVOAThrLow(0) ,  \r
43         fCentralityVOAThrHigh(0) , \r
44         fCentralityVOCThrLow(0) ,  \r
45         fCentralityVOCThrHigh(0) , \r
46         fMultV0AThrLow(0) ,  \r
47         fMultV0AThrHigh(0) , \r
48         fMultV0CThrLow(0) ,  \r
49         fMultV0CThrHigh(0),\r
50         fRun(0),\r
51         fStartTime(0),\r
52         fEndTime(0),\r
53         fIsProcessed(kFALSE)    \r
54 \r
55 {\r
56         // default constructor\r
57         for(int i=0; i<kNCIUBoards ;i++) {\r
58                 fClk1Win1[i] = fClk1Win2[i] = 0;\r
59                 fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
60                 fClk2Win1[i] = fClk2Win2[i] = 0;\r
61                 fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
62                 fLatchWin1[i] = fLatchWin2[i] = 0;\r
63                 fResetWin1[i] = fResetWin2[i] = 0;\r
64                 fPedestalSubtraction[i] = kFALSE;\r
65                 fTimeResolution[i] = 25./256.; // Default time resolution\r
66                 fWidthResolution[i] = 0.4;     // Default time width resolution\r
67         }\r
68 }\r
69 //________________________________________________________________\r
70 AliVZEROTriggerData::AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime) :\r
71         TNamed(),\r
72         fBBAThreshold(0),\r
73         fBBCThreshold(0) ,  \r
74         fBGAThreshold(0) ,  \r
75         fBGCThreshold(0) ,  \r
76         fBBAForBGThreshold(0) ,  \r
77         fBBCForBGThreshold(0) ,  \r
78         fCentralityVOAThrLow(0) ,  \r
79         fCentralityVOAThrHigh(0) , \r
80         fCentralityVOCThrLow(0) ,  \r
81         fCentralityVOCThrHigh(0) , \r
82         fMultV0AThrLow(0) ,  \r
83         fMultV0AThrHigh(0) , \r
84         fMultV0CThrLow(0) ,  \r
85         fMultV0CThrHigh(0),\r
86         fRun(nRun),\r
87         fStartTime(startTime),\r
88         fEndTime(endTime),\r
89         fIsProcessed(kFALSE)\r
90 {\r
91         // Constructor\r
92         for(int i=0; i<kNCIUBoards ;i++) {\r
93                 fClk1Win1[i] = fClk1Win2[i] = 0;\r
94                 fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
95                 fClk2Win1[i] = fClk2Win2[i] = 0;\r
96                 fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
97                 fLatchWin1[i] = fLatchWin2[i] = 0;\r
98                 fResetWin1[i] = fResetWin2[i] = 0;\r
99                 fPedestalSubtraction[i] = kFALSE;\r
100                 fTimeResolution[i] = 25./256.; // Default time resolution\r
101                 fWidthResolution[i] = 0.4;     // Default time width resolution\r
102         }\r
103         TString namst = "Trigger_FEE";\r
104         SetName(namst.Data());\r
105         SetTitle(namst.Data());\r
106         \r
107 }\r
108 \r
109 //________________________________________________________________\r
110 AliVZEROTriggerData::~AliVZEROTriggerData(){\r
111         // destructor\r
112 }\r
113 //_____________________________________________________________________________\r
114 void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){\r
115         // Set all parameters from the data get by the shuttle\r
116         TMap * params = data->GetParameters();\r
117         TIter iter(params);     \r
118         TObjString* aliasName;\r
119         \r
120         while ((  aliasName = (TObjString*) iter.Next() ))  {\r
121                 AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName);\r
122                 Float_t val;\r
123                 if(aValue) {\r
124                         val = aValue->GetFloat();\r
125                         //AliInfo(Form("%s : %f",aliasName->String().Data(), val));\r
126                         SetParameter(aliasName->String(),val);\r
127                 }\r
128         }       \r
129 }\r
130 \r
131 //_____________________________________________________________________________\r
132 void AliVZEROTriggerData::SetParameter(TString name, Float_t val){\r
133         // Set given parameter\r
134         \r
135         Int_t iBoard = -1;\r
136         Int_t iChannel = -1;\r
137 \r
138         TSeqCollection* nameSplit = name.Tokenize("/");\r
139         TObjString * boardName = (TObjString *)nameSplit->At(2);\r
140         if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard);\r
141         \r
142         TString paramName = ((TObjString *)nameSplit->At(3))->String();\r
143         Char_t channel[2] ; channel[1] = '\0';\r
144         channel[0] = paramName[paramName.Sizeof()-2];\r
145         sscanf(channel,"%d",&iChannel);\r
146         \r
147         if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard-1);\r
148         else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard-1);\r
149         else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard-1);\r
150         else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard-1);\r
151         else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard-1);\r
152         else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard-1);\r
153         else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard-1);\r
154         else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard-1);\r
155         else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard-1);\r
156         else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard-1);\r
157         else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard-1);\r
158         else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard-1);\r
159         else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard-1);\r
160         else if(name.Contains("TimeResolution")) SetTimeResolution((UShort_t) val,iBoard-1);\r
161         else if(name.Contains("WidthResolution")) SetWidthResolution((UShort_t) val,iBoard-1);\r
162         else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val);\r
163         else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val);\r
164         else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val);\r
165         else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val);\r
166         else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val);\r
167         else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val);\r
168         else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val);\r
169         else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val);\r
170         else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val);\r
171         else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val);\r
172         else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val);\r
173         else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val);\r
174         else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val);\r
175         else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val);\r
176         else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iBoard -1);\r
177         else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard -1, iChannel-1);\r
178         else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard -1, iChannel-1);\r
179         else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard -1, iChannel-1);\r
180         else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard -1, iChannel-1);\r
181         else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard -1, iChannel-1);\r
182         else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard -1, iChannel-1);\r
183         else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard -1, iChannel-1);\r
184         else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard -1, iChannel-1);\r
185         else AliError(Form("No Setter found for FEE parameter : %s",name.Data()));\r
186 }\r
187 //________________________________________________________________\r
188 void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)\r
189 {\r
190         // Set Pedestal Cut of individual channel \r
191         if(board<kNCIUBoards && channel<kNChannels) {\r
192                 if(integrator) fPedestalCutOdd[board][channel] = val;\r
193                 else fPedestalCutEven[board][channel] = val;\r
194         } else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
195 }\r
196 //________________________________________________________________\r
197 UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)\r
198 {\r
199         // Get Pedestal Cut of individual channel \r
200         if(board<kNCIUBoards && channel<kNChannels) {\r
201                 if(integrator) return(fPedestalCutOdd[board][channel]);\r
202                 else return(fPedestalCutEven[board][channel]);\r
203         }else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
204         return 0;\r
205 }\r
206 //________________________________________________________________\r
207 void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)\r
208 {\r
209         // Set Pedestal of individual channel \r
210         if(board<kNCIUBoards && channel<kNChannels) {\r
211                 if(integrator) fPedestalOdd[board][channel] = val;\r
212                 else fPedestalEven[board][channel] = val;\r
213         } else AliError(Form("Impossible to write at : Board %d ; Channel %d ; Integrator %d ",board,channel,integrator));\r
214 }\r
215 //________________________________________________________________\r
216 UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)\r
217 {\r
218         // Get Pedestal of individual channel \r
219         if(board<kNCIUBoards && channel<kNChannels) {\r
220                 if(integrator) return(fPedestalOdd[board][channel]);\r
221                 else return(fPedestalEven[board][channel]);\r
222         } else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
223         return 0;\r
224 }\r
225 //________________________________________________________________\r
226 void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)\r
227 {\r
228         // Set Delay of individual channel \r
229         if(board<kNCIUBoards && channel<kNChannels) fDelayHit[board][channel] = val;\r
230         else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
231 }\r
232 //________________________________________________________________\r
233 UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)\r
234 {\r
235         // Get Delay of individual channel \r
236         if(board<kNCIUBoards && channel<kNChannels) return(fDelayHit[board][channel]);\r
237         else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
238         return 0;\r
239 }\r
240 //________________________________________________________________\r
241 void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)\r
242 {\r
243         // Set discriminator threshold\r
244         if(board<kNCIUBoards && channel<kNChannels) fDiscriThr[board][channel] = val;\r
245         else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
246 }\r
247 //________________________________________________________________\r
248 UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)\r
249 {\r
250         // Get discriminator threshold\r
251         if(board<kNCIUBoards && channel<kNChannels) return(fDiscriThr[board][channel]);\r
252         else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
253         return 0;\r
254 }\r
255 //________________________________________________________________\r
256 void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)\r
257 {\r
258         // Set the channels enabled for Charge triggers\r
259         if(board<kNCIUBoards && channel<kNChannels) fEnableCharge[board][channel] = val;\r
260         else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
261 }\r
262 //________________________________________________________________\r
263 Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)\r
264 {\r
265         // Get the channels enabled for Charge triggers\r
266         if(board<kNCIUBoards && channel<kNChannels) return(fEnableCharge[board][channel]);\r
267         else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
268         return kFALSE;\r
269 }\r
270 //________________________________________________________________\r
271 void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)\r
272 {\r
273         // Set the channels enabled for Timing triggers\r
274         if(board<kNCIUBoards && channel<kNChannels) fEnableTiming[board][channel] = val;\r
275         else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
276 }\r
277 //________________________________________________________________\r
278 Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)\r
279 {\r
280         // Get the channels enabled for Timing triggers\r
281         if(board<kNCIUBoards && channel<kNChannels) return(fEnableTiming[board][channel]);\r
282         else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
283         return kFALSE;\r
284 }\r
285 //________________________________________________________________\r
286 void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)\r
287 {\r
288         // Set the trigger selected on the outputs to CTP\r
289         if(output<kNTriggerOutputs) fTriggerSelected[output] = trigger;\r
290         else AliError(Form("Trigger output number %d not valid",output));\r
291 }\r
292 \r
293 //________________________________________________________________\r
294 void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)\r
295 {\r
296         // Set Win clock of BB\r
297         if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win1(clks[t],t);\r
298         else AliFatal("Profil Clock1 Win1 Not defined.");\r
299 }\r
300 //________________________________________________________________\r
301 void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)\r
302 {\r
303         // Set Win clock of BB\r
304         if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win1(clks[t],t);\r
305         else AliFatal("Profil Clock2 Win1 Not defined.");\r
306 }\r
307 //________________________________________________________________\r
308 void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)\r
309 {\r
310         // Set Win clock of BB\r
311         if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win1[board] = clk;\r
312         else AliError(Form("Profil Clock1 Win1 of board %d is not valid : %d",board,clk));\r
313 }\r
314 //________________________________________________________________\r
315 void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)\r
316 {\r
317         // Set Win clock of BB\r
318         if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win1[board] = clk;\r
319         else AliError(Form("Profil Clock2 Win1 of board %d is not valid",board));\r
320 }\r
321 //________________________________________________________________\r
322 void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)\r
323 {\r
324         // Set Win clock of BG\r
325         if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win2(clks[t],t);\r
326         else AliFatal("Profil Clock1 Win2 Not defined.");\r
327 }\r
328 //________________________________________________________________\r
329 void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)\r
330 {\r
331         // Set Win clock of BG\r
332         if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win2(clks[t],t);\r
333         else AliFatal("Profil Clock2 Win2 Not defined.");\r
334 }\r
335 //________________________________________________________________\r
336 void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)\r
337 {\r
338         // Set Win clock of BG\r
339         if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win2[board] = clk;\r
340         else AliError(Form("Profil Clock1 Win2 of board %d is not valid",board));\r
341 }\r
342 //________________________________________________________________\r
343 void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)\r
344 {\r
345         // Set Win clock of BG\r
346         if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win2[board] = clk;\r
347         else AliError(Form("Profil Clock2 Win2 of board %d is not valid",board));\r
348 }\r
349 //________________________________________________________________\r
350 void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)\r
351 {\r
352         // Set Delay for Win clock of BB\r
353         if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win1(delays[t],t);\r
354         else AliFatal("Profil Clock1 Win1 Delays Not defined.");\r
355 }\r
356 //________________________________________________________________\r
357 void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)\r
358 {\r
359         // Set Delay for Win clock of BB\r
360         if(delay>1023){\r
361                 AliWarning(Form("Profil Clock1 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
362                 delay = delay & 0x3FF;\r
363         }\r
364         if(board<kNCIUBoards)   fDelayClk1Win1[board] = delay;\r
365         else AliError("Trying to write out of the array");\r
366 }\r
367 //________________________________________________________________\r
368 void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)\r
369 {\r
370         // Set Delay for Win clock of BB\r
371         if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win1(delays[t],t);\r
372         else AliFatal("Profil Clock2 Win1 Delays Not defined.");\r
373 }\r
374 //________________________________________________________________\r
375 void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)\r
376 {\r
377         // Set Delay for Win clock of BB\r
378         if(delay>1023){\r
379                 AliWarning(Form("Profil Clock2 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
380                 delay = delay & 0x3FF;\r
381         }\r
382         if(board<kNCIUBoards)   fDelayClk2Win1[board] = delay;\r
383         else AliError("Trying to write out of the array");\r
384 }\r
385 //________________________________________________________________\r
386 void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)\r
387 {\r
388         // Set Delay for Win clock of BG\r
389         if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win2(delays[t],t);\r
390         else AliFatal("Profil Clock1 Win2 Delays Not defined.");\r
391 }\r
392 //________________________________________________________________\r
393 void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)\r
394 {\r
395         // Set Delay for Win clock of BG\r
396         if(delay>1023){\r
397                 AliWarning(Form("Profil Clock1 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
398                 delay = delay & 0x3FF;\r
399         }\r
400         if(board<kNCIUBoards)   fDelayClk1Win2[board] = delay;\r
401         else AliError("Trying to write out of the array");\r
402 }\r
403 //________________________________________________________________\r
404 void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)\r
405 {\r
406         // Set Delay for Win clock of BG\r
407         if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win2(delays[t],t);\r
408         else AliFatal("Profil Clock2 Win2 Delays Not defined.");\r
409 }\r
410 //________________________________________________________________\r
411 void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)\r
412 {\r
413         // Set Delay for Win clock of BG\r
414         if(delay>1023){\r
415                 AliWarning(Form("Profil Clock2 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
416                 delay = delay & 0x3FF;\r
417         }\r
418         if(board<kNCIUBoards)   fDelayClk2Win2[board] = delay;\r
419         else AliError("Trying to write out of the array");\r
420 }\r
421 //________________________________________________________________\r
422 void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){\r
423         // Set Latch Win clock for BB\r
424         if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin1(latchs[t],t);\r
425         else AliFatal("Latch Win1 profil Not defined.");\r
426 }\r
427 //________________________________________________________________\r
428 void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)\r
429 {\r
430         // Set Latch Win clock for BB\r
431         if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin1[board] = latch;\r
432         else AliError(Form("Latch Win1 profil of board %d is not valid",board));\r
433 }\r
434 //________________________________________________________________\r
435 void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){\r
436         // Set Latch Win clock for BG\r
437         if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin2(latchs[t],t);\r
438         else AliFatal("Latch Win2 profil Not defined.");\r
439 }\r
440 //________________________________________________________________\r
441 void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)\r
442 {\r
443         // Set Latch Win clock for BG\r
444         if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin2[board] = latch;\r
445         else AliError(Form("Latch Win2 profil of board %d is not valid",board));\r
446 }\r
447 //________________________________________________________________\r
448 void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){\r
449         // Set Reset Win clock for BB\r
450         if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin1(resets[t],t);\r
451         else AliFatal("Reset Win1 profil Not defined.");\r
452 }\r
453 //________________________________________________________________\r
454 void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)\r
455 {\r
456         // Set Reset Win clock for BB\r
457         if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin1[board] = reset;\r
458         else AliError(Form("Reset Win1 profil of board %d is not valid",board));\r
459 }\r
460 //________________________________________________________________\r
461 void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){\r
462         // Set Reset Win clock for BG\r
463         if(resets)  for(int t=0; t<kNCIUBoards; t++) SetResetWin2(resets[t],t);\r
464         else AliFatal("Reset Win2 profil Not defined.");\r
465 }\r
466 //________________________________________________________________\r
467 void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)\r
468 {\r
469         // Set Reset Win clock for BG\r
470         if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin2[board] = reset;\r
471         else AliError(Form("Reset Win2 profil of board %d is not valid",board));\r
472 }\r
473 //________________________________________________________________\r
474 void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){\r
475         // Set Pedestal Subtraction Parameter\r
476         if(peds)  for(int t=0; t<kNCIUBoards; t++) SetPedestalSubtraction(peds[t],t);\r
477         else AliFatal("Pedestal Subtraction Not defined.");\r
478         \r
479 }\r
480 //________________________________________________________________\r
481 void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)\r
482 {\r
483         // Set Pedestal Subtraction Parameter\r
484         if((board<kNCIUBoards)) fPedestalSubtraction[board] = ped;\r
485         else AliError(Form("Board %d is not valid",board));\r
486 }\r
487 //________________________________________________________________\r
488 void AliVZEROTriggerData::SetTimeResolution(UShort_t *resols){\r
489         // Set Time Resolution of the TDC\r
490         if(resols)  for(int t=0; t<kNCIUBoards; t++) SetTimeResolution(resols[t],t);\r
491         else AliFatal("Time Resolution not defined.");\r
492         \r
493 }\r
494 //________________________________________________________________\r
495 void AliVZEROTriggerData::SetTimeResolution(UShort_t resol, Int_t board)\r
496 {\r
497         // Set Time Resolution of the TDC\r
498         if((board<kNCIUBoards)) {\r
499                 switch(resol){\r
500                         case 0:\r
501                                 fTimeResolution[board] = 25./256.;\r
502                                 break;\r
503                         case 1:\r
504                                 fTimeResolution[board] = 25./128.;\r
505                                 break;\r
506                         case 2:\r
507                                 fTimeResolution[board] = 25./64.;\r
508                                 break;\r
509                         case 3:\r
510                                 fTimeResolution[board] = 25./32.;\r
511                                 break;\r
512                         case 4:\r
513                                 fTimeResolution[board] = 25./16.;\r
514                                 break;\r
515                         case 5:\r
516                                 fTimeResolution[board] = 25./8.;\r
517                                 break;\r
518                         case 6:\r
519                                 fTimeResolution[board] = 6.25;\r
520                                 break;\r
521                         case 7:\r
522                                 fTimeResolution[board] = 12.5;\r
523                                 break;\r
524                 }\r
525         } else AliError(Form("Board %d is not valid",board));\r
526 }\r
527 //________________________________________________________________\r
528 void AliVZEROTriggerData::SetWidthResolution(UShort_t *resols){\r
529         // Set Time Width Resolution of the TDC\r
530         if(resols)  for(int t=0; t<kNCIUBoards; t++) SetWidthResolution(resols[t],t);\r
531         else AliFatal("Width Resolution not defined.");\r
532         \r
533 }\r
534 //________________________________________________________________\r
535 void AliVZEROTriggerData::SetWidthResolution(UShort_t resol, Int_t board)\r
536 {\r
537         // Set Time Width Resolution of the TDC\r
538         if((board<kNCIUBoards)){\r
539                 switch(resol){\r
540                         case 0:\r
541                                 fWidthResolution[board] = 25./256.;\r
542                                 break;\r
543                         case 1:\r
544                                 fWidthResolution[board] = 25./128.;\r
545                                 break;\r
546                         case 2:\r
547                                 fWidthResolution[board] = 25./64.;\r
548                                 break;\r
549                         case 3:\r
550                                 fWidthResolution[board] = 25./32.;\r
551                                 break;\r
552                         case 4:\r
553                                 fWidthResolution[board] = 25./16.;\r
554                                 break;\r
555                         case 5:\r
556                                 fWidthResolution[board] = 25./8.;\r
557                                 break;\r
558                         case 6:\r
559                                 fWidthResolution[board] = 6.25;\r
560                                 break;\r
561                         case 7:\r
562                                 fWidthResolution[board] = 12.5;\r
563                                 break;\r
564                         case 8:\r
565                                 fWidthResolution[board] = 25.;\r
566                                 break;\r
567                         case 9:\r
568                                 fWidthResolution[board] = 50.;\r
569                                 break;\r
570                         case 10:\r
571                                 fWidthResolution[board] = 100.;\r
572                                 break;\r
573                         case 11:\r
574                                 fWidthResolution[board] = 200.;\r
575                                 break;\r
576                         case 12:\r
577                                 fWidthResolution[board] = 400.;\r
578                                 break;\r
579                         case 13:\r
580                                 fWidthResolution[board] = 800.;\r
581                                 break;\r
582                                 \r
583                 }\r
584         }else AliError(Form("Board %d is not valid",board));\r
585 }\r
586 \r
587 //________________________________________________________________\r
588 Bool_t  AliVZEROTriggerData::IsClkValid(UShort_t clock) const {\r
589         // Check if the given clock has a valid profil.\r
590         Bool_t word[5];\r
591         Bool_t isValid = kTRUE;\r
592         Short_t risingEdge = 0;\r
593         Short_t fallingEdge = 0;\r
594         for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;\r
595         \r
596         if(word[0] != word[4]){\r
597                 if(word[4]) fallingEdge++;\r
598                 else risingEdge++;\r
599         }       \r
600         for(int i=1 ; i<5 ; i++){\r
601                 if(word[i] != word[i-1]) {\r
602                         if(word[i-1]) fallingEdge++;\r
603                         else risingEdge++;\r
604                 }\r
605         }\r
606         if((fallingEdge>1)||(risingEdge>1)) isValid = kFALSE;\r
607         if(((risingEdge==0)&&(fallingEdge==0)) &&(!word[0]))  isValid = kFALSE;\r
608         return isValid;\r
609 }\r
610 \r
611 \r
612 \r