def evaluateClassifierPerf2(ADDSObj, testRun):
	# Negative results below are only set to be measured after a full spike interval has passed and had the opportunity to have created a spike
	# Only evaluate results for enough epochs to test each char in input (3 spike interv per char * 4 char = 12 spike intervals total)
	# the +1 in (totalSpikeIntervals+1) is to allow a last refractoryPointSwitch triggered negative spike evaluation to occur.
	# * A change was made to the scoring to not count the 0.0-0.1 second period because the input spike generator does not start until .1
	# seconds and the first occurences of output spikes should be monitored looking at .2 seconds to see if any occured in seconds .1-.2 .	

	# Only assign neuron to first window it fires in
	# multiple neurons firing in the same window is not accounted for
	# TODO: properly constrict testing windows for scoring using testingSpikeWindows

	currentSpikeIntervalTime = timeAndRefrac.spikeIntervalCounter
	neuronsWithoutSpikes = 0
	currentWindow = math.floor(Decimal(format((currentSpikeIntervalTime-2), '.1f'))/Decimal(format(testingSpikesPerChar, '.1f')))

	if timeAndRefrac.refractoryPointSwitch == True:
		if (currentSpikeIntervalTime >= 2) and (currentSpikeIntervalTime <= (totalSpikeIntervals+1)):
			for neuronIndex in range(dictionaryLongitude):				
				if (ADDSObj.UmSpikeFired[neuronIndex] == 1*mV):
					if (testRun.firedSpikes[currentSpikeIntervalTime]) == None:
						testRun.firedSpikes[currentSpikeIntervalTime] = np.array([neuronIndex])
					else:
						firedSpikes2 = []
						for elemIndex in range(len(testRun.firedSpikes)): 
							if elemIndex == currentSpikeIntervalTime: 
								newElem = testRun.firedSpikes[elemIndex].tolist()
								newElem.append([neuronIndex])
								firedSpikes2.append(np.array(newElem))
							else: 
								firedSpikes2.append(testRun.firedSpikes[elemIndex])
						testRun.firedSpikes = np.array(firedSpikes2)

					neuronAssignedToWindow = False
					for neuronWindowAssignment in testRun.assignedSpikeWindows:
						if neuronWindowAssignment == currentWindow:
							neuronAssignedToWindow = True

					if neuronAssignedToWindow == False and testRun.assignedSpikeWindows[neuronIndex] == None:
						testRun.assignedSpikeWindows[neuronIndex] = currentWindow

					if testRun.assignedSpikeWindows[neuronIndex] == currentWindow:
						testRun.truePositiveSpikeResults = testRun.truePositiveSpikeResults + 1	
						#print 'TP found\t','self.testSpikeIntervalCounter-1\t',timeAndRefrac.spikeIntervalCounter-1,'neuronIndex\t',neuronIndex
					else:
						testRun.falsePositiveSpikeResults = testRun.falsePositiveSpikeResults + 1
				elif (ADDSObj.UmSpikeFired[neuronIndex] == 0*mV):
					testRun.trueNegativeSpikeResults = testRun.trueNegativeSpikeResults + 1
					neuronsWithoutSpikes += 1

				if neuronsWithoutSpikes == dictionaryLongitude:
					testRun.trueNegativeSpikeResults = 1 - testRun.trueNegativeSpikeResults
			correctNeuronFound = False
			#print 'ADDSObj.t',ADDSObj.t,'testRun.firedSpikes', testRun.firedSpikes
			for spikedNeurons in testRun.firedSpikes:
				if len(spikedNeurons) > 1 or spikedNeurons != [None]:
					for spikedNeuronNumber in spikedNeurons:
						if spikedNeuronNumber != None and currentWindow == testRun.assignedSpikeWindows[spikedNeuronNumber]:
							correctNeuronFound = True
			if correctNeuronFound == False:
				testRun.falseNegativeSpikeResults = testRun.falseNegativeSpikeResults + 1
		for neuronIndex in range(dictionaryLongitude):											
			ADDSObj.UmSpikeFired[neuronIndex] = 0*mV

	return ADDSObj.UmSpikeFired, testRun
dataset/ETHPy150Open tartavull/snn-rl/furtherFormulas/testingProcesses.py/evaluateClassifierPerf2/swapped operands of `-`