]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronPair.h
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronPair.h
index 6bd2439e329a09ffa58e135bb5af7e0af7fc5b61..6e49d77d4fb33997ea5c946fa5c9f3ab713f5a44 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <AliKFParticle.h>
 #include <AliVParticle.h>
+#include <AliVEvent.h>
 
 class AliVVertex;
 class AliVTrack;
@@ -52,6 +53,10 @@ public:
   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,
@@ -89,8 +94,7 @@ public:
   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;
@@ -98,8 +102,12 @@ public:
 
   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); }
   
@@ -112,16 +120,33 @@ public:
   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;   }
@@ -131,13 +156,19 @@ public:
   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
@@ -145,8 +176,11 @@ private:
   
   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
+