File: PDFCuts.cc

package info (click to toggle)
thepeg 1.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 9,312 kB
  • ctags: 11,509
  • sloc: cpp: 57,129; sh: 11,315; java: 3,212; lisp: 1,402; makefile: 830; ansic: 58; perl: 3
file content (72 lines) | stat: -rw-r--r-- 2,295 bytes parent folder | download
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));
  }
}