【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
2.1.17.2.11 ocmath_ave_replica_data_for_multiple_curves
Contents
Description
This function averages replicate data of multiple curves. curve could be monotonic or not monotonic, after average, X data of result should be assending. number of curve could be 1.
Syntax
int ocmath_ave_replica_data_for_multiple_curves( uint nSize, const OneCurveData * pCurves, int * pnAveSize, double * pAveX, double * pAveY, double * pAveErr = NULL, int nErrType = AVMC_SE, int * pAveCount = NULL, double* pAveMin = NULL, double* pAveMax = NULL, double dPrecision = 1.0e-8 )
Parameters
- nSize
- [input] number of curves.
- pCurves
- [input] pointer to structures that must be filled with pointers to input data.
- pnAveSize
- [modify] on input, allocated memory size of pAveX, pAveY and pAveErr buffer;
- on output, size of pAveX, pAveY and pAveErr buffer, which are determined internally.
- pAveX
- [output] pointer to buffer to receive X values for the averaged curve.
- pAveY
- [output] pointer to buffer to receive Y values for the averaged curve.
- pAveErr
- [output] if not NULL, pointer to buffer to receive the error bar data for the
- averaged curve. Its default value is NULL.
- nErrType
- [input] returns standard error of mean (SEM) or standard deviation in pAveErr
- array. Its default value is AVMC_SE.
- pAveCount
- [output] if not NULL, pointer to buffer to receive count of averaged values for
- each point of the averaged curve. Its default value is NULL.
- pAveMin
- [output] if not NULL, pointer to buffer to receive min data for the
- averaged curve. Its default value is NULL.
- pAveMax
- [output] if not NULL, pointer to buffer to receive max data for the
- averaged curve. Its default value is NULL.
- dPrecision
- [input] precision for relative compare average data. If dPrecision <= 0 use double compare relative
Return
Return OE_NOERROR if succeed, otherwise, non-zero error code is returned.
Examples
EX1
//This example assume the active window is a graph. void ocmath_ave_replica_data_for_multiple_curves_ex1() { GraphLayer gl = Project.ActiveLayer(); if (!gl) { return; } int nPlots = gl.DataPlots.Count(); OneCurveData* multiCurveData = (OneCurveData*) malloc(sizeof(OneCurveData)*nPlots); double* xx; double* yy; int nAveSize = 0; for(int ii =0 0; ii < nPlots; ii++) { DataPlot dp = gl.DataPlots(ii); DataRange dr; vector vDatax, vDatay; if(dp.GetDataRange(dr)) { DWORD dwPlotID; if(dr.GetData(DRR_GET_DEPENDENT | DRR_NO_FACTORS, 0, &dwPlotID, NULL, &vDatay, &vDatax) < 0) { printf("get_plot_data failed GetData"); return; } } int nSize = vDatay.GetSize(); xx = (double*) malloc (sizeof(double) * nSize); yy = (double*) malloc (sizeof(double) * nSize); memcpy(xx, vDatax, sizeof(double)*nSize); memcpy(yy, vDatay, sizeof(double)*nSize); multiCurveData[ii].nSize = nSize; multiCurveData[ii].pX = xx; multiCurveData[ii].pY = yy; nAveSize += nSize; } vector vxAve(nAveSize); vector vyAve(nAveSize); vector vErr(nAveSize); vector<int> vCount(nAveSize); int nRet = ocmath_ave_replica_data_for_multiple_curves (nPlots, multiCurveData, &nAveSize, vxAve, vyAve, vErr, AVMC_SE, vCount); if( nRet!=OE_NOERROR ) { printf("error code: %d\n", nRet); return; } vxAve.SetSize(nAveSize); vyAve.SetSize(nAveSize); vErr.SetSize(nAveSize); vCount.SetSize(nAveSize); for (ii = 0; ii < nPlots; ii++) { free(multiCurveData[ii].pX); free(multiCurveData[ii].pY); } free(multiCurveData); WorksheetPage wksPage; wksPage.Create(); Worksheet wksAve = wksPage.Layers(0); wksAve.SetSize(-1, 2); wksAve.Columns(0).SetType(OKDATAOBJ_DESIGNATION_X); wksAve.Columns(1).SetType(OKDATAOBJ_DESIGNATION_Y); DataRange drOut; drOut.Add("X", wksAve, 0, 0, -1, 0); drOut.Add("Y", wksAve, 0, 1, -1, 1); drOut.SetData(&vyAve, &vxAve); gl.AddPlot(drOut, IDM_PLOT_SCATTER); }
Remark
See Also
ocmath_ave_multiple_curves, ocmath_ave_multiple_curves_by_length_parameter
Header to Include
origin.h