ROOT logo
// $Id$
/**
 * @file extract-hltout-payload.C
 * @brief Extraction of data blocks from HLTOUT
 *
 * <pre>
 * Usage: aliroot -b -q extract-hltout-payload.C'("raw.root", "selection", nofEvents)' \
 *            | tee extract-hltout-payload.log
 *
 * Defaults
 *     selection=""      -> no data type selection
 *     nofEvents=-1      -> all events
 * </pre>
 *
 * The raw input file can be accessed directly from the GRID, e.g
 * "alien:///alice/data/2010/LHC10b/000115887/raw/10000115887021.20.root"
 *
 * The macro stores all data blocks from the HLTOUT payload into separated
 * folders for each event. The file names are derived from data type and
 * specification of the block. Data is read from a raw reader. An input
 * file can be specified as the first argument, default is "./" and reads
 * ddl files through AliRawReaderFile.
 *
 * A selection criterion can be specified as second argument, the format
 * of the selection string follows the arguments of the 
 * AliHLTOUTPublisherComponent except from the quote which need to be
 * replaced by brackets due to CINT, e.g.
 *
 * <pre>
 * aliroot -b -q extract-hltout-payload.C'("raw.root", "-datatype {DDL_RAW } ISDD")'
 * aliroot -b -q extract-hltout-payload.C'("raw.root", "-origin {TPC }")'
 * </pre>
 *
 * @author Matthias.Richter@ift.uib.no
 * @ingroup alihlt_programs
 */
void extract_hltout_payload(const char* input, const char* selection="", int maxEvent=-1)
{
  /////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////
  //
  // setup GRID if input is not a local file
  TString strfile=input;
  if (strfile.Contains("://") && !strfile.Contains("local://")) {
    TGrid::Connect("alien");
  }

  /////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////
  //
  // setup of the HLT system
  AliHLTSystem* pHLT=AliHLTPluginBase::GetInstance();
  if (!pHLT) {
    cerr << "fatal error: can not get HLT instance" << endl;
  }

  /////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////
  //
  // the configuration chain
  TString arg;

  // the publisher configuration
  arg.Form("%s", selection);
  arg.ReplaceAll("{", "'");
  arg.ReplaceAll("}", "'");
  AliHLTConfiguration publisher("hltout-publisher", "AliHLTOUTPublisher" , NULL, arg.Data());

  // the writer configuration
  arg.Form("-subdir=event_%%d -blocknofmt= -datafile hltout.dat -specfmt");
  AliHLTConfiguration collector("sink1", "FileWriter"   , "hltout-publisher", arg.Data());

  /////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////
  //
  // setup of the reconstruction

  AliHLTReconstructor hltRec;
  hltRec.Init("chains=sink1 ignore-ctp");

  AliRawReader* rawreader=AliRawReader::Create(input);
  if (!rawreader) {
    return;
  }
  rawreader->RewindEvents();
  int count=0;
  if (!rawreader->NextEvent()) {
    cout << "no events found in " << input << endl;
    return;
  }

  do {
    cout << "processing event " << count++ << endl;
    hltRec.Reconstruct(rawreader, NULL);
  } while (rawreader->NextEvent() && (maxEvent<0 || count<maxEvent));
}

void extract_hltout_payload()
{
  cerr << "==============================================================================" << endl;
  cerr << "usage: aliroot -b -q -l extract-hltout-payload.C'(input, selection, maxEvent)'" << endl << endl;
  cerr << "please provide input, e.g. \"raw.root\", or \"./\"" << endl;
  cerr << "optional data type selection, e.g \"-datatype {DDL_RAW } ISDD\", " << endl;
  cerr << "                                  \"-origin {TPC }\", \"-typeid {DDL_RAW }\"" << endl;
  cerr << "optional max event" << endl;
  cerr << "==============================================================================" << endl;
}
 extract-hltout-payload.C:1
 extract-hltout-payload.C:2
 extract-hltout-payload.C:3
 extract-hltout-payload.C:4
 extract-hltout-payload.C:5
 extract-hltout-payload.C:6
 extract-hltout-payload.C:7
 extract-hltout-payload.C:8
 extract-hltout-payload.C:9
 extract-hltout-payload.C:10
 extract-hltout-payload.C:11
 extract-hltout-payload.C:12
 extract-hltout-payload.C:13
 extract-hltout-payload.C:14
 extract-hltout-payload.C:15
 extract-hltout-payload.C:16
 extract-hltout-payload.C:17
 extract-hltout-payload.C:18
 extract-hltout-payload.C:19
 extract-hltout-payload.C:20
 extract-hltout-payload.C:21
 extract-hltout-payload.C:22
 extract-hltout-payload.C:23
 extract-hltout-payload.C:24
 extract-hltout-payload.C:25
 extract-hltout-payload.C:26
 extract-hltout-payload.C:27
 extract-hltout-payload.C:28
 extract-hltout-payload.C:29
 extract-hltout-payload.C:30
 extract-hltout-payload.C:31
 extract-hltout-payload.C:32
 extract-hltout-payload.C:33
 extract-hltout-payload.C:34
 extract-hltout-payload.C:35
 extract-hltout-payload.C:36
 extract-hltout-payload.C:37
 extract-hltout-payload.C:38
 extract-hltout-payload.C:39
 extract-hltout-payload.C:40
 extract-hltout-payload.C:41
 extract-hltout-payload.C:42
 extract-hltout-payload.C:43
 extract-hltout-payload.C:44
 extract-hltout-payload.C:45
 extract-hltout-payload.C:46
 extract-hltout-payload.C:47
 extract-hltout-payload.C:48
 extract-hltout-payload.C:49
 extract-hltout-payload.C:50
 extract-hltout-payload.C:51
 extract-hltout-payload.C:52
 extract-hltout-payload.C:53
 extract-hltout-payload.C:54
 extract-hltout-payload.C:55
 extract-hltout-payload.C:56
 extract-hltout-payload.C:57
 extract-hltout-payload.C:58
 extract-hltout-payload.C:59
 extract-hltout-payload.C:60
 extract-hltout-payload.C:61
 extract-hltout-payload.C:62
 extract-hltout-payload.C:63
 extract-hltout-payload.C:64
 extract-hltout-payload.C:65
 extract-hltout-payload.C:66
 extract-hltout-payload.C:67
 extract-hltout-payload.C:68
 extract-hltout-payload.C:69
 extract-hltout-payload.C:70
 extract-hltout-payload.C:71
 extract-hltout-payload.C:72
 extract-hltout-payload.C:73
 extract-hltout-payload.C:74
 extract-hltout-payload.C:75
 extract-hltout-payload.C:76
 extract-hltout-payload.C:77
 extract-hltout-payload.C:78
 extract-hltout-payload.C:79
 extract-hltout-payload.C:80
 extract-hltout-payload.C:81
 extract-hltout-payload.C:82
 extract-hltout-payload.C:83
 extract-hltout-payload.C:84
 extract-hltout-payload.C:85
 extract-hltout-payload.C:86
 extract-hltout-payload.C:87
 extract-hltout-payload.C:88
 extract-hltout-payload.C:89
 extract-hltout-payload.C:90
 extract-hltout-payload.C:91
 extract-hltout-payload.C:92
 extract-hltout-payload.C:93
 extract-hltout-payload.C:94
 extract-hltout-payload.C:95
 extract-hltout-payload.C:96
 extract-hltout-payload.C:97
 extract-hltout-payload.C:98
 extract-hltout-payload.C:99
 extract-hltout-payload.C:100
 extract-hltout-payload.C:101
 extract-hltout-payload.C:102
 extract-hltout-payload.C:103
 extract-hltout-payload.C:104
 extract-hltout-payload.C:105
 extract-hltout-payload.C:106
 extract-hltout-payload.C:107
 extract-hltout-payload.C:108