325 {
326
327
328 double pTemt = -1., pTnow;
329 int xSR1 = (xSRin == -1) ? 0 : xSRin;
330 int xSR2 = (xSRin == -1) ? 2 : xSRin + 1;
331 for (int xSR = xSR1; xSR < xSR2; xSR++) {
332
333 bool FSR = (xSR == 0) ? false : true;
334
335
336
339
340
341 }
else if (!FSR &&
m_pTdefMode == 2 && i > 0 && j > 0 &&
r > 0) {
342 pTemt =
pT(e, i, j,
r, FSR);
343
344
345 }
else if (FSR &&
m_pTdefMode == 2 && j > 0 && k > 0 &&
r > 0) {
346 pTemt =
pT(e, k, j,
r, FSR);
347
348
349 } else {
350
351
352
353
354 int iInA = partonSystemsPtr->getInA(0);
355 int iInB = partonSystemsPtr->getInB(0);
356 while (e[iInA].mother1() != 1) { iInA =
e[iInA].mother1(); }
357 while (e[iInB].mother1() != 2) { iInB =
e[iInB].mother1(); }
358
359
360 int jNow = (j > 0) ? j : 0;
361 int jMax = (j > 0) ? j + 1 :
e.
size();
362 for (; jNow < jMax; jNow++) {
363
364
365 if (!e[jNow].isFinal()) continue;
366
368
369
371
372
373 if (!FSR) {
375 if (pTnow > 0.) pTemt = (pTemt < 0) ? pTnow :
min(pTemt, pTnow);
376
377
378
379
380 } else {
381
382 int outSize = partonSystemsPtr->sizeOut(0);
383 for (int iMem = 0; iMem < outSize; iMem++) {
384 int iNow = partonSystemsPtr->getOut(0, iMem);
385
386
387 if (iNow == jNow ) continue;
388
390 if (jNow == e[iNow].daughter1()
391 && jNow == e[iNow].daughter2()) continue;
392
394 ? false : FSR);
395 if (pTnow > 0.) pTemt = (pTemt < 0)
396 ? pTnow :
min(pTemt, pTnow);
397 }
398
399 }
400
401
403
404
405 if (!FSR) {
406 pTnow =
pT(e, iInA, jNow, iInB, FSR);
407 if (pTnow > 0.) pTemt = (pTemt < 0) ? pTnow :
min(pTemt, pTnow);
408 pTnow =
pT(e, iInB, jNow, iInA, FSR);
409 if (pTnow > 0.) pTemt = (pTemt < 0) ? pTnow :
min(pTemt, pTnow);
410
411
412
413 } else {
414 for (
int kNow = 0; kNow <
e.size(); kNow++) {
415 if (kNow == jNow || !e[kNow].isFinal()) continue;
417
418
419
420 pTnow =
pT(e, kNow, jNow, iInA, FSR);
421 if (pTnow > 0.) pTemt = (pTemt < 0)
422 ? pTnow :
min(pTemt, pTnow);
423 pTnow =
pT(e, kNow, jNow, iInB, FSR);
424 if (pTnow > 0.) pTemt = (pTemt < 0)
425 ? pTnow :
min(pTemt, pTnow);
426
427
428 for (
int rNow = 0; rNow <
e.size(); rNow++) {
429 if (rNow == kNow || rNow == jNow ||
430 !e[rNow].isFinal()) continue;
432 pTnow =
pT(e, kNow, jNow, rNow, FSR);
433 if (pTnow > 0.) pTemt = (pTemt < 0)
434 ? pTnow :
min(pTemt, pTnow);
435 }
436
437 }
438
439 }
440
441 }
442
443 }
444
445 }
446 }
447
448
449 return pTemt;
450 }
double pT(const Event &e, int RadAfterBranch, int EmtAfterBranch, int RecAfterBranch, bool FSR)
double pTpowheg(const Event &e, int i, int j, bool FSR)