//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Sat Jul 1 02:48:55 PDT 2006
// Last Modified: Mon Mar 17 23:19:09 PST 2008
// Filename: ...sig/examples/all/plotcurve.cpp
// Web Address: http://sig.sapp.org/examples/museinfo/plotcurve/plotcurve.cpp
// Syntax: C++; museinfo
//
// Description: Plot a stream of numbers.
//
#include "HumdrumFile.h"
#include "Array.h"
#include "Options.h"
#include "PixelColor.h"
#include <string.h>
#include <stdio.h>
#ifndef OLDCPP
using namespace std;
#include <iostream>
#include <fstream>
#else
#include <iostream.h>
#include <fstream.h>
#endif
// function declarations:
void checkOptions(Options& opts, int argc, char** argv);
void example(void);
void usage(const char* command);
void printDataPlot(Array<double>& a, Array<double>& b, int height,
int gridlines);
// User interface variables:
Options options;
int column = 0; // used with -n option (for averaging)
int flipq = 0; // flip the data from tempo to duration
int maxheight = -1; // used with --height option
int gradientq = 0; // used with -G option
double smooth = 0.0; // used with -S option
int hline = 0; // used with -H option
int plotq = 0; // used with -P option
int unsmoothq = 0; // used with -U option
int bifeature = 0; // used with -b option
int bgval = 80; // no interface to user yet
//////////////////////////////////////////////////////////////////////////
int main(int argc, char** argv) {
// process the command-line options
checkOptions(options, argc, argv);
HumdrumFile infile;
const char* filename = "";
if (options.getArgCount() <= 0) {
infile.read(cin);
} else {
filename = options.getArg(1);
infile.read(filename);
}
Array<double> a;
//Array<double> b;
// loadData(infile, a);
// printDataPlot(a);
return 0;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////
//
// printDataPlot -- print an input data plot underneath the scape.
//
void printDataPlot(Array<double>& a, Array<double>& b, int height,
int gridlines) {
PixelColor pc;
pc.setColor(255,0,0);
int i, j;
int rows = height;
int cols = a.getSize() * 2;
Array<Array<PixelColor> > plotregion;
plotregion.setSize(rows);
plotregion.allowGrowth(0);
for (i=0; i<rows; i++) {
plotregion[i].setSize(cols);
plotregion[i].allowGrowth(0);
for (j=0; j<cols; j++) {
plotregion[i][j].setColor(255,255,255);
}
}
// draw vertical lines if gridlines > 0:
if (gridlines > 0) {
for (j=0; j<cols/2; j++) {
if ((j+1) % gridlines == 0) {
for (i=0; i<rows; i++) {
plotregion[i][j*2].setColor(bgval,bgval,bgval);
plotregion[i][j*2+1].setColor(bgval,bgval,bgval);
}
}
}
}
double minn = a[0];
double maxx = a[0];
for (i=1; i<a.getSize(); i++) {
if (a[i] < minn) { minn = a[i]; }
if (a[i] > maxx) { maxx = a[i]; }
}
double i1;
double i2;
int x1;
int x2;
int k;
int xlow;
int xhi;
for (j=0; j<a.getSize(); j++) {
i1 = (a[j] - minn)/(maxx - minn) * rows;
i = rows - int(i1) - 1;
if (i < 0) { i = 0; }
if (i >= rows) { i = rows-1; }
plotregion[i][2*j].setColor(0,0,255);
if (j < a.getSize()-1) {
i2 = (a[j+1] - minn)/(maxx - minn) * rows;
x1 = rows - int(i1) - 1;
x2 = rows - int(i2) - 1;
if (x1 < 0) { x1 = 0; }
if (x1 >= rows) { x1 = rows-1; }
if (x2 < 0) { x2 = 0; }
if (x2 >= rows) { x2 = rows-1; }
if (x1 < x2) {
xlow = x1;
xhi = x2;
} else {
xlow = x2;
xhi = x1;
}
for (k=xlow+1; k<xhi; k++) {
plotregion[k][2*j+1].setColor(175,175,255);
}
if (xlow == xhi) {
plotregion[xlow][2*j+1].setColor(175,175,255);
}
if (xhi-xlow == 1) {
plotregion[x1][2*j+1].setColor(175,175,255);
}
}
}
for (i=0; i<rows; i++) {
for (j=0; j<cols; j++) {
cout << " ";
plotregion[i][j].writePpm3(cout);
}
cout << endl;
}
}
//////////////////////////////
//
// checkOptions --
//
void checkOptions(Options& opts, int argc, char* argv[]) {
opts.define("g|log=b", "display vertical axis on a log scale");
opts.define("flip=b", "flip the input data from tempo to duration");
opts.define("cd|condiff=b", "display contoured difference plots");
opts.define("f|logfactor=d:1500.0", "factor for strenth of log scaling");
opts.define("n|column=i:1", "which column to average");
opts.define("a|average=b", "display data average rather than correlation");
opts.define("x|data=b", "display input data and then quit");
opts.define("c|correlation=b", "display correlation data and then quit");
opts.define("h|hue=b", "display correlations in hue coloring");
opts.define("r|rectangle=b", "display correlations in rectangular plot");
opts.define("p|poly=b", "poly correlation plot");
opts.define("b|bg|background=s:255 255 255", "background color");
opts.define("bi=b", "Binary feature correlation");
opts.define("height=i:-1", "Maximum height scope");
opts.define("G|gradient=b", "Gradient analysis (of A or R option)");
opts.define("S|smooth=d:0.0", "Smoothing gain (0.0 = don't smooth)");
opts.define("U|unsmooth=b", "apply unsmoothing");
opts.define("H|horizontal=i:0", "hoizontal line step");
opts.define("P|plot=i:0", "display original data underneath");
opts.define("author=b", "author of program");
opts.define("version=b", "compilation info");
opts.define("example=b", "example usages");
opts.define("help=b", "short description");
opts.process(argc, argv);
// handle basic options:
if (opts.getBoolean("author")) {
cout << "Written by Craig Stuart Sapp, "
<< "craig@ccrma.stanford.edu, Jul 2006" << endl;
exit(0);
} else if (opts.getBoolean("version")) {
cout << argv[0] << ", version: 13 May 2007" << endl;
cout << "compiled: " << __DATE__ << endl;
exit(0);
} else if (opts.getBoolean("help")) {
usage(opts.getCommand());
exit(0);
} else if (opts.getBoolean("example")) {
example();
exit(0);
}
// logq = opts.getBoolean("log");
// logfactor = opts.getDouble("logfactor");
// smooth = opts.getDouble("smooth");
// unsmoothq = opts.getBoolean("unsmooth");
// hline = opts.getInteger("horizontal");
// flipq = opts.getBoolean("flip");
// condiffq = opts.getBoolean("condiff");
// column = opts.getInteger("column") - 1;
// maxheight = opts.getInteger("height");
// rampq = opts.getBoolean("ramp");
// plotq = opts.getInteger("plot");
// bifeature = opts.getBoolean("bi");
if (plotq < 0) {
plotq = 0;
}
if (column < 0) {
column = 0;
} else if (column > 1) {
column = 1;
}
// dataq = opts.getBoolean("data");
// correlq = opts.getBoolean("correlation");
// if (opts.getBoolean("hue")) {
// colortype = COLOR_HUE;
// }
// if ((rampq || archq) && opts.getBoolean("gradient")) {
// gradientq = 1;
// }
// if (opts.getBoolean("rectangle")) {
// plotshape = SHAPE_RECTANGLE;
// }
}
//////////////////////////////
//
// example --
//
void example(void) {
}
//////////////////////////////
//
// usage --
//
void usage(const char* command) {
}
// md5sum: 47d7ce5ddc1702fddd3a6a2388a4085e curveplot.cpp [20110711]