#include "TFitParametersDialog.h"
#include "TF1.h"
#include "TGButton.h"
#include "TGFrame.h"
#include "TGLabel.h"
#include "TGLayout.h"
#include "TGTextEntry.h"
#include "TGMsgBox.h"
#include "TGNumberEntry.h"
#include "TGTripleSlider.h"
#include "TVirtualPad.h"
#include <limits>
enum EParametersDialogWid {
kNAME,
kFIX = 10,
kBND = 20,
kVAL = 30,
kMIN = 40,
kMAX = 50,
kSLD = 60,
kSTP = 70,
kERR = 80,
kUPDATE = 8888,
kRESET,
kAPPLY,
kOK,
kCANCEL
};
const Double_t kUnlimit = std::numeric_limits<double>::max();
ClassImp(TFitParametersDialog)
TFitParametersDialog::TFitParametersDialog(const TGWindow *p,
const TGWindow *main,
TF1 *func,
TVirtualPad *pad,
Int_t *ret_code) :
TGTransientFrame(p, main, 10, 10, kVerticalFrame),
fFunc (func),
fFpad (pad),
fHasChanges (kFALSE),
fImmediateDraw (kTRUE),
fRetCode (ret_code)
{
SetCleanup(kDeepCleanup);
fFunc->GetRange(fRangexmin, fRangexmax);
fNP = fFunc->GetNpar();
fPmin = new Double_t[fNP];
fPmax = new Double_t[fNP];
fPval = new Double_t[fNP];
fPerr = new Double_t[fNP];
fPstp = new Double_t[fNP];
for (Int_t i = 0; i < fNP; i++) {
fFunc->GetParLimits(i, fPmin[i], fPmax[i]);
fPval[i] = fFunc->GetParameter(i);
fPerr[i] = fFunc->GetParError(i);
if (TMath::Abs(fPval[i]) > 1E-16)
fPstp[i] = 0.3*TMath::Abs(fPval[i]);
else
fPstp[i] = 0.1;
}
fParNam = new TGTextEntry*[fNP];
fParFix = new TGCheckButton*[fNP];
fParBnd = new TGCheckButton*[fNP];
fParVal = new TGNumberEntry*[fNP];
fParMin = new TGNumberEntryField*[fNP];
fParMax = new TGNumberEntryField*[fNP];
fParSld = new TGTripleHSlider*[fNP];
fParStp = new TGNumberEntry*[fNP];
fParErr = new TGNumberEntryField*[fNP];
memset(fParNam, 0, sizeof(TGTextEntry*)*fNP);
memset(fParFix, 0, sizeof(TGCheckButton*)*fNP);
memset(fParBnd, 0, sizeof(TGCheckButton*)*fNP);
memset(fParVal, 0, sizeof(TGNumberEntry*)*fNP);
memset(fParMin, 0, sizeof(TGNumberEntryField*)*fNP);
memset(fParMax, 0, sizeof(TGNumberEntryField*)*fNP);
memset(fParSld, 0, sizeof(TGTripleHSlider*)*fNP);
memset(fParStp, 0, sizeof(TGNumberEntry*)*fNP);
memset(fParErr, 0, sizeof(TGNumberEntryField*)*fNP);
TGCompositeFrame *f1 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
AddFrame(f1, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
fContNam = new TGCompositeFrame(f1, 80, 20, kVerticalFrame | kFixedWidth);
fContNam->AddFrame(new TGLabel(fContNam,"Name"),
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParNam[i] = new TGTextEntry(fContNam, new TGTextBuffer(80), kNAME+i);
fParNam[i]->SetText(Form("%s", fFunc->GetParName(i)));
fParNam[i]->SetEnabled(kFALSE);
fContNam->AddFrame(fParNam[i],
new TGLayoutHints(kLHintsExpandX, 2, 2, 7, 5));
}
f1->AddFrame(fContNam, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
fContFix = new TGCompositeFrame(f1, 20, 20, kVerticalFrame | kFixedWidth);
fContFix->AddFrame(new TGLabel(fContFix,"Fix"),
new TGLayoutHints(kLHintsTop, 2, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParFix[i] = new TGCheckButton(fContFix, "", kFIX*fNP+i);
fParFix[i]->SetToolTipText(Form("Set %s to fixed", fFunc->GetParName(i)));
fContFix->AddFrame(fParFix[i], new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
5, 5, 10, 7));
if ((fPmin[i] == fPmax[i]) && (fPmin[i] || fPmax[i]))
fParFix[i]->SetState(kButtonDown);
else
fParFix[i]->SetState(kButtonUp);
fParFix[i]->Connect("Toggled(Bool_t)", "TFitParametersDialog", this, "DoParFix(Bool_t)");
}
f1->AddFrame(fContFix, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
fContBnd = new TGCompositeFrame(f1, 40, 20, kVerticalFrame | kFixedWidth);
fContBnd->AddFrame(new TGLabel(fContBnd,"Bound"),
new TGLayoutHints(kLHintsTop, 2, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParBnd[i] = new TGCheckButton(fContBnd, "", kBND*fNP+i);
fParBnd[i]->SetToolTipText(Form("Set bound to %s", fFunc->GetParName(i)));
fContBnd->AddFrame(fParBnd[i], new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
15, 5, 10, 7));
fParBnd[i]->Connect("Toggled(Bool_t)", "TFitParametersDialog", this, "DoParBound(Bool_t)");
if ( ((fPmin[i] != fPmax[i]) && (fPmin[i] || fPmax[i])) || (fParMin[i] < fParMax[i]) )
fParBnd[i]->SetState(kButtonDown, kFALSE);
else
fParBnd[i]->SetState(kButtonUp, kFALSE);
}
f1->AddFrame(fContBnd, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
fContVal = new TGCompositeFrame(f1, 100, 20, kVerticalFrame | kFixedWidth);
fContVal->AddFrame(new TGLabel(fContVal,"Value"),
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParVal[i] = new TGNumberEntry(fContVal, 1.2E-12, 15, kVAL*fNP+i,
TGNumberFormat::kNESReal);
fParVal[i]->SetNumber(fPval[i]);
fParVal[i]->SetFormat(TGNumberFormat::kNESReal, TGNumberFormat::kNEAAnyNumber);
fContVal->AddFrame(fParVal[i], new TGLayoutHints(kLHintsExpandX, 2, 2, 7, 5));
(fParVal[i]->GetNumberEntry())->SetToolTipText(Form("%s", fFunc->GetParName(i)));
(fParVal[i]->GetNumberEntry())->Connect("ReturnPressed()", "TFitParametersDialog",
this, "DoParValue()");
fParVal[i]->Connect("ValueSet(Long_t)", "TFitParametersDialog", this, "DoParValue()");
}
f1->AddFrame(fContVal, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
fContMin = new TGCompositeFrame(f1, 100, 20, kVerticalFrame | kFixedWidth);
fContMin->AddFrame(new TGLabel(fContMin,"Min"),
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParMin[i] = new TGNumberEntryField(fContMin, kMIN*fNP+i, 0.0,
TGNumberFormat::kNESReal,
TGNumberFormat::kNEAAnyNumber);
((TGTextEntry*)fParMin[i])->SetToolTipText(Form("Lower limit of %s",
fFunc->GetParName(i)));
fContMin->AddFrame(fParMin[i], new TGLayoutHints(kLHintsExpandX, 2, 2, 7, 5));
fParMin[i]->SetNumber(fPmin[i]);
fParMin[i]->Connect("ReturnPressed()", "TFitParametersDialog", this, "DoParMinLimit()");
}
f1->AddFrame(fContMin, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
fContSld = new TGCompositeFrame(f1, 120, 20, kVerticalFrame | kFixedWidth);
fContSld->AddFrame(new TGLabel(fContSld,"Set Range"),
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParSld[i] = new TGTripleHSlider(fContSld, 100, kDoubleScaleBoth, kSLD*fNP+i,
kHorizontalFrame, GetDefaultFrameBackground(),
kFALSE, kFALSE, kFALSE, kFALSE);
fContSld->AddFrame(fParSld[i], new TGLayoutHints(kLHintsExpandX, 2, 2, 5, 5));
fParSld[i]->SetConstrained(kTRUE);
}
f1->AddFrame(fContSld, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
fContMax = new TGCompositeFrame(f1, 100, 20, kVerticalFrame | kFixedWidth);
fContMax->AddFrame(new TGLabel(fContMax,"Max"),
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParMax[i] = new TGNumberEntryField(fContMax, kMAX*fNP+i, 0.0,
TGNumberFormat::kNESReal,
TGNumberFormat::kNEAAnyNumber);
((TGTextEntry*)fParMax[i])->SetToolTipText(Form("Upper limit of %s",
fFunc->GetParName(i)));
fContMax->AddFrame(fParMax[i], new TGLayoutHints(kLHintsExpandX, 2, 2, 7, 5));
fParMax[i]->SetNumber(fPmax[i]);
fParMax[i]->Connect("ReturnPressed()", "TFitParametersDialog", this, "DoParMaxLimit()");
}
f1->AddFrame(fContMax, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
fContStp = new TGCompositeFrame(f1, 100, 20, kVerticalFrame | kFixedWidth);
fContStp->AddFrame(new TGLabel(fContStp,"Step"),
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParStp[i] = new TGNumberEntry(fContStp, 1.2E-12, 15, kSTP*fNP+i,
TGNumberFormat::kNESReal);
fParStp[i]->SetNumber(fPstp[i]);
fParStp[i]->SetFormat(TGNumberFormat::kNESReal, TGNumberFormat::kNEAAnyNumber);
fContStp->AddFrame(fParStp[i], new TGLayoutHints(kLHintsExpandX, 2, 2, 7, 5));
(fParStp[i]->GetNumberEntry())->SetToolTipText(Form("%s", fFunc->GetParName(i)));
(fParStp[i]->GetNumberEntry())->Connect("ReturnPressed()", "TFitParametersDialog",
this, "DoParStep()");
fParStp[i]->Connect("ValueSet(Long_t)", "TFitParametersDialog", this, "DoParStep()");
}
f1->AddFrame(fContStp, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
fContErr = new TGCompositeFrame(f1, 80, 20, kVerticalFrame | kFixedWidth);
fContErr->AddFrame(new TGLabel(fContErr,"Errors"),
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
for (Int_t i = 0; i < fNP; i++ ) {
fParErr[i] = new TGNumberEntryField(fContErr, kERR*fNP+i, 0.0,
TGNumberFormat::kNESReal,
TGNumberFormat::kNEAAnyNumber);
((TGTextEntry*)fParErr[i])->SetToolTipText(Form("Error of %s",
fFunc->GetParName(i)));
fContErr->AddFrame(fParErr[i], new TGLayoutHints(kLHintsExpandX, 2, 2, 7, 5));
fParErr[i]->SetEnabled(kFALSE);
if (fPerr[i])
fParErr[i]->SetNumber(fPerr[i]);
else
((TGTextEntry *)fParErr[i])->SetText("-");
}
f1->AddFrame(fContErr, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
TGCompositeFrame *f2 = new TGCompositeFrame(this, 270, 20, kHorizontalFrame);
AddFrame(f2, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX));
fUpdate = new TGCheckButton(f2, "&Immediate preview", kUPDATE);
fUpdate->SetToolTipText("Immediate function redrawing");
fUpdate->SetState(kButtonDown);
f2->AddFrame(fUpdate, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 5, 5, 5));
fUpdate->Connect("Toggled(Bool_t)", "TFitParametersDialog", this, "HandleButtons(Bool_t)");
TGCompositeFrame *f3 = new TGCompositeFrame(f2, 270, 20, kHorizontalFrame | kFixedWidth);
f2->AddFrame(f3, new TGLayoutHints(kLHintsRight));
fReset = new TGTextButton(f3, "&Reset", kRESET);
f3->AddFrame(fReset, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,2,2,5,5));
fReset->SetToolTipText("Reset the parameter settings");
fReset->SetState(kButtonDisabled);
fReset->Connect("Clicked()", "TFitParametersDialog", this, "DoReset()");
fApply = new TGTextButton(f3, "&Apply", kAPPLY);
f3->AddFrame(fApply, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,2,2,5,5));
fApply->SetState(kButtonDisabled);
fApply->Connect("Clicked()", "TFitParametersDialog", this, "DoApply()");
fApply->SetToolTipText("Apply parameter settings and redraw the function");
fOK = new TGTextButton(f3, "&OK", kOK);
f3->AddFrame(fOK, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,2,2,5,5));
fOK->SetToolTipText("Apply parameter settings, redraw function and close this dialog");
fOK->Connect("Clicked()", "TFitParametersDialog", this, "DoOK()");
fCancel = new TGTextButton(f3, "&Cancel", kCANCEL);
f3->AddFrame(fCancel, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,2,2,5,5));
fCancel->SetToolTipText("Close this dialog with no parameter changes");
fCancel->Connect("Clicked()", "TFitParametersDialog", this, "DoCancel()");
*fRetCode = kFPDNoneBounded;
MapSubwindows();
Resize(GetDefaultSize());
MapWindow();
CenterOnParent(kFALSE, kBottomLeft);
SetWindowName(Form("Set Parameters of %s", fFunc->GetTitle()));
for (Int_t i = 0; i < fNP; i++ ) {
if (fParFix[i]->GetState() == kButtonDown) {
fParVal[i]->SetState(kFALSE);
fParMin[i]->SetEnabled(kFALSE);
fParMax[i]->SetEnabled(kFALSE);
fParSld[i]->UnmapWindow();
} else {
if (fPmin[i]*fPmax[i] == 0 && fPmin[i] >= fPmax[i]) {
if (!fPval[i]) {
fParMin[i]->SetNumber(-10);
fParMax[i]->SetNumber(10);
} else {
fParMin[i]->SetNumber(-3*TMath::Abs(fPval[i]));
fParMax[i]->SetNumber(3*TMath::Abs(fPval[i]));
}
}
fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
fParSld[i]->Connect("PointerPositionChanged()", "TFitParametersDialog",
this, "DoSlider()");
fParSld[i]->Connect("PositionChanged()", "TFitParametersDialog",
this, "DoSlider()");
}
}
gClient->WaitFor(this);
}
TFitParametersDialog::~TFitParametersDialog()
{
DisconnectSlots();
Cleanup();
delete [] fPval;
delete [] fPmin;
delete [] fPmax;
delete [] fPerr;
delete [] fPstp;
delete [] fParNam;
delete [] fParFix;
delete [] fParBnd;
delete [] fParVal;
delete [] fParMin;
delete [] fParMax;
delete [] fParSld;
delete [] fParStp;
delete [] fParErr;
}
void TFitParametersDialog::CloseWindow()
{
if (fHasChanges) {
Int_t ret;
const char *txt;
txt = "Do you want to apply last parameters' setting?";
new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
"Parameters Have Been Changed", txt, kMBIconExclamation,
kMBYes | kMBNo | kMBCancel, &ret);
if (ret == kMBYes)
SetParameters();
else if (ret == kMBNo)
DoReset();
else return;
}
DisconnectSlots();
DeleteWindow();
}
void TFitParametersDialog::DoCancel()
{
if (fHasChanges)
DoReset();
for (Int_t i = 0; i < fNP; i++ ) {
if (fParBnd[i]->GetState() == kButtonDown)
*fRetCode = kFPDBounded;
}
CloseWindow();
}
void TFitParametersDialog::DoParBound(Bool_t on)
{
TGButton *bt = (TGButton *) gTQSender;
Int_t id = bt->WidgetId();
fHasChanges = kTRUE;
for (Int_t i = 0; i < fNP; i++ ) {
if (id == kBND*fNP+i) {
if (on) {
if (fParMin[i]->GetNumber() >= fParMax[i]->GetNumber()) {
Int_t ret;
const char *txt;
txt = "'Min' value cannot be bigger or equal to 'Max' - set the limits first!";
new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
"Parameter Limits", txt, kMBIconExclamation,kMBOk,&ret);
fParBnd[i]->SetState(kButtonUp, kFALSE);
return;
}
if ((fParVal[i]->GetNumber() < fParMin[i]->GetNumber()) ||
(fParVal[i]->GetNumber() > fParMax[i]->GetNumber())) {
Double_t v = (fParMax[i]->GetNumber()+fParMin[i]->GetNumber())/2.;
fParVal[i]->SetNumber(v);
fFunc->SetParameter(i, v);
fClient->NeedRedraw(fParVal[i]);
}
fParVal[i]->SetLimits(TGNumberFormat::kNELLimitMinMax,
fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
fClient->NeedRedraw(fParVal[i]);
fFunc->SetParLimits(i, fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
} else {
fParVal[i]->SetLimits(TGNumberFormat::kNELNoLimits);
fFunc->ReleaseParameter(i);
fFunc->GetParLimits(i, fPmin[i], fPmax[i]);
fPval[i] = fFunc->GetParameter(i);
if (fPmin[i]*fPmax[i] == 0 && fPmin[i] >= fPmax[i]) {
if (!fPval[i]) {
fParMin[i]->SetNumber(-10);
fParMax[i]->SetNumber(10);
} else {
fParMin[i]->SetNumber(-10*TMath::Abs(fPval[i]));
fParMax[i]->SetNumber(10*TMath::Abs(fPval[i]));
}
}
fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPointerPosition(fPval[i]);
}
}
}
if (fUpdate->GetState() == kButtonDown)
DrawFunction();
else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
fApply->SetState(kButtonUp);
*fRetCode = kFPDBounded;
}
void TFitParametersDialog::DoParStep()
{
}
void TFitParametersDialog::DoParFix(Bool_t on)
{
fReset->SetState(kButtonUp);
TGButton *bt = (TGButton *) gTQSender;
Int_t id = bt->WidgetId();
fHasChanges = kTRUE;
for (Int_t i = 0; i < fNP; i++ ) {
if (id == kFIX*fNP+i) {
if (on) {
fParBnd[i]->Disconnect("Toggled(Bool_t)");
fParBnd[i]->SetEnabled(kFALSE);
fParBnd[i]->SetToolTipText(Form("DISABLED - %s is fixed", fFunc->GetParName(i)));
if (fParVal[i]->GetNumber() != 0) {
fParMin[i]->SetNumber(fParVal[i]->GetNumber());
fParMin[i]->SetEnabled(kFALSE);
fParMax[i]->SetNumber(fParVal[i]->GetNumber());
fParMax[i]->SetEnabled(kFALSE);
} else {
fParMin[i]->SetNumber(1.);
fParMin[i]->SetEnabled(kFALSE);
fParMax[i]->SetNumber(1.);
fParMax[i]->SetEnabled(kFALSE);
}
fParVal[i]->SetState(kFALSE);
fParStp[i]->SetState(kFALSE);
fParSld[i]->Disconnect("PointerPositionChanged()");
fParSld[i]->Disconnect("PositionChanged()");
fParSld[i]->UnmapWindow();
fFunc->FixParameter(i, fParVal[i]->GetNumber());
} else if (!fParMin[i]->IsEnabled()) {
if (fPmin[i] != fPmax[i]) {
if (fPmin[i])
fParMin[i]->SetNumber(fPmin[i]);
else if (fPerr[i])
fParMin[i]->SetNumber(fPval[i]-3*fPerr[i]);
else if (fPval[i])
fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
else
fParMin[i]->SetNumber(1.0);
if (fPmax[i])
fParMax[i]->SetNumber(fPmax[i]);
else if (fPerr[i])
fParMax[i]->SetNumber(fPval[i]+3*fPerr[i]);
else if (fPval[i])
fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
else
fParMax[i]->SetNumber(1.0);
} else if (fPval[i]) {
fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
} else {
fParMin[i]->SetNumber(1.0);
fParMax[i]->SetNumber(1.0);
}
if (fParMax[i]->GetNumber() < fParMin[i]->GetNumber()){
Double_t temp;
temp = fParMax[i]->GetNumber();
fParMax[i]->SetNumber(fParMin[i]->GetNumber());
fParMin[i]->SetNumber(temp);
}
fParBnd[i]->SetEnabled(kTRUE);
fParBnd[i]->Connect("Toggled(Bool_t)", "TFitParametersDialog",
this, "DoParBound(Bool_t)");
fParBnd[i]->SetState(kButtonUp);
fParMax[i]->SetEnabled(kTRUE);
fParMin[i]->SetEnabled(kTRUE);
fParSld[i]->MapWindow();
fParVal[i]->SetState(kTRUE);
fParStp[i]->SetState(kTRUE);
fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPointerPosition(fPval[i]);
fParSld[i]->Connect("PointerPositionChanged()", "TFitParametersDialog",
this, "DoSlider()");
fParSld[i]->Connect("PositionChanged()", "TFitParametersDialog",
this, "DoSlider()");
fFunc->SetParLimits(i, fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
}
}
}
if (fUpdate->GetState() == kButtonDown)
DrawFunction();
else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
fApply->SetState(kButtonUp);
}
void TFitParametersDialog::SetParameters()
{
fFunc->SetRange(fRangexmin, fRangexmax);
for (Int_t i = 0; i < fNP; i++ ) {
if (fParFix[i]->GetState() == kButtonDown) {
fFunc->SetParameter(i, fParVal[i]->GetNumber());
fFunc->FixParameter(i, fParVal[i]->GetNumber());
*fRetCode = kFPDBounded;
} else {
if (fParBnd[i]->GetState() == kButtonDown) {
fFunc->SetParameter(i, fParVal[i]->GetNumber());
fFunc->SetParLimits(i, fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
*fRetCode = kFPDBounded;
} else {
fFunc->ReleaseParameter(i);
}
}
}
}
void TFitParametersDialog::DoOK()
{
if (fHasChanges)
DrawFunction();
SetParameters();
CloseWindow();
}
void TFitParametersDialog::DoApply()
{
DrawFunction();
fApply->SetState(kButtonDisabled);
if (fReset->GetState() == kButtonDisabled)
fReset->SetState(kButtonUp);
}
void TFitParametersDialog::DoReset()
{
fHasChanges = kTRUE;
Int_t k = fNP;
for (Int_t i = 0; i < fNP; i++) {
if (fParVal[i]->GetNumber() == fPval[i])
k--;
else
break;
}
if (!k) {
if (fReset->GetState() == kButtonUp)
fReset->SetState(kButtonDisabled);
fHasChanges = kFALSE;
return;
}
for (Int_t i = 0; i < fNP; i++) {
fFunc->SetParameter(i, fPval[i]);
fFunc->SetParLimits(i, fPmin[i], fPmax[i]);
fFunc->SetParError(i, fPerr[i]);
if (fPmin[i])
fParMin[i]->SetNumber(fPmin[i]);
else if (fPerr[i])
fParMin[i]->SetNumber(fPval[i]-3*fPerr[i]);
else if (fPval[i])
fParMin[i]->SetNumber(-3*TMath::Abs(fPval[i]));
else
fParMin[i]->SetNumber(1.0);
if (fPmax[i])
fParMax[i]->SetNumber(fPmax[i]);
else if (fPerr[i])
fParMax[i]->SetNumber(fPval[i]+3*fPerr[i]);
else if (fPval[i])
fParMax[i]->SetNumber(3*TMath::Abs(fPval[i]));
else
fParMax[i]->SetNumber(1.0);
if (fParMax[i]->GetNumber() < fParMin[i]->GetNumber()){
Double_t temp;
temp = fParMax[i]->GetNumber();
fParMax[i]->SetNumber(fParMin[i]->GetNumber());
fParMin[i]->SetNumber(temp);
}
if (fParMin[i]->GetNumber() == fParMax[i]->GetNumber()) {
fParVal[i]->SetState(kFALSE);
fParMin[i]->SetEnabled(kFALSE);
fParMax[i]->SetEnabled(kFALSE);
fParStp[i]->SetState(kFALSE);
fParSld[i]->Disconnect("PointerPositionChanged()");
fParSld[i]->Disconnect("PositionChanged()");
fParSld[i]->UnmapWindow();
fParBnd[i]->Disconnect("Toggled(Bool_t)");
fParBnd[i]->SetEnabled(kFALSE);
fFunc->FixParameter(i, fParVal[i]->GetNumber());
fParFix[i]->SetState(kButtonDown);
} else {
fParFix[i]->SetState(kButtonUp);
if (!fParMax[i]->IsEnabled()) {
fParMax[i]->SetEnabled(kTRUE);
fParMin[i]->SetEnabled(kTRUE);
fParVal[i]->SetState(kTRUE);
fParStp[i]->SetState(kTRUE);
fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPointerPosition(fPval[i]);
fParSld[i]->MapWindow();
fParSld[i]->Connect("PointerPositionChanged()", "TFitParametersDialog",
this, "DoSlider()");
fParSld[i]->Connect("PositionChanged()", "TFitParametersDialog",
this, "DoSlider()");
fParBnd[i]->SetEnabled(kTRUE);
fParBnd[i]->Connect("Toggled(Bool_t)", "TFitParametersDialog",
this, "DoParBound()");
}
}
fParVal[i]->SetNumber(fPval[i]);
fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
fParSld[i]->SetPointerPosition(fPval[i]);
}
if (fUpdate->GetState() == kButtonDown)
DrawFunction();
else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
fApply->SetState(kButtonUp);
fHasChanges = kFALSE;
*fRetCode = kFPDBounded;
fReset->SetState(kButtonDisabled);
}
void TFitParametersDialog::DoSlider()
{
TGTripleHSlider *sl = (TGTripleHSlider *) gTQSender;
Int_t id = sl->WidgetId();
fHasChanges = kTRUE;
for (Int_t i = 0; i < fNP; i++ ) {
if (id == kSLD*fNP+i) {
fFunc->SetParameter(i,fParSld[i]->GetPointerPosition());
fFunc->SetParLimits(i,fParSld[i]->GetMinPosition(),
fParSld[i]->GetMaxPosition());
fParMin[i]->SetNumber(fParSld[i]->GetMinPosition());
fParMax[i]->SetNumber(fParSld[i]->GetMaxPosition());
fParVal[i]->SetNumber(fParSld[i]->GetPointerPosition());
}
}
if (fUpdate->GetState() == kButtonDown)
DrawFunction();
else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
fApply->SetState(kButtonUp);
if (fReset->GetState() == kButtonDisabled)
fReset->SetState(kButtonUp);
}
void TFitParametersDialog::DoParValue()
{
TGNumberEntry *ne = (TGNumberEntry *) gTQSender;
Int_t id = ne->WidgetId();
for (Int_t i = 0; i < fNP; i++ ) {
if (id == kVAL*fNP+i) {
if (fParVal[i]->GetNumber() < fParMin[i]->GetNumber()) {
Double_t extraIncrement = (fParMax[i]->GetNumber() - fParMin[i]->GetNumber()) / 4;
fParMin[i]->SetNumber(fParVal[i]->GetNumber() - extraIncrement );
fClient->NeedRedraw(fParMin[i]);
fParSld[i]->SetRange(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
}
if (fParVal[i]->GetNumber() > fParMax[i]->GetNumber()) {
Double_t extraIncrement = (fParMax[i]->GetNumber() - fParMin[i]->GetNumber()) / 4;
fParMax[i]->SetNumber(fParVal[i]->GetNumber() + extraIncrement );
fClient->NeedRedraw(fParMax[i]);
fParSld[i]->SetRange(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
}
fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
fClient->NeedRedraw(fParSld[i]);
fFunc->SetParameter(i,fParSld[i]->GetPointerPosition());
if (fParBnd[i]->GetState() == kButtonDown)
fFunc->SetParLimits(i,fParSld[i]->GetMinPosition(),
fParSld[i]->GetMaxPosition());
else
fFunc->ReleaseParameter(i);
}
}
fHasChanges = kTRUE;
if (fUpdate->GetState() == kButtonDown)
DrawFunction();
else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
fApply->SetState(kButtonUp);
if (fReset->GetState() == kButtonDisabled)
fReset->SetState(kButtonUp);
}
void TFitParametersDialog::DoParMinLimit()
{
TGNumberEntryField *ne = (TGNumberEntryField *) gTQSender;
Int_t id = ne->WidgetId();
for (Int_t i = 0; i < fNP; i++ ) {
if (id == kMIN*fNP+i) {
if ((fParMin[i]->GetNumber() >= fParMax[i]->GetNumber()) &&
(fParBnd[i]->GetState() == kButtonDown)) {
Int_t ret;
const char *txt;
txt = "'Min' cannot be bigger then 'Max' if this parameter is bounded.";
new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
"Parameter Limits", txt, kMBIconExclamation, kMBOk, &ret);
fParMin[i]->SetNumber(fParVal[i]->GetNumber()-fParStp[i]->GetNumber());
return;
}
if (fParBnd[i]->GetState() == kButtonDown) {
Double_t val = (fParMax[i]->GetNumber()+fParMin[i]->GetNumber())/2.;
fParVal[i]->SetNumber(val);
fParVal[i]->SetLimitValues(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
}
fParSld[i]->SetRange(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
fClient->NeedRedraw(fParSld[i]);
}
}
fHasChanges = kTRUE;
if (fUpdate->GetState() == kButtonDown)
DrawFunction();
else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
fApply->SetState(kButtonUp);
if (fReset->GetState() == kButtonDisabled)
fReset->SetState(kButtonUp);
}
void TFitParametersDialog::DoParMaxLimit()
{
TGNumberEntryField *ne = (TGNumberEntryField *) gTQSender;
Int_t id = ne->WidgetId();
for (Int_t i = 0; i < fNP; i++ ) {
if (id == kMAX*fNP+i) {
if ((fParMin[i]->GetNumber() >= fParMax[i]->GetNumber()) &&
(fParBnd[i]->GetState() == kButtonDown)) {
Int_t ret;
const char *txt;
txt = "'Min' cannot be bigger then 'Max' if this parameter is bounded.";
new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
"Parameter Limits", txt, kMBIconExclamation, kMBOk, &ret);
fParMax[i]->SetNumber(fParVal[i]->GetNumber()+fParStp[i]->GetNumber());
return;
}
if (fParBnd[i]->GetState() == kButtonDown) {
Double_t val = (fParMax[i]->GetNumber()+(fParMin[i]->GetNumber()))/2.;
fParVal[i]->SetNumber(val);
fParVal[i]->SetLimitValues(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
}
fParSld[i]->SetRange(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
fParMax[i]->GetNumber());
fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
fClient->NeedRedraw(fParSld[i]);
}
}
fHasChanges = kTRUE;
if (fUpdate->GetState() == kButtonDown)
DrawFunction();
else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
fApply->SetState(kButtonUp);
if (fReset->GetState() == kButtonDisabled)
fReset->SetState(kButtonUp);
}
void TFitParametersDialog::DrawFunction()
{
if ( !fFpad ) return;
TVirtualPad *save = 0;
save = gPad;
gPad = fFpad;
gPad->cd();
Style_t st = fFunc->GetLineStyle();
fFunc->SetLineStyle(2);
TString opt = fFunc->GetDrawOption();
opt.ToUpper();
if (!opt.Contains("SAME"))
opt += "SAME";
fFunc->Draw(opt);
gPad->Modified();
gPad->Update();
fHasChanges = kFALSE;
fFunc->SetLineStyle(st);
if (save) gPad = save;
*fRetCode = kFPDBounded;
}
void TFitParametersDialog::HandleButtons(Bool_t update)
{
if (update && fHasChanges)
DrawFunction();
else if ((fApply->GetState() == kButtonDisabled) && fHasChanges) {
fApply->SetState(kButtonUp);
}
}
void TFitParametersDialog::DisconnectSlots()
{
for (Int_t i = 0; i < fNP; i++ ) {
fParFix[i]->Disconnect("Toggled(Bool_t)");
fParBnd[i]->Disconnect("Toggled(Bool_t)");
fParVal[i]->Disconnect("ValueSet(Long_t)");
fParMin[i]->Disconnect("ReturnPressed()");
fParMax[i]->Disconnect("ReturnPressed()");
fParSld[i]->Disconnect("PointerPositionChanged()");
fParSld[i]->Disconnect("PositionChanged()");
fParStp[i]->Disconnect("ValueSet(Long_t)");
}
fUpdate->Disconnect("Toggled(Bool_t)");
fReset->Disconnect("Clicked()");
fApply->Disconnect("Clicked()");
fOK->Disconnect("Clicked()");
fCancel->Disconnect("Clicked()");
}
TFitParametersDialog.cxx:1 TFitParametersDialog.cxx:2 TFitParametersDialog.cxx:3 TFitParametersDialog.cxx:4 TFitParametersDialog.cxx:5 TFitParametersDialog.cxx:6 TFitParametersDialog.cxx:7 TFitParametersDialog.cxx:8 TFitParametersDialog.cxx:9 TFitParametersDialog.cxx:10 TFitParametersDialog.cxx:11 TFitParametersDialog.cxx:12 TFitParametersDialog.cxx:13 TFitParametersDialog.cxx:14 TFitParametersDialog.cxx:15 TFitParametersDialog.cxx:16 TFitParametersDialog.cxx:17 TFitParametersDialog.cxx:18 TFitParametersDialog.cxx:19 TFitParametersDialog.cxx:20 TFitParametersDialog.cxx:21 TFitParametersDialog.cxx:22 TFitParametersDialog.cxx:23 TFitParametersDialog.cxx:24 TFitParametersDialog.cxx:25 TFitParametersDialog.cxx:26 TFitParametersDialog.cxx:27 TFitParametersDialog.cxx:28 TFitParametersDialog.cxx:29 TFitParametersDialog.cxx:30 TFitParametersDialog.cxx:31 TFitParametersDialog.cxx:32 TFitParametersDialog.cxx:33 TFitParametersDialog.cxx:34 TFitParametersDialog.cxx:35 TFitParametersDialog.cxx:36 TFitParametersDialog.cxx:37 TFitParametersDialog.cxx:38 TFitParametersDialog.cxx:39 TFitParametersDialog.cxx:40 TFitParametersDialog.cxx:41 TFitParametersDialog.cxx:42 TFitParametersDialog.cxx:43 TFitParametersDialog.cxx:44 TFitParametersDialog.cxx:45 TFitParametersDialog.cxx:46 TFitParametersDialog.cxx:47 TFitParametersDialog.cxx:48 TFitParametersDialog.cxx:49 TFitParametersDialog.cxx:50 TFitParametersDialog.cxx:51 TFitParametersDialog.cxx:52 TFitParametersDialog.cxx:53 TFitParametersDialog.cxx:54 TFitParametersDialog.cxx:55 TFitParametersDialog.cxx:56 TFitParametersDialog.cxx:57 TFitParametersDialog.cxx:58 TFitParametersDialog.cxx:59 TFitParametersDialog.cxx:60 TFitParametersDialog.cxx:61 TFitParametersDialog.cxx:62 TFitParametersDialog.cxx:63 TFitParametersDialog.cxx:64 TFitParametersDialog.cxx:65 TFitParametersDialog.cxx:66 TFitParametersDialog.cxx:67 TFitParametersDialog.cxx:68 TFitParametersDialog.cxx:69 TFitParametersDialog.cxx:70 TFitParametersDialog.cxx:71 TFitParametersDialog.cxx:72 TFitParametersDialog.cxx:73 TFitParametersDialog.cxx:74 TFitParametersDialog.cxx:75 TFitParametersDialog.cxx:76 TFitParametersDialog.cxx:77 TFitParametersDialog.cxx:78 TFitParametersDialog.cxx:79 TFitParametersDialog.cxx:80 TFitParametersDialog.cxx:81 TFitParametersDialog.cxx:82 TFitParametersDialog.cxx:83 TFitParametersDialog.cxx:84 TFitParametersDialog.cxx:85 TFitParametersDialog.cxx:86 TFitParametersDialog.cxx:87 TFitParametersDialog.cxx:88 TFitParametersDialog.cxx:89 TFitParametersDialog.cxx:90 TFitParametersDialog.cxx:91 TFitParametersDialog.cxx:92 TFitParametersDialog.cxx:93 TFitParametersDialog.cxx:94 TFitParametersDialog.cxx:95 TFitParametersDialog.cxx:96 TFitParametersDialog.cxx:97 TFitParametersDialog.cxx:98 TFitParametersDialog.cxx:99 TFitParametersDialog.cxx:100 TFitParametersDialog.cxx:101 TFitParametersDialog.cxx:102 TFitParametersDialog.cxx:103 TFitParametersDialog.cxx:104 TFitParametersDialog.cxx:105 TFitParametersDialog.cxx:106 TFitParametersDialog.cxx:107 TFitParametersDialog.cxx:108 TFitParametersDialog.cxx:109 TFitParametersDialog.cxx:110 TFitParametersDialog.cxx:111 TFitParametersDialog.cxx:112 TFitParametersDialog.cxx:113 TFitParametersDialog.cxx:114 TFitParametersDialog.cxx:115 TFitParametersDialog.cxx:116 TFitParametersDialog.cxx:117 TFitParametersDialog.cxx:118 TFitParametersDialog.cxx:119 TFitParametersDialog.cxx:120 TFitParametersDialog.cxx:121 TFitParametersDialog.cxx:122 TFitParametersDialog.cxx:123 TFitParametersDialog.cxx:124 TFitParametersDialog.cxx:125 TFitParametersDialog.cxx:126 TFitParametersDialog.cxx:127 TFitParametersDialog.cxx:128 TFitParametersDialog.cxx:129 TFitParametersDialog.cxx:130 TFitParametersDialog.cxx:131 TFitParametersDialog.cxx:132 TFitParametersDialog.cxx:133 TFitParametersDialog.cxx:134 TFitParametersDialog.cxx:135 TFitParametersDialog.cxx:136 TFitParametersDialog.cxx:137 TFitParametersDialog.cxx:138 TFitParametersDialog.cxx:139 TFitParametersDialog.cxx:140 TFitParametersDialog.cxx:141 TFitParametersDialog.cxx:142 TFitParametersDialog.cxx:143 TFitParametersDialog.cxx:144 TFitParametersDialog.cxx:145 TFitParametersDialog.cxx:146 TFitParametersDialog.cxx:147 TFitParametersDialog.cxx:148 TFitParametersDialog.cxx:149 TFitParametersDialog.cxx:150 TFitParametersDialog.cxx:151 TFitParametersDialog.cxx:152 TFitParametersDialog.cxx:153 TFitParametersDialog.cxx:154 TFitParametersDialog.cxx:155 TFitParametersDialog.cxx:156 TFitParametersDialog.cxx:157 TFitParametersDialog.cxx:158 TFitParametersDialog.cxx:159 TFitParametersDialog.cxx:160 TFitParametersDialog.cxx:161 TFitParametersDialog.cxx:162 TFitParametersDialog.cxx:163 TFitParametersDialog.cxx:164 TFitParametersDialog.cxx:165 TFitParametersDialog.cxx:166 TFitParametersDialog.cxx:167 TFitParametersDialog.cxx:168 TFitParametersDialog.cxx:169 TFitParametersDialog.cxx:170 TFitParametersDialog.cxx:171 TFitParametersDialog.cxx:172 TFitParametersDialog.cxx:173 TFitParametersDialog.cxx:174 TFitParametersDialog.cxx:175 TFitParametersDialog.cxx:176 TFitParametersDialog.cxx:177 TFitParametersDialog.cxx:178 TFitParametersDialog.cxx:179 TFitParametersDialog.cxx:180 TFitParametersDialog.cxx:181 TFitParametersDialog.cxx:182 TFitParametersDialog.cxx:183 TFitParametersDialog.cxx:184 TFitParametersDialog.cxx:185 TFitParametersDialog.cxx:186 TFitParametersDialog.cxx:187 TFitParametersDialog.cxx:188 TFitParametersDialog.cxx:189 TFitParametersDialog.cxx:190 TFitParametersDialog.cxx:191 TFitParametersDialog.cxx:192 TFitParametersDialog.cxx:193 TFitParametersDialog.cxx:194 TFitParametersDialog.cxx:195 TFitParametersDialog.cxx:196 TFitParametersDialog.cxx:197 TFitParametersDialog.cxx:198 TFitParametersDialog.cxx:199 TFitParametersDialog.cxx:200 TFitParametersDialog.cxx:201 TFitParametersDialog.cxx:202 TFitParametersDialog.cxx:203 TFitParametersDialog.cxx:204 TFitParametersDialog.cxx:205 TFitParametersDialog.cxx:206 TFitParametersDialog.cxx:207 TFitParametersDialog.cxx:208 TFitParametersDialog.cxx:209 TFitParametersDialog.cxx:210 TFitParametersDialog.cxx:211 TFitParametersDialog.cxx:212 TFitParametersDialog.cxx:213 TFitParametersDialog.cxx:214 TFitParametersDialog.cxx:215 TFitParametersDialog.cxx:216 TFitParametersDialog.cxx:217 TFitParametersDialog.cxx:218 TFitParametersDialog.cxx:219 TFitParametersDialog.cxx:220 TFitParametersDialog.cxx:221 TFitParametersDialog.cxx:222 TFitParametersDialog.cxx:223 TFitParametersDialog.cxx:224 TFitParametersDialog.cxx:225 TFitParametersDialog.cxx:226 TFitParametersDialog.cxx:227 TFitParametersDialog.cxx:228 TFitParametersDialog.cxx:229 TFitParametersDialog.cxx:230 TFitParametersDialog.cxx:231 TFitParametersDialog.cxx:232 TFitParametersDialog.cxx:233 TFitParametersDialog.cxx:234 TFitParametersDialog.cxx:235 TFitParametersDialog.cxx:236 TFitParametersDialog.cxx:237 TFitParametersDialog.cxx:238 TFitParametersDialog.cxx:239 TFitParametersDialog.cxx:240 TFitParametersDialog.cxx:241 TFitParametersDialog.cxx:242 TFitParametersDialog.cxx:243 TFitParametersDialog.cxx:244 TFitParametersDialog.cxx:245 TFitParametersDialog.cxx:246 TFitParametersDialog.cxx:247 TFitParametersDialog.cxx:248 TFitParametersDialog.cxx:249 TFitParametersDialog.cxx:250 TFitParametersDialog.cxx:251 TFitParametersDialog.cxx:252 TFitParametersDialog.cxx:253 TFitParametersDialog.cxx:254 TFitParametersDialog.cxx:255 TFitParametersDialog.cxx:256 TFitParametersDialog.cxx:257 TFitParametersDialog.cxx:258 TFitParametersDialog.cxx:259 TFitParametersDialog.cxx:260 TFitParametersDialog.cxx:261 TFitParametersDialog.cxx:262 TFitParametersDialog.cxx:263 TFitParametersDialog.cxx:264 TFitParametersDialog.cxx:265 TFitParametersDialog.cxx:266 TFitParametersDialog.cxx:267 TFitParametersDialog.cxx:268 TFitParametersDialog.cxx:269 TFitParametersDialog.cxx:270 TFitParametersDialog.cxx:271 TFitParametersDialog.cxx:272 TFitParametersDialog.cxx:273 TFitParametersDialog.cxx:274 TFitParametersDialog.cxx:275 TFitParametersDialog.cxx:276 TFitParametersDialog.cxx:277 TFitParametersDialog.cxx:278 TFitParametersDialog.cxx:279 TFitParametersDialog.cxx:280 TFitParametersDialog.cxx:281 TFitParametersDialog.cxx:282 TFitParametersDialog.cxx:283 TFitParametersDialog.cxx:284 TFitParametersDialog.cxx:285 TFitParametersDialog.cxx:286 TFitParametersDialog.cxx:287 TFitParametersDialog.cxx:288 TFitParametersDialog.cxx:289 TFitParametersDialog.cxx:290 TFitParametersDialog.cxx:291 TFitParametersDialog.cxx:292 TFitParametersDialog.cxx:293 TFitParametersDialog.cxx:294 TFitParametersDialog.cxx:295 TFitParametersDialog.cxx:296 TFitParametersDialog.cxx:297 TFitParametersDialog.cxx:298 TFitParametersDialog.cxx:299 TFitParametersDialog.cxx:300 TFitParametersDialog.cxx:301 TFitParametersDialog.cxx:302 TFitParametersDialog.cxx:303 TFitParametersDialog.cxx:304 TFitParametersDialog.cxx:305 TFitParametersDialog.cxx:306 TFitParametersDialog.cxx:307 TFitParametersDialog.cxx:308 TFitParametersDialog.cxx:309 TFitParametersDialog.cxx:310 TFitParametersDialog.cxx:311 TFitParametersDialog.cxx:312 TFitParametersDialog.cxx:313 TFitParametersDialog.cxx:314 TFitParametersDialog.cxx:315 TFitParametersDialog.cxx:316 TFitParametersDialog.cxx:317 TFitParametersDialog.cxx:318 TFitParametersDialog.cxx:319 TFitParametersDialog.cxx:320 TFitParametersDialog.cxx:321 TFitParametersDialog.cxx:322 TFitParametersDialog.cxx:323 TFitParametersDialog.cxx:324 TFitParametersDialog.cxx:325 TFitParametersDialog.cxx:326 TFitParametersDialog.cxx:327 TFitParametersDialog.cxx:328 TFitParametersDialog.cxx:329 TFitParametersDialog.cxx:330 TFitParametersDialog.cxx:331 TFitParametersDialog.cxx:332 TFitParametersDialog.cxx:333 TFitParametersDialog.cxx:334 TFitParametersDialog.cxx:335 TFitParametersDialog.cxx:336 TFitParametersDialog.cxx:337 TFitParametersDialog.cxx:338 TFitParametersDialog.cxx:339 TFitParametersDialog.cxx:340 TFitParametersDialog.cxx:341 TFitParametersDialog.cxx:342 TFitParametersDialog.cxx:343 TFitParametersDialog.cxx:344 TFitParametersDialog.cxx:345 TFitParametersDialog.cxx:346 TFitParametersDialog.cxx:347 TFitParametersDialog.cxx:348 TFitParametersDialog.cxx:349 TFitParametersDialog.cxx:350 TFitParametersDialog.cxx:351 TFitParametersDialog.cxx:352 TFitParametersDialog.cxx:353 TFitParametersDialog.cxx:354 TFitParametersDialog.cxx:355 TFitParametersDialog.cxx:356 TFitParametersDialog.cxx:357 TFitParametersDialog.cxx:358 TFitParametersDialog.cxx:359 TFitParametersDialog.cxx:360 TFitParametersDialog.cxx:361 TFitParametersDialog.cxx:362 TFitParametersDialog.cxx:363 TFitParametersDialog.cxx:364 TFitParametersDialog.cxx:365 TFitParametersDialog.cxx:366 TFitParametersDialog.cxx:367 TFitParametersDialog.cxx:368 TFitParametersDialog.cxx:369 TFitParametersDialog.cxx:370 TFitParametersDialog.cxx:371 TFitParametersDialog.cxx:372 TFitParametersDialog.cxx:373 TFitParametersDialog.cxx:374 TFitParametersDialog.cxx:375 TFitParametersDialog.cxx:376 TFitParametersDialog.cxx:377 TFitParametersDialog.cxx:378 TFitParametersDialog.cxx:379 TFitParametersDialog.cxx:380 TFitParametersDialog.cxx:381 TFitParametersDialog.cxx:382 TFitParametersDialog.cxx:383 TFitParametersDialog.cxx:384 TFitParametersDialog.cxx:385 TFitParametersDialog.cxx:386 TFitParametersDialog.cxx:387 TFitParametersDialog.cxx:388 TFitParametersDialog.cxx:389 TFitParametersDialog.cxx:390 TFitParametersDialog.cxx:391 TFitParametersDialog.cxx:392 TFitParametersDialog.cxx:393 TFitParametersDialog.cxx:394 TFitParametersDialog.cxx:395 TFitParametersDialog.cxx:396 TFitParametersDialog.cxx:397 TFitParametersDialog.cxx:398 TFitParametersDialog.cxx:399 TFitParametersDialog.cxx:400 TFitParametersDialog.cxx:401 TFitParametersDialog.cxx:402 TFitParametersDialog.cxx:403 TFitParametersDialog.cxx:404 TFitParametersDialog.cxx:405 TFitParametersDialog.cxx:406 TFitParametersDialog.cxx:407 TFitParametersDialog.cxx:408 TFitParametersDialog.cxx:409 TFitParametersDialog.cxx:410 TFitParametersDialog.cxx:411 TFitParametersDialog.cxx:412 TFitParametersDialog.cxx:413 TFitParametersDialog.cxx:414 TFitParametersDialog.cxx:415 TFitParametersDialog.cxx:416 TFitParametersDialog.cxx:417 TFitParametersDialog.cxx:418 TFitParametersDialog.cxx:419 TFitParametersDialog.cxx:420 TFitParametersDialog.cxx:421 TFitParametersDialog.cxx:422 TFitParametersDialog.cxx:423 TFitParametersDialog.cxx:424 TFitParametersDialog.cxx:425 TFitParametersDialog.cxx:426 TFitParametersDialog.cxx:427 TFitParametersDialog.cxx:428 TFitParametersDialog.cxx:429 TFitParametersDialog.cxx:430 TFitParametersDialog.cxx:431 TFitParametersDialog.cxx:432 TFitParametersDialog.cxx:433 TFitParametersDialog.cxx:434 TFitParametersDialog.cxx:435 TFitParametersDialog.cxx:436 TFitParametersDialog.cxx:437 TFitParametersDialog.cxx:438 TFitParametersDialog.cxx:439 TFitParametersDialog.cxx:440 TFitParametersDialog.cxx:441 TFitParametersDialog.cxx:442 TFitParametersDialog.cxx:443 TFitParametersDialog.cxx:444 TFitParametersDialog.cxx:445 TFitParametersDialog.cxx:446 TFitParametersDialog.cxx:447 TFitParametersDialog.cxx:448 TFitParametersDialog.cxx:449 TFitParametersDialog.cxx:450 TFitParametersDialog.cxx:451 TFitParametersDialog.cxx:452 TFitParametersDialog.cxx:453 TFitParametersDialog.cxx:454 TFitParametersDialog.cxx:455 TFitParametersDialog.cxx:456 TFitParametersDialog.cxx:457 TFitParametersDialog.cxx:458 TFitParametersDialog.cxx:459 TFitParametersDialog.cxx:460 TFitParametersDialog.cxx:461 TFitParametersDialog.cxx:462 TFitParametersDialog.cxx:463 TFitParametersDialog.cxx:464 TFitParametersDialog.cxx:465 TFitParametersDialog.cxx:466 TFitParametersDialog.cxx:467 TFitParametersDialog.cxx:468 TFitParametersDialog.cxx:469 TFitParametersDialog.cxx:470 TFitParametersDialog.cxx:471 TFitParametersDialog.cxx:472 TFitParametersDialog.cxx:473 TFitParametersDialog.cxx:474 TFitParametersDialog.cxx:475 TFitParametersDialog.cxx:476 TFitParametersDialog.cxx:477 TFitParametersDialog.cxx:478 TFitParametersDialog.cxx:479 TFitParametersDialog.cxx:480 TFitParametersDialog.cxx:481 TFitParametersDialog.cxx:482 TFitParametersDialog.cxx:483 TFitParametersDialog.cxx:484 TFitParametersDialog.cxx:485 TFitParametersDialog.cxx:486 TFitParametersDialog.cxx:487 TFitParametersDialog.cxx:488 TFitParametersDialog.cxx:489 TFitParametersDialog.cxx:490 TFitParametersDialog.cxx:491 TFitParametersDialog.cxx:492 TFitParametersDialog.cxx:493 TFitParametersDialog.cxx:494 TFitParametersDialog.cxx:495 TFitParametersDialog.cxx:496 TFitParametersDialog.cxx:497 TFitParametersDialog.cxx:498 TFitParametersDialog.cxx:499 TFitParametersDialog.cxx:500 TFitParametersDialog.cxx:501 TFitParametersDialog.cxx:502 TFitParametersDialog.cxx:503 TFitParametersDialog.cxx:504 TFitParametersDialog.cxx:505 TFitParametersDialog.cxx:506 TFitParametersDialog.cxx:507 TFitParametersDialog.cxx:508 TFitParametersDialog.cxx:509 TFitParametersDialog.cxx:510 TFitParametersDialog.cxx:511 TFitParametersDialog.cxx:512 TFitParametersDialog.cxx:513 TFitParametersDialog.cxx:514 TFitParametersDialog.cxx:515 TFitParametersDialog.cxx:516 TFitParametersDialog.cxx:517 TFitParametersDialog.cxx:518 TFitParametersDialog.cxx:519 TFitParametersDialog.cxx:520 TFitParametersDialog.cxx:521 TFitParametersDialog.cxx:522 TFitParametersDialog.cxx:523 TFitParametersDialog.cxx:524 TFitParametersDialog.cxx:525 TFitParametersDialog.cxx:526 TFitParametersDialog.cxx:527 TFitParametersDialog.cxx:528 TFitParametersDialog.cxx:529 TFitParametersDialog.cxx:530 TFitParametersDialog.cxx:531 TFitParametersDialog.cxx:532 TFitParametersDialog.cxx:533 TFitParametersDialog.cxx:534 TFitParametersDialog.cxx:535 TFitParametersDialog.cxx:536 TFitParametersDialog.cxx:537 TFitParametersDialog.cxx:538 TFitParametersDialog.cxx:539 TFitParametersDialog.cxx:540 TFitParametersDialog.cxx:541 TFitParametersDialog.cxx:542 TFitParametersDialog.cxx:543 TFitParametersDialog.cxx:544 TFitParametersDialog.cxx:545 TFitParametersDialog.cxx:546 TFitParametersDialog.cxx:547 TFitParametersDialog.cxx:548 TFitParametersDialog.cxx:549 TFitParametersDialog.cxx:550 TFitParametersDialog.cxx:551 TFitParametersDialog.cxx:552 TFitParametersDialog.cxx:553 TFitParametersDialog.cxx:554 TFitParametersDialog.cxx:555 TFitParametersDialog.cxx:556 TFitParametersDialog.cxx:557 TFitParametersDialog.cxx:558 TFitParametersDialog.cxx:559 TFitParametersDialog.cxx:560 TFitParametersDialog.cxx:561 TFitParametersDialog.cxx:562 TFitParametersDialog.cxx:563 TFitParametersDialog.cxx:564 TFitParametersDialog.cxx:565 TFitParametersDialog.cxx:566 TFitParametersDialog.cxx:567 TFitParametersDialog.cxx:568 TFitParametersDialog.cxx:569 TFitParametersDialog.cxx:570 TFitParametersDialog.cxx:571 TFitParametersDialog.cxx:572 TFitParametersDialog.cxx:573 TFitParametersDialog.cxx:574 TFitParametersDialog.cxx:575 TFitParametersDialog.cxx:576 TFitParametersDialog.cxx:577 TFitParametersDialog.cxx:578 TFitParametersDialog.cxx:579 TFitParametersDialog.cxx:580 TFitParametersDialog.cxx:581 TFitParametersDialog.cxx:582 TFitParametersDialog.cxx:583 TFitParametersDialog.cxx:584 TFitParametersDialog.cxx:585 TFitParametersDialog.cxx:586 TFitParametersDialog.cxx:587 TFitParametersDialog.cxx:588 TFitParametersDialog.cxx:589 TFitParametersDialog.cxx:590 TFitParametersDialog.cxx:591 TFitParametersDialog.cxx:592 TFitParametersDialog.cxx:593 TFitParametersDialog.cxx:594 TFitParametersDialog.cxx:595 TFitParametersDialog.cxx:596 TFitParametersDialog.cxx:597 TFitParametersDialog.cxx:598 TFitParametersDialog.cxx:599 TFitParametersDialog.cxx:600 TFitParametersDialog.cxx:601 TFitParametersDialog.cxx:602 TFitParametersDialog.cxx:603 TFitParametersDialog.cxx:604 TFitParametersDialog.cxx:605 TFitParametersDialog.cxx:606 TFitParametersDialog.cxx:607 TFitParametersDialog.cxx:608 TFitParametersDialog.cxx:609 TFitParametersDialog.cxx:610 TFitParametersDialog.cxx:611 TFitParametersDialog.cxx:612 TFitParametersDialog.cxx:613 TFitParametersDialog.cxx:614 TFitParametersDialog.cxx:615 TFitParametersDialog.cxx:616 TFitParametersDialog.cxx:617 TFitParametersDialog.cxx:618 TFitParametersDialog.cxx:619 TFitParametersDialog.cxx:620 TFitParametersDialog.cxx:621 TFitParametersDialog.cxx:622 TFitParametersDialog.cxx:623 TFitParametersDialog.cxx:624 TFitParametersDialog.cxx:625 TFitParametersDialog.cxx:626 TFitParametersDialog.cxx:627 TFitParametersDialog.cxx:628 TFitParametersDialog.cxx:629 TFitParametersDialog.cxx:630 TFitParametersDialog.cxx:631 TFitParametersDialog.cxx:632 TFitParametersDialog.cxx:633 TFitParametersDialog.cxx:634 TFitParametersDialog.cxx:635 TFitParametersDialog.cxx:636 TFitParametersDialog.cxx:637 TFitParametersDialog.cxx:638 TFitParametersDialog.cxx:639 TFitParametersDialog.cxx:640 TFitParametersDialog.cxx:641 TFitParametersDialog.cxx:642 TFitParametersDialog.cxx:643 TFitParametersDialog.cxx:644 TFitParametersDialog.cxx:645 TFitParametersDialog.cxx:646 TFitParametersDialog.cxx:647 TFitParametersDialog.cxx:648 TFitParametersDialog.cxx:649 TFitParametersDialog.cxx:650 TFitParametersDialog.cxx:651 TFitParametersDialog.cxx:652 TFitParametersDialog.cxx:653 TFitParametersDialog.cxx:654 TFitParametersDialog.cxx:655 TFitParametersDialog.cxx:656 TFitParametersDialog.cxx:657 TFitParametersDialog.cxx:658 TFitParametersDialog.cxx:659 TFitParametersDialog.cxx:660 TFitParametersDialog.cxx:661 TFitParametersDialog.cxx:662 TFitParametersDialog.cxx:663 TFitParametersDialog.cxx:664 TFitParametersDialog.cxx:665 TFitParametersDialog.cxx:666 TFitParametersDialog.cxx:667 TFitParametersDialog.cxx:668 TFitParametersDialog.cxx:669 TFitParametersDialog.cxx:670 TFitParametersDialog.cxx:671 TFitParametersDialog.cxx:672 TFitParametersDialog.cxx:673 TFitParametersDialog.cxx:674 TFitParametersDialog.cxx:675 TFitParametersDialog.cxx:676 TFitParametersDialog.cxx:677 TFitParametersDialog.cxx:678 TFitParametersDialog.cxx:679 TFitParametersDialog.cxx:680 TFitParametersDialog.cxx:681 TFitParametersDialog.cxx:682 TFitParametersDialog.cxx:683 TFitParametersDialog.cxx:684 TFitParametersDialog.cxx:685 TFitParametersDialog.cxx:686 TFitParametersDialog.cxx:687 TFitParametersDialog.cxx:688 TFitParametersDialog.cxx:689 TFitParametersDialog.cxx:690 TFitParametersDialog.cxx:691 TFitParametersDialog.cxx:692 TFitParametersDialog.cxx:693 TFitParametersDialog.cxx:694 TFitParametersDialog.cxx:695 TFitParametersDialog.cxx:696 TFitParametersDialog.cxx:697 TFitParametersDialog.cxx:698 TFitParametersDialog.cxx:699 TFitParametersDialog.cxx:700 TFitParametersDialog.cxx:701 TFitParametersDialog.cxx:702 TFitParametersDialog.cxx:703 TFitParametersDialog.cxx:704 TFitParametersDialog.cxx:705 TFitParametersDialog.cxx:706 TFitParametersDialog.cxx:707 TFitParametersDialog.cxx:708 TFitParametersDialog.cxx:709 TFitParametersDialog.cxx:710 TFitParametersDialog.cxx:711 TFitParametersDialog.cxx:712 TFitParametersDialog.cxx:713 TFitParametersDialog.cxx:714 TFitParametersDialog.cxx:715 TFitParametersDialog.cxx:716 TFitParametersDialog.cxx:717 TFitParametersDialog.cxx:718 TFitParametersDialog.cxx:719 TFitParametersDialog.cxx:720 TFitParametersDialog.cxx:721 TFitParametersDialog.cxx:722 TFitParametersDialog.cxx:723 TFitParametersDialog.cxx:724 TFitParametersDialog.cxx:725 TFitParametersDialog.cxx:726 TFitParametersDialog.cxx:727 TFitParametersDialog.cxx:728 TFitParametersDialog.cxx:729 TFitParametersDialog.cxx:730 TFitParametersDialog.cxx:731 TFitParametersDialog.cxx:732 TFitParametersDialog.cxx:733 TFitParametersDialog.cxx:734 TFitParametersDialog.cxx:735 TFitParametersDialog.cxx:736 TFitParametersDialog.cxx:737 TFitParametersDialog.cxx:738 TFitParametersDialog.cxx:739 TFitParametersDialog.cxx:740 TFitParametersDialog.cxx:741 TFitParametersDialog.cxx:742 TFitParametersDialog.cxx:743 TFitParametersDialog.cxx:744 TFitParametersDialog.cxx:745 TFitParametersDialog.cxx:746 TFitParametersDialog.cxx:747 TFitParametersDialog.cxx:748 TFitParametersDialog.cxx:749 TFitParametersDialog.cxx:750 TFitParametersDialog.cxx:751 TFitParametersDialog.cxx:752 TFitParametersDialog.cxx:753 TFitParametersDialog.cxx:754 TFitParametersDialog.cxx:755 TFitParametersDialog.cxx:756 TFitParametersDialog.cxx:757 TFitParametersDialog.cxx:758 TFitParametersDialog.cxx:759 TFitParametersDialog.cxx:760 TFitParametersDialog.cxx:761 TFitParametersDialog.cxx:762 TFitParametersDialog.cxx:763 TFitParametersDialog.cxx:764 TFitParametersDialog.cxx:765 TFitParametersDialog.cxx:766 TFitParametersDialog.cxx:767 TFitParametersDialog.cxx:768 TFitParametersDialog.cxx:769 TFitParametersDialog.cxx:770 TFitParametersDialog.cxx:771 TFitParametersDialog.cxx:772 TFitParametersDialog.cxx:773 TFitParametersDialog.cxx:774 TFitParametersDialog.cxx:775 TFitParametersDialog.cxx:776 TFitParametersDialog.cxx:777 TFitParametersDialog.cxx:778 TFitParametersDialog.cxx:779 TFitParametersDialog.cxx:780 TFitParametersDialog.cxx:781 TFitParametersDialog.cxx:782 TFitParametersDialog.cxx:783 TFitParametersDialog.cxx:784 TFitParametersDialog.cxx:785 TFitParametersDialog.cxx:786 TFitParametersDialog.cxx:787 TFitParametersDialog.cxx:788 TFitParametersDialog.cxx:789 TFitParametersDialog.cxx:790 TFitParametersDialog.cxx:791 TFitParametersDialog.cxx:792 TFitParametersDialog.cxx:793 TFitParametersDialog.cxx:794 TFitParametersDialog.cxx:795 TFitParametersDialog.cxx:796 TFitParametersDialog.cxx:797 TFitParametersDialog.cxx:798 TFitParametersDialog.cxx:799 TFitParametersDialog.cxx:800 TFitParametersDialog.cxx:801 TFitParametersDialog.cxx:802 TFitParametersDialog.cxx:803 TFitParametersDialog.cxx:804 TFitParametersDialog.cxx:805 TFitParametersDialog.cxx:806 TFitParametersDialog.cxx:807 TFitParametersDialog.cxx:808 TFitParametersDialog.cxx:809 TFitParametersDialog.cxx:810 TFitParametersDialog.cxx:811 TFitParametersDialog.cxx:812 TFitParametersDialog.cxx:813 TFitParametersDialog.cxx:814 TFitParametersDialog.cxx:815 TFitParametersDialog.cxx:816 TFitParametersDialog.cxx:817 TFitParametersDialog.cxx:818 TFitParametersDialog.cxx:819 TFitParametersDialog.cxx:820 TFitParametersDialog.cxx:821 TFitParametersDialog.cxx:822 TFitParametersDialog.cxx:823 TFitParametersDialog.cxx:824 TFitParametersDialog.cxx:825 TFitParametersDialog.cxx:826 TFitParametersDialog.cxx:827 TFitParametersDialog.cxx:828 TFitParametersDialog.cxx:829 TFitParametersDialog.cxx:830 TFitParametersDialog.cxx:831 TFitParametersDialog.cxx:832 TFitParametersDialog.cxx:833 TFitParametersDialog.cxx:834 TFitParametersDialog.cxx:835 TFitParametersDialog.cxx:836 TFitParametersDialog.cxx:837 TFitParametersDialog.cxx:838 TFitParametersDialog.cxx:839 TFitParametersDialog.cxx:840 TFitParametersDialog.cxx:841 TFitParametersDialog.cxx:842 TFitParametersDialog.cxx:843 TFitParametersDialog.cxx:844 TFitParametersDialog.cxx:845 TFitParametersDialog.cxx:846 TFitParametersDialog.cxx:847 TFitParametersDialog.cxx:848 TFitParametersDialog.cxx:849 TFitParametersDialog.cxx:850 TFitParametersDialog.cxx:851 TFitParametersDialog.cxx:852 TFitParametersDialog.cxx:853 TFitParametersDialog.cxx:854 TFitParametersDialog.cxx:855 TFitParametersDialog.cxx:856 TFitParametersDialog.cxx:857 TFitParametersDialog.cxx:858 TFitParametersDialog.cxx:859 TFitParametersDialog.cxx:860 TFitParametersDialog.cxx:861 TFitParametersDialog.cxx:862 TFitParametersDialog.cxx:863 TFitParametersDialog.cxx:864 TFitParametersDialog.cxx:865 TFitParametersDialog.cxx:866 TFitParametersDialog.cxx:867 TFitParametersDialog.cxx:868 TFitParametersDialog.cxx:869 TFitParametersDialog.cxx:870 TFitParametersDialog.cxx:871 TFitParametersDialog.cxx:872 TFitParametersDialog.cxx:873 TFitParametersDialog.cxx:874 TFitParametersDialog.cxx:875 TFitParametersDialog.cxx:876 TFitParametersDialog.cxx:877 TFitParametersDialog.cxx:878 TFitParametersDialog.cxx:879 TFitParametersDialog.cxx:880 TFitParametersDialog.cxx:881 TFitParametersDialog.cxx:882 TFitParametersDialog.cxx:883 TFitParametersDialog.cxx:884 TFitParametersDialog.cxx:885 TFitParametersDialog.cxx:886 TFitParametersDialog.cxx:887 TFitParametersDialog.cxx:888 TFitParametersDialog.cxx:889 TFitParametersDialog.cxx:890 TFitParametersDialog.cxx:891 TFitParametersDialog.cxx:892 TFitParametersDialog.cxx:893 TFitParametersDialog.cxx:894 TFitParametersDialog.cxx:895 TFitParametersDialog.cxx:896 TFitParametersDialog.cxx:897 TFitParametersDialog.cxx:898 TFitParametersDialog.cxx:899 TFitParametersDialog.cxx:900 TFitParametersDialog.cxx:901 TFitParametersDialog.cxx:902 TFitParametersDialog.cxx:903 TFitParametersDialog.cxx:904 TFitParametersDialog.cxx:905 TFitParametersDialog.cxx:906 TFitParametersDialog.cxx:907 TFitParametersDialog.cxx:908 TFitParametersDialog.cxx:909 TFitParametersDialog.cxx:910 TFitParametersDialog.cxx:911 TFitParametersDialog.cxx:912 TFitParametersDialog.cxx:913 TFitParametersDialog.cxx:914 TFitParametersDialog.cxx:915