1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
// -*- C++ -*-
//
// FlatDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation
// Copyright (C) 1999-2011 Leif Lonnblad
//
// ThePEG is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the FlatDecayer class.
//
#include "FlatDecayer.h"
#include "ThePEG/PDT/DecayMode.h"
#include "ThePEG/Utilities/SimplePhaseSpace.h"
#include "ThePEG/Repository/UseRandom.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Vectors/LorentzRotation.h"
#include "ThePEG/Interface/ClassDocumentation.h"
using namespace ThePEG;
IBPtr FlatDecayer::clone() const {
return new_ptr(*this);
}
IBPtr FlatDecayer::fullclone() const {
return new_ptr(*this);
}
bool FlatDecayer::accept(const DecayMode & dm) const {
if ( dm.products().size() == 1 &&
( dm.parent()->massMax() > (**(dm.products().begin())).massMax() ||
dm.parent()->massMin() < (**(dm.products().begin())).massMin() ) )
return false;
return dm.products().size() > 0 && dm.cascadeProducts().empty() &&
dm.productMatchers().empty() && !dm.wildProductMatcher();
}
ParticleVector FlatDecayer::decay(const DecayMode & dm,
const Particle & parent) const {
ParticleVector children = getChildren(dm, parent);
try {
do {
if ( children.size() == 1 ) {
children[0]->setMomentum(parent.momentum());
children[0]->scale(parent.momentum().mass2());
return children;
}
else {
SimplePhaseSpace::CMSn(children, parent.mass());
}
} while ( reweight(dm, parent, children) < UseRandom::rnd() );
}
catch ( ImpossibleKinematics & ) {
children.clear();
return children;
}
finalBoost(parent, children);
setScales(parent, children);
return children;
}
NoPIOClassDescription<FlatDecayer> FlatDecayer::initFlatDecayer;
// Definition of the static class description member.
void FlatDecayer::Init() {
static ClassDocumentation<FlatDecayer> documentation
("The ThePEG::FlatDecayer class describes the decay of a "
"ThePEG::Particle into a set of specified children according "
"to a flat distribution in phase space.");
}
|