101{
102 Double_t
tp,td,tS,zp,xp,yp,zd,xd,yd,zS,xS,yS,
pz,
px,
py,e,
w;
103 Double_t tm,zm,xm,ym,pmz,pmx,pmy,em;
104 Int_t im;
105
106
107
108
109 int iHNL = 0;
110 std::vector<int> dec_chain;
111 std::vector<int> hnls;
112 do {
113
115
116
118 while(x){
119 if (
fn==
fNevents) {LOG(WARNING) <<
"End of input file. Rewind.";}
122 if (
int(fabs(
hid[0]) ) != 431){
x =
false; }
123 else {
124 Double_t
rnr = gRandom->Uniform(0,1);
125 if( rnr<
fFDs ) {
x =
false; };
126
127 }
128 }
130 fPythia->event.append( (Int_t)
hid[0], 1, 0, 0,
hpx[0],
hpy[0],
hpz[0],
hE[0],
hM[0], 0., 9. );
131 }
133 for(
int i=0;
i<
fPythia->event.size();
i++){
134
136 hnls.push_back( i );
137 }
138 }
139 iHNL = hnls.size();
140 if ( iHNL == 0 ){
141
142
144 }else{
145 int r =
int( gRandom->Uniform(0,iHNL) );
146
148
153
158
159 Int_t ida =
fPythia->event[
i].daughter1();
160 zd =
fPythia->event[ida].zProd();
161 xd =
fPythia->event[ida].xProd();
162 yd =
fPythia->event[ida].yProd();
163 td =
fPythia->event[ida].tProd();
164
166 Double_t
p = TMath::Sqrt(px*px+py*py+pz*pz);
171 Double_t gam = e/TMath::Sqrt(e*e-p*p);
174
176 im = (Int_t)
fPythia->event[i].mother1();
177 zm =
fPythia->event[im].zProd();
178 xm =
fPythia->event[im].xProd();
179 ym =
fPythia->event[im].yProd();
184 tm =
fPythia->event[im].tProd();
185
190 Double_t Rsq =
test+1.;
191 while(Rsq>test){
195 }
196 }
198
199 cpg->AddTrack((Int_t)
mid[0],
mpx[0],
mpy[0],
mpz[0],xm/
cm+
dx,ym/
cm+
dy,zm/
cm,-1,
false,
mE[0],0.,1.);
200 cpg->AddTrack((Int_t)
fPythia->event[im].id(),pmx,pmy,pmz,xm/
cm+
dx,ym/
cm+
dy,zm/
cm,0,
false,em,tm/
cm/
c_light,
w);
201 cpg->AddTrack(
fHNL, px, py, pz, xp/
cm+dx,yp/
cm+dy,zp/
cm, 1,
false,e,tp/
cm/
c_light,w);
202 }else{
203 cpg->AddTrack((Int_t)
fPythia->event[im].id(),pmx,pmy,pmz,xm/
cm+
dx,ym/
cm+
dy,zm/
cm,-1,
false,em,tm/
cm/
c_light,
w);
204 cpg->AddTrack(
fHNL, px, py, pz, xp/
cm+dx,yp/
cm+dy,zp/
cm, 0,
false,e,tp/
cm/
c_light,w);
205 }
206
207 dec_chain.push_back( im );
208 dec_chain.push_back( i );
209
210
212 }
213 } while ( iHNL == 0 );
214
216 LOGF(info,
"ship event %i / pythia event-nr %i",
fShipEventNr,
fn);
217 }
219
220 for(
int k=0;
k<
fPythia->event.size();
k++){
221
223 while (im>0){
224 if ( im == iHNL ){break;}
225
226 else {im =
fPythia->event[im].mother1();}
227 }
228 if (im < 1) {continue;}
229 dec_chain.push_back( k );
230 }
231
232
233 for(std::vector<int>::iterator it = dec_chain.begin() + 2; it != dec_chain.end(); ++it){
234
236
237 int impy =
fPythia->event[
k].mother1();
238 std::vector<int>::iterator itm = std::find( dec_chain.begin(), dec_chain.end(), impy);
239 im =-1;
240 if ( itm != dec_chain.end() )
241 im = itm - dec_chain.begin();
242
243 Bool_t wanttracking=false;
244 if(
fPythia->event[k].isFinal()){ wanttracking=
true;}
250 cpg->AddTrack((Int_t)
fPythia->event[k].id(),px,py,pz,xS/
cm,yS/
cm,zS/
cm,im,wanttracking,e,tS/
cm/
c_light,w);
251
252 }
253 return kTRUE;
254}