Update master to aliroot
[u/mrichter/AliRoot.git] / HLT / programs / extract-hltout-payload.C
CommitLineData
374136ad 1// $Id$
2/**
3 * @file extract-hltout-payload.C
2efd7a9a 4 * @brief Extraction of data blocks from HLTOUT
374136ad 5 *
6 * <pre>
1a44f837 7 * Usage: aliroot -b -q extract-hltout-payload.C'("raw.root", "selection", nofEvents)' \
8 * | tee extract-hltout-payload.log
9 *
10 * Defaults
11 * selection="" -> no data type selection
12 * nofEvents=-1 -> all events
374136ad 13 * </pre>
14 *
1a44f837 15 * The raw input file can be accessed directly from the GRID, e.g
16 * "alien:///alice/data/2010/LHC10b/000115887/raw/10000115887021.20.root"
17 *
374136ad 18 * The macro stores all data blocks from the HLTOUT payload into separated
19 * folders for each event. The file names are derived from data type and
20 * specification of the block. Data is read from a raw reader. An input
21 * file can be specified as the first argument, default is "./" and reads
22 * ddl files through AliRawReaderFile.
23 *
24 * A selection criterion can be specified as second argument, the format
25 * of the selection string follows the arguments of the
26 * AliHLTOUTPublisherComponent except from the quote which need to be
27 * replaced by brackets due to CINT, e.g.
28 *
29 * <pre>
30 * aliroot -b -q extract-hltout-payload.C'("raw.root", "-datatype {DDL_RAW } ISDD")'
31 * aliroot -b -q extract-hltout-payload.C'("raw.root", "-origin {TPC }")'
32 * </pre>
33 *
34 * @author Matthias.Richter@ift.uib.no
1a44f837 35 * @ingroup alihlt_programs
374136ad 36 */
2efd7a9a 37void extract_hltout_payload(const char* input, const char* selection="", int maxEvent=-1)
374136ad 38{
1a44f837 39 /////////////////////////////////////////////////////////////////////////
40 /////////////////////////////////////////////////////////////////////////
41 //
42 // setup GRID if input is not a local file
43 TString strfile=input;
44 if (strfile.Contains("://") && !strfile.Contains("local://")) {
45 TGrid::Connect("alien");
46 }
47
374136ad 48 /////////////////////////////////////////////////////////////////////////
49 /////////////////////////////////////////////////////////////////////////
50 //
51 // setup of the HLT system
7bf6c76d 52 AliHLTSystem* pHLT=AliHLTPluginBase::GetInstance();
374136ad 53 if (!pHLT) {
54 cerr << "fatal error: can not get HLT instance" << endl;
55 }
56
57 /////////////////////////////////////////////////////////////////////////
58 /////////////////////////////////////////////////////////////////////////
59 //
60 // the configuration chain
61 TString arg;
62
63 // the publisher configuration
64 arg.Form("%s", selection);
65 arg.ReplaceAll("{", "'");
66 arg.ReplaceAll("}", "'");
67 AliHLTConfiguration publisher("hltout-publisher", "AliHLTOUTPublisher" , NULL, arg.Data());
68
69 // the writer configuration
70 arg.Form("-subdir=event_%%d -blocknofmt= -datafile hltout.dat -specfmt");
71 AliHLTConfiguration collector("sink1", "FileWriter" , "hltout-publisher", arg.Data());
72
73 /////////////////////////////////////////////////////////////////////////
74 /////////////////////////////////////////////////////////////////////////
75 //
76 // setup of the reconstruction
77
78 AliHLTReconstructor hltRec;
1a44f837 79 hltRec.Init("chains=sink1 ignore-ctp");
374136ad 80
81 AliRawReader* rawreader=AliRawReader::Create(input);
82 if (!rawreader) {
83 return;
84 }
85 rawreader->RewindEvents();
86 int count=0;
87 if (!rawreader->NextEvent()) {
88 cout << "no events found in " << input << endl;
89 return;
90 }
91
92 do {
93 cout << "processing event " << count++ << endl;
94 hltRec.Reconstruct(rawreader, NULL);
dfa01417 95 } while (rawreader->NextEvent() && (maxEvent<0 || count<maxEvent));
374136ad 96}
2efd7a9a 97
98void extract_hltout_payload()
99{
100 cerr << "==============================================================================" << endl;
101 cerr << "usage: aliroot -b -q -l extract-hltout-payload.C'(input, selection, maxEvent)'" << endl << endl;
102 cerr << "please provide input, e.g. \"raw.root\", or \"./\"" << endl;
103 cerr << "optional data type selection, e.g \"-datatype {DDL_RAW } ISDD\", " << endl;
104 cerr << " \"-origin {TPC }\", \"-typeid {DDL_RAW }\"" << endl;
105 cerr << "optional max event" << endl;
106 cerr << "==============================================================================" << endl;
107}