| 928 | | } /* end else if Vars->Flag_Auto_Limits == 2 */ |
| | 928 | }/* end else if Vars->Flag_Auto_Limits == 2 *//*}}}*/ |
| | 929 | #elif MCCODE_PARTICULE==Xray |
| | 930 | /* compute values - this is somewhat different for xrays in some cases.*/ |
| | 931 | {/*{{{*/ |
| | 932 | /* automatically compute area and steradian solid angle when in AUTO mode */ |
| | 933 | /* compute the steradian solid angle incoming on the monitor */ |
| | 934 | double k; |
| | 935 | k=sqrt(Vars->ckx*Vars->ckx |
| | 936 | +Vars->cky*Vars->cky |
| | 937 | +Vars->ckz*Vars->ckz); |
| | 938 | if (Vars->min_x > Vars->cx) Vars->min_x = Vars->cx; |
| | 939 | if (Vars->max_x < Vars->cx) Vars->max_x = Vars->cx; |
| | 940 | if (Vars->min_y > Vars->cy) Vars->min_y = Vars->cy; |
| | 941 | if (Vars->max_y < Vars->cy) Vars->max_y = Vars->cy; |
| | 942 | Vars->mean_p += Vars->cp; |
| | 943 | if (v) { |
| | 944 | Vars->mean_dx += Vars->cp*fabs(Vars->cvx/v); |
| | 945 | Vars->mean_dy += Vars->cp*fabs(Vars->cvy/v); |
| | 946 | } |
| | 947 | Vars->area =(Vars->max_x-Vars->min_x) |
| | 948 | *(Vars->max_y-Vars->min_y)*1E4; /* cm2 */ |
| | 949 | if (Vars->Flag_per_st) |
| | 950 | Vars->steradian = 2*fabs(2*atan(Vars->mean_dx/Vars->mean_p) |
| | 951 | *sin(2*atan(Vars->mean_dy/Vars->mean_p)/2)); |
| | 952 | |
| | 953 | for (i = 0; i <= Vars->Coord_Number; i++) |
| | 954 | { /* handle current neutron : last while */ |
| | 955 | XY = 0; |
| | 956 | Set_Vars_Coord_Type = (Vars->Coord_Type[i] & (DEFS->COORD_LOG-1)); |
| | 957 | /* get values for variables to monitor */ |
| | 958 | if (Set_Vars_Coord_Type == DEFS->COORD_X) XY = Vars->cx; |
| | 959 | else |
| | 960 | if (Set_Vars_Coord_Type == DEFS->COORD_Y) XY = Vars->cy; |
| | 961 | else |
| | 962 | if (Set_Vars_Coord_Type == DEFS->COORD_Z) XY = Vars->cz; |
| | 963 | else |
| | 964 | if (Set_Vars_Coord_Type == DEFS->COORD_VX) XY = Vars->ckx/k*M_C; |
| | 965 | else |
| | 966 | if (Set_Vars_Coord_Type == DEFS->COORD_VY) XY = Vars->cky/k*M_C; |
| | 967 | else |
| | 968 | if (Set_Vars_Coord_Type == DEFS->COORD_VZ) XY = Vars->ckz/k*M_C; |
| | 969 | else |
| | 970 | if (Set_Vars_Coord_Type == DEFS->COORD_KX) XY = Vars->ckx; |
| | 971 | else |
| | 972 | if (Set_Vars_Coord_Type == DEFS->COORD_KY) XY = Vars->cky; |
| | 973 | else |
| | 974 | if (Set_Vars_Coord_Type == DEFS->COORD_KZ) XY = Vars->ckz; |
| | 975 | else |
| | 976 | if (Set_Vars_Coord_Type == DEFS->COORD_SX) XY = Vars->csx; |
| | 977 | else |
| | 978 | if (Set_Vars_Coord_Type == DEFS->COORD_SY) XY = Vars->csy; |
| | 979 | else |
| | 980 | if (Set_Vars_Coord_Type == DEFS->COORD_SZ) XY = Vars->csz; |
| | 981 | else |
| | 982 | if (Set_Vars_Coord_Type == DEFS->COORD_T) XY = Vars->ct; |
| | 983 | else |
| | 984 | if (Set_Vars_Coord_Type == DEFS->COORD_P) XY = Vars->cp; |
| | 985 | else |
| | 986 | if (Set_Vars_Coord_Type == DEFS->COORD_HDIV) XY = RAD2DEG*atan2(Vars->cvx,Vars->cvz); |
| | 987 | else |
| | 988 | if (Set_Vars_Coord_Type == DEFS->COORD_VDIV) XY = RAD2DEG*atan2(Vars->cvy,Vars->cvz); |
| | 989 | else |
| | 990 | if (Set_Vars_Coord_Type == DEFS->COORD_V) XY = M_C; |
| | 991 | else |
| | 992 | if (Set_Vars_Coord_Type == DEFS->COORD_RADIUS) |
| | 993 | XY = sqrt(Vars->cx*Vars->cx+Vars->cy*Vars->cy+Vars->cz*Vars->cz); |
| | 994 | else |
| | 995 | if (Set_Vars_Coord_Type == DEFS->COORD_XY) |
| | 996 | XY = sqrt(Vars->cx*Vars->cx+Vars->cy*Vars->cy)*(Vars->cx > 0 ? 1 : -1); |
| | 997 | else |
| | 998 | if (Set_Vars_Coord_Type == DEFS->COORD_YZ) XY = sqrt(Vars->cy*Vars->cy+Vars->cz*Vars->cz); |
| | 999 | else |
| | 1000 | if (Set_Vars_Coord_Type == DEFS->COORD_XZ) |
| | 1001 | XY = sqrt(Vars->cx*Vars->cx+Vars->cz*Vars->cz); |
| | 1002 | else |
| | 1003 | if (Set_Vars_Coord_Type == DEFS->COORD_VXY) XY = sqrt(Vars->cvx*Vars->cvx+Vars->cvy*Vars->cvy); |
| | 1004 | else |
| | 1005 | if (Set_Vars_Coord_Type == DEFS->COORD_VXZ) XY = sqrt(Vars->cvx*Vars->cvx+Vars->cvz*Vars->cvz); |
| | 1006 | else |
| | 1007 | if (Set_Vars_Coord_Type == DEFS->COORD_VYZ) XY = sqrt(Vars->cvy*Vars->cvy+Vars->cvz*Vars->cvz); |
| | 1008 | else |
| | 1009 | if (Set_Vars_Coord_Type == DEFS->COORD_K) XY = k;//sqrt(Vars->ckx*Vars->ckx+Vars->cky*Vars->cvy+Vars->ckz*Vars->ckz); |
| | 1010 | else |
| | 1011 | if (Set_Vars_Coord_Type == DEFS->COORD_KXY) XY = sqrt(Vars->ckx*Vars->ckx+Vars->cky*Vars->cky); |
| | 1012 | else |
| | 1013 | if (Set_Vars_Coord_Type == DEFS->COORD_KXZ) XY = sqrt(Vars->ckx*Vars->ckx+Vars->ckz*Vars->ckz); |
| | 1014 | else |
| | 1015 | if (Set_Vars_Coord_Type == DEFS->COORD_KYZ) XY = sqrt(Vars->cky*Vars->cky+Vars->ckz*Vars->ckz); |
| | 1016 | else |
| | 1017 | if (Set_Vars_Coord_Type == DEFS->COORD_ENERGY) XY = k*K2E; |
| | 1018 | else |
| | 1019 | if (Set_Vars_Coord_Type == DEFS->COORD_LAMBDA) { if (k!=0) XY = 2*M_PI; } // { sqrt(Vars->cvx*Vars->cvx+Vars->cvy*Vars->cvy+Vars->cvz*Vars->cvz); XY *= V2K; if (XY != 0) XY = 2*PI/XY; } |
| | 1020 | else |
| | 1021 | if (Set_Vars_Coord_Type == DEFS->COORD_NCOUNT) XY = Coord[i]+1; |
| | 1022 | else |
| | 1023 | if (Set_Vars_Coord_Type == DEFS->COORD_ANGLE) |
| | 1024 | { XY = sqrt(Vars->ckx*Vars->ckx+Vars->cky*Vars->cky); |
| | 1025 | if (Vars->ckz != 0) |
| | 1026 | XY = RAD2DEG*atan2(XY,Vars->ckz)*(Vars->cx > 0 ? 1 : -1); |
| | 1027 | else XY = 0; |
| | 1028 | } |
| | 1029 | else |
| | 1030 | if (Set_Vars_Coord_Type == DEFS->COORD_THETA) { if (Vars->cz != 0) XY = RAD2DEG*atan2(Vars->cx,Vars->cz); } |
| | 1031 | else |
| | 1032 | if (Set_Vars_Coord_Type == DEFS->COORD_PHI) { if (Vars->cz != 0) XY = RAD2DEG*asin(Vars->cy/Vars->cz); } |
| | 1033 | else |
| | 1034 | if (Set_Vars_Coord_Type == DEFS->COORD_USER1) XY = Vars->UserVariable1; |
| | 1035 | else |
| | 1036 | if (Set_Vars_Coord_Type == DEFS->COORD_USER2) XY = Vars->UserVariable2; |
| | 1037 | else |
| | 1038 | if (Set_Vars_Coord_Type == DEFS->COORD_USER3) XY = Vars->UserVariable3; |
| | 1039 | else |
| | 1040 | XY = 0; |
| | 1041 | /* handle 'abs' and 'log' keywords */ |
| | 1042 | if (Vars->Coord_Type[i] & DEFS->COORD_ABS) XY=fabs(XY); |
| | 1043 | |
| | 1044 | if (i && (Vars->Coord_Type[i] & DEFS->COORD_LOG)) /* not for the flux */ |
| | 1045 | { if (XY > 0) XY = log(XY)/log(10); |
| | 1046 | else XY = -100; } |
| | 1047 | |
| | 1048 | Coord[i] = XY; |
| | 1049 | if (i == 0) { pp = XY; Coord_Index[i] = 0; } |
| | 1050 | else if (!Vars->Flag_Auto_Limits) |
| | 1051 | { /* compute index in histograms for each variable to monitor */ |
| | 1052 | XY = (Vars->Coord_Max[i]-Vars->Coord_Min[i]); |
| | 1053 | if (XY > 0) Coord_Index[i] = floor((Coord[i]-Vars->Coord_Min[i])*Vars->Coord_Bin[i]/XY); |
| | 1054 | else Coord_Index[i] = 0; |
| | 1055 | if (Vars->Flag_With_Borders) |
| | 1056 | { |
| | 1057 | if (Coord_Index[i] < 0) Coord_Index[i] = 0; |
| | 1058 | if (Coord_Index[i] >= Vars->Coord_Bin[i]) Coord_Index[i] = Vars->Coord_Bin[i] - 1; |
| | 1059 | } |
| | 1060 | } /* else will get Index later from Buffer when Flag_Auto_Limits == 2 */ |
| | 1061 | } /* end for i */ |
| | 1062 | While_End = 1; |
| | 1063 | }/* end else if Vars->Flag_Auto_Limits == 2 *//*}}}*/ |
| | 1064 | #endif |