Update master to aliroot
[u/mrichter/AliRoot.git] / HLT / programs / rec-HLTOUT-bin.C
CommitLineData
adbdeaec 1// $Id$
2/*
3 * Process and reconstruct the binary HLTOUT files as written to disk
4 * by the HLTOUT formatter on the online HLT system.
5 *
6 * Usage:
7 * <pre>
8 * aliroot -b -q rec-HLTOUT-bin.C'("pattern", runno, keepFiles)'
9 * aliroot -b -q rec-HLTOUT-bin.C'("")' # for help
10 * </pre>
11 *
12 * In the online HLT, output of the HLTOUT formatter can be written to disk.
13 * The resulting binary files contain the full DDL data. The macro
14 * reconstructs the events from a specified sample of binary files.
15 *
16 * @ingroup alihlt_programs
17 * @author Matthias.Richter@ift.uib.no
18 */
19void rec_HLTOUT_bin(const char* input="", int runno=0, bool keepFiles=false)
20{
21 if (!input || input[0]==0) {
22 cerr << "rec-HLTOUT-bin.C: Process and reconstruct binary HLTOUT files" << endl;
23 cerr << "===============================================================" << endl;
24 cerr << "usage: aliroot -b -q -l rec-HLTOUT-bin.C'(\"pattern\" " << endl;
25 cerr << " runNo," << endl;
26 cerr << " keepFiles)'" << endl << endl;
27 cerr << " Parameter:" << endl;
28 cerr << " pattern input file pattern, e.g. \"HLT-Output*.bin\"" << endl;
29 cerr << " runNo run no, default 0" << endl;
30 cerr << " keepFiles keep the intermediate files, default false" << endl;
31 cerr << "===============================================================" << endl;
32 return;
33 }
34
35 if(!gSystem->AccessPathName("galice.root")){
36 cerr << "please delete the galice.root or run at different place." << endl;
37 return;
38 }
39
40 TString inputPattern=input;
41 if (!inputPattern.BeginsWith("/")) {
42 inputPattern=gSystem->pwd();
43 inputPattern+="/";
44 inputPattern+=input;
45 }
46 TString workingDir=gSystem->TempDirectory();
47 TUUID uuid;
48 workingDir+="/"; workingDir+=uuid.AsString(); workingDir+="/";
49 ///////////////////////////////////////////////////////////////////////////////////////////////////
50 //
51 // prepare the input
52 // in order to run the normal AliRoot reconstruction over the data, the files
53 // need to be assembled in a format readable by the AliRawReaderFile
54 // A shell script creates the rawx folders in the temporary working directory
55 // and links one binary input file in each
56 //
57 TString command="c=0; for file in ";
58 command+=inputPattern;
59 command+=" ; do directory=";
60 command+=workingDir;
61 command+="raw$c; mkdir -p $directory; (cd $directory; ln -s $file HLT_7680.ddl; touch run";
62 command+=runno;
63 command+="); let c++; done";
64
65 if (gSystem->Exec(command)!=0) {
66 cerr << "failed to execute script" << endl << "================================================" << endl;
67 cerr << command << endl;
68 return;
69 }
70
71 ///////////////////////////////////////////////////////////////////////////////////////////////////
72 //
73 // Init and run the reconstruction
74 // All but HLT reconstructio is switched off
75 //
76 AliReconstruction rec;
77 rec.SetInput(workingDir);
78 rec.SetRunVertexFinder(kFALSE);
79 rec.SetRunReconstruction("HLT");
80 rec.SetLoadAlignFromCDB(0);
81 rec.SetRunQA(":");
82 rec.SetOption("HLT", "loglevel=0x7c");
83 rec.Run();
84
85 if (keepFiles) {
86 cout << "event(s) reconstructed from " << workingDir << endl;
87 } else {
88 command="rm -r ";
89 command+=workingDir;
90 gSystem->Exec(command);
91 }
92}