Changes in / [d9b7197:2fe721be] in sasview
- Location:
- src/sas/sascalc/calculator/c_extensions
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sascalc/calculator/c_extensions/libfunc.c
rf54e82cf rb6c8abe 95 95 // spintheta: angle (anti-clock-wise) between neutron spin(up) and x axis 96 96 // Note: all angles are in degrees. 97 void cal_msld(polar_sld *p_sld,int isangle, double qx, double qy, double bn,97 polar_sld cal_msld(int isangle, double qx, double qy, double bn, 98 98 double m01, double mtheta1, double mphi1, 99 99 double spinfraci, double spinfracf, double spintheta) … … 124 124 double my = 0.0; 125 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; 126 polar_sld p_sld; 127 p_sld.uu = sld; 128 p_sld.dd = sld; 129 p_sld.re_ud = 0.0; 130 p_sld.im_ud = 0.0; 131 p_sld.re_du = 0.0; 132 p_sld.im_du = 0.0; 132 133 133 134 //No mag means no further calculation 134 if (isangle>0) 135 if (isangle>0){ 135 136 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; 137 p_sld.uu = sqrt(sqrt(in_spin * out_spin)) * p_sld.uu; 138 p_sld.dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * p_sld.dd; 139 return p_sld; 140 } 141 } 142 else{ 143 if (fabs(m_max)< 1.0e-32 && fabs(m_phi)< 1.0e-32 && fabs(m_theta)< 1.0e-32){ 144 p_sld.uu = sqrt(sqrt(in_spin * out_spin)) * p_sld.uu; 145 p_sld.dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * p_sld.dd; 146 return p_sld; 147 } 148 } 149 150 //These are needed because of the precision of inputs 151 if (in_spin < 0.0) in_spin = 0.0; 152 if (in_spin > 1.0) in_spin = 1.0; 153 if (out_spin < 0.0) out_spin = 0.0; 154 if (out_spin > 1.0) out_spin = 1.0; 155 156 if (q_x == 0.0) q_angle = pi / 2.0; 157 else q_angle = atan(q_y/q_x); 158 if (q_y < 0.0 && q_x < 0.0) q_angle -= pi; 159 else if (q_y > 0.0 && q_x < 0.0) q_angle += pi; 160 161 q_angle = pi/2.0 - q_angle; 162 if (q_angle > pi) q_angle -= 2.0 * pi; 163 else if (q_angle < -pi) q_angle += 2.0 * pi; 164 165 if (fabs(q_x) < 1.0e-16 && fabs(q_y) < 1.0e-16){ 166 m_perp = 0.0; 167 } 168 else { 169 m_perp = m_max; 170 } 171 if (is_angle > 0){ 172 m_phi *= pi/180.0; 173 m_theta *= pi/180.0; 174 mx = m_perp * cos(m_theta) * cos(m_phi); 175 my = m_perp * sin(m_theta); 176 mz = -(m_perp * cos(m_theta) * sin(m_phi)); 177 } 178 else{ 179 mx = m_perp; 180 my = m_phi; 181 mz = m_theta; 182 } 183 //ToDo: simplify these steps 184 // m_perp1 -m_perp2 185 m_perp_x = (mx) * cos(q_angle); 186 m_perp_x -= (my) * sin(q_angle); 187 m_perp_y = m_perp_x; 188 m_perp_x *= cos(-q_angle); 189 m_perp_y *= sin(-q_angle); 190 m_perp_z = mz; 191 192 m_sigma_x = (m_perp_x * cos(-s_theta) - m_perp_y * sin(-s_theta)); 193 m_sigma_y = (m_perp_x * sin(-s_theta) + m_perp_y * cos(-s_theta)); 194 m_sigma_z = (m_perp_z); 195 196 //Find b 197 p_sld.uu -= m_sigma_x; 198 p_sld.dd += m_sigma_x; 199 p_sld.re_ud = m_sigma_y; 200 p_sld.re_du = m_sigma_y; 201 p_sld.im_ud = m_sigma_z; 202 p_sld.im_du = -m_sigma_z; 203 204 p_sld.uu = sqrt(sqrt(in_spin * out_spin)) * p_sld.uu; 205 p_sld.dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * p_sld.dd; 206 207 p_sld.re_ud = sqrt(sqrt(in_spin * (1.0 - out_spin))) * p_sld.re_ud; 208 p_sld.im_ud = sqrt(sqrt(in_spin * (1.0 - out_spin))) * p_sld.im_ud; 209 p_sld.re_du = sqrt(sqrt((1.0 - in_spin) * out_spin)) * p_sld.re_du; 210 p_sld.im_du = sqrt(sqrt((1.0 - in_spin) * out_spin)) * p_sld.im_du; 211 212 return p_sld; 213 213 } 214 214 -
src/sas/sascalc/calculator/c_extensions/libfunc.h
rf54e82cf rb6c8abe 18 18 //double gamln(double x); 19 19 20 void cal_msld(polar_sld*,int isangle, double qx, double qy, double bn, double m01, double mtheta1,20 polar_sld cal_msld(int isangle, double qx, double qy, double bn, double m01, double mtheta1, 21 21 double mphi1, double spinfraci, double spinfracf, double spintheta); 22 22 -
src/sas/sascalc/calculator/c_extensions/librefl.c
rf54e82cf r4c29e4d 103 103 #endif // NEED_ERF 104 104 105 void cassign(Cplx *x, double real, double imag) 106 { 107 x->re = real; 108 x->im = imag; 109 } 110 111 112 void cplx_add(Cplx *z, Cplx x, Cplx y) 113 { 114 z->re = x.re + y.re; 115 z->im = x.im + y.im; 116 } 117 118 void rcmult(Cplx *z, double x, Cplx y) 119 { 120 z->re = x*y.re; 121 z->im = x*y.im; 122 } 123 124 void cplx_sub(Cplx *z, Cplx x, Cplx y) 125 { 126 z->re = x.re - y.re; 127 z->im = x.im - y.im; 128 } 129 130 131 void cplx_mult(Cplx *z, Cplx x, Cplx y) 132 { 133 z->re = x.re*y.re - x.im*y.im; 134 z->im = x.re*y.im + x.im*y.re; 135 } 136 137 void cplx_div(Cplx *z, Cplx x, Cplx y) 138 { 139 z->re = (x.re*y.re + x.im*y.im)/(y.re*y.re + y.im*y.im); 140 z->im = (x.im*y.re - x.re*y.im)/(y.re*y.re + y.im*y.im); 141 } 142 143 void cplx_exp(Cplx *z, Cplx b) 144 { 105 complex cassign(real, imag) 106 double real, imag; 107 { 108 complex x; 109 x.re = real; 110 x.im = imag; 111 return x; 112 } 113 114 115 complex cplx_add(x,y) 116 complex x,y; 117 { 118 complex z; 119 z.re = x.re + y.re; 120 z.im = x.im + y.im; 121 return z; 122 } 123 124 complex rcmult(x,y) 125 double x; 126 complex y; 127 { 128 complex z; 129 z.re = x*y.re; 130 z.im = x*y.im; 131 return z; 132 } 133 134 complex cplx_sub(x,y) 135 complex x,y; 136 { 137 complex z; 138 z.re = x.re - y.re; 139 z.im = x.im - y.im; 140 return z; 141 } 142 143 144 complex cplx_mult(x,y) 145 complex x,y; 146 { 147 complex z; 148 z.re = x.re*y.re - x.im*y.im; 149 z.im = x.re*y.im + x.im*y.re; 150 return z; 151 } 152 153 complex cplx_div(x,y) 154 complex x,y; 155 { 156 complex z; 157 z.re = (x.re*y.re + x.im*y.im)/(y.re*y.re + y.im*y.im); 158 z.im = (x.im*y.re - x.re*y.im)/(y.re*y.re + y.im*y.im); 159 return z; 160 } 161 162 complex cplx_exp(b) 163 complex b; 164 { 165 complex z; 145 166 double br,bi; 146 167 br=b.re; 147 168 bi=b.im; 148 z->re = exp(br)*cos(bi); 149 z->im = exp(br)*sin(bi); 150 } 151 152 153 void cplx_sqrt(Cplx *c, Cplx z) //see Schaum`s Math Handbook p. 22, 6.6 and 6.10 154 { 169 z.re = exp(br)*cos(bi); 170 z.im = exp(br)*sin(bi); 171 return z; 172 } 173 174 175 complex cplx_sqrt(z) //see Schaum`s Math Handbook p. 22, 6.6 and 6.10 176 complex z; 177 { 178 complex c; 155 179 double zr,zi,x,y,r,w; 156 180 … … 160 184 if (zr==0.0 && zi==0.0) 161 185 { 162 c->re=0.0; 163 c->im=0.0; 164 } else { 186 c.re=0.0; 187 c.im=0.0; 188 return c; 189 } 190 else 191 { 165 192 x=fabs(zr); 166 193 y=fabs(zi); … … 169 196 r=y/x; 170 197 w=sqrt(x)*sqrt(0.5*(1.0+sqrt(1.0+r*r))); 171 } else { 198 } 199 else 200 { 172 201 r=x/y; 173 202 w=sqrt(y)*sqrt(0.5*(r+sqrt(1.0+r*r))); … … 175 204 if (zr >=0.0) 176 205 { 177 c->re=w; 178 c->im=zi/(2.0*w); 179 } else { 180 c->im=(zi >= 0) ? w : -w; 181 c->re=zi/(2.0*c->im); 206 c.re=w; 207 c.im=zi/(2.0*w); 182 208 } 183 } 184 } 185 186 void cplx_cos(Cplx *z, Cplx b) 187 { 188 // cos(b) = (e^bi + e^-bi)/2 189 // = (e^b.im e^-i bi.re) + e^-b.im e^i b.re)/2 190 // = (e^b.im cos(-b.re) + e^b.im sin(-b.re) i)/2 + (e^-b.im cos(b.re) + e^-b.im sin(b.re) i)/2 191 // = e^b.im cos(b.re)/2 - e^b.im sin(b.re)/2 i + 1/e^b.im cos(b.re)/2 + 1/e^b.im sin(b.re)/2 i 192 // = (e^b.im + 1/e^b.im)/2 cos(b.re) + (-e^b.im + 1/e^b.im)/2 sin(b.re) i 193 // = cosh(b.im) cos(b.re) - sinh(b.im) sin(b.re) i 194 double exp_b_im = exp(b.im); 195 z->re = 0.5*(+exp_b_im + 1.0/exp_b_im) * cos(b.re); 196 z->im = -0.5*(exp_b_im - 1.0/exp_b_im) * sin(b.re); 209 else 210 { 211 c.im=(zi >= 0) ? w : -w; 212 c.re=zi/(2.0*c.im); 213 } 214 return c; 215 } 216 } 217 218 complex cplx_cos(b) 219 complex b; 220 { 221 complex zero,two,z,i,bi,negbi; 222 zero = cassign(0.0,0.0); 223 two = cassign(2.0,0.0); 224 i = cassign(0.0,1.0); 225 bi = cplx_mult(b,i); 226 negbi = cplx_sub(zero,bi); 227 z = cplx_div(cplx_add(cplx_exp(bi),cplx_exp(negbi)),two); 228 return z; 197 229 } 198 230 -
src/sas/sascalc/calculator/c_extensions/librefl.h
rf54e82cf r9e531f2 5 5 double re; 6 6 double im; 7 } Cplx;7 } complex; 8 8 9 9 typedef struct { 10 Cplx a;11 Cplx b;12 Cplx c;13 Cplx d;10 complex a; 11 complex b; 12 complex c; 13 complex d; 14 14 } matrix; 15 15 16 void cassign(Cplx*,double real, double imag);16 complex cassign(double real, double imag); 17 17 18 void cplx_add(Cplx*, Cplx x,Cplx y);18 complex cplx_add(complex x,complex y); 19 19 20 void rcmult(Cplx*, double x,Cplx y);20 complex rcmult(double x,complex y); 21 21 22 void cplx_sub(Cplx*, Cplx x,Cplx y);22 complex cplx_sub(complex x,complex y); 23 23 24 void cplx_mult(Cplx*, Cplx x,Cplx y);24 complex cplx_mult(complex x,complex y); 25 25 26 void cplx_div(Cplx*, Cplx x,Cplx y);26 complex cplx_div(complex x,complex y); 27 27 28 void cplx_exp(Cplx*, Cplx b);28 complex cplx_exp(complex b); 29 29 30 void cplx_sqrt(Cplx*, Cplx z);30 complex cplx_sqrt(complex z); 31 31 32 void cplx_cos(Cplx*, Cplx b);32 complex cplx_cos(complex b); 33 33 34 34 double intersldfunc(int fun_type, double n_sub, double i, double nu, double sld_l, double sld_r); -
src/sas/sascalc/calculator/c_extensions/sld2i.c
rf54e82cf re6f2009 53 53 polar_sld b_sld; 54 54 double qr = 0.0; 55 Cplx iqr; 56 Cplx ephase; 57 Cplx comp_sld; 58 59 Cplx sumj_uu; 60 Cplx sumj_ud; 61 Cplx sumj_du; 62 Cplx sumj_dd; 63 Cplx temp_fi; 64 65 int i, j; 55 complex iqr = cassign(0.0, 0.0); 56 complex ephase = cassign(0.0, 0.0); 57 complex comp_sld = cassign(0.0, 0.0); 58 59 complex sumj_uu; 60 complex sumj_ud; 61 complex sumj_du; 62 complex sumj_dd; 63 complex temp_fi; 66 64 67 65 double count = 0.0; 68 66 //check if this computation is for averaging 69 70 cassign(&iqr, 0.0, 0.0);71 cassign(&ephase, 0.0, 0.0);72 cassign(&comp_sld, 0.0, 0.0);73 67 74 68 //Assume that pixel volumes are given in vol_pix in A^3 unit … … 78 72 79 73 // Loop over q-values and multiply apply matrix 74 int i; 80 75 for(i=0; i<npoints; i++){ 81 76 //I_out[i] = 0.0; 82 cassign(&sumj_uu,0.0, 0.0);83 cassign(&sumj_ud,0.0, 0.0);84 cassign(&sumj_du,0.0, 0.0);85 cassign(&sumj_dd,0.0, 0.0);86 //printf ("i: %d\n", i);77 sumj_uu = cassign(0.0, 0.0); 78 sumj_ud = cassign(0.0, 0.0); 79 sumj_du = cassign(0.0, 0.0); 80 sumj_dd = cassign(0.0, 0.0); 81 //printf ("%d ", i); 87 82 //q = sqrt(qx[i]*qx[i] + qy[i]*qy[i]); // + qz[i]*qz[i]); 83 int j; 88 84 for(j=0; j<this->n_pix; j++){ 89 85 if (this->sldn_val[j]!=0.0 … … 92 88 ||this->mz_val[j]!=0.0) 93 89 { 94 // printf("i,j: %d,%d\n", i,j);95 90 //anisotropic 96 cassign(&temp_fi,0.0, 0.0);97 cal_msld(&b_sld,0, qx[i], qy[i], this->sldn_val[j],91 temp_fi = cassign(0.0, 0.0); 92 b_sld = cal_msld(0, qx[i], qy[i], this->sldn_val[j], 98 93 this->mx_val[j], this->my_val[j], this->mz_val[j], 99 94 this->inspin, this->outspin, this->stheta); 100 95 qr = (qx[i]*this->x_val[j] + qy[i]*this->y_val[j]); 101 cassign(&iqr,0.0, qr);102 cplx_exp(&ephase,iqr);96 iqr = cassign(0.0, qr); 97 ephase = cplx_exp(iqr); 103 98 104 99 //Let's multiply pixel(atomic) volume here 105 rcmult(&ephase,this->vol_pix[j], ephase);100 ephase = rcmult(this->vol_pix[j], ephase); 106 101 //up_up 107 102 if (this->inspin > 0.0 && this->outspin > 0.0){ 108 c assign(&comp_sld,b_sld.uu, 0.0);109 cplx_mult(&temp_fi,comp_sld, ephase);110 cplx_add(&sumj_uu,sumj_uu, temp_fi);103 comp_sld = cassign(b_sld.uu, 0.0); 104 temp_fi = cplx_mult(comp_sld, ephase); 105 sumj_uu = cplx_add(sumj_uu, temp_fi); 111 106 } 112 107 //down_down 113 108 if (this->inspin < 1.0 && this->outspin < 1.0){ 114 c assign(&comp_sld,b_sld.dd, 0.0);115 cplx_mult(&temp_fi,comp_sld, ephase);116 cplx_add(&sumj_dd,sumj_dd, temp_fi);109 comp_sld = cassign(b_sld.dd, 0.0); 110 temp_fi = cplx_mult(comp_sld, ephase); 111 sumj_dd = cplx_add(sumj_dd, temp_fi); 117 112 } 118 113 //up_down 119 114 if (this->inspin > 0.0 && this->outspin < 1.0){ 120 c assign(&comp_sld,b_sld.re_ud, b_sld.im_ud);121 cplx_mult(&temp_fi,comp_sld, ephase);122 cplx_add(&sumj_ud,sumj_ud, temp_fi);115 comp_sld = cassign(b_sld.re_ud, b_sld.im_ud); 116 temp_fi = cplx_mult(comp_sld, ephase); 117 sumj_ud = cplx_add(sumj_ud, temp_fi); 123 118 } 124 119 //down_up 125 120 if (this->inspin < 1.0 && this->outspin > 0.0){ 126 cassign(&comp_sld, b_sld.re_du, b_sld.im_du); 127 cplx_mult(&temp_fi, comp_sld, ephase); 128 cplx_add(&sumj_du, sumj_du, temp_fi); 129 } 121 comp_sld = cassign(b_sld.re_du, b_sld.im_du); 122 temp_fi = cplx_mult(comp_sld, ephase); 123 sumj_du = cplx_add(sumj_du, temp_fi); 124 } 125 130 126 131 127 if (i == 0){ … … 162 158 //Assume that pixel volumes are given in vol_pix in A^3 unit 163 159 // Loop over q-values and multiply apply matrix 164 int i, j, k;160 int i; 165 161 for(i=0; i<npoints; i++){ 166 162 sumj =0.0; 163 int j; 167 164 for(j=0; j<n_pix; j++){ 168 165 //Isotropic: Assumes all slds are real (no magnetic) … … 182 179 //full calculation 183 180 //pragma omp parallel for 181 int k; 184 182 for(k=0; k<n_pix; k++){ 185 183 sld_j = this->sldn_val[j] * this->sldn_val[k] * this->vol_pix[j] * this->vol_pix[k]; -
src/sas/sascalc/calculator/c_extensions/sld2i_module.c
rf54e82cf r3010f68 4 4 #include <Python.h> 5 5 #include <stdio.h> 6 #include "sld2i.h"6 #include <sld2i.h> 7 7 8 8 #if PY_MAJOR_VERSION < 3 … … 68 68 double outspin; 69 69 double stheta; 70 GenI *sld2i;71 70 72 71 if (!PyArg_ParseTuple(args, "iOOOOOOOOddd", &n_pix, &x_val_obj, &y_val_obj, &z_val_obj, &sldn_val_obj, &mx_val_obj, &my_val_obj, &mz_val_obj, &vol_pix_obj, &inspin, &outspin, &stheta)) return NULL; … … 79 78 OUTVECTOR(mz_val_obj, mz_val, n_x); 80 79 OUTVECTOR(vol_pix_obj, vol_pix, n_x); 81 sld2i = PyMem_Malloc(sizeof(GenI));80 GenI* sld2i = PyMem_Malloc(sizeof(GenI)); 82 81 if (sld2i != NULL) { 83 82 initGenI(sld2i, n_pix,x_val,y_val,z_val,sldn_val,mx_val,my_val,mz_val,vol_pix,inspin,outspin,stheta); … … 99 98 double *I_out; 100 99 PyObject *gen_obj; 101 GenI *sld2i;102 100 103 101 if (!PyArg_ParseTuple(args, "OiOOO", &gen_obj, &npoints, &qx_obj, &qy_obj, &I_out_obj)) return NULL; … … 110 108 111 109 // Set the array pointers 112 sld2i = (GenI *)PyCapsule_GetPointer(gen_obj, "GenI");110 GenI* sld2i = (GenI *)PyCapsule_GetPointer(gen_obj, "GenI"); 113 111 114 112 genicomXY(sld2i, npoints, qx, qy, I_out); … … 128 126 double *I_out; 129 127 PyObject *gen_obj; 130 GenI *sld2i;131 128 132 129 if (!PyArg_ParseTuple(args, "OiOO", &gen_obj, &npoints, &q_obj, &I_out_obj)) return NULL; … … 138 135 139 136 // Set the array pointers 140 sld2i = (GenI *)PyCapsule_GetPointer(gen_obj, "GenI");137 GenI *sld2i = (GenI *)PyCapsule_GetPointer(gen_obj, "GenI"); 141 138 142 139 genicom(sld2i, npoints, q, I_out);
Note: See TracChangeset
for help on using the changeset viewer.