]> git.uio.no Git - u/mrichter/AliRoot.git/blame - VZERO/AliVZEROTriggerData.cxx
Savannah bug 58893 - fixing memory trashing
[u/mrichter/AliRoot.git] / VZERO / AliVZEROTriggerData.cxx
CommitLineData
a08520b8 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
e370cdfe 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
a08520b8 23\r
a08520b8 24#include <TObjString.h>\r
e370cdfe 25#include <TMap.h>\r
a08520b8 26\r
27#include "AliLog.h"\r
28#include "AliDCSValue.h"\r
29#include "AliVZEROTriggerData.h"\r
30\r
31ClassImp(AliVZEROTriggerData)\r
32//________________________________________________________________\r
33\r
34AliVZEROTriggerData::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
e370cdfe 56 // default constructor\r
a08520b8 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
68AliVZEROTriggerData::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
e370cdfe 89 // Constructor\r
a08520b8 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
d5deaaa5 99 TString namst = "VZERO_Trigger_FEE";\r
a08520b8 100 SetName(namst.Data());\r
101 SetTitle(namst.Data());\r
102 \r
103}\r
a08520b8 104\r
105//________________________________________________________________\r
106AliVZEROTriggerData::~AliVZEROTriggerData(){\r
e370cdfe 107 // destructor\r
a08520b8 108}\r
109//_____________________________________________________________________________\r
110void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){\r
e370cdfe 111 // Set all parameters from the data get by the shuttle\r
a08520b8 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
e58b4e66 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
a08520b8 124 } \r
125}\r
126\r
127//_____________________________________________________________________________\r
128void AliVZEROTriggerData::SetParameter(TString name, Float_t val){\r
e370cdfe 129 // Set given parameter\r
130 \r
a08520b8 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
182void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)\r
183{\r
e370cdfe 184 // Set Pedestal Cut of individual channel \r
a08520b8 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
191UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)\r
192{\r
e370cdfe 193 // Get Pedestal Cut of individual channel \r
a08520b8 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
201void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)\r
202{\r
e370cdfe 203 // Set Pedestal of individual channel \r
a08520b8 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
210UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)\r
211{\r
e370cdfe 212 // Get Pedestal of individual channel \r
a08520b8 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
220void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)\r
221{\r
e370cdfe 222 // Set Delay of individual channel \r
a08520b8 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
227UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)\r
228{\r
e370cdfe 229 // Get Delay of individual channel \r
a08520b8 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
235void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)\r
236{\r
e370cdfe 237 // Set discriminator threshold\r
a08520b8 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
242UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)\r
243{\r
e370cdfe 244 // Get discriminator threshold\r
a08520b8 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
250void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)\r
251{\r
e370cdfe 252 // Set the channels enabled for Charge triggers\r
a08520b8 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
257Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)\r
258{\r
e370cdfe 259 // Get the channels enabled for Charge triggers\r
a08520b8 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
265void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)\r
266{\r
e370cdfe 267 // Set the channels enabled for Timing triggers\r
a08520b8 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
272Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)\r
273{\r
e370cdfe 274 // Get the channels enabled for Timing triggers\r
a08520b8 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
280void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)\r
281{\r
e370cdfe 282 // Set the trigger selected on the outputs to CTP\r
a08520b8 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
288void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)\r
289{\r
e370cdfe 290 // Set Win clock of BB\r
a08520b8 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
295void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)\r
296{\r
e370cdfe 297 // Set Win clock of BB\r
a08520b8 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
302void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)\r
303{\r
e370cdfe 304 // Set Win clock of BB\r
a08520b8 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
309void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)\r
310{\r
e370cdfe 311 // Set Win clock of BB\r
a08520b8 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
316void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)\r
317{\r
e370cdfe 318 // Set Win clock of BG\r
a08520b8 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
323void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)\r
324{\r
e370cdfe 325 // Set Win clock of BG\r
a08520b8 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
330void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)\r
331{\r
e370cdfe 332 // Set Win clock of BG\r
a08520b8 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
337void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)\r
338{\r
e370cdfe 339 // Set Win clock of BG\r
a08520b8 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
344void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)\r
345{\r
e370cdfe 346 // Set Delay for Win clock of BB\r
a08520b8 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
351void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)\r
352{\r
e370cdfe 353 // Set Delay for Win clock of BB\r
a08520b8 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
362void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)\r
363{\r
e370cdfe 364 // Set Delay for Win clock of BB\r
a08520b8 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
369void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)\r
370{\r
e370cdfe 371 // Set Delay for Win clock of BB\r
a08520b8 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
380void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)\r
381{\r
e370cdfe 382 // Set Delay for Win clock of BG\r
a08520b8 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
387void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)\r
388{\r
e370cdfe 389 // Set Delay for Win clock of BG\r
a08520b8 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
398void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)\r
399{\r
e370cdfe 400 // Set Delay for Win clock of BG\r
a08520b8 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
405void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)\r
406{\r
e370cdfe 407 // Set Delay for Win clock of BG\r
a08520b8 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
416void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){\r
e370cdfe 417 // Set Latch Win clock for BB\r
a08520b8 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
422void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)\r
423{\r
e370cdfe 424 // Set Latch Win clock for BB\r
a08520b8 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
429void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){\r
e370cdfe 430 // Set Latch Win clock for BG\r
a08520b8 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
435void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)\r
436{\r
e370cdfe 437 // Set Latch Win clock for BG\r
a08520b8 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
442void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){\r
e370cdfe 443 // Set Reset Win clock for BB\r
a08520b8 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
448void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)\r
449{\r
e370cdfe 450 // Set Reset Win clock for BB\r
a08520b8 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
455void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){\r
e370cdfe 456 // Set Reset Win clock for BG\r
a08520b8 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
461void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)\r
462{\r
e370cdfe 463 // Set Reset Win clock for BG\r
a08520b8 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
468void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){\r
e370cdfe 469 // Set Pedestal Subtraction Parameter\r
a08520b8 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
475void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)\r
476{\r
e370cdfe 477 // Set Pedestal Subtraction Parameter\r
a08520b8 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
e370cdfe 483Bool_t AliVZEROTriggerData::IsClkValid(UShort_t clock) const {\r
484 // Check if the given clock has a valid profil.\r
a08520b8 485 Bool_t word[5];\r
486 Bool_t isValid = kTRUE;\r
e370cdfe 487 Short_t risingEdge = 0;\r
488 Short_t fallingEdge = 0;\r
a08520b8 489 for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;\r
490 \r
491 if(word[0] != word[4]){\r
e370cdfe 492 if(word[4]) fallingEdge++;\r
493 else risingEdge++;\r
a08520b8 494 } \r
495 for(int i=1 ; i<5 ; i++){\r
496 if(word[i] != word[i-1]) {\r
e370cdfe 497 if(word[i-1]) fallingEdge++;\r
498 else risingEdge++;\r
a08520b8 499 }\r
500 }\r
e370cdfe 501 if((fallingEdge>1)||(risingEdge>1)) isValid = kFALSE;\r
502 if(((risingEdge==0)&&(fallingEdge==0)) &&(!word[0])) isValid = kFALSE;\r
a08520b8 503 return isValid;\r
504}\r
505\r
f3051e80 506\r
e370cdfe 507\r