ROOT logo
/**************************************************************************
 * Copyright(c) 2004, 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$ */
/** @file    AliFMDPreprocessor.cxx
    @author  Hans Hjersing Dalsgaard <canute@nbi.dk>
    @date    Mon Mar 27 12:39:09 2006
    @brief   Shuttle "preprocessor" for the FMD
*/
//___________________________________________________________________
//
// The class processes data points from DCS (via Amanada), and DAQ DA
// files (via FXS) to make calibration data for the FMD. 
//
// Data points: 
//    *  Nothing yet. 
//
// DAQ FXS file:
//    * pedestals - a (ASCII) Comma Separated Values files with the
//                  fields 
//                       rcu	 DDL number 
//                       board   FEC board number 
//                       chip    ALTRO chip number on FEC
//                       channel ALTRO channel number
//                       strip   VA1 strip number
//                       sample  Sample number
//                       ped     Mean of ADC spectra
//                       noise   Spread of ADC spectra
//                       mu      Mean of Gaussian fit to ADC spectra
//                       sigma   Variance of Gaussian fit to ADC spectra
//                       chi2    Chi^2 per degrees of freedom of fit
//    * Gains     - a (ASCII) Comma Separated Values files with the
//                  fields 
//                       rcu	 DDL number 
//                       board   FEC board number 
//                       chip    ALTRO chip number on FEC
//                       channel ALTRO channel number
//                       strip   VA1 strip number
//                       gain    Slope of gain
//                       error   Error on gain
//                       chi2    Chi^2 per degrees of freedom of fit
//                  
// See also 
//
//   http://aliceinfo.cern.ch/Offline/Activities/Shuttle.html
//
// Latest changes by Christian Holm Christensen
//

 #include <iostream>

#include <fstream>
#include "AliFMDPreprocessor.h"
#include "AliFMDCalibPedestal.h"
#include "AliFMDCalibGain.h"
#include "AliFMDCalibStripRange.h"
#include "AliFMDCalibSampleRate.h"
#include "AliFMDParameters.h"
#include "AliCDBMetaData.h"
#include "AliCDBManager.h"
// #include "AliDCSValue.h"
#include "AliLog.h"
#include <TTimeStamp.h>
// #include <TFile.h>
#include <TObjString.h>
#include <TString.h>
#include <TNamed.h>


ClassImp(AliFMDPreprocessor)
#if 0 // Do not remove - here to make Emacs happy
;
#endif 


//____________________________________________________
AliFMDPreprocessor::AliFMDPreprocessor(AliShuttleInterface* shuttle)
  : AliPreprocessor("FMD", shuttle)
{
  AddRunType("PHYSICS");
  AddRunType("STANDALONE");
  AddRunType("PEDESTAL");
  AddRunType("GAIN");
}


//____________________________________________________
Bool_t AliFMDPreprocessor::GetAndCheckFileSources(TList*&     list,
						  Int_t       system, 
						  const char* id) 
{
  // Convinience function 
  // Parameters: 
  //   list     On return, list of files. 
  //   system   Alice system (DAQ, DCS, ...)
  //   id       File id
  // Return:
  //   kTRUE on success. 
  list = GetFileSources(system, id);
  if (!list) { 
    TString sys;
    switch (system) { 
    case kDAQ: sys = "DAQ";     break;
    case kDCS: sys = "DCS";     break;
    default:   sys = "unknown"; break;
    }
    Log(Form("Failed to get file sources for %s/%d", sys.Data(), system));
    return kFALSE;
  }
  return kTRUE;
}

//____________________________________________________
AliCDBEntry* 
AliFMDPreprocessor::GetFromCDB(const char* second, const char* third)
{
  return GetFromOCDB(second, third);
}


//____________________________________________________
UInt_t AliFMDPreprocessor::Process(TMap* /* dcsAliasMap */)
{
  // Main member function. 
  // Parameters: 
  //    dcsAliassMap   Map of DCS data point aliases.
  // Return 
  //    0 on success, >0 otherwise 
  Bool_t resultPed   = kTRUE;
  Bool_t resultGain  = kTRUE;
  Bool_t resultRange = kTRUE;
  Bool_t resultRate  = kTRUE;
  Bool_t resultZero  = kTRUE;
  Bool_t infoCalib   = kTRUE;
  Bool_t resultDead  = kTRUE;
  // Do we need this ?
  // if(!dcsAliasMap) return 1;
  // 
  // Invoking the cdb manager and the FMD parameters class
  // AliCDBManager* cdb   = AliCDBManager::Instance();
  // cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  // cdb->SetRun(0);
  
  // Get the run type 
  TString runType(GetRunType()); 
  
  AliFMDParameters* pars = AliFMDParameters::Instance();
  if(runType.Contains("PEDESTAL", TString::kIgnoreCase))
    pars->Init(this, false, AliFMDParameters::kAltroMap|AliFMDParameters::kPulseGain);
  else if(runType.Contains("GAIN", TString::kIgnoreCase))
    pars->Init(this, false, AliFMDParameters::kAltroMap|AliFMDParameters::kPedestal);
  else
    pars->Init(this, false, AliFMDParameters::kAltroMap);
  
  // This is if the SOR contains Fee parameters, and we run a DA to
  // extract these parameters.   The same code could work if we get
  // the information from DCS via the FXS 
  TList* files = 0;
  AliFMDCalibSampleRate*      calibRate  = 0;
  AliFMDCalibStripRange*      calibRange = 0;
  AliFMDCalibZeroSuppression* calibZero  = 0;

  if (GetAndCheckFileSources(files, kDAQ,pars->GetConditionsShuttleID()))
    infoCalib = GetInfoCalibration(files, calibRate, calibRange, calibZero);
 
  resultRate  = (!calibRate  ? kFALSE : kTRUE);
  resultRange = (!calibRange ? kFALSE : kTRUE);
  resultZero  = (!calibZero  ? kFALSE : kTRUE);
  

  
  //Creating calibration objects
  AliFMDCalibPedestal* calibPed  = 0;
  AliFMDCalibGain*     calibGain = 0;
  AliFMDCalibDeadMap*  calibDead = 0;
  if (runType.Contains("PEDESTAL", TString::kIgnoreCase)) { 
    if (GetAndCheckFileSources(files, kDAQ, pars->GetPedestalShuttleID())) {
      if(files->GetSize())
	calibPed = GetPedestalCalibration(files);
    }
    resultPed = (calibPed ? kTRUE : kFALSE);
  }
  if (runType.Contains("GAIN", TString::kIgnoreCase)) {
    if (GetAndCheckFileSources(files, kDAQ, pars->GetGainShuttleID())) {
      if(files->GetSize())
	calibGain = GetGainCalibration(files);
    }
    resultGain = (calibGain ? kTRUE : kFALSE);
  }
  if(runType.Contains("PEDESTAL", TString::kIgnoreCase) || runType.Contains("GAIN", TString::kIgnoreCase))
    calibDead = GetDeadChannelMap(calibPed,calibGain);
  
  //Storing Calibration objects  
  AliCDBMetaData metaData;
  metaData.SetBeamPeriod(0);
  metaData.SetResponsible("Hans H. Dalsgaard");
  metaData.SetComment("Preprocessor stores pedestals and gains for the FMD.");
  
  if(calibPed)  { 
    resultPed  = Store("Calib","Pedestal", calibPed, &metaData, 0, kTRUE);
    delete calibPed;
  }
  if(calibGain) { 
    resultGain = Store("Calib","PulseGain", calibGain, &metaData, 0, kTRUE);
    delete calibGain;
  }
  if(calibRange) { 
    resultRange = Store("Calib","StripRange", calibRange, &metaData, 0, kTRUE);
    delete calibRange;
  }
  if(calibRate) { 
    resultRate = Store("Calib","SampleRate", calibRate, &metaData, 0, kTRUE);
    delete calibRate;
  }
  if(calibZero) { 
    resultZero = Store("Calib","ZeroSuppression", calibZero,&metaData,0,kTRUE);
    delete calibZero;
  }
  if(calibDead) { 
    resultDead = Store("Calib","Dead", calibDead,&metaData,0,kTRUE);
    delete calibDead;
  }

  Bool_t success = (resultPed && resultGain  && resultRange && 
		    resultRate  && resultZero && resultDead && infoCalib);
  
  Log(Form("FMD preprocessor was %s", (success ? "successful" : "failed")));
  return (success ? 0 : 1);
}

//____________________________________________________________________
Bool_t
AliFMDPreprocessor::GetInfoCalibration(TList* files, 
				       AliFMDCalibSampleRate*&      s,
				       AliFMDCalibStripRange*&      r, 
				       AliFMDCalibZeroSuppression*& z)
{
  // Get info calibrations. 
  // Parameters:
  //     files List of files. 
  //     s     On return, newly allocated object 
  //     r     On return, newly allocated object 
  //     z     On return, newly allocated object 
  // Return: 
  //     kTRUE on success
  if (!files) return kFALSE; // Should really be false
  if (files->GetEntries() <= 0) return kFALSE;
  
  s = new AliFMDCalibSampleRate();
  r = new AliFMDCalibStripRange();
  z = new AliFMDCalibZeroSuppression();
  
  AliFMDParameters*    pars     = AliFMDParameters::Instance();
  TIter                iter(files);
  TObjString*          fileSource;

  while((fileSource = dynamic_cast<TObjString*>(iter.Next()))) {
    const Char_t* filename = GetFile(kDAQ, pars->GetConditionsShuttleID(), fileSource->GetName());
    std::ifstream in(filename);
    if(!in) {
      Log(Form("File %s not found!", filename));
      continue;
    }
    s->ReadFromFile(in);
    r->ReadFromFile(in);
  }
  return kTRUE;
}

  
//____________________________________________________________________
AliFMDCalibPedestal* 
AliFMDPreprocessor::GetPedestalCalibration(const TList* pedFiles)
{
  // Read DAQ DA produced CSV files of pedestals, and return a
  // calibration object. 
  // Parameters:
  //   pedFiles     List of pedestal files 
  // Return 
  //   A pointer to a newly allocated AliFMDCalibPedestal object, or
  //   null in case of errors. 
  if(!pedFiles) return 0;

  AliFMDCalibPedestal* calibPed = new AliFMDCalibPedestal();
  AliFMDParameters*    pars     = AliFMDParameters::Instance();
  TIter                iter(pedFiles);
  TObjString*          fileSource;
  
  while((fileSource = dynamic_cast<TObjString*>(iter.Next()))) {
    const Char_t* filename = GetFile(kDAQ, pars->GetPedestalShuttleID(), 
				     fileSource->GetName());
    std::ifstream in(filename);
    if(!in) {
      Log(Form("File %s not found!", filename));
      continue;
    }
    // Loop until EOF
    int lineno = 0;
    char cc;
    while((cc = in.peek())!=EOF) {
      if(in.bad()) { 
	Log(Form("Bad read at line %d in %s", lineno, filename));
	break;
      }
      if (cc == '#') { 
	TString line;
	line.ReadLine(in);
	lineno++;
	if (lineno == 1) {
	  line.ToLower();
	  if(!line.Contains(pars->GetPedestalShuttleID())) {
	    Log(Form("File header is not from pedestal!: %s", line.Data()));
	    break;
	  }
	  Log("File contains data from pedestals");
	}
	continue;
      }
      UShort_t det, sec, strip;
      Char_t ring;
      Float_t ped, noise, mu, sigma, chi2ndf;
      Char_t c[8];
	  
      in >> det      >> c[0] 
	 >> ring     >> c[1]
	 >> sec      >> c[2]
	 >> strip    >> c[3]
	 >> ped      >> c[4]
	 >> noise    >> c[5]
	 >> mu       >> c[6]
	 >> sigma    >> c[7]
	 >> chi2ndf;
      lineno++;
      
      // Ignore trailing garbage 
      // if (strip > 127) continue;
      
      //Setting DDL to comply with the FMD in DAQ
      // UInt_t FmdDDLBase = 3072; 
      // ddl = ddl - FmdDDLBase;
      //Setting the pedestals via the hardware address
      
      
      // pars->Hardware2Detector(ddl,board,chip,channel,det,ring,sec,str);
      // strip += str;
     
      calibPed->Set(det,ring,sec,strip,ped,noise);
     
    }
  }
  return calibPed;
}	

//____________________________________________________________________
AliFMDCalibGain* 
AliFMDPreprocessor::GetGainCalibration(const TList* gainFiles)
{
  // Read DAQ DA produced CSV files of pedestals, and return a
  // calibration object. 
  // Parameters:
  //   pedFiles     List of pedestal files 
  // Return 
  //   A pointer to a newly allocated AliFMDCalibPedestal object, or
  //   null in case of errors. 
  if(!gainFiles) return 0;
  
  AliFMDCalibGain*  calibGain  = new AliFMDCalibGain();
  AliFMDParameters* pars       = AliFMDParameters::Instance();
  TIter             iter(gainFiles);
  TObjString*       fileSource;
  while((fileSource = dynamic_cast<TObjString *>(iter.Next()))) {
    const Char_t* filename = GetFile(kDAQ, pars->GetGainShuttleID(), 
				     fileSource->GetName());
    std::ifstream in(filename);
    if(!in) {
      Log(Form("File %s not found!", filename));
      continue;
    }
    // Loop until EOF                                                                                                                                   
    int lineno = 0;
    char cc;
    while((cc = in.peek())!=EOF) {
      if(in.bad()) {
        Log(Form("Bad read at line %d in %s", lineno, filename));
        break;
      }
      if (cc == '#') {
        TString line;
        line.ReadLine(in);
        lineno++;
        if (lineno == 1) {
          line.ToLower();
          if(!line.Contains(pars->GetGainShuttleID())) {
            Log(Form("File header is not from gains!: %s", line.Data()));
            break;
          }
          Log("File contains data from gains");
        }
	continue;
      }
      UShort_t det, sec, strip;
      Char_t ring;
      
      Float_t gain,error,  chi2ndf;
      Char_t c[6];
      
      in >> det      >> c[0] 
	 >> ring     >> c[1]
	 >> sec      >> c[2]
	 >> strip    >> c[3]
	 >> gain     >> c[4]
	 >> error    >> c[5]
	 >> chi2ndf;
      lineno++;
      // Ignore trailing garbage
      //if(strip > 127) continue;
      
      //Setting DDL to comply with the FMD in DAQ
      // UInt_t FmdDDLBase = 3072; 
      // ddl = ddl - FmdDDLBase;
      //Setting the pedestals via the hardware address
      //   pars->Hardware2Detector(ddl,board,chip,channel,det,ring,sec,str);

      // strip += str;
      calibGain->Set(det,ring,sec,strip,gain);
    }
  }
  return calibGain;
}
//____________________________________________________________________
AliFMDCalibDeadMap*    
AliFMDPreprocessor::GetDeadChannelMap(AliFMDCalibPedestal* pedcalib,
				      AliFMDCalibGain*     gaincalib) {
  //creating dead channel map. '0' means 51200 entries
  AliFMDCalibDeadMap* deadmap = new AliFMDCalibDeadMap(0);
  //deadmap->Reset(kTRUE);
  Float_t noise = 0;
  Float_t gain  = 0;
  
  AliFMDParameters* pars = AliFMDParameters::Instance();
  //Looping over the channels.
  for(UShort_t det=1;det<=3;det++) {
    Int_t nRings = (det==1 ? 1 : 2);
    for (UShort_t ir = 0; ir < nRings; ir++) {
      Char_t   ring = (ir == 0 ? 'I' : 'O');
      UShort_t nsec = (ir == 0 ? 20  : 40);
      UShort_t nstr = (ir == 0 ? 512 : 256);
      
      for(UShort_t sec =0; sec < nsec;  sec++) {
	
	for(UShort_t strip = 0; strip < nstr; strip++) {
	  
	  Bool_t isDead = kFALSE;
	  if(pedcalib)
	    noise = pedcalib->Width(det, ring, sec, strip);
	  else 
	    noise = pars->GetPedestalWidth(det, ring, sec, strip);
       
	  if(gaincalib)
	    gain  = gaincalib->Value(det, ring, sec, strip);
	  else 
	    gain  = pars->GetPulseGain(det, ring, sec, strip);
	  
	  //marking these channels dead.
	  if (gain < 0.5 || gain > 5 || noise > 10 || noise == 0) isDead = kTRUE;
	  
	  deadmap->operator()(det, ring, sec, strip) = isDead;
	}
      }
    }
  }

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