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