//____________________________________________________________________
//
// Abstract W boson decay class
// 
//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
//
#ifndef HEP_HepWDecay
#include <HepWDecay.h>
#endif
#include <TClass.h>
#include <iostream>

using namespace std;

#ifndef __CINT__
ClassImp(HepWDecay);
#endif

//____________________________________________________________________

HepWDecay::HepWDecay() {
    //
    // Default constructor
    //
    fDaughter1 = new TRef;
    fDaughter2 = new TRef;
    fTruthW    = new TRef;
}

//____________________________________________________________________

HepWDecay::HepWDecay(Int_t Id, Float_t Px, Float_t Py, Float_t Pz,
		     Float_t E, TObject *Daughter1, TObject *Daughter2,
		     ProductionMode mode) :
    HepDecayParticle(Id, Px, Py, Pz, E, 24) {
    //
    // Normal constructor
    //

    // Set charge for leptonic decays - otherwise PDG code is set to W+
    if ( TClass(((TObject*)Daughter1)->ClassName()).InheritsFrom("HepParticle") ) {
	fPdgCode = ( ((HepParticle*)Daughter1)->IsPositive() ) ? 24 : -24;
    }

    // Set links to the outgoing particles
    fDaughter1 = new TRef; *fDaughter1 = Daughter1;
    fDaughter2 = new TRef; *fDaughter2 = Daughter2;
    fTruthW    = new TRef;
    fMode      = mode;
}

//____________________________________________________________________

HepWDecay::~HepWDecay() {
    //
    // Default destructor
    //
    delete fDaughter1;	fDaughter1 = 0;
    delete fDaughter2;	fDaughter2 = 0;
    delete fTruthW;	fTruthW = 0;
}

//____________________________________________________________________

void HepWDecay::Clear(Option_t *option) {
    //
    // Clear this object
    //
    HepDecayParticle::Clear(option);
    delete fDaughter1; fDaughter1 = 0;
    delete fDaughter2; fDaughter2 = 0;
    delete fTruthW;    fTruthW = 0;
}

//____________________________________________________________________

Bool_t HepWDecay::IsHadronicDecay() const {
    //
    // W has decayed hadronically ?
    //
    if ( TClass(((TObject*)GetDaughter1())
		->ClassName()).InheritsFrom("HepJet") )
	return kTRUE;
    return kFALSE;
}

 HepWDecay.cxx:1
 HepWDecay.cxx:2
 HepWDecay.cxx:3
 HepWDecay.cxx:4
 HepWDecay.cxx:5
 HepWDecay.cxx:6
 HepWDecay.cxx:7
 HepWDecay.cxx:8
 HepWDecay.cxx:9
 HepWDecay.cxx:10
 HepWDecay.cxx:11
 HepWDecay.cxx:12
 HepWDecay.cxx:13
 HepWDecay.cxx:14
 HepWDecay.cxx:15
 HepWDecay.cxx:16
 HepWDecay.cxx:17
 HepWDecay.cxx:18
 HepWDecay.cxx:19
 HepWDecay.cxx:20
 HepWDecay.cxx:21
 HepWDecay.cxx:22
 HepWDecay.cxx:23
 HepWDecay.cxx:24
 HepWDecay.cxx:25
 HepWDecay.cxx:26
 HepWDecay.cxx:27
 HepWDecay.cxx:28
 HepWDecay.cxx:29
 HepWDecay.cxx:30
 HepWDecay.cxx:31
 HepWDecay.cxx:32
 HepWDecay.cxx:33
 HepWDecay.cxx:34
 HepWDecay.cxx:35
 HepWDecay.cxx:36
 HepWDecay.cxx:37
 HepWDecay.cxx:38
 HepWDecay.cxx:39
 HepWDecay.cxx:40
 HepWDecay.cxx:41
 HepWDecay.cxx:42
 HepWDecay.cxx:43
 HepWDecay.cxx:44
 HepWDecay.cxx:45
 HepWDecay.cxx:46
 HepWDecay.cxx:47
 HepWDecay.cxx:48
 HepWDecay.cxx:49
 HepWDecay.cxx:50
 HepWDecay.cxx:51
 HepWDecay.cxx:52
 HepWDecay.cxx:53
 HepWDecay.cxx:54
 HepWDecay.cxx:55
 HepWDecay.cxx:56
 HepWDecay.cxx:57
 HepWDecay.cxx:58
 HepWDecay.cxx:59
 HepWDecay.cxx:60
 HepWDecay.cxx:61
 HepWDecay.cxx:62
 HepWDecay.cxx:63
 HepWDecay.cxx:64
 HepWDecay.cxx:65
 HepWDecay.cxx:66
 HepWDecay.cxx:67
 HepWDecay.cxx:68
 HepWDecay.cxx:69
 HepWDecay.cxx:70
 HepWDecay.cxx:71
 HepWDecay.cxx:72
 HepWDecay.cxx:73
 HepWDecay.cxx:74
 HepWDecay.cxx:75
 HepWDecay.cxx:76
 HepWDecay.cxx:77
 HepWDecay.cxx:78
 HepWDecay.cxx:79
 HepWDecay.cxx:80
 HepWDecay.cxx:81
 HepWDecay.cxx:82
 HepWDecay.cxx:83
 HepWDecay.cxx:84
 HepWDecay.cxx:85
 HepWDecay.cxx:86
 HepWDecay.cxx:87