potential memory leak fixed (Kenneth); sequential (non-bunch) reading implemented...
[u/mrichter/AliRoot.git] / HLT / TPCLib / macros / altro-channel-selection.C
1 // $Id$
2 /*
3  * Test macro for the AltroChannelSelector component
4  *
5  * Usage:
6  *   aliroot -b -q altro-channel-selection.C | tee altro-channel-selection.C
7  *
8  * The first version allows to write a fake file with the list of the
9  * selected pads. Later it will be extended to use the ClusterFinder
10  * or, better, a separate component.
11  *
12  * Matthias.Richter@ift.uib.no
13  */
14 {
15   // this is just a tool to switch the logging systems
16   AliHLTLogging log;
17   //log.SwitchAliLog(0);
18
19   AliHLTSystem gHLT;
20   //gHLT.SetGlobalLoggingLevel(0x3c);
21   //gHLT.SetFrameworkLog(0x3c);
22
23   // load the component library
24   gHLT.LoadComponentLibraries("libAliHLTTPC.so");
25
26   // create a dummy pad selection list
27   const char* dummySelectionList="/tmp/active-pads.dat";
28   FILE* fp = fopen(dummySelectionList, "w");
29   if (fp) {
30     UInt_t row=0;
31     UInt_t pad=0;
32
33     row=28, pad=5;
34     fwrite(&row, sizeof(UInt_t), 1, fp);
35     fwrite(&pad, sizeof(UInt_t), 1, fp);
36
37     row=28, pad=6;
38     fwrite(&row, sizeof(UInt_t), 1, fp);
39     fwrite(&pad, sizeof(UInt_t), 1, fp);
40
41     row=28, pad=7;
42     fwrite(&row, sizeof(UInt_t), 1, fp);
43     fwrite(&pad, sizeof(UInt_t), 1, fp);
44
45     row=29, pad=42;
46     fwrite(&row, sizeof(UInt_t), 1, fp);
47     fwrite(&pad, sizeof(UInt_t), 1, fp);
48
49     row=29, pad=43;
50     fwrite(&row, sizeof(UInt_t), 1, fp);
51     fwrite(&pad, sizeof(UInt_t), 1, fp);
52
53     fclose(fp);
54   } else {
55     cout << "can not open file " << dummySelectionList << " for writing" << endl;
56     return;
57   }
58
59   // direct dump switch allows to bypass the selector component
60   bool directDump=false;
61
62   // the configuration
63   int iMinSlice=0; 
64   int iMaxSlice=0;
65   int iMinPart=0;
66   int iMaxPart=5;
67   TString writerInput;
68   for (int slice=iMinSlice; slice<=iMaxSlice; slice++) {
69     for (int part=iMinPart; part<=iMaxPart; part++) {
70       TString arg, publisher, selector, activepads;
71       TString selectorInput;
72
73       // raw data publisher components
74       int ddlno=768;
75       if (part>1) ddlno+=72+4*slice+(part-2);
76       else ddlno+=2*slice+part;
77       arg.Form("-datatype 'DDL_RAW ' 'TPC ' -dataspec 0x%02x%02x%02x%02x -datafile TPC_%d.ddl", slice, slice, part, part, ddlno);
78       publisher.Form("DP_%02d_%d", slice, part);
79       AliHLTConfiguration pubconf(publisher.Data(), "FilePublisher", NULL , arg.Data());
80
81       // publisher for a dummy active pad list
82       activepads.Form("APP_%02d_%d", slice, part);
83       arg.Form("-datatype 'ACTIVPAD' 'TPC ' -dataspec 0x%02x%02x%02x%02x -datafile %s", slice, slice, part, part, dummySelectionList);
84       AliHLTConfiguration appconf(activepads.Data(), "FilePublisher", NULL , arg.Data());
85
86
87       if (selectorInput.Length()>0) selectorInput+=" ";
88       selectorInput+=publisher; selectorInput+=" ";
89       selectorInput+=activepads;
90
91       // the selector configuration
92       selector.Form("CHANNELSELECT_%02d_%d", slice, part);
93       AliHLTConfiguration channelselect(selector.Data(), "AltroChannelSelector", selectorInput.Data(), "-rawreadermode 4");
94
95       // add either the raw file directly to output or the filtered one
96       if (writerInput.Length()>0) writerInput+=" ";
97       if (directDump) {
98         writerInput+=publisher;
99       } else {
100         writerInput+=selector;
101       }
102     }
103   }
104
105   // the writer configuration
106   AliHLTConfiguration digitdump("digitdump", "TPCDigitDump"   , writerInput.Data(), "-rawreadermode 4 -specfmt=_0x%08x -subdir=out_%d -blcknofmt=_0x%x -idfmt=_0x%08x");
107   //AliHLTConfiguration digitdump("digitdump", "FileWriter"   , writerInput.Data(), "-specfmt=_0x%08x -subdir=out_%d -blcknofmt=_0x%x -idfmt=_0x%08x");
108   gHLT.BuildTaskList("digitdump");
109   gHLT.Run();
110
111   // delete temporary file
112   TString shellcmd;
113   shellcmd.Form("rm %s", dummySelectionList);
114   gSystem->Exec(shellcmd.Data());
115 }