ROOT logo
AliAnalysisTaskCaloFilter * AddTaskCaloFilter(const Bool_t  bias      = kTRUE, 
                                              const Bool_t  mc        = kFALSE,
                                              const Float_t minE      = 6, 
                                              const Float_t minN      = 3, 
                                              const Float_t vz        = 10.,
                                              const Int_t   opt       = AliAnalysisTaskCaloFilter::kBoth, //kPHOS, kEMCAL or kBoth
                                              const Bool_t  correct   = kFALSE,
                                              const Bool_t  fillTrack = kTRUE,
                                              const Bool_t  fillAOD   = kTRUE)
{

  // Get the pointer to the existing analysis manager via the static access method.
  //==============================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) 
  {
    ::Error("AddTaskCaloFilter", "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("AddTaskCaloFilter", "This task requires an input event handler");
    return NULL;
  }
  
  AliAnalysisTaskCaloFilter * filter = new AliAnalysisTaskCaloFilter("CaloFilter");
  
  //filter->SetDebugLevel(2);
  
  filter->SetCaloFilter(opt); //kPHOS, kEMCAL or kBoth
  
  filter->SetVzCut(vz);
  
  if(mc)
  {
    filter->SetEventSelection(1,0,0); // Select events depending on EMCAL, PHOS and tracks criteria
    filter->SwitchOnAcceptAllMBEvent();
    
    filter->SwitchOnFillMCParticles();
    
    filter->SetEMCALEnergyCut(minE);
    filter->SetEMCALNcellsCut(minN);
    
    filter->SetPHOSEnergyCut(minE);
    filter->SetPHOSNcellsCut(minN);
    
    filter->SetTrackPtCut(minE);
  }
  else if(bias) // select events with significant signal in EMCAL or TPC or PHOS
  {
    filter->SetEventSelection(1,0,0); // Select events depending on EMCAL, PHOS and tracks criteria
    filter->SwitchOnAcceptAllMBEvent();
    
    filter->SetEMCALEnergyCut(minE);
    filter->SetEMCALNcellsCut(minN);
 
    filter->SetPHOSEnergyCut(minE);
    filter->SetPHOSNcellsCut(minN);
    
    filter->SetTrackPtCut(minE);

    //filter->SetMBTriggerMask(AliVEvent::kAnyINT);
    filter->SetMBTriggerMask(AliVEvent::kMB); // not working for all productions
    
    filter->SelectCollisionCandidates(AliVEvent::kAny) ;
    
    printf("--- Select events with 1 cluster with at least %2.2f GeV and N = %d ---\n",minE,minN);
  }
  else // Do not bias the signal in EMCAL, select MB events 
  {
    
    filter->SetEventSelection(0,0,0);
    filter->SwitchOnAcceptAllMBEvent();
    
    filter->SetEMCALEnergyCut(-1);
    filter->SetEMCALNcellsCut(0);  
    
    filter->SetPHOSEnergyCut(-1);
    filter->SetPHOSNcellsCut(0); 
    
    filter->SetTrackPtCut(-1);
    
    filter->SelectCollisionCandidates(AliVEvent::kMB);// | AliVEvent::kCentral | AliVEvent::kSemiCentral ) ;
    
    printf("--- Select Min Bias events ---\n");
  }

  
  //    filter->SelectCollisionCandidates(AliVEvent::kAny) ;
      
  if(correct)   filter->SwitchOnClusterCorrection();
  else          filter->SwitchOffClusterCorrection();  
  
  AliEMCALRecoUtils * reco = filter->GetEMCALRecoUtils();
  reco->SwitchOnRejectExoticCluster() ;
  reco->SetExoticCellFractionCut(0.97);
  reco->SetExoticCellMinAmplitudeCut(2.);

  if(fillTrack) { filter->SwitchOnFillTracks()  ; filter->SwitchOnFillHybridTracks()  ; }
  else          { filter->SwitchOffFillTracks() ; filter->SwitchOffFillHybridTracks() ; }
  
  filter->SwitchOffFillv0s() ; // Put ON if you know what you do.
  
  filter->SwitchOnFillVZERO(); // Be able to recalculate centrality and event plane afterwards even it is stored in header
  
  if(fillAOD)   filter->SwitchOnFillAODFile();
  else          filter->SwitchOffFillAODFile();
    
  filter->PrintInfo();
  
  mgr->AddTask(filter);
  
  // Create containers for input/output
  AliAnalysisDataContainer *cinput1  = mgr->GetCommonInputContainer();
  AliAnalysisDataContainer *coutput1 = mgr->GetCommonOutputContainer();
    
  mgr->ConnectInput  (filter, 0, cinput1);
  mgr->ConnectOutput (filter, 0, coutput1 );
  
  return filter;

 AddTaskCaloFilter.C:1
 AddTaskCaloFilter.C:2
 AddTaskCaloFilter.C:3
 AddTaskCaloFilter.C:4
 AddTaskCaloFilter.C:5
 AddTaskCaloFilter.C:6
 AddTaskCaloFilter.C:7
 AddTaskCaloFilter.C:8
 AddTaskCaloFilter.C:9
 AddTaskCaloFilter.C:10
 AddTaskCaloFilter.C:11
 AddTaskCaloFilter.C:12
 AddTaskCaloFilter.C:13
 AddTaskCaloFilter.C:14
 AddTaskCaloFilter.C:15
 AddTaskCaloFilter.C:16
 AddTaskCaloFilter.C:17
 AddTaskCaloFilter.C:18
 AddTaskCaloFilter.C:19
 AddTaskCaloFilter.C:20
 AddTaskCaloFilter.C:21
 AddTaskCaloFilter.C:22
 AddTaskCaloFilter.C:23
 AddTaskCaloFilter.C:24
 AddTaskCaloFilter.C:25
 AddTaskCaloFilter.C:26
 AddTaskCaloFilter.C:27
 AddTaskCaloFilter.C:28
 AddTaskCaloFilter.C:29
 AddTaskCaloFilter.C:30
 AddTaskCaloFilter.C:31
 AddTaskCaloFilter.C:32
 AddTaskCaloFilter.C:33
 AddTaskCaloFilter.C:34
 AddTaskCaloFilter.C:35
 AddTaskCaloFilter.C:36
 AddTaskCaloFilter.C:37
 AddTaskCaloFilter.C:38
 AddTaskCaloFilter.C:39
 AddTaskCaloFilter.C:40
 AddTaskCaloFilter.C:41
 AddTaskCaloFilter.C:42
 AddTaskCaloFilter.C:43
 AddTaskCaloFilter.C:44
 AddTaskCaloFilter.C:45
 AddTaskCaloFilter.C:46
 AddTaskCaloFilter.C:47
 AddTaskCaloFilter.C:48
 AddTaskCaloFilter.C:49
 AddTaskCaloFilter.C:50
 AddTaskCaloFilter.C:51
 AddTaskCaloFilter.C:52
 AddTaskCaloFilter.C:53
 AddTaskCaloFilter.C:54
 AddTaskCaloFilter.C:55
 AddTaskCaloFilter.C:56
 AddTaskCaloFilter.C:57
 AddTaskCaloFilter.C:58
 AddTaskCaloFilter.C:59
 AddTaskCaloFilter.C:60
 AddTaskCaloFilter.C:61
 AddTaskCaloFilter.C:62
 AddTaskCaloFilter.C:63
 AddTaskCaloFilter.C:64
 AddTaskCaloFilter.C:65
 AddTaskCaloFilter.C:66
 AddTaskCaloFilter.C:67
 AddTaskCaloFilter.C:68
 AddTaskCaloFilter.C:69
 AddTaskCaloFilter.C:70
 AddTaskCaloFilter.C:71
 AddTaskCaloFilter.C:72
 AddTaskCaloFilter.C:73
 AddTaskCaloFilter.C:74
 AddTaskCaloFilter.C:75
 AddTaskCaloFilter.C:76
 AddTaskCaloFilter.C:77
 AddTaskCaloFilter.C:78
 AddTaskCaloFilter.C:79
 AddTaskCaloFilter.C:80
 AddTaskCaloFilter.C:81
 AddTaskCaloFilter.C:82
 AddTaskCaloFilter.C:83
 AddTaskCaloFilter.C:84
 AddTaskCaloFilter.C:85
 AddTaskCaloFilter.C:86
 AddTaskCaloFilter.C:87
 AddTaskCaloFilter.C:88
 AddTaskCaloFilter.C:89
 AddTaskCaloFilter.C:90
 AddTaskCaloFilter.C:91
 AddTaskCaloFilter.C:92
 AddTaskCaloFilter.C:93
 AddTaskCaloFilter.C:94
 AddTaskCaloFilter.C:95
 AddTaskCaloFilter.C:96
 AddTaskCaloFilter.C:97
 AddTaskCaloFilter.C:98
 AddTaskCaloFilter.C:99
 AddTaskCaloFilter.C:100
 AddTaskCaloFilter.C:101
 AddTaskCaloFilter.C:102
 AddTaskCaloFilter.C:103
 AddTaskCaloFilter.C:104
 AddTaskCaloFilter.C:105
 AddTaskCaloFilter.C:106
 AddTaskCaloFilter.C:107
 AddTaskCaloFilter.C:108
 AddTaskCaloFilter.C:109
 AddTaskCaloFilter.C:110
 AddTaskCaloFilter.C:111
 AddTaskCaloFilter.C:112
 AddTaskCaloFilter.C:113
 AddTaskCaloFilter.C:114
 AddTaskCaloFilter.C:115
 AddTaskCaloFilter.C:116
 AddTaskCaloFilter.C:117
 AddTaskCaloFilter.C:118
 AddTaskCaloFilter.C:119
 AddTaskCaloFilter.C:120
 AddTaskCaloFilter.C:121
 AddTaskCaloFilter.C:122
 AddTaskCaloFilter.C:123
 AddTaskCaloFilter.C:124
 AddTaskCaloFilter.C:125