#include #include #include #include #include "mucal.h" #include "panel.h" /* ********************************************** */ int detector_ovlap( float dis, float Rdet, float Rfac, float *overlap_frac) { float pi, x, x2, area1, area2; pi = 3.14159; /* printf("dis %4.2f Rdet %4.1f Rfac %4.1f ", dis, Rdet, Rfac); */ if (fabs(dis) <= (fabs(Rdet) - fabs(Rfac))) {*overlap_frac = 1.0; /* printf("overlap: 1.0\n");*/ return(0);} if (fabs(dis) >= (fabs(Rdet) + fabs(Rfac))) {*overlap_frac = 0.0; /* printf("overlap: 0.0\n");*/ return(0);} x2 = Rfac*Rfac - (Rdet*Rdet - dis*dis - Rfac*Rfac) * (Rdet*Rdet - dis*dis - Rfac*Rfac) / (4.0 * dis*dis); x = sqrt(x2); area1 = Rfac*Rfac * asin(x / Rfac) - x * sqrt(Rfac*Rfac - x*x); area2 = Rdet*Rdet * asin(x / Rdet) - x * sqrt(Rdet*Rdet - x*x); if (dis*dis < (Rdet*Rdet - Rfac*Rfac)) *overlap_frac = pi * Rfac * Rfac - area1 + area2; else *overlap_frac = area1 + area2; *overlap_frac /= pi * Rfac * Rfac; /* printf( "x2 %5.2f x %4.3f area1 %4.2f area2 %4.2f asin(x/Rf) %5.3f asin(x/Rd) %5.3f ovlp_frac %4.3f\n", x2, x, area1, area2, asin(x / Rfac), asin(x / Rdet), *overlap_frac); */ return(0); }