#ifndef ALIMUONINFOSTOREMC_H
#define ALIMUONINFOSTOREMC_H
#include <TString.h>
#include <TParticle.h>
#include <TLorentzVector.h>
#include <TClonesArray.h>
#include "AliMCEventHandler.h"
#include "AliStack.h"
#include "AliAODMCParticle.h"
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliAODTrack.h"
#include "AliMuonInfoStoreRD.h"
#include "AliMCEvent.h"
class AliMuonInfoStoreMC : public AliMuonInfoStoreRD {
public:
AliMuonInfoStoreMC();
AliMuonInfoStoreMC(AliAODTrack *trkAOD, AliMCEvent *mcEvent, UInt_t selMask, Bool_t full=kFALSE);
AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliMCEvent *mcEvent, UInt_t selMask, Bool_t full=kFALSE);
AliMuonInfoStoreMC(const AliMuonInfoStoreMC &src);
AliMuonInfoStoreMC& operator=(const AliMuonInfoStoreMC &src);
virtual ~AliMuonInfoStoreMC();
Int_t ParentFlavour(Int_t i=0) const;
Bool_t IsMotherAResonance(Int_t i) const;
TLorentzVector LorentzP() const { return fLorentzP; }
Int_t Source() const { return fSource; }
Int_t TrackIndex() const { return fTrackIndex; }
Int_t TrackPDGCode() const { return fTrackPDGCode; }
Int_t ParentsN() const { return fNParents; }
Int_t ParentIndex(Int_t i=0) const { return (i<fNParents ? fParentIndex[i] : -1); }
Int_t ParentPDGCode(Int_t i=0) const { return (i<fNParents ? fParentPDGCode[i] : 0); }
Int_t QuarkIndex(Int_t i=0) const { return (i<4 ? fQuarkIndex[i] : -1); }
Int_t QuarkPDGCode(Int_t i=0) const { return (i<4 ? fQuarkPDGCode[i] : 0); }
Bool_t IsOscillation() const { return fOscillation; }
Double_t Weight() const { return fWeight; }
static const char* StdBranchName() { return fgkStdBranchName.Data(); }
static Int_t SourcesN() { return fgkSourcesN; }
private:
void SetMCInfoAOD(AliMCEvent *mcEvent, Int_t label);
void SetMCInfoESD(AliMCEvent *mcEvent, Int_t label);
void FillHistoryQuarksAOD(AliMCEvent *mcEvent, Int_t lineM);
void FillHistoryQuarksESD(AliMCEvent *mcEvent, Int_t lineM);
Int_t SelectHFMuon();
Bool_t IsDiquark(Int_t pdg);
void ResetQuarkInfo();
static const TString fgkStdBranchName;
static const Int_t fgkSourcesN;
Bool_t fIsFull;
TLorentzVector fLorentzP;
Int_t fTrackIndex;
Int_t fTrackPDGCode;
Int_t fSource;
Int_t fParentIndex[5];
Int_t fParentPDGCode[5];
Int_t fNParents;
Bool_t fOscillation;
Int_t fQuarkIndex[4];
Int_t fQuarkPDGCode[4];
Double_t fWeight;
ClassDef(AliMuonInfoStoreMC, 5);
};
#endif