Ignore:
Timestamp:
Mar 30, 2019 5:41:43 PM (6 years ago)
Author:
GitHub <noreply@…>
Parents:
1cf0fc0 (diff), 1342f6a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
dehoni <honecker@…> (03/30/19 17:41:43)
git-committer:
GitHub <noreply@…> (03/30/19 17:41:43)
Message:

Merge 1342f6af95377b8acc4a1082f09169a8a0813fcb into 1cf0fc0426654aa29d891b968376b013686c685f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/calculator/c_extensions/libfunc.c

    r144e032a r1342f6a  
    8787} 
    8888 
     89//The code calculating magnetic sld below seems to be not used. 
     90//Keeping it in order to check if it is not breaking anything. 
    8991// calculate magnetic sld and return total sld 
    9092// bn : contrast (not just sld of the layer) 
     
    9597// spintheta: angle (anti-clock-wise) between neutron spin(up) and x axis 
    9698// Note: all angles are in degrees. 
    97 void cal_msld(polar_sld *p_sld, int isangle, double qx, double qy, double bn, 
    98                                 double m01, double mtheta1, double mphi1, 
    99                                 double spinfraci, double spinfracf, double spintheta) 
    100 { 
    101         //locals 
    102         double q_x = qx; 
    103         double q_y = qy; 
    104         double sld = bn; 
    105         int is_angle = isangle; 
    106         double pi = 4.0*atan(1.0); 
    107         double s_theta = spintheta * pi/180.0; 
    108         double m_max = m01; 
    109         double m_phi = mphi1; 
    110         double m_theta = mtheta1; 
    111         double in_spin = spinfraci; 
    112         double out_spin = spinfracf; 
    113  
    114         double m_perp = 0.0; 
    115         double m_perp_z = 0.0; 
    116         double m_perp_y = 0.0; 
    117         double m_perp_x = 0.0; 
    118         double m_sigma_x = 0.0; 
    119         double m_sigma_z = 0.0; 
    120         double m_sigma_y = 0.0; 
    121         //double b_m = 0.0; 
    122         double q_angle = 0.0; 
    123         double mx = 0.0; 
    124         double my = 0.0; 
    125         double mz = 0.0; 
    126         double uu = sld; 
    127         double dd = sld; 
    128         double re_ud = 0.0; 
    129         double im_ud = 0.0; 
    130         double re_du = 0.0; 
    131         double im_du = 0.0; 
    132  
    133         //No mag means no further calculation 
    134         if (isangle>0) { 
    135                 if (m_max < 1.0e-32){ 
    136                         uu = sqrt(sqrt(in_spin * out_spin)) * uu; 
    137                         dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * dd; 
    138                 } 
    139         } 
    140         else if (fabs(m_max)< 1.0e-32 && fabs(m_phi)< 1.0e-32 && fabs(m_theta)< 1.0e-32){ 
    141                         uu = sqrt(sqrt(in_spin * out_spin)) * uu; 
    142                         dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * dd; 
    143         } else { 
    144  
    145                 //These are needed because of the precision of inputs 
    146                 if (in_spin < 0.0) in_spin = 0.0; 
    147                 if (in_spin > 1.0) in_spin = 1.0; 
    148                 if (out_spin < 0.0) out_spin = 0.0; 
    149                 if (out_spin > 1.0) out_spin = 1.0; 
    150  
    151                 if (q_x == 0.0) q_angle = pi / 2.0; 
    152                 else q_angle = atan(q_y/q_x); 
    153                 if (q_y < 0.0 && q_x < 0.0) q_angle -= pi; 
    154                 else if (q_y > 0.0 && q_x < 0.0) q_angle += pi; 
    155  
    156                 q_angle = pi/2.0 - q_angle; 
    157                 if (q_angle > pi) q_angle -= 2.0 * pi; 
    158                 else if (q_angle < -pi) q_angle += 2.0 * pi; 
    159  
    160                 if (fabs(q_x) < 1.0e-16 && fabs(q_y) < 1.0e-16){ 
    161                         m_perp = 0.0; 
    162                         } 
    163                 else { 
    164                         m_perp = m_max; 
    165                         } 
    166                 if (is_angle > 0){ 
    167                         m_phi *= pi/180.0; 
    168                         m_theta *= pi/180.0; 
    169                         mx = m_perp * cos(m_theta) * cos(m_phi); 
    170                         my = m_perp * sin(m_theta); 
    171                         mz = -(m_perp * cos(m_theta) * sin(m_phi)); 
    172                 } 
    173                 else{ 
    174                         mx = m_perp; 
    175                         my = m_phi; 
    176                         mz = m_theta; 
    177                 } 
    178                 //ToDo: simplify these steps 
    179                 // m_perp1 -m_perp2 
    180                 m_perp_x = (mx) *  cos(q_angle); 
    181                 m_perp_x -= (my) * sin(q_angle); 
    182                 m_perp_y = m_perp_x; 
    183                 m_perp_x *= cos(-q_angle); 
    184                 m_perp_y *= sin(-q_angle); 
    185                 m_perp_z = mz; 
    186  
    187                 m_sigma_x = (m_perp_x * cos(-s_theta) - m_perp_y * sin(-s_theta)); 
    188                 m_sigma_y = (m_perp_x * sin(-s_theta) + m_perp_y * cos(-s_theta)); 
    189                 m_sigma_z = (m_perp_z); 
    190  
    191                 //Find b 
    192                 uu -= m_sigma_x; 
    193                 dd += m_sigma_x; 
    194                 re_ud = m_sigma_y; 
    195                 re_du = m_sigma_y; 
    196                 im_ud = m_sigma_z; 
    197                 im_du = -m_sigma_z; 
    198  
    199                 uu = sqrt(sqrt(in_spin * out_spin)) * uu; 
    200                 dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * dd; 
    201  
    202                 re_ud = sqrt(sqrt(in_spin * (1.0 - out_spin))) * re_ud; 
    203                 im_ud = sqrt(sqrt(in_spin * (1.0 - out_spin))) * im_ud; 
    204                 re_du = sqrt(sqrt((1.0 - in_spin) * out_spin)) * re_du; 
    205                 im_du = sqrt(sqrt((1.0 - in_spin) * out_spin)) * im_du; 
    206         } 
    207         p_sld->uu = uu; 
    208         p_sld->dd = dd; 
    209         p_sld->re_ud = re_ud; 
    210         p_sld->im_ud = im_ud; 
    211         p_sld->re_du = re_du; 
    212         p_sld->im_du = im_du; 
    213 } 
     99// void cal_msld(polar_sld *p_sld, int isangle, double qx, double qy, double bn, 
     100//                              double m01, double mtheta1, double mphi1, 
     101//                              double spinfraci, double spinfracf, double spintheta) 
     102// { 
     103//      //locals 
     104//      double q_x = qx; 
     105//      double q_y = qy; 
     106//      double sld = bn; 
     107//      int is_angle = isangle; 
     108//      double pi = 4.0*atan(1.0); 
     109//      double s_theta = spintheta * pi/180.0; 
     110//      double m_max = m01; 
     111//      double m_phi = mphi1; 
     112//      double m_theta = mtheta1; 
     113//      double in_spin = spinfraci; 
     114//      double out_spin = spinfracf; 
     115// 
     116//      double m_perp = 0.0; 
     117//      double m_perp_z = 0.0; 
     118//      double m_perp_y = 0.0; 
     119//      double m_perp_x = 0.0; 
     120//      double m_sigma_x = 0.0; 
     121//      double m_sigma_z = 0.0; 
     122//      double m_sigma_y = 0.0; 
     123//      //double b_m = 0.0; 
     124//      double q_angle = 0.0; 
     125//      double mx = 0.0; 
     126//      double my = 0.0; 
     127//      double mz = 0.0; 
     128//      double uu = sld; 
     129//      double dd = sld; 
     130//      double re_ud = 0.0; 
     131//      double im_ud = 0.0; 
     132//      double re_du = 0.0; 
     133//      double im_du = 0.0; 
     134//  const double norm=outspin; 
     135 
     136 
     137// The norm is needed to make sure that the scattering cross sections are 
     138//correctly weighted, such that the sum of spin-resolved measurements adds up to 
     139// the unpolarised or half-polarised scattering cross section. No intensity weighting 
     140// needed on the incoming polariser side (assuming that a user), has normalised 
     141// to the incoming flux with polariser in for SANSPOl and unpolarised beam, respectively. 
     142 
     143//if (out_spin < 0.5){norm=1-out_spin;} 
     144//else{norm=out_spin;} 
     145 
     146//      //No mag means no further calculation 
     147//      if (isangle>0) { 
     148//              if (m_max < 1.0e-32){ 
     149//                      uu = sqrt(in_spin * out_spin/ norm) * uu ; 
     150//                      dd = sqrt((1.0 - in_spin) * (1.0 - out_spin)/ norm) * dd ; 
     151//              } 
     152//      } 
     153//      else if (fabs(m_max)< 1.0e-32 && fabs(m_phi)< 1.0e-32 && fabs(m_theta)< 1.0e-32){ 
     154//                      uu = sqrt(in_spin * out_spin/ norm) * uu; 
     155//                      dd = sqrt((1.0 - in_spin) * (1.0 - out_spin)/ norm) * dd; 
     156//      } else { 
     157// 
     158//              //These are needed because of the precision of inputs 
     159//              if (in_spin < 0.0) in_spin = 0.0; 
     160//              if (in_spin > 1.0) in_spin = 1.0; 
     161//              if (out_spin < 0.0) out_spin = 0.0; 
     162//              if (out_spin > 1.0) out_spin = 1.0; 
     163// 
     164//              if (q_x == 0.0) q_angle = pi / 2.0; 
     165//              else q_angle = atan(q_y/q_x); 
     166//              if (q_y < 0.0 && q_x < 0.0) q_angle -= pi; 
     167//              else if (q_y > 0.0 && q_x < 0.0) q_angle += pi; 
     168// 
     169//              q_angle = pi/2.0 - q_angle; 
     170//              if (q_angle > pi) q_angle -= 2.0 * pi; 
     171//              else if (q_angle < -pi) q_angle += 2.0 * pi; 
     172// 
     173//              if (fabs(q_x) < 1.0e-16 && fabs(q_y) < 1.0e-16){ 
     174//                      m_perp = 0.0; 
     175//                      } 
     176//              else { 
     177//                      m_perp = m_max; 
     178//                      } 
     179//              if (is_angle > 0){ 
     180//                      m_phi *= pi/180.0; 
     181//                      m_theta *= pi/180.0; 
     182//                      mx = m_perp * cos(m_theta) * cos(m_phi); 
     183//                      my = m_perp * sin(m_theta); 
     184//                      mz = -(m_perp * cos(m_theta) * sin(m_phi)); 
     185//              } 
     186//              else{ 
     187//                      mx = m_perp; 
     188//                      my = m_phi; 
     189//                      mz = m_theta; 
     190//              } 
     191//              //ToDo: simplify these steps 
     192//              // m_perp1 -m_perp2 
     193//              m_perp_x = (mx) *  cos(q_angle); 
     194//              m_perp_x -= (my) * sin(q_angle); 
     195//              m_perp_y = m_perp_x; 
     196//              m_perp_x *= cos(-q_angle); 
     197//              m_perp_y *= sin(-q_angle); 
     198//              m_perp_z = mz; 
     199// 
     200//              m_sigma_x = (m_perp_x * cos(-s_theta) - m_perp_y * sin(-s_theta)); 
     201//              m_sigma_y = (m_perp_x * sin(-s_theta) + m_perp_y * cos(-s_theta)); 
     202//              m_sigma_z = (m_perp_z); 
     203// 
     204//              //Find b 
     205//              uu += m_sigma_x; 
     206//              dd -= m_sigma_x; 
     207//              re_ud = m_sigma_y; 
     208//              re_du = m_sigma_y; 
     209//              im_ud = m_sigma_z; 
     210//              im_du = -m_sigma_z; 
     211// 
     212//              uu = sqrt((in_spin) * (out_spin)/ norm) * uu; 
     213//              dd = sqrt((1.0 - in_spin) * (1.0 - out_spin)/ norm) * dd; 
     214// 
     215//              re_ud = sqrt(in_spin * (1.0 - out_spin)/ norm) * re_ud; 
     216//              im_ud = sqrt(in_spin * (1.0 - out_spin)/ norm) * im_ud; 
     217//              re_du = sqrt((1.0 - in_spin) * out_spin/ norm) * re_du; 
     218//              im_du = sqrt((1.0 - in_spin) * out_spin/ norm) * im_du; 
     219//      } 
     220//      p_sld->uu = uu; 
     221//      p_sld->dd = dd; 
     222//      p_sld->re_ud = re_ud; 
     223//      p_sld->im_ud = im_ud; 
     224//      p_sld->re_du = re_du; 
     225//      p_sld->im_du = im_du; 
     226// } 
    214227 
    215228 
Note: See TracChangeset for help on using the changeset viewer.