Wave:AnalysisFactory

From BlueM
Jump to: navigation, search

Wave.png Wave | Code | Bugs | SVN

Anleitung zur Erstellung einer neuen Analysefunktion

Monatsauswertung
Doppelsummenanalyse

Um eine neue Analysefunktion in Wave einzubauen, muss man lediglich

  1. Die neue Analysefunktion in der AnalysisFactory bekannt machen
  2. Eine neue Analysefunktionsklasse schreiben, die von der Klasse Analysis erbt

Die neue Analysefunktion wird automatisch ins Benutzerinterface integriert.

1. Neue Analysefunktion in AnalysisFactory bekannt machen:

Datei Analysis\AnalysisFactory.vb an 2 Stellen ergänzen:
(die beiden Stellen sind mit <------------ gekennzeichnet)

''' <summary>
''' Fabrik zum Erzeugen von Analyse-Objekten
''' </summary>
Module AnalysisFactory
 
    ''' <summary>
    ''' Liste der Analysefunktionen
    ''' </summary>
    Public Enum AnalysisFunctions
        Monatsauswertung = 1
        Doppelsummenalyse = 2
        MeineAnalyseFunktion = 3 '<------------ Hier die Analysefunktion benennen und eine freie Nummer vergeben
    End Enum
 
    ''' <summary>
    ''' Fabrikmethode zur Erzeugung eines Analyse-Objekts
    ''' </summary>
    ''' <param name="analysisfunction">Typ des zu erzeugenden Analyse-Objekts</param>
    ''' <param name="zeitreihen">Collection von zu analysierenden Zeitreihen</param>
    ''' <returns>Das Analyse-Objekt</returns>
    Public Function CreateAnalysis(ByVal analysisfunction As AnalysisFunctions, zeitreihen As List(Of Zeitreihe)) As Analysis
 
        Dim oAnalysis As Analysis
 
        Select Case analysisfunction
 
            Case AnalysisFunctions.Monatsauswertung
                oAnalysis = New Monatsauswertung(zeitreihen)
 
            Case AnalysisFunctions.Doppelsummenalyse
                oAnalysis = New Doppelsummenanalyse(zeitreihen)
 
            Case AnalysisFunctions.MeineAnalyseFunktion             '<------------ Fallunterscheidung zur Instanzierung der neuen Analysefunktion ergänzen
                oAnalysis = New MeineAnalyseFunktion (zeitreihen)
 
            Case Else
                Throw New Exception("Analysefunktion nicht gefunden!")
 
        End Select
 
        Return oAnalysis
 
    End Function
 
End Module
 

2. Neue Analysefunktionsklasse erstellen:

Die neue Analysefunktionsklasse muss von der Klasse Analysis erben. Sie kriegt eine Collection von Zeitreihen und kann als Ergebnis wahlweise Text, ein Array von Werten, und ein Diagramm zurückgeben.

Beispiel Analysis\MeineAnalyseFunktion.vb:

''' <summary>
''' MeineAnalyseFunktion analysiert Zeitreihen
''' </summary>
''' <remarks>http://130.83.196.154/BlueM/wiki/index.php/Wave:MeineAnalyseFunktion</remarks>
Public Class MeineAnalyseFunktion
    Inherits Analysis
 
    ''' <summary>
    ''' Flag, der anzeigt, ob die Analysefunktion einen Ergebnistext erzeugt
    ''' </summary>
    Public Overrides ReadOnly Property hasResultText() As Boolean
        Get
            Return True/False
        End Get
    End Property
 
    ''' <summary>
    ''' Flag, der anzeigt, ob die Analysefunktion Ergebniswerte erzeugt
    ''' </summary>
    Public Overrides ReadOnly Property hasResultValues() As Boolean
        Get
            Return True/False
        End Get
    End Property
 
    ''' <summary>
    ''' Flag, der anzeigt, ob die Analysefunktion ein Ergebnisdiagramm erzeugt
    ''' </summary>
    Public Overrides ReadOnly Property hasResultChart() As Boolean
        Get
            Return True/False
        End Get
    End Property
 
    ''' <summary>
    ''' Konstruktor
    ''' </summary>
    ''' <param name="zeitreihen">zu analysierende Zeitreihen</param>
    Public Sub New(ByRef zeitreihen As List(Of Zeitreihe))
 
        'Konstruktor der Basisklasse aufrufen!
        Call MyBase.New(zeitreihen)
 
        'Prüfung: Anzahl erwarteter Zeitreihen (in diesem Beispiel genau 2)
        If (zeitreihen.Count <> 2) Then
            Throw New Exception("Für MeineAnalyseFunktion müssen genau 2 Zeitreihen ausgewählt werden!")
        End If
 
    End Sub
 
    ''' <summary>
    ''' Analyse durchführen
    ''' </summary>
    Public Overrides Sub ProcessAnalysis()
 
       'Hier die Analyse durchführen
 
       'Auf die zu analysierenden Zeitreihen kann so zugegriffen werden:
       Dim zre1 As Zeitreihe = Me.mZeitreihen.Item(0)
       Dim zre2 As Zeitreihe = Me.mZeitreihen.Item(1)
 
       'Vor der Analyse ggf. Stützstellen mit NaN- und Infinity-Werte aus den Zeitreihen entfernen!
       zre1 = zre1.getCleanZRE()
       zre2 = zre2.getCleanZRE()
 
    End Sub
 
    ''' <summary>
    ''' Ergebnisse aufbereiten
    ''' </summary>
    Public Overrides Sub PrepareResults()
 
        'Hier je nach Bedarf die verschiedenen Ergebnistypen aufbereiten
 
        'Ergebnistext
        Me.mResultText = "Mein Ergebnis"
 
        'Ergebniswerte
        Me.mResultValues.Add("ErgebnisWert1", 10)
        Me.mResultValues.Add("ErgebnisWert2", 5)
 
        'Ergebnisdiagramm
        Me.mResultChart = New Steema.TeeChart.Chart()
        '...Diagramm einrichten...
 
    End Sub
 
End Class
 
Stand: r178 (v1.2)
Personal tools
Help
Developer tools