Fork me on GitHub

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • readers/DelphesPythia8.cpp

    rea0f50d rc008923  
    153153// from pythia8 example 21
    154154
    155 void fillParticle(int id, double pt_max, double eta_max,
    156   Pythia8::Event &event, Pythia8::ParticleData &pdt, Pythia8::Rndm &rndm)
    157 {
     155void fillParticle(int id, double ee_max, double thetaIn, double phiIn,
     156  Pythia8::Event& event, Pythia8::ParticleData& pdt, Pythia8::Rndm& rndm, bool atRest = false) {
     157
    158158  // Reset event record to allow for new event.
    159159  event.reset();
    160160
    161   // Generate uniform pt and eta.
    162   double pt, eta, phi, pp, ee, mm;
    163   pt = pow(10, 1.0 + (log10(pt_max) - 1.0) * rndm.flat());
    164   eta = (2.0 * rndm.flat() - 1.0) * eta_max;
    165   phi = 2.0 * M_PI * rndm.flat();
    166   pp = pt * cosh(eta);
    167   mm = pdt.mSel(id);
    168   ee = Pythia8::sqrtpos(pp*pp + mm*mm);
     161  // Angles uniform in solid angle.
     162  double cThe, sThe, phi, ee;
     163  cThe = 2. * rndm.flat() - 1.;
     164  sThe = Pythia8::sqrtpos(1. - cThe * cThe);
     165  phi = 2. * M_PI * rndm.flat();
     166  ee = pow(10,1+(log10(ee_max)-1)*rndm.flat());
     167  double mm = pdt.mSel(id);
     168  double pp = Pythia8::sqrtpos(ee*ee - mm*mm);
    169169
    170170  // Store the particle in the event record.
    171   event.append(id, 1, 0, 0, pt * cos(phi), pt * sin(phi), pt * sinh(eta), ee, mm);
     171  event.append( id, 1, 0, 0, pp * sThe * cos(phi), pp * sThe * sin(phi), pp * cThe, ee, mm);
     172
    172173}
    173174
    174 void fillPartons(int id, double pt_max, double eta_max,
    175   Pythia8::Event &event, Pythia8::ParticleData &pdt, Pythia8::Rndm &rndm)
    176 {
     175void fillPartons(int type, double ee_max, Pythia8::Event& event, Pythia8::ParticleData& pdt,
     176  Pythia8::Rndm& rndm) {
    177177
    178178  // Reset event record to allow for new event.
    179179  event.reset();
    180180
     181  // Angles uniform in solid angle.
     182  double cThe, sThe, phi, ee;
     183
    181184  // Information on a q qbar system, to be hadronized.
    182185
    183   // Generate uniform pt and eta.
    184   double pt, eta, phi, pp, ee, mm;
    185   pt = pow(10, 1.0 + (log10(pt_max) - 1.0) * rndm.flat());
    186   eta = (2.0 * rndm.flat() - 1.0) * eta_max;
    187   phi = 2.0 * M_PI * rndm.flat();
    188   pp = pt * cosh(eta);
    189   mm = pdt.m0(id);
    190   ee = Pythia8::sqrtpos(pp*pp + mm*mm);
    191 
    192   if(id == 21)
    193   {
    194     event.append(21, 23, 101, 102, pt * cos(phi), pt * sin(phi), pt * sinh(eta), ee);
    195     event.append(21, 23, 102, 101, -pt * cos(phi), -pt * sin(phi), -pt * sinh(eta), ee);
     186  cThe = 2. * rndm.flat() - 1.;
     187  sThe = Pythia8::sqrtpos(1. - cThe * cThe);
     188  phi = 2. * M_PI * rndm.flat();
     189  ee = pow(10,1+(log10(ee_max)-1)*rndm.flat());
     190  double mm = pdt.m0(type);
     191  double pp = Pythia8::sqrtpos(ee*ee - mm*mm);
     192  if (type == 21)
     193  {
     194    event.append( 21, 23, 101, 102, pp * sThe * cos(phi), pp * sThe * sin(phi), pp * cThe, ee);
     195    event.append( 21, 23, 102, 101, -pp * sThe * cos(phi), -pp * sThe * sin(phi), -pp * cThe, ee);
    196196  }
    197197  else
    198198  {
    199     event.append(id, 23, 101, 0, pt * cos(phi), pt * sin(phi), pt * sinh(eta), ee, mm);
    200     event.append(-id, 23, 0, 101, -pt * cos(phi), -pt * sin(phi), -pt * sinh(eta), ee, mm);
     199    event.append(  type, 23, 101,   0, pp * sThe * cos(phi), pp * sThe * sin(phi), pp * cThe, ee, mm);
     200    event.append( -type, 23,   0, 101, -pp * sThe * cos(phi), -pp * sThe * sin(phi), -pp * cThe, ee, mm);
    201201  }
    202202}
     
    338338      if (pythia->flag("Main:spareFlag1"))
    339339      {
    340         if (pythia->mode("Main:spareMode1") == 11 || pythia->mode("Main:spareMode1") == 13 || pythia->mode("Main:spareMode1") == 15 || pythia->mode("Main:spareMode1") == 22)
     340        if (pythia->mode("Main:spareMode1") == 11 || pythia->mode("Main:spareMode1") == 13 || pythia->mode("Main:spareMode1") == 22)
    341341        {
    342           fillParticle(pythia->mode("Main:spareMode1"), pythia->parm("Main:spareParm1"), pythia->parm("Main:spareParm2"), pythia->event, pythia->particleData, pythia->rndm);
     342          fillParticle( pythia->mode("Main:spareMode1"), pythia->parm("Main:spareParm1"), -1., 0.,pythia->event, pythia->particleData, pythia->rndm, 0);
    343343        }
    344         else
    345         {
    346           fillPartons(pythia->mode("Main:spareMode1"), pythia->parm("Main:spareParm1"), pythia->parm("Main:spareParm2"), pythia->event, pythia->particleData, pythia->rndm);
    347         }
     344        else fillPartons( pythia->mode("Main:spareMode1"), pythia->parm("Main:spareParm1"), pythia->event, pythia->particleData, pythia->rndm);
    348345      }
    349346
Note: See TracChangeset for help on using the changeset viewer.