diff --git a/src/Classic/AbsBeamline/Collimator.cpp b/src/Classic/AbsBeamline/Collimator.cpp index 504dc53b0fa59395ab497414fab8f3fc27617bab..1e53ac52b00524fed6d8d3515a3d3eab58a28904 100644 --- a/src/Classic/AbsBeamline/Collimator.cpp +++ b/src/Classic/AbsBeamline/Collimator.cpp @@ -263,27 +263,28 @@ bool Collimator::checkCollimator(Vector_t r, Vector_t rmin, Vector_t rmax) { } -// rectangle collimators in cyclotron cyclindral coordiantes +// rectangle collimators in cyclotron cyclindral coordinates // without surfacephysics, the particle hitting collimator is deleted directly bool Collimator::checkCollimator(PartBunch &bunch, const int turnnumber, const double t, const double tstep) { bool flagNeedUpdate = false; Vector_t rmin, rmax; - + // bunch bounds for fast preliminary check if bunch is close bunch.get_bounds(rmin, rmax); - double r_start = sqrt(xstart_m * xstart_m + ystart_m * ystart_m); - double r_end = sqrt(xend_m * xend_m + yend_m * yend_m); - double r1 = sqrt(rmax(0) * rmax(0) + rmax(1) * rmax(1)); if(rmax(2) >= zstart_m && rmin(2) <= zend_m) { -// if( r1 > r_start - 10.0 && r1 < r_end + 10.0 ){ - if( r1 > r_start - 100.0 && r1 < r_end + 100.0 ){ + double r_start = sqrt(xstart_m * xstart_m + ystart_m * ystart_m); + double r_end = sqrt( xend_m * xend_m + yend_m * yend_m); + double rbunch_min = sqrt(rmin(0) * rmin(0) + rmin(1) * rmin(1)); + double rbunch_max = sqrt(rmax(0) * rmax(0) + rmax(1) * rmax(1)); + // if( rbunch_max > r_start - 100.0 && rbunch_max < r_end + 100.0 ){ // old check, only checks outer bound + if( rbunch_max > r_start && rbunch_min < r_end ){ // check similar to z size_t tempnum = bunch.getLocalNum(); int pflag = 0; for(unsigned int i = 0; i < tempnum; ++i) { if(bunch.PType[i] == ParticleType::REGULAR && bunch.R[i](2) < zend_m && bunch.R[i](2) > zstart_m ) { pflag = checkPoint(bunch.R[i](0), bunch.R[i](1)); - /// bunch.Bin[i] != -1 makes sure the partcile is not stored in more than one collimator + // bunch.Bin[i] != -1 makes sure the particle is not stored in more than one collimator if ((pflag != 0) && (bunch.Bin[i] != -1)) { if (!sphys_m) lossDs_m->addParticle(bunch.R[i], bunch.P[i], bunch.ID[i]);