ROOT logo
// $Id$
/*
 * Example macro to run the HLT Conformal mapping tracker embedded into
 * AliRoot reconstruction. The reconstruction is done from the TPC raw
 * data. The last component in the chain is the global merger and the
 * output of the chain is of type {'TRACKS  ':'TPC '}. The output is
 * added to the HLTOUT and processed during the FillESD step.
 * Alternativly the merger is skipped and all {'TRAKSEGS':'TPC '} blocks
 * are forwarded to the output. The merger step is included in the
 * HLTOUT processing in that case (see bUseTrackSegs variable below).
 *
 * Usage:
 * <pre>
 *   aliroot -b -q rec-hlt-tpc-tracks.C | tee rec-hlt-tpc-tracks.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-tpc-tracks.C'("input.root")'
 * </pre>
 *
 * 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_tpc
 * @author Matthias.Richter@ift.uib.no
 */
void rec_hlt_tpc_tracks(const char* input="./")
{
  if (!input) {
    cerr << "please specify input or run without arguments" << endl;
    return;
  }

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // init the HLT system in order to define the analysis chain below
  //
  AliHLTSystem* gHLT=AliHLTPluginBase::GetInstance();

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // define the analysis chain to be run
  //
  int iMinSlice=0;
  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", 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);
      AliHLTConfiguration cfconf(cf.Data(), "TPCClusterFinderDecoder", publisher.Data(), "-timebins 446");

      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(), "TPCSliceTracker", trackerInput.Data(), "-pp-run -solenoidBz 0.5");
    if (writerInput.Length()>0) writerInput+=" ";
    writerInput+=tracker;
    if (mergerInput.Length()>0) mergerInput+=" ";
    mergerInput+=tracker;
  }

  bool bUseTrackSegs=false;

  if (!bUseTrackSegs) {
    // GlobalMerger component
    AliHLTConfiguration mergerconf("globalmerger","TPCGlobalMerger",mergerInput.Data(),"");
  } else {
    // collect all tracksegs blocks
    AliHLTConfiguration mergerconf("globalmerger","BlockFilter",mergerInput.Data(),"");
  }

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Init and run the reconstruction
  // All but HLT reconstruction 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.SetFillTriggerESD(false);
  rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTRCU.so libAliHLTTPC.so loglevel=0x7c chains=globalmerger");
  rec.Run();
}
 rec-hlt-tpc-tracks.C:1
 rec-hlt-tpc-tracks.C:2
 rec-hlt-tpc-tracks.C:3
 rec-hlt-tpc-tracks.C:4
 rec-hlt-tpc-tracks.C:5
 rec-hlt-tpc-tracks.C:6
 rec-hlt-tpc-tracks.C:7
 rec-hlt-tpc-tracks.C:8
 rec-hlt-tpc-tracks.C:9
 rec-hlt-tpc-tracks.C:10
 rec-hlt-tpc-tracks.C:11
 rec-hlt-tpc-tracks.C:12
 rec-hlt-tpc-tracks.C:13
 rec-hlt-tpc-tracks.C:14
 rec-hlt-tpc-tracks.C:15
 rec-hlt-tpc-tracks.C:16
 rec-hlt-tpc-tracks.C:17
 rec-hlt-tpc-tracks.C:18
 rec-hlt-tpc-tracks.C:19
 rec-hlt-tpc-tracks.C:20
 rec-hlt-tpc-tracks.C:21
 rec-hlt-tpc-tracks.C:22
 rec-hlt-tpc-tracks.C:23
 rec-hlt-tpc-tracks.C:24
 rec-hlt-tpc-tracks.C:25
 rec-hlt-tpc-tracks.C:26
 rec-hlt-tpc-tracks.C:27
 rec-hlt-tpc-tracks.C:28
 rec-hlt-tpc-tracks.C:29
 rec-hlt-tpc-tracks.C:30
 rec-hlt-tpc-tracks.C:31
 rec-hlt-tpc-tracks.C:32
 rec-hlt-tpc-tracks.C:33
 rec-hlt-tpc-tracks.C:34
 rec-hlt-tpc-tracks.C:35
 rec-hlt-tpc-tracks.C:36
 rec-hlt-tpc-tracks.C:37
 rec-hlt-tpc-tracks.C:38
 rec-hlt-tpc-tracks.C:39
 rec-hlt-tpc-tracks.C:40
 rec-hlt-tpc-tracks.C:41
 rec-hlt-tpc-tracks.C:42
 rec-hlt-tpc-tracks.C:43
 rec-hlt-tpc-tracks.C:44
 rec-hlt-tpc-tracks.C:45
 rec-hlt-tpc-tracks.C:46
 rec-hlt-tpc-tracks.C:47
 rec-hlt-tpc-tracks.C:48
 rec-hlt-tpc-tracks.C:49
 rec-hlt-tpc-tracks.C:50
 rec-hlt-tpc-tracks.C:51
 rec-hlt-tpc-tracks.C:52
 rec-hlt-tpc-tracks.C:53
 rec-hlt-tpc-tracks.C:54
 rec-hlt-tpc-tracks.C:55
 rec-hlt-tpc-tracks.C:56
 rec-hlt-tpc-tracks.C:57
 rec-hlt-tpc-tracks.C:58
 rec-hlt-tpc-tracks.C:59
 rec-hlt-tpc-tracks.C:60
 rec-hlt-tpc-tracks.C:61
 rec-hlt-tpc-tracks.C:62
 rec-hlt-tpc-tracks.C:63
 rec-hlt-tpc-tracks.C:64
 rec-hlt-tpc-tracks.C:65
 rec-hlt-tpc-tracks.C:66
 rec-hlt-tpc-tracks.C:67
 rec-hlt-tpc-tracks.C:68
 rec-hlt-tpc-tracks.C:69
 rec-hlt-tpc-tracks.C:70
 rec-hlt-tpc-tracks.C:71
 rec-hlt-tpc-tracks.C:72
 rec-hlt-tpc-tracks.C:73
 rec-hlt-tpc-tracks.C:74
 rec-hlt-tpc-tracks.C:75
 rec-hlt-tpc-tracks.C:76
 rec-hlt-tpc-tracks.C:77
 rec-hlt-tpc-tracks.C:78
 rec-hlt-tpc-tracks.C:79
 rec-hlt-tpc-tracks.C:80
 rec-hlt-tpc-tracks.C:81
 rec-hlt-tpc-tracks.C:82
 rec-hlt-tpc-tracks.C:83
 rec-hlt-tpc-tracks.C:84
 rec-hlt-tpc-tracks.C:85
 rec-hlt-tpc-tracks.C:86
 rec-hlt-tpc-tracks.C:87
 rec-hlt-tpc-tracks.C:88
 rec-hlt-tpc-tracks.C:89
 rec-hlt-tpc-tracks.C:90
 rec-hlt-tpc-tracks.C:91
 rec-hlt-tpc-tracks.C:92
 rec-hlt-tpc-tracks.C:93
 rec-hlt-tpc-tracks.C:94
 rec-hlt-tpc-tracks.C:95
 rec-hlt-tpc-tracks.C:96
 rec-hlt-tpc-tracks.C:97
 rec-hlt-tpc-tracks.C:98
 rec-hlt-tpc-tracks.C:99
 rec-hlt-tpc-tracks.C:100
 rec-hlt-tpc-tracks.C:101
 rec-hlt-tpc-tracks.C:102
 rec-hlt-tpc-tracks.C:103
 rec-hlt-tpc-tracks.C:104
 rec-hlt-tpc-tracks.C:105
 rec-hlt-tpc-tracks.C:106
 rec-hlt-tpc-tracks.C:107
 rec-hlt-tpc-tracks.C:108
 rec-hlt-tpc-tracks.C:109
 rec-hlt-tpc-tracks.C:110
 rec-hlt-tpc-tracks.C:111
 rec-hlt-tpc-tracks.C:112
 rec-hlt-tpc-tracks.C:113
 rec-hlt-tpc-tracks.C:114
 rec-hlt-tpc-tracks.C:115
 rec-hlt-tpc-tracks.C:116
 rec-hlt-tpc-tracks.C:117