#ifndef ALIDIMUCOMBINATOR_H
#define ALIDIMUCOMBINATOR_H
#include <TObject.h>
class TClonesArray;
class TParticle;
class AliDimuCombinator:
public TObject
{
public:
AliDimuCombinator();
void Copy(TObject &combi) const;
TParticle* Particle(Int_t i) const;
TParticle* FirstMuon();
TParticle* NextMuon();
TParticle* FirstMuonSelected();
TParticle* NextMuonSelected();
void FirstMuonPair(TParticle* & muon1, TParticle* & muon2);
void NextMuonPair(TParticle* & muon1, TParticle* & muon2);
void FirstMuonPairSelected(TParticle* & muon1, TParticle* & muon2);
void NextMuonPairSelected(TParticle* & muon1, TParticle* & muon2);
void ResetRange();
void SetFirstRange (Int_t from, Int_t to);
void SetSecondRange(Int_t from, Int_t to);
void SetPtMin(Float_t ptmin) {fPtMin=ptmin;}
void SetEtaCut(Float_t etamin, Float_t etamax)
{fEtaMin=etamin; fEtaMax=etamax;}
Bool_t Selected(const TParticle* part) const;
Bool_t Selected(const TParticle* part1, const TParticle* part2) const;
Float_t Mass(const TParticle* part1, const TParticle* part) const;
Float_t PT(const TParticle* part1, const TParticle* part) const;
Float_t Pz(const TParticle* part1, const TParticle* part) const;
Float_t Y(const TParticle* part1, const TParticle* part) const;
void SmearGauss(Float_t width, Float_t & value) const;
Bool_t Correlated(const TParticle* part1, const TParticle* part2) const;
void SetRate(Float_t rate) {fRate1=rate;}
void SetRate(Float_t rate1, Float_t rate2 ) {fRate1=rate1; fRate2=rate2;}
Float_t Weight(const TParticle* part) const;
Float_t Weight(const TParticle* part1, const TParticle* part) const;
Float_t DecayProbability(const TParticle* part) const;
private:
void FirstPartner();
void NextPartner();
void FirstPartnerSelected();
void NextPartnerSelected();
Int_t Origin(const TParticle* part) const;
TParticle* Parent(const TParticle* part) const;
TParticle* Partner() const;
Int_t Type(const TParticle *part) const;
AliDimuCombinator(const AliDimuCombinator &combinator);
AliDimuCombinator & operator=(const AliDimuCombinator & rhs);
private:
Int_t fNParticle;
Int_t fImuon1;
Int_t fImuon2;
Int_t fImin1;
Int_t fImin2;
Int_t fImax1;
Int_t fImax2;
Float_t fRate1;
Float_t fRate2;
TParticle *fMuon1;
TParticle *fMuon2;
Float_t fPtMin;
Float_t fEtaMin;
Float_t fEtaMax;
ClassDef(AliDimuCombinator,1)
};
#endif