2 /**************************************************************************
\r
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
5 * Author: The ALICE Off-line Project. *
\r
6 * Contributors are mentioned in the code where appropriate. *
\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
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
24 #include <TObjString.h>
\r
28 #include "AliDCSValue.h"
\r
29 #include "AliVZEROTriggerData.h"
\r
31 ClassImp(AliVZEROTriggerData)
\r
32 //________________________________________________________________
\r
34 AliVZEROTriggerData::AliVZEROTriggerData() :
\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
53 fIsProcessed(kFALSE)
\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 fTimeResolution[i] = 25./256.; // Default time resolution
\r
66 fWidthResolution[i] = 0.4; // Default time width resolution
\r
69 //________________________________________________________________
\r
70 AliVZEROTriggerData::AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime) :
\r
76 fBBAForBGThreshold(0) ,
\r
77 fBBCForBGThreshold(0) ,
\r
78 fCentralityVOAThrLow(0) ,
\r
79 fCentralityVOAThrHigh(0) ,
\r
80 fCentralityVOCThrLow(0) ,
\r
81 fCentralityVOCThrHigh(0) ,
\r
82 fMultV0AThrLow(0) ,
\r
83 fMultV0AThrHigh(0) ,
\r
84 fMultV0CThrLow(0) ,
\r
87 fStartTime(startTime),
\r
89 fIsProcessed(kFALSE)
\r
92 for(int i=0; i<kNCIUBoards ;i++) {
\r
93 fClk1Win1[i] = fClk1Win2[i] = 0;
\r
94 fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;
\r
95 fClk2Win1[i] = fClk2Win2[i] = 0;
\r
96 fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;
\r
97 fLatchWin1[i] = fLatchWin2[i] = 0;
\r
98 fResetWin1[i] = fResetWin2[i] = 0;
\r
99 fPedestalSubtraction[i] = kFALSE;
\r
100 fTimeResolution[i] = 25./256.; // Default time resolution
\r
101 fWidthResolution[i] = 0.4; // Default time width resolution
\r
103 TString namst = "Trigger_FEE";
\r
104 SetName(namst.Data());
\r
105 SetTitle(namst.Data());
\r
109 //________________________________________________________________
\r
110 AliVZEROTriggerData::~AliVZEROTriggerData(){
\r
113 //_____________________________________________________________________________
\r
114 void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){
\r
115 // Set all parameters from the data get by the shuttle
\r
116 TMap * params = data->GetParameters();
\r
117 TIter iter(params);
\r
118 TObjString* aliasName;
\r
120 while (( aliasName = (TObjString*) iter.Next() )) {
\r
121 AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName);
\r
124 val = aValue->GetFloat();
\r
125 //AliInfo(Form("%s : %f",aliasName->String().Data(), val));
\r
126 SetParameter(aliasName->String(),val);
\r
131 //_____________________________________________________________________________
\r
132 void AliVZEROTriggerData::SetParameter(TString name, Float_t val){
\r
133 // Set given parameter
\r
136 Int_t iChannel = -1;
\r
138 TSeqCollection* nameSplit = name.Tokenize("/");
\r
139 TObjString * boardName = (TObjString *)nameSplit->At(2);
\r
140 if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard);
\r
142 TString paramName = ((TObjString *)nameSplit->At(3))->String();
\r
143 Char_t channel[2] ; channel[1] = '\0';
\r
144 channel[0] = paramName[paramName.Sizeof()-2];
\r
145 sscanf(channel,"%d",&iChannel);
\r
147 if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard-1);
\r
148 else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard-1);
\r
149 else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard-1);
\r
150 else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard-1);
\r
151 else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard-1);
\r
152 else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard-1);
\r
153 else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard-1);
\r
154 else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard-1);
\r
155 else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard-1);
\r
156 else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard-1);
\r
157 else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard-1);
\r
158 else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard-1);
\r
159 else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard-1);
\r
160 else if(name.Contains("TimeResolution")) SetTimeResolution((UShort_t) val,iBoard-1);
\r
161 else if(name.Contains("WidthResolution")) SetWidthResolution((UShort_t) val,iBoard-1);
\r
162 else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val);
\r
163 else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val);
\r
164 else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val);
\r
165 else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val);
\r
166 else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val);
\r
167 else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val);
\r
168 else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val);
\r
169 else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val);
\r
170 else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val);
\r
171 else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val);
\r
172 else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val);
\r
173 else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val);
\r
174 else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val);
\r
175 else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val);
\r
176 else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iBoard -1);
\r
177 else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard -1, iChannel-1);
\r
178 else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard -1, iChannel-1);
\r
179 else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard -1, iChannel-1);
\r
180 else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard -1, iChannel-1);
\r
181 else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard -1, iChannel-1);
\r
182 else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard -1, iChannel-1);
\r
183 else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard -1, iChannel-1);
\r
184 else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard -1, iChannel-1);
\r
185 else AliError(Form("No Setter found for FEE parameter : %s",name.Data()));
\r
187 //________________________________________________________________
\r
188 void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)
\r
190 // Set Pedestal Cut of individual channel
\r
191 if(board<kNCIUBoards && channel<kNChannels) {
\r
192 if(integrator) fPedestalCutOdd[board][channel] = val;
\r
193 else fPedestalCutEven[board][channel] = val;
\r
194 } else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
\r
196 //________________________________________________________________
\r
197 UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)
\r
199 // Get Pedestal Cut of individual channel
\r
200 if(board<kNCIUBoards && channel<kNChannels) {
\r
201 if(integrator) return(fPedestalCutOdd[board][channel]);
\r
202 else return(fPedestalCutEven[board][channel]);
\r
203 }else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
\r
206 //________________________________________________________________
\r
207 void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)
\r
209 // Set Pedestal of individual channel
\r
210 if(board<kNCIUBoards && channel<kNChannels) {
\r
211 if(integrator) fPedestalOdd[board][channel] = val;
\r
212 else fPedestalEven[board][channel] = val;
\r
213 } else AliError(Form("Impossible to write at : Board %d ; Channel %d ; Integrator %d ",board,channel,integrator));
\r
215 //________________________________________________________________
\r
216 UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)
\r
218 // Get Pedestal of individual channel
\r
219 if(board<kNCIUBoards && channel<kNChannels) {
\r
220 if(integrator) return(fPedestalOdd[board][channel]);
\r
221 else return(fPedestalEven[board][channel]);
\r
222 } else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
\r
225 //________________________________________________________________
\r
226 void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)
\r
228 // Set Delay of individual channel
\r
229 if(board<kNCIUBoards && channel<kNChannels) fDelayHit[board][channel] = val;
\r
230 else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
\r
232 //________________________________________________________________
\r
233 UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)
\r
235 // Get Delay of individual channel
\r
236 if(board<kNCIUBoards && channel<kNChannels) return(fDelayHit[board][channel]);
\r
237 else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
\r
240 //________________________________________________________________
\r
241 void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)
\r
243 // Set discriminator threshold
\r
244 if(board<kNCIUBoards && channel<kNChannels) fDiscriThr[board][channel] = val;
\r
245 else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
\r
247 //________________________________________________________________
\r
248 UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)
\r
250 // Get discriminator threshold
\r
251 if(board<kNCIUBoards && channel<kNChannels) return(fDiscriThr[board][channel]);
\r
252 else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
\r
255 //________________________________________________________________
\r
256 void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)
\r
258 // Set the channels enabled for Charge triggers
\r
259 if(board<kNCIUBoards && channel<kNChannels) fEnableCharge[board][channel] = val;
\r
260 else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
\r
262 //________________________________________________________________
\r
263 Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)
\r
265 // Get the channels enabled for Charge triggers
\r
266 if(board<kNCIUBoards && channel<kNChannels) return(fEnableCharge[board][channel]);
\r
267 else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
\r
270 //________________________________________________________________
\r
271 void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)
\r
273 // Set the channels enabled for Timing triggers
\r
274 if(board<kNCIUBoards && channel<kNChannels) fEnableTiming[board][channel] = val;
\r
275 else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
\r
277 //________________________________________________________________
\r
278 Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)
\r
280 // Get the channels enabled for Timing triggers
\r
281 if(board<kNCIUBoards && channel<kNChannels) return(fEnableTiming[board][channel]);
\r
282 else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
\r
285 //________________________________________________________________
\r
286 void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)
\r
288 // Set the trigger selected on the outputs to CTP
\r
289 if(output<kNTriggerOutputs) fTriggerSelected[output] = trigger;
\r
290 else AliError(Form("Trigger output number %d not valid",output));
\r
293 //________________________________________________________________
\r
294 void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)
\r
296 // Set Win clock of BB
\r
297 if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win1(clks[t],t);
\r
298 else AliFatal("Profil Clock1 Win1 Not defined.");
\r
300 //________________________________________________________________
\r
301 void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)
\r
303 // Set Win clock of BB
\r
304 if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win1(clks[t],t);
\r
305 else AliFatal("Profil Clock2 Win1 Not defined.");
\r
307 //________________________________________________________________
\r
308 void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)
\r
310 // Set Win clock of BB
\r
311 if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win1[board] = clk;
\r
312 else AliError(Form("Profil Clock1 Win1 of board %d is not valid : %d",board,clk));
\r
314 //________________________________________________________________
\r
315 void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)
\r
317 // Set Win clock of BB
\r
318 if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win1[board] = clk;
\r
319 else AliError(Form("Profil Clock2 Win1 of board %d is not valid",board));
\r
321 //________________________________________________________________
\r
322 void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)
\r
324 // Set Win clock of BG
\r
325 if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win2(clks[t],t);
\r
326 else AliFatal("Profil Clock1 Win2 Not defined.");
\r
328 //________________________________________________________________
\r
329 void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)
\r
331 // Set Win clock of BG
\r
332 if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win2(clks[t],t);
\r
333 else AliFatal("Profil Clock2 Win2 Not defined.");
\r
335 //________________________________________________________________
\r
336 void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)
\r
338 // Set Win clock of BG
\r
339 if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win2[board] = clk;
\r
340 else AliError(Form("Profil Clock1 Win2 of board %d is not valid",board));
\r
342 //________________________________________________________________
\r
343 void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)
\r
345 // Set Win clock of BG
\r
346 if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win2[board] = clk;
\r
347 else AliError(Form("Profil Clock2 Win2 of board %d is not valid",board));
\r
349 //________________________________________________________________
\r
350 void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)
\r
352 // Set Delay for Win clock of BB
\r
353 if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win1(delays[t],t);
\r
354 else AliFatal("Profil Clock1 Win1 Delays Not defined.");
\r
356 //________________________________________________________________
\r
357 void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)
\r
359 // Set Delay for Win clock of BB
\r
361 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
362 delay = delay & 0x3FF;
\r
364 if(board<kNCIUBoards) fDelayClk1Win1[board] = delay;
\r
365 else AliError("Trying to write out of the array");
\r
367 //________________________________________________________________
\r
368 void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)
\r
370 // Set Delay for Win clock of BB
\r
371 if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win1(delays[t],t);
\r
372 else AliFatal("Profil Clock2 Win1 Delays Not defined.");
\r
374 //________________________________________________________________
\r
375 void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)
\r
377 // Set Delay for Win clock of BB
\r
379 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
380 delay = delay & 0x3FF;
\r
382 if(board<kNCIUBoards) fDelayClk2Win1[board] = delay;
\r
383 else AliError("Trying to write out of the array");
\r
385 //________________________________________________________________
\r
386 void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)
\r
388 // Set Delay for Win clock of BG
\r
389 if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win2(delays[t],t);
\r
390 else AliFatal("Profil Clock1 Win2 Delays Not defined.");
\r
392 //________________________________________________________________
\r
393 void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)
\r
395 // Set Delay for Win clock of BG
\r
397 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
398 delay = delay & 0x3FF;
\r
400 if(board<kNCIUBoards) fDelayClk1Win2[board] = delay;
\r
401 else AliError("Trying to write out of the array");
\r
403 //________________________________________________________________
\r
404 void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)
\r
406 // Set Delay for Win clock of BG
\r
407 if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win2(delays[t],t);
\r
408 else AliFatal("Profil Clock2 Win2 Delays Not defined.");
\r
410 //________________________________________________________________
\r
411 void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)
\r
413 // Set Delay for Win clock of BG
\r
415 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
416 delay = delay & 0x3FF;
\r
418 if(board<kNCIUBoards) fDelayClk2Win2[board] = delay;
\r
419 else AliError("Trying to write out of the array");
\r
421 //________________________________________________________________
\r
422 void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){
\r
423 // Set Latch Win clock for BB
\r
424 if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin1(latchs[t],t);
\r
425 else AliFatal("Latch Win1 profil Not defined.");
\r
427 //________________________________________________________________
\r
428 void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)
\r
430 // Set Latch Win clock for BB
\r
431 if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin1[board] = latch;
\r
432 else AliError(Form("Latch Win1 profil of board %d is not valid",board));
\r
434 //________________________________________________________________
\r
435 void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){
\r
436 // Set Latch Win clock for BG
\r
437 if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin2(latchs[t],t);
\r
438 else AliFatal("Latch Win2 profil Not defined.");
\r
440 //________________________________________________________________
\r
441 void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)
\r
443 // Set Latch Win clock for BG
\r
444 if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin2[board] = latch;
\r
445 else AliError(Form("Latch Win2 profil of board %d is not valid",board));
\r
447 //________________________________________________________________
\r
448 void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){
\r
449 // Set Reset Win clock for BB
\r
450 if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin1(resets[t],t);
\r
451 else AliFatal("Reset Win1 profil Not defined.");
\r
453 //________________________________________________________________
\r
454 void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)
\r
456 // Set Reset Win clock for BB
\r
457 if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin1[board] = reset;
\r
458 else AliError(Form("Reset Win1 profil of board %d is not valid",board));
\r
460 //________________________________________________________________
\r
461 void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){
\r
462 // Set Reset Win clock for BG
\r
463 if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin2(resets[t],t);
\r
464 else AliFatal("Reset Win2 profil Not defined.");
\r
466 //________________________________________________________________
\r
467 void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)
\r
469 // Set Reset Win clock for BG
\r
470 if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin2[board] = reset;
\r
471 else AliError(Form("Reset Win2 profil of board %d is not valid",board));
\r
473 //________________________________________________________________
\r
474 void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){
\r
475 // Set Pedestal Subtraction Parameter
\r
476 if(peds) for(int t=0; t<kNCIUBoards; t++) SetPedestalSubtraction(peds[t],t);
\r
477 else AliFatal("Pedestal Subtraction Not defined.");
\r
480 //________________________________________________________________
\r
481 void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)
\r
483 // Set Pedestal Subtraction Parameter
\r
484 if((board<kNCIUBoards)) fPedestalSubtraction[board] = ped;
\r
485 else AliError(Form("Board %d is not valid",board));
\r
487 //________________________________________________________________
\r
488 void AliVZEROTriggerData::SetTimeResolution(UShort_t *resols){
\r
489 // Set Time Resolution of the TDC
\r
490 if(resols) for(int t=0; t<kNCIUBoards; t++) SetTimeResolution(resols[t],t);
\r
491 else AliFatal("Time Resolution not defined.");
\r
494 //________________________________________________________________
\r
495 void AliVZEROTriggerData::SetTimeResolution(UShort_t resol, Int_t board)
\r
497 // Set Time Resolution of the TDC
\r
498 if((board<kNCIUBoards)) {
\r
501 fTimeResolution[board] = 25./256.;
\r
504 fTimeResolution[board] = 25./128.;
\r
507 fTimeResolution[board] = 25./64.;
\r
510 fTimeResolution[board] = 25./32.;
\r
513 fTimeResolution[board] = 25./16.;
\r
516 fTimeResolution[board] = 25./8.;
\r
519 fTimeResolution[board] = 6.25;
\r
522 fTimeResolution[board] = 12.5;
\r
525 } else AliError(Form("Board %d is not valid",board));
\r
527 //________________________________________________________________
\r
528 void AliVZEROTriggerData::SetWidthResolution(UShort_t *resols){
\r
529 // Set Time Width Resolution of the TDC
\r
530 if(resols) for(int t=0; t<kNCIUBoards; t++) SetWidthResolution(resols[t],t);
\r
531 else AliFatal("Width Resolution not defined.");
\r
534 //________________________________________________________________
\r
535 void AliVZEROTriggerData::SetWidthResolution(UShort_t resol, Int_t board)
\r
537 // Set Time Width Resolution of the TDC
\r
538 if((board<kNCIUBoards)){
\r
541 fWidthResolution[board] = 25./256.;
\r
544 fWidthResolution[board] = 25./128.;
\r
547 fWidthResolution[board] = 25./64.;
\r
550 fWidthResolution[board] = 25./32.;
\r
553 fWidthResolution[board] = 25./16.;
\r
556 fWidthResolution[board] = 25./8.;
\r
559 fWidthResolution[board] = 6.25;
\r
562 fWidthResolution[board] = 12.5;
\r
565 fWidthResolution[board] = 25.;
\r
568 fWidthResolution[board] = 50.;
\r
571 fWidthResolution[board] = 100.;
\r
574 fWidthResolution[board] = 200.;
\r
577 fWidthResolution[board] = 400.;
\r
580 fWidthResolution[board] = 800.;
\r
584 }else AliError(Form("Board %d is not valid",board));
\r
587 //________________________________________________________________
\r
588 Bool_t AliVZEROTriggerData::IsClkValid(UShort_t clock) const {
\r
589 // Check if the given clock has a valid profil.
\r
591 Bool_t isValid = kTRUE;
\r
592 Short_t risingEdge = 0;
\r
593 Short_t fallingEdge = 0;
\r
594 for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;
\r
596 if(word[0] != word[4]){
\r
597 if(word[4]) fallingEdge++;
\r
600 for(int i=1 ; i<5 ; i++){
\r
601 if(word[i] != word[i-1]) {
\r
602 if(word[i-1]) fallingEdge++;
\r
606 if((fallingEdge>1)||(risingEdge>1)) isValid = kFALSE;
\r
607 if(((risingEdge==0)&&(fallingEdge==0)) &&(!word[0])) isValid = kFALSE;
\r