29 TopRecoilHook(
bool doTopRecoilIn=
true,
bool useOldDipoleIn=
false,
bool doListIn =
false) {
34 m_wtCorr =
new Hist(
"corrective weight", 100, 0., 2.);
35 std::cout <<
" enabling TopRecoilHook"<< std::endl;
50 bool recoilToColoured = settingsPtr->flag(
"TimeShower:recoilToColoured");
51 if (recoilToColoured){
53 std::cout <<
" TopRecoilHook should not be used with RecoilToColoured=on; disabling"<< std::endl;
66 bool inResonance)
override {
69 if (!inResonance)
return false;
72 int iTop = partonSystemsPtr->getInRes(iSys);
73 if (iTop == 0 ||
event[iTop].idAbs() != 6)
return false;
76 int sizeOut = partonSystemsPtr->sizeOut(iSys);
77 if (sizeOut == 2)
return false;
81 int iEmt = sizeOld + 1;
82 int iRec = sizeOld + 2;
87 iRad =
event[iRad].mother1();
88 iRec =
event[iRec].mother1();
92 if (
event[iEmt].
id() != 21)
return false;
93 if (
event[iTop].
id() == 6) {
96 if (
event[iEmt].acol() !=
event[iTop].acol())
return false;
100 if (
event[iRec].idAbs() != 24) {
101 cout <<
" ERROR: recoiler is " <<
event[iRec].id() << endl;
106 double pRadRec =
event[iRad].p() *
event[iRec].p();
107 double pRadEmt =
event[iRad].p() *
event[iEmt].p();
108 double pRecEmt =
event[iRec].p() *
event[iEmt].p();
109 double wtW = 2. * pRadRec / (pRadEmt * pRecEmt)
110 - pow2(
event[iRad].
m() / pRadEmt);
115 double pRadTop =
event[iRad].p() *
event[iTop].p();
116 double pTopEmt =
event[iTop].p() *
event[iEmt].p();
117 double wtT = 2. * pRadTop / (pRadEmt * pTopEmt)
118 - pow2(
event[iRad].
m() / pRadEmt) - pow2(
event[iTop].
m() / pTopEmt);
125 std::cout <<
"\n now event with sizeOld = " << sizeOld <<
", iSys = "
126 << iSys <<
", sizeOut = " << sizeOut << scientific
128 <<
", weight with W = " << wtW <<
" and with t = " << wtT << std::endl;
129 partonSystemsPtr->list();
134 return (wtT < wtW * rndmPtr->flat());