view annotationCalculatorSrc/testApp.cpp @ 45:d23685b9e766

Fixed the alignment error caluculations and added histogram plotting
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Tue, 08 May 2012 21:53:11 +0100
parents 73fbbc92fdfb
children ba36a1721538
line wrap: on
line source
#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup(){
	ofBackground(255);
	
	std::string path = "../../../data/marbleArch_4_beats.txt";
//	path = "../../../data/marbleArchKick_take4.txt";
	
	beatReader.readInBeatsFile(path);
	GroundTruth.push_back(beatReader.beatTimes);//so we have our first file list of beats
	
	//now get the second file beat list
	path = "../../../data/marbleArch_6_beats.txt";//just the same one for the mo...
//	path = "../../../data/marbleArchKick_take6.txt";//annotated kick tracks
	beatReader.readInBeatsFile(path);
	GroundTruth.push_back(beatReader.beatTimes);//so we have our first file list of beats
	
	//so GroundTruth[0] is the DoubleVector of file 1 beats 
	//this is the Live file - i.e. played along
	//i.e. GT[0][0] - first, GT[0][1] second and so on
	
//	path = "../../../data/marbleArchloaded6_live4.txt";
	path = "../../../data/MarbleArch_live4_reh6_output.txt";
	path = "../../../data/marbleArch_take4_to_take6_new_output.txt";
	path = "../../../data/MarbleArch_live4_reh6_newOutput.txt";
	//Then we need to know where our alignment path has gone and projected these positions to be
	//this is the rehearsal file that was analysed
	//so we need to load an alignment path
	//then calculate the error histogram etc
	beatReader.readInMultiAlignmentFile(path);

	
	beatReader.calculateMedianError(GroundTruth[0], GroundTruth[1], beatReader.alignmentTimes[0], beatReader.alignmentTimes[1]);
	
	histogramWidth = 10;
	histogramBinNumber = 25;
	
	matchPath = "../../../data/MatchAlignments/marbleArchlive4_reh6_match_OB.out";
	matchNotations.readInMatchFile(matchPath);
	multiHistogram.createHistogram(histogramWidth, histogramBinNumber, beatReader.errors);
	
	printf("\n\nGET ERRORS FOR MATCH\n\n");
	beatReader.calculateMedianError(GroundTruth[0], GroundTruth[1], matchNotations.matchLiveTimes, matchNotations.matchRehearsalTimes);
	matchHistogram.createHistogram(histogramWidth, histogramBinNumber, beatReader.errors);
	
	screenToDraw = 1;

	
	xPlotMin = 0;
	xPlotMax = 40;
	yPlotMin = 0;
	yPlotMax = 40;
}

//--------------------------------------------------------------
void testApp::update(){

}

//--------------------------------------------------------------
void testApp::draw(){
	switch (screenToDraw) {
		case 0:
			drawAlignmentVectors();
			break;
		case 1:
			ofSetColor(0,0,255);
			multiHistogram.plotHistogram();
			break;
		case 2:
			ofSetColor(0,255,0);
			matchHistogram.plotHistogram();
			break;	
	}
}


void  testApp::drawAlignmentVectors(){
	
	ofSetColor(0,0,0);
	//	plotter.plotVector(beatReader.beatTimes);
	int limit = 50;
	//live is X
	//rehearsal is Y
	plotter.plotTwoVectors(GroundTruth[0], GroundTruth[1], xPlotMin, xPlotMax, yPlotMin, yPlotMax, true);
	
	//x axis is the live time
	
	ofSetColor(0,0,200);
	plotter.plotTwoVectors(beatReader.alignmentTimes[0], beatReader.alignmentTimes[1], xPlotMin, xPlotMax, yPlotMin, yPlotMax, false);
	
	ofSetColor(200,0,0);
	plotter.plotTwoVectors(beatReader.alignmentTimes[0], beatReader.alignmentTimes[2], xPlotMin, xPlotMax, yPlotMin, yPlotMax, false);
	
	ofSetColor(0,200,0);
	plotter.plotTwoVectors(matchNotations.matchLiveTimes, matchNotations.matchRehearsalTimes, xPlotMin, xPlotMax, yPlotMin, yPlotMax, false);
	
	
}

//--------------------------------------------------------------
void testApp::keyPressed(int key){

	if (key == OF_KEY_RIGHT){
		xPlotMax += 20;
		xPlotMin += 20;
		getYvalues();
	}
	
	if (key == OF_KEY_LEFT){
		xPlotMin -= 20;
		xPlotMax -= 20;
		getYvalues();
	}
	
	if (key == OF_KEY_UP){
		xPlotMax = xPlotMin/2 + xPlotMax/2 ;
		yPlotMax = yPlotMin/2 + yPlotMax/2;
	}
	
	if (key == OF_KEY_DOWN){
		xPlotMax = -1*xPlotMin + 2*xPlotMax ;
		yPlotMax = -1*xPlotMin + 2*yPlotMax;
	}
		
	if (key == 's'){
		screenToDraw++;
	
		if (screenToDraw == NUMBER_OF_SCREENS)
			screenToDraw = 0;
		
	}

}

void testApp::getYvalues(){
//we have xmin and max
//	need the y equivalent
	int index = 0;
	while (index < beatReader.alignmentTimes[0].size() && beatReader.alignmentTimes[0][index] < xPlotMin){
		index++;
		//printf("beat[%i]: %f\n", index, beatReader.alignmentTimes[0][index]);
	}
	
	//printf("found index %i, size %i, at val %.3f\n", index, (int)beatReader.alignmentTimes[0].size(), beatReader.alignmentTimes[0][index]);
	
	yPlotMin = beatReader.alignmentTimes[1][index];
	
	while (index < beatReader.alignmentTimes[0].size() && beatReader.alignmentTimes[0][index] < xPlotMax)
		index++;
	
	yPlotMax = beatReader.alignmentTimes[1][index];
	
	
	printPlotValues();
}

void testApp::printPlotValues(){
		printf("xmin %.0f, mxax %.0f\n", xPlotMin, xPlotMax);
		printf("ymin %.0f, ymax %.0f\n", yPlotMin, yPlotMax);
}

//--------------------------------------------------------------
void testApp::keyReleased(int key){

}

//--------------------------------------------------------------
void testApp::mouseMoved(int x, int y ){

}

//--------------------------------------------------------------
void testApp::mouseDragged(int x, int y, int button){

}

//--------------------------------------------------------------
void testApp::mousePressed(int x, int y, int button){

}

//--------------------------------------------------------------
void testApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void testApp::windowResized(int w, int h){

}

//--------------------------------------------------------------
void testApp::gotMessage(ofMessage msg){

}

//--------------------------------------------------------------
void testApp::dragEvent(ofDragInfo dragInfo){ 

}