ROOT logo
// $Id$
/*
 * Example macro to run locally an analysis task for comparing the offline
 * with the HLT esd tree.
 *
 * The output is a root file containing the objects defined in the
 * analysis task. These could be histograms or THnSparse objects.
 * There is one output file per task containing a TList of TH1 or THnSparse objects. 
 *
 * Run without arguments to get a few examples how to use the macro
 * and which tasks are available in svn.
 * 
 * The arguments are:
 * - the input file or txt file containing a list of ESDs to be processed (CreateESDChain takes 20 files as a default argument)
 * - the task you want to use
 * - the path of the task location
 * - the beam type, "p-p" or "Pb-Pb", this is relevant for the central barrel and global tasks at the moment and is 
 *   used to select proper binning and axes ranges for the THnSparse/TH1 objects that it fills
 * - options to make the central barrel task more flexible and lightweight; you can select if you want to 
 *   fill the THnSparse object with only event or track properties or only HLT data or only OFF
 *   possible options are: event-off event-hlt track-off track-hlt, all are turned on by default
 * - boolean variable for selecting events which contain an HLT trigger
 * - number of events to be analyzed
 *
 * If alien:// is placed before the input filename, then the macro connects to the grid to access the file.
 * 
 * In case you want to run over many ESD files, then prepare a list of them in a .txt file and they will be chained for the analysis.
 * The .txt file takes the place of the first argument in that case. The chain can take up to 200 files at the moment. The user
 * can modify this in the call CreateESDChain(file.Data(),200); 
 *
 * If the files are not sitting locally but on the GRID, then their location should be designated like:
 * alien:///alice/data/2011/LHC11a/000146018/ESDs/pass1/11000146018023.20/AliESDs.root in the *txt file.
 * The macro takes care of connecting to the GRID, as soon as the first file is found that begins with alien://
 *
 * @ingroup alihlt_qa
 * @author Kalliopi.Kanaki@ift.uib.no, Hege.Erdal@student.uib.no
 */

void compare_HLT_offline_local( TString file
                               ,const char* detectorTask="global"
			       ,TString taskFolder="$ALICE_ROOT/HLT/QA/tasks/"
			       ,TString beamType="p-p"
			       ,TString options="event-off event-hlt track-off track-hlt"
			       ,bool fUseHLTTrigger=kFALSE
			       ,Long64_t nEvents=1234567890
			      )
{

  TStopwatch timer;
  timer.Start();

  gSystem->Load("libTree.so");
  gSystem->Load("libGeom.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libPhysics.so");
 
  //----------- Loading the required libraries ---------//

  gSystem->Load("libSTEERBase.so");
  gSystem->Load("libESD.so");
  gSystem->Load("libAOD.so");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libHLTbase.so");
 
  gSystem->AddIncludePath("-I$ALICE_ROOT/HLT/BASE -I$ALICE_ROOT/PWGPP/TPC -I. -I$ALICE_ROOT/STEER -I$ALICE_ROOT/ANALYSIS");
  
  gSystem->Load("libTPCcalib.so");
  gSystem->Load("libTRDbase.so");
  gSystem->Load("libTRDrec.so");
  gSystem->Load("libITSbase.so");
  gSystem->Load("libITSrec.so");
  gSystem->Load("libTENDER.so");
  gSystem->Load("libPWGPP.so");
 
  gROOT->ProcessLine(".include $ALICE_ROOT/include");
  //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
    
  Bool_t bPHOS = kFALSE, bGLOBAL = kFALSE, bEMCAL = kFALSE, bPWGPP = kFALSE, bD0 = kFALSE, bCB = kFALSE;
 
  TString allArgs = detectorTask;
  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.CompareTo("phos", TString::kIgnoreCase)==0){
	bPHOS = kTRUE;
	continue;
      }         
      else if(argument.CompareTo("emcal", TString::kIgnoreCase)==0){
	bEMCAL = kTRUE;
	continue;
      }         
      if(argument.CompareTo("global", TString::kIgnoreCase)==0){
	bGLOBAL = kTRUE;
	continue;
      }      
      if(argument.CompareTo("pwgpp", TString::kIgnoreCase)==0){
	bPWGPP = kTRUE;
	continue;
      }
      if(argument.CompareTo("D0", TString::kIgnoreCase)==0){
	bD0 = kTRUE;
	continue;
      }
      if(argument.CompareTo("cb", TString::kIgnoreCase)==0){
	bCB = kTRUE;
	continue;
      } 
      else break;
    }
  }
      
  //-------------- Compile the analysis tasks ---------- //
  
  if(bPHOS){
    //gSystem->Load("libHLTbase");
    gSystem->Load("libAliHLTUtil");
    gSystem->Load("libAliHLTGlobal");
    TString strTask1("AliAnalysisTaskHLTCalo.cxx+");
    TString strTask2("AliAnalysisTaskHLTPHOS.cxx+");    
    gROOT->LoadMacro(taskFolder+strTask1); 
    gROOT->LoadMacro(taskFolder+strTask2); 
    cout << "\n========= You are loading the following tasks --> "<< (taskFolder+strTask1).Chop()  << " and " <<  (taskFolder+strTask2).Chop() << endl;
  }
  
  if(bEMCAL){
    //gSystem->Load("libHLTbase");
    gSystem->Load("libAliHLTUtil");
    gSystem->Load("libAliHLTGlobal");
    TString strTask1("AliAnalysisTaskHLTCalo.cxx+");
    TString strTask2("AliAnalysisTaskHLTEMCAL.cxx+");
    gROOT->LoadMacro(taskFolder+strTask1); 
    gROOT->LoadMacro(taskFolder+strTask2); 
    cout << "\n========= You are loading the following tasks --> "<< (taskFolder+strTask1).Chop()  << " and " <<  (taskFolder+strTask2).Chop() << endl;
  }  
  
  if(bGLOBAL){
     TString strTask("AliAnalysisTaskHLT.cxx+");
     gROOT->LoadMacro(taskFolder+strTask);
     cout << "\n========= You are loading the following task --> "<< (taskFolder+strTask).Chop()  << endl;
  }
  if(bD0){
     TString strTask("AliAnalysisTaskD0Trigger.cxx+");
     gROOT->LoadMacro(taskFolder+strTask); 
     cout << "\n========= You are loading the following task --> "<< (taskFolder+strTask).Chop()  << endl;
  }
 
  if(bCB){
    TString strTask("AliAnalysisTaskHLTCentralBarrel.cxx+");
    gROOT->LoadMacro(taskFolder+strTask);
    cout << "\n========= You are loading the following task --> "<< (taskFolder+strTask).Chop()  << endl;
  }
  
  if(bPWGPP) gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/macros/AddTaskPerformance.C");
   
  if(file.BeginsWith("alien://")) TGrid::Connect("alien://");
    
  if(file.Contains("AliESDs.root")){
    TChain *chain = new TChain("esdTree"); 
    chain->Add(file);
  }
  
  // Constructs chain from filenames in *.txt
  // in the form $DIR/AliESDs.root  
  else if(file.Contains(".txt")){
    gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
    chain = CreateESDChain(file.Data(),200); 
    // chain can contain up to 200 files, value can be modified to 
    // include a subset of what the *txt file contains
    
    TObjArray *fileElements = chain->GetListOfFiles();
    TIter next(fileElements);
    TChainElement *chEl = 0;
    bool alienList = kFALSE;
    while(( chEl = (TChainElement*)next() )){
    // loop over the list of files in the *txt and as soon as one is found that starts with alien://, 
    // the boolean alienList turns to kTRUE, which allows the TGrid::Connect call outside the loop.
            TString tmp = chEl->GetTitle();	    
            if(tmp.BeginsWith("alien://")) alienList = kTRUE;           
    }
    if(alienList==kTRUE) TGrid::Connect("alien://");
  }
  
  else if(!file){
    printf("File %s does not exist or is corrupted.\n",file.Data());
    return;  
  }

  if(!chain){
    Printf("Chain is empty.\n");
    return;
  }
   
  //-------- Make the analysis manager ---------------//
 
  AliAnalysisManager *mgr  = new AliAnalysisManager("TestManager");
  AliESDInputHandler *esdH = new AliESDInputHandler;

  //For the PWGPP task, setting HLT is handled inside AliPerformanceTask.C
  if(!bPWGPP)  esdH->SetReadHLT();
  esdH->SetReadFriends(kFALSE);
  mgr->SetInputEventHandler(esdH);  
  mgr->SetNSysInfo(1000);

  //AliPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(kFALSE,kTRUE);
 
  //-------------- define the tasks ------------//
  
  if(bPHOS){
    AliAnalysisTaskHLTPHOS *taskPHOS = new AliAnalysisTaskHLTPHOS("offhlt_comparison_PHOS");
    taskPHOS->SetUseHLTTriggerDecision(fUseHLTTrigger);
    if(fUseHLTTrigger==kTRUE) printf("\n\nOnly HLT triggered events will be used to fill the distributions for task %s.\n\n", taskPHOS->GetName());
    mgr->AddTask(taskPHOS);
    if(fUseHLTTrigger==kFALSE)
       AliAnalysisDataContainer *coutputPHOS =  mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root");  
    else 
       AliAnalysisDataContainer *coutputPHOS =  mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison_triggered.root");      
    mgr->ConnectInput(taskPHOS,0,mgr->GetCommonInputContainer());
    mgr->ConnectOutput(taskPHOS,1,coutputPHOS);
  }

  if(bEMCAL){
    AliAnalysisTaskHLTEMCAL *taskEMCAL = new AliAnalysisTaskHLTEMCAL("offhlt_comparison_EMCAL");
    taskEMCAL->SetUseHLTTriggerDecision(fUseHLTTrigger);
    if(fUseHLTTrigger==kTRUE) printf("\n\nOnly HLT triggered events will be used to fill the distributions for task %s.\n\n", taskEMCAL->GetName());
    mgr->AddTask(taskEMCAL);
    if(fUseHLTTrigger==kFALSE)
       AliAnalysisDataContainer *coutputEMCAL =  mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root");  
    else
      AliAnalysisDataContainer *coutputEMCAL =  mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison_triggered.root");      
    mgr->ConnectInput(taskEMCAL,0,mgr->GetCommonInputContainer());
    mgr->ConnectOutput(taskEMCAL,1,coutputEMCAL);
  }
  
  if(bGLOBAL){
    AliAnalysisTaskHLT *taskGLOBAL = new AliAnalysisTaskHLT("offhlt_comparison_GLOBAL",0.9,0.3,7,7,20); // eta, pt, DCAr, DCAz, vertexZ
    taskGLOBAL->SetUseHLTTriggerDecision(fUseHLTTrigger);
    taskGLOBAL->SetBeamType(beamType);
    mgr->AddTask(taskGLOBAL);
    if(beamType.Contains("Pb")){
       gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
       AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); 
       taskCentrality->SetPass(1);
    }	     
    if(fUseHLTTrigger==kTRUE) printf("\n\nOnly HLT triggered events will be used to fill the distributions for task %s.\n\n", taskGLOBAL->GetName());
    //taskGLOBAL->SelectCollisionCandidates();
    if(fUseHLTTrigger==kFALSE)
      AliAnalysisDataContainer *coutputGLOBAL =  mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root");  
    else 
      AliAnalysisDataContainer *coutputGLOBAL =  mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer,"HLT-OFFLINE-GLOBAL-comparison_triggered.root");  
    mgr->ConnectInput(taskGLOBAL,0,mgr->GetCommonInputContainer());
    mgr->ConnectOutput(taskGLOBAL,1,coutputGLOBAL);
  }

  if(bPWGPP){
    Bool_t hasMC=kFALSE;  
    // -- Add Task for HLT and Offline
    AliPerformanceTask *HLTtpcQA = AddTaskPerformance(hasMC,kFALSE,kTRUE);
    AliPerformanceTask *tpcQA = AddTaskPerformance(hasMC,kFALSE); 
    if(!HLTtpcQA || !tpcQA) {
      Error("RunPerformanceTrain","AliPerformanceTask not created!");
      return;
    }
  }
  if(bD0){
    float cuts[7]={0.5,0.04,0.7,0.8,0.05,-0.00025,0.7};
    AliAnalysisTaskD0Trigger *taskD0 = new AliAnalysisTaskD0Trigger("offhlt_comparison_D0",cuts);
    mgr->AddTask(taskD0);
    AliAnalysisDataContainer *coutputD0 =  mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root");  
    mgr->ConnectInput(taskD0,0,mgr->GetCommonInputContainer());
    mgr->ConnectOutput(taskD0,1,coutputD0);
  }  
  
  if(bCB){
     AliAnalysisTaskHLTCentralBarrel *taskCB = new AliAnalysisTaskHLTCentralBarrel("offhlt_comparison_CB"); 
     mgr->AddTask(taskCB); 
     taskCB->SetBeamType(beamType);
     if(beamType.Contains("Pb")){
        gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
        AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); 
	taskCentrality->SetPass(1);
     }        
     taskCB->SetOptions(options);
     AliAnalysisDataContainer *coutputCB =  mgr->CreateContainer("esd_thnsparse", TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-CentralBarrel-comparison.root");  
     mgr->ConnectInput(taskCB,0,mgr->GetCommonInputContainer());
     mgr->ConnectOutput(taskCB,1,coutputCB);
  }
  
  if (!mgr->InitAnalysis()) return;
  mgr->PrintStatus();
  mgr->StartAnalysis("local",chain, nEvents);

  timer.Stop();
  timer.Print();
}

void compare_HLT_offline_local(){
  cout << "\n The following tasks and respective plotting macros are available and maintained in $ALICE_ROOT/HLT/QA/tasks/ :\n"<< endl;
  cout << " AliAnalysisTaskHLTCentralBarrel (macros/drawTHnSparse.C)\n AliAnalysisTaskHLT.cxx (macros/drawGlobalESDHistograms.C)" << endl;
  cout << " AliAnalysisTaskHLTCalo (EMCAL+PHOS) (macros/drawCaloHistograms.C) \n AliAnalysisTaskD0Trigger (no plotting macro committed)\n" << endl;
  
  cout << " Usage examples:" << endl;
  cout << "    compare-HLT-offline-local.C'(file, taskOption, taskFolder, beamType, options, fUseHLTTrigger, nEvents)' 2>&1 | tee log" << endl;
  cout << "    compare-HLT-offline-local.C'(\"AliESDs.root\",\"global\")' 2>&1 | tee log" << endl;
  cout << "    compare-HLT-offline-local.C'(\"AliESDs.root\",\"global\",\"./\", \"p-p\", \"event-off event-hlt track-off track-hlt\", kFALSE, nEvents)' 2>&1 | tee log" << endl;
  cout << "    compare-HLT-offline-local.C'(\"AliESDs.root\",\"global phos cb D0\", \"./\", \"Pb-Pb\", \"event-hlt\", kTRUE, nEvents)' 2>&1 | tee log" << endl;
  cout << "    compare-HLT-offline-local.C'(\"alien:///alice/data/2010/LHC10b/000115322/ESDs/pass1/10000115322040.20/AliESDs.root\",\"global\")' 2>&1 | tee log" << endl;
  cout << " " << endl;
}
 compare-HLT-offline-local.C:1
 compare-HLT-offline-local.C:2
 compare-HLT-offline-local.C:3
 compare-HLT-offline-local.C:4
 compare-HLT-offline-local.C:5
 compare-HLT-offline-local.C:6
 compare-HLT-offline-local.C:7
 compare-HLT-offline-local.C:8
 compare-HLT-offline-local.C:9
 compare-HLT-offline-local.C:10
 compare-HLT-offline-local.C:11
 compare-HLT-offline-local.C:12
 compare-HLT-offline-local.C:13
 compare-HLT-offline-local.C:14
 compare-HLT-offline-local.C:15
 compare-HLT-offline-local.C:16
 compare-HLT-offline-local.C:17
 compare-HLT-offline-local.C:18
 compare-HLT-offline-local.C:19
 compare-HLT-offline-local.C:20
 compare-HLT-offline-local.C:21
 compare-HLT-offline-local.C:22
 compare-HLT-offline-local.C:23
 compare-HLT-offline-local.C:24
 compare-HLT-offline-local.C:25
 compare-HLT-offline-local.C:26
 compare-HLT-offline-local.C:27
 compare-HLT-offline-local.C:28
 compare-HLT-offline-local.C:29
 compare-HLT-offline-local.C:30
 compare-HLT-offline-local.C:31
 compare-HLT-offline-local.C:32
 compare-HLT-offline-local.C:33
 compare-HLT-offline-local.C:34
 compare-HLT-offline-local.C:35
 compare-HLT-offline-local.C:36
 compare-HLT-offline-local.C:37
 compare-HLT-offline-local.C:38
 compare-HLT-offline-local.C:39
 compare-HLT-offline-local.C:40
 compare-HLT-offline-local.C:41
 compare-HLT-offline-local.C:42
 compare-HLT-offline-local.C:43
 compare-HLT-offline-local.C:44
 compare-HLT-offline-local.C:45
 compare-HLT-offline-local.C:46
 compare-HLT-offline-local.C:47
 compare-HLT-offline-local.C:48
 compare-HLT-offline-local.C:49
 compare-HLT-offline-local.C:50
 compare-HLT-offline-local.C:51
 compare-HLT-offline-local.C:52
 compare-HLT-offline-local.C:53
 compare-HLT-offline-local.C:54
 compare-HLT-offline-local.C:55
 compare-HLT-offline-local.C:56
 compare-HLT-offline-local.C:57
 compare-HLT-offline-local.C:58
 compare-HLT-offline-local.C:59
 compare-HLT-offline-local.C:60
 compare-HLT-offline-local.C:61
 compare-HLT-offline-local.C:62
 compare-HLT-offline-local.C:63
 compare-HLT-offline-local.C:64
 compare-HLT-offline-local.C:65
 compare-HLT-offline-local.C:66
 compare-HLT-offline-local.C:67
 compare-HLT-offline-local.C:68
 compare-HLT-offline-local.C:69
 compare-HLT-offline-local.C:70
 compare-HLT-offline-local.C:71
 compare-HLT-offline-local.C:72
 compare-HLT-offline-local.C:73
 compare-HLT-offline-local.C:74
 compare-HLT-offline-local.C:75
 compare-HLT-offline-local.C:76
 compare-HLT-offline-local.C:77
 compare-HLT-offline-local.C:78
 compare-HLT-offline-local.C:79
 compare-HLT-offline-local.C:80
 compare-HLT-offline-local.C:81
 compare-HLT-offline-local.C:82
 compare-HLT-offline-local.C:83
 compare-HLT-offline-local.C:84
 compare-HLT-offline-local.C:85
 compare-HLT-offline-local.C:86
 compare-HLT-offline-local.C:87
 compare-HLT-offline-local.C:88
 compare-HLT-offline-local.C:89
 compare-HLT-offline-local.C:90
 compare-HLT-offline-local.C:91
 compare-HLT-offline-local.C:92
 compare-HLT-offline-local.C:93
 compare-HLT-offline-local.C:94
 compare-HLT-offline-local.C:95
 compare-HLT-offline-local.C:96
 compare-HLT-offline-local.C:97
 compare-HLT-offline-local.C:98
 compare-HLT-offline-local.C:99
 compare-HLT-offline-local.C:100
 compare-HLT-offline-local.C:101
 compare-HLT-offline-local.C:102
 compare-HLT-offline-local.C:103
 compare-HLT-offline-local.C:104
 compare-HLT-offline-local.C:105
 compare-HLT-offline-local.C:106
 compare-HLT-offline-local.C:107
 compare-HLT-offline-local.C:108
 compare-HLT-offline-local.C:109
 compare-HLT-offline-local.C:110
 compare-HLT-offline-local.C:111
 compare-HLT-offline-local.C:112
 compare-HLT-offline-local.C:113
 compare-HLT-offline-local.C:114
 compare-HLT-offline-local.C:115
 compare-HLT-offline-local.C:116
 compare-HLT-offline-local.C:117
 compare-HLT-offline-local.C:118
 compare-HLT-offline-local.C:119
 compare-HLT-offline-local.C:120
 compare-HLT-offline-local.C:121
 compare-HLT-offline-local.C:122
 compare-HLT-offline-local.C:123
 compare-HLT-offline-local.C:124
 compare-HLT-offline-local.C:125
 compare-HLT-offline-local.C:126
 compare-HLT-offline-local.C:127
 compare-HLT-offline-local.C:128
 compare-HLT-offline-local.C:129
 compare-HLT-offline-local.C:130
 compare-HLT-offline-local.C:131
 compare-HLT-offline-local.C:132
 compare-HLT-offline-local.C:133
 compare-HLT-offline-local.C:134
 compare-HLT-offline-local.C:135
 compare-HLT-offline-local.C:136
 compare-HLT-offline-local.C:137
 compare-HLT-offline-local.C:138
 compare-HLT-offline-local.C:139
 compare-HLT-offline-local.C:140
 compare-HLT-offline-local.C:141
 compare-HLT-offline-local.C:142
 compare-HLT-offline-local.C:143
 compare-HLT-offline-local.C:144
 compare-HLT-offline-local.C:145
 compare-HLT-offline-local.C:146
 compare-HLT-offline-local.C:147
 compare-HLT-offline-local.C:148
 compare-HLT-offline-local.C:149
 compare-HLT-offline-local.C:150
 compare-HLT-offline-local.C:151
 compare-HLT-offline-local.C:152
 compare-HLT-offline-local.C:153
 compare-HLT-offline-local.C:154
 compare-HLT-offline-local.C:155
 compare-HLT-offline-local.C:156
 compare-HLT-offline-local.C:157
 compare-HLT-offline-local.C:158
 compare-HLT-offline-local.C:159
 compare-HLT-offline-local.C:160
 compare-HLT-offline-local.C:161
 compare-HLT-offline-local.C:162
 compare-HLT-offline-local.C:163
 compare-HLT-offline-local.C:164
 compare-HLT-offline-local.C:165
 compare-HLT-offline-local.C:166
 compare-HLT-offline-local.C:167
 compare-HLT-offline-local.C:168
 compare-HLT-offline-local.C:169
 compare-HLT-offline-local.C:170
 compare-HLT-offline-local.C:171
 compare-HLT-offline-local.C:172
 compare-HLT-offline-local.C:173
 compare-HLT-offline-local.C:174
 compare-HLT-offline-local.C:175
 compare-HLT-offline-local.C:176
 compare-HLT-offline-local.C:177
 compare-HLT-offline-local.C:178
 compare-HLT-offline-local.C:179
 compare-HLT-offline-local.C:180
 compare-HLT-offline-local.C:181
 compare-HLT-offline-local.C:182
 compare-HLT-offline-local.C:183
 compare-HLT-offline-local.C:184
 compare-HLT-offline-local.C:185
 compare-HLT-offline-local.C:186
 compare-HLT-offline-local.C:187
 compare-HLT-offline-local.C:188
 compare-HLT-offline-local.C:189
 compare-HLT-offline-local.C:190
 compare-HLT-offline-local.C:191
 compare-HLT-offline-local.C:192
 compare-HLT-offline-local.C:193
 compare-HLT-offline-local.C:194
 compare-HLT-offline-local.C:195
 compare-HLT-offline-local.C:196
 compare-HLT-offline-local.C:197
 compare-HLT-offline-local.C:198
 compare-HLT-offline-local.C:199
 compare-HLT-offline-local.C:200
 compare-HLT-offline-local.C:201
 compare-HLT-offline-local.C:202
 compare-HLT-offline-local.C:203
 compare-HLT-offline-local.C:204
 compare-HLT-offline-local.C:205
 compare-HLT-offline-local.C:206
 compare-HLT-offline-local.C:207
 compare-HLT-offline-local.C:208
 compare-HLT-offline-local.C:209
 compare-HLT-offline-local.C:210
 compare-HLT-offline-local.C:211
 compare-HLT-offline-local.C:212
 compare-HLT-offline-local.C:213
 compare-HLT-offline-local.C:214
 compare-HLT-offline-local.C:215
 compare-HLT-offline-local.C:216
 compare-HLT-offline-local.C:217
 compare-HLT-offline-local.C:218
 compare-HLT-offline-local.C:219
 compare-HLT-offline-local.C:220
 compare-HLT-offline-local.C:221
 compare-HLT-offline-local.C:222
 compare-HLT-offline-local.C:223
 compare-HLT-offline-local.C:224
 compare-HLT-offline-local.C:225
 compare-HLT-offline-local.C:226
 compare-HLT-offline-local.C:227
 compare-HLT-offline-local.C:228
 compare-HLT-offline-local.C:229
 compare-HLT-offline-local.C:230
 compare-HLT-offline-local.C:231
 compare-HLT-offline-local.C:232
 compare-HLT-offline-local.C:233
 compare-HLT-offline-local.C:234
 compare-HLT-offline-local.C:235
 compare-HLT-offline-local.C:236
 compare-HLT-offline-local.C:237
 compare-HLT-offline-local.C:238
 compare-HLT-offline-local.C:239
 compare-HLT-offline-local.C:240
 compare-HLT-offline-local.C:241
 compare-HLT-offline-local.C:242
 compare-HLT-offline-local.C:243
 compare-HLT-offline-local.C:244
 compare-HLT-offline-local.C:245
 compare-HLT-offline-local.C:246
 compare-HLT-offline-local.C:247
 compare-HLT-offline-local.C:248
 compare-HLT-offline-local.C:249
 compare-HLT-offline-local.C:250
 compare-HLT-offline-local.C:251
 compare-HLT-offline-local.C:252
 compare-HLT-offline-local.C:253
 compare-HLT-offline-local.C:254
 compare-HLT-offline-local.C:255
 compare-HLT-offline-local.C:256
 compare-HLT-offline-local.C:257
 compare-HLT-offline-local.C:258
 compare-HLT-offline-local.C:259
 compare-HLT-offline-local.C:260
 compare-HLT-offline-local.C:261
 compare-HLT-offline-local.C:262
 compare-HLT-offline-local.C:263
 compare-HLT-offline-local.C:264
 compare-HLT-offline-local.C:265
 compare-HLT-offline-local.C:266
 compare-HLT-offline-local.C:267
 compare-HLT-offline-local.C:268
 compare-HLT-offline-local.C:269
 compare-HLT-offline-local.C:270
 compare-HLT-offline-local.C:271
 compare-HLT-offline-local.C:272
 compare-HLT-offline-local.C:273
 compare-HLT-offline-local.C:274
 compare-HLT-offline-local.C:275
 compare-HLT-offline-local.C:276
 compare-HLT-offline-local.C:277
 compare-HLT-offline-local.C:278
 compare-HLT-offline-local.C:279
 compare-HLT-offline-local.C:280
 compare-HLT-offline-local.C:281
 compare-HLT-offline-local.C:282
 compare-HLT-offline-local.C:283
 compare-HLT-offline-local.C:284
 compare-HLT-offline-local.C:285
 compare-HLT-offline-local.C:286
 compare-HLT-offline-local.C:287
 compare-HLT-offline-local.C:288
 compare-HLT-offline-local.C:289
 compare-HLT-offline-local.C:290
 compare-HLT-offline-local.C:291
 compare-HLT-offline-local.C:292
 compare-HLT-offline-local.C:293
 compare-HLT-offline-local.C:294
 compare-HLT-offline-local.C:295
 compare-HLT-offline-local.C:296
 compare-HLT-offline-local.C:297
 compare-HLT-offline-local.C:298
 compare-HLT-offline-local.C:299
 compare-HLT-offline-local.C:300
 compare-HLT-offline-local.C:301
 compare-HLT-offline-local.C:302
 compare-HLT-offline-local.C:303
 compare-HLT-offline-local.C:304
 compare-HLT-offline-local.C:305
 compare-HLT-offline-local.C:306
 compare-HLT-offline-local.C:307
 compare-HLT-offline-local.C:308
 compare-HLT-offline-local.C:309
 compare-HLT-offline-local.C:310
 compare-HLT-offline-local.C:311
 compare-HLT-offline-local.C:312
 compare-HLT-offline-local.C:313
 compare-HLT-offline-local.C:314
 compare-HLT-offline-local.C:315