ROOT logo
// @(#)root/pythia6:$Id: TPythia6Decayer.h 20882 2007-11-19 11:31:26Z rdm $
// Author: Christian Holm Christensen   22/04/06

/*************************************************************************
 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TPythia6Decayer
#define ROOT_TPythia6Decayer

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// TPythia6Decayer                                                           //
//                                                                           //
// This implements the TVirtualMCDecayer interface.  The TPythia6            //
// singleton object is used to decay particles.  Note, that since this       //
// class modifies common blocks (global variables) it is defined as a        //
// singleton.                                                                //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TVirtualMCDecayer
#include "TVirtualMCDecayer.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif
#ifndef ROOT_TArrayF
#include "TArrayF.h"
#endif


class TPythia6Decayer : public TVirtualMCDecayer {

public:
   // enum of decay mode types
   enum EDecayType {
      kSemiElectronic,
      kDiElectron,
      kSemiMuonic,
      kDiMuon,
      kBJpsiDiMuon,
      kBJpsiDiElectron,
      kBPsiPrimeDiMuon,
      kBPsiPrimeDiElectron,
      kPiToMu,
      kKaToMu,
      kNoDecay,
      kHadronicD,
      kOmega,
      kPhiKK,
      kAll,
      kNoDecayHeavy,
      kHardMuons,
      kBJpsi,
      kWToMuon,
      kWToCharm,
      kWToCharmToMuon,
      kZDiMuon,
      kMaxDecay
   };

protected:
   TString    fDecayTableFile; // File to read decay table from
   EDecayType fDecay;          // Forced decay mode
   TArrayF    fBraPart;        //! Branching ratios

   static TPythia6Decayer *fgInstance;

   // Extra functions
   void ForceHadronicD();
   void ForceOmega();
   Int_t CountProducts(Int_t channel, Int_t particle);

public:
   TPythia6Decayer();
   virtual ~TPythia6Decayer() { }
   virtual void    Init();
   virtual void    Decay(Int_t idpart, TLorentzVector* p);
   virtual Int_t   ImportParticles(TClonesArray *particles);
   virtual void    SetForceDecay(Int_t type);
   virtual void    ForceDecay();
   void ForceParticleDecay(Int_t particle, Int_t* products,
   			               Int_t* mult, Int_t npart);
   void ForceParticleDecay(Int_t particle, Int_t product, Int_t mult);
   virtual Float_t GetPartialBranchingRatio(Int_t ipart);
   virtual Float_t GetLifetime(Int_t kf);
   virtual void    ReadDecayTable();
   // Extension member functions
   virtual void    SetDecayTableFile(const char* name);
   virtual void    WriteDecayTable();
   virtual void    SetForceDecay(EDecayType type) { fDecay = type; }

   static  TPythia6Decayer *Instance();

   ClassDef(TPythia6Decayer,1) // Particle Decayer Base Class
};

inline void TPythia6Decayer::SetDecayTableFile(const char *name)
{
   fDecayTableFile = name;
}

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