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
|
// -*- C++ -*-
//
// PDFCuts.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 PDFCuts class.
//
#include "PDFCuts.h"
#include "ThePEG/Cuts/Cuts.h"
#ifdef ThePEG_TEMPLATES_IN_CC_FILE
// #include "PDFCuts.tcc"
#endif
using namespace ThePEG;
PDFCuts::
PDFCuts(const Cuts & kc, bool first, const SInterval & S,
const SInterval & sHatIn) {
SInterval sHat(max(sHatIn.lower(), kc.sHatMin()),
min(sHatIn.upper(), kc.sHatMax()));
double xmin = sqrt(sHat.lower()/S.upper());
double xmax = sqrt(sHat.upper()/S.lower());
theScale = SInterval(kc.scaleMin(), kc.scaleMax());
double x1max = min(xmax*exp( 2.*kc.yHatMax()), kc.x1Max());
double x2max = min(xmax*exp(-2.*kc.yHatMin()), kc.x2Max());
x1max = min(xmax,x1max);
x2max = min(xmax,x2max);
if ( first ) {
double x1min = max(xmin*exp(2.*kc.yHatMin()), kc.x1Min());
x1min = max(sqr(xmin),x1min);
theSMax = x2max*S.upper();
theL = Interval<double>(log(1.0/x1max), log(1.0/x1min));
}
else {
double x2min = max(xmin*exp(-2.*kc.yHatMax()), kc.x2Min());
x2min = max(sqr(xmin),x2min);
theSMax = x1max*S.upper();
theL = Interval<double>(-log(x2max), -log(x2min));
}
}
PDFCuts::
PDFCuts(const Cuts & kc, bool first, Energy maxEnergy) {
SInterval sHat(kc.sHatMin(), kc.sHatMax());
double xmin = sqrt(sHat.lower())/maxEnergy;
double xmax = 1.0;
theScale = SInterval(kc.scaleMin(), kc.scaleMax());
double x1max = min(xmax*exp( 2.*kc.yHatMax()), kc.x1Max());
double x2max = min(xmax*exp(-2.*kc.yHatMin()), kc.x2Max());
x1max = min(xmax,x1max);
x2max = min(xmax,x2max);
if ( first ) {
double x1min = max(xmin*exp(2.*kc.yHatMin()), kc.x1Min());
x1min = max(sqr(xmin),x1min);
theSMax = x2max*sqr(maxEnergy);
theL = Interval<double>(-log(x1max), -log(x1min));
}
else {
double x2min = max(xmin*exp(-2.*kc.yHatMax()), kc.x2Min());
x2min = max(sqr(xmin),x2min);
theSMax = x1max*sqr(maxEnergy);
theL = Interval<double>(-log(x2max), -log(x2min));
}
}
|