98 {
99 Double_t
tp, tS, zp, xp, yp, zS, xS, yS,
pz,
px,
py, e,
w;
100 Double_t tm, zm, xm, ym, pmz, pmx, pmy, em;
101 Int_t im;
102
103
104
105
106 int iHNL = 0;
107
108 std::vector<int>
109 dec_chain;
110 std::vector<int> hnls;
111 do {
113
114
116 while (x) {
118 LOG(warning) << "End of input file. Rewind.";
119 }
122 if (
static_cast<int>(fabs(
hid[0])) != 431) {
124 } else {
125 Double_t
rnr = gRandom->Uniform(0, 1);
128 };
129
130
131 }
132 }
135 hE[0],
hM[0], 0., 9.);
136 }
138 for (
int i = 0;
i <
fPythia->event.size();
i++) {
139
141 hnls.push_back(i);
142 }
143 }
144 iHNL = hnls.size();
145 if (iHNL == 0) {
146
147
149
150 } else {
151 int r = static_cast<int>(gRandom->Uniform(0, iHNL));
152
154
159
164
166 Double_t
p = TMath::Sqrt(px * px + py * py + pz * pz);
167 Double_t lam = LS /
p;
171 Double_t gam = e / TMath::Sqrt(e * e - p * p);
172 Double_t
beta =
p / e;
174
175
176
177 w = TMath::Exp(-LS / (beta * gam *
fctau)) *
179 im = (Int_t)
fPythia->event[i].mother1();
180 zm =
fPythia->event[im].zProd();
181 xm =
fPythia->event[im].xProd();
182 ym =
fPythia->event[im].yProd();
187 tm =
fPythia->event[im].tProd();
188
191
192
193 cpg->AddTrack((Int_t)
mid[0],
mpx[0],
mpy[0],
mpz[0], xm / cm + dx / cm,
194 ym / cm + dy / cm, zm / cm, -1,
false,
mE[0], 0., 1.);
195 cpg->AddTrack(
196 (Int_t)
fPythia->event[im].id(), pmx, pmy, pmz, xm / cm + dx / cm,
197 ym / cm + dy / cm, zm / cm, 0,
false, em, tm / cm /
c_light,
198 w);
199 cpg->AddTrack(
fHNL, px, py, pz, xp / cm + dx / cm, yp / cm + dy / cm,
200 zp / cm, 1,
false, e, tp / cm /
c_light, w);
201 } else {
202 cpg->AddTrack(
203 (Int_t)
fPythia->event[im].id(), pmx, pmy, pmz, xm / cm + dx / cm,
204 ym / cm + dy / cm, zm / cm, -1,
false, em, tm / cm /
c_light,
205 w);
206 cpg->AddTrack(
fHNL, px, py, pz, xp / cm + dx / cm, yp / cm + dy / cm,
207 zp / cm, 0,
false, e, tp / cm /
c_light, w);
208 }
209
210 dec_chain.push_back(im);
211 dec_chain.push_back(i);
212
213
214
215
217 }
218 } while (iHNL ==
219 0);
220
222 LOGF(info,
"ship event %i / pythia event-nr %i",
fShipEventNr,
fn);
223 }
225
226 for (
int k = 0;
k <
fPythia->event.size();
k++) {
227
229 while (im > 0) {
230 if (im == iHNL) {
231 break;
232 }
233
234 else {
235 im =
fPythia->event[im].mother1();
236 }
237 }
238 if (im < 1) {
239 continue;
240 }
241 dec_chain.push_back(k);
242 }
243
244
245
246 for (std::vector<int>::iterator it = dec_chain.begin() + 2;
247 it != dec_chain.end(); ++it) {
248
250
251 int impy =
fPythia->event[
k].mother1();
252 std::vector<int>::iterator itm =
253 std::find(dec_chain.begin(), dec_chain.end(), impy);
254 im = -1;
255 if (itm != dec_chain.end())
256 im = itm - dec_chain.begin();
257
258 Bool_t wanttracking = false;
259 if (
fPythia->event[k].isFinal()) {
260 wanttracking = true;
261 }
267 im += 1;
268 }
269 cpg->AddTrack((Int_t)
fPythia->event[k].id(), px, py, pz, xS / cm, yS / cm,
270 zS / cm, im, wanttracking, e, tS / cm /
c_light, w);
271
272
273 }
274 return kTRUE;
275}
std::pair< Double_t, Double_t > CalculateBeamOffset(Double_t smearBeam, Double_t paintBeam)