This is InspectStat.m in view mode; [Download] [Up]
/* InspectStat.h by Paul Kunz December 1991
* Controls binding of the plot axes with the columns of the tuple.
*
* Copyright (C) 1991 The Board of Trustees of
* The Leland Stanford Junior University. All Rights Reserved.
*/
#import <appkit/appkit.h>
#import "InspectStat.h"
const char InspectStat_h_rcsid[] = INSPECTSTAT_H_ID;
const char InspectStat_m_rcsid[] = "$Id: InspectStat.m,v 2.10 1993/08/04 18:54:09 mfg Exp $";
#import "HGraphicView.h"
#import "NewInspector.h"
#import "Plot.h"
#define XMEAN 0
#define XSDEV 1
#define YMEAN 2
#define YSDEV 3
#define CORR 4
@implementation InspectStat
- initInspFor:aDraw
{
NXBundle *bundle;
char buffer[MAXPATHLEN+1];
int r;
[super initInspFor:aDraw];
bundle = [NXBundle bundleForClass:[self class]];
if ( [bundle getPath:buffer forResource:"InspectStat" ofType:"nib"] ) {
[NXApp loadNibFile:buffer owner:self
withNames:NO fromZone:[self zone]];
}
[theInspector addView:[contentBox contentView]
withName:"Plot Statistics" withSupervisor:self];
[statHBox removeFromSuperview];
for(r = 0; r < 5; r++) {
[[stat2ndMatrix cellAt:r :0]
setFloatingPointFormat:YES left:3 right:3];
}
return self;
}
- createImage:sender
{
View *statView;
NXStream *s;
NXRect rect, prect;
display disp;
graphtype_t graphType;
statView = [statBox contentView];
selectedPlot = [graphicView firstPlot];
if ( !selectedPlot ) {
return self;
}
disp = [selectedPlot histDisplay];
graphType = h_getDispType( disp );
s = NXOpenMemory(NULL, 0, NX_READWRITE);
if (s) {
if ( graphType == HISTOGRAM ) {
[statHBox getFrame:&rect]; /* a subset of statView */
} else {
[statView getFrame:&rect];
}
[statView copyPSCodeInside:&rect to:s];
}
NXSeek(s, 0L, NX_FROMSTART);
[selectedPlot getBounds:&prect];
[graphicView loadImageFromStream:s at:&prect.origin allowAlpha:YES];
NXCloseMemory(s, NX_FREEBUFFER);
return self;
}
- create2ndImage:sender
{
View *statView;
NXStream *s;
NXRect rect, prect;
display disp;
graphtype_t graphType;
statView = [stat2ndBox contentView];
selectedPlot = [graphicView firstPlot];
if ( !selectedPlot ) {
return self;
}
disp = [selectedPlot histDisplay];
graphType = h_getDispType( disp );
s = NXOpenMemory(NULL, 0, NX_READWRITE);
if (s) {
[statView getFrame:&rect];
[statView copyPSCodeInside:&rect to:s];
}
NXSeek(s, 0L, NX_FROMSTART);
[selectedPlot getBounds:&prect];
[graphicView loadImageFromStream:s at:&prect.origin allowAlpha:YES];
NXCloseMemory(s, NX_FREEBUFFER);
return self;
}
/* Methods for updating Inspector */
- updateView
{
[self showStats];
return self;
}
- updateEmptySelection
{
[self clearStats];
return self;
}
- updateMultiSelection
{
selectedPlot = nil;
[self clearStats];
return self;
}
- clearStats
{
int c, r;
for( c = 0; c < 3; c++ ) {
for( r = 0; r < 3; r++ ) {
[[statMatrix cellAt:r :c] setStringValue:""];
}
}
[statMatrix setEnabled:NO];
for(r = 0; r < 5; r++) {
[[stat2ndMatrix cellAt:r :0] setStringValue:""];
}
[stat2ndMatrix setEnabled:NO];
return self;
}
- showStats
{
id aCell;
display disp;
graphtype_t graphType;
int c, r;
double xmean;
double ymean;
double temp;
double xmoments[3];
double ymoments[3];
float xtemp[3];
float ytemp[3];
float corr;
BOOL doCorr;
selectedPlot = [graphicView firstPlot];
if ( !selectedPlot ) {
[self clearStats];
return self;
}
disp = [selectedPlot histDisplay];
graphType = h_getDispType( disp );
[statMatrix setEnabled:YES];
if (graphType == HISTOGRAM) {
for ( r = 0; r < 4; r++ ) {
[[statRowLabels cellAt:r :0] setStringValue:""];
}
for ( r = 0; r < 3; r++ ) {
for ( c = 0; c < 3; c++ ) {
aCell = [statMatrix cellAt:r :c ];
if ( r == 0 ) {
[aCell setFloatValue:h_getTotal(disp,c,0) ];
} else {
[aCell setStringValue:""];
}
}
}
} else {
[[statRowLabels cellAt:0 :0] setStringValue:"y/x"];
[[statRowLabels cellAt:1 :0] setStringValue:"over"];
[[statRowLabels cellAt:2 :0] setStringValue:"within"];
[[statRowLabels cellAt:3 :0] setStringValue:"under"];
for ( c = 0; c < 3; c++ )
{
for ( r = 0; r < 3; r++ )
{
aCell = [statMatrix cellAt:r :c];
[aCell setFloatValue:h_getTotal(disp,c,2-r) ];
}
}
}
if ((graphType == SCATTERPLOT) ||
(graphType == XYPLOT) ||
(graphType == STRIPCHART)) {
doCorr = YES;
h_getXYMoments (disp, xtemp, ytemp, &corr);
for(r = 0; r < 3; r++) {
xmoments[r] = xtemp[r];
ymoments[r] = ytemp[r];
}
} else {
doCorr = NO;
for(r = 0; r < 3; r++) {
xmoments[r] = h_getXMoments(disp)[r];
ymoments[r] = h_getYMoments(disp)[r];
}
}
[stat2ndMatrix setEnabled:YES];
if (xmoments[0] > 1.) {
xmean = xmoments[1]/xmoments[0];
[[stat2ndMatrix cellAt:XMEAN :0] setFloatValue:xmean];
temp = sqrt((xmoments[2]*xmoments[0] - xmoments[1]*xmoments[1]) /
(xmoments[0]*(xmoments[0] - 1)));
[[stat2ndMatrix cellAt:XSDEV :0] setFloatValue:temp];
} else {
[[stat2ndMatrix cellAt:XMEAN :0] setStringValue:""];
[[stat2ndMatrix cellAt:XSDEV :0] setStringValue:""];
}
if (ymoments[0] > 1.) {
ymean = ymoments[1]/ymoments[0];
[[stat2ndMatrix cellAt:YMEAN :0] setFloatValue:ymean];
temp = sqrt((ymoments[2]*ymoments[0] - ymoments[1]*ymoments[1]) /
(ymoments[0]*(ymoments[0] - 1)));
[[stat2ndMatrix cellAt:YSDEV :0] setFloatValue:temp];
} else {
[[stat2ndMatrix cellAt:YMEAN :0] setStringValue:""];
[[stat2ndMatrix cellAt:YSDEV :0] setStringValue:""];
}
if (doCorr) {
[[stat2ndMatrix cellAt:CORR :0] setFloatValue:corr];
} else {
[[stat2ndMatrix cellAt:CORR :0] setStringValue:""];
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.