ROOT logo
#ifndef AliAODDimuon_H
#define AliAODDimuon_H

// AliAODDimuon: a class for AODs for the MUON Arm of the ALICE Experiment
// Author: P. Cortese, Universita' del Piemonte Orientale in Alessandria and
// INFN of Torino - Italy
//
// The class defines a dimuon pair object from two AliAODTrack objects.
// AliAODDimuon objects are supposed to be added to the AliAODEvent structure
// during analysis. They would then allow to calculate the dimuon-related
// kinematic variables with a minimal disk occupancy.
// The payload of the class has been reduced to two pointers to the two
// tracks. An instance of this class has also to be added to the AliAODEvent 
// structure to provide additional information that is specific to MUON and 
// therefore has not been included into the AOD header.
// Two transient data members are not stored on file as they can be recomputed
// at runtime.
//

// 2007/07/07 v1.00 Initial version
// 2007/12/06 v1.01 Introduction of AliAODEventInfo
// 2007/12/18 v1.02 Corrected CostCS for Like-Sign, added CostKh, CostHe and xf
// 2008/02/01 v1.03 Apply coding conventions

#include "TRef.h"
#include "AliVParticle.h"
#include "AliAODTrack.h"

class TLorentzVector;

class AliAODDimuon: public AliVParticle {
public:
  AliAODDimuon();
  AliAODDimuon(const AliAODDimuon& dimu);
  AliAODDimuon &operator=(const AliAODDimuon& dimu);
  AliAODDimuon(TObject *mu0, TObject *mu1);
  virtual ~AliAODDimuon();

  // Methods to access kinematics
  virtual Double_t Px() const;
  virtual Double_t Py() const;
  virtual Double_t Pz() const;
  virtual Bool_t PxPyPz(Double_t* p) const { p[0]=Px(); p[1]=Py(); p[2]=Pz(); return 1;}
  virtual Double_t Pt() const;
  virtual Double_t P() const;

  virtual Double_t OneOverPt() const {return Pt()>0 ? 1./Pt() : -999999999;}
  virtual Double_t Phi() const;
  virtual Double_t Theta() const;

  virtual Double_t E() const;
  virtual Double_t M() const;

  virtual Double_t Mass() const { return M(); }

  virtual Double_t Eta() const;
  virtual Double_t Y() const;
  
  virtual Short_t Charge() const;

  // Dimuon vertex will be implemented when the muon track covariance matrix 
  // at vertex will be included in the ESD (and AOD)
  // It would require also the information about magnetic field when filling AOD
  virtual Double_t Xv() const {return -999999999;}
  virtual Double_t Yv() const {return -999999999;}
  virtual Double_t Zv() const {return -999999999;}
  virtual Bool_t XvYvZv(Double_t* v) const { v[0]=-999999999; v[1]=-999999999; v[2]=-999999999; return 0;}

  // Added functions
  Double_t XF();     // Feynman x
  Double_t CostCS(); // Cosinus of the Collins-Soper polar decay angle
  Double_t CostHe(); // Cosinus of the Helicity polar decay angle
  Double_t PhiCS();  // Azimuthal angle in the Collins-Soper frame
  Double_t PhiHe();  // Azimuthal angle in the Helicity frame
  Int_t AnyPt();
  Int_t LowPt();
  Int_t HighPt();
  Double_t MaxChi2Match();
  // PID
  virtual const Double_t *PID() const {return 0;} // return PID object (to be defined, still)
  
  //
  Int_t GetLabel() const {return -1;}
  // Additional getters and setters
  AliAODTrack* GetMu(Int_t imu=0) const {return Mu(imu); } // Get a pointer to a muon
  AliAODTrack* Mu(Int_t imu=0) const {return (imu==0||imu==1)&&(fMu[imu]!=0) ? (AliAODTrack*)fMu[imu].GetObject() : 0; } // Get a pointer to a muon

  void SetMu(Int_t imu=0, AliAODTrack *mu=0);
  void SetMuons(AliAODTrack *mu0=0, AliAODTrack *mu1=0);
  // Dummy
  virtual Int_t PdgCode() const {return 0;}

private:

  Int_t CheckPointers() const;

  TLorentzVector* TLV() const; 

  // Data members
  TRef fMu[2];	// Pointers to the reconstructed muons
  mutable TLorentzVector *fP; //! TLorentzVector of dimuon momentum (not stored into file)

  // Useful constants
  Double_t fMProton; //! Proton mass (not stored into file)

  ClassDef(AliAODDimuon,2)  // AliAODDimuon track
};

#endif
 AliAODDimuon.h:1
 AliAODDimuon.h:2
 AliAODDimuon.h:3
 AliAODDimuon.h:4
 AliAODDimuon.h:5
 AliAODDimuon.h:6
 AliAODDimuon.h:7
 AliAODDimuon.h:8
 AliAODDimuon.h:9
 AliAODDimuon.h:10
 AliAODDimuon.h:11
 AliAODDimuon.h:12
 AliAODDimuon.h:13
 AliAODDimuon.h:14
 AliAODDimuon.h:15
 AliAODDimuon.h:16
 AliAODDimuon.h:17
 AliAODDimuon.h:18
 AliAODDimuon.h:19
 AliAODDimuon.h:20
 AliAODDimuon.h:21
 AliAODDimuon.h:22
 AliAODDimuon.h:23
 AliAODDimuon.h:24
 AliAODDimuon.h:25
 AliAODDimuon.h:26
 AliAODDimuon.h:27
 AliAODDimuon.h:28
 AliAODDimuon.h:29
 AliAODDimuon.h:30
 AliAODDimuon.h:31
 AliAODDimuon.h:32
 AliAODDimuon.h:33
 AliAODDimuon.h:34
 AliAODDimuon.h:35
 AliAODDimuon.h:36
 AliAODDimuon.h:37
 AliAODDimuon.h:38
 AliAODDimuon.h:39
 AliAODDimuon.h:40
 AliAODDimuon.h:41
 AliAODDimuon.h:42
 AliAODDimuon.h:43
 AliAODDimuon.h:44
 AliAODDimuon.h:45
 AliAODDimuon.h:46
 AliAODDimuon.h:47
 AliAODDimuon.h:48
 AliAODDimuon.h:49
 AliAODDimuon.h:50
 AliAODDimuon.h:51
 AliAODDimuon.h:52
 AliAODDimuon.h:53
 AliAODDimuon.h:54
 AliAODDimuon.h:55
 AliAODDimuon.h:56
 AliAODDimuon.h:57
 AliAODDimuon.h:58
 AliAODDimuon.h:59
 AliAODDimuon.h:60
 AliAODDimuon.h:61
 AliAODDimuon.h:62
 AliAODDimuon.h:63
 AliAODDimuon.h:64
 AliAODDimuon.h:65
 AliAODDimuon.h:66
 AliAODDimuon.h:67
 AliAODDimuon.h:68
 AliAODDimuon.h:69
 AliAODDimuon.h:70
 AliAODDimuon.h:71
 AliAODDimuon.h:72
 AliAODDimuon.h:73
 AliAODDimuon.h:74
 AliAODDimuon.h:75
 AliAODDimuon.h:76
 AliAODDimuon.h:77
 AliAODDimuon.h:78
 AliAODDimuon.h:79
 AliAODDimuon.h:80
 AliAODDimuon.h:81
 AliAODDimuon.h:82
 AliAODDimuon.h:83
 AliAODDimuon.h:84
 AliAODDimuon.h:85
 AliAODDimuon.h:86
 AliAODDimuon.h:87
 AliAODDimuon.h:88
 AliAODDimuon.h:89
 AliAODDimuon.h:90
 AliAODDimuon.h:91
 AliAODDimuon.h:92
 AliAODDimuon.h:93
 AliAODDimuon.h:94
 AliAODDimuon.h:95
 AliAODDimuon.h:96
 AliAODDimuon.h:97
 AliAODDimuon.h:98
 AliAODDimuon.h:99
 AliAODDimuon.h:100
 AliAODDimuon.h:101
 AliAODDimuon.h:102
 AliAODDimuon.h:103
 AliAODDimuon.h:104
 AliAODDimuon.h:105
 AliAODDimuon.h:106
 AliAODDimuon.h:107
 AliAODDimuon.h:108
 AliAODDimuon.h:109