]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDSaxHandler.cxx
Coding rules
[u/mrichter/AliRoot.git] / TRD / AliTRDSaxHandler.cxx
CommitLineData
6b36d985 1/*************************************************************************\r
2 * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *\r
3 * * *\r
4 * * Author: The ALICE Off-line Project. *\r
5 * * Contributors are mentioned in the code where appropriate. *\r
6 * * *\r
7 * * Permission to use, copy, modify and distribute this software and its *\r
8 * * documentation strictly for non-commercial purposes is hereby granted *\r
9 * * without fee, provided that the above copyright notice appears in all *\r
10 * * copies and that both the copyright notice and this permission notice *\r
11 * * appear in the supporting documentation. The authors make no claims *\r
12 * * about the suitability of this software for any purpose. It is *\r
13 * * provided "as is" without express or implied warranty. *\r
14 * **************************************************************************/\r
15\r
16/* $Id: AliTRDSaxHandler.cxx 26327 2008-06-02 15:36:18Z cblume $ */\r
17\r
18////////////////////////////////////////////////////////////////////////////\r
19// //\r
20// The SAX XML file handler used in the preprocessor //\r
21// //\r
22// Author: //\r
23// Frederick Kramer (kramer@ikf.uni-frankfurt.de) //\r
24// //\r
25////////////////////////////////////////////////////////////////////////////\r
26\r
6b36d985 27#include <TList.h>\r
28#include <TXMLAttr.h>\r
6b36d985 29#include <TObjArray.h>\r
30\r
31#include "AliLog.h"\r
32\r
33#include "AliTRDSaxHandler.h"\r
34#include "AliTRDgeometry.h"\r
35\r
36#include "Cal/AliTRDCalDCS.h"\r
37#include "Cal/AliTRDCalDCSFEE.h"\r
38#include "Cal/AliTRDCalDCSPTR.h"\r
39#include "Cal/AliTRDCalDCSGTU.h"\r
40\r
41ClassImp(AliTRDSaxHandler)\r
6af58a56 42 \r
6b36d985 43//_____________________________________________________________________________\r
44AliTRDSaxHandler::AliTRDSaxHandler()\r
45 :TObject()\r
46 ,fHandlerStatus(0)\r
47 ,fNDCSPTR(0)\r
48 ,fNDCSGTU(0)\r
49 ,fFEEArr(new TObjArray(540))\r
50 ,fPTRArr(new TObjArray(6))\r
51 ,fGTUArr(new TObjArray(19))\r
52 ,fSystem(0)\r
6af58a56 53 ,fInsideRstate(0)\r
6b36d985 54 ,fCurrentSM(0)\r
55 ,fCurrentStack(0)\r
6af58a56 56 ,fCurrentROB(-1)\r
57 ,fCurrentMCM(-1)\r
6b36d985 58 ,fContent(0)\r
59 ,fDCSFEEObj(0)\r
60 ,fDCSPTRObj(0)\r
61 ,fDCSGTUObj(0)\r
62 ,fCalDCSObj(new AliTRDCalDCS())\r
63{\r
64 //\r
65 // AliTRDSaxHandler default constructor\r
66 //\r
67 fFEEArr->SetOwner();\r
68 fPTRArr->SetOwner();\r
69 fGTUArr->SetOwner();\r
70}\r
71\r
72//_____________________________________________________________________________\r
73AliTRDSaxHandler::AliTRDSaxHandler(const AliTRDSaxHandler &sh)\r
74 :TObject(sh)\r
75 ,fHandlerStatus(0)\r
76 ,fNDCSPTR(0)\r
77 ,fNDCSGTU(0)\r
78 ,fFEEArr(0)\r
79 ,fPTRArr(0)\r
80 ,fGTUArr(0)\r
81 ,fSystem(0)\r
6af58a56 82 ,fInsideRstate(0)\r
6b36d985 83 ,fCurrentSM(0)\r
84 ,fCurrentStack(0)\r
6af58a56 85 ,fCurrentROB(-1)\r
86 ,fCurrentMCM(-1)\r
6b36d985 87 ,fContent(0)\r
88 ,fDCSFEEObj(0)\r
89 ,fDCSPTRObj(0)\r
90 ,fDCSGTUObj(0)\r
91 ,fCalDCSObj(0)\r
92{\r
93 //\r
94 // AliTRDSaxHandler copy constructor\r
95 //\r
96}\r
97\r
98//_____________________________________________________________________________\r
99AliTRDSaxHandler &AliTRDSaxHandler::operator=(const AliTRDSaxHandler &sh)\r
100{\r
101 //\r
102 // Assignment operator\r
103 //\r
104 if (&sh == this) return *this;\r
105\r
106 new (this) AliTRDSaxHandler(sh);\r
107 return *this;\r
108}\r
109\r
110//_____________________________________________________________________________\r
111AliTRDSaxHandler::~AliTRDSaxHandler()\r
112{\r
113 //\r
114 // AliTRDSaxHandler destructor\r
115 //\r
116\r
117 if (fFEEArr) {\r
118 delete fFEEArr;\r
119 fFEEArr = 0x0;\r
120 }\r
121 if (fPTRArr) {\r
122 delete fPTRArr;\r
123 fPTRArr = 0x0;\r
124 }\r
125 if (fGTUArr) {\r
126 delete fGTUArr;\r
127 fGTUArr = 0x0;\r
128 }\r
129 if (fCalDCSObj) {\r
130 delete fCalDCSObj;\r
131 fCalDCSObj = 0x0;\r
132 }\r
133\r
134}\r
135\r
136//_____________________________________________________________________________\r
137AliTRDCalDCS* AliTRDSaxHandler::GetCalDCSObj()\r
138{\r
139 // put the arrays in the global calibration object and return this\r
6b36d985 140 fCalDCSObj->SetFEEArr(fFEEArr);\r
141 fCalDCSObj->SetPTRArr(fPTRArr);\r
142 fCalDCSObj->SetGTUArr(fGTUArr);\r
143 return fCalDCSObj;\r
144}\r
145\r
146//_____________________________________________________________________________\r
147void AliTRDSaxHandler::OnStartDocument()\r
148{\r
149 // if something should happen right at the beginning of the\r
150 // XML document, this must happen here\r
151}\r
152\r
153//_____________________________________________________________________________\r
154void AliTRDSaxHandler::OnEndDocument()\r
155{\r
156 // if something should happen at the end of the XML document\r
157 // this must be done here\r
158}\r
159\r
160//_____________________________________________________________________________\r
161void AliTRDSaxHandler::OnStartElement(const char *name, const TList *attributes)\r
162{\r
163 // when a new XML element is found, it is processed here\r
164 fContent = "";\r
165 Int_t dcsId = 0;\r
166 TString strName = name;\r
167 TString dcsTitle = "";\r
168\r
169 // set the current system if necessary\r
170 if (strName.Contains("FEE")) fSystem = kInsideFEE;\r
171 if (strName.Contains("PTR")) fSystem = kInsidePTR;\r
172 if (strName.Contains("GTU")) fSystem = kInsideGTU;\r
173\r
6af58a56 174 // set if we are inside rstate \r
175 // (in principle not necessary - just to be more safe against stupid tags)\r
176 if (strName.Contains("rstate")) fInsideRstate = 1;\r
177\r
6b36d985 178 // get the attributes of the element\r
179 TXMLAttr *attr;\r
180 TIter next(attributes);\r
181 while ((attr = (TXMLAttr*) next())) {\r
182 TString attribName = attr->GetName();\r
183 if (attribName.Contains("id") && strName.Contains("DCS")) {\r
184 dcsTitle = name;\r
185 dcsId = atoi(attr->GetValue());\r
186 }\r
187 if (attribName.Contains("roc") && strName.Contains("ack")) {\r
188 if (atoi(attr->GetValue()) != fDCSFEEObj->GetDCSid())\r
189 fDCSFEEObj->SetStatusBit(3); // consistence check\r
190 }\r
6af58a56 191 if (attribName.Contains("rob") && (fInsideRstate == 1)) {\r
192 fCurrentROB = atoi(attr->GetValue());\r
193 }\r
194 if (attribName.Contains("mcm") && (fInsideRstate == 1)) {\r
195 fCurrentMCM = atoi(attr->GetValue());\r
196 }\r
6b36d985 197 if (attribName.Contains("sm") && strName.Contains("DCS")) {\r
198 fCurrentSM = atoi(attr->GetValue()); // only for GTU/PTR\r
199 }\r
200 if (attribName.Contains("id") && strName.Contains("STACK")) {\r
201 fCurrentStack = atoi(attr->GetValue()); // only for GTU/PTR\r
202 }\r
203 }\r
204\r
205 // if there is a new DCS element put it in the correct array\r
206 if (strName.Contains("DCS")) {\r
207 if (fSystem == kInsideFEE) {\r
208 fDCSFEEObj = new AliTRDCalDCSFEE(name,dcsTitle);\r
209 fDCSFEEObj->SetDCSid(dcsId);\r
210 }\r
211 if (fSystem == kInsidePTR) {\r
212 fDCSPTRObj = new AliTRDCalDCSPTR(name,dcsTitle);\r
213 fDCSPTRObj->SetDCSid(dcsId);\r
214 }\r
215 if (fSystem == kInsideGTU) {\r
216 fDCSGTUObj = new AliTRDCalDCSGTU(name,dcsTitle);\r
217 fDCSGTUObj->SetDCSid(dcsId);\r
218 }\r
219 }\r
220}\r
221\r
222//_____________________________________________________________________________\r
223void AliTRDSaxHandler::OnEndElement(const char *name)\r
224{\r
225 // do everything that needs to be done when an end tag of an element is found\r
226 TString strName = name;\r
227 \r
228 // if done with this DCS board, put it in the correct array\r
229 // no check for </ack> necessary since this check is done during XML validation\r
230 if (strName.Contains("DCS")) {\r
231 if (fSystem == kInsideFEE) {\r
232 Int_t detID = 0;\r
233 if (fDCSFEEObj->GetStatusBit() == 0) {\r
234 // if there were no errors (StatusBit==0) the following should match\r
235 detID = fDCSFEEObj->GetDCSid();\r
236 AliTRDgeometry aliGeo;\r
237 Int_t calDetID = aliGeo.GetDetector(fDCSFEEObj->GetLayer(),\r
238 fDCSFEEObj->GetStack(),\r
239 fDCSFEEObj->GetSM());\r
240 if (detID != calDetID) fDCSFEEObj->SetStatusBit(4);\r
241 } else {\r
242 // if the dcs board didn't properly respond, don't compare\r
243 detID = fDCSFEEObj->GetDCSid();\r
244 }\r
245 fFEEArr->AddAt(fDCSFEEObj,detID);\r
246 }\r
247 if (fSystem == kInsidePTR) {\r
248 fPTRArr->AddAt(fDCSPTRObj,fNDCSPTR);\r
249 fNDCSPTR++;\r
250 }\r
251 if (fSystem == kInsideGTU) {\r
252 fGTUArr->AddAt(fDCSGTUObj,fNDCSGTU);\r
253 fNDCSGTU++;\r
254 }\r
255 fCurrentSM = 99; // 99 for no SM set\r
256 fDCSFEEObj = 0; // just to be sure\r
257 return;\r
258 }\r
259\r
260 // done with this stack?\r
261 if (strName.Contains("STACK")) {\r
262 fCurrentStack = 99; // 99 for no stack set\r
263 }\r
264\r
6af58a56 265 // outside of rstate again?\r
266 if (strName.Contains("rstate")) {\r
267 fInsideRstate = 0;\r
268 fCurrentROB = -1;\r
269 fCurrentMCM = -1;\r
270 }\r
271 if (strName.Contains("ro-board")) fCurrentROB = -1;\r
272 \r
6b36d985 273 // store informations of the FEE DCS-Board\r
274 if (fSystem == kInsideFEE) {\r
6af58a56 275 if (strName.Contains("DNR")) fDCSFEEObj->SetStatusBit(fContent.Atoi());\r
276 if (strName.Contains("CFGNME")) fDCSFEEObj->SetConfigName(fContent);\r
277 if (strName.Contains("CFGTAG")) fDCSFEEObj->SetConfigTag(fContent.Atoi());\r
278 if (strName.Contains("CFGVRSN")) fDCSFEEObj->SetConfigVersion(fContent);\r
279 if (strName.Contains("NTB")) fDCSFEEObj->SetNumberOfTimeBins(fContent.Atoi());\r
280 if (strName.Contains("SM-ID")) fDCSFEEObj->SetSM(fContent.Atoi());\r
281 if (strName.Contains("STACK-ID")) fDCSFEEObj->SetStack(fContent.Atoi());\r
282 if (strName.Contains("LAYER-ID")) fDCSFEEObj->SetLayer(fContent.Atoi());\r
6b36d985 283 if (strName.Contains("SINGLEHITTHRES")) fDCSFEEObj->SetSingleHitThres(fContent.Atoi());\r
6af58a56 284 if (strName.Contains("THRPADCLSTHRS")) fDCSFEEObj->SetThreePadClustThres(fContent.Atoi());\r
285 if (strName.Contains("SELNOZS")) fDCSFEEObj->SetSelectiveNoZS(fContent.Atoi());\r
286 if (strName.Contains("FASTSTATNOISE")) fDCSFEEObj->SetFastStatNoise(fContent.Atoi());\r
287 if (strName.Contains("FILTWEIGHT")) fDCSFEEObj->SetTCFilterWeight(fContent.Atoi());\r
6b36d985 288 if (strName.Contains("FILTSHRTDCYPRM")) fDCSFEEObj->SetTCFilterShortDecPar(fContent.Atoi());\r
6af58a56 289 if (strName.Contains("FILTLNGDCYPRM")) fDCSFEEObj->SetTCFilterLongDecPar(fContent.Atoi());\r
290 if (strName.Contains("FLTR")) fDCSFEEObj->SetFilterType(fContent);\r
291 if (strName.Contains("READOUTPAR")) fDCSFEEObj->SetReadoutParam(fContent);\r
292 if (strName.Contains("TESTPATTERN")) fDCSFEEObj->SetTestPattern(fContent);\r
293 if (strName.Contains("TRCKLTMODE")) fDCSFEEObj->SetTrackletMode(fContent);\r
294 if (strName.Contains("TRCKLTDEF")) fDCSFEEObj->SetTrackletDef(fContent);\r
295 if (strName.Contains("TRIGGERSETUP")) fDCSFEEObj->SetTriggerSetup(fContent);\r
296 if (strName.Contains("ADDOPTIONS")) fDCSFEEObj->SetAddOptions(fContent);\r
297 if (fInsideRstate == 1) {\r
298 if (fCurrentROB>=0 && fCurrentMCM>=0) {\r
299 if (strName.Contains("gsm")) fDCSFEEObj->SetMCMGlobalState(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
300 if (strName.Contains("ni")) fDCSFEEObj->SetMCMStateNI(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
301 if (strName.Contains("ev")) fDCSFEEObj->SetMCMEventCnt(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
302 if (strName.Contains("ptrg")) fDCSFEEObj->SetMCMPtCnt(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
303 }\r
304 }\r
6b36d985 305 }\r
306\r
307 \r
308 // store pretrigger informations\r
309 if (fSystem == kInsidePTR) {\r
310 // no informations available yet\r
311 }\r
312 // store GTU informations\r
313 if (fSystem == kInsideGTU) {\r
314 if (strName.Contains("SMMASK"))\r
315 fHandlerStatus = fDCSGTUObj->SetSMMask(fContent);\r
316 if (strName.Contains("LINKMASK")) \r
317 fHandlerStatus = fDCSGTUObj->SetLinkMask(fCurrentSM, fCurrentStack, fContent);\r
318 if (strName.Contains("STMASK"))\r
319 fDCSGTUObj->SetStackMaskBit(fCurrentSM, fCurrentStack, fContent.Atoi());\r
320 }\r
321}\r
322\r
323//_____________________________________________________________________________\r
324void AliTRDSaxHandler::OnCharacters(const char *characters)\r
325{\r
326 // copy the the text content of an XML element\r
327 fContent = characters;\r
328}\r
329\r
330//_____________________________________________________________________________\r
331void AliTRDSaxHandler::OnComment(const char* /*text*/)\r
332{\r
333 // comments within the XML file are ignored\r
334}\r
335\r
336//_____________________________________________________________________________\r
337void AliTRDSaxHandler::OnWarning(const char *text)\r
338{\r
339 // process warnings here\r
340 AliInfo(Form("Warning: %s",text));\r
341}\r
342\r
343//_____________________________________________________________________________\r
344void AliTRDSaxHandler::OnError(const char *text)\r
345{\r
346 // process errors here\r
347 AliError(Form("Error: %s",text));\r
348}\r
349\r
350//_____________________________________________________________________________\r
351void AliTRDSaxHandler::OnFatalError(const char *text)\r
352{\r
353 // process fatal errors here\r
354 AliError(Form("Fatal error: %s",text)); // use AliFatal?\r
355}\r
356\r
357//_____________________________________________________________________________\r
358void AliTRDSaxHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/)\r
359{\r
360 // process character data blocks here\r
361 // not implemented and should not be used here\r
362}\r
363\r