ROOT logo
AliAnalysisTask *AddTaskJPSIFilter(TString period="", Bool_t storeLS = kFALSE, Bool_t hasMC_aod = kFALSE){
  //get the current analysis manager
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    Error("AddTaskJPSIFilter", "No analysis manager found.");
    return 0;
  }
  
  //check for output aod handler
  if (!mgr->GetOutputEventHandler()||mgr->GetOutputEventHandler()->IsA()!=AliAODHandler::Class()) {
    Warning("AddTaskJPSIFilter","No AOD output handler available. Not adding the task!");
    return 0;
  }

  //Do we have an MC handler?
  Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0)||hasMC_aod;
  
  //Do we run on AOD?
  Bool_t isAOD=mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();

  //Allow merging of the filtered aods on grid trains
  if(mgr->GetGridHandler()) {
    printf(" SET MERGE FILTERED AODs \n");
    //mgr->GetGridHandler()->SetMergeAOD(kTRUE);
  }



  //gROOT->LoadMacro("$ALICE_ROOT/PWGDQ/dielectron/macros/ConfigBJpsi_ff_PbPbFilter.C");
  //  gROOT->LoadMacro("$ALICE_ROOT/PWGDQ/dielectron/macrosJPSI/ConfigBJpsi_ff_PbPbFilter.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_nano_PbPb.C");
  AliDielectron *jpsi=ConfigJpsi_nano_PbPb(0,hasMC,period);
  
  if(isAOD) {
    //add options to AliAODHandler to duplicate input event
    AliAODHandler *aodHandler = (AliAODHandler*)mgr->GetOutputEventHandler();
    aodHandler->SetCreateNonStandardAOD();
    aodHandler->SetNeedsHeaderReplication();
    if(!period.Contains("LHC10h")) aodHandler->SetNeedsTOFHeaderReplication();
    aodHandler->SetNeedsVZEROReplication();
    /*aodHandler->SetNeedsTracksBranchReplication();
    aodHandler->SetNeedsCaloClustersBranchReplication();
    aodHandler->SetNeedsVerticesBranchReplication();
    aodHandler->SetNeedsCascadesBranchReplication();
    aodHandler->SetNeedsTrackletsBranchReplication();
    aodHandler->SetNeedsPMDClustersBranchReplication();
    aodHandler->SetNeedsJetsBranchReplication();
    aodHandler->SetNeedsFMDClustersBranchReplication();
    //aodHandler->SetNeedsMCParticlesBranchReplication();
    aodHandler->SetNeedsDimuonsBranchReplication();*/
    //    if(hasMC) aodHandler->SetNeedsV0sBranchReplication();
    if(hasMC) aodHandler->SetNeedsMCParticlesBranchReplication();
    jpsi->SetHasMC(hasMC);
  }
  
  //Create task and add it to the analysis manager
  AliAnalysisTaskDielectronFilter *task=new AliAnalysisTaskDielectronFilter("jpsi_DielectronFilter");
  task->SetTriggerMask(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral+AliVEvent::kEMCEGA+AliVEvent::kEMCEJE);
  //  task->SetTriggerMask(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral);
  if (!hasMC) task->UsePhysicsSelection();

  //   //Add event filter
  //   AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
  //   if(!hasMC) eventCuts->SetRequireVertex();
  //   if (isAOD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
  //   eventCuts->SetMinVtxContributors(1);
  //   eventCuts->SetVertexZ(-10.,10.);
  //   eventCuts->SetCentralityRange(0.0,90.0);
  //   task->SetEventFilter(eventCuts);

  task->SetDielectron(jpsi);
  if(storeLS) task->SetStoreLikeSignCandidates(storeLS);
  task->SetCreateNanoAODs(kTRUE);
  task->SetStoreEventsWithSingleTracks(kTRUE);
  //task->SetStoreHeader(kTRUE);
  mgr->AddTask(task);

  //----------------------
  //create data containers
  //----------------------
  
  
  TString containerName = mgr->GetCommonFileName();
  containerName += ":PWGDQ_dielectronFilter";
 
  //create output container
  
  AliAnalysisDataContainer *cOutputHist1 =
    mgr->CreateContainer("jpsi_FilterQA",
                         THashList::Class(),
                         AliAnalysisManager::kOutputContainer,
                         containerName.Data());
  
  AliAnalysisDataContainer *cOutputHist2 =
    mgr->CreateContainer("jpsi_FilterEventStat",
                         TH1D::Class(),
                         AliAnalysisManager::kOutputContainer,
                         containerName.Data());
  
  
  mgr->ConnectInput(task,  0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput(task, 0, mgr->GetCommonOutputContainer());
  mgr->ConnectOutput(task, 1, cOutputHist1);
  mgr->ConnectOutput(task, 2, cOutputHist2);
  
  return task;
}
 AddTaskJPSIFilter.C:1
 AddTaskJPSIFilter.C:2
 AddTaskJPSIFilter.C:3
 AddTaskJPSIFilter.C:4
 AddTaskJPSIFilter.C:5
 AddTaskJPSIFilter.C:6
 AddTaskJPSIFilter.C:7
 AddTaskJPSIFilter.C:8
 AddTaskJPSIFilter.C:9
 AddTaskJPSIFilter.C:10
 AddTaskJPSIFilter.C:11
 AddTaskJPSIFilter.C:12
 AddTaskJPSIFilter.C:13
 AddTaskJPSIFilter.C:14
 AddTaskJPSIFilter.C:15
 AddTaskJPSIFilter.C:16
 AddTaskJPSIFilter.C:17
 AddTaskJPSIFilter.C:18
 AddTaskJPSIFilter.C:19
 AddTaskJPSIFilter.C:20
 AddTaskJPSIFilter.C:21
 AddTaskJPSIFilter.C:22
 AddTaskJPSIFilter.C:23
 AddTaskJPSIFilter.C:24
 AddTaskJPSIFilter.C:25
 AddTaskJPSIFilter.C:26
 AddTaskJPSIFilter.C:27
 AddTaskJPSIFilter.C:28
 AddTaskJPSIFilter.C:29
 AddTaskJPSIFilter.C:30
 AddTaskJPSIFilter.C:31
 AddTaskJPSIFilter.C:32
 AddTaskJPSIFilter.C:33
 AddTaskJPSIFilter.C:34
 AddTaskJPSIFilter.C:35
 AddTaskJPSIFilter.C:36
 AddTaskJPSIFilter.C:37
 AddTaskJPSIFilter.C:38
 AddTaskJPSIFilter.C:39
 AddTaskJPSIFilter.C:40
 AddTaskJPSIFilter.C:41
 AddTaskJPSIFilter.C:42
 AddTaskJPSIFilter.C:43
 AddTaskJPSIFilter.C:44
 AddTaskJPSIFilter.C:45
 AddTaskJPSIFilter.C:46
 AddTaskJPSIFilter.C:47
 AddTaskJPSIFilter.C:48
 AddTaskJPSIFilter.C:49
 AddTaskJPSIFilter.C:50
 AddTaskJPSIFilter.C:51
 AddTaskJPSIFilter.C:52
 AddTaskJPSIFilter.C:53
 AddTaskJPSIFilter.C:54
 AddTaskJPSIFilter.C:55
 AddTaskJPSIFilter.C:56
 AddTaskJPSIFilter.C:57
 AddTaskJPSIFilter.C:58
 AddTaskJPSIFilter.C:59
 AddTaskJPSIFilter.C:60
 AddTaskJPSIFilter.C:61
 AddTaskJPSIFilter.C:62
 AddTaskJPSIFilter.C:63
 AddTaskJPSIFilter.C:64
 AddTaskJPSIFilter.C:65
 AddTaskJPSIFilter.C:66
 AddTaskJPSIFilter.C:67
 AddTaskJPSIFilter.C:68
 AddTaskJPSIFilter.C:69
 AddTaskJPSIFilter.C:70
 AddTaskJPSIFilter.C:71
 AddTaskJPSIFilter.C:72
 AddTaskJPSIFilter.C:73
 AddTaskJPSIFilter.C:74
 AddTaskJPSIFilter.C:75
 AddTaskJPSIFilter.C:76
 AddTaskJPSIFilter.C:77
 AddTaskJPSIFilter.C:78
 AddTaskJPSIFilter.C:79
 AddTaskJPSIFilter.C:80
 AddTaskJPSIFilter.C:81
 AddTaskJPSIFilter.C:82
 AddTaskJPSIFilter.C:83
 AddTaskJPSIFilter.C:84
 AddTaskJPSIFilter.C:85
 AddTaskJPSIFilter.C:86
 AddTaskJPSIFilter.C:87
 AddTaskJPSIFilter.C:88
 AddTaskJPSIFilter.C:89
 AddTaskJPSIFilter.C:90
 AddTaskJPSIFilter.C:91
 AddTaskJPSIFilter.C:92
 AddTaskJPSIFilter.C:93
 AddTaskJPSIFilter.C:94
 AddTaskJPSIFilter.C:95
 AddTaskJPSIFilter.C:96
 AddTaskJPSIFilter.C:97
 AddTaskJPSIFilter.C:98
 AddTaskJPSIFilter.C:99
 AddTaskJPSIFilter.C:100
 AddTaskJPSIFilter.C:101
 AddTaskJPSIFilter.C:102
 AddTaskJPSIFilter.C:103
 AddTaskJPSIFilter.C:104
 AddTaskJPSIFilter.C:105
 AddTaskJPSIFilter.C:106
 AddTaskJPSIFilter.C:107
 AddTaskJPSIFilter.C:108