Skip to content

Commit 49cbfdf

Browse files
mmAnimCurveStatistics - Rename argument flags.
Because we can better explain what each of these things is, and be explicit about the difference between population variance and sample variance (which is not currently added).
1 parent 584a63f commit 49cbfdf

3 files changed

Lines changed: 120 additions & 93 deletions

File tree

src/mmSolver/cmd/MMAnimCurveStatisticsCmd.cpp

Lines changed: 57 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@
6565
#define MEDIAN_FLAG_SHORT "-md"
6666
#define MEDIAN_FLAG_LONG "-median"
6767

68-
#define VARIANCE_FLAG_SHORT "-var"
69-
#define VARIANCE_FLAG_LONG "-variance"
68+
#define POPULATION_VARIANCE_FLAG_SHORT "-pvr"
69+
#define POPULATION_VARIANCE_FLAG_LONG "-populationVariance"
7070

71-
#define STANDARD_DEVIATION_FLAG_SHORT "-sd"
72-
#define STANDARD_DEVIATION_FLAG_LONG "-standardDeviation"
71+
#define POPULATION_STANDARD_DEVIATION_FLAG_SHORT "-psd"
72+
#define POPULATION_STANDARD_DEVIATION_FLAG_LONG "-populationStandardDeviation"
7373

7474
#define SIGNAL_TO_NOISE_RATIO_FLAG_SHORT "-snr"
7575
#define SIGNAL_TO_NOISE_RATIO_FLAG_LONG "-signalToNoiseRatio"
@@ -85,9 +85,9 @@
8585
// Statistic type identifiers for output.
8686
#define STAT_TYPE_MEAN 0.0
8787
#define STAT_TYPE_MEDIAN 1.0
88-
#define STAT_TYPE_VARIANCE 2.0
89-
#define STAT_TYPE_STDDEV 3.0
90-
#define STAT_TYPE_SNR 4.0
88+
#define STAT_TYPE_POPULATION_VARIANCE 2.0
89+
#define STAT_TYPE_POPULATION_STD_DEV 3.0
90+
#define STAT_TYPE_SIGNAL_TO_NOISE_RATIO 4.0
9191

9292
namespace mmsg = mmscenegraph;
9393

@@ -121,9 +121,10 @@ MSyntax MMAnimCurveStatisticsCmd::newSyntax() {
121121
// Statistics flags.
122122
syntax.addFlag(MEAN_FLAG_SHORT, MEAN_FLAG_LONG, MSyntax::kBoolean);
123123
syntax.addFlag(MEDIAN_FLAG_SHORT, MEDIAN_FLAG_LONG, MSyntax::kBoolean);
124-
syntax.addFlag(VARIANCE_FLAG_SHORT, VARIANCE_FLAG_LONG, MSyntax::kBoolean);
125-
syntax.addFlag(STANDARD_DEVIATION_FLAG_SHORT, STANDARD_DEVIATION_FLAG_LONG,
126-
MSyntax::kBoolean);
124+
syntax.addFlag(POPULATION_VARIANCE_FLAG_SHORT,
125+
POPULATION_VARIANCE_FLAG_LONG, MSyntax::kBoolean);
126+
syntax.addFlag(POPULATION_STANDARD_DEVIATION_FLAG_SHORT,
127+
POPULATION_STANDARD_DEVIATION_FLAG_LONG, MSyntax::kBoolean);
127128
syntax.addFlag(SIGNAL_TO_NOISE_RATIO_FLAG_SHORT,
128129
SIGNAL_TO_NOISE_RATIO_FLAG_LONG, MSyntax::kBoolean);
129130

@@ -242,9 +243,9 @@ MStatus MMAnimCurveStatisticsCmd::parseArgs(const MArgList &args) {
242243
// Parse statistics flags with default values.
243244
m_calculateMean = false;
244245
m_calculateMedian = false;
245-
m_calculateVariance = false;
246-
m_calculateStdDev = false;
247-
m_calculateSNR = false;
246+
m_calculatePopVariance = false;
247+
m_calculatePopStdDev = false;
248+
m_calculateSignalToNoiseRatio = false;
248249

249250
if (argData.isFlagSet(MEAN_FLAG_SHORT)) {
250251
status = argData.getFlagArgument(MEAN_FLAG_SHORT, 0, m_calculateMean);
@@ -255,25 +256,25 @@ MStatus MMAnimCurveStatisticsCmd::parseArgs(const MArgList &args) {
255256
argData.getFlagArgument(MEDIAN_FLAG_SHORT, 0, m_calculateMedian);
256257
MMSOLVER_CHECK_MSTATUS_AND_RETURN_IT(status);
257258
}
258-
if (argData.isFlagSet(VARIANCE_FLAG_SHORT)) {
259-
status = argData.getFlagArgument(VARIANCE_FLAG_SHORT, 0,
260-
m_calculateVariance);
259+
if (argData.isFlagSet(POPULATION_VARIANCE_FLAG_SHORT)) {
260+
status = argData.getFlagArgument(POPULATION_VARIANCE_FLAG_SHORT, 0,
261+
m_calculatePopVariance);
261262
MMSOLVER_CHECK_MSTATUS_AND_RETURN_IT(status);
262263
}
263-
if (argData.isFlagSet(STANDARD_DEVIATION_FLAG_SHORT)) {
264-
status = argData.getFlagArgument(STANDARD_DEVIATION_FLAG_SHORT, 0,
265-
m_calculateStdDev);
264+
if (argData.isFlagSet(POPULATION_STANDARD_DEVIATION_FLAG_SHORT)) {
265+
status = argData.getFlagArgument(
266+
POPULATION_STANDARD_DEVIATION_FLAG_SHORT, 0, m_calculatePopStdDev);
266267
MMSOLVER_CHECK_MSTATUS_AND_RETURN_IT(status);
267268
}
268269
if (argData.isFlagSet(SIGNAL_TO_NOISE_RATIO_FLAG_SHORT)) {
269270
status = argData.getFlagArgument(SIGNAL_TO_NOISE_RATIO_FLAG_SHORT, 0,
270-
m_calculateSNR);
271+
m_calculateSignalToNoiseRatio);
271272
MMSOLVER_CHECK_MSTATUS_AND_RETURN_IT(status);
272273
}
273274

274275
// Check that at least one statistic is enabled.
275-
if (!m_calculateMean && !m_calculateMedian && !m_calculateVariance &&
276-
!m_calculateStdDev && !m_calculateSNR) {
276+
if (!m_calculateMean && !m_calculateMedian && !m_calculatePopVariance &&
277+
!m_calculatePopStdDev && !m_calculateSignalToNoiseRatio) {
277278
MGlobal::displayError(CMD_NAME
278279
": At least one statistic must be enabled.");
279280
return MS::kFailure;
@@ -283,10 +284,12 @@ MStatus MMAnimCurveStatisticsCmd::parseArgs(const MArgList &args) {
283284
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_endFrame=" << m_endFrame);
284285
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_calculateMean=" << m_calculateMean);
285286
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_calculateMedian=" << m_calculateMedian);
286-
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_calculateVariance="
287-
<< m_calculateVariance);
288-
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_calculateStdDev=" << m_calculateStdDev);
289-
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_calculateSNR=" << m_calculateSNR);
287+
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_calculatePopVariance="
288+
<< m_calculatePopVariance);
289+
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_calculatePopStdDev="
290+
<< m_calculatePopStdDev);
291+
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_calculateSignalToNoiseRatio="
292+
<< m_calculateSignalToNoiseRatio);
290293
MMSOLVER_MAYA_VRB(CMD_NAME << ": m_useListInput=" << m_useListInput);
291294

292295
return status;
@@ -398,50 +401,55 @@ MStatus MMAnimCurveStatisticsCmd::doIt(const MArgList &args) {
398401

399402
// Variables to store calculated values.
400403
mmsg::Real mean = 0.0;
401-
mmsg::Real variance = 0.0;
402-
mmsg::Real std_dev = 0.0;
404+
mmsg::Real pop_variance = 0.0;
405+
mmsg::Real pop_std_dev = 0.0;
403406
mmsg::Real snr = 0.0;
404407
bool meanCalculated = false;
405408

406409
// Calculate variance first, because it gives us the mean as well.
407-
if (m_calculateVariance) {
410+
if (m_calculatePopVariance) {
408411
if (mmsg::calc_population_variance(values_slice_y, mean,
409-
variance)) {
410-
statsResults.push_back({STAT_TYPE_VARIANCE, variance});
412+
pop_variance)) {
413+
statsResults.push_back(
414+
{STAT_TYPE_POPULATION_VARIANCE, pop_variance});
411415
meanCalculated = true;
412-
MMSOLVER_MAYA_VRB(CMD_NAME << ": variance=" << variance);
416+
MMSOLVER_MAYA_VRB(CMD_NAME << ": pop_variance="
417+
<< pop_variance);
413418
} else {
414-
MGlobal::displayWarning(CMD_NAME
415-
": Failed to calculate variance.");
419+
MGlobal::displayWarning(
420+
CMD_NAME ": Failed to calculate population variance.");
416421
}
417422
}
418423

419-
if (m_calculateStdDev && !m_calculateVariance) {
424+
if (m_calculatePopStdDev && !m_calculatePopVariance) {
420425
if (mmsg::calc_population_standard_deviation(values_slice_y, mean,
421-
std_dev)) {
422-
statsResults.push_back({STAT_TYPE_STDDEV, std_dev});
426+
pop_std_dev)) {
427+
statsResults.push_back(
428+
{STAT_TYPE_POPULATION_STD_DEV, pop_std_dev});
423429
meanCalculated = true;
424430
MMSOLVER_MAYA_VRB(CMD_NAME << ": standard deviation="
425-
<< std_dev);
431+
<< pop_std_dev);
426432
} else {
427433
MGlobal::displayWarning(
428434
CMD_NAME ": Failed to calculate standard deviation.");
429435
}
430-
} else if (m_calculateStdDev && m_calculateVariance) {
431-
// We already have variance, just calculate std dev from it.
432-
std_dev = std::sqrt(variance);
433-
statsResults.push_back({STAT_TYPE_STDDEV, std_dev});
434-
MMSOLVER_MAYA_VRB(CMD_NAME << ": standard deviation=" << std_dev);
436+
} else if (m_calculatePopStdDev && m_calculatePopVariance) {
437+
// We already have population variance, just calculate population
438+
// std dev from it.
439+
pop_std_dev = std::sqrt(pop_variance);
440+
statsResults.push_back({STAT_TYPE_POPULATION_STD_DEV, pop_std_dev});
441+
MMSOLVER_MAYA_VRB(CMD_NAME << ": standard deviation="
442+
<< pop_std_dev);
435443
}
436444

437445
// Calculate SNR if needed.
438-
if (m_calculateSNR) {
439-
mmsg::Real snr_mean = 0.0;
440-
if (mmsg::calc_signal_to_noise_ratio(values_slice_y, snr_mean,
441-
snr)) {
442-
statsResults.push_back({STAT_TYPE_SNR, snr});
446+
if (m_calculateSignalToNoiseRatio) {
447+
mmsg::Real signal_to_noise_ratio_mean = 0.0;
448+
if (mmsg::calc_signal_to_noise_ratio(
449+
values_slice_y, signal_to_noise_ratio_mean, snr)) {
450+
statsResults.push_back({STAT_TYPE_SIGNAL_TO_NOISE_RATIO, snr});
443451
if (!meanCalculated) {
444-
mean = snr_mean;
452+
mean = signal_to_noise_ratio_mean;
445453
meanCalculated = true;
446454
}
447455
MMSOLVER_MAYA_VRB(CMD_NAME << ": SNR=" << snr);

src/mmSolver/cmd/MMAnimCurveStatisticsCmd.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ class MMAnimCurveStatisticsCmd : public MPxCommand {
4949
, m_endFrame(std::numeric_limits<FrameNumber>::max())
5050
, m_calculateMean(false)
5151
, m_calculateMedian(false)
52-
, m_calculateVariance(false)
53-
, m_calculateStdDev(false)
54-
, m_calculateSNR(false)
52+
, m_calculatePopVariance(false)
53+
, m_calculatePopStdDev(false)
54+
, m_calculateSignalToNoiseRatio(false)
5555
, m_useListInput(false){};
5656
virtual ~MMAnimCurveStatisticsCmd();
5757

@@ -74,9 +74,9 @@ class MMAnimCurveStatisticsCmd : public MPxCommand {
7474
// Statistics flags
7575
bool m_calculateMean;
7676
bool m_calculateMedian;
77-
bool m_calculateVariance;
78-
bool m_calculateStdDev;
79-
bool m_calculateSNR;
77+
bool m_calculatePopVariance;
78+
bool m_calculatePopStdDev;
79+
bool m_calculateSignalToNoiseRatio;
8080

8181
// The animation curves to process.
8282
MSelectionList m_selection;

0 commit comments

Comments
 (0)