Search Results
NarrowWidthApproximation.cc
/*
* MoMEMta: a modular implementation of the Matrix Element Method
* Copyright (C) 2016 Universite catholique de Louvain (UCL), Belgium
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <momemta/ParameterSet.h>
#include <momemta/Module.h>
#include <cmath>
class NarrowWidthApproximation: public Module {
public:
NarrowWidthApproximation(PoolPtr pool, const ParameterSet& parameters): Module(pool, parameters.getModuleName())
{
double mass = parameters.get<double>("mass");
double width = parameters.get<double>("width");
*jacobian = M_PI;
if(parameters.get<bool>("propagator_in_me", true))
*jacobian *= mass*width;
else
*jacobian /= mass*width;
*s = mass*mass;
}
private:
std::shared_ptr<double> s = produce<double>("s");
std::shared_ptr<double> jacobian = produce<double>("jacobian");
};
REGISTER_MODULE(NarrowWidthApproximation)
.Output("s")
.Output("jacobian")
.Attr("mass:double")
.Attr("width:double")
.Attr("propagator_in_me:bool=true");