276 {
277
278
279
280 double pTemt = -1., pTnow;
281 int xSR1 = (xSRin == -1) ? 0 : xSRin;
282 int xSR2 = (xSRin == -1) ? 2 : xSRin + 1;
283 for (int xSR = xSR1; xSR < xSR2; xSR++) {
284
285 bool FSR = (xSR == 0) ? false : true;
286
287
288
291
292
293 }
else if (!FSR &&
m_pTdefMode == 2 && i > 0 && j > 0 &&
r > 0) {
295
296
297 }
else if (FSR &&
m_pTdefMode == 2 && j > 0 && k > 0 &&
r > 0) {
299
300
301 } else {
302
303
304
305
306 int iInA = partonSystemsPtr->getInA(0);
307 int iInB = partonSystemsPtr->getInB(0);
308 while (e[iInA].mother1() != 1) { iInA =
e[iInA].mother1(); }
309 while (e[iInB].mother1() != 2) { iInB =
e[iInB].mother1(); }
310
311
312 int jNow = (j > 0) ? j : 0;
313 int jMax = (j > 0) ? j + 1 :
e.
size();
314 for (; jNow < jMax; jNow++) {
315
316
317 if ( !e[jNow].isFinal() ) continue;
318
319
321
322
323 if (!FSR) {
325 if (pTnow > 0.) pTemt = (pTemt < 0) ? pTnow :
min(pTemt, pTnow);
326
327
328
329
330 } else {
331
332 int outSize = partonSystemsPtr->sizeOut(0);
333 for (int iMem = 0; iMem < outSize; iMem++) {
334 int iNow = partonSystemsPtr->getOut(0, iMem);
335
336
337 if (iNow == jNow) continue;
338 if (jNow == e[iNow].daughter1()
339 && jNow == e[iNow].daughter2()) continue;
340
342 ? false : FSR);
343 if (pTnow > 0.) pTemt = (pTemt < 0)
344 ? pTnow :
min(pTemt, pTnow);
345 }
346
347 }
348
349
351
352
353 if (!FSR) {
354 pTnow =
pTpythia(e, iInA, jNow, iInB, FSR);
355 if (pTnow > 0.) pTemt = (pTemt < 0) ? pTnow :
min(pTemt, pTnow);
356 pTnow =
pTpythia(e, iInB, jNow, iInA, FSR);
357 if (pTnow > 0.) pTemt = (pTemt < 0) ? pTnow :
min(pTemt, pTnow);
358
359
360
361 } else {
362 for (
int kNow = 0; kNow <
e.size(); kNow++) {
363 if (kNow == jNow || !e[kNow].isFinal()) continue;
364
365
366
367 pTnow =
pTpythia(e, kNow, jNow, iInA, FSR);
368 if (pTnow > 0.) pTemt = (pTemt < 0)
369 ? pTnow :
min(pTemt, pTnow);
370 pTnow =
pTpythia(e, kNow, jNow, iInB, FSR);
371 if (pTnow > 0.) pTemt = (pTemt < 0)
372 ? pTnow :
min(pTemt, pTnow);
373
374
375 for (
int rNow = 0; rNow <
e.size(); rNow++) {
376 if (rNow == kNow || rNow == jNow ||
377 !e[rNow].isFinal()) continue;
378 pTnow =
pTpythia(e, kNow, jNow, rNow, FSR);
379 if (pTnow > 0.) pTemt = (pTemt < 0)
380 ? pTnow :
min(pTemt, pTnow);
381 }
382
383 }
384 }
385 }
386 }
387 }
388 }
389
390#ifdef DBGOUTPUT
391 std::cout <<
"pTcalc: i = " <<
i <<
", j = " << j <<
", k = " <<
k
392 <<
", r = " <<
r <<
", xSR = " << xSRin
393 << ", pTemt = " << pTemt << std::endl;
394#endif
395
396 return pTemt;
397 }
double pTpythia(const Event &e, int RadAfterBranch, int EmtAfterBranch, int RecAfterBranch, bool FSR)
double pTpowheg(const Event &e, int i, int j, bool FSR)