Einsicht in Fitfunktionen #107

Closed
opened 2023-07-26 15:20:23 +00:00 by saeckech · 5 comments
Member

Ich würde gerne nachschauen können wie die verschiedenen Fitfunktionen definiert sind. Dann könnte ich, wenn ich eine eigene Funktion (z.B. eine Spektraldichte) schreibe, sicherstellen, dass die Normierung davon zum restlichen BPP passt und die Variablen so benannt sind, dass die Umrechnungen und Auswahlmöglichkeiten (die in der Choice-Liste) funktionieren.
Habe versucht in https://gitea.pkm.physik.tu-darmstadt.de/IPKM/nmreval/src/branch/master/src/nmreval/nmr nachzuschauen, habe aber nach eine halben Stunde aufgegeben das nachzuvollziehen zu versuchen.

Ich würde gerne nachschauen können wie die verschiedenen Fitfunktionen definiert sind. Dann könnte ich, wenn ich eine eigene Funktion (z.B. eine Spektraldichte) schreibe, sicherstellen, dass die Normierung davon zum restlichen BPP passt und die Variablen so benannt sind, dass die Umrechnungen und Auswahlmöglichkeiten (die in der Choice-Liste) funktionieren. Habe versucht in https://gitea.pkm.physik.tu-darmstadt.de/IPKM/nmreval/src/branch/master/src/nmreval/nmr nachzuschauen, habe aber nach eine halben Stunde aufgegeben das nachzuvollziehen zu versuchen.
Member

Die Fitfunktionen befinden sich in der Datei src/nmreval/models/fieldcycling.py.
Spektrale Dichten sind alle so normiert, dass das Integral von 0 bis Unendlich pi/2 ergibt, d.h. Debye hat keinen Faktor 2 im Zähler (Ausnahme zur Normierung könnte FFHS sein, müsste ich nochmal nachschauen...).
Die spektralen Dichten sind bei der entsprechenden Verteilung im Order src/nmreval/distributions.

Die Fitfunktionen befinden sich in der Datei [src/nmreval/models/fieldcycling.py](https://gitea.pkm.physik.tu-darmstadt.de/IPKM/nmreval/src/branch/master/src/nmreval/models/fieldcycling.py). Spektrale Dichten sind alle so normiert, dass das Integral von 0 bis Unendlich pi/2 ergibt, d.h. Debye hat keinen Faktor 2 im Zähler (Ausnahme zur Normierung könnte FFHS sein, müsste ich nochmal nachschauen...). Die spektralen Dichten sind bei der entsprechenden Verteilung im Order [src/nmreval/distributions](https://gitea.pkm.physik.tu-darmstadt.de/IPKM/nmreval/src/branch/master/src/nmreval/distributions).
dominik added the
Type/Fit
label 2023-07-26 16:00:51 +00:00
Author
Member

Ich möchte eine Reihe an (1/T1 vs Freq)-Datensätzen fitten, bei denen die Spektraldichte je nach Temperatur durch ein oder zwei Cole-Davidsons modelliert wird. Als physikalische Bedinung würde ich gerne verwenden, dass u.a. die Summe der beiden Spektraldichten normiert sein muss, sehe aber keine Möglichkeit das mit den vorhandenen Fitfunktionen umzusetzen.

Beim Erstellen von Fitfunktionen haben sich dann folgende Fragen ergeben:
-Wenn ich eine bereits erstellte Funktion abändern oder löschen möchte, geht das innerhalb des Auswerteprogramms / wo finde ich den Code dafür?
-Wie funktioniert in der 'Create fit function' Maske das Verwenden der 'Available Functions'?
(-Gibt es einen klügeren Weg um zweistufige Spektraldichten zu fitten?)

Ich möchte eine Reihe an (1/T1 vs Freq)-Datensätzen fitten, bei denen die Spektraldichte je nach Temperatur durch ein oder zwei Cole-Davidsons modelliert wird. Als physikalische Bedinung würde ich gerne verwenden, dass u.a. die Summe der beiden Spektraldichten normiert sein muss, sehe aber keine Möglichkeit das mit den vorhandenen Fitfunktionen umzusetzen. Beim Erstellen von Fitfunktionen haben sich dann folgende Fragen ergeben: -Wenn ich eine bereits erstellte Funktion abändern oder löschen möchte, geht das innerhalb des Auswerteprogramms / wo finde ich den Code dafür? -Wie funktioniert in der 'Create fit function' Maske das Verwenden der 'Available Functions'? (-Gibt es einen klügeren Weg um zweistufige Spektraldichten zu fitten?)
Member

Wenn ich eine bereits erstellte Funktion abändern oder löschen möchte, geht das innerhalb des Auswerteprogramms / wo finde ich den Code dafür?

Die Datei für benutzerdefinierte Funktionen findest du in ~/.auswerten/usermodels.py, innerhalb des Programms kannst du darauf auch über Fit/Function Editor zugreifen.
Neue Fitfunktionen werden dir nach dem Abspeichern angezeigt, wenn du Änderungen an bestehenden Funktionen, werden die für Anwendungen, die danach kommen, übernommen.

Wie funktioniert in der 'Create fit function' Maske das Verwenden der 'Available Functions'?

Setz den Cursor in func an die Stelle, wo die Funktion auftauschen soll und doppelklick auf die Funktion in der Tabelle, ist der Cursor an einer anderen Position außerhalb von func, wird nur der Import durchgeführt.
In Create fit function gibt es einen bug, was optionale Argumente betrifft, den muss ich noch korrigieren

(-Gibt es einen klügeren Weg um zweistufige Spektraldichten zu fitten?)

Wenn ich dich richtig verstanden habe, willst du eine Amplitude, die du notfalls festhalten kannst und dafür relative Anteile:

from nmreval.models.fieldcycling import ColeDavidsonFC

class ColeDavidsonRelative:
    name = 'Name of function'
    type = 'User-defined'
    equation = 'Amp*R*CD_1(\\omega, \\tau_{1}, \\gamma_{1}) + Amp*(1-R=*CD_1(\\omega, \\tau_{2}, \\gamma_{2})'
    params = ['Amp.', '\\tau_{1}', '\\gamma_{1}', '\\tau_{2}', '\\gamma_{2}', 'R']
    bounds = [(0.0, None), (0.0, None), (0.0, 1.0), (0.0, None), (0.0, 1.0), (0.0, 1.0)]
    choices = ('x axis', 'xaxis', {'Frequency': 'freq', 'Omega': 'omega'}), ('y axis', 'yaxis', {'omega/T_1': 'chi', '1/T_1': 'rate', 'T_1': 'time'})

    @staticmethod
    def func(x, a, tau1, gamma1, tau2, gamma2, r, xaxis='freq', yaxis='chi'):
        # two Cole-Davidson with relative weights and common amplitude
        CD_1 = ColeDavidsonFC.func(x, a, tau1, gamma1, xaxis=xaxis, yaxis=yaxis)
        CD_2 = ColeDavidsonFC.func(x, a, tau2, gamma2, xaxis=xaxis, yaxis=yaxis)      

        return r*CD_1 + (1-r)*CD_2

Das bringt aber nur mit fester Amplitude einen Mehrwert gegenüber der Summe von zwei Cole-Davidson, bei freier Amplitude ist das ja äquivalent.

> Wenn ich eine bereits erstellte Funktion abändern oder löschen möchte, geht das innerhalb des Auswerteprogramms / wo finde ich den Code dafür? Die Datei für benutzerdefinierte Funktionen findest du in ~/.auswerten/usermodels.py, innerhalb des Programms kannst du darauf auch über Fit/Function Editor zugreifen. Neue Fitfunktionen werden dir nach dem Abspeichern angezeigt, wenn du Änderungen an bestehenden Funktionen, werden die für Anwendungen, die danach kommen, übernommen. > Wie funktioniert in der 'Create fit function' Maske das Verwenden der 'Available Functions'? Setz den Cursor in func an die Stelle, wo die Funktion auftauschen soll und doppelklick auf die Funktion in der Tabelle, ist der Cursor an einer anderen Position außerhalb von func, wird nur der Import durchgeführt. In _Create fit function_ gibt es einen bug, was optionale Argumente betrifft, den muss ich noch korrigieren > (-Gibt es einen klügeren Weg um zweistufige Spektraldichten zu fitten?) Wenn ich dich richtig verstanden habe, willst du eine Amplitude, die du notfalls festhalten kannst und dafür relative Anteile: ``` from nmreval.models.fieldcycling import ColeDavidsonFC class ColeDavidsonRelative: name = 'Name of function' type = 'User-defined' equation = 'Amp*R*CD_1(\\omega, \\tau_{1}, \\gamma_{1}) + Amp*(1-R=*CD_1(\\omega, \\tau_{2}, \\gamma_{2})' params = ['Amp.', '\\tau_{1}', '\\gamma_{1}', '\\tau_{2}', '\\gamma_{2}', 'R'] bounds = [(0.0, None), (0.0, None), (0.0, 1.0), (0.0, None), (0.0, 1.0), (0.0, 1.0)] choices = ('x axis', 'xaxis', {'Frequency': 'freq', 'Omega': 'omega'}), ('y axis', 'yaxis', {'omega/T_1': 'chi', '1/T_1': 'rate', 'T_1': 'time'}) @staticmethod def func(x, a, tau1, gamma1, tau2, gamma2, r, xaxis='freq', yaxis='chi'): # two Cole-Davidson with relative weights and common amplitude CD_1 = ColeDavidsonFC.func(x, a, tau1, gamma1, xaxis=xaxis, yaxis=yaxis) CD_2 = ColeDavidsonFC.func(x, a, tau2, gamma2, xaxis=xaxis, yaxis=yaxis) return r*CD_1 + (1-r)*CD_2 ``` Das bringt aber nur mit fester Amplitude einen Mehrwert gegenüber der Summe von zwei Cole-Davidson, bei freier Amplitude ist das ja äquivalent.
Author
Member

Prima, die Funktion macht genau das was ich mir gewünscht habe :)

Habe auch meine verpfuschten Fitfunktionen finden und löschen können.

Prima, die Funktion macht genau das was ich mir gewünscht habe :) Habe auch meine verpfuschten Fitfunktionen finden und löschen können.
Author
Member

Fun Fact: wenn man eine Funktion mit ungültigem Klassennamen erstellt, wie z.B.
class Cole-DavidsonRelative
(man beachte das Minus) startet das Auswerteprogramm nicht mehr.

Fun Fact: wenn man eine Funktion mit ungültigem Klassennamen erstellt, wie z.B. `class Cole-DavidsonRelative` (man beachte das Minus) startet das Auswerteprogramm nicht mehr.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: IPKM/nmreval#107
No description provided.