ROOT logo
// $Id$
/*
 * Process and reconstruct the binary HLTOUT files as written to disk
 * by the HLTOUT formatter on the online HLT system.
 *
 * Usage:
 * <pre>
 *   aliroot -b -q rec-HLTOUT-bin.C'("pattern", runno, keepFiles)'
 *   aliroot -b -q rec-HLTOUT-bin.C'("")' # for help
 * </pre>
 *
 * In the online HLT, output of the HLTOUT formatter can be written to disk.
 * The resulting binary files contain the full DDL data. The macro
 * reconstructs the events from a specified sample of binary files.
 * 
 * @ingroup alihlt_programs
 * @author Matthias.Richter@ift.uib.no
 */
void rec_HLTOUT_bin(const char* input="", int runno=0, bool keepFiles=false)
{
  if (!input || input[0]==0) {
    cerr << "rec-HLTOUT-bin.C: Process and reconstruct binary HLTOUT files" << endl;
    cerr << "===============================================================" << endl;
    cerr << "usage: aliroot -b -q -l rec-HLTOUT-bin.C'(\"pattern\" " << endl;
    cerr << "                                          runNo," << endl;
    cerr << "                                          keepFiles)'" << endl << endl;
    cerr << "  Parameter:" << endl;
    cerr << "       pattern   input file pattern, e.g. \"HLT-Output*.bin\"" << endl;
    cerr << "       runNo     run no, default 0" << endl;
    cerr << "       keepFiles keep the intermediate files, default false" << endl;
    cerr << "===============================================================" << endl;
    return;
  }

  if(!gSystem->AccessPathName("galice.root")){
    cerr << "please delete the galice.root or run at different place." << endl;
    return;
  }

  TString inputPattern=input;
  if (!inputPattern.BeginsWith("/")) {
    inputPattern=gSystem->pwd();
    inputPattern+="/";
    inputPattern+=input;
  }
  TString workingDir=gSystem->TempDirectory();
  TUUID uuid;
  workingDir+="/"; workingDir+=uuid.AsString(); workingDir+="/";
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // prepare the input
  // in order to run the normal AliRoot reconstruction over the data, the files
  // need to be assembled in a format readable by the AliRawReaderFile
  // A shell script creates the rawx folders in the temporary working directory
  // and links one binary input file in each
  //
  TString command="c=0; for file in ";
  command+=inputPattern;
  command+=" ; do directory=";
  command+=workingDir;
  command+="raw$c; mkdir -p $directory; (cd $directory; ln -s $file HLT_7680.ddl; touch run";
  command+=runno;
  command+="); let c++; done";
 
  if (gSystem->Exec(command)!=0) {
    cerr << "failed to execute script" << endl << "================================================" << endl;
    cerr << command << endl;
    return;
  }
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Init and run the reconstruction
  // All but HLT reconstructio is switched off
  //
  AliReconstruction rec;
  rec.SetInput(workingDir);
  rec.SetRunVertexFinder(kFALSE);
  rec.SetRunReconstruction("HLT");
  rec.SetLoadAlignFromCDB(0);
  rec.SetRunQA(":");
  rec.SetOption("HLT", "loglevel=0x7c");
  rec.Run();

  if (keepFiles) {
    cout << "event(s) reconstructed from " << workingDir << endl;
  } else {
    command="rm -r ";
    command+=workingDir;
    gSystem->Exec(command);
  }
}
 rec-HLTOUT-bin.C:1
 rec-HLTOUT-bin.C:2
 rec-HLTOUT-bin.C:3
 rec-HLTOUT-bin.C:4
 rec-HLTOUT-bin.C:5
 rec-HLTOUT-bin.C:6
 rec-HLTOUT-bin.C:7
 rec-HLTOUT-bin.C:8
 rec-HLTOUT-bin.C:9
 rec-HLTOUT-bin.C:10
 rec-HLTOUT-bin.C:11
 rec-HLTOUT-bin.C:12
 rec-HLTOUT-bin.C:13
 rec-HLTOUT-bin.C:14
 rec-HLTOUT-bin.C:15
 rec-HLTOUT-bin.C:16
 rec-HLTOUT-bin.C:17
 rec-HLTOUT-bin.C:18
 rec-HLTOUT-bin.C:19
 rec-HLTOUT-bin.C:20
 rec-HLTOUT-bin.C:21
 rec-HLTOUT-bin.C:22
 rec-HLTOUT-bin.C:23
 rec-HLTOUT-bin.C:24
 rec-HLTOUT-bin.C:25
 rec-HLTOUT-bin.C:26
 rec-HLTOUT-bin.C:27
 rec-HLTOUT-bin.C:28
 rec-HLTOUT-bin.C:29
 rec-HLTOUT-bin.C:30
 rec-HLTOUT-bin.C:31
 rec-HLTOUT-bin.C:32
 rec-HLTOUT-bin.C:33
 rec-HLTOUT-bin.C:34
 rec-HLTOUT-bin.C:35
 rec-HLTOUT-bin.C:36
 rec-HLTOUT-bin.C:37
 rec-HLTOUT-bin.C:38
 rec-HLTOUT-bin.C:39
 rec-HLTOUT-bin.C:40
 rec-HLTOUT-bin.C:41
 rec-HLTOUT-bin.C:42
 rec-HLTOUT-bin.C:43
 rec-HLTOUT-bin.C:44
 rec-HLTOUT-bin.C:45
 rec-HLTOUT-bin.C:46
 rec-HLTOUT-bin.C:47
 rec-HLTOUT-bin.C:48
 rec-HLTOUT-bin.C:49
 rec-HLTOUT-bin.C:50
 rec-HLTOUT-bin.C:51
 rec-HLTOUT-bin.C:52
 rec-HLTOUT-bin.C:53
 rec-HLTOUT-bin.C:54
 rec-HLTOUT-bin.C:55
 rec-HLTOUT-bin.C:56
 rec-HLTOUT-bin.C:57
 rec-HLTOUT-bin.C:58
 rec-HLTOUT-bin.C:59
 rec-HLTOUT-bin.C:60
 rec-HLTOUT-bin.C:61
 rec-HLTOUT-bin.C:62
 rec-HLTOUT-bin.C:63
 rec-HLTOUT-bin.C:64
 rec-HLTOUT-bin.C:65
 rec-HLTOUT-bin.C:66
 rec-HLTOUT-bin.C:67
 rec-HLTOUT-bin.C:68
 rec-HLTOUT-bin.C:69
 rec-HLTOUT-bin.C:70
 rec-HLTOUT-bin.C:71
 rec-HLTOUT-bin.C:72
 rec-HLTOUT-bin.C:73
 rec-HLTOUT-bin.C:74
 rec-HLTOUT-bin.C:75
 rec-HLTOUT-bin.C:76
 rec-HLTOUT-bin.C:77
 rec-HLTOUT-bin.C:78
 rec-HLTOUT-bin.C:79
 rec-HLTOUT-bin.C:80
 rec-HLTOUT-bin.C:81
 rec-HLTOUT-bin.C:82
 rec-HLTOUT-bin.C:83
 rec-HLTOUT-bin.C:84
 rec-HLTOUT-bin.C:85
 rec-HLTOUT-bin.C:86
 rec-HLTOUT-bin.C:87
 rec-HLTOUT-bin.C:88
 rec-HLTOUT-bin.C:89
 rec-HLTOUT-bin.C:90
 rec-HLTOUT-bin.C:91
 rec-HLTOUT-bin.C:92
 rec-HLTOUT-bin.C:93