Changeset 318b5bbb in sasview for sansmodels/src/c_models/sc.cpp


Ignore:
Timestamp:
Dec 18, 2012 10:55:24 AM (12 years ago)
Author:
Jae Cho <jhjcho@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
6550b64
Parents:
0203ade
Message:

Added polarization and magnetic stuffs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sansmodels/src/c_models/sc.cpp

    re08bd5b r318b5bbb  
    5555  double a3_x, a3_y, a3_z, a2_x, a2_y, a1_x, a1_y; 
    5656  double q_z; 
    57   double alpha, cos_val_a3, cos_val_a2, cos_val_a1; 
     57  double cos_val_a3, cos_val_a2, cos_val_a1; 
    5858  double a1_dot_q, a2_dot_q,a3_dot_q; 
    5959  double answer; 
     
    8080  /// Angles here are respect to detector coordinate instead of against q coordinate(PRB 36, 3, 1754) 
    8181  // a3 axis orientation 
    82   a3_x = sin(theta) * cos(phi);//negative sign here??? 
    83   a3_y = sin(theta) * sin(phi); 
    84   a3_z = cos(theta); 
    85  
     82  a3_x = cos(theta) * cos(phi); 
     83  a3_y = sin(theta); 
     84  //a3_z = -cos(theta) * sin(phi); 
    8685  // q vector 
    8786  q_z = 0.0; 
    8887 
    8988  // Compute the angle btw vector q and the a3 axis 
    90   cos_val_a3 = a3_x*q_x + a3_y*q_y + a3_z*q_z; 
    91   alpha = acos(cos_val_a3); 
    92   //alpha = acos(cos_val_a3); 
    93   a3_dot_q = aa*q*cos_val_a3; 
     89  cos_val_a3 = a3_x*q_x + a3_y*q_y;// + a3_z*q_z; 
     90 
    9491  // a1 axis orientation 
    95   a1_x = sin(psi); 
    96   a1_y = cos(psi); 
     92  a1_x = -cos(phi)*sin(psi) * sin(theta)+sin(phi)*cos(psi); 
     93  a1_y = sin(psi)*cos(theta); 
    9794 
    9895  cos_val_a1 = a1_x*q_x + a1_y*q_y; 
    99   a1_dot_q = aa*q*cos_val_a1*sin(alpha); 
    10096 
    10197  // a2 axis orientation 
    102   a2_x = sqrt(1.0-sin(theta)*cos(phi))*cos(psi); 
    103   a2_y = sqrt(1.0-sin(theta)*cos(phi))*sin(psi); 
     98  a2_x = -sin(theta)*cos(psi)*cos(phi)-sin(psi)*sin(phi); 
     99  a2_y = cos(theta)*cos(psi); 
    104100  // a2 axis 
    105   cos_val_a2 =  sin(acos(cos_val_a1));//a2_x*q_x + a2_y*q_y; 
    106   a2_dot_q = aa*q*cos_val_a2*sin(alpha); 
     101  cos_val_a2 =  a2_x*q_x + a2_y*q_y; 
    107102 
    108103  // The following test should always pass 
    109104  if (fabs(cos_val_a3)>1.0) { 
    110     printf("parallel_ana_2D: Unexpected error: cos(alpha)>1\n"); 
    111     return 0; 
    112   } 
     105    //printf("parallel_ana_2D: Unexpected error: cos(alpha)>1\n"); 
     106    cos_val_a3 = 1.0; 
     107  } 
     108   if (fabs(cos_val_a1)>1.0) { 
     109    //printf("parallel_ana_2D: Unexpected error: cos(alpha)>1\n"); 
     110    cos_val_a1 = 1.0; 
     111  } 
     112   if (fabs(cos_val_a2)>1.0) { 
     113    //printf("parallel_ana_2D: Unexpected error: cos(alpha)>1\n"); 
     114    cos_val_a3 = 1.0; 
     115  } 
     116  a3_dot_q = aa*q*cos_val_a3; 
     117  a1_dot_q = aa*q*cos_val_a1;//*sin(alpha); 
     118  a2_dot_q = aa*q*cos_val_a2; 
     119   
    113120  // Call Zq=Z1*Z2*Z3 
    114121  Zq = (1.0-exp(-qDa_2))/(1.0-2.0*exp(-0.5*qDa_2)*cos(a1_dot_q)+exp(-qDa_2)); 
    115   Zq = Zq * (1.0-exp(-qDa_2))/(1.0-2.0*exp(-0.5*qDa_2)*cos(a2_dot_q)+exp(-qDa_2)); 
    116   Zq = Zq * (1.0-exp(-qDa_2))/(1.0-2.0*exp(-0.5*qDa_2)*cos(a3_dot_q)+exp(-qDa_2)); 
     122  Zq *= (1.0-exp(-qDa_2))/(1.0-2.0*exp(-0.5*qDa_2)*cos(a2_dot_q)+exp(-qDa_2)); 
     123  Zq *= (1.0-exp(-qDa_2))/(1.0-2.0*exp(-0.5*qDa_2)*cos(a3_dot_q)+exp(-qDa_2)); 
    117124 
    118125  // Use SphereForm directly from libigor 
     
    278285          } 
    279286          if (weights_theta.size()>1) { 
    280             _ptvalue *= fabs(sin(weights_theta[j].value*pi/180.0)); 
     287            _ptvalue *= fabs(cos(weights_theta[j].value*pi/180.0)); 
    281288          } 
    282289          sum += _ptvalue; 
Note: See TracChangeset for help on using the changeset viewer.