ROOT logo
// $Id$
/*
 * Example macro to run the HLT global track merger embedded
 * into AliRoot reconstruction. The reconstruction is done from the raw data.
 *
 * Usage:
 * <pre>
 *   aliroot -b -q rec-hlt-global-merger.C | tee rec-hlt-global-merger.log
 * </pre>
 *
 * The chain to be run is defined by the macro given to the parameter
 * 'config='
 *
 * The macro asumes raw data to be available in the rawx folders, either
 * simulated or real data. A different input can be specified as parameter
 * <pre>
 *   aliroot -b -q rec-hlt-global-merger.C'("input.root")'
 * </pre>
 *
 * By the second parameter the digit reader can be chosen, default is
 * AliHLTTPCDigitReaderPacked (=false). Set to true to use
 * AliHLTTPCDigitReaderDecoder
 *
 * In the first section, an analysis chain is defined. The scale of the
 * chain can be defined by choosing the range of sectors and partitions.
 *
 * The reconstruction is steered by the AliReconstruction object in the
 * usual way.
 *
 * @ingroup alihlt_global
 * @author 
 */
void rec_hlt_global_merger(const char* input="./", bool bUseClusterFinderDecoder=true)
{
  if (!input) {
    cerr << "please specify input or run without arguments" << endl;
    return;
  }

  gSystem->Exec("rm galice.root");

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // init the HLT system in order to define the analysis chain below
  //
  AliHLTSystem* gHLT=AliHLTPluginBase::GetInstance();
  gHLT->SetGlobalLoggingLevel(0x4); 
  /*  enum AliHLTComponentLogSeverity {       
      kHLTLogNone      = 0,
      kHLTLogBenchmark = 0x1,
      kHLTLogDebug     = 0x2,
      kHLTLogInfo      = 0x4,
      kHLTLogWarning   = 0x8,
      kHLTLogError     = 0x10,
      kHLTLogFatal     = 0x20,      
      few important messages not to be filtered out.
      redirected to kHLTLogInfo in AliRoot
      kHLTLogImportant = 0x40,
      special value to enable all messages 
      kHLTLogAll       = 0x7f,
      the default logging filter 
      kHLTLogDefault   = 0x79
      useful           = 0x45
  */

  // set TPC debug stream level
  AliTPCReconstructor::SetStreamLevel(1);

  //gHLT->LoadComponentLibraries("libAliHLTUtil.so libAliHLTRCU.so libAliHLTTRD.so libAliHLTTPC.so libAliHLTGlobal.so");

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // define the analysis chain to be run
  //

  //  Global merger
  TString globalmergerInput;

  // TPC
  int iMinSlice=0;
  int iMaxSlice=35;
  //int iMaxSlice=17;
  int iMinPart=0;
  int iMaxPart=5;

  TString writerInput;
  TString mergerInput;
  for (int slice=iMinSlice; slice<=iMaxSlice; slice++) {
    TString trackerInput;
    for (int part=iMinPart; part<=iMaxPart; part++) {
      TString arg, publisher, cf;

      // raw data publisher components
      int ddlno=768;
      if (part>1) ddlno+=72+4*slice+(part-2);
      else ddlno+=2*slice+part;
      arg.Form("-minid %d -datatype 'DDL_RAW ' 'TPC '  -dataspec 0x%02x%02x%02x%02x -verbose", ddlno, slice, slice, part, part);
      publisher.Form("DP_%02d_%d", slice, part);
      AliHLTConfiguration pubconf(publisher.Data(), "AliRawReaderPublisher", NULL , arg.Data());

      // cluster finder components
      cf.Form("CF_%02d_%d",slice,part);
      if (bUseClusterFinderDecoder) {
	AliHLTConfiguration cfconf(cf.Data(), "TPCClusterFinderDecoder", publisher.Data(), "-timebins 446");
      } else {
	AliHLTConfiguration cfconf(cf.Data(), "TPCClusterFinderPacked", publisher.Data(), "-timebins 446 -sorted");
      }
      if (trackerInput.Length()>0) trackerInput+=" ";
      trackerInput+=cf;
      if (writerInput.Length()>0) writerInput+=" ";
      writerInput+=cf;
    }
    TString tracker;
    // tracker finder components
    tracker.Form("TR_%02d",slice);
    AliHLTConfiguration trackerconf(tracker.Data(), "TPCCATracker", trackerInput.Data(), "-solenoidBz 5");
    if (writerInput.Length()>0) writerInput+=" ";
    writerInput+=tracker;
    if (mergerInput.Length()>0) mergerInput+=" ";
    mergerInput+=tracker;
  }
  // TPC GlobalMerger component
  AliHLTConfiguration mergerconf("globalmerger","TPCGlobalMerger",mergerInput.Data(),"");

  //
  // TRD
  //
  int iMinSlice=0;
  int iMaxSlice=17;
  //int iMaxSlice=8;

  TString writerInput1;
  TString mergerInput1;
  for (int slice=iMinSlice; slice<=iMaxSlice; slice++) {
    //TString trackerInput1;
    TString arg1, publisher1, cf1;

    // raw data publisher components
    int ddlno=1024;
    ddlno += slice;

    arg1.Form("-minid %d -datatype 'DDL_RAW ' 'TRD ' -verbose", ddlno);
    publisher1.Form("DP1_%02d", slice);
    AliHLTConfiguration pubconf(publisher1.Data(), "AliRawReaderPublisher", NULL , arg1.Data());

    //arg1.Form("-datatype 'DDL_RAW ' 'TRD ' -datafile raw0/TRD_%d.ddl", ddlno);
    //publisher1.Form("DP1_%02d",slice);
    //AliHLTConfiguration pubconf(publisher1.Data(), "FilePublisher", NULL , arg.Data());
    //cout << arg.Data() << endl; 

    // cluster finder components
    cf1.Form("CF1_%02d",slice);
    AliHLTConfiguration cfconf(cf1.Data(), "TRDClusterizer", publisher1.Data(), "output_percentage 1000 -geometry geometry.root -lowflux -simulation");

    // tracker finder components
    TString tracker1;
    tracker1.Form("TR1_%02d",slice);
    AliHLTConfiguration trackerconf(tracker1.Data(), "TRDTrackerV1", cf1.Data(), "output_percentage 300 -NTimeBins 24 -magnetic_field_ON -lowflux -geometry geometry.root");

    if (writerInput1.Length()>0) writerInput1+=" ";
    writerInput1+=tracker1;

    if (mergerInput1.Length()>0) mergerInput1+=" ";
    mergerInput1 += tracker1;
  }

  if (globalmergerInput.Length()>0) globalmergerInput+=" ";
  globalmergerInput += "globalmerger";

  if (globalmergerInput.Length()>0) globalmergerInput+=" ";
  globalmergerInput += mergerInput1;

  //TString datatype = "sim";
  //AliHLTConfiguration HWriterTR( "HWriterTR", "FileWriter", writerInput.Data(), "-directory . -datafile tr_" + datatype + ".out");
  
  //GlobalTrackMerger component
  AliHLTConfiguration gtrackmergerconf("gtrackmerger","GlobalTrackMerger",globalmergerInput.Data(),"");

  // the root file writer configuration
  AliHLTConfiguration sink("sink1", "EsdCollector" , "gtrackmerger" , "-directory hlt-global-track");

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Init and run the reconstruction
  // All but HLT reconstructio is switched off
  //
  AliReconstruction rec;
  rec.SetInput(input);
  rec.SetRunVertexFinder(kFALSE);
  rec.SetRunLocalReconstruction("HLT");
  rec.SetRunTracking("");
  rec.SetLoadAlignFromCDB(0);
  rec.SetRunQA(":");
  rec.SetFillESD("HLT");
  rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTRCU.so libAliHLTTRD.so libAliHLTTPC.so libAliHLTGlobal.so chains=sink1");
  rec.Run();
}
 rec-hlt-global-merger.C:1
 rec-hlt-global-merger.C:2
 rec-hlt-global-merger.C:3
 rec-hlt-global-merger.C:4
 rec-hlt-global-merger.C:5
 rec-hlt-global-merger.C:6
 rec-hlt-global-merger.C:7
 rec-hlt-global-merger.C:8
 rec-hlt-global-merger.C:9
 rec-hlt-global-merger.C:10
 rec-hlt-global-merger.C:11
 rec-hlt-global-merger.C:12
 rec-hlt-global-merger.C:13
 rec-hlt-global-merger.C:14
 rec-hlt-global-merger.C:15
 rec-hlt-global-merger.C:16
 rec-hlt-global-merger.C:17
 rec-hlt-global-merger.C:18
 rec-hlt-global-merger.C:19
 rec-hlt-global-merger.C:20
 rec-hlt-global-merger.C:21
 rec-hlt-global-merger.C:22
 rec-hlt-global-merger.C:23
 rec-hlt-global-merger.C:24
 rec-hlt-global-merger.C:25
 rec-hlt-global-merger.C:26
 rec-hlt-global-merger.C:27
 rec-hlt-global-merger.C:28
 rec-hlt-global-merger.C:29
 rec-hlt-global-merger.C:30
 rec-hlt-global-merger.C:31
 rec-hlt-global-merger.C:32
 rec-hlt-global-merger.C:33
 rec-hlt-global-merger.C:34
 rec-hlt-global-merger.C:35
 rec-hlt-global-merger.C:36
 rec-hlt-global-merger.C:37
 rec-hlt-global-merger.C:38
 rec-hlt-global-merger.C:39
 rec-hlt-global-merger.C:40
 rec-hlt-global-merger.C:41
 rec-hlt-global-merger.C:42
 rec-hlt-global-merger.C:43
 rec-hlt-global-merger.C:44
 rec-hlt-global-merger.C:45
 rec-hlt-global-merger.C:46
 rec-hlt-global-merger.C:47
 rec-hlt-global-merger.C:48
 rec-hlt-global-merger.C:49
 rec-hlt-global-merger.C:50
 rec-hlt-global-merger.C:51
 rec-hlt-global-merger.C:52
 rec-hlt-global-merger.C:53
 rec-hlt-global-merger.C:54
 rec-hlt-global-merger.C:55
 rec-hlt-global-merger.C:56
 rec-hlt-global-merger.C:57
 rec-hlt-global-merger.C:58
 rec-hlt-global-merger.C:59
 rec-hlt-global-merger.C:60
 rec-hlt-global-merger.C:61
 rec-hlt-global-merger.C:62
 rec-hlt-global-merger.C:63
 rec-hlt-global-merger.C:64
 rec-hlt-global-merger.C:65
 rec-hlt-global-merger.C:66
 rec-hlt-global-merger.C:67
 rec-hlt-global-merger.C:68
 rec-hlt-global-merger.C:69
 rec-hlt-global-merger.C:70
 rec-hlt-global-merger.C:71
 rec-hlt-global-merger.C:72
 rec-hlt-global-merger.C:73
 rec-hlt-global-merger.C:74
 rec-hlt-global-merger.C:75
 rec-hlt-global-merger.C:76
 rec-hlt-global-merger.C:77
 rec-hlt-global-merger.C:78
 rec-hlt-global-merger.C:79
 rec-hlt-global-merger.C:80
 rec-hlt-global-merger.C:81
 rec-hlt-global-merger.C:82
 rec-hlt-global-merger.C:83
 rec-hlt-global-merger.C:84
 rec-hlt-global-merger.C:85
 rec-hlt-global-merger.C:86
 rec-hlt-global-merger.C:87
 rec-hlt-global-merger.C:88
 rec-hlt-global-merger.C:89
 rec-hlt-global-merger.C:90
 rec-hlt-global-merger.C:91
 rec-hlt-global-merger.C:92
 rec-hlt-global-merger.C:93
 rec-hlt-global-merger.C:94
 rec-hlt-global-merger.C:95
 rec-hlt-global-merger.C:96
 rec-hlt-global-merger.C:97
 rec-hlt-global-merger.C:98
 rec-hlt-global-merger.C:99
 rec-hlt-global-merger.C:100
 rec-hlt-global-merger.C:101
 rec-hlt-global-merger.C:102
 rec-hlt-global-merger.C:103
 rec-hlt-global-merger.C:104
 rec-hlt-global-merger.C:105
 rec-hlt-global-merger.C:106
 rec-hlt-global-merger.C:107
 rec-hlt-global-merger.C:108
 rec-hlt-global-merger.C:109
 rec-hlt-global-merger.C:110
 rec-hlt-global-merger.C:111
 rec-hlt-global-merger.C:112
 rec-hlt-global-merger.C:113
 rec-hlt-global-merger.C:114
 rec-hlt-global-merger.C:115
 rec-hlt-global-merger.C:116
 rec-hlt-global-merger.C:117
 rec-hlt-global-merger.C:118
 rec-hlt-global-merger.C:119
 rec-hlt-global-merger.C:120
 rec-hlt-global-merger.C:121
 rec-hlt-global-merger.C:122
 rec-hlt-global-merger.C:123
 rec-hlt-global-merger.C:124
 rec-hlt-global-merger.C:125
 rec-hlt-global-merger.C:126
 rec-hlt-global-merger.C:127
 rec-hlt-global-merger.C:128
 rec-hlt-global-merger.C:129
 rec-hlt-global-merger.C:130
 rec-hlt-global-merger.C:131
 rec-hlt-global-merger.C:132
 rec-hlt-global-merger.C:133
 rec-hlt-global-merger.C:134
 rec-hlt-global-merger.C:135
 rec-hlt-global-merger.C:136
 rec-hlt-global-merger.C:137
 rec-hlt-global-merger.C:138
 rec-hlt-global-merger.C:139
 rec-hlt-global-merger.C:140
 rec-hlt-global-merger.C:141
 rec-hlt-global-merger.C:142
 rec-hlt-global-merger.C:143
 rec-hlt-global-merger.C:144
 rec-hlt-global-merger.C:145
 rec-hlt-global-merger.C:146
 rec-hlt-global-merger.C:147
 rec-hlt-global-merger.C:148
 rec-hlt-global-merger.C:149
 rec-hlt-global-merger.C:150
 rec-hlt-global-merger.C:151
 rec-hlt-global-merger.C:152
 rec-hlt-global-merger.C:153
 rec-hlt-global-merger.C:154
 rec-hlt-global-merger.C:155
 rec-hlt-global-merger.C:156
 rec-hlt-global-merger.C:157
 rec-hlt-global-merger.C:158
 rec-hlt-global-merger.C:159
 rec-hlt-global-merger.C:160
 rec-hlt-global-merger.C:161
 rec-hlt-global-merger.C:162
 rec-hlt-global-merger.C:163
 rec-hlt-global-merger.C:164
 rec-hlt-global-merger.C:165
 rec-hlt-global-merger.C:166
 rec-hlt-global-merger.C:167
 rec-hlt-global-merger.C:168
 rec-hlt-global-merger.C:169
 rec-hlt-global-merger.C:170
 rec-hlt-global-merger.C:171
 rec-hlt-global-merger.C:172
 rec-hlt-global-merger.C:173
 rec-hlt-global-merger.C:174
 rec-hlt-global-merger.C:175
 rec-hlt-global-merger.C:176
 rec-hlt-global-merger.C:177
 rec-hlt-global-merger.C:178
 rec-hlt-global-merger.C:179
 rec-hlt-global-merger.C:180
 rec-hlt-global-merger.C:181
 rec-hlt-global-merger.C:182
 rec-hlt-global-merger.C:183
 rec-hlt-global-merger.C:184
 rec-hlt-global-merger.C:185
 rec-hlt-global-merger.C:186
 rec-hlt-global-merger.C:187
 rec-hlt-global-merger.C:188
 rec-hlt-global-merger.C:189
 rec-hlt-global-merger.C:190
 rec-hlt-global-merger.C:191
 rec-hlt-global-merger.C:192
 rec-hlt-global-merger.C:193
 rec-hlt-global-merger.C:194
 rec-hlt-global-merger.C:195
 rec-hlt-global-merger.C:196
 rec-hlt-global-merger.C:197
 rec-hlt-global-merger.C:198