// // Programmer: Craig Stuart Sapp // Creation Date: Sun Dec 21 05:13:34 PST 2008 // Last Modified: Sun Dec 21 05:13:38 PST 2008 // Filename: ...sig/examples/all/cherry.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/cherry.cpp // Syntax: C++; museinfo // // Description: Performance correlation comparison // #include "humdrum.h" #include "MidiFile.h" #include #include // function declarations: void checkOptions (Options& opts, int argc, char** argv); void example (void); void usage (const char* command); void getSequences (Array& a, Array& b, HumdrumFile& infile); int compareSequences (Array& a, Array& b, int ind, int len); double pearsonCorrelation (int size, double* x, double* y); double pearsonCorrelationHole (int size, double* x, double* y, int ignore); double getMean (Array& data); double getSampleSD (double mean, Array& data); void removeIndex (Array& a, Array& b, int best); // User interface variables: Options options; int verboseQ = 0; int mmaQ = 1; int exclude = 5; ////////////////////////////////////////////////////////////////////////// int main(int argc, char** argv) { // process the command-line options checkOptions(options, argc, argv); HumdrumFile infile; infile.read(options.getArg(1)); Array a; Array b; getSequences(a, b, infile); int best; int len = a.getSize(); if (mmaQ) { cout << "data = {\n"; cout.setf(ios::fixed); cout << "{0/" << a.getSize() << ", " << setprecision(12) << pearsonCorrelation(a.getSize(), a.getBase(), b.getBase()) << "},\n"; } int i; int iterations = a.getSize()-exclude; for (i=0; i& a, Array& b, int best) { int i; int size = a.getSize(); for (i=best; i& a, Array& b, HumdrumFile& infile) { a.setSize(infile.getNumLines()); b.setSize(infile.getNumLines()); a.setSize(0); b.setSize(0); double value; int i; for (i=0; i& a, Array& b, int ind, int len) { int i; double basecorr; double corr; Array corrlist; corrlist.setSize(a.getSize()); corrlist.setSize(0); Array index; index.setSize(a.getSize()); index.setSize(0); basecorr = pearsonCorrelation(a.getSize(), a.getBase(), b.getBase()); if (verboseQ) { cout << "base" << "\t" << basecorr << "\n"; } for (i=0; i zscores; zscores.setSize(corrlist.getSize()); int asize = corrlist.getSize(); for (i=0; i zscores[maxi]) { maxi = i; } } if (mmaQ) { cout << "{" << ind << "/" << len << ", " << corrlist[maxi] << "}"; } if (verboseQ) { cout << "max\t" << maxi << "\t"; cout << "mean\t" << mean << "\t"; cout << "sd\t" << sd << "\t"; cout << corrlist[maxi] << "\t" << zscores[maxi] << "\n"; for (i=0; i& data) { int size = data.getSize(); double sum = 0.0; double value; int i; for (i=0; i& data) { int size = data.getSize(); if (size <= 0) { return 0.0; } int i; double sum = 0.0; for (i=0; i b) { return -1; } else { return 0; } } ////////////////////////////// // // pearsonCorrelationHole -- // double pearsonCorrelationHole(int size, double* x, double* y, int ignore) { double sumx = 0.0; double sumy = 0.0; double sumco = 0.0; double meanx = x[0]; double meany = y[0]; int starti = 1; if (ignore == 0) { meanx = x[1]; meany = y[1]; starti = 2; } double sweep; double deltax; double deltay; int i; for (i=starti; i