Changeset 41891 for trunk/Ohana/src/opihi/cmd.data/applyfit2d.c
- Timestamp:
- Nov 4, 2021, 6:02:11 PM (5 years ago)
- Location:
- trunk/Ohana
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
src/opihi/cmd.data/applyfit2d.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-dev-20210817/Ohana (added) merged: 41800,41802,41818-41820,41824,41830,41835,41850,41869,41874-41875,41886
- Property svn:mergeinfo changed
-
trunk/Ohana/src/opihi/cmd.data/applyfit2d.c
r29001 r41891 116 116 117 117 118 int applyfit2d_full (int argc, char **argv) { 119 120 int i, j, n, order; 121 char *c, name[64]; 122 double **C, X, Y; 123 opihi_flt *z; 124 Vector *xvec, *yvec, *zvec; 125 126 if (argc != 4) { 127 gprint (GP_ERR, "USAGE: applyfit2d_full x y z\n"); 128 return (FALSE); 129 } 130 131 c = get_variable ("Cnn"); 132 if (c == NULL) { 133 gprint (GP_ERR, "no fit available\n"); 134 return (FALSE); 135 } 136 order = atof (c); 137 free (c); 138 139 if ((xvec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE); 140 if ((yvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE); 141 if ((zvec = SelectVector (argv[3], ANYVECTOR, TRUE)) == NULL) return (FALSE); 142 143 ALLOCATE (C, double *, order+1); 144 for (i = 0; i <= order; i++) { 145 ALLOCATE (C[i], double, order+1); 146 for (j = 0; j <= order; j++) { 147 sprintf (name, "CX%dY%d", i, j); 148 c = get_variable (name); 149 if (c == NULL) { 150 gprint (GP_ERR, "missing fit term %d,%d\n", i, j); 151 for (j = 0; j < i; j++) free (C[j]); 152 free (C); 153 return (FALSE); 154 } 155 C[i][j] = atof (c); 156 free (c); 157 } 158 } 159 160 ResetVector (zvec, OPIHI_FLT, xvec[0].Nelements); 161 bzero (zvec[0].elements.Flt, sizeof(opihi_flt)*zvec[0].Nelements); 162 z = zvec[0].elements.Flt; 163 164 // we have four cases (x == flt or int) and (y == flt or int) 165 if ((xvec[0].type == OPIHI_FLT) && (yvec[0].type == OPIHI_FLT)) { 166 opihi_flt *x = xvec[0].elements.Flt; 167 opihi_flt *y = yvec[0].elements.Flt; 168 for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) { 169 Y = X = 1; 170 for (j = 0; j <= order; j++) { 171 X = Y; 172 for (i = 0; i <= order; i++) { 173 *z += C[i][j]*X; 174 X = X * (*x); 175 } 176 Y = Y * (*y); 177 } 178 } 179 } 180 if ((xvec[0].type == OPIHI_FLT) && (yvec[0].type == OPIHI_INT)) { 181 opihi_flt *x = xvec[0].elements.Flt; 182 opihi_int *y = yvec[0].elements.Int; 183 for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) { 184 Y = X = 1; 185 for (j = 0; j <= order; j++) { 186 X = Y; 187 for (i = 0; i <= order; i++) { 188 *z += C[i][j]*X; 189 X = X * (*x); 190 } 191 Y = Y * (*y); 192 } 193 } 194 } 195 if ((xvec[0].type == OPIHI_INT) && (yvec[0].type == OPIHI_FLT)) { 196 opihi_int *x = xvec[0].elements.Int; 197 opihi_flt *y = yvec[0].elements.Flt; 198 for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) { 199 Y = X = 1; 200 for (j = 0; j <= order; j++) { 201 X = Y; 202 for (i = 0; i <= order; i++) { 203 *z += C[i][j]*X; 204 X = X * (*x); 205 } 206 Y = Y * (*y); 207 } 208 } 209 } 210 if ((xvec[0].type == OPIHI_INT) && (yvec[0].type == OPIHI_INT)) { 211 opihi_int *x = xvec[0].elements.Int; 212 opihi_int *y = yvec[0].elements.Int; 213 for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) { 214 Y = X = 1; 215 for (j = 0; j <= order; j++) { 216 X = Y; 217 for (i = 0; i <= order; i++) { 218 *z += C[i][j]*X; 219 X = X * (*x); 220 } 221 Y = Y * (*y); 222 } 223 } 224 } 225 226 for (i = 0; i < order + 1; i++) free (C[i]); 227 free (C); 228 229 return (TRUE); 230 } 231 232
Note:
See TracChangeset
for help on using the changeset viewer.
