ROOT logo
AliAnalysisTask *AddTaskDielectronTaku(Float_t centrMin, Float_t centrMax, 
				       TString fileName, TString suffixName="", 
				       Bool_t hasMC_aod = kFALSE)
{
  //get the current analysis manager
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskDielectron", "No analysis manager found.");
    return NULL;
  }
  if (!mgr->GetInputEventHandler()) {
    ::Error("AddTaskDielectron", "This task requires an input event handler");
    return NULL;
  }

  //Do we have an MC handler?
  Bool_t hasMC=(mgr->GetMCtruthEventHandler()!=0x0);
  /*
  TString configFile("./ConfigJpsi2eeDataTaku.C");
  if (hasMC){
    configFile="$ALICE_ROOT/PWG3/dielectron/macros/ConfigJpsi2eeEff.C";
  }
  */
  Bool_t isAOD=mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();

  //Add event filter
  AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts(
							       Form("eventCuts_%s",suffixName.Data()),
							       "Vertex Track && |vtxZ|<10 && ncontrib>0"
							       );
  eventCuts->SetCentralityRange(centrMin,centrMax);
  eventCuts->SetRequireVertex();
  eventCuts->SetMinVtxContributors(1);
  eventCuts->SetVertexZ(-10.,10.);





  //create task and add it to the manager
  //cout<<"AliAnalysisTaskMultiDielectron : "<<configFile.Data()<<endl;
  AliAnalysisTaskMultiDielectronNewTaku *task=new AliAnalysisTaskMultiDielectronNewTaku(
											Form("MultiDie_%s",
											     suffixName.Data()),
											eventCuts
											);



  //load dielectron configuration file
  //cout<<"LoadMacro="<<configFile.Data()<<endl;

  //gROOT->LoadMacro(configFile.Data());
  //cout<<"LoadMacro End="<<configFile.Data()<<endl;
  //add dielectron analysis with different cuts to the task
  for (Int_t i=0; i<nDie; ++i){ //nDie defined in config file
    AliDielectronTaku *jpsi=ConfigJpsi2ee(i,isAOD);
    //jpsi->SetPreFilterAllSigns(kTRUE);
    if (isAOD) jpsi->SetHasMC(hasMC_aod);
    if (jpsi) task->AddDielectron(jpsi);
  }

  // add event filter
  task->SetEventFilter(eventCuts);

  // pileup rejection
  task->SetRejectPileup();






  //========= Add tender to the ANALYSIS manager and set default storage =====
  AliTender *tender=new AliTender("AnalysisTender");
  tender->SetCheckEventSelection(kFALSE);
  //tender->SetDefaultCDBStorage("raw://");
  tender->SetDefaultCDBStorage("alien://folder=/alice/data/2011/OCDB");
  //========= Attach TOF supply ======
  AliTOFTenderSupply *TOFtender = new AliTOFTenderSupply("TOFtender");
  TOFtender->SetTOFres(80);
  TOFtender->SetCorrectExpTimes(kFALSE);
  //TOFtender->SetTheorExpTimes(kTRUE);
  ///tender->AddSupply(TOFtender);

  //========= Attach TPC supply ======
  AliTPCTenderSupply *tpcSupply=new AliTPCTenderSupply("TPCtender");
  tpcSupply->SetDebugLevel(2);
  //tpcSupply->SetMip(50.);
  ///tender->AddSupply(tpcSupply);

  ///mgr->AddTask(tender);


  //======== Event plane =============
  AliEPSelectionTask *eventplaneTask = new AliEPSelectionTask("EventplaneSelection");
  eventplaneTask->SelectCollisionCandidates(AliVEvent::kMB);
  eventplaneTask->SetTrackType("TPC");
  eventplaneTask->SetUsePtWeight();
  ///mgr->AddTask(eventplaneTask);

  ///mgr->AddTask(task);

  //----------------------
  //create data containers
  //----------------------
  //cout<<"----- "<<mgr->GetCommonFileName()<<" + "<<fileName<<endl;
  TString containerName = fileName+mgr->GetCommonFileName();
  containerName += ":PWG3_dielectron";
    
  //create output container
									  
  AliAnalysisDataContainer *cOutputHist1 =
    mgr->CreateContainer(Form("jpsi_QA_%s",suffixName.Data()), TList::Class(), AliAnalysisManager::kOutputContainer,
                         containerName.Data());
  
  AliAnalysisDataContainer *cOutputHist2 =
    mgr->CreateContainer(Form("jpsi_CF_%s",suffixName.Data()), TList::Class(), AliAnalysisManager::kOutputContainer,
			 containerName.Data());

  AliAnalysisDataContainer *cOutputHist3 =
    mgr->CreateContainer(Form("jpsi_EventStat_%s",suffixName.Data()), 
			 TH1D::Class(), 
			 AliAnalysisManager::kOutputContainer,
                         containerName.Data());
  
  AliAnalysisDataContainer *coutput1 =
    mgr->CreateContainer(Form("single_tree_%s", suffixName.Data()),
			 //TList::Class(),
			 TTree::Class(),
			 AliAnalysisManager::kOutputContainer,
                         containerName.Data());

  AliAnalysisDataContainer *coutput_ep1 = mgr->CreateContainer("EPStat",
							       TList::Class(), AliAnalysisManager::kOutputContainer,
							       "EventStat_temp.root");


   AliAnalysisDataContainer *coutput_td1 =
     mgr->CreateContainer("tender_event", AliESDEvent::Class(),
			  AliAnalysisManager::kExchangeContainer,"default_tender");
 

  cout<<"containerName.Data = "<<containerName.Data()<<endl;

  //  mgr->ConnectInput(eventplaneTask, 0, mgr->GetCommonInputContainer());
  //mgr->ConnectOutput(eventplaneTask,1,coutput_ep1);


  //  mgr->ConnectInput(tender, 0, mgr->GetCommonInputContainer());
  //  mgr->ConnectOutput(tender,1,coutput_td1);


  

  mgr->ConnectInput(task,  0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput(task, 1, cOutputHist1);
  mgr->ConnectOutput(task, 2, cOutputHist2);
  mgr->ConnectOutput(task, 3, cOutputHist3);
  mgr->ConnectOutput(task, 4, coutput1);



  return task;
}
 AddTaskDielectronTaku.C:1
 AddTaskDielectronTaku.C:2
 AddTaskDielectronTaku.C:3
 AddTaskDielectronTaku.C:4
 AddTaskDielectronTaku.C:5
 AddTaskDielectronTaku.C:6
 AddTaskDielectronTaku.C:7
 AddTaskDielectronTaku.C:8
 AddTaskDielectronTaku.C:9
 AddTaskDielectronTaku.C:10
 AddTaskDielectronTaku.C:11
 AddTaskDielectronTaku.C:12
 AddTaskDielectronTaku.C:13
 AddTaskDielectronTaku.C:14
 AddTaskDielectronTaku.C:15
 AddTaskDielectronTaku.C:16
 AddTaskDielectronTaku.C:17
 AddTaskDielectronTaku.C:18
 AddTaskDielectronTaku.C:19
 AddTaskDielectronTaku.C:20
 AddTaskDielectronTaku.C:21
 AddTaskDielectronTaku.C:22
 AddTaskDielectronTaku.C:23
 AddTaskDielectronTaku.C:24
 AddTaskDielectronTaku.C:25
 AddTaskDielectronTaku.C:26
 AddTaskDielectronTaku.C:27
 AddTaskDielectronTaku.C:28
 AddTaskDielectronTaku.C:29
 AddTaskDielectronTaku.C:30
 AddTaskDielectronTaku.C:31
 AddTaskDielectronTaku.C:32
 AddTaskDielectronTaku.C:33
 AddTaskDielectronTaku.C:34
 AddTaskDielectronTaku.C:35
 AddTaskDielectronTaku.C:36
 AddTaskDielectronTaku.C:37
 AddTaskDielectronTaku.C:38
 AddTaskDielectronTaku.C:39
 AddTaskDielectronTaku.C:40
 AddTaskDielectronTaku.C:41
 AddTaskDielectronTaku.C:42
 AddTaskDielectronTaku.C:43
 AddTaskDielectronTaku.C:44
 AddTaskDielectronTaku.C:45
 AddTaskDielectronTaku.C:46
 AddTaskDielectronTaku.C:47
 AddTaskDielectronTaku.C:48
 AddTaskDielectronTaku.C:49
 AddTaskDielectronTaku.C:50
 AddTaskDielectronTaku.C:51
 AddTaskDielectronTaku.C:52
 AddTaskDielectronTaku.C:53
 AddTaskDielectronTaku.C:54
 AddTaskDielectronTaku.C:55
 AddTaskDielectronTaku.C:56
 AddTaskDielectronTaku.C:57
 AddTaskDielectronTaku.C:58
 AddTaskDielectronTaku.C:59
 AddTaskDielectronTaku.C:60
 AddTaskDielectronTaku.C:61
 AddTaskDielectronTaku.C:62
 AddTaskDielectronTaku.C:63
 AddTaskDielectronTaku.C:64
 AddTaskDielectronTaku.C:65
 AddTaskDielectronTaku.C:66
 AddTaskDielectronTaku.C:67
 AddTaskDielectronTaku.C:68
 AddTaskDielectronTaku.C:69
 AddTaskDielectronTaku.C:70
 AddTaskDielectronTaku.C:71
 AddTaskDielectronTaku.C:72
 AddTaskDielectronTaku.C:73
 AddTaskDielectronTaku.C:74
 AddTaskDielectronTaku.C:75
 AddTaskDielectronTaku.C:76
 AddTaskDielectronTaku.C:77
 AddTaskDielectronTaku.C:78
 AddTaskDielectronTaku.C:79
 AddTaskDielectronTaku.C:80
 AddTaskDielectronTaku.C:81
 AddTaskDielectronTaku.C:82
 AddTaskDielectronTaku.C:83
 AddTaskDielectronTaku.C:84
 AddTaskDielectronTaku.C:85
 AddTaskDielectronTaku.C:86
 AddTaskDielectronTaku.C:87
 AddTaskDielectronTaku.C:88
 AddTaskDielectronTaku.C:89
 AddTaskDielectronTaku.C:90
 AddTaskDielectronTaku.C:91
 AddTaskDielectronTaku.C:92
 AddTaskDielectronTaku.C:93
 AddTaskDielectronTaku.C:94
 AddTaskDielectronTaku.C:95
 AddTaskDielectronTaku.C:96
 AddTaskDielectronTaku.C:97
 AddTaskDielectronTaku.C:98
 AddTaskDielectronTaku.C:99
 AddTaskDielectronTaku.C:100
 AddTaskDielectronTaku.C:101
 AddTaskDielectronTaku.C:102
 AddTaskDielectronTaku.C:103
 AddTaskDielectronTaku.C:104
 AddTaskDielectronTaku.C:105
 AddTaskDielectronTaku.C:106
 AddTaskDielectronTaku.C:107
 AddTaskDielectronTaku.C:108
 AddTaskDielectronTaku.C:109
 AddTaskDielectronTaku.C:110
 AddTaskDielectronTaku.C:111
 AddTaskDielectronTaku.C:112
 AddTaskDielectronTaku.C:113
 AddTaskDielectronTaku.C:114
 AddTaskDielectronTaku.C:115
 AddTaskDielectronTaku.C:116
 AddTaskDielectronTaku.C:117
 AddTaskDielectronTaku.C:118
 AddTaskDielectronTaku.C:119
 AddTaskDielectronTaku.C:120
 AddTaskDielectronTaku.C:121
 AddTaskDielectronTaku.C:122
 AddTaskDielectronTaku.C:123
 AddTaskDielectronTaku.C:124
 AddTaskDielectronTaku.C:125
 AddTaskDielectronTaku.C:126
 AddTaskDielectronTaku.C:127
 AddTaskDielectronTaku.C:128
 AddTaskDielectronTaku.C:129
 AddTaskDielectronTaku.C:130
 AddTaskDielectronTaku.C:131
 AddTaskDielectronTaku.C:132
 AddTaskDielectronTaku.C:133
 AddTaskDielectronTaku.C:134
 AddTaskDielectronTaku.C:135
 AddTaskDielectronTaku.C:136
 AddTaskDielectronTaku.C:137
 AddTaskDielectronTaku.C:138
 AddTaskDielectronTaku.C:139
 AddTaskDielectronTaku.C:140
 AddTaskDielectronTaku.C:141
 AddTaskDielectronTaku.C:142
 AddTaskDielectronTaku.C:143
 AddTaskDielectronTaku.C:144
 AddTaskDielectronTaku.C:145
 AddTaskDielectronTaku.C:146
 AddTaskDielectronTaku.C:147
 AddTaskDielectronTaku.C:148
 AddTaskDielectronTaku.C:149
 AddTaskDielectronTaku.C:150
 AddTaskDielectronTaku.C:151
 AddTaskDielectronTaku.C:152
 AddTaskDielectronTaku.C:153
 AddTaskDielectronTaku.C:154
 AddTaskDielectronTaku.C:155
 AddTaskDielectronTaku.C:156
 AddTaskDielectronTaku.C:157
 AddTaskDielectronTaku.C:158
 AddTaskDielectronTaku.C:159
 AddTaskDielectronTaku.C:160
 AddTaskDielectronTaku.C:161
 AddTaskDielectronTaku.C:162
 AddTaskDielectronTaku.C:163
 AddTaskDielectronTaku.C:164
 AddTaskDielectronTaku.C:165
 AddTaskDielectronTaku.C:166