Renaming AliHLTReconstructorBase to AliHLTPluginBase to reflect the
[u/mrichter/AliRoot.git] / HLT / TPCLib / macros / rec-hlt-tpc-offline.C
1 // $Id$
2 /**
3  * @file rec-hlt-tpc-offline.C
4  * @brief Test macro for the HLT TPC offline reco wrappers.
5  *
6  * The macro runs an HLT chain of TPC analysis, using the offline
7  * algorithms ans appropriate wrappers.
8  *
9  * Usage:
10  * <pre>
11  *   aliroot -b -q rec-hlt-tpc-offline.C | tee rec-hlt-tpc-offline.log
12  * </pre>
13  *
14  * The chain to be run is defined by the macro given to the parameter
15  * 'config='
16  *
17  * The macro asumes raw data to be available in the rawx folders, either
18  * simulated or real data. A different input can be specified as parameter
19  * <pre>
20  *   aliroot -b -q cal-hlt-tpc-offline.C'("input.root")'
21  * </pre>
22  *
23  * In the first section, an analysis chain is defined. The scale of the
24  * chain can be defined by choosing the range of sectors and partitions.
25  *
26  * The reconstruction is steered by the AliReconstruction object in the
27  * usual way.
28  *
29  * @ingroup alihlt_tpc
30  * @author Matthias.Richter@ift.uib.no
31  */
32 void rec_hlt_tpc_offline(const char* input="./")
33 {
34   if (!input) {
35     cerr << "please specify input or run without arguments" << endl;
36     return;
37   }
38   ///////////////////////////////////////////////////////////////////////////////////////////////////
39   //
40   // init the HLT system in order to define the analysis chain below
41   //
42   AliHLTSystem* gHLT=AliHLTPluginBase::GetInstance();
43
44   //gHLT.SwitchAliLog(0);
45
46   ///////////////////////////////////////////////////////////////////////////////////////////////////
47   //
48   // define the analysis chain to be run
49   //
50
51   bool sectorClusterer=true; // run clusterer on sector or DDL level
52   // check if the AliRawReaderMemory supports multiple buffers
53   TClass* info=TClass::GetClass("AliRawReaderMemory");
54   TList* methods=info->GetListOfAllPublicMethods();
55   if (sectorClusterer && !methods->FindObject("AddBuffer")) {
56     cerr << "warning: AliRawReaderMemory does not support multiple buffers, falling back to run clusterer on DDL level" << endl;
57     sectorClusterer=false;
58   }
59  
60   int iMinSlice=0;
61   int iMaxSlice=35;
62   int iMinPart=0;
63   int iMaxPart=5;
64
65   int DDLNoFromSlicePatch(int, int);
66
67   TString writerInput;
68   TString trackerInput;
69   for (int slice=iMinSlice; slice<=iMaxSlice; slice++) {
70     TString arg, clustererInput;
71     for (int part=iMinPart; part<=iMaxPart; part++) {
72       TString publisher, cf;
73
74       // raw data publisher components
75       int ddlno=DDLNoFromSlicePatch(slice, part);
76       arg.Form("-minid %d -datatype 'DDL_RAW ' 'TPC '  -dataspec 0x%02x%02x%02x%02x", ddlno, slice, slice, part, part);
77       publisher.Form("DP_%02d_%d", slice, part);
78       AliHLTConfiguration pubconf(publisher.Data(), "AliRawReaderPublisher", NULL , arg.Data());
79
80       if (!sectorClusterer) {
81       // cluster finder components
82       cf.Form("CF_%02d_%d", slice, part);
83       AliHLTConfiguration cfconf(cf.Data(), "TPCOfflineClusterer", publisher.Data(), "");
84
85       if (trackerInput.Length()>0) trackerInput+=" ";
86       trackerInput+=cf;
87       //if (writerInput.Length()>0) writerInput+=" ";
88       //writerInput+=cf;
89       } else {
90         if (clustererInput.Length()>0) clustererInput+=" ";
91         clustererInput+=publisher;
92       }
93     }
94     if (sectorClusterer) {
95       // cluster finder components
96       cf.Form("CF_%02d", slice);
97       AliHLTConfiguration cfconf(cf.Data(), "TPCOfflineClusterer", clustererInput.Data(), "");
98
99       if (trackerInput.Length()>0) trackerInput+=" ";
100       trackerInput+=cf;
101     }
102   }
103
104   // one global tracker component
105   TString tracker;
106   tracker.Form("Global_TR");
107   AliHLTConfiguration trackerconf(tracker.Data(), "TPCOfflineTracker", trackerInput.Data(), "");
108   if (writerInput.Length()>0) writerInput+=" ";
109   writerInput+=tracker;
110
111   // the writer configuration
112   AliHLTConfiguration esdwconf("sink1", "EsdCollector"   , writerInput.Data(), "-directory hlt-tpc-offline");
113
114   ///////////////////////////////////////////////////////////////////////////////////////////////////
115   //
116   // Init and run the reconstruction
117   // All but HLT reconstructio is switched off
118   //
119   AliReconstruction rec;
120   rec.SetInput(input);
121   rec.SetRunVertexFinder(kFALSE);
122   rec.SetRunLocalReconstruction("HLT");
123   rec.SetRunTracking("");
124   rec.SetLoadAlignFromCDB(0);
125   rec.SetFillESD("");
126   rec.SetRunQA(":");
127   rec.SetRunGlobalQA(kFALSE);
128   rec.SetFillTriggerESD(kFALSE);
129   rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTRCU.so libAliHLTTPC.so loglevel=0x7c chains=sink1");
130   rec.Run();
131 }
132
133 int DDLNoFromSlicePatch(int slice, int part)
134 {
135   int ddlno=768;
136   if (part>1) ddlno+=72+4*slice+(part-2);
137   else ddlno+=2*slice+part;
138
139   return ddlno;
140 }