Changeset 3226 for trunk

Show
Ignore:
Timestamp:
12/15/11 17:03:32 (5 months ago)
Author:
erkn
Message:

porting monitor_nd

Location:
trunk
Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/lib/share/monitor_nd-lib.c

    r3207 r3226  
    798798    } 
    799799    if (Vars->Flag_Auto_Limits != 2 || !Vars->Coord_Number) /* Vars->Flag_Auto_Limits == 0 (no auto limits/list) or 1 (store events into Buffer) */ 
    800     { 
     800#if MCCODE_PARTICULE==neutron 
     801    {/*{{{*/ 
    801802      /* automatically compute area and steradian solid angle when in AUTO mode */ 
    802803      /* compute the steradian solid angle incoming on the monitor */ 
     
    903904        else 
    904905        XY = 0; 
    905  
    906906        /* handle 'abs' and 'log' keywords */ 
    907907        if (Vars->Coord_Type[i] & DEFS->COORD_ABS) XY=fabs(XY); 
     
    926926      } /* end for i */ 
    927927      While_End = 1; 
    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 
    9291065 
    9301066    if (Vars->Flag_Auto_Limits != 2) /* not when reading auto limits Buffer */ 
  • trunk/lib/share/monitor_nd-lib.h

    r3207 r3226  
    130130    double cx,cy,cz; 
    131131    double cvx, cvy, cvz; 
     132    double ckx, cky, ckz; 
    132133    double csx, csy, csz; 
    133     double cs1, cs2, ct, cp; 
     134    double cEx, cEy, cEz; 
     135    double cs1, cs2, ct, cphi, cp; 
    134136    double He3_pressure; 
    135137    char   Flag_UsePreMonitor    ;   /* use a previously stored neutron parameter set */