ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, 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.                  *
 **************************************************************************/

/*
   $Log$
   Revision 1.17  2007/08/28 16:03:30  acolla
   Restored to v1.14:


   Function Bool_t GetHLTStatus() added to preprocessor interface. It will return
   the status of HLT read from the run logbook.

   Revision 1.16  2007/08/22 09:20:50  hristov
   Updated QA classes (Yves)

   Revision 1.14  2007/05/30 06:35:21  jgrosseo
   Adding functionality to the Shuttle/TestShuttle:
   o) Function to retrieve list of sources from a given system (GetFileSources with id=0)
   o) Function to retrieve list of IDs for a given source      (GetFileIDs)
   These functions are needed for dealing with the tag files that are saved for the GRP preprocessor
   Example code has been added to the TestProcessor in TestShuttle

   Revision 1.13  2007/04/12 08:26:33  jgrosseo
   updated commment

   Revision 1.12  2007/04/05 08:05:55  acolla
   Conversion from online to offline detector name in StoreReferenceFile

   Revision 1.11  2007/04/04 10:29:18  jgrosseo
   1) Storing of files to the Grid is now done _after_ your preprocessors succeeded. This is transparent, which means that you can still use the same functions (Store, StoreReferenceData) to store files to the Grid. However, the Shuttle first stores them locally and transfers them after the preprocessor finished. The return code of these two functions has changed from UInt_t to Bool_t which gives you the success of the storing.
   In case of an error with the Grid, the Shuttle will retry the storing later, the preprocessor does not need to be run again.

   2) The meaning of the return code of the preprocessor has changed. 0 is now success and any other value means failure. This value is stored in the log and you can use it to keep details about the error condition.

   3) New function StoreReferenceFile to _directly_ store a file (without opening it) to the reference storage.

   4) The memory usage of the preprocessor is monitored. If it exceeds 2 GB it is terminated.

   5) New function AliPreprocessor::ProcessDCS(). If you do not need to have DCS data in all cases, you can skip the processing by implemting this function and returning kFALSE under certain conditions. E.g. if there is a certain run type.
   If you always need DCS data (like before), you do not need to implement it.

   6) The run type has been added to the monitoring page

   Revision 1.9  2007/02/28 10:42:58  acolla
   Run type field added in SHUTTLE framework. Run type is read from "run type" logbook and retrieved by
   AliPreprocessor::GetRunType() function.

   Revision 1.7  2006/11/06 14:24:21  jgrosseo
   reading of run parameters from the logbook
   online offline naming conversion

   Revision 1.6  2006/10/02 12:57:48  jgrosseo
   Small interface change of function StoreReferenceData in Shuttle

   Revision 1.5  2006/09/04 17:42:34  hristov
   Changes required by Effective C++

   Revision 1.4  2006/08/08 14:20:49  jgrosseo
   Update to shuttle classes (Alberto)

   - Possibility to set the full object's path in the Preprocessor's and
   Shuttle's  Store functions
   - Possibility to extend the object's run validity in the same classes
   ("startValidity" and "validityInfinite" parameters)
   - Implementation of the StoreReferenceData function to store reference
   data in a dedicated CDB storage.

   Revision 1.3  2006/07/11 12:42:43  jgrosseo
   adding parameters for extended validity range of data produced by preprocessor

   Revision 1.2  2006/06/06 16:36:49  jgrosseo
   minor changes in AliShuttleInterface and AliPreprocessor

   Revision 1.1  2006/06/02 14:14:36  hristov
Separate library for CDB (Jan)

  Revision 1.2  2006/03/07 07:52:34  hristov
New version (B.Yordanov)

  Revision 1.3  2005/11/17 17:47:34  byordano
  TList changed to TObjArray

  Revision 1.2  2005/11/17 14:43:22  byordano
  import to local CVS

  Revision 1.1.1.1  2005/10/28 07:33:58  hristov
  Initial import as subdirectory in AliRoot

  Revision 1.1.1.1  2005/09/12 22:11:40  byordano
  SHUTTLE package

  Revision 1.2  2005/08/29 21:15:47  byordano
  some docs added

  */

  // Description:
  // This class is the CDBPreProcessor interface,
  // supposed to be implemented by any detector
  // interested in immediate processing of data 
  // which is retrieved from DCS.
  // For every particular run set of aliases and
  // their corespoding value sets are returned.
  // Usage schema:
  //	1) virtual void Initialize(Int_t run, UInt_t startTime, UInt_t endTime)	
  //	This method is called at the begining of data retrieval.
  //	run: run number
  //	startTime: when the run started
  //	endTime: when the run finished	
  //
  //	2) virtual void Process()
  //
  //	This method is called and passed a list of retrieved values from DCS
  //
  //


#include "AliPreprocessor.h"

#include <TString.h>
#include <TMap.h>
#include <TObjString.h>

#include "AliLog.h"
#include "AliCDBMetaData.h"
#include "AliCDBStorage.h"
#include "AliCDBId.h"
#include "AliCDBPath.h"
#include "AliCDBEntry.h"
#include "AliShuttleInterface.h"

ClassImp(AliPreprocessor)

//______________________________________________________________________________________________
AliPreprocessor::AliPreprocessor(const char* detector, AliShuttleInterface* shuttle) :
  TNamed(detector, ""),
  fRun(-1),
  fStartTime(0),
  fEndTime(0),
  fShuttle(shuttle),
  fRunTypes()
{
  SetTitle(Form("AliPreprocessor for %s subdetector.", detector));

  if (!fShuttle)
  {
    AliFatal("Initialized without Shuttle instance.");
    return;
  }

  fShuttle->RegisterPreprocessor(this);

  fRunTypes.SetOwner(kTRUE);
}

//______________________________________________________________________________________________
AliPreprocessor::~AliPreprocessor()
{
}

//______________________________________________________________________________________________
void AliPreprocessor::Initialize(Int_t run, UInt_t startTime,	UInt_t endTime)
{
  // Sets the information of the run which is currently processed
  // can be overriden for special behaviour, make sure that you call base class
  // function

  fRun = run;
  fStartTime = startTime;
  fEndTime = endTime;
}

//______________________________________________________________________________________________
Bool_t AliPreprocessor::Store(const char* pathLevel2, const char* pathLevel3, TObject* object,
    AliCDBMetaData* metaData, Int_t validityStart, Bool_t validityInfinite)
{
  // Stores a CDB object in the storage for offline reconstruction. Objects that are not needed for
  // offline reconstruction, but should be stored anyway (e.g. for debugging) should NOT be stored
  // using this function. Use StoreReferenceData instead!
  //
  // This function should be called at the end of the preprocessor cycle
  //
  // The parameters are
  //   1, 2) the 2nd and 3rd level of the object's path. The first level is the detector name which is provided
  //         by the Preprocessor and converted to the Offline name. Thus the object's path is "DET/level2/level3"
  //   3) the object to be stored
  //   4) the metaData to be associated with the object
  //   5) the validity start run number w.r.t. the current run,
  //      if the data is valid only for this run leave the default 0
  //   6) specifies if the calibration data is valid for infinity (this means until updated),
  //      typical for calibration runs, the default is kFALSE
  //
  // The call is delegated to AliShuttleInterface

  const char* offlineDetName = AliShuttleInterface::GetOfflineDetName(GetName());
  if(!offlineDetName) return 0;

  return fShuttle->Store(AliCDBPath(offlineDetName, pathLevel2, pathLevel3), object,
      metaData, validityStart, validityInfinite);
}

//______________________________________________________________________________________________
Bool_t AliPreprocessor::StoreReferenceData(const char* pathLevel2, const char* pathLevel3, TObject* object,
    AliCDBMetaData* metaData)
{
  // Stores a CDB object in the storage for reference data. This objects will not be available during
  // offline reconstrunction. Use this function for reference data only!
  //
  // This function should be called at the end of the preprocessor cycle
  //
  // The parameters are
  //   1, 2) the 2nd and 3rd level of the object's path. The first level is the detector name which is provided
  //         by the Preprocessor and converted to the Offline name. Thus the object's path is "DET/level2/level3"
  //   3) the object to be stored
  //   4) the metaData to be associated with the object
  //
  // The call is delegated to AliShuttleInterface

  const char* offlineDetName = AliShuttleInterface::GetOfflineDetName(GetName());
  if(!offlineDetName) return 0;

  return fShuttle->StoreReferenceData(AliCDBPath(offlineDetName, pathLevel2, pathLevel3), object,
      metaData);
}

//______________________________________________________________________________________________
Bool_t AliPreprocessor::StoreReferenceFile(const char* localFile, const char* gridFileName)
{
  //
  // Stores a file directly (without opening it) in the reference storage in the Grid
  //
  // The file is stored under the following location: 
  // <base folder of reference storage>/<DET>/<RUN#>_<gridFileName>
  // where <gridFileName> is the second parameter given to the function
  //
  // The call is delegated to AliShuttleInterface

  const char* offlineDetName = AliShuttleInterface::GetOfflineDetName(GetName());
  if(!offlineDetName) return 0;
  return fShuttle->StoreReferenceFile(GetName(), localFile, gridFileName);
}

//______________________________________________________________________________________________
Bool_t AliPreprocessor::StoreRunMetadataFile(const char* localFile, const char* gridFileName)
{
  //
  // Stores Run metadata file to the Grid, in the run folder
  //
  // Only GRP can call this function.

  TString detName(GetName());
  if (detName != "GRP") 
  {
    Log("StoreRunMetadataFile - Only GRP can call this function.");
    return kFALSE;
  }
  return fShuttle->StoreRunMetadataFile(localFile, gridFileName);
}

//______________________________________________________________________________________________
const char* AliPreprocessor::GetFile(Int_t system, const char* id, const char* source)
{
  // This function retrieves a file from the given system (kDAQ, kDCS, kHLT) with the given file id
  // and from the given source in the system.
  // The function returnes the path to the local file.
  //
  // The call is delegated to AliShuttleInterface

  return fShuttle->GetFile(system, GetName(), id, source);
}

//______________________________________________________________________________________________
TList* AliPreprocessor::GetFileSources(Int_t system, const char* id)
{
  // Returns a list of sources in a given system that saved a file with the given id
  // if id is not given all sources are returned
  //
  // The call is delegated to AliShuttleInterface

  return fShuttle->GetFileSources(system, GetName(), id);
}

//______________________________________________________________________________________________
TList* AliPreprocessor::GetFileIDs(Int_t system, const char* source)
{
  // Returns a list of ids in a given system that saved a file with the given source
  //
  // The call is delegated to AliShuttleInterface

  return fShuttle->GetFileIDs(system, GetName(), source);
}

//______________________________________________________________________________________________
void AliPreprocessor::Log(const char* message, UInt_t level)
{
  // Adds a log message to the Shuttle log of this preprocessor
  //
  // The call is delegated to AliShuttleInterface

  fShuttle->Log(GetName(), message, level);
}

//______________________________________________________________________________________________
const char* AliPreprocessor::GetRunParameter(const char* param)
{
  // Return run parameter read from run logbook
  //
  // The call is delegated to AliShuttleInterface

  return fShuttle->GetRunParameter(param);
}

//______________________________________________________________________________________________
AliCDBEntry* AliPreprocessor::GetFromOCDB(const char* pathLevel2, const char* pathLevel3)
{
  // Return object from OCDB valid for current run
  //
  // The call is delegated to AliShuttleInterface

  const char* offlineDetName = AliShuttleInterface::GetOfflineDetName(GetName());
  if (!offlineDetName) return 0;

  return dynamic_cast<AliCDBEntry*>
    (fShuttle->GetFromOCDB(GetName(), AliCDBPath(offlineDetName, pathLevel2, pathLevel3)));
}

//______________________________________________________________________________________________
AliCDBEntry* AliPreprocessor::GetGeometryFromOCDB()
{
  // Return geometry from OCDB (GRP/Geometry/Data) valid for current run
  //
  // The call is delegated to AliShuttleInterface

  return dynamic_cast<AliCDBEntry*>
    (fShuttle->GetFromOCDB(GetName(), AliCDBPath("GRP", "Geometry", "Data")));
}

//______________________________________________________________________________________________
const char* AliPreprocessor::GetRunType()
{
  // Return run type string read from "run type" logbook
  //
  // The call is delegated to AliShuttleInterface

  return fShuttle->GetRunType();
}

//______________________________________________________________________________________________
Bool_t AliPreprocessor::GetHLTStatus()
{
  // Return HLT status (ON or OFF)
  // Converts the HLT status from the status string read in the run logbook (not just a bool)
  // The call is delegated to AliShuttleInterface

  return fShuttle->GetHLTStatus();

}

//______________________________________________________________________________________________
const char* AliPreprocessor::GetTriggerConfiguration()
{
  // Returns the trigger configuration which is read from a table in the DAQ logbook
  // The call is delegated to AliShuttleInterface
  // Only GRP can call this function.

  TString detName(GetName());
  if (detName != "GRP") 
  {
    Log("GetTriggerConfiguration - Only GRP can call this function.");
    return 0;
  }

  return fShuttle->GetTriggerConfiguration();
}
//______________________________________________________________________________________________
const char* AliPreprocessor::GetCTPTimeParams()
{
  // Returns the CTP timing parameters read from a table in the DAQ logbook
  // The call is delegated to AliShuttleInterface
  // Only GRP can call this function.

  TString detName(GetName());
  if (detName != "GRP") 
  {
    Log("GetCTPTimeParams - Only GRP can call this function.");
    return 0;
  }

  return fShuttle->GetCTPTimeParams();
}
//______________________________________________________________________________________________
const char* AliPreprocessor::GetTriggerDetectorMask()
{
  // Returns the trigger detector mask which is read from a table in the DAQ logbook
  // The call is delegated to AliShuttleInterface
  // Only TRI can call this function.

  TString detName(GetName());
  if (detName != "TRI") 
  {
    Log("GetTriggerDetectorMask - Only TRI can call this function.");
    return 0;
  }

  return fShuttle->GetTriggerDetectorMask();
}

//______________________________________________________________________________________________
void AliPreprocessor::AddRunType(const char* runType)
{
  // adds the given run type to the list of run types that are processed
  // this function should be called in the constructor of the derived preprocessor

  if (!runType)
    return;

  fRunTypes.Add(new TObjString(runType));
}

//______________________________________________________________________________________________
Bool_t AliPreprocessor::AliPreprocessor::ProcessRunType()
{
  // searches for the current run type in the list of run types that are processed by this
  // preprocessor. The list is populated by AddRunType

  const char* runType = GetRunType();

  Log(Form("Checking if run type %s is in the list of run types to be processed by this preprocessor...", runType));

  if (fRunTypes.GetEntries() == 0)
    Log("WARNING! There are no run types defined. This preprocessor will never run.");

  if (fRunTypes.FindObject(runType))
  {
    Log("Run type found. Processing this run.");
    return kTRUE;
  }

  Log("Run type not found. Skipping this run.");
  return kFALSE;
}
//______________________________________________________________________________________________
UInt_t AliPreprocessor::GetStartTimeDCSQuery()
{
  // Return Start Time for the DCS query
  //
  // The call is delegated to AliShuttleInterface

  return fShuttle->GetStartTimeDCSQuery();
}
//______________________________________________________________________________________________
UInt_t AliPreprocessor::GetEndTimeDCSQuery()
{
  // Return End Time for the DCS query
  //
  // The call is delegated to AliShuttleInterface

  return fShuttle->GetEndTimeDCSQuery();
}

//______________________________________________________________________________________________
const char* AliPreprocessor::GetForeignFile(const char* detector, Int_t system, const char* id, const char* source)
{
  // This function retrieves a file produced from the given detector (different from the 
  // current one) from the given system (kDAQ, kDCS, kHLT) 
  // with the given file id
  // and from the given source in the system.
  // The function returnes the path to the local file.
  //
  // The call is delegated to AliShuttleInterface
  // The function can be called only from the GRP preprocessor

  TString detName(GetName());
  if (detName != "GRP") 
  {
    Log("GetForeignFile - Only GRP can call this function.");
    return 0;
  }
  return fShuttle->GetFile(system, detector, id, source);
}

//______________________________________________________________________________________________
TList* AliPreprocessor::GetForeignFileSources(const char* detector, Int_t system, const char* id)
{
  // Returns the list of sources in a given system that produced the file 
  // with the given id for the foreign detector specified
  //
  // The call is delegated to AliShuttleInterface
  // The function can be called only from the GRP preprocessor

  TString detName(GetName());
  if (detName != "GRP") 
  {
    Log("GetForeignFileSources - Only GRP can call this function.");
    return 0;
  }
  return fShuttle->GetFileSources(system, detector, id);
}

//______________________________________________________________________________________________
void AliPreprocessor::SendToML(const char* value)
{
  //
  // Sending to ML the information coming from the current detector
  //

  return fShuttle->SendMLFromDet(value);
}
//______________________________________________________________________________________________
TString* AliPreprocessor::GetLTUConfig(const char* det)
{
  // LTU config from logbook_detector table from DAQ logbook for detector det
  //
  // The call is delegated to AliShuttleInterface

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