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