148 Double_t tp,tS,zp,xp,yp,zS,xS,yS,pz,px,py,e,w;
149 Double_t tm,zm,xm,ym,pmz,pmx,pmy,em;
157 std::vector<int> dec_chain;
158 std::vector<int> dpvec;
159 bool hadDecay =
false;
188 double dpe = sqrt(dpmom*dpmom+dpm*dpm);
189 double phiin = 2. * M_PI * gRandom->Rndm();
191 if ( debug > 1){std::cout <<
" Adding DP gun with p "
195 <<
" theta,phi " << thetain <<
"," << phiin << std::endl << std::flush;}
196 fPythia->event.append(
fDP, 1, 0, 0, dpmom * sin(thetain) * cos(phiin), dpmom * sin(thetain) * sin(phiin), dpmom * cos(thetain), dpe, dpm);
199 if (!
fPythia->next()) LOG(FATAL) <<
"fPythia->next() failed";
202 for(
int i=0; i<
fPythia->event.size(); i++){
205 dpvec.push_back( i );
232 std::cout <<
" Debug: decay product of A: "
244 Double_t p = TMath::Sqrt(px*px+py*py+pz*pz);
249 Double_t gam = e/TMath::Sqrt(e*e-p*p);
254 im = (Int_t)
fPythia->event[i].mother1();
255 zm =
fPythia->event[im].zProd();
256 xm =
fPythia->event[im].xProd();
257 ym =
fPythia->event[im].yProd();
262 tm =
fPythia->event[im].tProd();
268 Double_t Rsq = test+1.;
281 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);
282 cpg->AddTrack(
fDP, px, py, pz, xp/
cm+dx,yp/
cm+dy,zp/
cm, 0,
false,e,tp/
cm/
c_light,w);
285 dec_chain.push_back( im );
286 dec_chain.push_back( i );
287 if (debug>1) std::cout << std::endl <<
" insert mother id " << im <<
" pdg=" <<
fPythia->event[im].id() <<
" pmz = " << pmz <<
" [GeV], zm = " << zm <<
" [mm] tm = " << tm <<
" [mm/c]" << std::endl;
288 if (debug>1) std::cout <<
" ----> insert DP id " << i <<
" pdg=" <<
fDP <<
" pz = " << pz <<
" [GeV] zp = " << zp <<
" [mm] tp = " << tp <<
" [mm/c]" << std::endl;
291 }
while ( iDP == 0 );
294 LOGF(info,
"ship event %i / pythia event-nr %i",
fShipEventNr,
fn);
298 if (debug>1) std::cout <<
"Filling daughter particles" << std::endl;
300 for(
int k=0; k<
fPythia->event.size(); k++){
302 if (debug>1) std::cout <<k<<
" pdg =" <<
fPythia->event[k].id() <<
" mum " <<
fPythia->event[k].mother1() << std::endl;
303 im =
fPythia->event[k].mother1();
305 if ( im == iDP ){
break;}
307 else {im =
fPythia->event[im].mother1();}
310 if (debug>1) std::cout <<
"reject" << std::endl;
313 if (debug>1) std::cout <<
"accept" << std::endl;
314 dec_chain.push_back( k );
334 for(std::vector<int>::iterator it = dec_chain.begin() + 2; it != dec_chain.end(); ++it){
338 int impy =
fPythia->event[k].mother1();
339 std::vector<int>::iterator itm = std::find( dec_chain.begin(), dec_chain.end(), impy);
341 if ( itm != dec_chain.end() )
342 im = itm - dec_chain.begin();
344 Bool_t wanttracking=
false;
345 if(
fPythia->event[k].isFinal()){ wanttracking=
true;}
351 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);