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