]> git.uio.no Git - u/mrichter/AliRoot.git/blob - VZERO/AliVZEROTriggerData.cxx
Copy constructor and assignment operator
[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 \r
18 //  \r
19 // \r
20 // \r
21 #include <TObjString.h>\r
22 \r
23 #include "AliLog.h"\r
24 #include "AliDCSValue.h"\r
25 #include "AliVZEROTriggerData.h"\r
26 \r
27 ClassImp(AliVZEROTriggerData)\r
28 //________________________________________________________________\r
29 \r
30 AliVZEROTriggerData::AliVZEROTriggerData() :\r
31         TNamed(),\r
32         fBBAThreshold(0),\r
33         fBBCThreshold(0) ,  \r
34         fBGAThreshold(0) ,  \r
35         fBGCThreshold(0) ,  \r
36         fBBAForBGThreshold(0) ,  \r
37         fBBCForBGThreshold(0) ,  \r
38         fCentralityVOAThrLow(0) ,  \r
39         fCentralityVOAThrHigh(0) , \r
40         fCentralityVOCThrLow(0) ,  \r
41         fCentralityVOCThrHigh(0) , \r
42         fMultV0AThrLow(0) ,  \r
43         fMultV0AThrHigh(0) , \r
44         fMultV0CThrLow(0) ,  \r
45         fMultV0CThrHigh(0),\r
46         fRun(0),\r
47         fStartTime(0),\r
48         fEndTime(0),\r
49         fIsProcessed(kFALSE)    \r
50 \r
51 {\r
52         for(int i=0; i<kNCIUBoards ;i++) {\r
53                 fClk1Win1[i] = fClk1Win2[i] = 0;\r
54                 fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
55                 fClk2Win1[i] = fClk2Win2[i] = 0;\r
56                 fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
57                 fLatchWin1[i] = fLatchWin2[i] = 0;\r
58                 fResetWin1[i] = fResetWin2[i] = 0;\r
59                 fPedestalSubtraction[i] = kFALSE;\r
60         }\r
61 }\r
62 //________________________________________________________________\r
63 AliVZEROTriggerData::AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime) :\r
64         TNamed(),\r
65         fBBAThreshold(0),\r
66         fBBCThreshold(0) ,  \r
67         fBGAThreshold(0) ,  \r
68         fBGCThreshold(0) ,  \r
69         fBBAForBGThreshold(0) ,  \r
70         fBBCForBGThreshold(0) ,  \r
71         fCentralityVOAThrLow(0) ,  \r
72         fCentralityVOAThrHigh(0) , \r
73         fCentralityVOCThrLow(0) ,  \r
74         fCentralityVOCThrHigh(0) , \r
75         fMultV0AThrLow(0) ,  \r
76         fMultV0AThrHigh(0) , \r
77         fMultV0CThrLow(0) ,  \r
78         fMultV0CThrHigh(0),\r
79         fRun(nRun),\r
80         fStartTime(startTime),\r
81         fEndTime(endTime),\r
82         fIsProcessed(kFALSE)\r
83 {\r
84         for(int i=0; i<kNCIUBoards ;i++) {\r
85                 fClk1Win1[i] = fClk1Win2[i] = 0;\r
86                 fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
87                 fClk2Win1[i] = fClk2Win2[i] = 0;\r
88                 fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
89                 fLatchWin1[i] = fLatchWin2[i] = 0;\r
90                 fResetWin1[i] = fResetWin2[i] = 0;\r
91                 fPedestalSubtraction[i] = kFALSE;\r
92         }\r
93         TString namst = "Trigger_FEE";\r
94         SetName(namst.Data());\r
95         SetTitle(namst.Data());\r
96         \r
97 }\r
98 \r
99 //________________________________________________________________\r
100 AliVZEROTriggerData::~AliVZEROTriggerData(){\r
101 }\r
102 //_____________________________________________________________________________\r
103 void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){\r
104         TMap * params = data->GetParameters();\r
105         TIter iter(params);     \r
106         TObjString* aliasName;\r
107         \r
108         while ((  aliasName = (TObjString*) iter.Next() ))  {\r
109                 AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName);\r
110                 Float_t val = aValue->GetFloat();\r
111                 //AliInfo(Form("%s : %f",aliasName->String().Data(), val));\r
112                 SetParameter(aliasName->String(),val);\r
113         \r
114         }       \r
115 }\r
116 \r
117 //_____________________________________________________________________________\r
118 void AliVZEROTriggerData::SetParameter(TString name, Float_t val){\r
119         Int_t iBoard = -1;\r
120         Int_t iChannel = -1;\r
121 \r
122         TSeqCollection* nameSplit = name.Tokenize("/");\r
123         TObjString * boardName = (TObjString *)nameSplit->At(2);\r
124         if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard);\r
125         \r
126         TString paramName = ((TObjString *)nameSplit->At(3))->String();\r
127         Char_t channel[2] ; channel[1] = '\0';\r
128         channel[0] = paramName[paramName.Sizeof()-2];\r
129         sscanf(channel,"%d",&iChannel);\r
130         \r
131         if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard-1);\r
132         else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard-1);\r
133         else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard-1);\r
134         else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard-1);\r
135         else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard-1);\r
136         else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard-1);\r
137         else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard-1);\r
138         else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard-1);\r
139         else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard-1);\r
140         else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard-1);\r
141         else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard-1);\r
142         else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard-1);\r
143         else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard-1);\r
144         else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val);\r
145         else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val);\r
146         else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val);\r
147         else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val);\r
148         else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val);\r
149         else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val);\r
150         else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val);\r
151         else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val);\r
152         else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val);\r
153         else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val);\r
154         else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val);\r
155         else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val);\r
156         else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val);\r
157         else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val);\r
158         else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iBoard -1);\r
159         else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard -1, iChannel-1);\r
160         else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard -1, iChannel-1);\r
161         else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard -1, iChannel-1);\r
162         else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard -1, iChannel-1);\r
163         else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard -1, iChannel-1);\r
164         else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard -1, iChannel-1);\r
165         else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard -1, iChannel-1);\r
166         else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard -1, iChannel-1);\r
167         else AliError(Form("No Setter found for FEE parameter : %s",name.Data()));\r
168 }\r
169 //________________________________________________________________\r
170 void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)\r
171 {\r
172         if(board<kNCIUBoards && channel<kNChannels) {\r
173                 if(integrator) fPedestalCutOdd[board][channel] = val;\r
174                 else fPedestalCutEven[board][channel] = val;\r
175         } else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
176 }\r
177 //________________________________________________________________\r
178 UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)\r
179 {\r
180         if(board<kNCIUBoards && channel<kNChannels) {\r
181                 if(integrator) return(fPedestalCutOdd[board][channel]);\r
182                 else return(fPedestalCutEven[board][channel]);\r
183         }else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
184         return 0;\r
185 }\r
186 //________________________________________________________________\r
187 void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)\r
188 {\r
189         if(board<kNCIUBoards && channel<kNChannels) {\r
190                 if(integrator) fPedestalOdd[board][channel] = val;\r
191                 else fPedestalEven[board][channel] = val;\r
192         } else AliError(Form("Impossible to write at : Board %d ; Channel %d ; Integrator %d ",board,channel,integrator));\r
193 }\r
194 //________________________________________________________________\r
195 UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)\r
196 {\r
197         if(board<kNCIUBoards && channel<kNChannels) {\r
198                 if(integrator) return(fPedestalOdd[board][channel]);\r
199                 else return(fPedestalEven[board][channel]);\r
200         } else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
201         return 0;\r
202 }\r
203 //________________________________________________________________\r
204 void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)\r
205 {\r
206         if(board<kNCIUBoards && channel<kNChannels) fDelayHit[board][channel] = val;\r
207         else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
208 }\r
209 //________________________________________________________________\r
210 UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)\r
211 {\r
212         if(board<kNCIUBoards && channel<kNChannels) return(fDelayHit[board][channel]);\r
213         else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
214         return 0;\r
215 }\r
216 //________________________________________________________________\r
217 void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)\r
218 {\r
219         if(board<kNCIUBoards && channel<kNChannels) fDiscriThr[board][channel] = val;\r
220         else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
221 }\r
222 //________________________________________________________________\r
223 UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)\r
224 {\r
225         if(board<kNCIUBoards && channel<kNChannels) return(fDiscriThr[board][channel]);\r
226         else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
227         return 0;\r
228 }\r
229 //________________________________________________________________\r
230 void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)\r
231 {\r
232         if(board<kNCIUBoards && channel<kNChannels) fEnableCharge[board][channel] = val;\r
233         else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
234 }\r
235 //________________________________________________________________\r
236 Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)\r
237 {\r
238         if(board<kNCIUBoards && channel<kNChannels) return(fEnableCharge[board][channel]);\r
239         else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
240         return kFALSE;\r
241 }\r
242 //________________________________________________________________\r
243 void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)\r
244 {\r
245         if(board<kNCIUBoards && channel<kNChannels) fEnableTiming[board][channel] = val;\r
246         else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
247 }\r
248 //________________________________________________________________\r
249 Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)\r
250 {\r
251         if(board<kNCIUBoards && channel<kNChannels) return(fEnableTiming[board][channel]);\r
252         else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
253         return kFALSE;\r
254 }\r
255 //________________________________________________________________\r
256 void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)\r
257 {\r
258         if(output<kNTriggerOutputs) fTriggerSelected[output] = trigger;\r
259         else AliError(Form("Trigger output number %d not valid",output));\r
260 }\r
261 \r
262 //________________________________________________________________\r
263 void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)\r
264 {\r
265         if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win1(clks[t],t);\r
266         else AliFatal("Profil Clock1 Win1 Not defined.");\r
267 }\r
268 //________________________________________________________________\r
269 void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)\r
270 {\r
271         if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win1(clks[t],t);\r
272         else AliFatal("Profil Clock2 Win1 Not defined.");\r
273 }\r
274 //________________________________________________________________\r
275 void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)\r
276 {\r
277         if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win1[board] = clk;\r
278         else AliError(Form("Profil Clock1 Win1 of board %d is not valid : %d",board,clk));\r
279 }\r
280 //________________________________________________________________\r
281 void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)\r
282 {\r
283         if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win1[board] = clk;\r
284         else AliError(Form("Profil Clock2 Win1 of board %d is not valid",board));\r
285 }\r
286 //________________________________________________________________\r
287 void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)\r
288 {\r
289         if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win2(clks[t],t);\r
290         else AliFatal("Profil Clock1 Win2 Not defined.");\r
291 }\r
292 //________________________________________________________________\r
293 void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)\r
294 {\r
295         if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win2(clks[t],t);\r
296         else AliFatal("Profil Clock2 Win2 Not defined.");\r
297 }\r
298 //________________________________________________________________\r
299 void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)\r
300 {\r
301         if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win2[board] = clk;\r
302         else AliError(Form("Profil Clock1 Win2 of board %d is not valid",board));\r
303 }\r
304 //________________________________________________________________\r
305 void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)\r
306 {\r
307         if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win2[board] = clk;\r
308         else AliError(Form("Profil Clock2 Win2 of board %d is not valid",board));\r
309 }\r
310 //________________________________________________________________\r
311 void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)\r
312 {\r
313         if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win1(delays[t],t);\r
314         else AliFatal("Profil Clock1 Win1 Delays Not defined.");\r
315 }\r
316 //________________________________________________________________\r
317 void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)\r
318 {\r
319         if(delay>1023){\r
320                 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
321                 delay = delay & 0x3FF;\r
322         }\r
323         if(board<kNCIUBoards)   fDelayClk1Win1[board] = delay;\r
324         else AliError("Trying to write out of the array");\r
325 }\r
326 //________________________________________________________________\r
327 void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)\r
328 {\r
329         if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win1(delays[t],t);\r
330         else AliFatal("Profil Clock2 Win1 Delays Not defined.");\r
331 }\r
332 //________________________________________________________________\r
333 void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)\r
334 {\r
335         if(delay>1023){\r
336                 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
337                 delay = delay & 0x3FF;\r
338         }\r
339         if(board<kNCIUBoards)   fDelayClk2Win1[board] = delay;\r
340         else AliError("Trying to write out of the array");\r
341 }\r
342 //________________________________________________________________\r
343 void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)\r
344 {\r
345         if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win2(delays[t],t);\r
346         else AliFatal("Profil Clock1 Win2 Delays Not defined.");\r
347 }\r
348 //________________________________________________________________\r
349 void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)\r
350 {\r
351         if(delay>1023){\r
352                 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
353                 delay = delay & 0x3FF;\r
354         }\r
355         if(board<kNCIUBoards)   fDelayClk1Win2[board] = delay;\r
356         else AliError("Trying to write out of the array");\r
357 }\r
358 //________________________________________________________________\r
359 void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)\r
360 {\r
361         if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win2(delays[t],t);\r
362         else AliFatal("Profil Clock2 Win2 Delays Not defined.");\r
363 }\r
364 //________________________________________________________________\r
365 void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)\r
366 {\r
367         if(delay>1023){\r
368                 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
369                 delay = delay & 0x3FF;\r
370         }\r
371         if(board<kNCIUBoards)   fDelayClk2Win2[board] = delay;\r
372         else AliError("Trying to write out of the array");\r
373 }\r
374 //________________________________________________________________\r
375 void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){\r
376         if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin1(latchs[t],t);\r
377         else AliFatal("Latch Win1 profil Not defined.");\r
378 }\r
379 //________________________________________________________________\r
380 void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)\r
381 {\r
382         if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin1[board] = latch;\r
383         else AliError(Form("Latch Win1 profil of board %d is not valid",board));\r
384 }\r
385 //________________________________________________________________\r
386 void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){\r
387         if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin2(latchs[t],t);\r
388         else AliFatal("Latch Win2 profil Not defined.");\r
389 }\r
390 //________________________________________________________________\r
391 void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)\r
392 {\r
393         if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin2[board] = latch;\r
394         else AliError(Form("Latch Win2 profil of board %d is not valid",board));\r
395 }\r
396 //________________________________________________________________\r
397 void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){\r
398         if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin1(resets[t],t);\r
399         else AliFatal("Reset Win1 profil Not defined.");\r
400 }\r
401 //________________________________________________________________\r
402 void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)\r
403 {\r
404         if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin1[board] = reset;\r
405         else AliError(Form("Reset Win1 profil of board %d is not valid",board));\r
406 }\r
407 //________________________________________________________________\r
408 void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){\r
409         if(resets)  for(int t=0; t<kNCIUBoards; t++) SetResetWin2(resets[t],t);\r
410         else AliFatal("Reset Win2 profil Not defined.");\r
411 }\r
412 //________________________________________________________________\r
413 void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)\r
414 {\r
415         if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin2[board] = reset;\r
416         else AliError(Form("Reset Win2 profil of board %d is not valid",board));\r
417 }\r
418 //________________________________________________________________\r
419 void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){\r
420         if(peds)  for(int t=0; t<kNCIUBoards; t++) SetPedestalSubtraction(peds[t],t);\r
421         else AliFatal("Pedestal Subtraction Not defined.");\r
422         \r
423 }\r
424 //________________________________________________________________\r
425 void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)\r
426 {\r
427         if((board<kNCIUBoards)) fPedestalSubtraction[board] = ped;\r
428         else AliError(Form("Board %d is not valid",board));\r
429 }\r
430 \r
431 //________________________________________________________________\r
432 Bool_t  AliVZEROTriggerData::IsClkValid(UShort_t clock){\r
433         Bool_t word[5];\r
434         Bool_t isValid = kTRUE;\r
435         Short_t RisingEdge = 0;\r
436         Short_t FallingEdge = 0;\r
437         for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;\r
438         \r
439         if(word[0] != word[4]){\r
440                 if(word[4]) FallingEdge++;\r
441                 else RisingEdge++;\r
442         }       \r
443         for(int i=1 ; i<5 ; i++){\r
444                 if(word[i] != word[i-1]) {\r
445                         if(word[i-1]) FallingEdge++;\r
446                         else RisingEdge++;\r
447                 }\r
448         }\r
449         if((FallingEdge>1)||(RisingEdge>1)) isValid = kFALSE;\r
450         if(((RisingEdge==0)&&(FallingEdge==0)) &&(!word[0]))  isValid = kFALSE;\r
451         return isValid;\r
452 }\r
453 \r
454 \r