6650-Useq Mirror tmp Ai xyz: -0.990169 -0.139875 -0.000050, len: 46395232.000000 6651-Useq Mirror tmp Bi xyz: -0.139875 +0.990169 -1.000000, len: 0.000000, lenBi: 1.414214 6652-Useq Mirror tmp Bi xyz: +0.000005 -0.000035 +0.000035, len: 0.000000 6653-Useq Mirror tmp Ro xyz: +0.990174 +0.139840 +0.000085, len: 1.000000 6654-Useq Mirror output Ro xyz: +0.990174 +0.139840 +0.000085, len: 1.000000 6655- 6656- 6657-Useq: 6000, scat: 0,: FACET[iseq] posit.xyz: +35.52 +164.21 +0.00 168.01 (cm) 6658- 6659- 6660-Useq: 6000, scat: 0,: FACET[iseq].Dnorm.xyz: -0.21141 -0.97740 +0.00005 1.0000 6661-Useq: 0, scat: 0,: INvekt.xyz: +0.00000 +0.00000 -1.00000 1.0000 6662-Useq Mirror input Ri xyz: +0.000000 +0.000000 -1.000000, len: 1.000000 6663-Useq Mirror input N xyz: -0.211406 -0.977398 +0.000050, len: 1.000000 6664-Useq Mirror tmp C xyz: -0.977398 +0.211406 +0.000000, len: 1.000000 6665-Useq Mirror tmp Ai xyz: +0.211406 +0.977398 -0.000050, len: 0.000000 6666-Useq Mirror tmp Bi xyz: +0.977398 -0.211406 -1.000000, len: 0.000000, lenBi: 1.414214 6667-Useq Mirror tmp Bi xyz: -0.000035 +0.000007 +0.000035, len: 0.000000 6668-Useq Mirror tmp Ro xyz: -0.211440 -0.977391 +0.000085, len: 1.000000 6669-Useq Mirror output Ro xyz: -0.211440 -0.977391 +0.000085, len: 1.000000 6670:Useq: 6000, scat: 0,: OUTvekt.xyz: -0.21144 -0.97739 +0.00009 1.0000 Foc_len: 100.0 m 6671-Useq: 6000, scat: 0, OUTxy: -2078.9, -9609.7, Crystal XY: +35.5, +164.2, Foc_len: 100.0 m 6672-Useq: 6000, scat: 0, Target position: X: -2078.9 Y: -9609.7, B_contr: 4.80e-01 6673- 6674- 6675-Useq: 6000, scat: 2,: FACET[iseq] posit.xyz: +35.52 +164.21 +0.00 168.01 (cm) 6676- 6677- 6678-Useq: 6000, scat: 2,: FACET[iseq].Dnorm.xyz: -0.21141 -0.97740 +0.00005 1.0000 6679-Useq: 0, scat: 0,: INvekt.xyz: +0.00000 +0.00000 -1.00000 1.0000 6680-Useq Mirror input Ri xyz: +0.000000 +0.000000 -1.000000, len: 1.000000 6681-Useq Mirror input N xyz: -0.211406 -0.977398 +0.000050, len: 1.000000 6682-Useq Mirror tmp C xyz: -0.977398 +0.211406 +0.000000, len: 1.000000 6683-Useq Mirror tmp Ai xyz: +0.211406 +0.977398 -0.000050, len: 0.000000 6684-Useq Mirror tmp Bi xyz: +0.977398 -0.211406 -1.000000, len: 0.000000, lenBi: 1.414214 6685-Useq Mirror tmp Bi xyz: -0.000035 +0.000007 +0.000035, len: 0.000000 6686-Useq Mirror tmp Ro xyz: -0.211440 -0.977391 +0.000085, len: 1.000000 6687-Useq Mirror output Ro xyz: -0.211440 -0.977391 +0.000085, len: 1.000000 6688:Useq: 6000, scat: 2,: OUTvekt.xyz: -0.21144 -0.97739 +0.00009 1.0000 Foc_len: 100.0 m -- 7503-Useq Mirror tmp Ai xyz: +0.923914 -0.382599 -0.000050, len: 46395232.000000 7504-Useq Mirror tmp Bi xyz: -0.382599 -0.923914 -1.000000, len: 0.000000, lenBi: 1.414214 7505-Useq Mirror tmp Bi xyz: +0.000014 +0.000033 +0.000035, len: 0.000000 7506-Useq Mirror tmp Ro xyz: -0.923901 +0.382632 +0.000085, len: 1.000000 7507-Useq Mirror output Ro xyz: -0.923901 +0.382632 +0.000085, len: 1.000000 7508- 7509- 7510-Useq: 5000, scat: 0,: FACET[iseq] posit.xyz: -74.98 +149.49 +0.00 167.24 (cm) 7511- 7512- 7513-Useq: 5000, scat: 0,: FACET[iseq].Dnorm.xyz: +0.44835 -0.89386 +0.00005 1.0000 7514-Useq: 0, scat: 0,: INvekt.xyz: +0.00000 +0.00000 -1.00000 1.0000 7515-Useq Mirror input Ri xyz: +0.000000 +0.000000 -1.000000, len: 1.000000 7516-Useq Mirror input N xyz: +0.448351 -0.893857 +0.000050, len: 1.000000 7517-Useq Mirror tmp C xyz: -0.893857 -0.448351 +0.000000, len: 1.000000 7518-Useq Mirror tmp Ai xyz: -0.448351 +0.893857 -0.000050, len: 0.000000 7519-Useq Mirror tmp Bi xyz: +0.893857 +0.448351 -1.000000, len: 0.000000, lenBi: 1.414214 7520-Useq Mirror tmp Bi xyz: -0.000032 -0.000016 +0.000035, len: 0.000000 7521-Useq Mirror tmp Ro xyz: +0.448320 -0.893873 +0.000085, len: 1.000000 7522-Useq Mirror output Ro xyz: +0.448320 -0.893873 +0.000085, len: 1.000000 7523:Useq: 5000, scat: 0,: OUTvekt.xyz: +0.44832 -0.89387 +0.00009 1.0000 Foc_len: 100.0 m 7524-Useq: 5000, scat: 0, OUTxy: +4408.2, -8789.2, Crystal XY: -75.0, +149.5, Foc_len: 100.0 m 7525-Useq: 5000, scat: 0, Target position: X: +4408.2 Y: -8789.2, B_contr: 9.84e-02 7526- 7527- 7528-Useq: 5000, scat: 2,: FACET[iseq] posit.xyz: -74.98 +149.49 +0.00 167.24 (cm) 7529- 7530- 7531-Useq: 5000, scat: 2,: FACET[iseq].Dnorm.xyz: +0.44835 -0.89386 +0.00005 1.0000 7532-Useq: 0, scat: 0,: INvekt.xyz: +0.00000 +0.00000 -1.00000 1.0000 7533-Useq Mirror input Ri xyz: +0.000000 +0.000000 -1.000000, len: 1.000000 7534-Useq Mirror input N xyz: +0.448351 -0.893857 +0.000050, len: 1.000000 7535-Useq Mirror tmp C xyz: -0.893857 -0.448351 +0.000000, len: 1.000000 7536-Useq Mirror tmp Ai xyz: -0.448351 +0.893857 -0.000050, len: 0.000000 7537-Useq Mirror tmp Bi xyz: +0.893857 +0.448351 -1.000000, len: 0.000000, lenBi: 1.414214 7538-Useq Mirror tmp Bi xyz: -0.000032 -0.000016 +0.000035, len: 0.000000 7539-Useq Mirror tmp Ro xyz: +0.448320 -0.893873 +0.000085, len: 1.000000 7540-Useq Mirror output Ro xyz: +0.448320 -0.893873 +0.000085, len: 1.000000 7541:Useq: 5000, scat: 2,: OUTvekt.xyz: +0.44832 -0.89387 +0.00009 1.0000 Foc_len: 100.0 m -- 10639-Useq Mirror tmp Ai xyz: -0.022754 +0.999741 -0.000050, len: 46395232.000000 10640-Useq Mirror tmp Bi xyz: +0.999741 +0.022754 -1.000000, len: -0.000000, lenBi: 1.414214 10641-Useq Mirror tmp Bi xyz: -0.000035 -0.000001 +0.000035, len: -0.000000 10642-Useq Mirror tmp Ro xyz: +0.022718 -0.999742 +0.000085, len: 1.000000 10643-Useq Mirror output Ro xyz: +0.022718 -0.999742 +0.000085, len: 1.000000 10644- 10645- 10646-Useq: 3000, scat: 1,: FACET[iseq] posit.xyz: +86.52 +83.24 +0.00 120.06 (cm) 10647- 10648- 10649-Useq: 3000, scat: 1,: FACET[iseq].Dnorm.xyz: -0.72064 -0.69331 +0.00005 1.0000 10650-Useq: 0, scat: 0,: INvekt.xyz: +0.00000 +0.00000 -1.00000 1.0000 10651-Useq Mirror input Ri xyz: +0.000000 +0.000000 -1.000000, len: 1.000000 10652-Useq Mirror input N xyz: -0.720637 -0.693313 +0.000050, len: 1.000000 10653-Useq Mirror tmp C xyz: -0.693313 +0.720637 +0.000000, len: 1.000000 10654-Useq Mirror tmp Ai xyz: +0.720637 +0.693313 -0.000050, len: 0.000000 10655-Useq Mirror tmp Bi xyz: +0.693313 -0.720637 -1.000000, len: 0.000000, lenBi: 1.414214 10656-Useq Mirror tmp Bi xyz: -0.000025 +0.000025 +0.000035, len: 0.000000 10657-Useq Mirror tmp Ro xyz: -0.720661 -0.693288 +0.000085, len: 1.000000 10658-Useq Mirror output Ro xyz: -0.720661 -0.693288 +0.000085, len: 1.000000 10659:Useq: 3000, scat: 1,: OUTvekt.xyz: -0.72066 -0.69329 +0.00009 1.0000 Foc_len: 100.0 m -- 26112-Useq Mirror tmp Bi xyz: -0.742375 +0.669984 -1.000000, len: 0.000000, lenBi: 1.414214 26113-Useq Mirror tmp Bi xyz: +0.000026 -0.000024 +0.000035, len: 0.000000 26114-Useq Mirror tmp Ro xyz: +0.670011 +0.742351 +0.000085, len: 1.000000 26115-Useq Mirror output Ro xyz: +0.670011 +0.742351 +0.000085, len: 1.000000 26116- 24000 mass_limit_sum derived so far from layer 0: 204.44 kg 26117- 26118- 26119-Useq: 24000, scat: 1,: FACET[iseq] posit.xyz: +129.02 +36.62 +0.00 134.11 (cm) 26120- 26121- 26122-Useq: 24000, scat: 1,: FACET[iseq].Dnorm.xyz: -0.96201 -0.27303 +0.00005 1.0000 26123-Useq: 0, scat: 0,: INvekt.xyz: +0.00000 +0.00000 -1.00000 1.0000 26124-Useq Mirror input Ri xyz: +0.000000 +0.000000 -1.000000, len: 1.000000 26125-Useq Mirror input N xyz: -0.962007 -0.273026 +0.000050, len: 1.000000 26126-Useq Mirror tmp C xyz: -0.273026 +0.962007 +0.000000, len: 1.000000 26127-Useq Mirror tmp Ai xyz: +0.962007 +0.273026 -0.000050, len: 0.000000 26128-Useq Mirror tmp Bi xyz: +0.273026 -0.962007 -1.000000, len: 0.000000, lenBi: 1.414214 26129-Useq Mirror tmp Bi xyz: -0.000010 +0.000034 +0.000035, len: 0.000000 26130-Useq Mirror tmp Ro xyz: -0.962016 -0.272992 +0.000085, len: 1.000000 26131-Useq Mirror output Ro xyz: -0.962016 -0.272992 +0.000085, len: 1.000000 26132:Useq: 24000, scat: 1,: OUTvekt.xyz: -0.96202 -0.27299 +0.00009 1.0000 Foc_len: 100.0 m #include #include #include #include #include "mucal.h" #include "panel.h" /* ********************************************** */ vekt crossp( vekt a, vekt b) /*calculates cross product of a and b */ { vekt cp; cp.x = a.y * b.z - b.y * a.z; cp.y = -a.x * b.z + a.z * b.x; cp.z = a.x * b.y - b.y * a.x; cp.len = sqrt(cp.x * cp.x + cp.y * cp.y + cp.z * cp.z); cp.x /= cp.len; cp.y /= cp.len; cp.x /= cp.len; return(cp); } vekt normalize( vekt cp, int prt) /* noormaliizes cp */ { double lin; vekt co; lin = sqrt(cp.x * cp.x + cp.y * cp.y + cp.z * cp.z); if (prt) printf("Inside normalize: x: %11.8lf, y: %11.8lf, z: %11.8lf, len: %8.2lf\n", cp.x, cp.y, cp.z, lin); co.x = cp.x / lin; co.y = cp.y / lin; co.z = cp.z / lin; co.len = sqrt(co.x * co.x + co.y * co.y + co.z * co.z); if (prt) printf("At exit from normalize: x: %11.8lf, y: %11.8lf, z: %11.8lf, len: %8.2lf\n\n", co.x, co.y, co.z, co.len); return(co); } vekt mirror( vekt Ri, vekt N, int pt) /*calculates mirror vector, Ro, of Ri mirrored in normplane to N */ { vekt C, Ai, Bi, Ro; double lenB, lenBi; int prt = 1; if (prt) printf("Useq Mirror input Ri xyz: %+lf %+lf %+lf, len: %lf\n", Ri.x, Ri.y, Ri.z, Ri.len); if (prt) printf("Useq Mirror input N xyz: %+lf %+lf %+lf, len: %lf\n", N.x, N.y, N.z, N.len); C = crossp(Ri, N); /* C.len is not unity */ if (prt) printf("Useq Mirror tmp C xyz: %+lf %+lf %+lf, len: %lf\n", C.x, C.y, C.z, C.len); Ai.x = -N.x * C.len; /* N is a unit vector, Ai is not! */ Ai.y = -N.y * C.len; /* Ai is composant of Ri perpendicular to normplane */ Ai.z = -N.z * C.len; if (prt) printf("Useq Mirror tmp Ai xyz: %+lf %+lf %+lf, len: %lf\n", Ai.x, Ai.y, Ai.z, Ai.len); lenB = dotp(Ri, N); /* Ri is a unit vector, lenB is not unity */ Bi.x = Ri.x - C.x * C.len; /* Bi is not a unit vector */ Bi.y = Ri.y - C.y * C.len; Bi.z = Ri.z - C.z * C.len; lenBi = sqrt(Bi.x * Bi.x + Bi.y * Bi.y + Bi.z * Bi.z); if (prt) printf("Useq Mirror tmp Bi xyz: %+lf %+lf %+lf, len: %lf, lenBi: %lf\n", Bi.x, Bi.y, Bi.z, Bi.len, lenBi); Bi.x *= lenB / lenBi; /* Bi is not a unit vector */ Bi.y *= lenB / lenBi; /* Bi is composant of Ri parallel to normplane */ Bi.z *= lenB / lenBi; if (prt) printf("Useq Mirror tmp Bi xyz: %+lf %+lf %+lf, len: %lf\n", Bi.x, Bi.y, Bi.z, Bi.len); Ro.x = Bi.x - Ai.x; /* Ro is not a unit vector here */ Ro.y = Bi.y - Ai.y; /* is the direction of the outgoing ray after diffraction */ Ro.z = Bi.z - Ai.z; Ro.len = sqrt(Ro.x * Ro.x + Ro.y * Ro.y + Ro.z * Ro.z); if (prt) printf("Useq Mirror tmp Ro xyz: %+lf %+lf %+lf, len: %lf\n", Ro.x, Ro.y, Ro.z, Ro.len); Ro.x /= Ro.len; /* Normalize vector components of Ro */ Ro.y /= Ro.len; Ro.z /= Ro.len; if (prt) printf("Useq Mirror output Ro xyz: %+lf %+lf %+lf, len: %lf\n", Ro.x, Ro.y, Ro.z, Ro.len); return(Ro); } double dotp( vekt a, vekt b) /*calculates dot product of a and b */ { double dot; int prt = 0; if (prt) printf("Useq Dotp tmp A xyz: %+lf %+lf %+lf, len: %lf\n", a.x, a.y, a.z, a.len); if (prt) printf("Useq Dotp tmp B xyz: %+lf %+lf %+lf, len: %lf\n", b.x, b.y, b.z, b.len); dot = a.x * b.x + a.y * b.y + a.z * b.z; if (prt) printf("Useq Dotp output dot. %+lf\n", dot); return(dot); } double angl( vekt a, vekt b) /* calculates angle (radians) between a and b */ { /* assumes that the vectors a and b are normalized */ vekt cp; double angle; cp.x = a.y * b.z - b.y * a.z; cp.y = -a.x * b.z + a.z * b.x; cp.z = a.x * b.y - b.y * a.x; cp.len = sqrt(cp.x * cp.x + cp.y * cp.y + cp.z * cp.z); angle = asin(cp.len); return(angle); }