//  
// Author: Sebastian Beumler <mailto: beumler@physik.hu-berlin.de>
// Update: $Id: Hep2BodyDecay.h,v 1.7 2011/01/16 21:30:46 schade Exp $
// Copyright: 2010 (C) Sebastian Beumler
//
#ifndef HEP_Hep2BodyDecay
#define HEP_Hep2BodyDecay
#ifndef HEP_HepDecayParticle
#include <HepDecayParticle.h>
#endif

class HepVertex;

class Hep2BodyDecay : public HepDecayParticle {

protected:
    TRef    *fDaughter1;   // Daughter particle 1
    TRef    *fDaughter2;   // Daughter particle 2
    TRef    *fVtx;         // Associated Vertex
    Float_t  fDecayLength; // Distance from primary vtx (cm)
    Float_t  fAngleToPrim; // Angular divergence between lambda origin and primary vtx
    Float_t  fDecayAngle;  // Angle between outgoing tracks in lab frame
    Float_t  fOpeningAngle;      // Angle between outgoing tracks in rest frame
    Float_t  fTransvDecayLength; // Transverse decay length
    HepParticle fReFitDaughter1; // in case of using the kinematic fitter,
    HepParticle fReFitDaughter2; // store new momenta and PDGCode
    Bool_t   fHasSharedTracks;   // true, if one of the tracks also belongs to another decay
    
public:
    Hep2BodyDecay();
    Hep2BodyDecay(Int_t Id, Float_t Px, Float_t Py, Float_t Pz,
		     Float_t E, TObject *Daughter1, TObject *Daughter2,
		     HepVertex *DecayVtx, HepVertex* PrimaryVtx,
		     HepParticle Fit_Daughter1, HepParticle Fit_Daughter2);
    virtual ~Hep2BodyDecay();
    virtual void Clear(Option_t *option);
    Float_t GetLifeTime();
    inline void SetSharedTracks(Bool_t sharedTracks) {
	fHasSharedTracks = sharedTracks;
    }
    
    inline Float_t GetOpeningAngle() const { return fOpeningAngle;     }
    inline Float_t GetDecayAngle() const   { return fDecayAngle;       } // Simple Angle, Not Cosine !!!
    inline Float_t GetDecayLength() const  { return fDecayLength;      }
    inline Float_t GetAngleToPrimary() const    { return fAngleToPrim;       }
    inline Float_t GetTransvDecayLength() const { return fTransvDecayLength; }
    inline TObject* GetDaughter1()   { return fDaughter1->GetObject(); }
    inline TObject* GetDaughter2()   { return fDaughter2->GetObject(); }
    virtual inline TObject* GetVtx() { return fVtx->GetObject();       }
    inline HepParticle GetReFitDaughter1() { return fReFitDaughter1;   }
    inline HepParticle GetReFitDaughter2() { return fReFitDaughter2;   }
    inline Bool_t   HasSharedTracks()      { return fHasSharedTracks;  }
    
    ClassDef(Hep2BodyDecay,4); // Base two body decay class
};
#endif

 Hep2BodyDecay.h:1
 Hep2BodyDecay.h:2
 Hep2BodyDecay.h:3
 Hep2BodyDecay.h:4
 Hep2BodyDecay.h:5
 Hep2BodyDecay.h:6
 Hep2BodyDecay.h:7
 Hep2BodyDecay.h:8
 Hep2BodyDecay.h:9
 Hep2BodyDecay.h:10
 Hep2BodyDecay.h:11
 Hep2BodyDecay.h:12
 Hep2BodyDecay.h:13
 Hep2BodyDecay.h:14
 Hep2BodyDecay.h:15
 Hep2BodyDecay.h:16
 Hep2BodyDecay.h:17
 Hep2BodyDecay.h:18
 Hep2BodyDecay.h:19
 Hep2BodyDecay.h:20
 Hep2BodyDecay.h:21
 Hep2BodyDecay.h:22
 Hep2BodyDecay.h:23
 Hep2BodyDecay.h:24
 Hep2BodyDecay.h:25
 Hep2BodyDecay.h:26
 Hep2BodyDecay.h:27
 Hep2BodyDecay.h:28
 Hep2BodyDecay.h:29
 Hep2BodyDecay.h:30
 Hep2BodyDecay.h:31
 Hep2BodyDecay.h:32
 Hep2BodyDecay.h:33
 Hep2BodyDecay.h:34
 Hep2BodyDecay.h:35
 Hep2BodyDecay.h:36
 Hep2BodyDecay.h:37
 Hep2BodyDecay.h:38
 Hep2BodyDecay.h:39
 Hep2BodyDecay.h:40
 Hep2BodyDecay.h:41
 Hep2BodyDecay.h:42
 Hep2BodyDecay.h:43
 Hep2BodyDecay.h:44
 Hep2BodyDecay.h:45
 Hep2BodyDecay.h:46
 Hep2BodyDecay.h:47
 Hep2BodyDecay.h:48
 Hep2BodyDecay.h:49
 Hep2BodyDecay.h:50
 Hep2BodyDecay.h:51
 Hep2BodyDecay.h:52
 Hep2BodyDecay.h:53
 Hep2BodyDecay.h:54
 Hep2BodyDecay.h:55
 Hep2BodyDecay.h:56
 Hep2BodyDecay.h:57