ROOT logo
void SetupPar(char* pararchivename);
void SwitchBranches(TChain *c);
TChain * CreateXMLChain(char* xmlfile);
TChain * CreateAODChain(const char * name = 0x0);

void runElectronTask(const char *treelist = 0x0, Bool_t hasMC = kTRUE){
  if(!treelist){
    printf("Error: No ESD list specified\n");
    return;
  }
  if(gSystem->Getenv("ALICE_ROOT")){
    gSystem->Load("libANALYSIS");
    gSystem->Load("libANALYSISalice");
    gSystem->Load("libCORRFW");
  }
  else{
    SetupPar("STEERBase");
    SetupPar("ESD");
    SetupPar("AOD");
    SetupPar("ANALYSIS");
    SetupPar("ANALYSISalice");
    SetupPar("CORRFW");
    SetupPar("Util");
  }
  //SetupPar("HFE");
  gSystem->Load("libHFE.so");
//  gROOT->LoadMacro("AliAnalysisTaskHFE.cxx++");
 // AliLog::SetGlobalLogLevel(AliLog::kError);
  
  // Make the ESD chain
  TString treename = treelist;
  TChain *inputChain = 0x0;
  Bool_t isAOD = kFALSE;
  if(treename.EndsWith(".xml")){
    esdchain = CreateXMLChain(treelist);
    SwitchBranches(inputChain);
  }else{
    inputChain = CreateAODChain(treelist);
    if(inputChain) isAOD = kTRUE;
    else{
      gROOT->LoadMacro("CreateESDChain.C");
      inputChain = CreateESDChain(treelist, -1);
      SwitchBranches(inputChain);
    }
  }
 
  // Start the Analysis Manager and Create Handlers
  AliAnalysisManager *hfeAnalysis = new AliAnalysisManager("Single Electron Analysis");
  if(!isAOD) hfeAnalysis->SetInputEventHandler(new AliESDInputHandler);
  else hfeAnalysis->SetInputEventHandler(new AliAODInputHandler);
  if(hasMC && !isAOD) hfeAnalysis->SetMCtruthEventHandler(new AliMCEventHandler);
  AliHFEcuts *hfecuts = new AliHFEcuts;
  hfecuts->CreateStandardCuts();
  AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE;
  if(hasMC) task->SetHasMCData();
  if(isAOD) task->SetAODAnalysis();
  task->SetHFECuts(hfecuts);
  task->SetPIDStrategy(4);
  task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
  task->SetQAOn(AliAnalysisTaskHFE::kMCqa);
  task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
  //task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
  hfeAnalysis->AddTask(task);
  task->ConnectInput(0, hfeAnalysis->GetCommonInputContainer());
  task->ConnectOutput(1, hfeAnalysis->CreateContainer("nEvents", TH1I::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
  task->ConnectOutput(2, hfeAnalysis->CreateContainer("Results", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
  task->ConnectOutput(3, hfeAnalysis->CreateContainer("QA", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
  //task->ConnectOutput(3, hfeAnalysis->CreateContainer("QA-new", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));  
  // Run the Analysis
  if(hfeAnalysis->InitAnalysis()){  
    TStopwatch timer;
    timer.Start();
    hfeAnalysis->StartAnalysis("local", inputChain);
    timer.Stop();
    timer.Print();
  }
}

//____________________________________________
TChain * CreateXMLChain(char* xmlfile)
{

  //TChain *chain = 0x0;
  const char *chainname="esdTree";
  TChain* chain = new TChain(chainname);
 
  TString input =xmlfile;
  cout<<" the input is::"<< xmlfile<<endl;

  char kXML  [1000];
  if(gSystem->Getenv("XML") )
    kXML = gSystem->Getenv("XML");
  else
    sprintf(kXML, xmlfile) ; 

  //    sprintf(kXML, "collection.xml") ; 
  
  cout<<"XML file "<<kXML<<endl;
  
  if (!TFile::Open(kXML)) {
    printf("No collection file with name -- %s -- was found\n",kXML);
    return ;
  }
  gSystem->Load("libNetx.so") ;
  gSystem->Load("libRAliEn.so");
  TGrid::Connect("alien://") ;



  //  TGridCollection * collection =  (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)", kXML));
  TGridCollection * collection = (TGridCollection*) TAlienCollection::Open(kXML);
  if (! collection) {
    AliError(Form("%s not found", kXML)) ; 
    return kFALSE ; 
  }
  //collection->CheckIfOnline();

  TGridResult* result = collection->GetGridResult("",0 ,0);

  //  TList* analysisfilelist = result->GetFileInfoList();
  
  // Makes the ESD chain 
  printf("*** Getting the Chain       ***\n");

  for (Int_t index = 0; index < result->GetEntries(); index++) {
    TString alienURL = result->GetKey(index, "turl") ; 
    cout << "================== " << alienURL << endl ; 
    chain->Add(alienURL) ; 
    //alienURL.ReplaceAll("AliESDs.root",kXSFileName);
    // chainxs->Add(alienURL) ; 
  }


  //  chain->AddFileInfoList(analysisfilelist);
  if (chain) chain->ls();
  chain->SetBranchStatus("*Calo*",0);
  chain->SetBranchStatus("*FMD*",0);
  return chain;
}

//______________________________________________________________________________
TChain *CreateAODChain(const char * name){
  if(!name) return NULL;
  ifstream filelist(name);
  string filename;
  TChain *c = new TChain("aodTree");
  Bool_t isAODlist = kTRUE;
  while(getline(filelist,filename)){
    if(!strstr(filename.c_str(), "AliAOD")){
      isAODlist = kFALSE;
      break;
    }
    c->Add(filename.c_str());
  }
  if(!isAODlist){
    printf("No AOD anlysis");
    delete c;
    return NULL;
  }
  return c;
}

//______________________________________________________________________________
void SetupPar(char* pararchivename)
{
  if (pararchivename) {
    char processline[1024];
    sprintf(processline,".! tar xvzf %s.par",pararchivename);
    gROOT->ProcessLine(processline);
    TString 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("runProcess","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(ocwd.Data());
    printf("Current dir: %s\n", ocwd.Data());
  }
}

void SwitchBranches(TChain *c){
  //esdchain->SetBranchStatus("*", 0);
  c->SetBranchStatus("Calo*", 0);
  c->SetBranchStatus("*FMD*", 1);
  c->SetBranchStatus("Tracks", 1);
}
 runElectronTask.C:1
 runElectronTask.C:2
 runElectronTask.C:3
 runElectronTask.C:4
 runElectronTask.C:5
 runElectronTask.C:6
 runElectronTask.C:7
 runElectronTask.C:8
 runElectronTask.C:9
 runElectronTask.C:10
 runElectronTask.C:11
 runElectronTask.C:12
 runElectronTask.C:13
 runElectronTask.C:14
 runElectronTask.C:15
 runElectronTask.C:16
 runElectronTask.C:17
 runElectronTask.C:18
 runElectronTask.C:19
 runElectronTask.C:20
 runElectronTask.C:21
 runElectronTask.C:22
 runElectronTask.C:23
 runElectronTask.C:24
 runElectronTask.C:25
 runElectronTask.C:26
 runElectronTask.C:27
 runElectronTask.C:28
 runElectronTask.C:29
 runElectronTask.C:30
 runElectronTask.C:31
 runElectronTask.C:32
 runElectronTask.C:33
 runElectronTask.C:34
 runElectronTask.C:35
 runElectronTask.C:36
 runElectronTask.C:37
 runElectronTask.C:38
 runElectronTask.C:39
 runElectronTask.C:40
 runElectronTask.C:41
 runElectronTask.C:42
 runElectronTask.C:43
 runElectronTask.C:44
 runElectronTask.C:45
 runElectronTask.C:46
 runElectronTask.C:47
 runElectronTask.C:48
 runElectronTask.C:49
 runElectronTask.C:50
 runElectronTask.C:51
 runElectronTask.C:52
 runElectronTask.C:53
 runElectronTask.C:54
 runElectronTask.C:55
 runElectronTask.C:56
 runElectronTask.C:57
 runElectronTask.C:58
 runElectronTask.C:59
 runElectronTask.C:60
 runElectronTask.C:61
 runElectronTask.C:62
 runElectronTask.C:63
 runElectronTask.C:64
 runElectronTask.C:65
 runElectronTask.C:66
 runElectronTask.C:67
 runElectronTask.C:68
 runElectronTask.C:69
 runElectronTask.C:70
 runElectronTask.C:71
 runElectronTask.C:72
 runElectronTask.C:73
 runElectronTask.C:74
 runElectronTask.C:75
 runElectronTask.C:76
 runElectronTask.C:77
 runElectronTask.C:78
 runElectronTask.C:79
 runElectronTask.C:80
 runElectronTask.C:81
 runElectronTask.C:82
 runElectronTask.C:83
 runElectronTask.C:84
 runElectronTask.C:85
 runElectronTask.C:86
 runElectronTask.C:87
 runElectronTask.C:88
 runElectronTask.C:89
 runElectronTask.C:90
 runElectronTask.C:91
 runElectronTask.C:92
 runElectronTask.C:93
 runElectronTask.C:94
 runElectronTask.C:95
 runElectronTask.C:96
 runElectronTask.C:97
 runElectronTask.C:98
 runElectronTask.C:99
 runElectronTask.C:100
 runElectronTask.C:101
 runElectronTask.C:102
 runElectronTask.C:103
 runElectronTask.C:104
 runElectronTask.C:105
 runElectronTask.C:106
 runElectronTask.C:107
 runElectronTask.C:108
 runElectronTask.C:109
 runElectronTask.C:110
 runElectronTask.C:111
 runElectronTask.C:112
 runElectronTask.C:113
 runElectronTask.C:114
 runElectronTask.C:115
 runElectronTask.C:116
 runElectronTask.C:117
 runElectronTask.C:118
 runElectronTask.C:119
 runElectronTask.C:120
 runElectronTask.C:121
 runElectronTask.C:122
 runElectronTask.C:123
 runElectronTask.C:124
 runElectronTask.C:125
 runElectronTask.C:126
 runElectronTask.C:127
 runElectronTask.C:128
 runElectronTask.C:129
 runElectronTask.C:130
 runElectronTask.C:131
 runElectronTask.C:132
 runElectronTask.C:133
 runElectronTask.C:134
 runElectronTask.C:135
 runElectronTask.C:136
 runElectronTask.C:137
 runElectronTask.C:138
 runElectronTask.C:139
 runElectronTask.C:140
 runElectronTask.C:141
 runElectronTask.C:142
 runElectronTask.C:143
 runElectronTask.C:144
 runElectronTask.C:145
 runElectronTask.C:146
 runElectronTask.C:147
 runElectronTask.C:148
 runElectronTask.C:149
 runElectronTask.C:150
 runElectronTask.C:151
 runElectronTask.C:152
 runElectronTask.C:153
 runElectronTask.C:154
 runElectronTask.C:155
 runElectronTask.C:156
 runElectronTask.C:157
 runElectronTask.C:158
 runElectronTask.C:159
 runElectronTask.C:160
 runElectronTask.C:161
 runElectronTask.C:162
 runElectronTask.C:163
 runElectronTask.C:164
 runElectronTask.C:165
 runElectronTask.C:166
 runElectronTask.C:167
 runElectronTask.C:168
 runElectronTask.C:169
 runElectronTask.C:170
 runElectronTask.C:171
 runElectronTask.C:172
 runElectronTask.C:173
 runElectronTask.C:174
 runElectronTask.C:175
 runElectronTask.C:176
 runElectronTask.C:177
 runElectronTask.C:178
 runElectronTask.C:179
 runElectronTask.C:180
 runElectronTask.C:181
 runElectronTask.C:182
 runElectronTask.C:183
 runElectronTask.C:184
 runElectronTask.C:185
 runElectronTask.C:186
 runElectronTask.C:187
 runElectronTask.C:188
 runElectronTask.C:189
 runElectronTask.C:190
 runElectronTask.C:191
 runElectronTask.C:192
 runElectronTask.C:193
 runElectronTask.C:194
 runElectronTask.C:195
 runElectronTask.C:196
 runElectronTask.C:197
 runElectronTask.C:198
 runElectronTask.C:199
 runElectronTask.C:200
 runElectronTask.C:201
 runElectronTask.C:202
 runElectronTask.C:203