////////////////////////////////////////////////////////
//  Dilepton generator Class implementation file
//
//  The Dilepton class sets up an e+e- quasiparticle
//  that subsequently decays into e+ and e-.
//  Mass, pt and rapidity are sampled from a box distribution.
// 
//                    Author:  Romain Holzmann
//                    Written: 22.08.01
//
////////////////////////////////////////////////////////

#include "PDiLepton.h"

ClassImp(PDiLepton)

PDiLepton::PDiLepton(Float_t M1, Float_t M2, Float_t Pt1, Float_t Pt2,
		     Float_t Y1, Float_t Y2) : PParticle("dilepton") {
    //
    // Dilepton source with m1<mass<m2, pt1<pt<pt2 and y1<rapidity<y2
    //
    prodId = makeStaticData()->GetParticleID("dilepton");
    SetID(500+prodId);
    m1 = M1;
    m2 = M2;
    if (m1 > m2) { m2 = M1; m1 = M2; }
    if (m1 < 0.) m1= 0.;
    pt1 = Pt1;
    pt2 = Pt2;
    if (pt1 > pt2) { pt2 = Pt1; pt1 = Pt2; }
    if (pt1 < 0.) pt1 = 0.;
    y1 = Y1;
    y2 = Y2;
    if (y1 > y2) { y2 = Y1; y1 = Y2; }
}

void PDiLepton::Print(const Option_t *) const{
    printf(" Dilepton with:\n %5.2f < M < %5.2f,  %5.2f < Pt < %5.2f and %5.2f < y < %5.2f\n",
	   m1, m2, pt1, pt2, y1, y2);
}

void PDiLepton::samplePartCM(double &px, double &py, double &pz, double &E) {
    // sample particle 4-momentum (px,py,pz,E)
    Double_t m;
    Double_t y;
    Double_t pt;
    Double_t phi;

    do {  
	m = m1 + (m2-m1)*PUtils::sampleFlat();     // sample m, pt, y and phi uniformly
    } while (m < makeStaticData()->GetParticleMass(prodId));
    pt  = pt1 + (pt2-pt1)*PUtils::sampleFlat();
    y   = y1 + (y2-y1)*PUtils::sampleFlat();
    phi = 2.*TMath::Pi()*PUtils::sampleFlat();

    Double_t mt = sqrt(pt*pt+m*m);
    E  = mt*cosh(y);
    px = pt*cos(phi);
    py = pt*sin(phi);
    pz = mt*sinh(y);

    return;
}















 PDiLepton.cc:1
 PDiLepton.cc:2
 PDiLepton.cc:3
 PDiLepton.cc:4
 PDiLepton.cc:5
 PDiLepton.cc:6
 PDiLepton.cc:7
 PDiLepton.cc:8
 PDiLepton.cc:9
 PDiLepton.cc:10
 PDiLepton.cc:11
 PDiLepton.cc:12
 PDiLepton.cc:13
 PDiLepton.cc:14
 PDiLepton.cc:15
 PDiLepton.cc:16
 PDiLepton.cc:17
 PDiLepton.cc:18
 PDiLepton.cc:19
 PDiLepton.cc:20
 PDiLepton.cc:21
 PDiLepton.cc:22
 PDiLepton.cc:23
 PDiLepton.cc:24
 PDiLepton.cc:25
 PDiLepton.cc:26
 PDiLepton.cc:27
 PDiLepton.cc:28
 PDiLepton.cc:29
 PDiLepton.cc:30
 PDiLepton.cc:31
 PDiLepton.cc:32
 PDiLepton.cc:33
 PDiLepton.cc:34
 PDiLepton.cc:35
 PDiLepton.cc:36
 PDiLepton.cc:37
 PDiLepton.cc:38
 PDiLepton.cc:39
 PDiLepton.cc:40
 PDiLepton.cc:41
 PDiLepton.cc:42
 PDiLepton.cc:43
 PDiLepton.cc:44
 PDiLepton.cc:45
 PDiLepton.cc:46
 PDiLepton.cc:47
 PDiLepton.cc:48
 PDiLepton.cc:49
 PDiLepton.cc:50
 PDiLepton.cc:51
 PDiLepton.cc:52
 PDiLepton.cc:53
 PDiLepton.cc:54
 PDiLepton.cc:55
 PDiLepton.cc:56
 PDiLepton.cc:57
 PDiLepton.cc:58
 PDiLepton.cc:59
 PDiLepton.cc:60
 PDiLepton.cc:61
 PDiLepton.cc:62
 PDiLepton.cc:63
 PDiLepton.cc:64
 PDiLepton.cc:65
 PDiLepton.cc:66
 PDiLepton.cc:67
 PDiLepton.cc:68
 PDiLepton.cc:69
 PDiLepton.cc:70
 PDiLepton.cc:71
 PDiLepton.cc:72
 PDiLepton.cc:73
 PDiLepton.cc:74
 PDiLepton.cc:75
 PDiLepton.cc:76
 PDiLepton.cc:77
 PDiLepton.cc:78