ROOT logo
AliAnalysisTaskSpectraBoth* AddTaskSpectraBoth(Bool_t mc=kFALSE,
					     Double_t CentCutMin=0,
					     Double_t CentCutMax=100,
					     Double_t QvecCutMin=0,
					     Double_t QvecCutMax=100,
					     Double_t EtaMin=-0.8,
					     Double_t EtaMax=0.8,
					     Double_t Nsigmapid=3.,
					     Double_t pt=5.,
					     Double_t p=5.,
					     Double_t ymin=-0.5,
					     Double_t ymax=.5, 	
					     Double_t ptTofMatch=.6,
					     UInt_t trkbit=1,
					     UInt_t trkbitQVector=1,
					     Bool_t UseCentPatchAOD049=kFALSE,
					     Double_t DCA=100000,
					     UInt_t minNclsTPC=70,
					     Int_t nrebin=0,
					     TString centestimator="V0M",
					     Int_t pidmethod=2, 	 					
					     Float_t tpcshift=0.0,
					     Float_t tofshift=0.0){
  
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) 
    {
      ::Error("AddAliAnalysisTaskSpectraAOD", "No analysis manager to connect to.");
      return NULL;
    }   
  
  // Check the analysis type using the event handlers connected to the analysis manager.
  //==============================================================================
  if (!mgr->GetInputEventHandler()) 
    {
      ::Error("AddTaskITSsaTracks", "This task requires an input event handler");
      return NULL;
    }   
  
  TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
 // if(type.Contains("ESD"))
   // {
    //  ::Error("AddTaskITSsaTracks", "This task requires to run on AOD");
    //  return NULL;
 //   }
  
  using namespace AliSpectraNameSpaceBoth;
  
  TString opt=Form("Est_%s_Pid_%d_Y%.1fto%.1f", centestimator.Data(),pidmethod,ymin,ymax);	
  AliSpectraBothPID *pid = new AliSpectraBothPID(); 
  pid->SetNSigmaCut(Nsigmapid);
  pid->SetShiftTPC(tpcshift);
  pid->SetShiftTOF(tofshift);
  if(pidmethod==0)
	pid->SetPIDtype(AliSpectraBothPID::kNSigmaTPC);
  else if (pidmethod==1)
	pid->SetPIDtype(AliSpectraBothPID::kNSigmaTOF);
  else if  (pidmethod==2)		
  	pid->SetPIDtype(AliSpectraBothPID::kNSigmacircleTPCTOF);
  else 
	pid->SetPIDtype(AliSpectraBothPID::kNSigmasquareTPCTOF);	

  AliSpectraBothTrackCuts  * trcuts = new AliSpectraBothTrackCuts("Track Cuts");  
  trcuts->SetDCA(DCA);
  trcuts->SetTrackBits(trkbit);
  trcuts->SetPt(pt);
  trcuts->SetP(p);
  trcuts->SetY(ymax,ymin);
  trcuts->SetPtTOFMatching(ptTofMatch);   
  trcuts->SetEta(EtaMin,EtaMax);
  trcuts->SetMinTPCcls(minNclsTPC);
  trcuts->PrintCuts();
  
  AliSpectraBothEventCuts * evcuts = new AliSpectraBothEventCuts("Event Cuts");
  evcuts->SetQVectorCut(QvecCutMin,QvecCutMax);
  evcuts->SetCentralityCutMax(CentCutMax);  
  evcuts->SetCentralityCutMin(CentCutMin);
  evcuts->SetTrackBits(trkbitQVector);
  evcuts->SetCentEstimator(centestimator);	
  if(mc==1)evcuts->SetIsMC(kTRUE);
  evcuts->PrintCuts();
  
  AliAnalysisTaskSpectraBoth *task = new AliAnalysisTaskSpectraBoth(Form("TaskBothSpectraCent%.3fto%.3f_QVec%.1fto%.1f_Eta%.1fto%.1f_%.1fSigmaPID_TrBit%d%s",	
  								       CentCutMin,
  								       CentCutMax,
  								       QvecCutMin,
  								       QvecCutMax,
  								       EtaMin,
  								       EtaMax,
  								       Nsigmapid,
  								       trkbit,
								       opt.Data()));
  task->SetPID(pid);  
  task->SetEventCuts(evcuts);
  task->SetTrackCuts(trcuts);
  task->SetNRebin(nrebin);
  if(mc==1)task->SetIsMC(kTRUE);
  
  TString outputFileName = AliAnalysisManager::GetCommonFileName();
  
  TString typeofdata=mc?"MC":"Data";
  outputFileName += Form(":OutputBothSpectraTask_%s_Cent%.3fto%.3f_QVec%.1fto%.1f_Eta%.1fto%.1f_%.1fSigmaPID_TrBit%d%s",typeofdata.Data(),evcuts->GetCentralityMin(),evcuts->GetCentralityMax(),evcuts->GetQVectorCutMin(), evcuts->GetQVectorCutMax(),trcuts->GetEtaMin(),trcuts->GetEtaMax(),pid->GetNSigmaCut(),trcuts->GetTrackType(),opt.Data());
  
  TString tmpstring= Form("OutputBothSpectraTask_%s_Cent%.3fto%.3f_QVec%.1fto%.1f_Eta%.1fto%.1f_%.1fSigmaPID_TrBit%d%s",typeofdata.Data(),evcuts->GetCentralityMin(),evcuts->GetCentralityMax(),evcuts->GetQVectorCutMin(), evcuts->GetQVectorCutMax(),trcuts->GetEtaMin(),trcuts->GetEtaMax(),pid->GetNSigmaCut(),trcuts->GetTrackType(),opt.Data());
  
  cout<<"outputFileName:  "<<outputFileName<<endl;
  AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();      
  AliAnalysisDataContainer *coutputpt1 = mgr->CreateContainer(Form("%schistpt",tmpstring.Data()), AliSpectraBothHistoManager::Class(),  AliAnalysisManager::kOutputContainer,outputFileName);
  AliAnalysisDataContainer *coutputpt2 = mgr->CreateContainer(Form("%scvcutpt",tmpstring.Data()), AliSpectraBothEventCuts::Class(),    AliAnalysisManager::kOutputContainer,outputFileName);
  AliAnalysisDataContainer *coutputpt3 = mgr->CreateContainer(Form("%sctcutpt",tmpstring.Data()), AliSpectraBothTrackCuts::Class(),     AliAnalysisManager::kOutputContainer, outputFileName);
  AliAnalysisDataContainer *coutputpt4 = mgr->CreateContainer(Form("%scpidpt",tmpstring.Data()),  AliSpectraBothPID::Class(),     AliAnalysisManager::kOutputContainer,outputFileName);
  
  mgr->ConnectInput(task, 0, cinput);
  mgr->ConnectOutput(task, 1, coutputpt1);
  mgr->ConnectOutput(task, 2, coutputpt2);
  mgr->ConnectOutput(task, 3, coutputpt3);
  mgr->ConnectOutput(task, 4, coutputpt4);
  
  mgr->AddTask(task);
  return task;
}
 AddTaskSpectraBoth.C:1
 AddTaskSpectraBoth.C:2
 AddTaskSpectraBoth.C:3
 AddTaskSpectraBoth.C:4
 AddTaskSpectraBoth.C:5
 AddTaskSpectraBoth.C:6
 AddTaskSpectraBoth.C:7
 AddTaskSpectraBoth.C:8
 AddTaskSpectraBoth.C:9
 AddTaskSpectraBoth.C:10
 AddTaskSpectraBoth.C:11
 AddTaskSpectraBoth.C:12
 AddTaskSpectraBoth.C:13
 AddTaskSpectraBoth.C:14
 AddTaskSpectraBoth.C:15
 AddTaskSpectraBoth.C:16
 AddTaskSpectraBoth.C:17
 AddTaskSpectraBoth.C:18
 AddTaskSpectraBoth.C:19
 AddTaskSpectraBoth.C:20
 AddTaskSpectraBoth.C:21
 AddTaskSpectraBoth.C:22
 AddTaskSpectraBoth.C:23
 AddTaskSpectraBoth.C:24
 AddTaskSpectraBoth.C:25
 AddTaskSpectraBoth.C:26
 AddTaskSpectraBoth.C:27
 AddTaskSpectraBoth.C:28
 AddTaskSpectraBoth.C:29
 AddTaskSpectraBoth.C:30
 AddTaskSpectraBoth.C:31
 AddTaskSpectraBoth.C:32
 AddTaskSpectraBoth.C:33
 AddTaskSpectraBoth.C:34
 AddTaskSpectraBoth.C:35
 AddTaskSpectraBoth.C:36
 AddTaskSpectraBoth.C:37
 AddTaskSpectraBoth.C:38
 AddTaskSpectraBoth.C:39
 AddTaskSpectraBoth.C:40
 AddTaskSpectraBoth.C:41
 AddTaskSpectraBoth.C:42
 AddTaskSpectraBoth.C:43
 AddTaskSpectraBoth.C:44
 AddTaskSpectraBoth.C:45
 AddTaskSpectraBoth.C:46
 AddTaskSpectraBoth.C:47
 AddTaskSpectraBoth.C:48
 AddTaskSpectraBoth.C:49
 AddTaskSpectraBoth.C:50
 AddTaskSpectraBoth.C:51
 AddTaskSpectraBoth.C:52
 AddTaskSpectraBoth.C:53
 AddTaskSpectraBoth.C:54
 AddTaskSpectraBoth.C:55
 AddTaskSpectraBoth.C:56
 AddTaskSpectraBoth.C:57
 AddTaskSpectraBoth.C:58
 AddTaskSpectraBoth.C:59
 AddTaskSpectraBoth.C:60
 AddTaskSpectraBoth.C:61
 AddTaskSpectraBoth.C:62
 AddTaskSpectraBoth.C:63
 AddTaskSpectraBoth.C:64
 AddTaskSpectraBoth.C:65
 AddTaskSpectraBoth.C:66
 AddTaskSpectraBoth.C:67
 AddTaskSpectraBoth.C:68
 AddTaskSpectraBoth.C:69
 AddTaskSpectraBoth.C:70
 AddTaskSpectraBoth.C:71
 AddTaskSpectraBoth.C:72
 AddTaskSpectraBoth.C:73
 AddTaskSpectraBoth.C:74
 AddTaskSpectraBoth.C:75
 AddTaskSpectraBoth.C:76
 AddTaskSpectraBoth.C:77
 AddTaskSpectraBoth.C:78
 AddTaskSpectraBoth.C:79
 AddTaskSpectraBoth.C:80
 AddTaskSpectraBoth.C:81
 AddTaskSpectraBoth.C:82
 AddTaskSpectraBoth.C:83
 AddTaskSpectraBoth.C:84
 AddTaskSpectraBoth.C:85
 AddTaskSpectraBoth.C:86
 AddTaskSpectraBoth.C:87
 AddTaskSpectraBoth.C:88
 AddTaskSpectraBoth.C:89
 AddTaskSpectraBoth.C:90
 AddTaskSpectraBoth.C:91
 AddTaskSpectraBoth.C:92
 AddTaskSpectraBoth.C:93
 AddTaskSpectraBoth.C:94
 AddTaskSpectraBoth.C:95
 AddTaskSpectraBoth.C:96
 AddTaskSpectraBoth.C:97
 AddTaskSpectraBoth.C:98
 AddTaskSpectraBoth.C:99
 AddTaskSpectraBoth.C:100
 AddTaskSpectraBoth.C:101
 AddTaskSpectraBoth.C:102
 AddTaskSpectraBoth.C:103
 AddTaskSpectraBoth.C:104
 AddTaskSpectraBoth.C:105
 AddTaskSpectraBoth.C:106
 AddTaskSpectraBoth.C:107
 AddTaskSpectraBoth.C:108
 AddTaskSpectraBoth.C:109
 AddTaskSpectraBoth.C:110
 AddTaskSpectraBoth.C:111
 AddTaskSpectraBoth.C:112
 AddTaskSpectraBoth.C:113
 AddTaskSpectraBoth.C:114
 AddTaskSpectraBoth.C:115
 AddTaskSpectraBoth.C:116
 AddTaskSpectraBoth.C:117
 AddTaskSpectraBoth.C:118
 AddTaskSpectraBoth.C:119
 AddTaskSpectraBoth.C:120
 AddTaskSpectraBoth.C:121
 AddTaskSpectraBoth.C:122