ROOT logo
#ifndef ALIANALYSISTASKESDMCLABELADDITION_H
#define ALIANALYSISTASKESDMCLABELADDITION_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */ 

#include <TString.h>
#include "AliAnalysisTaskSE.h"

class AliMUONTrack;
class AliMUONVTrackStore;

class AliAnalysisTaskESDMCLabelAddition : public AliAnalysisTaskSE
{
  
public:
  AliAnalysisTaskESDMCLabelAddition();
  AliAnalysisTaskESDMCLabelAddition(const char* name);
  virtual ~AliAnalysisTaskESDMCLabelAddition() {;}
  
  // Implementation of interface methods
  virtual void UserCreateOutputObjects();
  virtual void NotifyRun();
  virtual void UserExec(Option_t *option);
  virtual void Terminate(Option_t *option);
  
  /// Set location of the default OCDB storage (if not set use "raw://")
  void SetDefaultStorage(const char* ocdbPath) { fDefaultStorage = ocdbPath; }
  
  /// Set the OCDB path to the alignment file used in the reco (if not set use default storage)
  void SetAlignStorage(const char* ocdbPath) { fAlignOCDBpath = ocdbPath; }
  
  /// Set the OCDB path to the recoParam file used in the reco (if not set use default storage)
  void SetRecoParamStorage(const char* ocdbPath) { fRecoParamOCDBpath = ocdbPath; }
  
  /// Set the sigma cut to associate clusters with TrackRefs by position (instead of using recoParam)
  void SetExternalTrkSigmaCut(Double_t cut) { fExternalTrkSigmaCut = cut; }
  
  /// Set the sigma cut to associate trigger to triggerable track by position (instead of using recoParam)
  void SetExternalTrgSigmaCut(Double_t cut) { fExternalTrgSigmaCut = cut; }
  
  /// Set the flag to consider decays as fake tracks or not
  void DecayAsFake(Bool_t flag = kTRUE) { fDecayAsFake = flag; }
  
  
private:
  
  AliAnalysisTaskESDMCLabelAddition(const AliAnalysisTaskESDMCLabelAddition&);
  AliAnalysisTaskESDMCLabelAddition& operator=(const AliAnalysisTaskESDMCLabelAddition&);
  
  // Check whether this combination of clusters correspond to a decaying particle or not
  Int_t IsDecay(Int_t nClusters, Int_t *chId, Int_t *labels, Bool_t &isReconstructible, Int_t &lastCh) const;
  
  // Try to match clusters between track and trackRef and add the corresponding MC labels to the arrays
  void AddCompatibleClusters(const AliMUONTrack &track, const AliMUONTrack &trackRef,
			     TArrayI *labels, Int_t *nLabels) const;
  
  // Check whether this track correspond to a decaying particle by using cluster MC labels
  Int_t IsDecayByLabel(const AliMUONTrack &track, Bool_t &isReconstructible, Int_t &lastCh) const;
  
  // Check whether this track correspond to a decaying particle by comparing clusters position
  Int_t IsDecayByPosition(const AliMUONTrack &track, const AliMUONVTrackStore &trackRefStore,
			  Bool_t &isReconstructible, Int_t &lastCh) const;
  
  TString  fDefaultStorage;       ///< location of the default OCDB storage
  TString  fAlignOCDBpath;        ///< OCDB path to the alignment file
  TString  fRecoParamOCDBpath;    ///< OCDB path to the recoParam file
  UInt_t   fRequestedStationMask; //!< mask of requested stations
  Bool_t   fRequest2ChInSameSt45; //!< 2 fired chambers requested in the same station (4 or 5) or not
  Double_t fExternalTrkSigmaCut;  ///< sigma cut to associate clusters with TrackRefs (instead of using recoParam)
  Double_t fSigmaCut;             //!< sigma cut to associate clusters with TrackRefs
  Double_t fExternalTrgSigmaCut;  ///< sigma cut to associate trigger to triggerable track (instead of using recoParam)
  Double_t fSigmaCutTrig;         //!< sigma cut to associate trigger to triggerable track
  Bool_t   fDecayAsFake;          ///< consider decays as fake tracks or not
  
  ClassDef(AliAnalysisTaskESDMCLabelAddition, 5); // Analysis task for standard ESD filtering
  
};

#endif

 AliAnalysisTaskESDMCLabelAddition.h:1
 AliAnalysisTaskESDMCLabelAddition.h:2
 AliAnalysisTaskESDMCLabelAddition.h:3
 AliAnalysisTaskESDMCLabelAddition.h:4
 AliAnalysisTaskESDMCLabelAddition.h:5
 AliAnalysisTaskESDMCLabelAddition.h:6
 AliAnalysisTaskESDMCLabelAddition.h:7
 AliAnalysisTaskESDMCLabelAddition.h:8
 AliAnalysisTaskESDMCLabelAddition.h:9
 AliAnalysisTaskESDMCLabelAddition.h:10
 AliAnalysisTaskESDMCLabelAddition.h:11
 AliAnalysisTaskESDMCLabelAddition.h:12
 AliAnalysisTaskESDMCLabelAddition.h:13
 AliAnalysisTaskESDMCLabelAddition.h:14
 AliAnalysisTaskESDMCLabelAddition.h:15
 AliAnalysisTaskESDMCLabelAddition.h:16
 AliAnalysisTaskESDMCLabelAddition.h:17
 AliAnalysisTaskESDMCLabelAddition.h:18
 AliAnalysisTaskESDMCLabelAddition.h:19
 AliAnalysisTaskESDMCLabelAddition.h:20
 AliAnalysisTaskESDMCLabelAddition.h:21
 AliAnalysisTaskESDMCLabelAddition.h:22
 AliAnalysisTaskESDMCLabelAddition.h:23
 AliAnalysisTaskESDMCLabelAddition.h:24
 AliAnalysisTaskESDMCLabelAddition.h:25
 AliAnalysisTaskESDMCLabelAddition.h:26
 AliAnalysisTaskESDMCLabelAddition.h:27
 AliAnalysisTaskESDMCLabelAddition.h:28
 AliAnalysisTaskESDMCLabelAddition.h:29
 AliAnalysisTaskESDMCLabelAddition.h:30
 AliAnalysisTaskESDMCLabelAddition.h:31
 AliAnalysisTaskESDMCLabelAddition.h:32
 AliAnalysisTaskESDMCLabelAddition.h:33
 AliAnalysisTaskESDMCLabelAddition.h:34
 AliAnalysisTaskESDMCLabelAddition.h:35
 AliAnalysisTaskESDMCLabelAddition.h:36
 AliAnalysisTaskESDMCLabelAddition.h:37
 AliAnalysisTaskESDMCLabelAddition.h:38
 AliAnalysisTaskESDMCLabelAddition.h:39
 AliAnalysisTaskESDMCLabelAddition.h:40
 AliAnalysisTaskESDMCLabelAddition.h:41
 AliAnalysisTaskESDMCLabelAddition.h:42
 AliAnalysisTaskESDMCLabelAddition.h:43
 AliAnalysisTaskESDMCLabelAddition.h:44
 AliAnalysisTaskESDMCLabelAddition.h:45
 AliAnalysisTaskESDMCLabelAddition.h:46
 AliAnalysisTaskESDMCLabelAddition.h:47
 AliAnalysisTaskESDMCLabelAddition.h:48
 AliAnalysisTaskESDMCLabelAddition.h:49
 AliAnalysisTaskESDMCLabelAddition.h:50
 AliAnalysisTaskESDMCLabelAddition.h:51
 AliAnalysisTaskESDMCLabelAddition.h:52
 AliAnalysisTaskESDMCLabelAddition.h:53
 AliAnalysisTaskESDMCLabelAddition.h:54
 AliAnalysisTaskESDMCLabelAddition.h:55
 AliAnalysisTaskESDMCLabelAddition.h:56
 AliAnalysisTaskESDMCLabelAddition.h:57
 AliAnalysisTaskESDMCLabelAddition.h:58
 AliAnalysisTaskESDMCLabelAddition.h:59
 AliAnalysisTaskESDMCLabelAddition.h:60
 AliAnalysisTaskESDMCLabelAddition.h:61
 AliAnalysisTaskESDMCLabelAddition.h:62
 AliAnalysisTaskESDMCLabelAddition.h:63
 AliAnalysisTaskESDMCLabelAddition.h:64
 AliAnalysisTaskESDMCLabelAddition.h:65
 AliAnalysisTaskESDMCLabelAddition.h:66
 AliAnalysisTaskESDMCLabelAddition.h:67
 AliAnalysisTaskESDMCLabelAddition.h:68
 AliAnalysisTaskESDMCLabelAddition.h:69
 AliAnalysisTaskESDMCLabelAddition.h:70
 AliAnalysisTaskESDMCLabelAddition.h:71
 AliAnalysisTaskESDMCLabelAddition.h:72
 AliAnalysisTaskESDMCLabelAddition.h:73
 AliAnalysisTaskESDMCLabelAddition.h:74
 AliAnalysisTaskESDMCLabelAddition.h:75
 AliAnalysisTaskESDMCLabelAddition.h:76
 AliAnalysisTaskESDMCLabelAddition.h:77
 AliAnalysisTaskESDMCLabelAddition.h:78
 AliAnalysisTaskESDMCLabelAddition.h:79
 AliAnalysisTaskESDMCLabelAddition.h:80
 AliAnalysisTaskESDMCLabelAddition.h:81
 AliAnalysisTaskESDMCLabelAddition.h:82
 AliAnalysisTaskESDMCLabelAddition.h:83