]>
Commit | Line | Data |
---|---|---|
5aebebf7 | 1 | // $Id$ |
2 | /** | |
3 | * @file extract-ddlraw.C | |
4 | * @brief Tool to extract DDL raw data. | |
5 | * | |
6 | * Usage: | |
7 | * <pre> | |
8 | * aliroot -b -q 'extract-ddlraw.C("raw.root", 768, 769)' | tee extract-ddlraw.log | |
9 | * </pre> | |
10 | * | |
11 | * This macro is an example for the AliHLTRawReaderPublisherComponent. | |
12 | * It extracts the DDL payload from an AliRawReader in a given equipment | |
13 | * range. Input can be either a root file or the path to the directory | |
14 | * containing the 'rawx' sub folders. | |
15 | * | |
16 | * A light-weight AliReconstruction-like setup creates the appropriate | |
17 | * RawReader for the specified input and uses the standard AliHLTReconstructor | |
18 | * to run a small HLT chain. The chain utilizes the AliRawReaderPublisher | |
19 | * to extract the payload of the equipments and writes this to files. | |
20 | * | |
21 | * @note In this example the AliHLTRawReaderPublisherComponent does not set any data | |
22 | * type nor specification for the published data blocks. Please remember | |
23 | * to provide appropriate arguments via '-datatype' and '-dataspec' | |
24 | * arguments (see AliHLTRawReaderPublisherComponent). | |
25 | * | |
26 | * @author Matthias.Richter@ift.uib.no | |
27 | * @ingroup alihlt_tutorial | |
28 | */ | |
0c409657 | 29 | void extract_ddlraw(const char* input, int iMinDDLno, int iMaxDDLno, int nofEvents=-1) |
5aebebf7 | 30 | { |
31 | ///////////////////////////////////////////////////////////////////////// | |
32 | ///////////////////////////////////////////////////////////////////////// | |
33 | // | |
34 | // some defaults | |
35 | const char* baseName="RAW.ddl"; | |
36 | ||
37 | ///////////////////////////////////////////////////////////////////////// | |
38 | ///////////////////////////////////////////////////////////////////////// | |
39 | // | |
40 | // setup of the RawReader | |
41 | if (!input) { | |
42 | cerr << "invalid path" << endl; | |
43 | cerr << "usage: aliroot -b -q 'extract-ddlraw.C(\"raw.root\", 768, 769)'" << endl; | |
44 | return; | |
45 | } | |
46 | ||
0c409657 | 47 | TString strfile=input; |
48 | if (strfile.Contains("://") && !strfile.Contains("local://")) { | |
49 | TGrid::Connect("alien"); | |
50 | } | |
51 | ||
5aebebf7 | 52 | AliRawReader* pRawReader=AliRawReader::Create(input); |
53 | if (!pRawReader) { | |
54 | cout << "can not open RawReader for file " << input << endl; | |
55 | return; | |
56 | } | |
0c409657 | 57 | |
5aebebf7 | 58 | if (!pRawReader->NextEvent()) { |
59 | cerr << "no events available" << endl; | |
60 | return; | |
61 | } | |
62 | ||
63 | ///////////////////////////////////////////////////////////////////////// | |
64 | ///////////////////////////////////////////////////////////////////////// | |
65 | // | |
66 | // setup of the HLT system | |
7bf6c76d | 67 | AliHLTSystem* pHLT=AliHLTPluginBase::GetInstance(); |
5aebebf7 | 68 | if (!pHLT) { |
69 | cerr << "fatal error: can not get HLT instance" << endl; | |
70 | } | |
71 | ||
72 | ///////////////////////////////////////////////////////////////////////// | |
73 | ///////////////////////////////////////////////////////////////////////// | |
74 | // | |
75 | // the configuration chain | |
76 | // we show two possible configurations: | |
77 | // 1. having one publisher for each ddl, the configurations are created | |
78 | // in a loop | |
79 | // 2. all in one publisher | |
80 | // can be easily switched with the following | |
0c409657 | 81 | bool bAllInOne=true; |
5aebebf7 | 82 | |
83 | TString writerInput; | |
84 | TString arg; | |
85 | ||
86 | if (!bAllInOne) { | |
87 | // create one publisher for each ddl | |
88 | for (int ddlno=iMinDDLno; ddlno<=iMaxDDLno; ddlno++) { | |
89 | TString arg, publisher; | |
90 | ||
91 | // raw data publisher components | |
03df9065 | 92 | arg.Form("-minid %d -skipempty -verbose", ddlno); |
5aebebf7 | 93 | publisher.Form("DP_%d", ddlno); |
94 | // see AliHLTRawReaderPublisherComponent | |
95 | AliHLTConfiguration pubconf(publisher.Data(), "AliRawReaderPublisher", NULL , arg.Data()); | |
96 | ||
97 | if (!writerInput.IsNull()) writerInput+=" "; | |
98 | writerInput+=publisher; | |
99 | } | |
100 | } else { | |
101 | // publish all ddls by the same component, this is much more | |
102 | // effective as it avoids repeated parsing through the data | |
03df9065 | 103 | arg.Form("-minid %d -maxid %d -skipempty -verbose", iMinDDLno, iMaxDDLno); |
5aebebf7 | 104 | // see AliHLTRawReaderPublisherComponent |
105 | AliHLTConfiguration pubconf("publisher", "AliRawReaderPublisher", NULL , arg.Data()); | |
106 | if (!writerInput.IsNull()) writerInput+=" "; | |
107 | writerInput+="publisher"; | |
108 | } | |
109 | ||
110 | // the writer configuration is the same for both | |
111 | arg.Form("-specfmt=_%%d -subdir=raw%%d -blcknofmt= -idfmt= -datafile %s", baseName); | |
112 | // see AliHLTFileWriter | |
113 | AliHLTConfiguration fwconf("sink1", "FileWriter" , writerInput.Data(), arg.Data()); | |
114 | ||
115 | ||
116 | ///////////////////////////////////////////////////////////////////////// | |
117 | ///////////////////////////////////////////////////////////////////////// | |
118 | // | |
119 | // the reconstructor setup | |
120 | AliHLTReconstructor hltRec; | |
0c409657 | 121 | hltRec.SetOption("libAliHLTUtil.so loglevel=0x7c chains=sink1 ignore-hltout ignore-ctp"); |
5aebebf7 | 122 | if (hltRec.Init()<0) { |
123 | cerr << "initialization of reconstructor failed" << endl; | |
124 | return; | |
125 | } | |
126 | ||
127 | // this is just a dummy ESD to provide valid parameters to the | |
128 | // reconstructor | |
129 | AliESDEvent* pESD = new AliESDEvent; | |
130 | pESD->CreateStdContent(); | |
131 | ||
132 | ///////////////////////////////////////////////////////////////////////// | |
133 | ///////////////////////////////////////////////////////////////////////// | |
134 | // | |
135 | // the reconstruction loop | |
136 | Int_t event=0; | |
137 | UChar_t* pData=NULL; | |
138 | pRawReader->RewindEvents(); | |
0c409657 | 139 | while (pRawReader->NextEvent() && |
140 | (nofEvents<0 || event<nofEvents)) { | |
5aebebf7 | 141 | cout << "=======================================================" << endl; |
142 | cout << "event " << event << endl; | |
143 | cout << "-------------------------------------------------------" << endl; | |
144 | pRawReader->Reset(); | |
7384319f | 145 | hltRec.Reconstruct(pRawReader, NULL); |
5aebebf7 | 146 | event++; |
147 | } | |
148 | ||
149 | delete pESD; | |
150 | } | |
151 | ||
152 | void extract_ddlraw() | |
153 | { | |
154 | cerr << "===============================================================" << endl; | |
155 | cerr << "usage: aliroot -b -q 'extract-ddlraw.C(\"raw.root\", 768, 769)'" << endl << endl; | |
156 | cerr << "please provide input, min and max equipment id" << endl; | |
157 | cerr << "===============================================================" << endl; | |
158 | } |