#include "ATOOLS/Phys/Momenta_Stretcher.H" #include "ATOOLS/Math/Vector.H" #include "ATOOLS/Phys/Flavour.H" #include "ATOOLS/Math/MathTools.H" #include "ATOOLS/Math/Poincare.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Org/My_MPI.H" #include using namespace ATOOLS; using namespace std; unsigned long int Momenta_Stretcher::s_fails = 0; Momenta_Stretcher::~Momenta_Stretcher() { if (m_module!=string("")) msg_Tracking()<<"Out of Momenta_Stretcher for " < "<xmt) { double ET = sqrt(cms.Abs2()); double x = sqrt(1.-sqr(xmt/ET)); double acc = dabs(rel)*ET; double f0,g0,x2; for (int i=0;i<10;i++) { f0 = -ET;g0 = 0.;x2 = x*x; for (short int k=n0;k& momenta,vector masses, const double rel) { int n=0; if(momenta.size()==masses.size()) n = momenta.size(); else { s_fails++; return false; } if ((n-n0)==2) { Vec4D cms = momenta[n0]+momenta[n-1]; Poincare boost(cms); for (int i=n0;i "<xmt) { double ET = sqrt(cms.Abs2()); double x = sqrt(1.-sqr(xmt/ET)); double acc = dabs(rel)*ET; double f0,g0,x2; for (int i=0;i<10;i++) { f0 = -ET;g0 = 0.;x2 = x*x; for (short int k=n0;k& momenta, const double rel) { int n = momenta.size(); if ((n-n0)==2) { double energy = momenta[n0][0]+momenta[n-1][0]; Vec3D direction = Vec3D(momenta[n0])/(Vec3D(momenta[n0]).Abs()); momenta[n0] = energy/2.*Vec4D(1.,direction); momenta[n-1] = energy/2.*Vec4D(1.,-1.*direction); return true; } else { double xmt = 0.; double * oldps2 = new double[n]; double * ens = new double[n]; Vec4D cms = Vec4D(0.,0.,0.,0.); for (short int i=n0;i::epsilon()) return false; if (1.-sqr(xmt/ET)::epsilon()) return false; double x = 1./sqrt(1.-sqr(xmt/ET)); double acc = dabs(rel)*ET; double f0,g0,x2; for (int i=0;i<10;i++) { f0 = -ET;g0 = 0.;x2 = x*x; for (short int i=n0;iGetOutParticles().size()<2) return true; std::vector masses; Particle_Vector outparts = blob->GetOutParticles(); vector momenta; Vec4D total(0.0,0.0,0.0,0.0); for (size_t i=0;i DecayBlob()&&outparts[i]->DecayBlob()->NOutP()>0) continue; masses.push_back(outparts[i]->FinalMass()); momenta.push_back(outparts[i]->Momentum()); total+=outparts[i]->Momentum(); // ======= // //msg_Out()<<"Check the "<FinalMass() ); // momenta.push_back( (*pit)->Momentum() ); // // msg_Out()<<" "<<(*pit)->Flav()<<" "<<(*pit)->FinalMass()<<" "<<(*pit)->Momentum()<>>>>>> .merge-right.r13247 } Poincare cms(total); for (size_t i=0; iDecayBlob()&&outparts[i]->DecayBlob()->NOutP()>0) continue; cms.BoostBack(momenta[j]); outparts[i]->SetMomentum(momenta[j]); ++j; } return true; } bool Momenta_Stretcher::StretchMomenta( const Particle_Vector& outparts, std::vector& moms) { if(outparts.size() != moms.size()) { s_fails++; return false; } if(outparts.size()==1 && abs(outparts[0]->FinalMass()-moms[0].Mass()) masses; for(size_t i=0; iFinalMass()); } Poincare boost(cms); for(size_t i=0; i& masses ) { if(outparts.size() != masses.size()) { s_fails++; return false; } if(outparts.size()==1 && abs(outparts[0]->FinalMass()-masses[0]) moms; for(size_t i=0; iMomentum()); cms += moms[i]; } Poincare boost(cms); for(size_t i=0; iSetMomentum(moms[i]); outparts[i]->SetFinalMass(masses[i]); } return true; }