// // Programmer: Craig Stuart Sapp // Creation Date: Sun Dec 21 05:13:34 PST 2008 // Last Modified: Tue Dec 23 12:42:23 PST 2008 // Filename: ...sig/examples/all/cherry.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/cherry.cpp // Syntax: C++; museinfo // // Description: Create a dissimilarity plot between two sequences. // #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); 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 printData (Array& ranking, Array& data, Array& a, Array& b); void getDissimilarityData (Array& ranking, Array& data, Array& a, Array& b); template void removeIndex (Array& a, int index); // User interface variables: Options options; ////////////////////////////////////////////////////////////////////////// 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); Array data; Array ranking; getDissimilarityData(ranking, data, a, b); printData(ranking, data, a, b); return 0; } ////////////////////////////////////////////////////////////////////////// ////////////////////////////// // // printData -- // void printData(Array& ranking, Array& data, Array& a, Array& b) { int i; cout << "data = {\n"; for (i=0; i& ranking, Array& data, Array& a, Array& b) { data.setSize(a.getSize()); data.allowGrowth(0); data.setAll(0); ranking.setSize(a.getSize()); ranking.allowGrowth(0); ranking.setAll(-1); Array aa; Array bb; Array index; index.setSize(a.getSize()); int i; for (i=0; i void removeIndex(Array& a, int index) { int i; int size = a.getSize(); for (i=index; 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 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()); // 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; } } // 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