function spikecounts=spikes_zaehlen(daten,schwelle)
%function spikecounts=spikes_zaehlen(daten,schwelle)
%bekommt als inputs:
%1. eine Matrix daten, bestehend aus intrazellulaeren
%Membranpotentialmessdaten mit Messpunkten eines Versuchsdurchslaufs
%jeweils in einer Zeile,
%2. einen Schwellwert schwelle zum Bestimmen der Spike-Zeitpunkte
%Die Funktion liefert einen Vektor mit den Spikeanzahlen der in jedem 
%Durchlauf gemessenen Aktionspotentiale zurueck.

%Groesse der Datenmatrix:
[zeilen,spalten]=size(daten);

%Relevanten Bereich ohne Artefakt finden:
%Idee die letzten 10ms, bevor die passive Antwort runtergeht, nicht
%mitbetrachten:
mittelspur=mean(daten);       %Mittelung ueber die Antwortspuren
mini=min(mittelspur);
maxi=max(mittelspur);
passchwelle=(mini+maxi)/2
[obenzeiten,obendurchlauf]=find(daten'>passchwelle); %Indizes waehrend passiver Antwort
betrachtung_ende=mean(obenzeiten(end))-100;         %Hier wird das vorwissen reingesteckt, 
                                                     %dass wir eine Samplerate von 10000 Hz
                                                     %haben, und dass das Artefakt in den 
                                                     %letzten 10ms
                                                     %auftritt.



%Schwellueberschreitungen finden:
[zeiten,durchlauf]=find(daten'>schwelle);



%Vektor mit den Indizes der jeweils ersten Schwellueberschreitung
%bestimmen:
spikecounts=zeros(zeilen,1);   %Spaltenvektor zum Zaehlen erzeugen, 
                               %jede Zeile steht fuer einen
                               %Versuchsdurchlauf
                               
%Abfrage, ob es ueberhaupt spikes gab:
if ~isempty(zeiten)  
    %Der erste gefundene Index gehoert auf jeden Fall zu einer ersten
    %Schwellenueberschreitung:
    spikecounts(durchlauf(1))=1;
    
    %Ausnutzen, dass zwischen zwei Spikes etwas Zeit liegen muss:
    for i=2:length(zeiten)
        %Ein Index wird uebernommen, wenn er nicht direkt auf den letzen folgt, 
        %und wenn er nicht innerhalb der letzten 10ms der Antwort lieg.
        if (((zeiten(i)>zeiten(i-1)+1)|(durchlauf(i)>durchlauf(i-1)))&(zeiten(i)<betrachtung_ende))      
            spikecounts(durchlauf(i))=spikecounts(durchlauf(i))+1;
        end
    end
end

%Ausgabe von Mittelwert und Standardabweichung:
sprintf('Es wurden im Mittel %g Spikes erzeugt. Die Standardabweichung betraegt %g Spikes.',mean(spikecounts),std(spikecounts))

    
    
    