ROOT logo
#ifndef ALIAODMUONREPLICATOR_H
#define ALIAODMUONREPLICATOR_H

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

// $Id$


#ifndef ALIDAODBRANCHREPLICATOR_H
#  include "AliAODBranchReplicator.h"
#endif
#ifndef ROOT_TExMap
#  include "TExMap.h"
#endif

//
// Implementation of a branch replicator 
// to produce slim muon and dimuon aods.
//
// Author: L. Aphecetche (Subatech)

class AliAnalysisCuts;
class TClonesArray;
class AliAODMCHeader;
class AliAODVZERO;
class AliAODTZERO;
class AliAODHeader;
class AliAODTracklets;
class AliAODZDC;

class AliAODMuonReplicator : public AliAODBranchReplicator
{
public:
  
  AliAODMuonReplicator(const char* name="AliAODMuonReplicator", 
                       const char* title="Branch Replicator for muon related branches",
                       AliAnalysisCuts* trackCut=0x0,
                       AliAnalysisCuts* vertexCut=0x0,
                       Int_t mcMode=0,
                       Bool_t replicateHeader=kFALSE,
                       Bool_t replicateTracklets=kFALSE);
  virtual ~AliAODMuonReplicator();
  
  virtual TList* GetList() const;
  
  virtual void ReplicateAndFilter(const AliAODEvent& source);
  
private:
  void FilterMC(const AliAODEvent& source);
  void SelectParticle(Int_t i);
  Bool_t IsParticleSelected(Int_t i);
  void CreateLabelMap(const AliAODEvent& source);
  Int_t GetNewLabel(Int_t i);
  
private:
  AliAnalysisCuts* fTrackCut; // decides which tracks to keep
  mutable TClonesArray* fTracks; //! internal array of muon tracks
  AliAnalysisCuts* fVertexCut; // decides which vertices to keep
  mutable TClonesArray* fVertices; //! internal array of vertices
  mutable TClonesArray* fDimuons; //! internal array of dimuons
  mutable AliAODVZERO* fVZERO; //! internal vzero object
  mutable AliAODTZERO* fTZERO; //! internal tzero object
  mutable AliAODHeader* fHeader; //! internal header object
  mutable AliAODTracklets* fTracklets; //! internal tracklets object
  mutable AliAODZDC* fZDC; //! internal zdc object
  mutable TList* fList; //! internal list of managed objects (fVertices and fTracks)
  
  mutable TClonesArray* fMCParticles; //! internal array of MC particles
  mutable AliAODMCHeader* fMCHeader; //! internal array of MC header
  Int_t fMCMode; // MC filtering switch (0=none=no mc information,1=normal=simple copy,>=2=aggressive=filter out)
  TExMap fLabelMap; //! for MC label remapping (in case of aggressive filtering)
  TExMap fParticleSelected; //! List of selected MC particles
  Bool_t fReplicateHeader; //! whether or not the replicate the AOD Header
  Bool_t fReplicateTracklets; //! whether or not the replicate the AOD Tracklets
  
private:
  AliAODMuonReplicator(const AliAODMuonReplicator&);
  AliAODMuonReplicator& operator=(const AliAODMuonReplicator&);
  
  ClassDef(AliAODMuonReplicator,7) // Branch replicator for ESD to muon AOD.
};

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