ROOT logo
// $Id: rec-hlt-tpc.C 35524 2009-10-14 14:39:46Z kkanaki $
/*
 * Example macro to run the HLT Conformal mapping tracker embedded into
 * AliRoot reconstruction. The reconstruction is done from the TPC raw
 * data.
 *
 * Usage:
 * <pre>
 *   aliroot -b -q rec-hlt-tpc.C | tee rec-hlt-tpc.log
 *   aliroot -b -q rec-hlt-tpc.C'("./","decoder All")' | tee rec-hlt-tpc.log
 * </pre>
 *
 * 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.C'("input.root")'
 * </pre>
 *
 * The ClusterFinder uses the offline altro decoder v3 by default. The former
 * CF components can be selected by means of the second parameter:
 *    - decoder, uses TPCClusterFinderDecoder. This is default.
 *    - packed, uses TPCClusterFinderPacked
 *
 * Also in the second parameter you can set which output you would like to have:
 *    - ESD, gives you an ESD file. This is default.
 *    - TrackHistogram, will run the TrackHistogram component, and give 
 *      root files with histograms.
 *    - TrackDump, dumps the track struct to a text file.
 *    - ClusterHisto, gives you histograms of the cluster.
 *    - ClusterDump, dumps the cluster struct to text flie.
 *    - All, gives you all 3 output.
 *
 * 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_dEdx(const char* input="./", char* opt="ESD")
{
  
  if(!gSystem->AccessPathName("galice.root")){
    cerr << "please delete the galice.root or run at different place." << endl;
    return;
  }

  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();
 
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Setting up which output to give
  //
  int clusterFinderType=0; // 0 = v3; 1 = decoder; 2 = packed (offline v1)
  bool bUseCA=true;   // use the CA tracker and merger
  TString option="libAliHLTUtil.so libAliHLTRCU.so libAliHLTTPC.so loglevel=0x7c chains=";
  Bool_t esdout=kFALSE, dumpout=kFALSE, histout=kFALSE, chout=kFALSE, cdout=kFALSE;
  TString allArgs=opt;
  TString argument;
  TObjArray* pTokens=allArgs.Tokenize(" ");
  if (pTokens) {
    for (int i=0; i<pTokens->GetEntries(); i++) {
      argument=((TObjString*)pTokens->At(i))->GetString();
      if (argument.IsNull()) continue;
 
      if (argument.Contains("-statistics=")) {
	argument.ReplaceAll("-statistics=", "");
	if (argument.Contains("root")) {
	  if (option.Length()>0) option+=",";
	  option+="statroot";
	}
	if (argument.Contains("raw")) {
	  if (option.Length()>0) option+=",";
	  option+="statraw";
	}
	continue;
      }
      if (argument.CompareTo("ca", TString::kIgnoreCase)==0) {
	bUseCA=true;
	continue;
      } 
      if (argument.CompareTo("cm", TString::kIgnoreCase)==0) {
	bUseCA=false;
	continue;
      }
      if (argument.CompareTo("decoder",TString::kIgnoreCase)==0) {
	clusterFinderType = 1;
	continue;
      }
      if (argument.CompareTo("packed",TString::kIgnoreCase)==0) {
	clusterFinderType = 2;
	continue;
      }
      if (argument.CompareTo("trackhistogram",TString::kIgnoreCase)==0) {
	histout = kTRUE;
	if (option.Length()>0) option+=",";
	option+="histFile";
	continue;
      }
      if (argument.CompareTo("trackdump",TString::kIgnoreCase)==0) {
	dumpout = kTRUE;
	if (option.Length()>0) option+=",";
	option+="dump";
	continue;
      }
      if (argument.CompareTo("esd",TString::kIgnoreCase)==0) {
	esdout = kTRUE;
	if (option.Length()>0) option+=",";
	option+="esd-converter";
	continue;
      }
      if (argument.CompareTo("esdwrite",TString::kIgnoreCase)==0) {
	esdout = kTRUE;
	if (option.Length()>0) option+=",";
	option+="esdfile";
	continue;
      }
      if (argument.CompareTo("clusterdump",TString::kIgnoreCase)==0) {
	cdout = kTRUE;
	if (option.Length()>0) option+=",";
	option+="cdump";
	continue;
      }      
      if (argument.CompareTo("clusterhisto",TString::kIgnoreCase)==0) {
	chout = kTRUE;
	if (option.Length()>0) option+=",";
	option+="chhisto";
	continue;
      }      
      if (argument.CompareTo("all",TString::kIgnoreCase)==0) {
	histout = kTRUE;
	dumpout = kTRUE;
	esdout = kTRUE;
	chout = kTRUE;
	cdout = kTRUE;
	if (option.Length()>0) option+=",";
	option+="esd-converter,histFile,dump,cdump,chhisto";
	continue;
      }
      else {
	break;
      }
    }
  }
  if (!histout && !dumpout && !esdout && !chout && !cdout) {
    cout << "you need to specify an output option, on or more out of: ESD, TrackHistogram, TrackDump, ClusterHisto, ClusterDump" << endl;
    return;
  }
  if ((option.Contains("statroot") || option.Contains("statraw")) && !esdout) {
    cout << "!!!!!!!! Warning: HLT statistics are only collected for output type ESD !!!!!!!!" << endl;
  }

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // define the analysis chain to be run
  //
  int iMinSlice=0;
  int iMaxSlice=35;
  int iMinPart=0;
  int iMaxPart=5;
  TString writerInput;
  TString mergerInput;
  TString dEdxInput;
  TString histoInput;
  TString histogramHandlerInputClusterFinder;
  TString cdumpInput;
  for (int slice=iMinSlice; slice<=iMaxSlice; slice++) {
    TString trackerInput;
    for (int part=iMinPart; part<=iMaxPart; part++) {
      TString arg, publisher, cf;
      TString clusterHistoOutput;
      // 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 (clusterFinderType==1) {
	AliHLTConfiguration cfconf(cf.Data(), "TPCClusterFinderDecoder", publisher.Data(), "-timebins 1001");
      } else if (clusterFinderType==2) {
	AliHLTConfiguration cfconf(cf.Data(), "TPCClusterFinderPacked", publisher.Data(), "-timebins 1001 -sorted");
      } else {
	AliHLTConfiguration cfconf(cf.Data(), "TPCClusterFinder32Bit", publisher.Data(), "-timebins 1001");
      }

      if (dEdxInput.Length()>0) dEdxInput+=" ";
      dEdxInput+=cf;
      
      if (trackerInput.Length()>0) trackerInput+=" ";
      trackerInput+=cf;
      if (writerInput.Length()>0) writerInput+=" ";
      writerInput+=cf;
      if (histoInput.Length()>0) histoInput+=" ";
      histoInput+=cf;
      if (cdumpInput.Length()>0) cdumpInput+=" ";
      cdumpInput+=cf;

      if(chout){
	clusterHistoOutput.Form("CH_%02d_%d", slice, part);
	AliHLTConfiguration cfconf(clusterHistoOutput.Data(), "TPCClusterHisto", cf.Data(), "");
	if (histogramHandlerInputClusterFinder.Length()>0) histogramHandlerInputClusterFinder+=" ";
	histogramHandlerInputClusterFinder+=clusterHistoOutput;
      }
    }
    TString tracker;
    // tracker components
    tracker.Form("TR_%02d", slice);
    if (bUseCA) {
      AliHLTConfiguration trackerconf(tracker.Data(), "TPCCATracker", trackerInput.Data(), "");
    } else {
      AliHLTConfiguration trackerconf(tracker.Data(), "TPCSliceTracker", trackerInput.Data(), "-pp-run");
    }

    if (writerInput.Length()>0) writerInput+=" ";
    writerInput+=tracker;
    if (mergerInput.Length()>0) mergerInput+=" ";
    mergerInput+=tracker;
    //add all slice tracks to histo input
    //if (histoInput.Length()>0) histoInput+=" ";
    //histoInput+=tracker;
  }

  // GlobalMerger component
  if (bUseCA) {
    AliHLTConfiguration mergerconf("globalmerger","TPCCAGlobalMerger",mergerInput.Data(),"");
  } else {
    AliHLTConfiguration mergerconf("globalmerger","TPCGlobalMerger",mergerInput.Data(),"");
  }


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

  AliHLTConfiguration dEdX("dEdx", "TPCdEdx", dEdxInput.Data(), "");
  
  //add all global tracks to histo input
  if (histoInput.Length()>0) histoInput+=" ";
  histoInput+="globalmerger";
  
  // specify whether to write all blocks separately or merge the tracks
  // and convert to ESD
  bool writeBlocks=false;

  if(esdout){
    if (writeBlocks) {
      // the writer configuration
      AliHLTConfiguration fwconf("esdfile", "FileWriter"   , writerInput.Data(), "-specfmt=_%d -subdir=out_%d -blcknofmt=_0x%x -idfmt=_0x%08x");
    } else {
           
      // the esd converter configuration
      AliHLTConfiguration esdcconf("esd-converter", "GlobalEsdConverter"   , "globalmerger dEdx", "");
      
      // the root file writer configuration
      AliHLTConfiguration sink("esdfile", "EsdCollector"   , "esd-converter", "-directory hlt-tpc-esd");

      // optional component statistics
      AliHLTConfiguration statroot("statroot", "StatisticsCollector"   , "esd-converter", "-file HLT.statistics.root -publish 0");
      AliHLTConfiguration statraw("statraw", "FileWriter"   , "esd-converter", "-datatype COMPSTAT PRIV -datafile HLT.statistics.raw -concatenate-blocks -concatenate-events");
    }
  }
  //Chain with Track Histogram
  if(histout){
    AliHLTConfiguration histoconf("histo","TPCTrackHisto",histoInput.Data(),"");  
    AliHLTConfiguration fwconf("histFile", "ROOTFileWriter"   , "histo", "-datafile TrackHisto -concatenate-events -overwrite");
  }
  //Chain with Track Dump
  if(dumpout){
    AliHLTConfiguration dumpconf("dump","TPCTrackDump","globalmerger","-directory TrackDump");
  }
  if(chout){
    AliHLTConfiguration cfconf("HHCF", "TPCHistogramHandler", histogramHandlerInputClusterFinder.Data(), "-use-general");
    AliHLTConfiguration rootFileWriterClusters("chhisto", "ROOTFileWriter", "HHCF" , "-datafile histogramHandlerClusterFinder -concatenate-events -overwrite");
  }
  if(cdout){
    AliHLTConfiguration cdumpconf("cdump","TPCClusterDump",cdumpInput.Data(),"-directory ClusterDump");
  }


  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Init and run the reconstruction
  // All but HLT reconstructio is switched off
  //
  AliReconstruction rec;
  rec.SetInput(input);
  rec.SetRunVertexFinder(kFALSE);
  rec.SetRunReconstruction("HLT");
  rec.SetLoadAlignFromCDB(0);
  rec.SetRunQA(":");
  rec.SetDefaultStorage("local://$ALICE_ROOT/OCDB");   
  rec.SetSpecificStorage("GRP/GRP/Data", Form("local://%s",gSystem->pwd()));
  rec.SetOption("HLT", option);
  rec.Run();
}
 rec-hlt-tpc-dEdx.C:1
 rec-hlt-tpc-dEdx.C:2
 rec-hlt-tpc-dEdx.C:3
 rec-hlt-tpc-dEdx.C:4
 rec-hlt-tpc-dEdx.C:5
 rec-hlt-tpc-dEdx.C:6
 rec-hlt-tpc-dEdx.C:7
 rec-hlt-tpc-dEdx.C:8
 rec-hlt-tpc-dEdx.C:9
 rec-hlt-tpc-dEdx.C:10
 rec-hlt-tpc-dEdx.C:11
 rec-hlt-tpc-dEdx.C:12
 rec-hlt-tpc-dEdx.C:13
 rec-hlt-tpc-dEdx.C:14
 rec-hlt-tpc-dEdx.C:15
 rec-hlt-tpc-dEdx.C:16
 rec-hlt-tpc-dEdx.C:17
 rec-hlt-tpc-dEdx.C:18
 rec-hlt-tpc-dEdx.C:19
 rec-hlt-tpc-dEdx.C:20
 rec-hlt-tpc-dEdx.C:21
 rec-hlt-tpc-dEdx.C:22
 rec-hlt-tpc-dEdx.C:23
 rec-hlt-tpc-dEdx.C:24
 rec-hlt-tpc-dEdx.C:25
 rec-hlt-tpc-dEdx.C:26
 rec-hlt-tpc-dEdx.C:27
 rec-hlt-tpc-dEdx.C:28
 rec-hlt-tpc-dEdx.C:29
 rec-hlt-tpc-dEdx.C:30
 rec-hlt-tpc-dEdx.C:31
 rec-hlt-tpc-dEdx.C:32
 rec-hlt-tpc-dEdx.C:33
 rec-hlt-tpc-dEdx.C:34
 rec-hlt-tpc-dEdx.C:35
 rec-hlt-tpc-dEdx.C:36
 rec-hlt-tpc-dEdx.C:37
 rec-hlt-tpc-dEdx.C:38
 rec-hlt-tpc-dEdx.C:39
 rec-hlt-tpc-dEdx.C:40
 rec-hlt-tpc-dEdx.C:41
 rec-hlt-tpc-dEdx.C:42
 rec-hlt-tpc-dEdx.C:43
 rec-hlt-tpc-dEdx.C:44
 rec-hlt-tpc-dEdx.C:45
 rec-hlt-tpc-dEdx.C:46
 rec-hlt-tpc-dEdx.C:47
 rec-hlt-tpc-dEdx.C:48
 rec-hlt-tpc-dEdx.C:49
 rec-hlt-tpc-dEdx.C:50
 rec-hlt-tpc-dEdx.C:51
 rec-hlt-tpc-dEdx.C:52
 rec-hlt-tpc-dEdx.C:53
 rec-hlt-tpc-dEdx.C:54
 rec-hlt-tpc-dEdx.C:55
 rec-hlt-tpc-dEdx.C:56
 rec-hlt-tpc-dEdx.C:57
 rec-hlt-tpc-dEdx.C:58
 rec-hlt-tpc-dEdx.C:59
 rec-hlt-tpc-dEdx.C:60
 rec-hlt-tpc-dEdx.C:61
 rec-hlt-tpc-dEdx.C:62
 rec-hlt-tpc-dEdx.C:63
 rec-hlt-tpc-dEdx.C:64
 rec-hlt-tpc-dEdx.C:65
 rec-hlt-tpc-dEdx.C:66
 rec-hlt-tpc-dEdx.C:67
 rec-hlt-tpc-dEdx.C:68
 rec-hlt-tpc-dEdx.C:69
 rec-hlt-tpc-dEdx.C:70
 rec-hlt-tpc-dEdx.C:71
 rec-hlt-tpc-dEdx.C:72
 rec-hlt-tpc-dEdx.C:73
 rec-hlt-tpc-dEdx.C:74
 rec-hlt-tpc-dEdx.C:75
 rec-hlt-tpc-dEdx.C:76
 rec-hlt-tpc-dEdx.C:77
 rec-hlt-tpc-dEdx.C:78
 rec-hlt-tpc-dEdx.C:79
 rec-hlt-tpc-dEdx.C:80
 rec-hlt-tpc-dEdx.C:81
 rec-hlt-tpc-dEdx.C:82
 rec-hlt-tpc-dEdx.C:83
 rec-hlt-tpc-dEdx.C:84
 rec-hlt-tpc-dEdx.C:85
 rec-hlt-tpc-dEdx.C:86
 rec-hlt-tpc-dEdx.C:87
 rec-hlt-tpc-dEdx.C:88
 rec-hlt-tpc-dEdx.C:89
 rec-hlt-tpc-dEdx.C:90
 rec-hlt-tpc-dEdx.C:91
 rec-hlt-tpc-dEdx.C:92
 rec-hlt-tpc-dEdx.C:93
 rec-hlt-tpc-dEdx.C:94
 rec-hlt-tpc-dEdx.C:95
 rec-hlt-tpc-dEdx.C:96
 rec-hlt-tpc-dEdx.C:97
 rec-hlt-tpc-dEdx.C:98
 rec-hlt-tpc-dEdx.C:99
 rec-hlt-tpc-dEdx.C:100
 rec-hlt-tpc-dEdx.C:101
 rec-hlt-tpc-dEdx.C:102
 rec-hlt-tpc-dEdx.C:103
 rec-hlt-tpc-dEdx.C:104
 rec-hlt-tpc-dEdx.C:105
 rec-hlt-tpc-dEdx.C:106
 rec-hlt-tpc-dEdx.C:107
 rec-hlt-tpc-dEdx.C:108
 rec-hlt-tpc-dEdx.C:109
 rec-hlt-tpc-dEdx.C:110
 rec-hlt-tpc-dEdx.C:111
 rec-hlt-tpc-dEdx.C:112
 rec-hlt-tpc-dEdx.C:113
 rec-hlt-tpc-dEdx.C:114
 rec-hlt-tpc-dEdx.C:115
 rec-hlt-tpc-dEdx.C:116
 rec-hlt-tpc-dEdx.C:117
 rec-hlt-tpc-dEdx.C:118
 rec-hlt-tpc-dEdx.C:119
 rec-hlt-tpc-dEdx.C:120
 rec-hlt-tpc-dEdx.C:121
 rec-hlt-tpc-dEdx.C:122
 rec-hlt-tpc-dEdx.C:123
 rec-hlt-tpc-dEdx.C:124
 rec-hlt-tpc-dEdx.C:125
 rec-hlt-tpc-dEdx.C:126
 rec-hlt-tpc-dEdx.C:127
 rec-hlt-tpc-dEdx.C:128
 rec-hlt-tpc-dEdx.C:129
 rec-hlt-tpc-dEdx.C:130
 rec-hlt-tpc-dEdx.C:131
 rec-hlt-tpc-dEdx.C:132
 rec-hlt-tpc-dEdx.C:133
 rec-hlt-tpc-dEdx.C:134
 rec-hlt-tpc-dEdx.C:135
 rec-hlt-tpc-dEdx.C:136
 rec-hlt-tpc-dEdx.C:137
 rec-hlt-tpc-dEdx.C:138
 rec-hlt-tpc-dEdx.C:139
 rec-hlt-tpc-dEdx.C:140
 rec-hlt-tpc-dEdx.C:141
 rec-hlt-tpc-dEdx.C:142
 rec-hlt-tpc-dEdx.C:143
 rec-hlt-tpc-dEdx.C:144
 rec-hlt-tpc-dEdx.C:145
 rec-hlt-tpc-dEdx.C:146
 rec-hlt-tpc-dEdx.C:147
 rec-hlt-tpc-dEdx.C:148
 rec-hlt-tpc-dEdx.C:149
 rec-hlt-tpc-dEdx.C:150
 rec-hlt-tpc-dEdx.C:151
 rec-hlt-tpc-dEdx.C:152
 rec-hlt-tpc-dEdx.C:153
 rec-hlt-tpc-dEdx.C:154
 rec-hlt-tpc-dEdx.C:155
 rec-hlt-tpc-dEdx.C:156
 rec-hlt-tpc-dEdx.C:157
 rec-hlt-tpc-dEdx.C:158
 rec-hlt-tpc-dEdx.C:159
 rec-hlt-tpc-dEdx.C:160
 rec-hlt-tpc-dEdx.C:161
 rec-hlt-tpc-dEdx.C:162
 rec-hlt-tpc-dEdx.C:163
 rec-hlt-tpc-dEdx.C:164
 rec-hlt-tpc-dEdx.C:165
 rec-hlt-tpc-dEdx.C:166
 rec-hlt-tpc-dEdx.C:167
 rec-hlt-tpc-dEdx.C:168
 rec-hlt-tpc-dEdx.C:169
 rec-hlt-tpc-dEdx.C:170
 rec-hlt-tpc-dEdx.C:171
 rec-hlt-tpc-dEdx.C:172
 rec-hlt-tpc-dEdx.C:173
 rec-hlt-tpc-dEdx.C:174
 rec-hlt-tpc-dEdx.C:175
 rec-hlt-tpc-dEdx.C:176
 rec-hlt-tpc-dEdx.C:177
 rec-hlt-tpc-dEdx.C:178
 rec-hlt-tpc-dEdx.C:179
 rec-hlt-tpc-dEdx.C:180
 rec-hlt-tpc-dEdx.C:181
 rec-hlt-tpc-dEdx.C:182
 rec-hlt-tpc-dEdx.C:183
 rec-hlt-tpc-dEdx.C:184
 rec-hlt-tpc-dEdx.C:185
 rec-hlt-tpc-dEdx.C:186
 rec-hlt-tpc-dEdx.C:187
 rec-hlt-tpc-dEdx.C:188
 rec-hlt-tpc-dEdx.C:189
 rec-hlt-tpc-dEdx.C:190
 rec-hlt-tpc-dEdx.C:191
 rec-hlt-tpc-dEdx.C:192
 rec-hlt-tpc-dEdx.C:193
 rec-hlt-tpc-dEdx.C:194
 rec-hlt-tpc-dEdx.C:195
 rec-hlt-tpc-dEdx.C:196
 rec-hlt-tpc-dEdx.C:197
 rec-hlt-tpc-dEdx.C:198
 rec-hlt-tpc-dEdx.C:199
 rec-hlt-tpc-dEdx.C:200
 rec-hlt-tpc-dEdx.C:201
 rec-hlt-tpc-dEdx.C:202
 rec-hlt-tpc-dEdx.C:203
 rec-hlt-tpc-dEdx.C:204
 rec-hlt-tpc-dEdx.C:205
 rec-hlt-tpc-dEdx.C:206
 rec-hlt-tpc-dEdx.C:207
 rec-hlt-tpc-dEdx.C:208
 rec-hlt-tpc-dEdx.C:209
 rec-hlt-tpc-dEdx.C:210
 rec-hlt-tpc-dEdx.C:211
 rec-hlt-tpc-dEdx.C:212
 rec-hlt-tpc-dEdx.C:213
 rec-hlt-tpc-dEdx.C:214
 rec-hlt-tpc-dEdx.C:215
 rec-hlt-tpc-dEdx.C:216
 rec-hlt-tpc-dEdx.C:217
 rec-hlt-tpc-dEdx.C:218
 rec-hlt-tpc-dEdx.C:219
 rec-hlt-tpc-dEdx.C:220
 rec-hlt-tpc-dEdx.C:221
 rec-hlt-tpc-dEdx.C:222
 rec-hlt-tpc-dEdx.C:223
 rec-hlt-tpc-dEdx.C:224
 rec-hlt-tpc-dEdx.C:225
 rec-hlt-tpc-dEdx.C:226
 rec-hlt-tpc-dEdx.C:227
 rec-hlt-tpc-dEdx.C:228
 rec-hlt-tpc-dEdx.C:229
 rec-hlt-tpc-dEdx.C:230
 rec-hlt-tpc-dEdx.C:231
 rec-hlt-tpc-dEdx.C:232
 rec-hlt-tpc-dEdx.C:233
 rec-hlt-tpc-dEdx.C:234
 rec-hlt-tpc-dEdx.C:235
 rec-hlt-tpc-dEdx.C:236
 rec-hlt-tpc-dEdx.C:237
 rec-hlt-tpc-dEdx.C:238
 rec-hlt-tpc-dEdx.C:239
 rec-hlt-tpc-dEdx.C:240
 rec-hlt-tpc-dEdx.C:241
 rec-hlt-tpc-dEdx.C:242
 rec-hlt-tpc-dEdx.C:243
 rec-hlt-tpc-dEdx.C:244
 rec-hlt-tpc-dEdx.C:245
 rec-hlt-tpc-dEdx.C:246
 rec-hlt-tpc-dEdx.C:247
 rec-hlt-tpc-dEdx.C:248
 rec-hlt-tpc-dEdx.C:249
 rec-hlt-tpc-dEdx.C:250
 rec-hlt-tpc-dEdx.C:251
 rec-hlt-tpc-dEdx.C:252
 rec-hlt-tpc-dEdx.C:253
 rec-hlt-tpc-dEdx.C:254
 rec-hlt-tpc-dEdx.C:255
 rec-hlt-tpc-dEdx.C:256
 rec-hlt-tpc-dEdx.C:257
 rec-hlt-tpc-dEdx.C:258
 rec-hlt-tpc-dEdx.C:259
 rec-hlt-tpc-dEdx.C:260
 rec-hlt-tpc-dEdx.C:261
 rec-hlt-tpc-dEdx.C:262
 rec-hlt-tpc-dEdx.C:263
 rec-hlt-tpc-dEdx.C:264
 rec-hlt-tpc-dEdx.C:265
 rec-hlt-tpc-dEdx.C:266
 rec-hlt-tpc-dEdx.C:267
 rec-hlt-tpc-dEdx.C:268
 rec-hlt-tpc-dEdx.C:269
 rec-hlt-tpc-dEdx.C:270
 rec-hlt-tpc-dEdx.C:271
 rec-hlt-tpc-dEdx.C:272
 rec-hlt-tpc-dEdx.C:273
 rec-hlt-tpc-dEdx.C:274
 rec-hlt-tpc-dEdx.C:275
 rec-hlt-tpc-dEdx.C:276
 rec-hlt-tpc-dEdx.C:277
 rec-hlt-tpc-dEdx.C:278
 rec-hlt-tpc-dEdx.C:279
 rec-hlt-tpc-dEdx.C:280
 rec-hlt-tpc-dEdx.C:281
 rec-hlt-tpc-dEdx.C:282
 rec-hlt-tpc-dEdx.C:283
 rec-hlt-tpc-dEdx.C:284
 rec-hlt-tpc-dEdx.C:285
 rec-hlt-tpc-dEdx.C:286
 rec-hlt-tpc-dEdx.C:287
 rec-hlt-tpc-dEdx.C:288
 rec-hlt-tpc-dEdx.C:289
 rec-hlt-tpc-dEdx.C:290
 rec-hlt-tpc-dEdx.C:291
 rec-hlt-tpc-dEdx.C:292
 rec-hlt-tpc-dEdx.C:293
 rec-hlt-tpc-dEdx.C:294
 rec-hlt-tpc-dEdx.C:295
 rec-hlt-tpc-dEdx.C:296
 rec-hlt-tpc-dEdx.C:297
 rec-hlt-tpc-dEdx.C:298
 rec-hlt-tpc-dEdx.C:299
 rec-hlt-tpc-dEdx.C:300
 rec-hlt-tpc-dEdx.C:301
 rec-hlt-tpc-dEdx.C:302
 rec-hlt-tpc-dEdx.C:303
 rec-hlt-tpc-dEdx.C:304
 rec-hlt-tpc-dEdx.C:305
 rec-hlt-tpc-dEdx.C:306
 rec-hlt-tpc-dEdx.C:307
 rec-hlt-tpc-dEdx.C:308
 rec-hlt-tpc-dEdx.C:309
 rec-hlt-tpc-dEdx.C:310