ROOT logo
/**************************************************************************
 * Copyright(c) 2007-2009, 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$ */

///////////////////////////////////////////////////////////////////
//                                                               //
// Implementation of the class for SDD preprocessing             //
// Run Types treated:                                            // 
// PULSER, INJECTOR -> Store OCDB parameters                     //
// ALL RUNS -> Store DCS reference data                          //
// Origin: E.Crescio, Torino, crescio@to.infn.it                 //
//         F.Prino, Torino, prino@to.infn.it                     //
//                                                               //
///////////////////////////////////////////////////////////////////

#include "AliITSDDLModuleMapSDD.h"
#include "AliITSPreprocessorSDD.h"
#include "AliITSCalibrationSDD.h"
#include "AliITSDriftSpeedSDD.h"
#include "AliITSDriftSpeedArraySDD.h"
#include "AliITSDCSAnalyzerSDD.h"
#include "AliShuttleInterface.h"
#include "AliCDBEntry.h"
#include "AliCDBMetaData.h"
#include "TObjArray.h"
#include "AliLog.h"
#include <TObjString.h>
#include <TSystem.h>
#include <TList.h>
#include <TF1.h>
#include <TH1D.h>

const TString AliITSPreprocessorSDD::fgkNameHistoPedestals = "hpedestal";
const TString AliITSPreprocessorSDD::fgkNameHistoNoise = "hnoise";
ClassImp(AliITSPreprocessorSDD)

//______________________________________________________________________
AliITSPreprocessorSDD::AliITSPreprocessorSDD( AliShuttleInterface* shuttle):
    AliPreprocessor("SDD", shuttle)
{
  // constructor
  AddRunType("PULSER");
  AddRunType("INJECTOR");
  AddRunType("PHYSICS"); 
}

//______________________________________________________________________
UInt_t AliITSPreprocessorSDD::Process(TMap* dcsAliasMap){


  // Get DDL map from OCDB
  AliCDBEntry* entry = GetFromOCDB("Calib", "DDLMapSDD");
  if(!entry){
    Log("DDL map file not found in OCDB.");  
    return 2;
  }
  AliITSDDLModuleMapSDD* ddlmap = (AliITSDDLModuleMapSDD*)entry->GetObject();
  if(!ddlmap){ 
    Log("AliITSDDLModuleMapSDD object not in file.");
    return 2;
  }
  ddlmap->PrintDDLMap();

  //preprocessing
  TString runType = GetRunType();
  Int_t retcode=0;

  if (runType == "PULSER"){
    Log("Process FXS files from PULSER RUN");
    retcode=ProcessPulser(ddlmap);
  }else if(runType== "INJECTOR"){
    Log("Process FXS files from INJECTOR RUN");
    retcode=ProcessInjector(ddlmap);
  }
  if(retcode!=0) return retcode;

  Log("Process DCS data");
  Bool_t retcodedcs =ProcessDCSDataPoints(dcsAliasMap);
  if(retcodedcs) return 0; 
  else return 1;           

}
//______________________________________________________________________
UInt_t AliITSPreprocessorSDD::ProcessPulser(AliITSDDLModuleMapSDD* ddlmap){
  // Process FXS files from PULSER run (baseline, noise, gain)
  // returns 0 in case of success, 
  //         1 in case of storage error, 
  //         2 in case of error with input files
  TObjArray calSDD(kNumberOfSDD);
  calSDD.SetOwner(kFALSE);

  Float_t baseline,rawnoise,cmn,corn,gain;
  Int_t isgoodan,i,im,is,isgoodmod,basmin,basoff;
  Int_t th,tl;
  Int_t numOfBadChannels[kNumberOfSDD];
  
  TList* sourceList = GetFileSources(kDAQ, "SDD_Calib");
  if (!sourceList){ 
    Log("Error: no sources found for SDD_Calib");
    return 2;
  }

  Int_t ind = 0;
  while (sourceList->At(ind)!=NULL) {
    TObjString* tarId = (TObjString*) sourceList->At(ind);
    TString tarName = GetFile(kDAQ, "SDD_Calib", tarId->GetString().Data());
    if(tarName.Length()==0){
      Log(Form("Baseline tar file from source %d not found.",ind));
      return 2;
    }
    TString command;
    command.Form("tar -xf %s",tarName.Data());
    gSystem->Exec(command);
    ind++;
  }
  delete sourceList;
  // Read ADC sampling frequency from fee.conf
  Int_t amSamplFreq=40;
  Int_t retfscf;
  FILE* feefil=fopen("fee.conf","r");
  if(feefil){
    retfscf=fscanf(feefil,"%d \n",&amSamplFreq);
    fclose(feefil);
    if(retfscf<0){
      Log("Error reading from fee.conf. AM sampling set at 40 MHz by default");
    }else{
      Log(Form("AM sampling frequency = %d MHz",amSamplFreq));
    }
  }else{
    Log("File fee.conf not found. AM sampling set at 40 MHz by default");
  }
  
  for(Int_t iddl=0;iddl<kNumberOfDDL;iddl++){
    for(Int_t imod=0;imod<kModulesPerDDL;imod++){
      Int_t modID=ddlmap->GetModuleNumber(iddl,imod);
      if(modID==-1) continue;
      modID-=240; // to have SDD modules numbering from 0 to 260
      AliITSCalibrationSDD *cal = new AliITSCalibrationSDD("simulated");
      if(amSamplFreq!=40) cal->SetAMAt20MHz();
      numOfBadChannels[modID]=0;
      Int_t badch[kNumberOfChannels];
      Bool_t sid0ok=kTRUE;
      Bool_t sid1ok=kTRUE;
      for(Int_t isid=0;isid<=1;isid++){
	TString inpFileName;
	inpFileName.Form("./SDDbase_ddl%02dc%02d_sid%d.data",iddl,imod,isid);

	FILE* basFil = fopen(inpFileName,"read");
	if (basFil == 0) {
	  Log(Form("File %s not found.",inpFileName.Data()));
	  if(isid==0){
	    sid0ok=kFALSE;
	    for(Int_t iChip=0; iChip<4; iChip++) cal->SetChipBad(iChip);
	    cal->SetDeadChannels(cal->GetDeadChannels()+256);
	    for(Int_t iAnode=0; iAnode<256; iAnode++) cal->SetBadChannel(iAnode,iAnode);
	  }else{
	    sid1ok=kFALSE;
	    for(Int_t iChip=4; iChip<8; iChip++) cal->SetChipBad(iChip);
	    cal->SetDeadChannels(cal->GetDeadChannels()+256);
	    for(Int_t iAnode=0; iAnode<256; iAnode++) cal->SetBadChannel(iAnode,iAnode+256);
	  }
	  continue;
	}

	retfscf=fscanf(basFil,"%d %d %d\n",&im,&is,&isgoodmod);
	if(retfscf<0) isgoodmod=kFALSE;
	if(!isgoodmod){
	  if(isid==0){
	    sid0ok=kFALSE;
	    for(Int_t iChip=0; iChip<4; iChip++) cal->SetChipBad(iChip);
	  }else{
	    sid1ok=kFALSE;
	    for(Int_t iChip=4; iChip<8; iChip++) cal->SetChipBad(iChip);
	  }
	}
	retfscf=fscanf(basFil,"%d\n",&th);
	retfscf=fscanf(basFil,"%d\n",&tl);
	cal->SetZSLowThreshold(isid,tl);
	cal->SetZSHighThreshold(isid,th);
	for(Int_t ian=0;ian<(kNumberOfChannels/2);ian++){
	  retfscf=fscanf(basFil,"%d %d %f %d %d %f %f %f %f\n",&i,&isgoodan,&baseline,&basmin,&basoff,&rawnoise,&cmn,&corn,&gain);
	  Int_t ich=ian;
	  if(isid==1) ich+=256;
	  if(!isgoodan){ 
	    Int_t ibad=numOfBadChannels[modID];
	    badch[ibad]=ich;
	    numOfBadChannels[modID]++;
	  }
	  cal->SetBaseline(ich,baseline-basoff);
	  cal->SetNoiseAfterElectronics(ich,rawnoise);
	  cal->SetGain(ich,gain);
	}
	cal->SetDeadChannels(numOfBadChannels[modID]);
	for(Int_t ibad=0;ibad<numOfBadChannels[modID];ibad++){
	  cal->SetBadChannel(ibad,badch[ibad]);
	}
	fclose(basFil);
      }
      if(!sid0ok && !sid1ok) cal->SetBad();
      Log(Form("Put calib obj for module %d (DDL %d  Carlos %d)",modID,iddl,imod));
      calSDD.AddAt(cal,modID);
    }
  }
  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetResponsible("Francesco Prino");
  md->SetBeamPeriod(0);
  md->SetComment("AliITSCalibrationSDD from PEDESTAL+PULSER runs");
  Bool_t retCode = Store("Calib","CalibSDD",&calSDD,md, 0, kTRUE);
  if(retCode) return 0;
  else return 1;
}
//______________________________________________________________________
UInt_t AliITSPreprocessorSDD::ProcessInjector(AliITSDDLModuleMapSDD* ddlmap){
  // Process FXS files from injector events (INJECTOR or PHYSICS runs)
  // returns 0 in case of success, 
  //         1 in case of storage error, 
  //         2 in case of error with input files
  TObjArray vdrift(2*kNumberOfSDD);
  vdrift.SetOwner(kFALSE);
  Int_t evNumb,polDeg; 
  UInt_t timeStamp,statusInj;
  Bool_t modSet[2*kNumberOfSDD]; // flag modules with good inj.
  for(Int_t ihyb=0; ihyb<2*kNumberOfSDD; ihyb++) modSet[ihyb]=0;
  Double_t nPtLay3 = 0;
  Double_t nPtLay4 = 0;

  Double_t param[4];    // parameters of poly fit
  Double_t minValP0=5.; // min value for param[0]
  Double_t maxValP0=8.; // max value for param[0]
  Double_t minValP1=0.; // min value for param[1]
  Double_t aveCoefLay3[4]={0.,0.,0.,0.};  // average param for good mod.
  Double_t aveCoefLay4[4]={0.,0.,0.,0.};  // average param for good mod.
  Double_t defCoef[4]={6.53227,0.00128941,-5.14493e-06,0};  // default values for param
  Float_t auxP;

  TList* sourceList = GetFileSources(kDAQ, "SDD_Injec");
  if (!sourceList){ 
    Log("Error: no sources found for SDD_Injec");
    return 2;
  }
  Int_t ind = 0;
  while (sourceList->At(ind)!=NULL) {
    TObjString* tarId = (TObjString*) sourceList->At(ind);
    TString tarName = GetFile(kDAQ, "SDD_Injec", tarId->GetString().Data());
    if(tarName.Length()==0){
      Log(Form("Injector tar file from source %d not found.",ind));
      return 2;
    }
    TString command;
    command.Form("tar -xf %s",tarName.Data());
    gSystem->Exec(command);
    ind++;
  }
  delete sourceList;
  Int_t retfscf;
  

  for(Int_t iddl=0;iddl<kNumberOfDDL;iddl++){
    for(Int_t imod=0;imod<kModulesPerDDL;imod++){
      Int_t modID=ddlmap->GetModuleNumber(iddl,imod);
      if(modID==-1) continue;
      modID-=240; // to have SDD modules numbering from 0 to 260
      for(Int_t isid=0;isid<=1;isid++){
	AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD();
	TString inpFileName;
	inpFileName.Form("./SDDinj_ddl%02dc%02d_sid%d.data",iddl,imod,isid);
	FILE* injFil = fopen(inpFileName,"read");
	if (injFil == 0) {
	  Log(Form("File %s not found.",inpFileName.Data()));
	  continue;
	}
	retfscf=fscanf(injFil,"%d",&polDeg);
	if(retfscf<0){
	  Log(Form("File %s has bad format.",inpFileName.Data()));
	  continue;
	}
	while (!feof(injFil)){
	  retfscf=fscanf(injFil,"%d %u ",&evNumb,&timeStamp);
	  if(evNumb==-99){
	    statusInj=timeStamp;
	    arr->SetInjectorStatus(statusInj);
	  }else{
	    if(feof(injFil)) break;
	    for(Int_t ic=0;ic<4;ic++){ 
	      retfscf=fscanf(injFil,"%f ",&auxP);
	      param[ic]=auxP;
	    }

	    if(polDeg>=0 && polDeg<=AliITSDriftSpeedSDD::GetMaxPolDeg() && 
	       param[0]>minValP0 && param[0]<maxValP0 && param[1]>minValP1){
	      if(polDeg==3){
		if(modID<kNumberOfSDDLay3){ 
		  for(Int_t ic=0;ic<4;ic++) aveCoefLay3[ic]+=param[ic];
		  nPtLay3++;
		}else{ 
		  for(Int_t ic=0;ic<4;ic++) aveCoefLay4[ic]+=param[ic];
		  nPtLay4++;
		}
	      }
	      AliITSDriftSpeedSDD *dsp=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,param);
	      arr->AddDriftSpeed(dsp);
	      modSet[2*modID+isid]=1;
	    }else{
	      Log(Form("Module %d side %d not accepted, degree=%d, params=%g %g %g %g",modID+240,isid,polDeg,param[0],param[1],param[2],param[3]));
	    }
	  }
	}
	fclose(injFil);
	Log(Form("Put calib obj for hybrid %d (DDL %d  Carlos %d)",2*modID+isid,iddl,imod));
	if(modSet[2*modID+isid]) vdrift.AddAt(arr,2*modID+isid);
      }
    }
  }

  // set drift speed for modules with bad injectors
  for(Int_t ic=0;ic<4;ic++){ 
    if(nPtLay3>0) aveCoefLay3[ic]/=nPtLay3; // mean parameters
    else aveCoefLay3[ic]=defCoef[ic]; // default parameters
    if(nPtLay4>0) aveCoefLay4[ic]/=nPtLay4; // mean parameters
    else aveCoefLay4[ic]=defCoef[ic]; // default parameters
  }
  AliITSDriftSpeedSDD *avdsp3=new AliITSDriftSpeedSDD(evNumb,timeStamp,3,aveCoefLay3);
  AliITSDriftSpeedSDD *avdsp4=new AliITSDriftSpeedSDD(evNumb,timeStamp,3,aveCoefLay4);

  // Check status of golden modules
  Int_t idGoldenMod=-1, idGoldenSide=-1;
  Int_t idGoldenModList[5]={319,319,321,243,243};
  Int_t idGoldenSideList[5]={0,1,0,0,1};
  AliITSDriftSpeedSDD* refSpeed=0x0;
  for(Int_t iGold=0; iGold<5; iGold++){
    Int_t indexG=2*(idGoldenModList[iGold]-240)+idGoldenSideList[iGold];
    if(modSet[indexG]){
      idGoldenMod=idGoldenModList[iGold];
      idGoldenSide=idGoldenSideList[iGold];
      AliITSDriftSpeedArraySDD* arrRef=(AliITSDriftSpeedArraySDD*)vdrift.At(indexG);
      refSpeed=arrRef->GetDriftSpeedObject(0);
      break;
    }
  }
  TList* correctionList=0x0;
  if(idGoldenMod>=240 && idGoldenSide>=0){
    // Get rescaling corrections from OCDB
    AliCDBEntry* entry = GetFromOCDB("Calib", "RescaleDriftSpeedSDD");
    if(!entry){
      Log("RescaleDriftSpeedSDD file not found in OCDB.");  
    }
    TList* fullList=(TList*)entry->GetObject();
    if(!fullList){ 
      Log("TList object not found in file.");
    }
    TString listName=Form("RefMod%d_Side%d",idGoldenMod,idGoldenSide);
    correctionList=(TList*)fullList->FindObject(listName.Data());
    if(!correctionList){
      Log(Form("TList for requested module %d side %d not found",idGoldenMod,idGoldenSide));
    }else{
      Log(Form("Use module %d side %d as reference module",idGoldenMod,idGoldenSide));
      if(refSpeed){
	Log(Form("Drift speed params for golden module = %g %g %g %g",refSpeed->GetDriftSpeedParameter(0),refSpeed->GetDriftSpeedParameter(1),refSpeed->GetDriftSpeedParameter(2),refSpeed->GetDriftSpeedParameter(3)));
      }else{
	AliError("No drift speed object for golden module");
      }
    }
  }
  
  for(Int_t ihyb=0; ihyb<2*kNumberOfSDDLay3; ihyb++){
    AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD();
    if(modSet[ihyb]==0){ 
      Int_t iBadMod=ihyb/2+240;
      Int_t iBadSide=ihyb%2;
      Bool_t goldenUsed=kFALSE;
      if(correctionList && refSpeed){
	Double_t *params=RescaleDriftSpeedModule(correctionList,iBadMod,iBadSide,refSpeed);
	if(params){
	  AliWarning(Form("No good injector events for mod. %d side %d --> use rescaled values from golden module",iBadMod,iBadSide));
	  AliITSDriftSpeedSDD* dspres=new AliITSDriftSpeedSDD(0,refSpeed->GetEventTimestamp(),3,params);
	  arr->AddDriftSpeed(dspres);
	  arr->SetInjectorStatus(1);
	  goldenUsed=kTRUE;
	}
      }
      if(!goldenUsed){
	AliWarning(Form("No good injector events for mod. %d side %d --> use average values for layer 3",iBadMod,iBadSide));
	arr->AddDriftSpeed(avdsp3);
	arr->SetInjectorStatus(0);
      }
      vdrift.AddAt(arr,ihyb);
    }
  }

  for(Int_t ihyb=2*kNumberOfSDDLay3; ihyb<2*kNumberOfSDD; ihyb++){
    if(modSet[ihyb]==0){ 
      AliWarning(Form("No good injector events for mod. %d side %d --> use average values for layer 4",ihyb/2,ihyb%2));
      AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD();
      arr->AddDriftSpeed(avdsp4);
      arr->SetInjectorStatus(0);
      vdrift.AddAt(arr,ihyb);
    }
  }

  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetResponsible("Francesco Prino");
  md->SetBeamPeriod(0);
  md->SetComment("AliITSDriftSpeedSDD from injector events");
  Bool_t retCode = Store("Calib","DriftSpeedSDD",&vdrift,md,0, kTRUE);
  if(retCode) return 0;
  else return 1;
}

//______________________________________________________________________
Double_t* AliITSPreprocessorSDD::RescaleDriftSpeedModule(const TList* theList,
							 Int_t iBadMod, 
							 Int_t iBadSide,
							 const AliITSDriftSpeedSDD* refSpeed)
  const
{
  // Rescale driftSpeed for a drift region starting from values of golden module

  if(!refSpeed) return 0x0;
  TString hisName=Form("hRatioMod%d_Side%d",iBadMod,iBadSide);
  TH1D* h=(TH1D*)theList->FindObject(hisName.Data());
  if(!h) return 0x0;

  TF1* fpoly=new TF1("fpoly","pol3",0.,255.);
  for(Int_t iAnode=0; iAnode<256; iAnode++){
    Double_t vref=refSpeed->GetDriftSpeedAtAnode((Double_t)iAnode);
    Double_t vcorr=h->GetBinContent(iAnode+1)*vref;
    h->SetBinContent(iAnode+1,vcorr);
  }
  h->Fit(fpoly,"RNQ");
  Double_t *params=new Double_t[4];
  for(Int_t iPar=0; iPar<4; iPar++) params[iPar]=fpoly->GetParameter(iPar);
  delete fpoly;
  return params;
}

//______________________________________________________________________
Bool_t AliITSPreprocessorSDD::ProcessDCSDataPoints(TMap* dcsAliasMap){
  // Process DCS data
  AliITSDCSAnalyzerSDD *dcs=new AliITSDCSAnalyzerSDD();
  dcs->AnalyzeData(dcsAliasMap);
  TObjArray refDCS(kNumberOfSDD);
  refDCS.SetOwner(kFALSE);
  for(Int_t imod=0;imod<kNumberOfSDD;imod++){
    AliITSDCSDataSDD *dcsdata=dcs->GetDCSData(imod);
    refDCS.Add(dcsdata);
  }    
  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetResponsible("Francesco Prino");
  md->SetBeamPeriod(0);
  md->SetComment("AliITSDCSDataSDD objects from DCS DB");
  Bool_t retCode = StoreReferenceData("DCS","DataSDD",&refDCS,md);
  return retCode;
}

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