ROOT logo
#include "Riostream.h"
void LoadLibraries();
void AddAnalysisTasks(); 
void QAmerge(const char *, Int_t);

Int_t iCollisionType = 0; // 0=pp, 1=PbPb
// Trigger mask.

UInt_t kTriggerInt = AliVEvent::kAnyINT;
UInt_t kTriggerMuonBarell = AliVEvent::kMUU7;
UInt_t kTriggerEMC   = AliVEvent::kEMC7 | AliVEvent::kEMCEJE | AliVEvent::kEMCEGA;
UInt_t kTriggerHM   = AliVEvent::kHighMult;
// Main trigger mask used:
UInt_t kTriggerMask = kTriggerInt;

Int_t runNumbers[5] = {158626};

Bool_t doCDBconnect   = 1;
Bool_t doEventStat    = 1;
Bool_t doCentrality   = 1;
Bool_t doQAsym        = 1;
Bool_t doVZERO        = 1;   // there is a 2nd file
Bool_t doVZEROPbPb    = 0; 
Bool_t doVertex       = 1;
Bool_t doSPD          = 1;   // needs RP   
Bool_t doTPC          = 1;
Bool_t doHLT          = 1;
Bool_t doSDD          = 1;   // needs RP
Bool_t doSSDdEdx      = 1;

Bool_t doTRD          = 1;
Bool_t doITS          = 1;
Bool_t doITSsaTracks  = 1; 
Bool_t doITSalign     = 1;  
Bool_t doCALO         = 1;
Bool_t doMUONTrig     = 1;
Bool_t doImpParRes    = 1;
Bool_t doMUON         = 1;
Bool_t doTOF          = 1;
Bool_t doHMPID        = 1;
Bool_t doT0           = 1;
Bool_t doZDC          = 1;
Bool_t doPIDResponse  = 1;
Bool_t doPIDqa        = 1; //new
Bool_t doFMD          = 1; // new
Bool_t doPHOS         = 1; // new
Bool_t doEMCAL        = 1;
Bool_t doFBFqa        = 1; // new - not ported yet to revision

               // Debug level
Int_t       debug_level        = 1;        // Debugging
Int_t       run_number = 0;

void QAtrain(Int_t run = 0, 
             const char *xmlfile   = "wn.xml",
             Int_t  stage          = 0) /*0 = QA train, 1...n - merging stage*/
{
  run_number = run;

  TGrid::Connect("alien://");
  if (!gGrid || !gGrid->IsConnected()) {
    ::Error("QAtrain", "No grid connection");
    return;
  }   
  // Set temporary merging directory to current one
  gSystem->Setenv("TMPDIR", gSystem->pwd());
  // Set temporary compilation directory to current one
  gSystem->SetBuildDir(gSystem->pwd(), kTRUE);
  // Load libraries
  LoadLibraries();
  printf("Include path: %s\n", gSystem->GetIncludePath());
  // Create manager
  AliAnalysisManager *mgr  = new AliAnalysisManager("PilotAnalysis", "Production train");
  mgr->SetRunFromPath(run_number);
  // Input handler
  AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
  esdHandler->SetReadFriends(kTRUE);
  esdHandler->SetActiveBranches("ESDfriend");
  mgr->SetInputEventHandler(esdHandler);
  mgr->SetDebugLevel(debug_level);
  
  // AnalysisTasks
  AddAnalysisTasks();
  if (stage>0) {
    QAmerge(xmlfile, stage);
    return;
  }   
  // Input chain
  TChain *chain = new TChain("esdTree");
  chain->Add("AliESDs.root");
  TStopwatch timer;
  timer.Start();
  if (mgr->InitAnalysis()) {                                                                                                              
    mgr->PrintStatus(); 
    mgr->SetSkipTerminate(kTRUE);
//    mgr->SetNSysInfo(1);
    mgr->StartAnalysis("local", chain);
  }
  timer.Print();
}

void LoadLibraries()
{
  gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TRD -I$ALICE_ROOT/PWGPP -I$ALICE_ROOT/PWGPP/TRD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libCORRFW");
  gSystem->Load("libTENDER");
  gSystem->Load("libPWGPP.so");
  gSystem->Load("libAliHLTTrigger.so");

  if (doEMCAL || doPHOS || doCALO) {
     gSystem->Load("libEMCALUtils");
     gSystem->Load("libPHOSUtils");
     gSystem->Load("libPWGCaloTrackCorrBase");
     gSystem->Load("libPWGGACaloTrackCorrelations");
     gSystem->Load("libPWGGACaloTasks");
     gSystem->Load("libPWGGAPHOSTasks");
     gSystem->Load("libPWGGAEMCALTasks");
  }  
  if(doMUON || doMUONTrig) {
     gSystem->Load("libPWGmuon");
     gSystem->Load("libPWGPPMUONlite");
     gSystem->Load("libPWGmuondep");
  }
  if (doFMD) {
     gSystem->Load("libPWGLFforward2");
  }      
}

void AddAnalysisTasks()
{
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  mgr->SetCommonFileName("QAresults.root");
  // Statistics task
  mgr->AddStatisticsTask(kTriggerMask);
  //
  // CDB connection
  //
  if (doCDBconnect) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskCDBconnect.C");
    AliTaskCDBconnect *taskCDB = AddTaskCDBconnect();
    if (!taskCDB) return;
    AliCDBManager *cdb = AliCDBManager::Instance();
    cdb->SetDefaultStorage("raw://");
    taskCDB->SetRunNumber(run_number);
  }    
  
  //
  // Event Statistics (Jan Fiete)
  //
  if (doEventStat) {
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
      AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kFALSE /*MC*/);
  }
  
  //
  // Centrality (A. Toia)
  //
  if (doCentrality) {
     if (!iCollisionType) {
        printf("Disabling centrality task for p-p\n");
        doCentrality = kFALSE;
     } else {           
        gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
        AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
     }   
  }   
  
  // Vertexing (A. Dainese)
  // 
  if (doVertex) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskVertexESD.C");
    AliAnalysisTaskVertexESD* taskvertexesd =  AddTaskVertexESD(kFALSE, kTriggerMask);
    taskvertexesd->SelectCollisionCandidates(kTriggerMask);
  }  

  // TPC QA (E. Sicking)
  //
  if (doQAsym) {
  // offline trigger in AddTask
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskQAsym.C");
    AliAnalysisTaskSE * taskqasim = AddTaskQAsym(0, kTriggerMask, kTriggerHM, kTriggerEMC, kTriggerMuonBarell);
  }  
  //
  // VZERO QA  (C. Cheshkov)
  //
  if (doVZERO) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQA.C");
    AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
//  taskv0qa->SelectCollisionCandidates();
  }
  if (doVZEROPbPb && iCollisionType==1) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/VZERO/AddTaskVZEROPbPb.C");
    AliAnaVZEROPbPb* taskV0PbPb = (AliAnaVZEROPbPb*)AddTaskVZEROPbPb(0);
    taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU-,CPBI2-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVHN_R2-,CVHNWU_R2-,CVLNWU-,CVLN-,CVLN_R1-,CVLN_B2-,CVLNWU_R1-,CVLNWU_B2-,CSEMI_R1-,CSEMIWU_R1-,CCENT_R2-,CCENTWU_R2-");
  }
  //
  // TPC (Jacek Otwinowski & Michael Knichel)
  //
  //
  // Optionally MC information can be used by setting the 1st argument to true
  // Optionally friends information can be switched off by setting the 2st argument 
  // to false
  // Optionally highMult axis can be used by setting the 3st argument to true (for PbPb)
  if (doTPC) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
    AliPerformanceTask *tpcQA = 0;
    if (iCollisionType) {
       // High multiplicity Pb-Pb
       tpcQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kTRUE);
    } else {
      // Low multiplicity (pp)
       tpcQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kFALSE);
    }
    tpcQA->SelectCollisionCandidates(kTriggerMask);
  }  

  // HLT (Alberica Toia)
  if (doHLT) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
    AliPerformanceTask *hltQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kFALSE,0,kTRUE);
    hltQA->SelectCollisionCandidates(kTriggerMask);
  }  
  //
  // SPD (A. Mastroserio)
  //
  if (doSPD) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskSPDQA.C");
    AliAnalysisTaskSPD* taskspdqa = (AliAnalysisTaskSPD*)AddTaskSPDQA();
    // Request from Annalisa
    if (iCollisionType) taskspdqa->SetHeavyIonMode();
    taskspdqa->SelectCollisionCandidates(kTriggerMask);
    taskspdqa->SetOCDBInfo(run_number, "raw://");
  }  
  //
  // SDD (F. Prino)
  //
  if (doSDD) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddSDDPoints.C");
    AliAnalysisTaskSE* tasksdd = AddSDDPoints();
    tasksdd->SelectCollisionCandidates(kTriggerMask);
  }
  //
  // SSD dEdx (Marek Chojnacki)
  //
  if (doSSDdEdx) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskdEdxSSDQA.C");
    AliAnalysisTaskSE* taskssddedx = AddTaskdEdxSSDQA();
    taskssddedx->SelectCollisionCandidates(kTriggerMask);
  }

  //
  // ITS
  //
  if (doITS) {
  // hardcoded non-zero trigger mask
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceITS.C");
      AliAnalysisTaskITSTrackingCheck *itsQA = 0;
      AliAnalysisTaskITSTrackingCheck *itsQACent0010 = 0;
      AliAnalysisTaskITSTrackingCheck *itsQACent3050 = 0;
      AliAnalysisTaskITSTrackingCheck *itsQACent6080 = 0;
      if(iCollisionType==0) {
        itsQA = AddTaskPerformanceITS(kFALSE);
      } else {
        itsQA = AddTaskPerformanceITS(kFALSE);
        itsQACent0010 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,3500,10000);
        itsQACent3050 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,590,1570);
        itsQACent6080 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,70,310);
      }
  }
  //
  // ITS saTracks, align (F.Prino)
  //
  if (doITSsaTracks) {
  // offline trigger in AddTask
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSsaTracks.C");
     AliAnalysisTaskITSsaTracks *itssaTracks = AddTaskITSsaTracks(kFALSE,kFALSE);
     itssaTracks->SelectCollisionCandidates(kTriggerMask);
  }   
  if (doITSalign) {
  // no offline trigger selection
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSAlign.C");
     AliAnalysisTaskITSAlignQA *itsAlign = AddTaskITSAlign(0,2011);
  }   
  //
  // TRD (Alex Bercuci, M. Fasel) 
  //
  if(doTRD) {
  // no offline trigger selection
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTrainPerformanceTRD.C");
      // steer individual TRD tasks
      Bool_t 
      doCheckESD(kTRUE),  // AliTRDcheckESD
      doCheckDET(kTRUE),  // AliTRDcheckDET
      doEffic(kTRUE),     // AliTRDefficiency
      doResolution(kTRUE),// AliTRDresolution
      doCheckPID(kTRUE),  // AliTRDcheckPID
      doV0Monitor(kFALSE);// AliTRDv0Monitor
      AddTrainPerformanceTRD(Translate(doCheckESD, doCheckDET, doEffic, doResolution, doCheckPID, doV0Monitor));
  }

  //
  // ZDC (Chiara Oppedisano) 
  //
  if(doZDC) {
  // hardcoded kMB trigger mask
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/ZDC/AddTaskZDCQA.C");
     AliAnalysisTaskSE *taskZDC = AddTaskZDCQA();
     taskZDC->SelectCollisionCandidates(kTriggerMask);
  }   
  //
  // Calorimetry (Gustavo Conesa)
  //

  if(doCALO) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
      AliAnalysisTaskCaloTrackCorrelation *taskCaloQA = AddTaskCalorimeterQA("ESD", 2011, kFALSE, kFALSE);
      taskCaloQA->SetDebugLevel(0);
      // offline mask set in AddTask to kMB
      taskCaloQA->SelectCollisionCandidates(kTriggerMask);
      // Add a new calo task with EMC1 trigger only
      taskCaloQA = AddTaskCalorimeterQA("ESD", 2011, kFALSE, kFALSE, "", "EMC7");
      taskCaloQA->SetDebugLevel(0);
      taskCaloQA->SelectCollisionCandidates(kTriggerEMC);
  }

  //
  // Muon Trigger
  //
  
  if(doMUONTrig) {
  // no offline trigger selection
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskMTRchamberEfficiency.C");
      AliAnalysisTaskTrigChEff *taskMuonTrig = AddTaskMTRchamberEfficiency();
  }

  //
  // Impact parameter resolution (xianbao.yuan@pd.infn.it, andrea.dainese@pd.infn.it)
  //
  if (doImpParRes) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskImpParRes.C");
    AliAnalysisTaskSE* taskimpparres=0;
    if(iCollisionType==0) {
       taskimpparres= AddTaskImpParRes();
    } else {
       taskimpparres= AddTaskImpParRes(kFALSE,-1,kFALSE,kFALSE);
    }
    taskimpparres->SelectCollisionCandidates(kTriggerMask);
  }  
  //
  // MUON QA (Philippe Pillot)
  //
  if (doMUON) {
  // trigger analysis internal
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskMuonQA.C");
    AliAnalysisTaskSE* taskmuonqa= AddTaskMuonQA();
  }  
  //
  // TOF (Francesca Bellini)
  //
  if (doTOF) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TOF/AddTaskTOFQA.C");
    AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA();
    tofQA->SelectCollisionCandidates(kTriggerMask);
  } 
   //
  // PIDResponse(JENS)
  //
  if (doPIDResponse) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); 
    AliAnalysisTaskPIDResponse *PIDResponse = AddTaskPIDResponse();
    PIDResponse->SelectCollisionCandidates(kTriggerMask);
  }  

  //
  // PIDqa(JENS)
  //
  if (doPIDqa) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
    AliAnalysisTaskPIDqa *PIDQA = AddTaskPIDqa();
    PIDQA->SelectCollisionCandidates(kTriggerMask);
  }  
 
  //
  // HMPID QA (Giacomo Volpe)
  //
  if (doHMPID) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/HMPID/AddTaskHmpidQA.C");
    AliAnalysisTaskSE* taskhmpidqa= AddTaskHmpidQA(kFALSE);
      // offline mask set in AddTask to kMB
    taskhmpidqa->SelectCollisionCandidates(kTriggerMask);
  }      
  
  
  // T0 QA (Alla Mayevskaya)
  if (doT0) {
  // no offline trigger selection
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/T0/AddTaskT0QA.C");
    AliT0AnalysisTaskQA* taskt0qa= AddTaskT0QA();
    taskt0qa->SelectCollisionCandidates(kTriggerMask);
  }      
  // FMD QA (Christian Holm Christiansen)
  if (doFMD) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/AddTaskForwardQA.C");
    // Parameters: usemc, usecentrality
    AliAnalysisTaskSE *forwardQA = (AliAnalysisTaskSE *)AddTaskForwardQA(kFALSE, kFALSE);
    // No offline trigger config. needed (see #84077)
  }
   //     
  // PHOS QA (Boris Polishchuk)
  //
  if (doPHOS) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/CaloCellQA/macros/AddTaskCaloCellsQA.C");
    AliAnalysisTaskCaloCellsQA *taskPHOSCellQA1 = AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_AnyInt"); 
    taskPHOSCellQA1->SelectCollisionCandidates(kTriggerMask);
    taskPHOSCellQA1->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
    AliAnalysisTaskCaloCellsQA *taskPHOSCellQA2 = AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_PHI7"); 
    taskPHOSCellQA2->SelectCollisionCandidates(AliVEvent::kPHI7);
    taskPHOSCellQA2->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
    // Pi0 QA fo PbPb
    if (iCollisionType) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/PHOS_PbPbQA/macros/AddTaskPHOSPbPb.C");
      AliAnalysisTaskPHOSPbPbQA* phosPbPb = AddTaskPHOSPbPbQA(0);
    }
  }    
  //
  // EMCAL QA (Gustavo Conesa)
  //
  if (doEMCAL) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/AddTaskEMCALTriggerQA.C");
     AliAnalysisTaskEMCALTriggerQA *emctrig = AddTaskEMCALTriggerQA();
  }   
  //     
  // FLOW and BF QA (C.Perez && A.Rodriguez)
  //
  if (doFBFqa) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskFBFqa.C");
    AliAnalysisTaskSE *qaFBFMB = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFmb",kFALSE);
    qaFBFMB->SelectCollisionCandidates(AliVEvent::kMB);
    AliAnalysisTaskSE *qaFBFSC = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFsc",kFALSE);
    qaFBFSC->SelectCollisionCandidates(AliVEvent::kSemiCentral);
    AliAnalysisTaskSE *qaFBFCE = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFce",kFALSE);
    qaFBFCE->SelectCollisionCandidates(AliVEvent::kCentral);
  }
}

void QAmerge(const char *dir, Int_t stage)
{
// Merging method
  TStopwatch timer;
  timer.Start();
  TString outputDir = dir;
  TString outputFiles = "QAresults.root,EventStat_temp.root,RecoQAresults.root";
  TString mergeExcludes = "";
  TObjArray *list = outputFiles.Tokenize(",");
  TIter *iter = new TIter(list);
  TObjString *str;
  TString outputFile;
  Bool_t merged = kTRUE;
  while((str=(TObjString*)iter->Next())) {
    outputFile = str->GetString();
    // Skip already merged outputs
    if (!gSystem->AccessPathName(outputFile)) {
       printf("Output file <%s> found. Not merging again.",outputFile.Data());
       continue;
    }
    if (mergeExcludes.Contains(outputFile.Data())) continue;
    merged = AliAnalysisAlien::MergeOutput(outputFile, outputDir, 10, stage);
    if (!merged && outputFile!="RecoQAresults.root") {
       printf("ERROR: Cannot merge %s\n", outputFile.Data());
       return;
    }
  }
  // read the analysis manager from file
  if (!outputDir.Contains("Stage")) {
    ofstream out;
    out.open("outputs_valid", ios::out);
    out.close();    
    return;
  }
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  mgr->SetRunFromPath(mgr->GetRunFromAlienPath(dir));
  mgr->SetSkipTerminate(kFALSE);
  if (!mgr->InitAnalysis()) return;
  mgr->PrintStatus();
  AliLog::SetGlobalLogLevel(AliLog::kError);
  TTree *tree = NULL;
  mgr->StartAnalysis("gridterminate", tree);
  ofstream out;
  out.open("outputs_valid", ios::out);
  out.close();
  timer.Print();
}
 QAtrain.C:1
 QAtrain.C:2
 QAtrain.C:3
 QAtrain.C:4
 QAtrain.C:5
 QAtrain.C:6
 QAtrain.C:7
 QAtrain.C:8
 QAtrain.C:9
 QAtrain.C:10
 QAtrain.C:11
 QAtrain.C:12
 QAtrain.C:13
 QAtrain.C:14
 QAtrain.C:15
 QAtrain.C:16
 QAtrain.C:17
 QAtrain.C:18
 QAtrain.C:19
 QAtrain.C:20
 QAtrain.C:21
 QAtrain.C:22
 QAtrain.C:23
 QAtrain.C:24
 QAtrain.C:25
 QAtrain.C:26
 QAtrain.C:27
 QAtrain.C:28
 QAtrain.C:29
 QAtrain.C:30
 QAtrain.C:31
 QAtrain.C:32
 QAtrain.C:33
 QAtrain.C:34
 QAtrain.C:35
 QAtrain.C:36
 QAtrain.C:37
 QAtrain.C:38
 QAtrain.C:39
 QAtrain.C:40
 QAtrain.C:41
 QAtrain.C:42
 QAtrain.C:43
 QAtrain.C:44
 QAtrain.C:45
 QAtrain.C:46
 QAtrain.C:47
 QAtrain.C:48
 QAtrain.C:49
 QAtrain.C:50
 QAtrain.C:51
 QAtrain.C:52
 QAtrain.C:53
 QAtrain.C:54
 QAtrain.C:55
 QAtrain.C:56
 QAtrain.C:57
 QAtrain.C:58
 QAtrain.C:59
 QAtrain.C:60
 QAtrain.C:61
 QAtrain.C:62
 QAtrain.C:63
 QAtrain.C:64
 QAtrain.C:65
 QAtrain.C:66
 QAtrain.C:67
 QAtrain.C:68
 QAtrain.C:69
 QAtrain.C:70
 QAtrain.C:71
 QAtrain.C:72
 QAtrain.C:73
 QAtrain.C:74
 QAtrain.C:75
 QAtrain.C:76
 QAtrain.C:77
 QAtrain.C:78
 QAtrain.C:79
 QAtrain.C:80
 QAtrain.C:81
 QAtrain.C:82
 QAtrain.C:83
 QAtrain.C:84
 QAtrain.C:85
 QAtrain.C:86
 QAtrain.C:87
 QAtrain.C:88
 QAtrain.C:89
 QAtrain.C:90
 QAtrain.C:91
 QAtrain.C:92
 QAtrain.C:93
 QAtrain.C:94
 QAtrain.C:95
 QAtrain.C:96
 QAtrain.C:97
 QAtrain.C:98
 QAtrain.C:99
 QAtrain.C:100
 QAtrain.C:101
 QAtrain.C:102
 QAtrain.C:103
 QAtrain.C:104
 QAtrain.C:105
 QAtrain.C:106
 QAtrain.C:107
 QAtrain.C:108
 QAtrain.C:109
 QAtrain.C:110
 QAtrain.C:111
 QAtrain.C:112
 QAtrain.C:113
 QAtrain.C:114
 QAtrain.C:115
 QAtrain.C:116
 QAtrain.C:117
 QAtrain.C:118
 QAtrain.C:119
 QAtrain.C:120
 QAtrain.C:121
 QAtrain.C:122
 QAtrain.C:123
 QAtrain.C:124
 QAtrain.C:125
 QAtrain.C:126
 QAtrain.C:127
 QAtrain.C:128
 QAtrain.C:129
 QAtrain.C:130
 QAtrain.C:131
 QAtrain.C:132
 QAtrain.C:133
 QAtrain.C:134
 QAtrain.C:135
 QAtrain.C:136
 QAtrain.C:137
 QAtrain.C:138
 QAtrain.C:139
 QAtrain.C:140
 QAtrain.C:141
 QAtrain.C:142
 QAtrain.C:143
 QAtrain.C:144
 QAtrain.C:145
 QAtrain.C:146
 QAtrain.C:147
 QAtrain.C:148
 QAtrain.C:149
 QAtrain.C:150
 QAtrain.C:151
 QAtrain.C:152
 QAtrain.C:153
 QAtrain.C:154
 QAtrain.C:155
 QAtrain.C:156
 QAtrain.C:157
 QAtrain.C:158
 QAtrain.C:159
 QAtrain.C:160
 QAtrain.C:161
 QAtrain.C:162
 QAtrain.C:163
 QAtrain.C:164
 QAtrain.C:165
 QAtrain.C:166
 QAtrain.C:167
 QAtrain.C:168
 QAtrain.C:169
 QAtrain.C:170
 QAtrain.C:171
 QAtrain.C:172
 QAtrain.C:173
 QAtrain.C:174
 QAtrain.C:175
 QAtrain.C:176
 QAtrain.C:177
 QAtrain.C:178
 QAtrain.C:179
 QAtrain.C:180
 QAtrain.C:181
 QAtrain.C:182
 QAtrain.C:183
 QAtrain.C:184
 QAtrain.C:185
 QAtrain.C:186
 QAtrain.C:187
 QAtrain.C:188
 QAtrain.C:189
 QAtrain.C:190
 QAtrain.C:191
 QAtrain.C:192
 QAtrain.C:193
 QAtrain.C:194
 QAtrain.C:195
 QAtrain.C:196
 QAtrain.C:197
 QAtrain.C:198
 QAtrain.C:199
 QAtrain.C:200
 QAtrain.C:201
 QAtrain.C:202
 QAtrain.C:203
 QAtrain.C:204
 QAtrain.C:205
 QAtrain.C:206
 QAtrain.C:207
 QAtrain.C:208
 QAtrain.C:209
 QAtrain.C:210
 QAtrain.C:211
 QAtrain.C:212
 QAtrain.C:213
 QAtrain.C:214
 QAtrain.C:215
 QAtrain.C:216
 QAtrain.C:217
 QAtrain.C:218
 QAtrain.C:219
 QAtrain.C:220
 QAtrain.C:221
 QAtrain.C:222
 QAtrain.C:223
 QAtrain.C:224
 QAtrain.C:225
 QAtrain.C:226
 QAtrain.C:227
 QAtrain.C:228
 QAtrain.C:229
 QAtrain.C:230
 QAtrain.C:231
 QAtrain.C:232
 QAtrain.C:233
 QAtrain.C:234
 QAtrain.C:235
 QAtrain.C:236
 QAtrain.C:237
 QAtrain.C:238
 QAtrain.C:239
 QAtrain.C:240
 QAtrain.C:241
 QAtrain.C:242
 QAtrain.C:243
 QAtrain.C:244
 QAtrain.C:245
 QAtrain.C:246
 QAtrain.C:247
 QAtrain.C:248
 QAtrain.C:249
 QAtrain.C:250
 QAtrain.C:251
 QAtrain.C:252
 QAtrain.C:253
 QAtrain.C:254
 QAtrain.C:255
 QAtrain.C:256
 QAtrain.C:257
 QAtrain.C:258
 QAtrain.C:259
 QAtrain.C:260
 QAtrain.C:261
 QAtrain.C:262
 QAtrain.C:263
 QAtrain.C:264
 QAtrain.C:265
 QAtrain.C:266
 QAtrain.C:267
 QAtrain.C:268
 QAtrain.C:269
 QAtrain.C:270
 QAtrain.C:271
 QAtrain.C:272
 QAtrain.C:273
 QAtrain.C:274
 QAtrain.C:275
 QAtrain.C:276
 QAtrain.C:277
 QAtrain.C:278
 QAtrain.C:279
 QAtrain.C:280
 QAtrain.C:281
 QAtrain.C:282
 QAtrain.C:283
 QAtrain.C:284
 QAtrain.C:285
 QAtrain.C:286
 QAtrain.C:287
 QAtrain.C:288
 QAtrain.C:289
 QAtrain.C:290
 QAtrain.C:291
 QAtrain.C:292
 QAtrain.C:293
 QAtrain.C:294
 QAtrain.C:295
 QAtrain.C:296
 QAtrain.C:297
 QAtrain.C:298
 QAtrain.C:299
 QAtrain.C:300
 QAtrain.C:301
 QAtrain.C:302
 QAtrain.C:303
 QAtrain.C:304
 QAtrain.C:305
 QAtrain.C:306
 QAtrain.C:307
 QAtrain.C:308
 QAtrain.C:309
 QAtrain.C:310
 QAtrain.C:311
 QAtrain.C:312
 QAtrain.C:313
 QAtrain.C:314
 QAtrain.C:315
 QAtrain.C:316
 QAtrain.C:317
 QAtrain.C:318
 QAtrain.C:319
 QAtrain.C:320
 QAtrain.C:321
 QAtrain.C:322
 QAtrain.C:323
 QAtrain.C:324
 QAtrain.C:325
 QAtrain.C:326
 QAtrain.C:327
 QAtrain.C:328
 QAtrain.C:329
 QAtrain.C:330
 QAtrain.C:331
 QAtrain.C:332
 QAtrain.C:333
 QAtrain.C:334
 QAtrain.C:335
 QAtrain.C:336
 QAtrain.C:337
 QAtrain.C:338
 QAtrain.C:339
 QAtrain.C:340
 QAtrain.C:341
 QAtrain.C:342
 QAtrain.C:343
 QAtrain.C:344
 QAtrain.C:345
 QAtrain.C:346
 QAtrain.C:347
 QAtrain.C:348
 QAtrain.C:349
 QAtrain.C:350
 QAtrain.C:351
 QAtrain.C:352
 QAtrain.C:353
 QAtrain.C:354
 QAtrain.C:355
 QAtrain.C:356
 QAtrain.C:357
 QAtrain.C:358
 QAtrain.C:359
 QAtrain.C:360
 QAtrain.C:361
 QAtrain.C:362
 QAtrain.C:363
 QAtrain.C:364
 QAtrain.C:365
 QAtrain.C:366
 QAtrain.C:367
 QAtrain.C:368
 QAtrain.C:369
 QAtrain.C:370
 QAtrain.C:371
 QAtrain.C:372
 QAtrain.C:373
 QAtrain.C:374
 QAtrain.C:375
 QAtrain.C:376
 QAtrain.C:377
 QAtrain.C:378
 QAtrain.C:379
 QAtrain.C:380
 QAtrain.C:381
 QAtrain.C:382
 QAtrain.C:383
 QAtrain.C:384
 QAtrain.C:385
 QAtrain.C:386
 QAtrain.C:387
 QAtrain.C:388
 QAtrain.C:389
 QAtrain.C:390
 QAtrain.C:391
 QAtrain.C:392
 QAtrain.C:393
 QAtrain.C:394
 QAtrain.C:395
 QAtrain.C:396
 QAtrain.C:397
 QAtrain.C:398
 QAtrain.C:399
 QAtrain.C:400
 QAtrain.C:401
 QAtrain.C:402
 QAtrain.C:403
 QAtrain.C:404
 QAtrain.C:405
 QAtrain.C:406
 QAtrain.C:407
 QAtrain.C:408
 QAtrain.C:409
 QAtrain.C:410
 QAtrain.C:411
 QAtrain.C:412
 QAtrain.C:413
 QAtrain.C:414
 QAtrain.C:415
 QAtrain.C:416
 QAtrain.C:417
 QAtrain.C:418
 QAtrain.C:419
 QAtrain.C:420
 QAtrain.C:421
 QAtrain.C:422
 QAtrain.C:423
 QAtrain.C:424
 QAtrain.C:425
 QAtrain.C:426
 QAtrain.C:427
 QAtrain.C:428
 QAtrain.C:429
 QAtrain.C:430
 QAtrain.C:431
 QAtrain.C:432
 QAtrain.C:433
 QAtrain.C:434
 QAtrain.C:435
 QAtrain.C:436
 QAtrain.C:437
 QAtrain.C:438
 QAtrain.C:439
 QAtrain.C:440
 QAtrain.C:441
 QAtrain.C:442
 QAtrain.C:443
 QAtrain.C:444
 QAtrain.C:445
 QAtrain.C:446
 QAtrain.C:447
 QAtrain.C:448
 QAtrain.C:449
 QAtrain.C:450
 QAtrain.C:451
 QAtrain.C:452
 QAtrain.C:453
 QAtrain.C:454
 QAtrain.C:455
 QAtrain.C:456
 QAtrain.C:457
 QAtrain.C:458
 QAtrain.C:459
 QAtrain.C:460
 QAtrain.C:461
 QAtrain.C:462
 QAtrain.C:463
 QAtrain.C:464
 QAtrain.C:465
 QAtrain.C:466
 QAtrain.C:467
 QAtrain.C:468
 QAtrain.C:469
 QAtrain.C:470
 QAtrain.C:471
 QAtrain.C:472
 QAtrain.C:473
 QAtrain.C:474
 QAtrain.C:475
 QAtrain.C:476
 QAtrain.C:477
 QAtrain.C:478
 QAtrain.C:479
 QAtrain.C:480
 QAtrain.C:481
 QAtrain.C:482
 QAtrain.C:483
 QAtrain.C:484
 QAtrain.C:485
 QAtrain.C:486
 QAtrain.C:487
 QAtrain.C:488
 QAtrain.C:489
 QAtrain.C:490
 QAtrain.C:491
 QAtrain.C:492
 QAtrain.C:493
 QAtrain.C:494
 QAtrain.C:495