aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/util/lib/LTKInkUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/util/lib/LTKInkUtils.cpp')
-rw-r--r--src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/util/lib/LTKInkUtils.cpp410
1 files changed, 410 insertions, 0 deletions
diff --git a/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/util/lib/LTKInkUtils.cpp b/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/util/lib/LTKInkUtils.cpp
new file mode 100644
index 00000000..53a34c13
--- /dev/null
+++ b/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/util/lib/LTKInkUtils.cpp
@@ -0,0 +1,410 @@
+/*****************************************************************************************
+* Copyright (c) 2007 Hewlett-Packard Development Company, L.P.
+* Permission is hereby granted, free of charge, to any person obtaining a copy of
+* this software and associated documentation files (the "Software"), to deal in
+* the Software without restriction, including without limitation the rights to use,
+* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
+* Software, and to permit persons to whom the Software is furnished to do so,
+* subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*****************************************************************************************/
+
+/************************************************************************
+ * SVN MACROS
+ *
+ * $LastChangedDate: 2011-02-08 11:00:11 +0530 (Tue, 08 Feb 2011) $
+ * $Revision: 832 $
+ * $Author: dineshm $
+ *
+ ************************************************************************/
+/************************************************************************
+ * FILE DESCR: Implementation of LTKInkUtils that computes the statistics
+ * of a trace group
+ *
+ * CONTENTS:
+ * computeTraceGroupStatistics
+ * computeChannelMaximum
+ * computeChannelMinimum
+ * computeChannelMaxMin
+ *
+ * AUTHOR: Deepu V.
+ *
+ * DATE: March 9, 2005
+ * CHANGE HISTORY:
+ * Author Date Description of change
+ ************************************************************************/
+
+#include "LTKInkUtils.h"
+#include "LTKMacros.h"
+#include "LTKErrors.h"
+#include "LTKLoggerUtil.h"
+#include "LTKErrorsList.h"
+#include "LTKTrace.h"
+#include "LTKTraceGroup.h"
+
+
+/**********************************************************************************
+* AUTHOR : Deepu V.
+* DATE : 09-MAR-2005
+* NAME : LTKInkUtils
+* DESCRIPTION : Initialization constructor
+* ARGUMENTS :
+* RETURNS :
+* NOTES :
+* CHANGE HISTROY
+* Author Date Description of change
+*************************************************************************************/
+
+LTKInkUtils::LTKInkUtils()
+{
+
+}
+
+
+/**********************************************************************************
+* AUTHOR : Deepu V.
+* DATE : 09-MAR-2005
+* NAME : computeChannelStatistics
+* DESCRIPTION : This is a generic function that computes the statistics of channels of
+* an LTKTraceGroup object passed to it.
+* ARGUMENTS : traceGroup - The TraceGroup whose statistics need to be computed channelNames - Names of channels in the traceGroup for which
+* channelNames - channels for which statistics have to be comptued
+* properties - The names of the statistics to be computed
+* channelStatistics - output vector containing results
+* channelStatistics[i][j] the statistics properties[j] for channelname
+* channelNames[i]
+*
+* RETURNS : SUCCESS/FAILURE
+* NOTES :
+* CHANGE HISTROY
+* Author Date Description of change
+*************************************************************************************/
+int LTKInkUtils::computeChannelStatistics(const LTKTraceGroup& traceGroup,
+ const vector<string>& channelNames, const vector<ELTKTraceGroupStatistics>& properties,
+ vector<vector<float> >& channelStatistics)
+{
+ LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
+ " Entering: LTKInkUtils::computeChannelStatistics()" << endl;
+
+ vector<float> tempVec; //temporary vector
+
+ int numChannels = channelNames.size(); //num of channels for which statistics need to be computed
+
+ int numFeatures = properties.size(); //number of properties to be calculated
+
+ int numTraces = traceGroup.getNumTraces(); //number of traces in each tracegroup
+
+ int numPoints; //number of points in a stroke
+
+
+ int totalNumPoints=0; //each channel is of equal length
+
+ float currVal; //value of current point in the channel
+
+ int traceIndex, channelIndex, pointIndex, featureIndex;
+
+ // Clear the output vector
+ channelStatistics.clear();
+
+ //Make an initial vector
+ tempVec.clear();
+ for (featureIndex= 0 ; featureIndex <numFeatures; ++featureIndex)
+ {
+ switch(properties[featureIndex])
+ {
+ //initializing max
+ case TG_MAX:tempVec.push_back(-FLT_MAX);
+ break;
+ //initializing min
+ case TG_MIN:tempVec.push_back(FLT_MAX);
+ break;
+ //initializing avg
+ case TG_AVG:tempVec.push_back(0);
+ break;
+
+ default: LOG(LTKLogger::LTK_LOGLEVEL_ERR)
+ <<"Error: LTKInkUtils::computeChannelStatistics()"<<endl;
+
+ LTKReturnError(EUNSUPPORTED_STATISTICS);
+ }
+ }
+
+ //Initialization Every channel has the same value
+ for(channelIndex =0; channelIndex<numChannels; ++channelIndex)
+ {
+ channelStatistics.push_back(tempVec);
+
+ //initialize total number of points for each channel to zero
+ }
+
+
+ //Iterating through all the strokes
+ for (traceIndex = 0; traceIndex <numTraces; ++traceIndex)
+ {
+ LTKTrace trace;
+ traceGroup.getTraceAt(traceIndex, trace);
+
+ //Iterating through all the channels in a stroke
+ for (channelIndex =0; channelIndex<numChannels; ++channelIndex)
+ {
+ //get the current channel values
+ floatVector currChannel;
+ trace.getChannelValues(channelNames[channelIndex], currChannel);
+
+ //get the current output vector to be updated
+ floatVector& currStats = channelStatistics.at(channelIndex);
+
+ //number of points in this channel
+ numPoints = currChannel.size();
+
+ if(channelIndex==0)
+ {
+ totalNumPoints += numPoints;
+ }
+
+ //iterate through all points in the channel
+ for(pointIndex = 0; pointIndex <numPoints; ++pointIndex)
+ {
+ currVal = currChannel[pointIndex];
+
+ //updating all features as we iterate through each point;
+ for (featureIndex =0; featureIndex<numFeatures; featureIndex++)
+ {
+ switch(properties[featureIndex])
+ {
+
+ //updating the maximum
+ case TG_MAX:
+ if(currVal > currStats[featureIndex])
+ currStats[featureIndex] = currVal;
+ break;
+
+ //updating the minimum
+ case TG_MIN:
+ if(currVal < currStats[featureIndex])
+ currStats[featureIndex] = currVal;
+ break;
+
+ //accumulating the sum
+ case TG_AVG:
+ currStats[featureIndex] += currVal;
+ break;
+
+ default: LOG(LTKLogger::LTK_LOGLEVEL_ERR)
+ <<"Error: LTKInkUtils::computeChannelStatistics()"<<endl;
+
+ LTKReturnError(EUNSUPPORTED_STATISTICS);
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ //Finalization Step
+ for (channelIndex= 0 ; channelIndex<numChannels; ++channelIndex)
+ {
+
+ floatVector& currStats = channelStatistics.at(channelIndex);
+
+ //total number of points in this channel
+ numPoints = totalNumPoints;
+
+ for(featureIndex = 0; featureIndex<numFeatures; ++featureIndex)
+ {
+ switch(properties[featureIndex])
+ {
+ //finding the average
+ case TG_AVG:
+ currStats[featureIndex] /= numPoints;
+ break;
+ }
+ }
+ }
+
+ LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
+ " Exiting: LTKInkUtils::computeChannelStatistics()" << endl;
+
+ return SUCCESS;
+}
+
+/**********************************************************************************
+* AUTHOR : Deepu V.
+* DATE : 09-MAR-2005
+* NAME : computeChannelMaximum
+* DESCRIPTION : Function that computes the minimums of channels of an
+* LTKTraceGroup object passed to it.
+* ARGUMENTS : traceGroup - The TraceGroup whose minimums need to be computed
+* channelNames - channels for which minimum vals have to be comptued
+* minValues - output vector containing results
+* minValues[i] the minimum for channelname[i]
+*
+* RETURNS : SUCCESS/FAILURE
+* NOTES :
+* CHANGE HISTROY
+* Author Date Description of change
+*************************************************************************************/
+int LTKInkUtils::computeChannelMaximum(const LTKTraceGroup& traceGroup, const vector<string>& channelNames,
+ vector<float>& maxValues)
+{
+ int errorCode;
+ LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
+ " Entering: LTKInkUtils::computeChannelMaximum()" << endl;
+
+ vector<vector<float> >results; //results from computeChannelStatistics;
+
+ vector<ELTKTraceGroupStatistics> properties (1,TG_MAX); //Initializing the properties to MIN
+
+
+ maxValues.clear(); //clear the minValues
+
+ //call generic function
+ if(errorCode = computeChannelStatistics(traceGroup,channelNames,properties,results))
+ {
+ return errorCode;
+ }
+
+ //populate the results
+ for (int resultIndex=0; resultIndex<results.size(); ++resultIndex)
+ {
+ maxValues.push_back( (results.at(resultIndex)).at(0) );
+ }
+
+ LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
+ " Exiting: LTKInkUtils::computeChannelMaximum()" << endl;
+
+ return SUCCESS;
+}
+
+/**********************************************************************************
+* AUTHOR : Deepu V.
+* DATE : 09-MAR-2005
+* NAME : computeChannelMinimum
+* DESCRIPTION : Function that computes the minimums of channels of an
+* LTKTraceGroup object passed to it.
+* ARGUMENTS : traceGroup - The TraceGroup whose minimums need to be computed
+* channelNames - channels for which minimum vals have to be comptued
+* minValues - output vector containing results
+* minValues[i] the minimum for channelname[i]
+*
+* RETURNS : SUCCESS/FAILURE
+* NOTES :
+* CHANGE HISTROY
+* Author Date Description of change
+*************************************************************************************/
+int LTKInkUtils::computeChannelMinimum(const LTKTraceGroup& traceGroup,const vector<string>& channelNames,
+ vector<float>& minValues)
+{
+
+ int errorCode;
+ LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
+ " Entering: LTKInkUtils::computeChannelMinimum()" << endl;
+
+
+ vector<vector<float> >results; //results from computeChannelStatistics;
+
+ vector<ELTKTraceGroupStatistics> properties (1,TG_MIN); //Initializing the properties to MIN
+
+
+ minValues.clear(); //clear the minValues
+
+ //call generic function
+ if(errorCode = computeChannelStatistics(traceGroup,channelNames,properties,results))
+ {
+ return errorCode;
+ }
+
+ //populate the results
+ for (int resultIndex =0; resultIndex<results.size(); ++resultIndex)
+ {
+ minValues.push_back( (results.at(resultIndex)).at(0) );
+ }
+
+ LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
+ " Exiting: LTKInkUtils::computeChannelMinimum()" << endl;
+
+ return SUCCESS;
+}
+
+/**********************************************************************************
+* AUTHOR : Deepu V.
+* DATE : 09-MAR-2005
+* NAME : computeChannelMaxMin
+* DESCRIPTION : Function that computes the minimum and maximum of channels of an
+* LTKTraceGroup object passed to it.
+* ARGUMENTS : traceGroup - The TraceGroup whose parameters need to be computed
+* channelNames - channels for which parameters have to be comptued
+* minValues - output vector containing min values
+* maxValues - output vector containing max values
+*
+* RETURNS : SUCCESS/FAILURE
+* NOTES :
+* CHANGE HISTROY
+* Author Date Description of change
+*************************************************************************************/
+int LTKInkUtils::computeChannelMaxMin(const LTKTraceGroup& traceGroup, const vector<string>& channelNames,
+ vector<float>& maxValues, vector<float>& minValues)
+{
+ int errorCode;
+
+ LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
+ " Entering: LTKInkUtils::computeChannelMaxMin()" << endl;
+
+ vector<vector<float> >results; //results from computeChannelStatistics;
+
+ vector<ELTKTraceGroupStatistics> properties (2); //Initializing the properties to MIN
+
+ //pushing the operations to be performed
+ properties[0] = TG_MIN;
+ properties[1] = TG_MAX;
+
+ minValues.clear(); //clear the minValues
+ maxValues.clear(); //clear the maxvalues
+
+ //call generic function
+ if(errorCode = computeChannelStatistics(traceGroup,channelNames,properties,results))
+ {
+ return errorCode;
+ }
+
+ //populate the results
+ for (int resultIndex =0; resultIndex<results.size(); ++resultIndex)
+ {
+ minValues.push_back( (results.at(resultIndex)).at(0) );
+ maxValues.push_back( (results.at(resultIndex)).at(1) );
+ }
+ LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
+ " Exiting: LTKInkUtils::computeChannelMaxMin()" << endl;
+
+ return SUCCESS;
+}
+
+
+/**********************************************************************************
+* AUTHOR : Deepu V.
+* DATE : 09-MAR-2005
+* NAME : ~LTKInkUtils
+* DESCRIPTION : destructor
+* ARGUMENTS :
+* RETURNS :
+* NOTES :
+* CHANGE HISTROY
+* Author Date Description of change
+*************************************************************************************/
+LTKInkUtils::~LTKInkUtils()
+{
+
+}
+