#include "SHERPA/Single_Events/Hadron_Decays.H" #include "ATOOLS/Math/Random.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/Message.H" #include "SHERPA/Single_Events/Decay_Handler_Base.H" #include "METOOLS/SpinCorrelations/Amplitude2_Tensor.H" using namespace SHERPA; using namespace ATOOLS; using namespace std; Hadron_Decays::Hadron_Decays(Decay_Handler_Base* dechandler) : p_dechandler(dechandler) { m_name = std::string("Hadron_Decays"); m_type = eph::Hadronization; } Hadron_Decays::~Hadron_Decays() { } Return_Value::code Hadron_Decays::Treat(Blob_List* bloblist) { DEBUG_FUNC("bloblist->size()="<size()); if(bloblist->empty()) return Return_Value::Nothing; bool didit(false); for (size_t blit(0);blitsize();++blit) { Blob* blob=(*bloblist)[blit]; if (p_dechandler && blob->Has(blob_status::needs_hadrondecays)) { didit = true; p_dechandler->SetBlobList(bloblist); blob->UnsetStatus(blob_status::needs_hadrondecays); try { if (p_dechandler->SpinCorr()) { Blob* signal=bloblist->FindFirst(btp::Signal_Process); if (signal) { METOOLS::Amplitude2_Tensor* amps(NULL); Blob_Data_Base* data = (*signal)["ATensor"]; if (data) amps=data->Get(); Particle_Vector origparts; Particle_Vector outparts=blob->GetOutParticles(); Particle_Vector signalparts=signal->GetOutParticles(); for (size_t i=0; iOriginalPart()==signalparts[j]) { origparts.push_back(signalparts[j]); DEBUG_INFO("Found original: "<<*signalparts[j]); found=true; break; } } if (!found) { DEBUG_INFO("Found no original particle."); origparts.push_back(NULL); } } p_dechandler->TreatInitialBlob(blob, amps, origparts); } else { p_dechandler->TreatInitialBlob(blob, NULL, Particle_Vector()); } } else p_dechandler->TreatInitialBlob(blob, NULL, Particle_Vector()); } catch (Return_Value::code ret) { msg_Tracking()<CleanUp(); } void Hadron_Decays::Finish(const std::string &) { }