#ifndef ALICFMUONRESUPSILON_H
#define ALICFMUONRESUPSILON_H
#include "AliAnalysisTaskSE.h"
class AliCFContainer;
class AliCFManager;
class AliCFMuonResUpsilon : public AliAnalysisTaskSE {
public:
AliCFMuonResUpsilon();
AliCFMuonResUpsilon(const Char_t* name);
AliCFMuonResUpsilon& operator= (const AliCFMuonResUpsilon& c);
AliCFMuonResUpsilon(const AliCFMuonResUpsilon& c);
virtual ~AliCFMuonResUpsilon();
void UserExec(Option_t *option);
void Terminate(Option_t *);
void UserCreateOutputObjects();
void SetCFManager(AliCFManager* const io) {fCFManager = io;}
AliCFManager * GetCFManager() const {return fCFManager;}
void SetQAList(TList* const list) {fQAHistList = list;}
Bool_t IsReadAODData() const {return fReadAODData;}
void SetReadAODData(Bool_t flag=kTRUE) {fReadAODData=flag;}
void SetReadMCInfo(Bool_t flag=kTRUE) {fReadMCInfo=flag;}
void SetRequirePdgCode(const Int_t PDG) {fPDG=PDG;}
void SetPtRange(const Double_t ptmin, const Double_t ptmax) {fPtMin=ptmin; fPtMax=ptmax; }
void SetRapidityRange(const Double_t ymin, const Double_t ymax) {fYMin=ymin; fYMax=ymax; }
void SetTrigClassMuonName(TString name = "CMUS") {fTrigClassMuon=name;}
void SetTrigClassInteracName(TString name = "CINT") {fTrigClassInteraction=name;}
void SetTrigClassSideName(TString name[3]) {for(Int_t i=0;i<3;i++) fTrigClassSide[i]=name[i];}
protected:
Bool_t fReadAODData;
Bool_t fReadMCInfo;
AliCFManager *fCFManager;
TH1D *fnevts;
Bool_t fIsPhysSelMB;
Bool_t fIsPhysSelMUON;
TList *fQAHistList;
Int_t fPDG;
Double_t fPtMin;
Double_t fPtMax;
Double_t fYMin;
Double_t fYMax;
TString fTrigClassMuon ;
TString fTrigClassInteraction ;
TString fTrigClassSide[4] ;
Bool_t fDistinguishTrigClass ;
Double_t Imass(Float_t e1, Float_t px1, Float_t py1, Float_t pz1, Float_t e2, Float_t px2, Float_t py2, Float_t p2) const;
Double_t Rap(Float_t e, Float_t pz) const;
Double_t CostCS(Double_t px1, Double_t py1, Double_t pz1, Double_t e1, Double_t charge1,
Double_t px2, Double_t py2, Double_t pz2, Double_t e2, Double_t energy);
Double_t CostHE(Double_t px1, Double_t py1, Double_t pz1, Double_t e1, Double_t charge1,
Double_t px2, Double_t py2, Double_t pz2, Double_t e2);
Double_t PhiCS(Double_t px1, Double_t py1, Double_t pz1, Double_t e1, Double_t charge1,
Double_t px2, Double_t py2, Double_t pz2, Double_t e2, Double_t energy);
Double_t PhiHE(Double_t px1, Double_t py1, Double_t pz1, Double_t e1, Double_t charge1,
Double_t px2, Double_t py2, Double_t pz2, Double_t e2, Double_t energy);
ClassDef(AliCFMuonResUpsilon,1);
};
#endif