diff --git a/src/Classic/AbsBeamline/Monitor.cpp b/src/Classic/AbsBeamline/Monitor.cpp index 442bf9ecaea260fd9a325c54eb05105dbf048c85..7d9b11f61353726c33c13e52526907dfbb9403a2 100644 --- a/src/Classic/AbsBeamline/Monitor.cpp +++ b/src/Classic/AbsBeamline/Monitor.cpp @@ -103,7 +103,7 @@ bool Monitor::applyToReferenceParticle(const Vector_t &R, dt * (R(2) + P(2) * recpgamma) > dt * middle) { double frac = (middle - R(2)) / (P(2) * recpgamma); double time = t + frac * dt; - Vector_t dR = (0.5 + frac) * P * recpgamma; + Vector_t dR = frac * P * recpgamma; double ds = euclidean_norm(dR); lossDs_m->addReferenceParticle(csTrafoGlobal2Local_m.transformFrom(R + dR), csTrafoGlobal2Local_m.rotateFrom(P), @@ -116,9 +116,12 @@ bool Monitor::applyToReferenceParticle(const Vector_t &R, for (unsigned int i = 0; i < localNum; ++ i) { const double recpgamma = Physics::c * dt / Util::getGamma(RefPartBunch_m->P[i]); - lossDs_m->addParticle(RefPartBunch_m->R[i] + frac * RefPartBunch_m->P[i] * recpgamma - halfLength_s, - RefPartBunch_m->P[i], RefPartBunch_m->ID[i], - time, 0); + Vector_t shift = frac * recpgamma * RefPartBunch_m->P[i] - Vector_t(0, 0, middle); + lossDs_m->addParticle(RefPartBunch_m->R[i] + shift, + RefPartBunch_m->P[i], + RefPartBunch_m->ID[i], + time, + 0); } OpalData::OPENMODE openMode; if (numPassages_m > 0) {