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