ROOT logo
void runAnalysisTaskPtMothFromPtDaug(TH1F* histPtDaug=0x0, 
         Bool_t readKineFromNtupla=kTRUE,const char* galiceList="galice.txt")
 {
/////////////////////////////////////////////////////////////////////////////
//  Run-macro to extract pt-spectra (and ptMin-spectra) for mothers        //
//  input: 1) pT histogram of daughter particles                           //
//         2) boolean flag:kFALSE -> read Kinematics.root to evaluate      //
//                                 correction factors, create a TNtuple    //
//                                 with kinematic informations of mothers  //
//                                 and daughters and store it in the file  //
//                                 "DecayKine.root"                        //
//                         kTRUE  -> read the TNtupla from the file        //
//                                 "DecayKine.root" (after it is created)  //
//                                 to evaluate correction factors          //
//         3) name of file with the list of "galice.root" files to read    //
//            kinematics (not needed after the TNtupla is created)         //
//                                                                         //
//  output: 1) file Mothers.root which contains pt-spectra and ptMin       //
//             spectra of mothers particles                                //  
//          2) TNtupla with kinematic informations (optional)              //
//                                                                         //
//      Origin:  Giuseppe.Bruno@ba.infn.it, Fiorella.Fionda@ba.infn.it     //
//									   //	
/////////////////////////////////////////////////////////////////////////////
  
  char *ntuplaFileName = "DecayKine.root"; // default name of the Ntupla
  char *mode = "local"; // analysis mode (select local or proof) 
  char *dataset = "/COMMON/COMMON/LHC09a14_0.9TeV_0.5T"; // define dataset for proof

  if(mode == "proof") loadLib();   
  else{
  gSystem->Load("libANALYSIS.so"); 
  gSystem->Load("libANALYSISalice.so");	 	  
  gSystem->Load("libPWGHFbase.so");
  }
  // Set AliPtMothFromPtDaugh object 
  AliPtMothFromPtDaugh *ptExtr = new AliPtMothFromPtDaugh();
  ptExtr->SetDefaultAnalysis(AliPtMothFromPtDaugh::kBtoJPSI);
  ptExtr->SetBinsPtMoth(0.,10,20,1);
  ptExtr->SetBinsPtMinMoth(0.,10,20,1);
  ptExtr->SetEtaMothers(-1.5,1.5);
  ptExtr->SetEtaDaughter(-1.,1.);
  if(!ptExtr->ReadHistoPtDaught(histPtDaug))
     { printf("Daughter pt-Histogram is not defined \n"); return; }
  if(!ptExtr->CreateWeights()) return;
  //
  // create Analysis manager with MC and Input handlers
  //
  AliAnalysisManager *mgr  = new AliAnalysisManager("mgr", "Analysis Manager");
  AliMCEventHandler* mcHandler = new AliMCEventHandler();
  mgr->SetMCtruthEventHandler(mcHandler);
  AliInputEventHandler *inputHandler =0x0; 
  mgr->SetInputEventHandler(inputHandler);

  TChain *chain=0x0;
  if(mode=="local"){
  if(!readKineFromNtupla) chain = CreateChain(galiceList); // create a chain with galice.root files
  else  mgr->SetExternalLoop(kTRUE); // to abort event loop when Ntupla is already created
  }
  //
  // create task and add it to the manager
  //
  AliAnalysisTaskPtMothFromPtDaugh *task = new AliAnalysisTaskPtMothFromPtDaugh(readKineFromNtupla);
  task->SetPtMothFromPtDaugh(ptExtr); // set AliPtMothFromPtDaugh object to the task
  task->SetNtuplaFileName(ntuplaFileName);
  mgr->AddTask(task);  
   //
   // create input / output containers
   //
  AliAnalysisDataContainer *cOutput = mgr->CreateContainer("Mothers", TList::Class(), AliAnalysisManager::kOutputContainer,"Mothers.root");
  mgr->ConnectOutput(task, 1, cOutput);
  // optional output for TNtupla
  AliAnalysisDataContainer *cOutput1 = 0x0;
  if(!readKineFromNtupla){
  cOutput1 = mgr->CreateContainer("DecayKine", TNtuple::Class(), AliAnalysisManager::kOutputContainer,ntuplaFileName);
  mgr->ConnectInput(task,  0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput(task,2,cOutput1);
  }
  //
  // run analysis locally
  //
  Int_t result=mgr->InitAnalysis();
  if (!result){
    Error("RunAnalysis","Could not initialise Analysis.");
    return 0;
  }
  mgr->PrintStatus();
  if(mode=="local") mgr->StartAnalysis(mode,chain);
  else if(mode=="proof") mgr->StartAnalysis(mode,dataset);
  if(readKineFromNtupla) mgr->Terminate();
  return;
 }

TChain *CreateChain(const char* galiceName)
 {
  //
  // Create a chain from a list of galice.root
  //
  ifstream in;
  in.open(galiceName);
  if (!in.is_open()) return 0x0;
  TChain *chain=new TChain("TE");
  TString line;
   while(in.good()) {
     in >> line;
     if (!line.IsNull()) chain->AddFile(line);
     }
  return chain;
 }

void loadLib(){
printf("****** Connect to PROOF *******\n");
gEnv->SetValue("XSec.GSI.DelegProxy","2");
TProof::Open("alicecaf.cern.ch");
gProof->UploadPackage("STEERBase.par");
gProof->EnablePackage("STEERBase.par");
gProof->UploadPackage("ESD.par");
gProof->EnablePackage("ESD.par");
gProof->UploadPackage("AOD.par");
gProof->EnablePackage("AOD.par");
gProof->UploadPackage("ANALYSIS.par");
gProof->EnablePackage("ANALYSIS.par");
gProof->UploadPackage("ANALYSISalice.par");
gProof->EnablePackage("ANALYSISalice.par");
gProof->UploadPackage("PWG3base.par");
gProof->EnablePackage("PWG3base.par");
}
 runAnalysisTaskPtMothFromPtDaug.C:1
 runAnalysisTaskPtMothFromPtDaug.C:2
 runAnalysisTaskPtMothFromPtDaug.C:3
 runAnalysisTaskPtMothFromPtDaug.C:4
 runAnalysisTaskPtMothFromPtDaug.C:5
 runAnalysisTaskPtMothFromPtDaug.C:6
 runAnalysisTaskPtMothFromPtDaug.C:7
 runAnalysisTaskPtMothFromPtDaug.C:8
 runAnalysisTaskPtMothFromPtDaug.C:9
 runAnalysisTaskPtMothFromPtDaug.C:10
 runAnalysisTaskPtMothFromPtDaug.C:11
 runAnalysisTaskPtMothFromPtDaug.C:12
 runAnalysisTaskPtMothFromPtDaug.C:13
 runAnalysisTaskPtMothFromPtDaug.C:14
 runAnalysisTaskPtMothFromPtDaug.C:15
 runAnalysisTaskPtMothFromPtDaug.C:16
 runAnalysisTaskPtMothFromPtDaug.C:17
 runAnalysisTaskPtMothFromPtDaug.C:18
 runAnalysisTaskPtMothFromPtDaug.C:19
 runAnalysisTaskPtMothFromPtDaug.C:20
 runAnalysisTaskPtMothFromPtDaug.C:21
 runAnalysisTaskPtMothFromPtDaug.C:22
 runAnalysisTaskPtMothFromPtDaug.C:23
 runAnalysisTaskPtMothFromPtDaug.C:24
 runAnalysisTaskPtMothFromPtDaug.C:25
 runAnalysisTaskPtMothFromPtDaug.C:26
 runAnalysisTaskPtMothFromPtDaug.C:27
 runAnalysisTaskPtMothFromPtDaug.C:28
 runAnalysisTaskPtMothFromPtDaug.C:29
 runAnalysisTaskPtMothFromPtDaug.C:30
 runAnalysisTaskPtMothFromPtDaug.C:31
 runAnalysisTaskPtMothFromPtDaug.C:32
 runAnalysisTaskPtMothFromPtDaug.C:33
 runAnalysisTaskPtMothFromPtDaug.C:34
 runAnalysisTaskPtMothFromPtDaug.C:35
 runAnalysisTaskPtMothFromPtDaug.C:36
 runAnalysisTaskPtMothFromPtDaug.C:37
 runAnalysisTaskPtMothFromPtDaug.C:38
 runAnalysisTaskPtMothFromPtDaug.C:39
 runAnalysisTaskPtMothFromPtDaug.C:40
 runAnalysisTaskPtMothFromPtDaug.C:41
 runAnalysisTaskPtMothFromPtDaug.C:42
 runAnalysisTaskPtMothFromPtDaug.C:43
 runAnalysisTaskPtMothFromPtDaug.C:44
 runAnalysisTaskPtMothFromPtDaug.C:45
 runAnalysisTaskPtMothFromPtDaug.C:46
 runAnalysisTaskPtMothFromPtDaug.C:47
 runAnalysisTaskPtMothFromPtDaug.C:48
 runAnalysisTaskPtMothFromPtDaug.C:49
 runAnalysisTaskPtMothFromPtDaug.C:50
 runAnalysisTaskPtMothFromPtDaug.C:51
 runAnalysisTaskPtMothFromPtDaug.C:52
 runAnalysisTaskPtMothFromPtDaug.C:53
 runAnalysisTaskPtMothFromPtDaug.C:54
 runAnalysisTaskPtMothFromPtDaug.C:55
 runAnalysisTaskPtMothFromPtDaug.C:56
 runAnalysisTaskPtMothFromPtDaug.C:57
 runAnalysisTaskPtMothFromPtDaug.C:58
 runAnalysisTaskPtMothFromPtDaug.C:59
 runAnalysisTaskPtMothFromPtDaug.C:60
 runAnalysisTaskPtMothFromPtDaug.C:61
 runAnalysisTaskPtMothFromPtDaug.C:62
 runAnalysisTaskPtMothFromPtDaug.C:63
 runAnalysisTaskPtMothFromPtDaug.C:64
 runAnalysisTaskPtMothFromPtDaug.C:65
 runAnalysisTaskPtMothFromPtDaug.C:66
 runAnalysisTaskPtMothFromPtDaug.C:67
 runAnalysisTaskPtMothFromPtDaug.C:68
 runAnalysisTaskPtMothFromPtDaug.C:69
 runAnalysisTaskPtMothFromPtDaug.C:70
 runAnalysisTaskPtMothFromPtDaug.C:71
 runAnalysisTaskPtMothFromPtDaug.C:72
 runAnalysisTaskPtMothFromPtDaug.C:73
 runAnalysisTaskPtMothFromPtDaug.C:74
 runAnalysisTaskPtMothFromPtDaug.C:75
 runAnalysisTaskPtMothFromPtDaug.C:76
 runAnalysisTaskPtMothFromPtDaug.C:77
 runAnalysisTaskPtMothFromPtDaug.C:78
 runAnalysisTaskPtMothFromPtDaug.C:79
 runAnalysisTaskPtMothFromPtDaug.C:80
 runAnalysisTaskPtMothFromPtDaug.C:81
 runAnalysisTaskPtMothFromPtDaug.C:82
 runAnalysisTaskPtMothFromPtDaug.C:83
 runAnalysisTaskPtMothFromPtDaug.C:84
 runAnalysisTaskPtMothFromPtDaug.C:85
 runAnalysisTaskPtMothFromPtDaug.C:86
 runAnalysisTaskPtMothFromPtDaug.C:87
 runAnalysisTaskPtMothFromPtDaug.C:88
 runAnalysisTaskPtMothFromPtDaug.C:89
 runAnalysisTaskPtMothFromPtDaug.C:90
 runAnalysisTaskPtMothFromPtDaug.C:91
 runAnalysisTaskPtMothFromPtDaug.C:92
 runAnalysisTaskPtMothFromPtDaug.C:93
 runAnalysisTaskPtMothFromPtDaug.C:94
 runAnalysisTaskPtMothFromPtDaug.C:95
 runAnalysisTaskPtMothFromPtDaug.C:96
 runAnalysisTaskPtMothFromPtDaug.C:97
 runAnalysisTaskPtMothFromPtDaug.C:98
 runAnalysisTaskPtMothFromPtDaug.C:99
 runAnalysisTaskPtMothFromPtDaug.C:100
 runAnalysisTaskPtMothFromPtDaug.C:101
 runAnalysisTaskPtMothFromPtDaug.C:102
 runAnalysisTaskPtMothFromPtDaug.C:103
 runAnalysisTaskPtMothFromPtDaug.C:104
 runAnalysisTaskPtMothFromPtDaug.C:105
 runAnalysisTaskPtMothFromPtDaug.C:106
 runAnalysisTaskPtMothFromPtDaug.C:107
 runAnalysisTaskPtMothFromPtDaug.C:108
 runAnalysisTaskPtMothFromPtDaug.C:109
 runAnalysisTaskPtMothFromPtDaug.C:110
 runAnalysisTaskPtMothFromPtDaug.C:111
 runAnalysisTaskPtMothFromPtDaug.C:112
 runAnalysisTaskPtMothFromPtDaug.C:113
 runAnalysisTaskPtMothFromPtDaug.C:114
 runAnalysisTaskPtMothFromPtDaug.C:115
 runAnalysisTaskPtMothFromPtDaug.C:116
 runAnalysisTaskPtMothFromPtDaug.C:117
 runAnalysisTaskPtMothFromPtDaug.C:118
 runAnalysisTaskPtMothFromPtDaug.C:119
 runAnalysisTaskPtMothFromPtDaug.C:120
 runAnalysisTaskPtMothFromPtDaug.C:121
 runAnalysisTaskPtMothFromPtDaug.C:122
 runAnalysisTaskPtMothFromPtDaug.C:123
 runAnalysisTaskPtMothFromPtDaug.C:124
 runAnalysisTaskPtMothFromPtDaug.C:125
 runAnalysisTaskPtMothFromPtDaug.C:126
 runAnalysisTaskPtMothFromPtDaug.C:127
 runAnalysisTaskPtMothFromPtDaug.C:128