ROOT logo
void runITSTPCalignment( UInt_t saveinterval = 1000000 )
{
  TStopwatch timer;
  timer.Start();

  //runProof("/COMMON/COMMON/LHC09a4_run8100X#esdTree");
  runLocal("AliESDs.root");

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

//_________________________________________________//
void runLocal(const char* filenamestr = "AliESDs.root" ) {

  TString inputFilename(filenamestr);
  TString outputArrayFilename = "ITSTPCalignmentArray.root";
  TString outputHistFilename = "ITSTPCalignmentHist.root";

  //____________________________________________________//
  //_____________Setting up the par files_______________//
  //____________________________________________________//
  setupPar("STEERBase");
  gSystem->Load("libSTEERBase.so");
  setupPar("ESD");
  gSystem->Load("libVMC.so");
  gSystem->Load("libESD.so");
  setupPar("AOD");
  gSystem->Load("libAOD.so");
  setupPar("ANALYSIS");
  gSystem->Load("libANALYSIS.so");
  setupPar("ANALYSISalice");
  gSystem->Load("libANALYSISalice.so");
  //____________________________________________________//  

  //add input files from dirs
  TChain* chain = new TChain("esdTree");
  chain->SetBranchStatus("*ESDfriend*",0);
  TString workingDir = gSystem->pwd();
  void* dirhandle = gSystem->OpenDirectory(workingDir.Data());
  if (!dirhandle) return;
  const char* filenamestr;
  while ((filenamestr = gSystem->GetDirEntry(dirhandle)))
  {
    TString filename(filenamestr);
    if (filename=="." || filename=="..") continue;
    if (gSystem->cd(filename.Data()))
    {
      if (!gSystem->AccessPathName(inputFilename.Data()))//return value is here inverted!
      {
        TString inputESDfile(workingDir);
        inputESDfile += "/";
        inputESDfile += filename;
        inputESDfile += "/";
        inputESDfile += inputFilename;
        chain->Add(inputESDfile.Data());
        printf("found file: %s\n", inputESDfile.Data());
      }
      gSystem->cd(workingDir.Data());
    }
  }

  //____________________________________________//
  gROOT->LoadMacro("AliRelAlignerKalman.cxx++");
  gROOT->LoadMacro("AliRelAlignerKalmanArray.cxx++");
  gROOT->LoadMacro("AliAnalysisTaskITSTPCalignment.cxx++");

  // analysis manager
  AliAnalysisManager *mgr = new AliAnalysisManager("ITSTPCalignmentAnalysisManager");
  AliVEventHandler* esdH = new AliESDInputHandler;
  mgr->SetInputEventHandler(esdH);

  //create the task
  AliAnalysisTaskITSTPCalignment *taskITSTPCalignment = 
                        new AliAnalysisTaskITSTPCalignment("TaskITSTPCalignment");
  taskITSTPCalignment->SetDoQA(kTRUE);

  mgr->AddTask(taskITSTPCalignment);

  AliAnalysisDataContainer* cinput0 = mgr->GetCommonInputContainer();
  AliAnalysisDataContainer* coutput0 = mgr->CreateContainer("outputArray",
                                       AliRelAlignerKalmanArray::Class(),
                                       AliAnalysisManager::kOutputContainer,
                                       outputArrayFilename.Data());
  AliAnalysisDataContainer* coutput1 = mgr->CreateContainer("outputList",
                                       TList::Class(),
                                       AliAnalysisManager::kOutputContainer,
                                       outputHistFilename.Data());

  mgr->ConnectInput(taskITSTPCalignment,0,cinput0);
  mgr->ConnectOutput(taskITSTPCalignment,0,coutput0);
  mgr->ConnectOutput(taskITSTPCalignment,1,coutput1);
  if (!mgr->InitAnalysis()) return;
  mgr->PrintStatus();

  mgr->StartAnalysis("local",chain);
}

//_________________________________________________//
void runInteractive(const char* collectionName = "tag.xml") {
  gSystem->Load("libProofPlayer.so");

  TString outputArrayFilename = "ITSTPCalignmentArray.root";
  TString outputHistFilename = "ITSTPCalignmentHist.root";

  printf("*** Connect to AliEn ***\n");
  TGrid::Connect("alien://");
 
  //____________________________________________________//
  //_____________Setting up the par files_______________//
  //____________________________________________________//
  setupPar("STEERBase");
  gSystem->Load("libSTEERBase.so");
  setupPar("ESD");
  gSystem->Load("libVMC.so");
  gSystem->Load("libESD.so");
  setupPar("AOD");
  gSystem->Load("libAOD.so");
  setupPar("ANALYSIS");
  gSystem->Load("libANALYSIS.so");
  setupPar("ANALYSISalice");
  gSystem->Load("libANALYSISalice.so");
  //____________________________________________________//  
  
  //____________________________________________//
  AliTagAnalysis *tagAnalysis = new AliTagAnalysis("ESD");
 
  AliRunTagCuts *runCuts = new AliRunTagCuts();
  AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
  AliDetectorTagCuts *detCuts = new AliDetectorTagCuts();
  AliEventTagCuts *evCuts = new AliEventTagCuts();
 
  //grid tags
  TAlienCollection* coll = TAlienCollection::Open(collectionName);
  TGridResult* TagResult = coll->GetGridResult("",0,0);
  tagAnalysis->ChainGridTags(TagResult);
  TChain* chain = 0x0;
  chain = tagAnalysis->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
  chain->SetBranchStatus("*Calo*",0);
  
  //____________________________________________//
  gROOT->LoadMacro("AliRelAlignerKalman.cxx++");
  gROOT->LoadMacro("AliRelAlignerKalmanArray.cxx++");
  gROOT->LoadMacro("AliAnalysisTaskITSTPCalignment.cxx++");

  // analysis manager
  AliAnalysisManager *mgr = new AliAnalysisManager("ITSTPCalignmentAnalysisManager");
  AliVEventHandler* esdH = new AliESDInputHandler;
  mgr->SetInputEventHandler(esdH);

  //create the task
  AliAnalysisTaskITSTPCalignment *taskITSTPCalignment = 
                        new AliAnalysisTaskITSTPCalignment("TaskITSTPCalignment");
  taskITSTPCalignment->SetDoQA(kTRUE);

  mgr->AddTask(taskITSTPCalignment);

  AliAnalysisDataContainer* cinput0 = mgr->GetCommonInputContainer();
  AliAnalysisDataContainer* coutput0 = mgr->CreateContainer("outputArray",
                                       AliRelAlignerKalmanArray::Class(),
                                       AliAnalysisManager::kOutputContainer,
                                       outputArrayFilename.Data());
  AliAnalysisDataContainer* coutput1 = mgr->CreateContainer("outputList",
                                       TList::Class(),
                                       AliAnalysisManager::kOutputContainer,
                                       outputHistFilename.Data());

  mgr->ConnectInput(taskITSTPCalignment,0,cinput0);
  mgr->ConnectOutput(taskITSTPCalignment,0,coutput0);
  mgr->ConnectOutput(taskITSTPCalignment,1,coutput1);
  if (!mgr->InitAnalysis()) return;
  mgr->PrintStatus();

  mgr->StartAnalysis("local",chain);
}

//______________________________________________________________________________
Int_t setupPar(const char* pararchivename) {
  ///////////////////
  // Setup PAR File//
  ///////////////////
  if (pararchivename) {
    char processline[1024];
    sprintf(processline,".! tar xvzf %s.par",pararchivename);
    gROOT->ProcessLine(processline);
    const char* ocwd = gSystem->WorkingDirectory();
    gSystem->ChangeDirectory(pararchivename);
    
    // check for BUILD.sh and execute
    if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
      printf("*******************************\n");
      printf("*** Building PAR archive    ***\n");
      printf("*******************************\n");
      
      if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
        Error("runAnalysis","Cannot Build the PAR Archive! - Abort!");
        return -1;
      }
    }
    // check for SETUP.C and execute
    if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
      printf("*******************************\n");
      printf("*** Setup PAR archive       ***\n");
      printf("*******************************\n");
      gROOT->Macro("PROOF-INF/SETUP.C");
    }
    
    gSystem->ChangeDirectory("../");
  } 
  return 1;
}
 runITSTPCalignment.C:1
 runITSTPCalignment.C:2
 runITSTPCalignment.C:3
 runITSTPCalignment.C:4
 runITSTPCalignment.C:5
 runITSTPCalignment.C:6
 runITSTPCalignment.C:7
 runITSTPCalignment.C:8
 runITSTPCalignment.C:9
 runITSTPCalignment.C:10
 runITSTPCalignment.C:11
 runITSTPCalignment.C:12
 runITSTPCalignment.C:13
 runITSTPCalignment.C:14
 runITSTPCalignment.C:15
 runITSTPCalignment.C:16
 runITSTPCalignment.C:17
 runITSTPCalignment.C:18
 runITSTPCalignment.C:19
 runITSTPCalignment.C:20
 runITSTPCalignment.C:21
 runITSTPCalignment.C:22
 runITSTPCalignment.C:23
 runITSTPCalignment.C:24
 runITSTPCalignment.C:25
 runITSTPCalignment.C:26
 runITSTPCalignment.C:27
 runITSTPCalignment.C:28
 runITSTPCalignment.C:29
 runITSTPCalignment.C:30
 runITSTPCalignment.C:31
 runITSTPCalignment.C:32
 runITSTPCalignment.C:33
 runITSTPCalignment.C:34
 runITSTPCalignment.C:35
 runITSTPCalignment.C:36
 runITSTPCalignment.C:37
 runITSTPCalignment.C:38
 runITSTPCalignment.C:39
 runITSTPCalignment.C:40
 runITSTPCalignment.C:41
 runITSTPCalignment.C:42
 runITSTPCalignment.C:43
 runITSTPCalignment.C:44
 runITSTPCalignment.C:45
 runITSTPCalignment.C:46
 runITSTPCalignment.C:47
 runITSTPCalignment.C:48
 runITSTPCalignment.C:49
 runITSTPCalignment.C:50
 runITSTPCalignment.C:51
 runITSTPCalignment.C:52
 runITSTPCalignment.C:53
 runITSTPCalignment.C:54
 runITSTPCalignment.C:55
 runITSTPCalignment.C:56
 runITSTPCalignment.C:57
 runITSTPCalignment.C:58
 runITSTPCalignment.C:59
 runITSTPCalignment.C:60
 runITSTPCalignment.C:61
 runITSTPCalignment.C:62
 runITSTPCalignment.C:63
 runITSTPCalignment.C:64
 runITSTPCalignment.C:65
 runITSTPCalignment.C:66
 runITSTPCalignment.C:67
 runITSTPCalignment.C:68
 runITSTPCalignment.C:69
 runITSTPCalignment.C:70
 runITSTPCalignment.C:71
 runITSTPCalignment.C:72
 runITSTPCalignment.C:73
 runITSTPCalignment.C:74
 runITSTPCalignment.C:75
 runITSTPCalignment.C:76
 runITSTPCalignment.C:77
 runITSTPCalignment.C:78
 runITSTPCalignment.C:79
 runITSTPCalignment.C:80
 runITSTPCalignment.C:81
 runITSTPCalignment.C:82
 runITSTPCalignment.C:83
 runITSTPCalignment.C:84
 runITSTPCalignment.C:85
 runITSTPCalignment.C:86
 runITSTPCalignment.C:87
 runITSTPCalignment.C:88
 runITSTPCalignment.C:89
 runITSTPCalignment.C:90
 runITSTPCalignment.C:91
 runITSTPCalignment.C:92
 runITSTPCalignment.C:93
 runITSTPCalignment.C:94
 runITSTPCalignment.C:95
 runITSTPCalignment.C:96
 runITSTPCalignment.C:97
 runITSTPCalignment.C:98
 runITSTPCalignment.C:99
 runITSTPCalignment.C:100
 runITSTPCalignment.C:101
 runITSTPCalignment.C:102
 runITSTPCalignment.C:103
 runITSTPCalignment.C:104
 runITSTPCalignment.C:105
 runITSTPCalignment.C:106
 runITSTPCalignment.C:107
 runITSTPCalignment.C:108
 runITSTPCalignment.C:109
 runITSTPCalignment.C:110
 runITSTPCalignment.C:111
 runITSTPCalignment.C:112
 runITSTPCalignment.C:113
 runITSTPCalignment.C:114
 runITSTPCalignment.C:115
 runITSTPCalignment.C:116
 runITSTPCalignment.C:117
 runITSTPCalignment.C:118
 runITSTPCalignment.C:119
 runITSTPCalignment.C:120
 runITSTPCalignment.C:121
 runITSTPCalignment.C:122
 runITSTPCalignment.C:123
 runITSTPCalignment.C:124
 runITSTPCalignment.C:125
 runITSTPCalignment.C:126
 runITSTPCalignment.C:127
 runITSTPCalignment.C:128
 runITSTPCalignment.C:129
 runITSTPCalignment.C:130
 runITSTPCalignment.C:131
 runITSTPCalignment.C:132
 runITSTPCalignment.C:133
 runITSTPCalignment.C:134
 runITSTPCalignment.C:135
 runITSTPCalignment.C:136
 runITSTPCalignment.C:137
 runITSTPCalignment.C:138
 runITSTPCalignment.C:139
 runITSTPCalignment.C:140
 runITSTPCalignment.C:141
 runITSTPCalignment.C:142
 runITSTPCalignment.C:143
 runITSTPCalignment.C:144
 runITSTPCalignment.C:145
 runITSTPCalignment.C:146
 runITSTPCalignment.C:147
 runITSTPCalignment.C:148
 runITSTPCalignment.C:149
 runITSTPCalignment.C:150
 runITSTPCalignment.C:151
 runITSTPCalignment.C:152
 runITSTPCalignment.C:153
 runITSTPCalignment.C:154
 runITSTPCalignment.C:155
 runITSTPCalignment.C:156
 runITSTPCalignment.C:157
 runITSTPCalignment.C:158
 runITSTPCalignment.C:159
 runITSTPCalignment.C:160
 runITSTPCalignment.C:161
 runITSTPCalignment.C:162
 runITSTPCalignment.C:163
 runITSTPCalignment.C:164
 runITSTPCalignment.C:165
 runITSTPCalignment.C:166
 runITSTPCalignment.C:167
 runITSTPCalignment.C:168
 runITSTPCalignment.C:169
 runITSTPCalignment.C:170
 runITSTPCalignment.C:171
 runITSTPCalignment.C:172
 runITSTPCalignment.C:173
 runITSTPCalignment.C:174
 runITSTPCalignment.C:175
 runITSTPCalignment.C:176
 runITSTPCalignment.C:177
 runITSTPCalignment.C:178
 runITSTPCalignment.C:179
 runITSTPCalignment.C:180
 runITSTPCalignment.C:181
 runITSTPCalignment.C:182
 runITSTPCalignment.C:183
 runITSTPCalignment.C:184
 runITSTPCalignment.C:185
 runITSTPCalignment.C:186
 runITSTPCalignment.C:187
 runITSTPCalignment.C:188
 runITSTPCalignment.C:189
 runITSTPCalignment.C:190
 runITSTPCalignment.C:191
 runITSTPCalignment.C:192
 runITSTPCalignment.C:193
 runITSTPCalignment.C:194
 runITSTPCalignment.C:195
 runITSTPCalignment.C:196
 runITSTPCalignment.C:197
 runITSTPCalignment.C:198
 runITSTPCalignment.C:199
 runITSTPCalignment.C:200
 runITSTPCalignment.C:201
 runITSTPCalignment.C:202
 runITSTPCalignment.C:203
 runITSTPCalignment.C:204
 runITSTPCalignment.C:205
 runITSTPCalignment.C:206
 runITSTPCalignment.C:207
 runITSTPCalignment.C:208
 runITSTPCalignment.C:209
 runITSTPCalignment.C:210
 runITSTPCalignment.C:211
 runITSTPCalignment.C:212