void Lund_Interface::FillOutgoingParticlesInBlob(Blob *blob) { Flavour flav; Vec4D momentum; Particle * particle; int n_q(0), n_g(0); Particle_Vector partons; for (int j=hepevt.jdahep[0][0]-1;j<hepevt.jdahep[0][1];j++) { int idhep = hepevt.idhep[j]; flav=IdhepToSherpa(idhep); momentum=Vec4D(hepevt.phep[j][3],hepevt.phep[j][0], hepevt.phep[j][1],hepevt.phep[j][2]); // don't fill blob position vector here, because decay is in CMS until boosting back particle = new Particle(-1,flav,momentum); particle->SetNumber(0); particle->SetStatus(part_status::active); particle->SetInfo('D'); particle->SetFinalMass(hepevt.phep[j][4]); blob->AddToOutParticles(particle); if(abs(idhep)>0 && abs(idhep)<7) { n_q++; partons.push_back(particle); } else if(abs(idhep)==21) { n_g++; partons.push_back(particle); } } size_t n=partons.size(); if(n>0) blob->SetStatus(blob_status::needs_showers); if(n_q==2 && n_g==0 && n==2) { if(partons[0]->Flav().IsAnti()) { partons[0]->SetFlow(2,-1); partons[1]->SetFlow(1,partons[0]->GetFlow(2)); } else { partons[0]->SetFlow(1,-1); partons[1]->SetFlow(2,partons[0]->GetFlow(1)); } } else if(n_q==0 && n_g==2 && n==2) { partons[0]->SetFlow(2,-1); partons[0]->SetFlow(1,-1); partons[1]->SetFlow(2,partons[0]->GetFlow(1)); partons[1]->SetFlow(1,partons[0]->GetFlow(2)); } else if(n_q==0 && n_g==3 && n==3) { partons[0]->SetFlow(2,-1); partons[0]->SetFlow(1,-1); partons[1]->SetFlow(2,partons[0]->GetFlow(1)); partons[1]->SetFlow(1,-1); partons[2]->SetFlow(2,partons[1]->GetFlow(1)); partons[2]->SetFlow(1,partons[0]->GetFlow(2)); } else if(n>0) { msg_Error()<<METHOD<<" wasn't able to set the color flow for"<<endl<<*blob<<endl; } }
void Lund_Interface::FillFragmentationBlob(Blob *blob) { Particle *particle; Flavour flav; Vec4D momentum, position; for (int i=0;i<hepevt.nhep;++i) { if ((hepevt.isthep[i]!=2)&&(hepevt.isthep[i]!=1)&&(hepevt.isthep[i]!=149)) continue; if (hepevt.idhep[i]==93) flav=Flavour(kf_cluster); else flav=IdhepToSherpa(hepevt.idhep[i]); if (flav==Flavour(kf_string) || flav==Flavour(kf_cluster)) { for (int j=hepevt.jdahep[i][0]-1;j<hepevt.jdahep[i][1];j++) { flav=IdhepToSherpa(hepevt.idhep[j]); momentum=Vec4D(hepevt.phep[j][3],hepevt.phep[j][0], hepevt.phep[j][1],hepevt.phep[j][2]); position=Vec4D(hepevt.vhep[j][3],hepevt.vhep[j][0], hepevt.vhep[j][1],hepevt.vhep[j][2]); particle = new Particle(-1,flav,momentum); particle->SetNumber(0); particle->SetStatus(part_status::active); particle->SetInfo('P'); particle->SetFinalMass(hepevt.phep[j][4]); blob->SetPosition(position); blob->AddToOutParticles(particle); } } } blob->SetStatus(blob_status::needs_hadrondecays); }