ROOT logo
// $Id$
/**
 * @file sampleCalibrationProcessor.C
 * @brief Run the SampleCalibration component (AliHLTSampleCalibrationComponent)
 *
 * <pre>
 * Usage: aliroot -b -q -l \
 *     sampleCalibrationProcessor.C'("file", "cdb", minEvent, maxEvent)'
 *
 * Examples:
 *     sampleCalibrationProcessor.C'("alien:///alice/data/2009/.../....root")' 
 *     sampleCalibrationProcessor.C'("raw.root", "local://$PWD", minEvent, MaxEvent)'
 *
 * Defaults
 *     cdb="local://$ALICE_ROOT/OCDB"  -> take local OCDB
 *     minEvent=-1   -> no lower event selection
 *     maxEvent=-1   -> no upper event selection
 *
 * </pre>
 *
 * An HLT chain is set up with one publisher for raw data which the calibration
 * component subscribes to. The output of the component is directed to a
 * ROOTFileWriter producing the file 'calibdata.root'. Another FileWriter
 * writes the data block designated for storage in the FXS. 
 * The HLT chain is run in the context of AliReconstruction.
 * 
 * The input file can be a file on the grid, indicated by the tag
 * 'alien://'.
 * If either the file or the OCDB is taken from the GRID, the macros
 * connects to the Grid in the beginning.
 * Note: You need a valid GRID token, use 'alien-token-init' of your
 * alien installation.
 *
 * This example uses the local OCDB as default, but other locations can
 * be specified, like e.g. "raw://".
 *
 * @author Matthias.Richter@ift.uib.no
 * @ingroup alihlt_tutorial
 */
void sampleCalibrationProcessor(const char *filename,
		  const char *cdbURI,
		  int minEvent=-1,
		  int maxEvent=-1)
{
  // connect to the GRID if we use a file or OCDB from the GRID
  TString struri=cdbURI;
  TString strfile=filename;
  if (struri.BeginsWith("raw://") ||
      strfile.Contains("://") && !strfile.Contains("local://")) {
    TGrid::Connect("alien");
  }

  // Set the CDB storage location
  AliCDBManager * man = AliCDBManager::Instance();
  man->SetDefaultStorage(cdbURI);
  if (struri.BeginsWith("local://")) {
    // set specific storage for GRP entry
    // search in the working directory and one level above, the latter
    // follows the standard simulation setup like e.g. in test/ppbench
    if (!gSystem->AccessPathName("GRP/GRP/Data")) {
      man->SetSpecificStorage("GRP/GRP/Data", "local://$PWD");
    } else if (!gSystem->AccessPathName("../GRP/GRP/Data")) {
      man->SetSpecificStorage("GRP/GRP/Data", "local://$PWD/..");      
    } else {
      cerr << "can not find a GRP entry, please run the macro in the folder" << endl;
      cerr << "of a simulated data sample, or specify a GRID OCDB" << endl;
      sampleRawAnalysis();      
      return;
    }
  }

  // Reconstruction settings
  AliReconstruction rec;

  if (minEvent>=0 || maxEvent>minEvent) {
    if (minEvent<0) minEvent=0;
    if (maxEvent<minEvent) maxEvent=minEvent;
    rec.SetEventRange(minEvent,maxEvent);
  }

  rec.SetRunReconstruction("HLT");

  // QA options
  rec.SetRunQA(":") ;

  // AliReconstruction settings
  rec.SetWriteESDfriend(kFALSE);
  rec.SetInput(filename);

  rec.SetRunPlaneEff(kFALSE);
  rec.SetRunVertexFinder(kFALSE);
  rec.SetRunMultFinder(kFALSE);

  // switch off cleanESD
  rec.SetCleanESD(kFALSE);

  // setup the HLT chain
  AliHLTSystem* pHLT=AliHLTPluginBase::GetInstance();
  
  // publisher for raw data
  AliHLTConfiguration rawpub("rawpub", "AliRawReaderPublisher", "", "-minid 768 -maxid 983 -datatype 'DDL_RAW ' SMPL");

  // the configuration of the calibration component
  // send the produced object not more than once every 2 sec
  AliHLTConfiguration smplcalib("smplcalib", "SampleCalibration", "rawpub", "-pushback-period=2");

  // writer for data objects produced by the calibration component during
  // ProcessCalibration, 
  AliHLTConfiguration eventwriter("eventwriter", "ROOTFileWriter", "smplcalib", "-datafile calibdata.root -concatenate-events -overwrite -write-all-events");

  // filter the output of the smplcalib component and forward only the blocks
  // of type 'FXS_CAL ' designated for storage by the FXSSubscriber
  AliHLTConfiguration fxsfilter("fxsfilter", "BlockFilter", "smplcalib", "-typeid 'FXS_CAL ' ");
  // write the block, a file like 'EOR_*HLT:FXS_CAL' will be written containing the
  // binary data block of the FXS header and the streamed object
  AliHLTConfiguration fxswriter("fxswriter", "FileWriter", "fxsfilter", "-write-all-events");

  rec.SetOption("HLT", "loglevel=0x7c ignore-hltout libAliHLTUtil.so libAliHLTSample.so chains=fxswriter,eventwriter");

  AliLog::Flush();
  rec.Run();

}

void sampleCalibrationProcessor(const char *filename,
		  int minEvent=-1,
		  int maxEvent=-1)
{
  sampleCalibrationProcessor(filename, "local://$ALICE_ROOT/OCDB", minEvent, maxEvent);
}

void sampleCalibrationProcessor()
{
  cout << "sampleCalibrationProcessor: Run AliRoot reconstruction locally" << endl;
  cout << " Usage: aliroot -b -q -l \\" << endl;
  cout << "     sampleCalibrationProcessor.C'(\"file\", \"cdb\", minEvent, maxEvent)'" << endl;
  cout << "" << endl;
  cout << " Examples:" << endl;
  cout << "     sampleCalibrationProcessor.C'(\"alien:///alice/data/2009/.../....root\")' " << endl;
  cout << "     sampleCalibrationProcessor.C'(\"raw.root\", \"local://$PWD\", minEvent, MaxEvent)'" << endl;
  cout << "" << endl;
  cout << " Defaults" << endl;
  cout << "     cdb=\"local://$ALICE_ROOT/OCDB\"  -> take local OCDB " << endl;
  cout << "     minEvent=-1   -> no lower event selection" << endl;
  cout << "     maxEvent=-1   -> no upper event selection" << endl;
}
 sampleCalibrationProcessor.C:1
 sampleCalibrationProcessor.C:2
 sampleCalibrationProcessor.C:3
 sampleCalibrationProcessor.C:4
 sampleCalibrationProcessor.C:5
 sampleCalibrationProcessor.C:6
 sampleCalibrationProcessor.C:7
 sampleCalibrationProcessor.C:8
 sampleCalibrationProcessor.C:9
 sampleCalibrationProcessor.C:10
 sampleCalibrationProcessor.C:11
 sampleCalibrationProcessor.C:12
 sampleCalibrationProcessor.C:13
 sampleCalibrationProcessor.C:14
 sampleCalibrationProcessor.C:15
 sampleCalibrationProcessor.C:16
 sampleCalibrationProcessor.C:17
 sampleCalibrationProcessor.C:18
 sampleCalibrationProcessor.C:19
 sampleCalibrationProcessor.C:20
 sampleCalibrationProcessor.C:21
 sampleCalibrationProcessor.C:22
 sampleCalibrationProcessor.C:23
 sampleCalibrationProcessor.C:24
 sampleCalibrationProcessor.C:25
 sampleCalibrationProcessor.C:26
 sampleCalibrationProcessor.C:27
 sampleCalibrationProcessor.C:28
 sampleCalibrationProcessor.C:29
 sampleCalibrationProcessor.C:30
 sampleCalibrationProcessor.C:31
 sampleCalibrationProcessor.C:32
 sampleCalibrationProcessor.C:33
 sampleCalibrationProcessor.C:34
 sampleCalibrationProcessor.C:35
 sampleCalibrationProcessor.C:36
 sampleCalibrationProcessor.C:37
 sampleCalibrationProcessor.C:38
 sampleCalibrationProcessor.C:39
 sampleCalibrationProcessor.C:40
 sampleCalibrationProcessor.C:41
 sampleCalibrationProcessor.C:42
 sampleCalibrationProcessor.C:43
 sampleCalibrationProcessor.C:44
 sampleCalibrationProcessor.C:45
 sampleCalibrationProcessor.C:46
 sampleCalibrationProcessor.C:47
 sampleCalibrationProcessor.C:48
 sampleCalibrationProcessor.C:49
 sampleCalibrationProcessor.C:50
 sampleCalibrationProcessor.C:51
 sampleCalibrationProcessor.C:52
 sampleCalibrationProcessor.C:53
 sampleCalibrationProcessor.C:54
 sampleCalibrationProcessor.C:55
 sampleCalibrationProcessor.C:56
 sampleCalibrationProcessor.C:57
 sampleCalibrationProcessor.C:58
 sampleCalibrationProcessor.C:59
 sampleCalibrationProcessor.C:60
 sampleCalibrationProcessor.C:61
 sampleCalibrationProcessor.C:62
 sampleCalibrationProcessor.C:63
 sampleCalibrationProcessor.C:64
 sampleCalibrationProcessor.C:65
 sampleCalibrationProcessor.C:66
 sampleCalibrationProcessor.C:67
 sampleCalibrationProcessor.C:68
 sampleCalibrationProcessor.C:69
 sampleCalibrationProcessor.C:70
 sampleCalibrationProcessor.C:71
 sampleCalibrationProcessor.C:72
 sampleCalibrationProcessor.C:73
 sampleCalibrationProcessor.C:74
 sampleCalibrationProcessor.C:75
 sampleCalibrationProcessor.C:76
 sampleCalibrationProcessor.C:77
 sampleCalibrationProcessor.C:78
 sampleCalibrationProcessor.C:79
 sampleCalibrationProcessor.C:80
 sampleCalibrationProcessor.C:81
 sampleCalibrationProcessor.C:82
 sampleCalibrationProcessor.C:83
 sampleCalibrationProcessor.C:84
 sampleCalibrationProcessor.C:85
 sampleCalibrationProcessor.C:86
 sampleCalibrationProcessor.C:87
 sampleCalibrationProcessor.C:88
 sampleCalibrationProcessor.C:89
 sampleCalibrationProcessor.C:90
 sampleCalibrationProcessor.C:91
 sampleCalibrationProcessor.C:92
 sampleCalibrationProcessor.C:93
 sampleCalibrationProcessor.C:94
 sampleCalibrationProcessor.C:95
 sampleCalibrationProcessor.C:96
 sampleCalibrationProcessor.C:97
 sampleCalibrationProcessor.C:98
 sampleCalibrationProcessor.C:99
 sampleCalibrationProcessor.C:100
 sampleCalibrationProcessor.C:101
 sampleCalibrationProcessor.C:102
 sampleCalibrationProcessor.C:103
 sampleCalibrationProcessor.C:104
 sampleCalibrationProcessor.C:105
 sampleCalibrationProcessor.C:106
 sampleCalibrationProcessor.C:107
 sampleCalibrationProcessor.C:108
 sampleCalibrationProcessor.C:109
 sampleCalibrationProcessor.C:110
 sampleCalibrationProcessor.C:111
 sampleCalibrationProcessor.C:112
 sampleCalibrationProcessor.C:113
 sampleCalibrationProcessor.C:114
 sampleCalibrationProcessor.C:115
 sampleCalibrationProcessor.C:116
 sampleCalibrationProcessor.C:117
 sampleCalibrationProcessor.C:118
 sampleCalibrationProcessor.C:119
 sampleCalibrationProcessor.C:120
 sampleCalibrationProcessor.C:121
 sampleCalibrationProcessor.C:122
 sampleCalibrationProcessor.C:123
 sampleCalibrationProcessor.C:124
 sampleCalibrationProcessor.C:125
 sampleCalibrationProcessor.C:126
 sampleCalibrationProcessor.C:127
 sampleCalibrationProcessor.C:128
 sampleCalibrationProcessor.C:129
 sampleCalibrationProcessor.C:130
 sampleCalibrationProcessor.C:131
 sampleCalibrationProcessor.C:132
 sampleCalibrationProcessor.C:133
 sampleCalibrationProcessor.C:134
 sampleCalibrationProcessor.C:135
 sampleCalibrationProcessor.C:136
 sampleCalibrationProcessor.C:137
 sampleCalibrationProcessor.C:138
 sampleCalibrationProcessor.C:139
 sampleCalibrationProcessor.C:140
 sampleCalibrationProcessor.C:141
 sampleCalibrationProcessor.C:142
 sampleCalibrationProcessor.C:143
 sampleCalibrationProcessor.C:144
 sampleCalibrationProcessor.C:145
 sampleCalibrationProcessor.C:146
 sampleCalibrationProcessor.C:147