#include <AliKFParticle.h>
#include <AliVParticle.h>
+#include <AliVEvent.h>
class AliVVertex;
class AliVTrack;
void SetTracks(AliVTrack * const particle1, Int_t pid1,
AliVTrack * const particle2, Int_t pid2);
+ void SetGammaTracks(AliVTrack * const particle1, Int_t pid1,
+ AliVTrack * const particle2, Int_t pid2);
+
+
void SetTracks(const AliKFParticle * const particle1,
const AliKFParticle * const particle2,
AliVTrack * const refParticle1,
virtual Int_t GetLabel() const { return fLabel; }
// PID
virtual const Double_t *PID() const { return 0;} //TODO: check
- // Dummy
- Int_t PdgCode() const {return 0;}
+
//
// Double_t GetLXY(const AliVVertex * const vtx) const;
// Double_t GetPseudoProperTime(const AliVVertex * const vtx) const;
UChar_t GetType() const { return fType; }
void SetType(Char_t type) { fType=type; }
+ static void SetBeamEnergy(AliVEvent *ev, Double_t beamEbyHand=-1.);
+ // MC information
void SetLabel(Int_t label) {fLabel=label;}
+ void SetPdgCode(Int_t pdgCode) { fPdgCode=pdgCode; }
+ Int_t PdgCode() const {return fPdgCode;}
void SetProductionVertex(const AliKFParticle &Vtx) { fPair.SetProductionVertex(Vtx); }
Double_t DeviationDaughters() const { return fD1.GetDeviationFromParticle(fD2); }
Double_t DeviationDaughtersXY() const { return fD1.GetDeviationFromParticleXY(fD2); }
Double_t DeltaEta() const { return TMath::Abs(fD1.GetEta()-fD2.GetEta()); }
- Double_t DeltaPhi() const { Double_t dphi=TMath::Abs(fD1.GetPhi()-fD2.GetPhi());
- return (dphi>TMath::Pi())?dphi-TMath::Pi():dphi; }
+// Double_t DeltaPhi() const { Double_t dphi=TMath::Abs(fD1.GetPhi()-fD2.GetPhi());
+// return (dphi>TMath::Pi())?dphi-TMath::Pi():dphi; }
+ Double_t DeltaPhi() const { return fD1.GetAngleXY(fD2); }
+
// calculate cos(theta*) and phi* in HE and CS pictures
void GetThetaPhiCM(Double_t &thetaHE, Double_t &phiHE, Double_t &thetaCS, Double_t &phiCS) const;
+
Double_t ThetaPhiCM(Bool_t isHE, Bool_t isTheta) const;
static Double_t ThetaPhiCM(const AliVParticle* d1, const AliVParticle* d2,
- const Bool_t isHE, const Bool_t isTheta);
+ Bool_t isHE, Bool_t isTheta);
Double_t PsiPair(Double_t MagField)const; //Angle cut w.r.t. to magnetic field
+ Double_t PhivPair(Double_t MagField)const; //Angle of ee plane w.r.t. to magnetic field
+
+ //Calculate the angle between ee decay plane and variables
+ Double_t GetPairPlaneAngle(Double_t kv0CrpH2, Int_t VariNum) const;
+
+ Double_t GetCosPointingAngle(const AliVVertex *primVtx) const;
+ Double_t GetArmAlpha() const;
+ Double_t GetArmPt() const;
+ void GetDCA(const AliVVertex *primVtx, Double_t d0z0[2]) const;
+
+ // Calculate inner product of strong magnetic field and ee plane
+ Double_t PairPlaneMagInnerProduct(Double_t ZDCrpH1) const;
+
+
// internal KF particle
const AliKFParticle& GetKFParticle() const { return fPair; }
const AliKFParticle& GetKFFirstDaughter() const { return fD1; }
void SetRefFirstDaughter(AliVParticle * const track) {fRefD1 = track;}
void SetRefSecondDaughter(AliVParticle * const track) {fRefD2 = track;}
- AliVParticle* GetFirstDaughter() const { return dynamic_cast<AliVParticle*>(fRefD1.GetObject()); }
- AliVParticle* GetSecondDaughter() const { return dynamic_cast<AliVParticle*>(fRefD2.GetObject()); }
+ AliVParticle* GetFirstDaughterP() const { return dynamic_cast<AliVParticle*>(fRefD1.GetObject()); }
+ AliVParticle* GetSecondDaughterP() const { return dynamic_cast<AliVParticle*>(fRefD2.GetObject()); }
+
+ void SetKFUsage(Bool_t KFUsage) {fKFUsage = KFUsage;}
+ Bool_t GetKFUsage() const {return fKFUsage;}
+
private:
Char_t fType; // type of the pair e.g. like sign SE, unlike sign SE, ... see AliDielectron
Int_t fLabel; // MC label
+ Int_t fPdgCode; // pdg code in case it is a MC particle
+ static Double_t fBeamEnergy; //!beam energy
AliKFParticle fPair; // KF particle internally used for pair calculation
AliKFParticle fD1; // KF particle first daughter
TRef fRefD1; // Reference to first daughter
TRef fRefD2; // Reference to second daughter
+
+ Bool_t fKFUsage; // Use KF for vertexing
- ClassDef(AliDielectronPair,3)
+ ClassDef(AliDielectronPair,5)
};
#endif
+