ROOT logo
/*************************************************************************
 * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
 * *                                                                        *
 * * Author: The ALICE Off-line Project.                                    *
 * * Contributors are mentioned in the code where appropriate.              *
 * *                                                                        *
 * * Permission to use, copy, modify and distribute this software and its   *
 * * documentation strictly for non-commercial purposes is hereby granted   *
 * * without fee, provided that the above copyright notice appears in all   *
 * * copies and that both the copyright notice and this permission notice   *
 * * appear in the supporting documentation. The authors make no claims     *
 * * about the suitability of this software for any purpose. It is          *
 * * provided "as is" without express or implied warranty.                  *
 * **************************************************************************/

/* $Id: AliTRDSaxHandler.cxx 26327 2008-06-02 15:36:18Z cblume $ */

////////////////////////////////////////////////////////////////////////////
//                                                                        //
//  The SAX XML file handler used in the TRD preprocessor                 //
//                                                                        //
//  Authors:                                                              //
//    Frederick Kramer (kramer@ikf.uni-frankfurt.de)                      //
//    Thomas Bird      (thomas@thomasbird.com)                            //
//                                                                        //
////////////////////////////////////////////////////////////////////////////


#include <TList.h>
#include <TMath.h>
#include "AliLog.h"
#include "Cal/AliTRDCalDCSGTUTgu.h"
#include "Cal/AliTRDCalDCSPTR.h"

#include <TXMLAttr.h>
#include <TObjArray.h>
#include "AliTRDSaxHandler.h"
#include "AliTRDgeometry.h"
#include "AliTRDcalibDB.h"
#include "Cal/AliTRDCalDCSv2.h"
#include "Cal/AliTRDCalDCSFEEv2.h"
#include "Cal/AliTRDCalDCSGTU.h"

ClassImp(AliTRDSaxHandler)
  
//_____________________________________________________________________________
AliTRDSaxHandler::AliTRDSaxHandler()
  :TObject()
  ,fHandlerStatus(0)
  ,fNDCSPTR(0)
  ,fNDCSGTU(0)
  ,fFEEArr(new TObjArray(540))
  ,fPTRArr(new TObjArray(6))
  ,fSystem(0)
  ,fInsideRstate(0)
  ,fCurrentSM(0)
  ,fCurrentStack(0)
  ,fCurrentROB(-1)
  ,fCurrentMCM(-1)
  ,fCurrentADC(-1)
  ,fContent(0)
  ,fDCSFEEObj(0)
  ,fDCSPTRObj(0)
  ,fDCSGTUObj(0)
  ,fCalDCSObj(new AliTRDCalDCSv2())
  ,fLevel1Tag(-2)
  ,fLevel2Tag(-2)
  ,fInsideBoardInfo(false)
  ,fTmu(0)
  ,fCtpOpc(0)
  ,fSegment(0)
  ,fBoardInfo(0)
{
  // AliTRDSaxHandler default constructor
  fFEEArr->SetOwner();
  fPTRArr->SetOwner();
}

//_____________________________________________________________________________
AliTRDSaxHandler::AliTRDSaxHandler(const AliTRDSaxHandler &sh)
  :TObject(sh)
  ,fHandlerStatus(0)
  ,fNDCSPTR(0)
  ,fNDCSGTU(0)
  ,fFEEArr(0)
  ,fPTRArr(0)
  ,fSystem(0)
  ,fInsideRstate(0)
  ,fCurrentSM(0)
  ,fCurrentStack(0)
  ,fCurrentROB(-1)
  ,fCurrentMCM(-1)
  ,fCurrentADC(-1)
  ,fContent(0)
  ,fDCSFEEObj(0)
  ,fDCSPTRObj(0)
  ,fDCSGTUObj(0)
  ,fCalDCSObj(0)
  ,fLevel1Tag(-2)
  ,fLevel2Tag(-2)
  ,fInsideBoardInfo(false)
  ,fTmu(0)
  ,fCtpOpc(0)
  ,fSegment(0)
  ,fBoardInfo(0)
{
  // AliTRDSaxHandler copy constructor
}

//_____________________________________________________________________________
AliTRDSaxHandler &AliTRDSaxHandler::operator=(const AliTRDSaxHandler &sh)
{
  // Assignment operator
  if (&sh == this) return *this;
  new (this) AliTRDSaxHandler(sh);
  return *this;
}

//_____________________________________________________________________________
AliTRDSaxHandler::~AliTRDSaxHandler()
{
  // AliTRDSaxHandler destructor
  if (fFEEArr) {
    delete fFEEArr;
    fFEEArr    = 0x0;
  }
  if (fPTRArr) {
    delete fPTRArr;
    fPTRArr    = 0x0;
  }
  if (fDCSGTUObj) {
    delete fDCSGTUObj;
    fDCSGTUObj    = 0x0;
  }
  if (fCalDCSObj) {
    delete fCalDCSObj;
    fCalDCSObj = 0x0;
  }
}

//_____________________________________________________________________________
AliTRDCalDCSv2* AliTRDSaxHandler::GetCalDCSObj()
{
  // put the arrays in the global calibration object and return this

  fCalDCSObj->SetFEEArr(fFEEArr);
  fCalDCSObj->SetPTRArr(fPTRArr);
  fCalDCSObj->SetGTUObj(fDCSGTUObj);
  return fCalDCSObj;
}

//_____________________________________________________________________________
void AliTRDSaxHandler::ParseConfigName(TString cfgname) const
{
  // Evaluate the config name and set the individual parameters

  // protect
  if (!AliTRDcalibDB::Instance()) {
    AliError("Could not create an instance of AliTRDcalibDB!");
    return;
  }

  TString cfg = "", par = "", pars = "";
  Int_t nPar = AliTRDcalibDB::Instance()->GetNumberOfParsDCS(cfgname);
  if (nPar == 0) return;

  for (Int_t i=1; i<=nPar; i++) {
    // Get the configuration parameter
    AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, 0, cfg);

    // Set Parameters accordingly
    if (i == AliTRDcalibDB::kFltrSet) fDCSFEEObj->SetFilterType(cfg);
    if (i == AliTRDcalibDB::kTrigSet) fDCSFEEObj->SetTriggerSetup(cfg);
    if (i == AliTRDcalibDB::kAddOpti) fDCSFEEObj->SetAddOptions(cfg);
    if (i == AliTRDcalibDB::kTimebin) fDCSFEEObj->SetNumberOfTimeBins(AliTRDcalibDB::Instance()->ExtractTimeBinsFromString(cfg));
    if (i == AliTRDcalibDB::kReadout) fDCSFEEObj->SetReadoutParam(cfg);
    if (i == AliTRDcalibDB::kTrkMode) fDCSFEEObj->SetTrackletMode(cfg);

    // Set options of parameters accordingly
    Int_t nOpt = AliTRDcalibDB::Instance()->GetNumberOfOptsDCS(cfgname, i);
    if (nOpt == 0) continue;

    for (Int_t j=1; j<=nOpt; j++) {
      // Get the parameter option
      AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, j, par);

      if (i == AliTRDcalibDB::kReadout) {
	if (par.EqualTo("stat")) fDCSFEEObj->SetFastStatNoise(1);
      }
      if (i == AliTRDcalibDB::kTrkMode) {
	if ((j > 1) && (par.Length() != 0)) pars += "-";
	pars += par;
      }
      // SetTCFilterWeight, SetTCFilterShortDecPar, SetTCFilterLongDecPar might be filled here, too
      // SetSingleHitThres, SetThreePadClustThres, SetSelectiveNoZS, SetTestPattern might be filled here, too
    }

    fDCSFEEObj->SetTrackletDef(pars);
  }
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnStartDocument() const
{
  // if something should happen right at the beginning of the
  // XML document, this must happen here
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnEndDocument() const
{
  // if something should happen at the end of the XML document
  // this must be done here
}

//_____________________________________________________________________________
bool AliTRDSaxHandler::CompareString(TString str, const char *str2)
{
  // compre strings, ignoring case
  // returns true if they are the same, else false
  return !(bool)str.CompareTo(str2,str.kIgnoreCase);
}


//_____________________________________________________________________________
void AliTRDSaxHandler::OnStartElement(const char *name, const TList *attributes)
{
  // when a new XML element is found, it is processed here
  fContent    = ""; // Technically <p> This <em>is</em> ok but would be a problem here</p>
  Int_t dcsId = 0;
  TString tagName  = name;
  TString dcsTitle = "";

  // set the current system if necessary
  if (CompareString(tagName, "FEE")) fSystem = kInsideFEE;
  if (CompareString(tagName, "PTR")) fSystem = kInsidePTR;
  if (CompareString(tagName, "GTU")) {
    fSystem = kInsideGTU;
    fDCSGTUObj = new AliTRDCalDCSGTU(tagName,tagName);
  }

  if (fSystem == kInsideGTU) {
    if (CompareString(tagName, "tgu")) fLevel1Tag = kInsideTgu;
    if (CompareString(tagName, "board_info")) {
      fInsideBoardInfo = true;
      fBoardInfo = new AliTRDCalDCSGTUBoardInfo(tagName,tagName);
    }
    if (CompareString(tagName(0,tagName.Length()-3), "segment")) { 
      fSegment = new AliTRDCalDCSGTUSegment(tagName,tagName);
      fSegment->SetId(TString(tagName(8,2)).Atoi());
      fLevel1Tag = kInsideSegment;
    }
    if (fLevel1Tag == kInsideTgu) {
      if (CompareString(tagName, "ctp_opc"))   fCtpOpc = new AliTRDCalDCSGTUCtpOpc(tagName,tagName);
    } else if (fLevel1Tag == kInsideSegment) {
      if (CompareString(tagName, "smu")) {
	fLevel2Tag = kInsideSmu;
      }
      if (CompareString(tagName(0,3), "tmu")) {
	fTmu = new AliTRDCalDCSGTUTmu(tagName,tagName);
	fTmu->SetId(TString(tagName(4,2)).Atoi());
	fLevel2Tag = kInsideTmu;
      }
    }
  } else if (fSystem == kInsideFEE) {
    if (CompareString(tagName, "gaintbl")) fLevel1Tag = kInsideGainTable;
  }

  // set if we are inside rstate 
  // (in principle not necessary - just to be more safe against stupid tags)
  if (CompareString(tagName, "rstate")) fInsideRstate = 1;

  // get the attributes of the element
  TXMLAttr *attr;
  TIter next(attributes);
  while ((attr = (TXMLAttr*) next())) {
    TString attribName = attr->GetName();
    TString attribValue = attr->GetValue();
    if (fSystem == kInsideFEE && fLevel1Tag == kInsideNone) {
      if (CompareString(attribName, "id") && CompareString(tagName, "DCS")) {
	dcsTitle = name;
	dcsId = atoi(attr->GetValue());
      }
      if (CompareString(attribName, "roc") && CompareString(tagName, "ack")) {
	if (attribValue.Atoi() != fDCSFEEObj->GetDCSid())
	  fDCSFEEObj->SetStatusBit(4); // consistency check
      }
      if (CompareString(attribName, "rob") && CompareString(tagName, "ro-board") && (fInsideRstate == 1)) {
	fCurrentROB = attribValue.Atoi();
      }
      if (CompareString(attribName, "mcm") && CompareString(tagName, "m") && (fInsideRstate == 1)) {
	fCurrentMCM = attribValue.Atoi();
      }
      if (CompareString(attribName, "sm") && CompareString(tagName, "DCS")) {
	fCurrentSM = attribValue.Atoi(); // only for GTU/PTR
      }
      if (CompareString(attribName, "id") && CompareString(tagName, "STACK")) {// hmmmm not exist?
	fCurrentStack = attribValue.Atoi(); // only for GTU/PTR
      }
    } else if (fSystem == kInsideFEE && fLevel1Tag == kInsideGainTable) {
      if (CompareString(tagName, "roc") && CompareString(attribName, "type"))    fDCSFEEObj->SetGainTableRocType(attribValue);
      if (CompareString(tagName, "roc") && CompareString(attribName, "serial"))  fDCSFEEObj->SetGainTableRocSerial(attribValue.Atoi());
      if (CompareString(tagName, "mcm") && CompareString(attribName, "rob"))     fCurrentROB = attribValue.Atoi();
      if (CompareString(tagName, "mcm") && CompareString(attribName, "pos"))     fCurrentMCM = attribValue.Atoi();
      if (CompareString(tagName, "adc") && CompareString(attribName, "id"))      fCurrentADC = attribValue.Atoi();
      
    } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideNone) {
      if (CompareString(tagName, "publisher")) {
	if (CompareString(attribName, "at"))         fDCSGTUObj->SetSORFlag(attribValue.Atoi());
	if (CompareString(attribName, "serial"))     fDCSGTUObj->SetSerial(attribValue.Atoi());
	if (CompareString(attribName, "runnr"))      fDCSGTUObj->SetRunNumber(attribValue.Atoi());
      }
    } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideTgu) {
      if (CompareString(tagName, "from")) {
	if (CompareString(attribName, "at"))         fDCSGTUObj->GetTgu()->SetFromSORFlag(attribValue.Atoi());
	if (CompareString(attribName, "runnr"))      fDCSGTUObj->GetTgu()->SetFromRunNumber(attribValue.Atoi());
	if (CompareString(attribName, "child"))      fDCSGTUObj->GetTgu()->SetFromChild(attribValue.Atoi());
      }
      if (CompareString(tagName, "segmentmask") && CompareString(attribName, "value"))  fDCSGTUObj->GetTgu()->SetSegmentMask(attribValue);
      if (CompareString(tagName, "busymask") && CompareString(attribName, "value"))     fDCSGTUObj->GetTgu()->SetBusyMask(attribValue);
      if (CompareString(tagName, "contribmask") && CompareString(attribName, "value"))  fDCSGTUObj->GetTgu()->SetContribMask(attribValue);
      
      if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "id"))         fCtpOpc->SetId(attribValue.Atoi());
      if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "opcode"))     fCtpOpc->SetOpcode(attribValue.Atoi());
      if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "direction"))  fCtpOpc->SetDirection(attribValue.Atoi());
      if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "inverted"))   fCtpOpc->SetInverted(attribValue.Atoi());
      if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "delay"))      fCtpOpc->SetDelay(attribValue.Atoi());
      if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "connected"))  fCtpOpc->SetConnected(attribValue.Atoi());
      
    } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideSegment) {
      if (CompareString(tagName, "from")) {
	if (CompareString(attribName, "at"))         fSegment->SetFromSORFlag(attribValue.Atoi());
	if (CompareString(attribName, "runnr"))      fSegment->SetFromRunNumber(attribValue.Atoi());
	if (CompareString(attribName, "child"))      fSegment->SetFromChild(attribValue.Atoi());
      }
      if (fLevel2Tag == kInsideSmu) {
	if (CompareString(tagName, "stackmask") && CompareString(attribName, "value"))     fSegment->SetSmuStackMask(attribValue);
	if (CompareString(tagName, "tracklets") && CompareString(attribName, "send"))      fSegment->SetSmuTracklets(attribValue.Atoi());
	if (CompareString(tagName, "tracks") && CompareString(attribName, "send"))         fSegment->SetSmuTracks(attribValue.Atoi());
	if (CompareString(tagName, "idelay") && CompareString(attribName, "value"))        fSegment->SetSmuIdelay(attribValue.Atoi());
	if (CompareString(tagName, "ttc_emulator") && CompareString(attribName, "enable")) fSegment->SetSmuTtcEmulatorEnable(attribValue.Atoi());
	
	if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l1_low"))  
	  fSegment->SetSmuTriggerWindowL1Low(attribValue.Atoi());
	if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l1_high"))  
	  fSegment->SetSmuTriggerWindowL1High(attribValue.Atoi());
	if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l2_low"))  
	  fSegment->SetSmuTriggerWindowL2Low(attribValue.Atoi());
	if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l2_high"))  
	  fSegment->SetSmuTriggerWindowL2High(attribValue.Atoi());
	
      } else if (fLevel2Tag == kInsideTmu) {
	if (CompareString(tagName, "linkmask") && CompareString(attribName, "value"))      fTmu->SetLinkMask(attribValue);
	if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "enable")) 
	  fTmu->SetPatternGeneratorEnable(attribValue.Atoi());
	if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "datawords")) 
	  fTmu->SetPatternGeneratorDataWords(attribValue.Atoi());
	if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "trackletwords")) 
	  fTmu->SetPatternGeneratorTrackletWords(attribValue.Atoi());
      }
    }
    
    if (fInsideBoardInfo) {
      if (CompareString(tagName, "board_info") && CompareString(attribName, "board_id"))    fBoardInfo->SetId(attribValue);
      if (CompareString(tagName, "board_info") && CompareString(attribName, "design_type")) fBoardInfo->SetType(attribValue.Atoi());
      if (CompareString(tagName, "board_info") && CompareString(attribName, "pci_ga"))      fBoardInfo->SetPciGa(attribValue.Atoi());
      if (CompareString(tagName, "hardware") && CompareString(attribName, "date"))          fBoardInfo->SetHwDate(attribValue);
      if (CompareString(tagName, "hardware") && CompareString(attribName, "rev"))           fBoardInfo->SetHwRev(attribValue.Atoi());
      if (CompareString(tagName, "hardware") && CompareString(attribName, "clean"))         fBoardInfo->SetHwClean(attribValue.Atoi());
      if (CompareString(tagName, "software") && CompareString(attribName, "date"))          fBoardInfo->SetSwDate(attribValue);
      if (CompareString(tagName, "software") && CompareString(attribName, "rev"))           fBoardInfo->SetSwRev(attribValue.Atoi());
      if (CompareString(tagName, "software") && CompareString(attribName, "clean"))         fBoardInfo->SetSwClean(attribValue.Atoi());
    }
  }

  // if there is a new DCS element put it in the correct array
  if (CompareString(tagName, "DCS")) {
    if (fSystem == kInsideFEE) {
      fDCSFEEObj = new AliTRDCalDCSFEEv2();
      fDCSFEEObj->SetDCSid(dcsId);
    }
    if (fSystem == kInsidePTR) {
//       fDCSPTRObj = new AliTRDCalDCSPTR(name,dcsTitle);
//       fDCSPTRObj->SetDCSid(dcsId);
    }
    if (fSystem == kInsideGTU) {
//       fDCSGTUObj = new AliTRDCalDCSGTU(name,dcsTitle);
//       fDCSGTUObj->SetDCSid(dcsId);
    }
  }
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnEndElement(const char *name)
{
  // do everything that needs to be done when an end tag of an element is found
  TString tagName = name;
  
  // if done with this DCS board, put it in the correct array
  // no check for </ack> necessary since this check is done during XML validation
  if (CompareString(tagName, "DCS")) {
    if (fSystem == kInsideFEE) {
      Int_t detID = 0;
      if (fDCSFEEObj->GetStatusBit() == 0) {
	// if there were no errors (StatusBit==0) the following should match
        detID = fDCSFEEObj->GetDCSid();
        AliTRDgeometry aliGeo;
        Int_t calDetID = aliGeo.GetDetector(fDCSFEEObj->GetLayer(),
	  				    fDCSFEEObj->GetStack(),
					    fDCSFEEObj->GetSM());
	if (detID != calDetID) fDCSFEEObj->SetStatusBit(4);
      } else {
	// if the dcs board didn't properly respond, don't compare
        detID = fDCSFEEObj->GetDCSid();
      }
      fFEEArr->AddAt(fDCSFEEObj,detID);
    }
    if (fSystem == kInsidePTR) {
      fPTRArr->AddAt(fDCSPTRObj,fNDCSPTR);
      fNDCSPTR++;
    }
//     if (fSystem == kInsideGTU) {
//       fGTUArr->AddAt(fDCSGTUObj,fNDCSGTU);
//       fNDCSGTU++;
//     }
    fCurrentSM = 99; // 99 for no SM set
    fDCSFEEObj = 0;  // just to be sure
    return;
  }

  // done with this stack? 
  if (CompareString(tagName, "STACK")) {// TODO: errrrm ???? always 99?
    fCurrentStack = 99; // 99 for no stack set
  }

  // outside of rstate again?
  if (CompareString(tagName, "rstate")) {
    fInsideRstate = 0;
    fCurrentROB   = -1;
    fCurrentMCM   = -1;
  }
  if (CompareString(tagName, "ro-board")) fCurrentROB = -1;
  
  // store informations of the FEE DCS-Board
  if (fSystem == kInsideFEE) {
    if (CompareString(tagName, "DNR"))            fDCSFEEObj->SetStatusBit(fContent.Atoi());
    if (CompareString(tagName, "CFGTAG"))         fDCSFEEObj->SetConfigTag(fContent.Atoi());
    if (CompareString(tagName, "CFGVRSN"))        fDCSFEEObj->SetConfigVersion(fContent);
    if (CompareString(tagName, "SM-ID"))          fDCSFEEObj->SetSM(fContent.Atoi());
    if (CompareString(tagName, "STACK-ID"))       fDCSFEEObj->SetStack(fContent.Atoi());
    if (CompareString(tagName, "LAYER-ID"))       fDCSFEEObj->SetLayer(fContent.Atoi());
    if (CompareString(tagName, "CFGNME")) {
      fDCSFEEObj->SetConfigName(fContent);
      ParseConfigName(fContent);
    }
    if (CompareString(tagName, "gaintbl")) {
      fLevel1Tag = kInsideNone;
      fCurrentROB = -1;
      fCurrentMCM = -1;
      fCurrentADC = -1;
    }
    if (fLevel1Tag == kInsideGainTable) {
      if (CompareString(tagName, "name"))   fDCSFEEObj->SetGainTableName(fContent);
      if (CompareString(tagName, "desc"))   fDCSFEEObj->SetGainTableDesc(fContent);
      if (fCurrentROB>=0 && fCurrentMCM>=0) {
	if (CompareString(tagName, "adcdac")) fDCSFEEObj->SetGainTableAdcdac(fCurrentROB, fCurrentMCM, fContent.Atoi());
	if (fCurrentADC>=0) {
	  if (CompareString(tagName, "fgfn"))   fDCSFEEObj->SetGainTableFgfn(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi());
	  if (CompareString(tagName, "fgan"))   fDCSFEEObj->SetGainTableFgan(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi());
	}
      }
    }
    if (fInsideRstate == 1) {
      if (fCurrentROB>=0 && fCurrentMCM>=0) {
	if (CompareString(tagName, "gsm")) fDCSFEEObj->SetMCMGlobalState(fCurrentROB, fCurrentMCM, fContent.Atoi());
        if (CompareString(tagName, "ni")) fDCSFEEObj->SetMCMStateNI(fCurrentROB, fCurrentMCM, fContent.Atoi());
	if (CompareString(tagName, "ev")) fDCSFEEObj->SetMCMEventCnt(fCurrentROB, fCurrentMCM, fContent.Atoi());
	if (CompareString(tagName, "ptrg")) fDCSFEEObj->SetMCMPtCnt(fCurrentROB, fCurrentMCM, fContent.Atoi());
      }
    }
  }

  if (fSystem == kInsideGTU) {
//     if (CompareString(tagName, "run")) { 
//       fDCSGTUObj->SetSORFlag(TString(fContent(fContent.Length()-1,1)).Atoi());
//       fDCSGTUObj->SetRunNumber(TString(fContent(0,fContent.Length()-2)).Atoi());
//     }
//     if (CompareString(tagName, "serial"))         fDCSGTUObj->SetSerial(fContent.Atoi());
    if (CompareString(tagName, "board_info")) {
      fInsideBoardInfo = false;
      if (fLevel1Tag == kInsideTgu)                                  fDCSGTUObj->GetTgu()->SetBoardInfo(fBoardInfo);
      if (fLevel1Tag == kInsideSegment && fLevel2Tag == kInsideSmu)  fSegment->SetSmuBoardInfo(fBoardInfo);
      if (fLevel1Tag == kInsideSegment && fLevel2Tag == kInsideTmu)  fTmu->SetBoardInfo(fBoardInfo);
    }
    if (CompareString(tagName, "dnr"))            fDCSGTUObj->SetDNR(fContent.Atoi());
    if (CompareString(tagName, "tgu"))            fLevel1Tag = kInsideNone;
    if (CompareString(tagName(0,tagName.Length()-3), "segment")) { 
      fDCSGTUObj->GetSegmentArray()->Add(fSegment);
      fLevel1Tag = kInsideNone;
    }
    if (fLevel1Tag == kInsideTgu) {
      if (CompareString(tagName, "ctp_opc"))        fDCSGTUObj->GetTgu()->GetCtpOpcArray()->Add(fCtpOpc);
    } else if (fLevel1Tag == kInsideSegment) {
      if (CompareString(tagName, "smu"))          fLevel2Tag = kInsideNone;
      if (CompareString(tagName(0,3), "tmu")) {
	fSegment->GetTmuArray()->Add(fTmu);
	fLevel2Tag = kInsideNone;
      }
    }
  }

  
  // store pretrigger informations
  if (fSystem == kInsidePTR) {
    // no informations available yet
  }
//   // store GTU informations
//   if (fSystem == kInsideGTU) {
//     if (CompareString(tagName, "SMMASK"))
//       fHandlerStatus = fDCSGTUObj->SetSMMask(fContent);
//     if (CompareString(tagName, "LINKMASK")) 
//       fHandlerStatus = fDCSGTUObj->SetLinkMask(fCurrentSM, fCurrentStack, fContent);
//     if (CompareString(tagName, "STMASK"))
//       fDCSGTUObj->SetStackMaskBit(fCurrentSM, fCurrentStack, fContent.Atoi());
//   }
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnCharacters(const char *characters)
{
  // copy the the text content of an XML element
  fContent = characters;
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnComment(const char* /*text*/) const
{
  // comments within the XML file are ignored
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnWarning(const char *text)
{
  // process warnings here
  AliInfo(Form("Warning: %s",text));
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnError(const char *text)
{
  // process errors here
  AliError(Form("Error: %s",text));
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnFatalError(const char *text)
{
  // process fatal errors here
  AliError(Form("Fatal error: %s",text)); // use AliFatal?
}

//_____________________________________________________________________________
void AliTRDSaxHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) const
{
  // process character data blocks here
  // not implemented and should not be used here
}

 AliTRDSaxHandler.cxx:1
 AliTRDSaxHandler.cxx:2
 AliTRDSaxHandler.cxx:3
 AliTRDSaxHandler.cxx:4
 AliTRDSaxHandler.cxx:5
 AliTRDSaxHandler.cxx:6
 AliTRDSaxHandler.cxx:7
 AliTRDSaxHandler.cxx:8
 AliTRDSaxHandler.cxx:9
 AliTRDSaxHandler.cxx:10
 AliTRDSaxHandler.cxx:11
 AliTRDSaxHandler.cxx:12
 AliTRDSaxHandler.cxx:13
 AliTRDSaxHandler.cxx:14
 AliTRDSaxHandler.cxx:15
 AliTRDSaxHandler.cxx:16
 AliTRDSaxHandler.cxx:17
 AliTRDSaxHandler.cxx:18
 AliTRDSaxHandler.cxx:19
 AliTRDSaxHandler.cxx:20
 AliTRDSaxHandler.cxx:21
 AliTRDSaxHandler.cxx:22
 AliTRDSaxHandler.cxx:23
 AliTRDSaxHandler.cxx:24
 AliTRDSaxHandler.cxx:25
 AliTRDSaxHandler.cxx:26
 AliTRDSaxHandler.cxx:27
 AliTRDSaxHandler.cxx:28
 AliTRDSaxHandler.cxx:29
 AliTRDSaxHandler.cxx:30
 AliTRDSaxHandler.cxx:31
 AliTRDSaxHandler.cxx:32
 AliTRDSaxHandler.cxx:33
 AliTRDSaxHandler.cxx:34
 AliTRDSaxHandler.cxx:35
 AliTRDSaxHandler.cxx:36
 AliTRDSaxHandler.cxx:37
 AliTRDSaxHandler.cxx:38
 AliTRDSaxHandler.cxx:39
 AliTRDSaxHandler.cxx:40
 AliTRDSaxHandler.cxx:41
 AliTRDSaxHandler.cxx:42
 AliTRDSaxHandler.cxx:43
 AliTRDSaxHandler.cxx:44
 AliTRDSaxHandler.cxx:45
 AliTRDSaxHandler.cxx:46
 AliTRDSaxHandler.cxx:47
 AliTRDSaxHandler.cxx:48
 AliTRDSaxHandler.cxx:49
 AliTRDSaxHandler.cxx:50
 AliTRDSaxHandler.cxx:51
 AliTRDSaxHandler.cxx:52
 AliTRDSaxHandler.cxx:53
 AliTRDSaxHandler.cxx:54
 AliTRDSaxHandler.cxx:55
 AliTRDSaxHandler.cxx:56
 AliTRDSaxHandler.cxx:57
 AliTRDSaxHandler.cxx:58
 AliTRDSaxHandler.cxx:59
 AliTRDSaxHandler.cxx:60
 AliTRDSaxHandler.cxx:61
 AliTRDSaxHandler.cxx:62
 AliTRDSaxHandler.cxx:63
 AliTRDSaxHandler.cxx:64
 AliTRDSaxHandler.cxx:65
 AliTRDSaxHandler.cxx:66
 AliTRDSaxHandler.cxx:67
 AliTRDSaxHandler.cxx:68
 AliTRDSaxHandler.cxx:69
 AliTRDSaxHandler.cxx:70
 AliTRDSaxHandler.cxx:71
 AliTRDSaxHandler.cxx:72
 AliTRDSaxHandler.cxx:73
 AliTRDSaxHandler.cxx:74
 AliTRDSaxHandler.cxx:75
 AliTRDSaxHandler.cxx:76
 AliTRDSaxHandler.cxx:77
 AliTRDSaxHandler.cxx:78
 AliTRDSaxHandler.cxx:79
 AliTRDSaxHandler.cxx:80
 AliTRDSaxHandler.cxx:81
 AliTRDSaxHandler.cxx:82
 AliTRDSaxHandler.cxx:83
 AliTRDSaxHandler.cxx:84
 AliTRDSaxHandler.cxx:85
 AliTRDSaxHandler.cxx:86
 AliTRDSaxHandler.cxx:87
 AliTRDSaxHandler.cxx:88
 AliTRDSaxHandler.cxx:89
 AliTRDSaxHandler.cxx:90
 AliTRDSaxHandler.cxx:91
 AliTRDSaxHandler.cxx:92
 AliTRDSaxHandler.cxx:93
 AliTRDSaxHandler.cxx:94
 AliTRDSaxHandler.cxx:95
 AliTRDSaxHandler.cxx:96
 AliTRDSaxHandler.cxx:97
 AliTRDSaxHandler.cxx:98
 AliTRDSaxHandler.cxx:99
 AliTRDSaxHandler.cxx:100
 AliTRDSaxHandler.cxx:101
 AliTRDSaxHandler.cxx:102
 AliTRDSaxHandler.cxx:103
 AliTRDSaxHandler.cxx:104
 AliTRDSaxHandler.cxx:105
 AliTRDSaxHandler.cxx:106
 AliTRDSaxHandler.cxx:107
 AliTRDSaxHandler.cxx:108
 AliTRDSaxHandler.cxx:109
 AliTRDSaxHandler.cxx:110
 AliTRDSaxHandler.cxx:111
 AliTRDSaxHandler.cxx:112
 AliTRDSaxHandler.cxx:113
 AliTRDSaxHandler.cxx:114
 AliTRDSaxHandler.cxx:115
 AliTRDSaxHandler.cxx:116
 AliTRDSaxHandler.cxx:117
 AliTRDSaxHandler.cxx:118
 AliTRDSaxHandler.cxx:119
 AliTRDSaxHandler.cxx:120
 AliTRDSaxHandler.cxx:121
 AliTRDSaxHandler.cxx:122
 AliTRDSaxHandler.cxx:123
 AliTRDSaxHandler.cxx:124
 AliTRDSaxHandler.cxx:125
 AliTRDSaxHandler.cxx:126
 AliTRDSaxHandler.cxx:127
 AliTRDSaxHandler.cxx:128
 AliTRDSaxHandler.cxx:129
 AliTRDSaxHandler.cxx:130
 AliTRDSaxHandler.cxx:131
 AliTRDSaxHandler.cxx:132
 AliTRDSaxHandler.cxx:133
 AliTRDSaxHandler.cxx:134
 AliTRDSaxHandler.cxx:135
 AliTRDSaxHandler.cxx:136
 AliTRDSaxHandler.cxx:137
 AliTRDSaxHandler.cxx:138
 AliTRDSaxHandler.cxx:139
 AliTRDSaxHandler.cxx:140
 AliTRDSaxHandler.cxx:141
 AliTRDSaxHandler.cxx:142
 AliTRDSaxHandler.cxx:143
 AliTRDSaxHandler.cxx:144
 AliTRDSaxHandler.cxx:145
 AliTRDSaxHandler.cxx:146
 AliTRDSaxHandler.cxx:147
 AliTRDSaxHandler.cxx:148
 AliTRDSaxHandler.cxx:149
 AliTRDSaxHandler.cxx:150
 AliTRDSaxHandler.cxx:151
 AliTRDSaxHandler.cxx:152
 AliTRDSaxHandler.cxx:153
 AliTRDSaxHandler.cxx:154
 AliTRDSaxHandler.cxx:155
 AliTRDSaxHandler.cxx:156
 AliTRDSaxHandler.cxx:157
 AliTRDSaxHandler.cxx:158
 AliTRDSaxHandler.cxx:159
 AliTRDSaxHandler.cxx:160
 AliTRDSaxHandler.cxx:161
 AliTRDSaxHandler.cxx:162
 AliTRDSaxHandler.cxx:163
 AliTRDSaxHandler.cxx:164
 AliTRDSaxHandler.cxx:165
 AliTRDSaxHandler.cxx:166
 AliTRDSaxHandler.cxx:167
 AliTRDSaxHandler.cxx:168
 AliTRDSaxHandler.cxx:169
 AliTRDSaxHandler.cxx:170
 AliTRDSaxHandler.cxx:171
 AliTRDSaxHandler.cxx:172
 AliTRDSaxHandler.cxx:173
 AliTRDSaxHandler.cxx:174
 AliTRDSaxHandler.cxx:175
 AliTRDSaxHandler.cxx:176
 AliTRDSaxHandler.cxx:177
 AliTRDSaxHandler.cxx:178
 AliTRDSaxHandler.cxx:179
 AliTRDSaxHandler.cxx:180
 AliTRDSaxHandler.cxx:181
 AliTRDSaxHandler.cxx:182
 AliTRDSaxHandler.cxx:183
 AliTRDSaxHandler.cxx:184
 AliTRDSaxHandler.cxx:185
 AliTRDSaxHandler.cxx:186
 AliTRDSaxHandler.cxx:187
 AliTRDSaxHandler.cxx:188
 AliTRDSaxHandler.cxx:189
 AliTRDSaxHandler.cxx:190
 AliTRDSaxHandler.cxx:191
 AliTRDSaxHandler.cxx:192
 AliTRDSaxHandler.cxx:193
 AliTRDSaxHandler.cxx:194
 AliTRDSaxHandler.cxx:195
 AliTRDSaxHandler.cxx:196
 AliTRDSaxHandler.cxx:197
 AliTRDSaxHandler.cxx:198
 AliTRDSaxHandler.cxx:199
 AliTRDSaxHandler.cxx:200
 AliTRDSaxHandler.cxx:201
 AliTRDSaxHandler.cxx:202
 AliTRDSaxHandler.cxx:203
 AliTRDSaxHandler.cxx:204
 AliTRDSaxHandler.cxx:205
 AliTRDSaxHandler.cxx:206
 AliTRDSaxHandler.cxx:207
 AliTRDSaxHandler.cxx:208
 AliTRDSaxHandler.cxx:209
 AliTRDSaxHandler.cxx:210
 AliTRDSaxHandler.cxx:211
 AliTRDSaxHandler.cxx:212
 AliTRDSaxHandler.cxx:213
 AliTRDSaxHandler.cxx:214
 AliTRDSaxHandler.cxx:215
 AliTRDSaxHandler.cxx:216
 AliTRDSaxHandler.cxx:217
 AliTRDSaxHandler.cxx:218
 AliTRDSaxHandler.cxx:219
 AliTRDSaxHandler.cxx:220
 AliTRDSaxHandler.cxx:221
 AliTRDSaxHandler.cxx:222
 AliTRDSaxHandler.cxx:223
 AliTRDSaxHandler.cxx:224
 AliTRDSaxHandler.cxx:225
 AliTRDSaxHandler.cxx:226
 AliTRDSaxHandler.cxx:227
 AliTRDSaxHandler.cxx:228
 AliTRDSaxHandler.cxx:229
 AliTRDSaxHandler.cxx:230
 AliTRDSaxHandler.cxx:231
 AliTRDSaxHandler.cxx:232
 AliTRDSaxHandler.cxx:233
 AliTRDSaxHandler.cxx:234
 AliTRDSaxHandler.cxx:235
 AliTRDSaxHandler.cxx:236
 AliTRDSaxHandler.cxx:237
 AliTRDSaxHandler.cxx:238
 AliTRDSaxHandler.cxx:239
 AliTRDSaxHandler.cxx:240
 AliTRDSaxHandler.cxx:241
 AliTRDSaxHandler.cxx:242
 AliTRDSaxHandler.cxx:243
 AliTRDSaxHandler.cxx:244
 AliTRDSaxHandler.cxx:245
 AliTRDSaxHandler.cxx:246
 AliTRDSaxHandler.cxx:247
 AliTRDSaxHandler.cxx:248
 AliTRDSaxHandler.cxx:249
 AliTRDSaxHandler.cxx:250
 AliTRDSaxHandler.cxx:251
 AliTRDSaxHandler.cxx:252
 AliTRDSaxHandler.cxx:253
 AliTRDSaxHandler.cxx:254
 AliTRDSaxHandler.cxx:255
 AliTRDSaxHandler.cxx:256
 AliTRDSaxHandler.cxx:257
 AliTRDSaxHandler.cxx:258
 AliTRDSaxHandler.cxx:259
 AliTRDSaxHandler.cxx:260
 AliTRDSaxHandler.cxx:261
 AliTRDSaxHandler.cxx:262
 AliTRDSaxHandler.cxx:263
 AliTRDSaxHandler.cxx:264
 AliTRDSaxHandler.cxx:265
 AliTRDSaxHandler.cxx:266
 AliTRDSaxHandler.cxx:267
 AliTRDSaxHandler.cxx:268
 AliTRDSaxHandler.cxx:269
 AliTRDSaxHandler.cxx:270
 AliTRDSaxHandler.cxx:271
 AliTRDSaxHandler.cxx:272
 AliTRDSaxHandler.cxx:273
 AliTRDSaxHandler.cxx:274
 AliTRDSaxHandler.cxx:275
 AliTRDSaxHandler.cxx:276
 AliTRDSaxHandler.cxx:277
 AliTRDSaxHandler.cxx:278
 AliTRDSaxHandler.cxx:279
 AliTRDSaxHandler.cxx:280
 AliTRDSaxHandler.cxx:281
 AliTRDSaxHandler.cxx:282
 AliTRDSaxHandler.cxx:283
 AliTRDSaxHandler.cxx:284
 AliTRDSaxHandler.cxx:285
 AliTRDSaxHandler.cxx:286
 AliTRDSaxHandler.cxx:287
 AliTRDSaxHandler.cxx:288
 AliTRDSaxHandler.cxx:289
 AliTRDSaxHandler.cxx:290
 AliTRDSaxHandler.cxx:291
 AliTRDSaxHandler.cxx:292
 AliTRDSaxHandler.cxx:293
 AliTRDSaxHandler.cxx:294
 AliTRDSaxHandler.cxx:295
 AliTRDSaxHandler.cxx:296
 AliTRDSaxHandler.cxx:297
 AliTRDSaxHandler.cxx:298
 AliTRDSaxHandler.cxx:299
 AliTRDSaxHandler.cxx:300
 AliTRDSaxHandler.cxx:301
 AliTRDSaxHandler.cxx:302
 AliTRDSaxHandler.cxx:303
 AliTRDSaxHandler.cxx:304
 AliTRDSaxHandler.cxx:305
 AliTRDSaxHandler.cxx:306
 AliTRDSaxHandler.cxx:307
 AliTRDSaxHandler.cxx:308
 AliTRDSaxHandler.cxx:309
 AliTRDSaxHandler.cxx:310
 AliTRDSaxHandler.cxx:311
 AliTRDSaxHandler.cxx:312
 AliTRDSaxHandler.cxx:313
 AliTRDSaxHandler.cxx:314
 AliTRDSaxHandler.cxx:315
 AliTRDSaxHandler.cxx:316
 AliTRDSaxHandler.cxx:317
 AliTRDSaxHandler.cxx:318
 AliTRDSaxHandler.cxx:319
 AliTRDSaxHandler.cxx:320
 AliTRDSaxHandler.cxx:321
 AliTRDSaxHandler.cxx:322
 AliTRDSaxHandler.cxx:323
 AliTRDSaxHandler.cxx:324
 AliTRDSaxHandler.cxx:325
 AliTRDSaxHandler.cxx:326
 AliTRDSaxHandler.cxx:327
 AliTRDSaxHandler.cxx:328
 AliTRDSaxHandler.cxx:329
 AliTRDSaxHandler.cxx:330
 AliTRDSaxHandler.cxx:331
 AliTRDSaxHandler.cxx:332
 AliTRDSaxHandler.cxx:333
 AliTRDSaxHandler.cxx:334
 AliTRDSaxHandler.cxx:335
 AliTRDSaxHandler.cxx:336
 AliTRDSaxHandler.cxx:337
 AliTRDSaxHandler.cxx:338
 AliTRDSaxHandler.cxx:339
 AliTRDSaxHandler.cxx:340
 AliTRDSaxHandler.cxx:341
 AliTRDSaxHandler.cxx:342
 AliTRDSaxHandler.cxx:343
 AliTRDSaxHandler.cxx:344
 AliTRDSaxHandler.cxx:345
 AliTRDSaxHandler.cxx:346
 AliTRDSaxHandler.cxx:347
 AliTRDSaxHandler.cxx:348
 AliTRDSaxHandler.cxx:349
 AliTRDSaxHandler.cxx:350
 AliTRDSaxHandler.cxx:351
 AliTRDSaxHandler.cxx:352
 AliTRDSaxHandler.cxx:353
 AliTRDSaxHandler.cxx:354
 AliTRDSaxHandler.cxx:355
 AliTRDSaxHandler.cxx:356
 AliTRDSaxHandler.cxx:357
 AliTRDSaxHandler.cxx:358
 AliTRDSaxHandler.cxx:359
 AliTRDSaxHandler.cxx:360
 AliTRDSaxHandler.cxx:361
 AliTRDSaxHandler.cxx:362
 AliTRDSaxHandler.cxx:363
 AliTRDSaxHandler.cxx:364
 AliTRDSaxHandler.cxx:365
 AliTRDSaxHandler.cxx:366
 AliTRDSaxHandler.cxx:367
 AliTRDSaxHandler.cxx:368
 AliTRDSaxHandler.cxx:369
 AliTRDSaxHandler.cxx:370
 AliTRDSaxHandler.cxx:371
 AliTRDSaxHandler.cxx:372
 AliTRDSaxHandler.cxx:373
 AliTRDSaxHandler.cxx:374
 AliTRDSaxHandler.cxx:375
 AliTRDSaxHandler.cxx:376
 AliTRDSaxHandler.cxx:377
 AliTRDSaxHandler.cxx:378
 AliTRDSaxHandler.cxx:379
 AliTRDSaxHandler.cxx:380
 AliTRDSaxHandler.cxx:381
 AliTRDSaxHandler.cxx:382
 AliTRDSaxHandler.cxx:383
 AliTRDSaxHandler.cxx:384
 AliTRDSaxHandler.cxx:385
 AliTRDSaxHandler.cxx:386
 AliTRDSaxHandler.cxx:387
 AliTRDSaxHandler.cxx:388
 AliTRDSaxHandler.cxx:389
 AliTRDSaxHandler.cxx:390
 AliTRDSaxHandler.cxx:391
 AliTRDSaxHandler.cxx:392
 AliTRDSaxHandler.cxx:393
 AliTRDSaxHandler.cxx:394
 AliTRDSaxHandler.cxx:395
 AliTRDSaxHandler.cxx:396
 AliTRDSaxHandler.cxx:397
 AliTRDSaxHandler.cxx:398
 AliTRDSaxHandler.cxx:399
 AliTRDSaxHandler.cxx:400
 AliTRDSaxHandler.cxx:401
 AliTRDSaxHandler.cxx:402
 AliTRDSaxHandler.cxx:403
 AliTRDSaxHandler.cxx:404
 AliTRDSaxHandler.cxx:405
 AliTRDSaxHandler.cxx:406
 AliTRDSaxHandler.cxx:407
 AliTRDSaxHandler.cxx:408
 AliTRDSaxHandler.cxx:409
 AliTRDSaxHandler.cxx:410
 AliTRDSaxHandler.cxx:411
 AliTRDSaxHandler.cxx:412
 AliTRDSaxHandler.cxx:413
 AliTRDSaxHandler.cxx:414
 AliTRDSaxHandler.cxx:415
 AliTRDSaxHandler.cxx:416
 AliTRDSaxHandler.cxx:417
 AliTRDSaxHandler.cxx:418
 AliTRDSaxHandler.cxx:419
 AliTRDSaxHandler.cxx:420
 AliTRDSaxHandler.cxx:421
 AliTRDSaxHandler.cxx:422
 AliTRDSaxHandler.cxx:423
 AliTRDSaxHandler.cxx:424
 AliTRDSaxHandler.cxx:425
 AliTRDSaxHandler.cxx:426
 AliTRDSaxHandler.cxx:427
 AliTRDSaxHandler.cxx:428
 AliTRDSaxHandler.cxx:429
 AliTRDSaxHandler.cxx:430
 AliTRDSaxHandler.cxx:431
 AliTRDSaxHandler.cxx:432
 AliTRDSaxHandler.cxx:433
 AliTRDSaxHandler.cxx:434
 AliTRDSaxHandler.cxx:435
 AliTRDSaxHandler.cxx:436
 AliTRDSaxHandler.cxx:437
 AliTRDSaxHandler.cxx:438
 AliTRDSaxHandler.cxx:439
 AliTRDSaxHandler.cxx:440
 AliTRDSaxHandler.cxx:441
 AliTRDSaxHandler.cxx:442
 AliTRDSaxHandler.cxx:443
 AliTRDSaxHandler.cxx:444
 AliTRDSaxHandler.cxx:445
 AliTRDSaxHandler.cxx:446
 AliTRDSaxHandler.cxx:447
 AliTRDSaxHandler.cxx:448
 AliTRDSaxHandler.cxx:449
 AliTRDSaxHandler.cxx:450
 AliTRDSaxHandler.cxx:451
 AliTRDSaxHandler.cxx:452
 AliTRDSaxHandler.cxx:453
 AliTRDSaxHandler.cxx:454
 AliTRDSaxHandler.cxx:455
 AliTRDSaxHandler.cxx:456
 AliTRDSaxHandler.cxx:457
 AliTRDSaxHandler.cxx:458
 AliTRDSaxHandler.cxx:459
 AliTRDSaxHandler.cxx:460
 AliTRDSaxHandler.cxx:461
 AliTRDSaxHandler.cxx:462
 AliTRDSaxHandler.cxx:463
 AliTRDSaxHandler.cxx:464
 AliTRDSaxHandler.cxx:465
 AliTRDSaxHandler.cxx:466
 AliTRDSaxHandler.cxx:467
 AliTRDSaxHandler.cxx:468
 AliTRDSaxHandler.cxx:469
 AliTRDSaxHandler.cxx:470
 AliTRDSaxHandler.cxx:471
 AliTRDSaxHandler.cxx:472
 AliTRDSaxHandler.cxx:473
 AliTRDSaxHandler.cxx:474
 AliTRDSaxHandler.cxx:475
 AliTRDSaxHandler.cxx:476
 AliTRDSaxHandler.cxx:477
 AliTRDSaxHandler.cxx:478
 AliTRDSaxHandler.cxx:479
 AliTRDSaxHandler.cxx:480
 AliTRDSaxHandler.cxx:481
 AliTRDSaxHandler.cxx:482
 AliTRDSaxHandler.cxx:483
 AliTRDSaxHandler.cxx:484
 AliTRDSaxHandler.cxx:485
 AliTRDSaxHandler.cxx:486
 AliTRDSaxHandler.cxx:487
 AliTRDSaxHandler.cxx:488
 AliTRDSaxHandler.cxx:489
 AliTRDSaxHandler.cxx:490
 AliTRDSaxHandler.cxx:491
 AliTRDSaxHandler.cxx:492
 AliTRDSaxHandler.cxx:493
 AliTRDSaxHandler.cxx:494
 AliTRDSaxHandler.cxx:495
 AliTRDSaxHandler.cxx:496
 AliTRDSaxHandler.cxx:497
 AliTRDSaxHandler.cxx:498
 AliTRDSaxHandler.cxx:499
 AliTRDSaxHandler.cxx:500
 AliTRDSaxHandler.cxx:501
 AliTRDSaxHandler.cxx:502
 AliTRDSaxHandler.cxx:503
 AliTRDSaxHandler.cxx:504
 AliTRDSaxHandler.cxx:505
 AliTRDSaxHandler.cxx:506
 AliTRDSaxHandler.cxx:507
 AliTRDSaxHandler.cxx:508
 AliTRDSaxHandler.cxx:509
 AliTRDSaxHandler.cxx:510
 AliTRDSaxHandler.cxx:511
 AliTRDSaxHandler.cxx:512
 AliTRDSaxHandler.cxx:513
 AliTRDSaxHandler.cxx:514
 AliTRDSaxHandler.cxx:515
 AliTRDSaxHandler.cxx:516
 AliTRDSaxHandler.cxx:517
 AliTRDSaxHandler.cxx:518
 AliTRDSaxHandler.cxx:519
 AliTRDSaxHandler.cxx:520
 AliTRDSaxHandler.cxx:521
 AliTRDSaxHandler.cxx:522
 AliTRDSaxHandler.cxx:523
 AliTRDSaxHandler.cxx:524
 AliTRDSaxHandler.cxx:525
 AliTRDSaxHandler.cxx:526
 AliTRDSaxHandler.cxx:527
 AliTRDSaxHandler.cxx:528
 AliTRDSaxHandler.cxx:529
 AliTRDSaxHandler.cxx:530
 AliTRDSaxHandler.cxx:531
 AliTRDSaxHandler.cxx:532
 AliTRDSaxHandler.cxx:533
 AliTRDSaxHandler.cxx:534
 AliTRDSaxHandler.cxx:535
 AliTRDSaxHandler.cxx:536
 AliTRDSaxHandler.cxx:537
 AliTRDSaxHandler.cxx:538
 AliTRDSaxHandler.cxx:539
 AliTRDSaxHandler.cxx:540
 AliTRDSaxHandler.cxx:541
 AliTRDSaxHandler.cxx:542
 AliTRDSaxHandler.cxx:543
 AliTRDSaxHandler.cxx:544
 AliTRDSaxHandler.cxx:545
 AliTRDSaxHandler.cxx:546
 AliTRDSaxHandler.cxx:547
 AliTRDSaxHandler.cxx:548
 AliTRDSaxHandler.cxx:549
 AliTRDSaxHandler.cxx:550
 AliTRDSaxHandler.cxx:551
 AliTRDSaxHandler.cxx:552
 AliTRDSaxHandler.cxx:553
 AliTRDSaxHandler.cxx:554
 AliTRDSaxHandler.cxx:555
 AliTRDSaxHandler.cxx:556
 AliTRDSaxHandler.cxx:557
 AliTRDSaxHandler.cxx:558
 AliTRDSaxHandler.cxx:559
 AliTRDSaxHandler.cxx:560
 AliTRDSaxHandler.cxx:561
 AliTRDSaxHandler.cxx:562
 AliTRDSaxHandler.cxx:563
 AliTRDSaxHandler.cxx:564
 AliTRDSaxHandler.cxx:565
 AliTRDSaxHandler.cxx:566
 AliTRDSaxHandler.cxx:567
 AliTRDSaxHandler.cxx:568