]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/dielectron/AliDielectronPair.h
Add dielectron framework to PWG3
[u/mrichter/AliRoot.git] / PWG3 / dielectron / AliDielectronPair.h
diff --git a/PWG3/dielectron/AliDielectronPair.h b/PWG3/dielectron/AliDielectronPair.h
new file mode 100644 (file)
index 0000000..4c93cc8
--- /dev/null
@@ -0,0 +1,102 @@
+#ifndef ALIDIELECTRONPAIR_H
+#define ALIDIELECTRONPAIR_H
+/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+//#############################################################
+//#                                                           # 
+//#                  AliDielectronPair                        #
+//#               Class to store pair information             #
+//#                                                           #
+//#                                                           #
+//#  Authors:                                                 #
+//#   Anton     Andronic, GSI / A.Andronic@gsi.de             #
+//#   Ionut C.  Arsene,   GSI / I.C.Arsene@gsi.de             #
+//#   Julian    Book,     Uni Ffm / Julian.Book@cern.ch       #
+//#   Frederick Kramer,   Uni Ffm, / Frederick.Kramer@cern.ch #
+//#   Magnus    Mager,    CERN / Magnus.Mager@cern.ch         #
+//#   WooJin J. Park,     GSI / W.J.Park@gsi.de               #
+//#   Jens      Wiechula, Uni HD / Jens.Wiechula@cern.ch      #
+//#                                                           #
+//#############################################################
+
+#include <TMath.h>
+#include <TRef.h>
+#include <TLorentzVector.h>
+
+#include <AliKFParticle.h>
+#include <AliVParticle.h>
+
+class AliVTrack;
+
+//TODO
+//TODO: Should we inherit from AliVTrack in order to built another AliDielectronPair of KF with it?
+//TODO
+class AliDielectronPair : public AliVParticle {
+public:
+  AliDielectronPair();
+  virtual ~AliDielectronPair();
+  
+  AliDielectronPair(AliVTrack * const particle1, Int_t pid1,
+                    AliVTrack * const particle2, Int_t pid2, Char_t type);
+
+  //TODO:  copy constructor + assignment operator
+  
+  void SetTracks(AliVTrack * const particle1, Int_t pid1,
+                 AliVTrack * const particle2, Int_t pid2);
+
+  //AliVParticle interface
+  // kinematics
+  virtual Double_t Px() const { return fPair.GetPx(); }
+  virtual Double_t Py() const { return fPair.GetPy(); }
+  virtual Double_t Pz() const { return fPair.GetPz(); }
+  virtual Double_t Pt() const { return fPair.GetPt(); }
+  virtual Double_t P() const  { return fPair.GetP();  }
+  virtual Bool_t   PxPyPz(Double_t p[3]) const { p[0]=Px(); p[1]=Py(); p[2]=Pz(); return kTRUE; }
+  
+  virtual Double_t Xv() const { return fPair.GetX(); }
+  virtual Double_t Yv() const { return fPair.GetY(); }
+  virtual Double_t Zv() const { return fPair.GetZ(); }
+  virtual Bool_t   XvYvZv(Double_t x[3]) const { x[0]=Xv(); x[1]=Xv(); x[2]=Zv(); return kTRUE; }
+  
+  virtual Double_t OneOverPt() const { return Pt()>0.?1./Pt():0.; }  //TODO: check
+  virtual Double_t Phi()       const { return fPair.GetPhi();}
+  virtual Double_t Theta()     const { return Pz()!=0?TMath::ATan(Pt()/Pz()):0.; } //TODO: check
+  
+  
+  virtual Double_t E() const { return fPair.GetE();    }
+  virtual Double_t M() const { return fPair.GetMass(); }
+  
+  virtual Double_t Eta() const { return fPair.GetEta();}
+  virtual Double_t Y()  const  { return TLorentzVector(Px(),Py(),Pz(),E()).Y();}
+  
+  virtual Short_t Charge() const    { return fPair.GetQ();}
+  virtual Int_t   GetLabel() const  { return -1; }  //TODO: check
+  // PID
+  virtual const Double_t *PID() const { return 0;} //TODO: check
+
+  Double_t OpeningAngle() const { return fOpeningAngle; }
+
+  UChar_t GetType() const { return fType; }
+  void SetType(Char_t type) { fType=type; }
+  // internal KF particle
+  const AliKFParticle& GetKFParticle() const { return fPair; }
+
+  // daughter references
+  AliVParticle* GetFirstDaughter()   const { return dynamic_cast<AliVParticle*>(fRefD1.GetObject()); }
+  AliVParticle* GetSecondDaughter()  const { return dynamic_cast<AliVParticle*>(fRefD2.GetObject()); }
+
+  
+private:
+  Double_t fOpeningAngle; // opening angle of the pair
+  Char_t  fType;         // type of the pair e.g. like sign SE, unlike sign SE, ... see AliDielectron
+
+  AliKFParticle fPair;   // KF particle internally used for pair calculation
+
+  TRef fRefD1;           // Reference to first daughter
+  TRef fRefD2;           // Reference to second daughter
+  
+  ClassDef(AliDielectronPair,1)
+};
+
+#endif