1 /*************************************************************************
\r
2 * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
\r
4 * * Author: The ALICE Off-line Project. *
\r
5 * * Contributors are mentioned in the code where appropriate. *
\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
16 /* $Id: AliTRDSaxHandler.cxx 26327 2008-06-02 15:36:18Z cblume $ */
\r
18 ////////////////////////////////////////////////////////////////////////////
\r
20 // The SAX XML file handler used in the preprocessor //
\r
23 // Frederick Kramer (kramer@ikf.uni-frankfurt.de) //
\r
25 ////////////////////////////////////////////////////////////////////////////
\r
28 #include <TXMLAttr.h>
\r
29 #include <TObjArray.h>
\r
34 #include "AliTRDSaxHandler.h"
\r
35 #include "AliTRDgeometry.h"
\r
37 #include "Cal/AliTRDCalDCS.h"
\r
38 #include "Cal/AliTRDCalDCSFEE.h"
\r
39 #include "Cal/AliTRDCalDCSPTR.h"
\r
40 #include "Cal/AliTRDCalDCSGTU.h"
\r
42 ClassImp(AliTRDSaxHandler)
\r
44 //_____________________________________________________________________________
\r
45 AliTRDSaxHandler::AliTRDSaxHandler()
\r
50 ,fFEEArr(new TObjArray(540))
\r
51 ,fPTRArr(new TObjArray(6))
\r
63 ,fCalDCSObj(new AliTRDCalDCS())
\r
66 ,fInsideBoardInfo(false)
\r
73 // AliTRDSaxHandler default constructor
\r
75 fFEEArr->SetOwner();
\r
76 fPTRArr->SetOwner();
\r
79 //_____________________________________________________________________________
\r
80 AliTRDSaxHandler::AliTRDSaxHandler(const AliTRDSaxHandler &sh)
\r
101 ,fInsideBoardInfo(false)
\r
108 // AliTRDSaxHandler copy constructor
\r
112 //_____________________________________________________________________________
\r
113 AliTRDSaxHandler &AliTRDSaxHandler::operator=(const AliTRDSaxHandler &sh)
\r
116 // Assignment operator
\r
118 if (&sh == this) return *this;
\r
120 new (this) AliTRDSaxHandler(sh);
\r
124 //_____________________________________________________________________________
\r
125 AliTRDSaxHandler::~AliTRDSaxHandler()
\r
128 // AliTRDSaxHandler destructor
\r
150 //_____________________________________________________________________________
\r
151 AliTRDCalDCS* AliTRDSaxHandler::GetCalDCSObj()
\r
153 // put the arrays in the global calibration object and return this
\r
154 fCalDCSObj->SetFEEArr(fFEEArr);
\r
155 fCalDCSObj->SetPTRArr(fPTRArr);
\r
156 fCalDCSObj->SetGTUObj(fDCSGTUObj);
\r
160 //_____________________________________________________________________________
\r
161 void AliTRDSaxHandler::OnStartDocument()
\r
163 // if something should happen right at the beginning of the
\r
164 // XML document, this must happen here
\r
167 //_____________________________________________________________________________
\r
168 void AliTRDSaxHandler::OnEndDocument()
\r
170 // if something should happen at the end of the XML document
\r
171 // this must be done here
\r
174 //_____________________________________________________________________________
\r
175 bool AliTRDSaxHandler::CompareString(TString str, const char *str2)
\r
177 // compre strings, ignoring case
\r
178 return !(bool)str.CompareTo(str2,str.kIgnoreCase);
\r
179 // returns true if they are the same, else false
\r
183 //_____________________________________________________________________________
\r
184 void AliTRDSaxHandler::OnStartElement(const char *name, const TList *attributes)
\r
186 // when a new XML element is found, it is processed here
\r
187 fContent = ""; // Technically <p> This <em>is</em> ok but would be a problem here</p>
\r
189 TString tagName = name;
\r
190 TString dcsTitle = "";
\r
192 // set the current system if necessary
\r
193 if (CompareString(tagName, "FEE")) fSystem = kInsideFEE;
\r
194 if (CompareString(tagName, "PTR")) fSystem = kInsidePTR;
\r
195 if (CompareString(tagName, "GTU")) {
\r
196 fSystem = kInsideGTU;
\r
197 fDCSGTUObj = new AliTRDCalDCSGTU(tagName,tagName);
\r
200 if (fSystem == kInsideGTU) {
\r
201 // cout << "Start: " << tagName << " " << fLevel1Tag << " " << fLevel2Tag << " " << fInsideBoardInfo << "\n";
\r
202 if (CompareString(tagName, "tgu")) fLevel1Tag = kInsideTgu;
\r
203 if (CompareString(tagName, "board_info")) {
\r
204 fInsideBoardInfo = true;
\r
205 fBoardInfo = new AliTRDCalDCSGTUBoardInfo(tagName,tagName);
\r
207 if (CompareString(tagName(0,tagName.Length()-3), "segment")) {
\r
208 fSegment = new AliTRDCalDCSGTUSegment(tagName,tagName);
\r
209 fSegment->SetId(TString(tagName(8,2)).Atoi());
\r
210 fLevel1Tag = kInsideSegment;
\r
212 if (fLevel1Tag == kInsideTgu) {
\r
213 if (CompareString(tagName, "ctp_opc")) fCtpOpc = new AliTRDCalDCSGTUCtpOpc(tagName,tagName);
\r
214 } else if (fLevel1Tag == kInsideSegment) {
\r
215 if (CompareString(tagName, "smu")) {
\r
216 fLevel2Tag = kInsideSmu;
\r
218 if (CompareString(tagName(0,3), "tmu")) {
\r
219 fTmu = new AliTRDCalDCSGTUTmu(tagName,tagName);
\r
220 fTmu->SetId(TString(tagName(4,2)).Atoi());
\r
221 fLevel2Tag = kInsideTmu;
\r
224 } else if (fSystem == kInsideFEE) {
\r
225 if (CompareString(tagName, "gaintbl")) fLevel1Tag = kInsideGainTable;
\r
229 // set if we are inside rstate
\r
230 // (in principle not necessary - just to be more safe against stupid tags)
\r
231 if (CompareString(tagName, "rstate")) fInsideRstate = 1;
\r
233 // get the attributes of the element
\r
235 TIter next(attributes);
\r
236 while ((attr = (TXMLAttr*) next())) {
\r
237 TString attribName = attr->GetName();
\r
238 TString attribValue = attr->GetValue();
\r
239 if (fSystem == kInsideFEE && fLevel1Tag == kInsideNone) {
\r
240 if (CompareString(attribName, "id") && CompareString(tagName, "DCS")) {
\r
242 dcsId = atoi(attr->GetValue());
\r
244 if (CompareString(attribName, "roc") && CompareString(tagName, "ack")) {
\r
245 if (attribValue.Atoi() != fDCSFEEObj->GetDCSid())
\r
246 fDCSFEEObj->SetStatusBit(3); // consistency check
\r
248 if (CompareString(attribName, "rob") && CompareString(tagName, "ro-board") && (fInsideRstate == 1)) {
\r
249 fCurrentROB = attribValue.Atoi();
\r
251 if (CompareString(attribName, "mcm") && CompareString(tagName, "m") && (fInsideRstate == 1)) {
\r
252 fCurrentMCM = attribValue.Atoi();
\r
254 if (CompareString(attribName, "sm") && CompareString(tagName, "DCS")) {
\r
255 fCurrentSM = attribValue.Atoi(); // only for GTU/PTR
\r
257 if (CompareString(attribName, "id") && CompareString(tagName, "STACK")) {// hmmmm not exist?
\r
258 fCurrentStack = attribValue.Atoi(); // only for GTU/PTR
\r
260 } else if (fSystem == kInsideFEE && fLevel1Tag == kInsideGainTable) {
\r
261 if (CompareString(tagName, "roc") && CompareString(attribName, "type")) fDCSFEEObj->SetGainTableRocType(attribValue);
\r
262 if (CompareString(tagName, "roc") && CompareString(attribName, "serial")) fDCSFEEObj->SetGainTableRocSerial(attribValue.Atoi());
\r
263 if (CompareString(tagName, "mcm") && CompareString(attribName, "rob")) fCurrentROB = attribValue.Atoi();
\r
264 if (CompareString(tagName, "mcm") && CompareString(attribName, "pos")) fCurrentMCM = attribValue.Atoi();
\r
265 if (CompareString(tagName, "adc") && CompareString(attribName, "id")) fCurrentADC = attribValue.Atoi();
\r
267 } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideNone) {
\r
268 if (CompareString(tagName, "publisher")) {
\r
269 if (CompareString(attribName, "at")) fDCSGTUObj->SetSORFlag(attribValue.Atoi());
\r
270 if (CompareString(attribName, "serial")) fDCSGTUObj->SetSerial(attribValue.Atoi());
\r
271 if (CompareString(attribName, "runnr")) fDCSGTUObj->SetRunNumber(attribValue.Atoi());
\r
273 } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideTgu) {
\r
274 if (CompareString(tagName, "from")) {
\r
275 if (CompareString(attribName, "at")) fDCSGTUObj->GetTgu()->SetFromSORFlag(attribValue.Atoi());
\r
276 if (CompareString(attribName, "runnr")) fDCSGTUObj->GetTgu()->SetFromRunNumber(attribValue.Atoi());
\r
277 if (CompareString(attribName, "child")) fDCSGTUObj->GetTgu()->SetFromChild(attribValue.Atoi());
\r
279 if (CompareString(tagName, "segmentmask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetSegmentMask(attribValue);
\r
280 if (CompareString(tagName, "busymask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetBusyMask(attribValue);
\r
281 if (CompareString(tagName, "contribmask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetContribMask(attribValue);
\r
283 if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "id")) fCtpOpc->SetId(attribValue.Atoi());
\r
284 if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "opcode")) fCtpOpc->SetOpcode(attribValue.Atoi());
\r
285 if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "direction")) fCtpOpc->SetDirection(attribValue.Atoi());
\r
286 if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "inverted")) fCtpOpc->SetInverted(attribValue.Atoi());
\r
287 if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "delay")) fCtpOpc->SetDelay(attribValue.Atoi());
\r
288 if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "connected")) fCtpOpc->SetConnected(attribValue.Atoi());
\r
290 } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideSegment) {
\r
291 if (CompareString(tagName, "from")) {
\r
292 if (CompareString(attribName, "at")) fSegment->SetFromSORFlag(attribValue.Atoi());
\r
293 if (CompareString(attribName, "runnr")) fSegment->SetFromRunNumber(attribValue.Atoi());
\r
294 if (CompareString(attribName, "child")) fSegment->SetFromChild(attribValue.Atoi());
\r
296 if (fLevel2Tag == kInsideSmu) {
\r
297 if (CompareString(tagName, "stackmask") && CompareString(attribName, "value")) fSegment->SetSmuStackMask(attribValue);
\r
298 if (CompareString(tagName, "tracklets") && CompareString(attribName, "send")) fSegment->SetSmuTracklets(attribValue.Atoi());
\r
299 if (CompareString(tagName, "tracks") && CompareString(attribName, "send")) fSegment->SetSmuTracks(attribValue.Atoi());
\r
300 if (CompareString(tagName, "idelay") && CompareString(attribName, "value")) fSegment->SetSmuIdelay(attribValue.Atoi());
\r
301 if (CompareString(tagName, "ttc_emulator") && CompareString(attribName, "enable")) fSegment->SetSmuTtcEmulatorEnable(attribValue.Atoi());
\r
303 if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l1_low"))
\r
304 fSegment->SetSmuTriggerWindowL1Low(attribValue.Atoi());
\r
305 if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l1_high"))
\r
306 fSegment->SetSmuTriggerWindowL1High(attribValue.Atoi());
\r
307 if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l2_low"))
\r
308 fSegment->SetSmuTriggerWindowL2Low(attribValue.Atoi());
\r
309 if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l2_high"))
\r
310 fSegment->SetSmuTriggerWindowL2High(attribValue.Atoi());
\r
312 } else if (fLevel2Tag == kInsideTmu) {
\r
313 if (CompareString(tagName, "linkmask") && CompareString(attribName, "value")) fTmu->SetLinkMask(attribValue);
\r
314 if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "enable"))
\r
315 fTmu->SetPatternGeneratorEnable(attribValue.Atoi());
\r
316 if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "datawords"))
\r
317 fTmu->SetPatternGeneratorDataWords(attribValue.Atoi());
\r
318 if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "trackletwords"))
\r
319 fTmu->SetPatternGeneratorTrackletWords(attribValue.Atoi());
\r
323 if (fInsideBoardInfo) {
\r
324 // cout << tagName << ": " << attribName << "=" << attribValue << "\n";
\r
325 if (CompareString(tagName, "board_info") && CompareString(attribName, "board_id")) fBoardInfo->SetId(attribValue);
\r
326 if (CompareString(tagName, "board_info") && CompareString(attribName, "design_type")) fBoardInfo->SetType(attribValue.Atoi());
\r
327 if (CompareString(tagName, "board_info") && CompareString(attribName, "pci_ga")) fBoardInfo->SetPciGa(attribValue.Atoi());
\r
328 if (CompareString(tagName, "hardware") && CompareString(attribName, "date")) fBoardInfo->SetHwDate(attribValue);
\r
329 if (CompareString(tagName, "hardware") && CompareString(attribName, "rev")) fBoardInfo->SetHwRev(attribValue.Atoi());
\r
330 if (CompareString(tagName, "hardware") && CompareString(attribName, "clean")) fBoardInfo->SetHwClean(attribValue.Atoi());
\r
331 if (CompareString(tagName, "software") && CompareString(attribName, "date")) fBoardInfo->SetSwDate(attribValue);
\r
332 if (CompareString(tagName, "software") && CompareString(attribName, "rev")) fBoardInfo->SetSwRev(attribValue.Atoi());
\r
333 if (CompareString(tagName, "software") && CompareString(attribName, "clean")) fBoardInfo->SetSwClean(attribValue.Atoi());
\r
337 // if there is a new DCS element put it in the correct array
\r
338 if (CompareString(tagName, "DCS")) {
\r
339 if (fSystem == kInsideFEE) {
\r
340 fDCSFEEObj = new AliTRDCalDCSFEE(name,dcsTitle);
\r
341 fDCSFEEObj->SetDCSid(dcsId);
\r
343 if (fSystem == kInsidePTR) {
\r
344 // fDCSPTRObj = new AliTRDCalDCSPTR(name,dcsTitle);
\r
345 // fDCSPTRObj->SetDCSid(dcsId);
\r
347 if (fSystem == kInsideGTU) {
\r
348 // fDCSGTUObj = new AliTRDCalDCSGTU(name,dcsTitle);
\r
349 // fDCSGTUObj->SetDCSid(dcsId);
\r
354 //_____________________________________________________________________________
\r
355 void AliTRDSaxHandler::OnEndElement(const char *name)
\r
357 // do everything that needs to be done when an end tag of an element is found
\r
358 TString tagName = name;
\r
360 // if done with this DCS board, put it in the correct array
\r
361 // no check for </ack> necessary since this check is done during XML validation
\r
362 if (CompareString(tagName, "DCS")) {
\r
363 if (fSystem == kInsideFEE) {
\r
365 if (fDCSFEEObj->GetStatusBit() == 0) {
\r
366 // if there were no errors (StatusBit==0) the following should match
\r
367 detID = fDCSFEEObj->GetDCSid();
\r
368 AliTRDgeometry aliGeo;
\r
369 Int_t calDetID = aliGeo.GetDetector(fDCSFEEObj->GetLayer(),
\r
370 fDCSFEEObj->GetStack(),
\r
371 fDCSFEEObj->GetSM());
\r
372 if (detID != calDetID) fDCSFEEObj->SetStatusBit(4);
\r
374 // if the dcs board didn't properly respond, don't compare
\r
375 detID = fDCSFEEObj->GetDCSid();
\r
377 fFEEArr->AddAt(fDCSFEEObj,detID);
\r
379 if (fSystem == kInsidePTR) {
\r
380 fPTRArr->AddAt(fDCSPTRObj,fNDCSPTR);
\r
383 // if (fSystem == kInsideGTU) {
\r
384 // fGTUArr->AddAt(fDCSGTUObj,fNDCSGTU);
\r
387 fCurrentSM = 99; // 99 for no SM set
\r
388 fDCSFEEObj = 0; // just to be sure
\r
392 // done with this stack?
\r
393 if (CompareString(tagName, "STACK")) {// TODO: errrrm ???? always 99?
\r
394 fCurrentStack = 99; // 99 for no stack set
\r
397 // outside of rstate again?
\r
398 if (CompareString(tagName, "rstate")) {
\r
403 if (CompareString(tagName, "ro-board")) fCurrentROB = -1;
\r
405 // store informations of the FEE DCS-Board
\r
406 if (fSystem == kInsideFEE) {
\r
407 if (CompareString(tagName, "DNR")) fDCSFEEObj->SetStatusBit(fContent.Atoi());
\r
408 if (CompareString(tagName, "CFGNME")) fDCSFEEObj->SetConfigName(fContent);
\r
409 if (CompareString(tagName, "CFGTAG")) fDCSFEEObj->SetConfigTag(fContent.Atoi());
\r
410 if (CompareString(tagName, "CFGVRSN")) fDCSFEEObj->SetConfigVersion(fContent);
\r
411 if (CompareString(tagName, "NTB")) fDCSFEEObj->SetNumberOfTimeBins(fContent.Atoi());
\r
412 if (CompareString(tagName, "SM-ID")) fDCSFEEObj->SetSM(fContent.Atoi());
\r
413 if (CompareString(tagName, "STACK-ID")) fDCSFEEObj->SetStack(fContent.Atoi());
\r
414 if (CompareString(tagName, "LAYER-ID")) fDCSFEEObj->SetLayer(fContent.Atoi());
\r
415 if (CompareString(tagName, "SINGLEHITTHRES")) fDCSFEEObj->SetSingleHitThres(fContent.Atoi());
\r
416 if (CompareString(tagName, "THRPADCLSTHRS")) fDCSFEEObj->SetThreePadClustThres(fContent.Atoi());
\r
417 if (CompareString(tagName, "SELNOZS")) fDCSFEEObj->SetSelectiveNoZS(fContent.Atoi());
\r
418 if (CompareString(tagName, "FASTSTATNOISE")) fDCSFEEObj->SetFastStatNoise(fContent.Atoi());
\r
419 if (CompareString(tagName, "FILTWEIGHT")) fDCSFEEObj->SetTCFilterWeight(fContent.Atoi());
\r
420 if (CompareString(tagName, "FILTSHRTDCYPRM")) fDCSFEEObj->SetTCFilterShortDecPar(fContent.Atoi());
\r
421 if (CompareString(tagName, "FILTLNGDCYPRM")) fDCSFEEObj->SetTCFilterLongDecPar(fContent.Atoi());
\r
422 if (CompareString(tagName, "FLTR")) fDCSFEEObj->SetFilterType(fContent);
\r
423 if (CompareString(tagName, "READOUTPAR")) fDCSFEEObj->SetReadoutParam(fContent);
\r
424 if (CompareString(tagName, "TESTPATTERN")) fDCSFEEObj->SetTestPattern(fContent);
\r
425 if (CompareString(tagName, "TRCKLTMODE")) fDCSFEEObj->SetTrackletMode(fContent);
\r
426 if (CompareString(tagName, "TRCKLTDEF")) fDCSFEEObj->SetTrackletDef(fContent);
\r
427 if (CompareString(tagName, "TRIGGERSETUP")) fDCSFEEObj->SetTriggerSetup(fContent);
\r
428 if (CompareString(tagName, "ADDOPTIONS")) fDCSFEEObj->SetAddOptions(fContent);
\r
429 if (CompareString(tagName, "gaintbl")) {
\r
430 fLevel1Tag = kInsideNone;
\r
435 if (fLevel1Tag == kInsideGainTable) {
\r
436 if (CompareString(tagName, "name")) fDCSFEEObj->SetGainTableName(fContent);
\r
437 if (CompareString(tagName, "desc")) fDCSFEEObj->SetGainTableDesc(fContent);
\r
438 if (CompareString(tagName, "adcdac")) fDCSFEEObj->SetGainTableAdcdac(fCurrentROB, fCurrentMCM, fContent.Atoi());
\r
439 if (CompareString(tagName, "fgfn")) fDCSFEEObj->SetGainTableFgfn(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi());
\r
440 if (CompareString(tagName, "fgan")) fDCSFEEObj->SetGainTableFgan(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi());
\r
442 if (fInsideRstate == 1) {
\r
443 if (fCurrentROB>=0 && fCurrentMCM>=0) {
\r
444 if (CompareString(tagName, "gsm")) fDCSFEEObj->SetMCMGlobalState(fCurrentROB, fCurrentMCM, fContent.Atoi());
\r
445 if (CompareString(tagName, "ni")) fDCSFEEObj->SetMCMStateNI(fCurrentROB, fCurrentMCM, fContent.Atoi());
\r
446 if (CompareString(tagName, "ev")) fDCSFEEObj->SetMCMEventCnt(fCurrentROB, fCurrentMCM, fContent.Atoi());
\r
447 if (CompareString(tagName, "ptrg")) fDCSFEEObj->SetMCMPtCnt(fCurrentROB, fCurrentMCM, fContent.Atoi());
\r
452 if (fSystem == kInsideGTU) {
\r
453 // cout << "Close: " << tagName << " " << fLevel1Tag << " " << fLevel2Tag << " " << fInsideBoardInfo << "\n";
\r
455 // if (CompareString(tagName, "run")) {
\r
456 // fDCSGTUObj->SetSORFlag(TString(fContent(fContent.Length()-1,1)).Atoi());
\r
457 // fDCSGTUObj->SetRunNumber(TString(fContent(0,fContent.Length()-2)).Atoi());
\r
459 // if (CompareString(tagName, "serial")) fDCSGTUObj->SetSerial(fContent.Atoi());
\r
460 if (CompareString(tagName, "board_info")) {
\r
461 fInsideBoardInfo = false;
\r
462 if (fLevel1Tag == kInsideTgu) fDCSGTUObj->GetTgu()->SetBoardInfo(fBoardInfo);
\r
463 if (fLevel1Tag == kInsideSegment && fLevel2Tag == kInsideSmu) fSegment->SetSmuBoardInfo(fBoardInfo);
\r
464 if (fLevel1Tag == kInsideSegment && fLevel2Tag == kInsideTmu) fTmu->SetBoardInfo(fBoardInfo);
\r
466 if (CompareString(tagName, "dnr")) fDCSGTUObj->SetDNR(fContent.Atoi());
\r
467 if (CompareString(tagName, "tgu")) fLevel1Tag = kInsideNone;
\r
468 if (CompareString(tagName(0,tagName.Length()-3), "segment")) {
\r
469 fDCSGTUObj->GetSegmentArray()->Add(fSegment);
\r
470 fLevel1Tag = kInsideNone;
\r
472 if (fLevel1Tag == kInsideTgu) {
\r
473 if (CompareString(tagName, "ctp_opc")) fDCSGTUObj->GetTgu()->GetCtpOpcArray()->Add(fCtpOpc);
\r
474 } else if (fLevel1Tag == kInsideSegment) {
\r
475 if (CompareString(tagName, "smu")) fLevel2Tag = kInsideNone;
\r
476 if (CompareString(tagName(0,3), "tmu")) {
\r
477 fSegment->GetTmuArray()->Add(fTmu);
\r
478 fLevel2Tag = kInsideNone;
\r
484 // store pretrigger informations
\r
485 if (fSystem == kInsidePTR) {
\r
486 // no informations available yet
\r
488 // // store GTU informations
\r
489 // if (fSystem == kInsideGTU) {
\r
490 // if (CompareString(tagName, "SMMASK"))
\r
491 // fHandlerStatus = fDCSGTUObj->SetSMMask(fContent);
\r
492 // if (CompareString(tagName, "LINKMASK"))
\r
493 // fHandlerStatus = fDCSGTUObj->SetLinkMask(fCurrentSM, fCurrentStack, fContent);
\r
494 // if (CompareString(tagName, "STMASK"))
\r
495 // fDCSGTUObj->SetStackMaskBit(fCurrentSM, fCurrentStack, fContent.Atoi());
\r
499 //_____________________________________________________________________________
\r
500 void AliTRDSaxHandler::OnCharacters(const char *characters)
\r
502 // copy the the text content of an XML element
\r
503 fContent = characters;
\r
506 //_____________________________________________________________________________
\r
507 void AliTRDSaxHandler::OnComment(const char* /*text*/)
\r
509 // comments within the XML file are ignored
\r
512 //_____________________________________________________________________________
\r
513 void AliTRDSaxHandler::OnWarning(const char *text)
\r
515 // process warnings here
\r
516 AliInfo(Form("Warning: %s",text));
\r
519 //_____________________________________________________________________________
\r
520 void AliTRDSaxHandler::OnError(const char *text)
\r
522 // process errors here
\r
523 AliError(Form("Error: %s",text));
\r
526 //_____________________________________________________________________________
\r
527 void AliTRDSaxHandler::OnFatalError(const char *text)
\r
529 // process fatal errors here
\r
530 AliError(Form("Fatal error: %s",text)); // use AliFatal?
\r
533 //_____________________________________________________________________________
\r
534 void AliTRDSaxHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/)
\r
536 // process character data blocks here
\r
537 // not implemented and should not be used here
\r