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