ROOT logo
// @(#)root/ged:$Id: TF1Editor.cxx 20882 2007-11-19 11:31:26Z rdm $
// Author: Ilka Antcheva 21/03/06

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TF1Editor                                                           //
//                                                                      //
//  GUI for TF1 attributes and parameters.                              //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TF1Editor.h"
#include "TGedEditor.h"
#include "TH1.h"
#include "TF1.h"
#include "TGTextEntry.h"
#include "TGToolTip.h"
#include "TGLabel.h"
#include "TGDoubleSlider.h"
#include "TString.h"
#include "TGNumberEntry.h"
#include "TG3DLine.h"
#include "TFunctionParametersDialog.h"
#include "TCanvas.h"


ClassImp(TF1Editor)

enum ETF1Wid {
   kTF1_TIT,  kTF1_NPX,
   kTF1_XSLD, kTF1_XMIN, kTF1_XMAX,
   kTF1_PAR,  kTF1_DRW
};

TF1Editor::TF1Editor(const TGWindow *p, Int_t width, Int_t height,
                     UInt_t options, Pixel_t back)
   : TGedFrame(p, width, height, options | kVerticalFrame, back)
{
   // Constructor of TF1 editor.

   MakeTitle("Function");

   fTitle = new TGTextEntry(this, new TGTextBuffer(50), kTF1_TIT);
   fTitle->Resize(137, fTitle->GetDefaultHeight());
   fTitle->SetEnabled(kFALSE);
   fTitle->SetToolTipText(Form("Function expression or predefined name"));
   AddFrame(fTitle, new TGLayoutHints(kLHintsLeft,3, 2, 2, 3));

   TGCompositeFrame *f3a = new TGCompositeFrame(this, 137, 20, kHorizontalFrame);
   AddFrame(f3a, new TGLayoutHints(kLHintsTop, 0, 1, 3, 0));
   fDrawMode = new TGCheckButton(f3a, "Update", kTF1_DRW);
   fDrawMode->SetToolTipText("Immediate function redrawing");
   f3a->AddFrame(fDrawMode, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 3, 1, 1, 0));
   fParLabel = new TGLabel(f3a, "");
   f3a->AddFrame(fParLabel, new TGLayoutHints(kLHintsRight | kLHintsBottom, 25, 2, 1, 0));

   TGCompositeFrame *f3 = new TGCompositeFrame(this, 137, 20, kHorizontalFrame | kFixedWidth);
   fSetPars = new TGTextButton(f3, "Set Parameters...", kTF1_PAR);
   f3->AddFrame(fSetPars, new TGLayoutHints(kLHintsRight | kLHintsTop | kLHintsExpandX,
                                            0, 1, 5, 0));
   fSetPars->SetToolTipText("Open a dialog for parameter(s) settings");
   AddFrame(f3, new TGLayoutHints(kLHintsTop | kLHintsLeft, 3, 2, 2, 3));

   MakeTitle("X-Range");

   TGCompositeFrame *f4 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
   TGCompositeFrame *f4a = new TGCompositeFrame(f4, 66, 20, kVerticalFrame | kFixedWidth);
   TGLabel *fNpxLabel = new TGLabel(f4a, "Points: ");
   f4a->AddFrame(fNpxLabel, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 3, 0, 5, 1));
   f4->AddFrame(f4a, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 1, 0, 0));

   TGCompositeFrame *f4b = new TGCompositeFrame(f4, 40, 20, kVerticalFrame);
   fNXpoints = new TGNumberEntry(f4b, 100, 7, kTF1_NPX,
                                 TGNumberFormat::kNESInteger,
                                 TGNumberFormat::kNEANonNegative,
                                 TGNumberFormat::kNELLimitMinMax,4,100000);
   fNXpoints->GetNumberEntry()->SetToolTipText("Points along x-axis (4-100 000)");
   f4b->AddFrame(fNXpoints, new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
   f4->AddFrame(f4b, new TGLayoutHints(kLHintsTop | kLHintsRight, 0, 1, 0, 0));
   AddFrame(f4, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 1, 0, 0));

   TGCompositeFrame *f5 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
   fSliderX = new TGDoubleHSlider(f5, 1, 2);
   fSliderX->Resize(137,20);
   f5->AddFrame(fSliderX, new TGLayoutHints(kLHintsLeft));
   AddFrame(f5, new TGLayoutHints(kLHintsTop, 3, 7, 4, 1));

   TGCompositeFrame *f6 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
   fSldMinX = new TGNumberEntryField(f6, kTF1_XMIN, 0.0,
                                     TGNumberFormat::kNESRealFour,
                                     TGNumberFormat::kNEAAnyNumber);
   ((TGTextEntry*)fSldMinX)->SetToolTipText("Lower bound along x-axis");
   fSldMinX->Resize(65,20);
   fSldMinX->SetState(kFALSE);
   f6->AddFrame(fSldMinX, new TGLayoutHints(kLHintsLeft));
   fSldMaxX = new TGNumberEntryField(f6, kTF1_XMAX, 0.0,
                                     TGNumberFormat::kNESRealFour,
                                     TGNumberFormat::kNEAAnyNumber);
   ((TGTextEntry*)fSldMaxX)->SetToolTipText("Upper bound along x-axis");
   fSldMaxX->SetState(kFALSE);
   fSldMaxX->Resize(65,20);
   f6->AddFrame(fSldMaxX, new TGLayoutHints(kLHintsLeft, 4, 0, 0, 0));
   AddFrame(f6, new TGLayoutHints(kLHintsTop, 3, 3, 5, 0));
}

//______________________________________________________________________________
TF1Editor::~TF1Editor()
{
   // Destructor of TF1 editor.
}

//______________________________________________________________________________
void TF1Editor::ConnectSignals2Slots()
{
   // Connect signals to slots.

   fNXpoints->Connect("ValueSet(Long_t)", "TF1Editor", this, "DoXPoints()");
   (fNXpoints->GetNumberEntry())->Connect("ReturnPressed()", "TF1Editor",
                                          this, "DoXPoints()");
   fSetPars->Connect("Clicked()", "TF1Editor", this, "DoParameterSettings()");
   fSliderX->Connect("Pressed()","TF1Editor", this,"DoSliderXPressed()");
   fSliderX->Connect("Released()","TF1Editor", this,"DoSliderXReleased()");
   fSliderX->Connect("PositionChanged()","TF1Editor", this,"DoSliderXMoved()");
   
   fInit = kFALSE;
}

//______________________________________________________________________________
void TF1Editor::SetModel(TObject* obj)
{
   // Pick up the function parameters and options.
   if (obj == 0 || !obj->InheritsFrom(TF1::Class())) {
      return;
   }
   
   fF1 = (TF1*)obj;
   fAvoidSignal = kTRUE;

   const char *text = fF1->GetTitle();
   fTitle->SetText(text);

   fNP = fF1->GetNpar();
   fParLabel->SetText(Form("Npar: %d", fNP));
   fClient->NeedRedraw(fParLabel);

   fNXpoints->SetNumber(fF1->GetNpx());

   if (!fNP)
      fSetPars->SetState(kButtonDisabled, kFALSE);
   else
      fSetPars->SetState(kButtonUp, kFALSE);

   TAxis *x = fF1->GetHistogram()->GetXaxis();
   Int_t nx = x->GetNbins();
   Int_t nxbinmin = x->GetFirst();
   Int_t nxbinmax = x->GetLast();
   fSliderX->SetRange(1,nx);
   fSliderX->SetPosition((Double_t)nxbinmin,(Double_t)nxbinmax);
   fSldMinX->SetNumber(x->GetBinLowEdge(nxbinmin));
   fSldMaxX->SetNumber(x->GetBinUpEdge(nxbinmax));

   if (fInit) ConnectSignals2Slots();
   fAvoidSignal = kFALSE;
}

//______________________________________________________________________________
void TF1Editor::DoParameterSettings()
{
   // Slot connected to the function parameter(s) settings.

   TGMainFrame *main =  (TGMainFrame *)GetMainFrame();
   Double_t rmin = fSldMinX->GetNumber();
   Double_t rmax = fSldMaxX->GetNumber();
   new TFunctionParametersDialog(gClient->GetDefaultRoot(), main, 
                                 fF1, fGedEditor->GetPad(), rmin, rmax);

}

//______________________________________________________________________________
void TF1Editor::DoXPoints()
{
   // Slot connected to the number of points setting.

   if (fAvoidSignal) return;
   Double_t rmin, rmax;
   fF1->GetRange(rmin, rmax);
   fF1->SetRange(fSldMinX->GetNumber(), fSldMaxX->GetNumber());
   fF1->SetNpx((Int_t)fNXpoints->GetNumber());
   fF1->GetHistogram()->GetXaxis()->Set((Int_t)fNXpoints->GetNumber(),
                                          fSldMinX->GetNumber(),
                                          fSldMaxX->GetNumber());
   Update();
   fF1->SetRange(rmin, rmax);
}

//______________________________________________________________________________
void TF1Editor::DoSliderXMoved()
{
   // Slot connected to the x-Slider range for function redrawing.

   if (fAvoidSignal) return;

   TVirtualPad *save = 0;
   save = gPad;
   gPad = fGedEditor->GetPad();
   fGedEditor->GetPad()->cd();

   fF1->SetNpx((Int_t)fNXpoints->GetNumber());
   TAxis *x = fF1->GetHistogram()->GetXaxis();
   
   if (fDrawMode->GetState() == kButtonDown) {
      TString opt = fF1->GetDrawOption();
      opt.ToUpper();
      if (!opt.Contains("SAME"))
         opt += "SAME";
      fF1->Draw(opt);

      x->SetRange((Int_t)((fSliderX->GetMinPosition())+0.5),
                  (Int_t)((fSliderX->GetMaxPosition())+0.5));
      fSldMinX->SetNumber(x->GetBinLowEdge(x->GetFirst()));
      fSldMaxX->SetNumber(x->GetBinUpEdge(x->GetLast()));
      fClient->NeedRedraw(fSliderX,kTRUE);
      fClient->NeedRedraw(fSldMinX,kTRUE);
      fClient->NeedRedraw(fSldMaxX,kTRUE);
      Update();

   } else {
      x->SetRange((Int_t)((fSliderX->GetMinPosition())+0.5),
                  (Int_t)((fSliderX->GetMaxPosition())+0.5));
      fSldMinX->SetNumber(x->GetBinLowEdge(x->GetFirst()));
      fSldMaxX->SetNumber(x->GetBinUpEdge(x->GetLast()));
      fClient->NeedRedraw(fSliderX,kTRUE);
      fClient->NeedRedraw(fSldMinX,kTRUE);
      fClient->NeedRedraw(fSldMaxX,kTRUE);
   }
   if(save) gPad = save;
}

//______________________________________________________________________________
void TF1Editor::DoSliderXPressed()
{
   // Slot connected to the x-Slider.

   if (fAvoidSignal || (fDrawMode->GetState() == kButtonDown)) return;

   TVirtualPad *save = 0;
   save = gPad;
   gPad = fGedEditor->GetPad();
   fGedEditor->GetPad()->cd();

   fF1->SetNpx((Int_t)fNXpoints->GetNumber());
   TAxis *x = fF1->GetHistogram()->GetXaxis();
   TString opt = fF1->GetDrawOption();
   opt.ToUpper();
   if (!opt.Contains("SAME"))
      opt += "SAME";
   fF1->Draw(opt);

   x->SetRange((Int_t)((fSliderX->GetMinPosition())+0.5),
               (Int_t)((fSliderX->GetMaxPosition())+0.5));
   fSldMinX->SetNumber(x->GetBinLowEdge(x->GetFirst()));
   fSldMaxX->SetNumber(x->GetBinUpEdge(x->GetLast()));
   fClient->NeedRedraw(fSliderX,kTRUE);
   fClient->NeedRedraw(fSldMinX,kTRUE);
   fClient->NeedRedraw(fSldMaxX,kTRUE);
   Update();

   if(save) gPad = save;

}

//______________________________________________________________________________
void TF1Editor::DoSliderXReleased()
{
   // Slot connected to the x-Slider.

   if (fAvoidSignal || (fDrawMode->GetState() == kButtonDown)) return;

   TVirtualPad *save = 0;
   save = gPad;
   gPad = fGedEditor->GetPad();
   fGedEditor->GetPad()->cd();

   fF1->SetNpx((Int_t)fNXpoints->GetNumber());
   TAxis *x = fF1->GetHistogram()->GetXaxis();
   TString opt = fF1->GetDrawOption();
   opt.ToUpper();
   if (!opt.Contains("SAME"))
      opt += "SAME";
   fF1->Draw(opt);

   x->SetRange((Int_t)((fSliderX->GetMinPosition())+0.5),
               (Int_t)((fSliderX->GetMaxPosition())+0.5));
   fSldMinX->SetNumber(x->GetBinLowEdge(x->GetFirst()));
   fSldMaxX->SetNumber(x->GetBinUpEdge(x->GetLast()));
   fClient->NeedRedraw(fSliderX,kTRUE);
   fClient->NeedRedraw(fSldMinX,kTRUE);
   fClient->NeedRedraw(fSldMaxX,kTRUE);
   Update();

   if(save) gPad = save;
}


//______________________________________________________________________________
void TF1Editor::DoXRange()
{
   // Slot connected to min/max settings of the slider range.

   if (fAvoidSignal) return;
   TAxis *x = fF1->GetHistogram()->GetXaxis();
   Int_t nx = x->GetNbins();
   Double_t width = x->GetBinWidth(1);
   Double_t lowLimit = x->GetBinLowEdge(1);
   Double_t upLimit = x->GetBinUpEdge(nx);
   if ((fSldMinX->GetNumber()+width/2) < (lowLimit))
      fSldMinX->SetNumber(lowLimit);
   if ((fSldMaxX->GetNumber()-width/2) > (upLimit))
      fSldMaxX->SetNumber(upLimit);
   x->SetRangeUser(fSldMinX->GetNumber()+width/2,
                   fSldMaxX->GetNumber()-width/2);
   Int_t nxbinmin = x->GetFirst();
   Int_t nxbinmax = x->GetLast();
   fSliderX->SetPosition((Double_t)(nxbinmin),(Double_t)(nxbinmax));
   Update();
}

//______________________________________________________________________________
void TF1Editor::ActivateBaseClassEditors(TClass* cl)
{
   // Exclude TAttFillEditor from this interface.

   fGedEditor->ExcludeClassEditor(TAttFill::Class());
   TGedFrame::ActivateBaseClassEditors(cl);
}

 TF1Editor.cxx:1
 TF1Editor.cxx:2
 TF1Editor.cxx:3
 TF1Editor.cxx:4
 TF1Editor.cxx:5
 TF1Editor.cxx:6
 TF1Editor.cxx:7
 TF1Editor.cxx:8
 TF1Editor.cxx:9
 TF1Editor.cxx:10
 TF1Editor.cxx:11
 TF1Editor.cxx:12
 TF1Editor.cxx:13
 TF1Editor.cxx:14
 TF1Editor.cxx:15
 TF1Editor.cxx:16
 TF1Editor.cxx:17
 TF1Editor.cxx:18
 TF1Editor.cxx:19
 TF1Editor.cxx:20
 TF1Editor.cxx:21
 TF1Editor.cxx:22
 TF1Editor.cxx:23
 TF1Editor.cxx:24
 TF1Editor.cxx:25
 TF1Editor.cxx:26
 TF1Editor.cxx:27
 TF1Editor.cxx:28
 TF1Editor.cxx:29
 TF1Editor.cxx:30
 TF1Editor.cxx:31
 TF1Editor.cxx:32
 TF1Editor.cxx:33
 TF1Editor.cxx:34
 TF1Editor.cxx:35
 TF1Editor.cxx:36
 TF1Editor.cxx:37
 TF1Editor.cxx:38
 TF1Editor.cxx:39
 TF1Editor.cxx:40
 TF1Editor.cxx:41
 TF1Editor.cxx:42
 TF1Editor.cxx:43
 TF1Editor.cxx:44
 TF1Editor.cxx:45
 TF1Editor.cxx:46
 TF1Editor.cxx:47
 TF1Editor.cxx:48
 TF1Editor.cxx:49
 TF1Editor.cxx:50
 TF1Editor.cxx:51
 TF1Editor.cxx:52
 TF1Editor.cxx:53
 TF1Editor.cxx:54
 TF1Editor.cxx:55
 TF1Editor.cxx:56
 TF1Editor.cxx:57
 TF1Editor.cxx:58
 TF1Editor.cxx:59
 TF1Editor.cxx:60
 TF1Editor.cxx:61
 TF1Editor.cxx:62
 TF1Editor.cxx:63
 TF1Editor.cxx:64
 TF1Editor.cxx:65
 TF1Editor.cxx:66
 TF1Editor.cxx:67
 TF1Editor.cxx:68
 TF1Editor.cxx:69
 TF1Editor.cxx:70
 TF1Editor.cxx:71
 TF1Editor.cxx:72
 TF1Editor.cxx:73
 TF1Editor.cxx:74
 TF1Editor.cxx:75
 TF1Editor.cxx:76
 TF1Editor.cxx:77
 TF1Editor.cxx:78
 TF1Editor.cxx:79
 TF1Editor.cxx:80
 TF1Editor.cxx:81
 TF1Editor.cxx:82
 TF1Editor.cxx:83
 TF1Editor.cxx:84
 TF1Editor.cxx:85
 TF1Editor.cxx:86
 TF1Editor.cxx:87
 TF1Editor.cxx:88
 TF1Editor.cxx:89
 TF1Editor.cxx:90
 TF1Editor.cxx:91
 TF1Editor.cxx:92
 TF1Editor.cxx:93
 TF1Editor.cxx:94
 TF1Editor.cxx:95
 TF1Editor.cxx:96
 TF1Editor.cxx:97
 TF1Editor.cxx:98
 TF1Editor.cxx:99
 TF1Editor.cxx:100
 TF1Editor.cxx:101
 TF1Editor.cxx:102
 TF1Editor.cxx:103
 TF1Editor.cxx:104
 TF1Editor.cxx:105
 TF1Editor.cxx:106
 TF1Editor.cxx:107
 TF1Editor.cxx:108
 TF1Editor.cxx:109
 TF1Editor.cxx:110
 TF1Editor.cxx:111
 TF1Editor.cxx:112
 TF1Editor.cxx:113
 TF1Editor.cxx:114
 TF1Editor.cxx:115
 TF1Editor.cxx:116
 TF1Editor.cxx:117
 TF1Editor.cxx:118
 TF1Editor.cxx:119
 TF1Editor.cxx:120
 TF1Editor.cxx:121
 TF1Editor.cxx:122
 TF1Editor.cxx:123
 TF1Editor.cxx:124
 TF1Editor.cxx:125
 TF1Editor.cxx:126
 TF1Editor.cxx:127
 TF1Editor.cxx:128
 TF1Editor.cxx:129
 TF1Editor.cxx:130
 TF1Editor.cxx:131
 TF1Editor.cxx:132
 TF1Editor.cxx:133
 TF1Editor.cxx:134
 TF1Editor.cxx:135
 TF1Editor.cxx:136
 TF1Editor.cxx:137
 TF1Editor.cxx:138
 TF1Editor.cxx:139
 TF1Editor.cxx:140
 TF1Editor.cxx:141
 TF1Editor.cxx:142
 TF1Editor.cxx:143
 TF1Editor.cxx:144
 TF1Editor.cxx:145
 TF1Editor.cxx:146
 TF1Editor.cxx:147
 TF1Editor.cxx:148
 TF1Editor.cxx:149
 TF1Editor.cxx:150
 TF1Editor.cxx:151
 TF1Editor.cxx:152
 TF1Editor.cxx:153
 TF1Editor.cxx:154
 TF1Editor.cxx:155
 TF1Editor.cxx:156
 TF1Editor.cxx:157
 TF1Editor.cxx:158
 TF1Editor.cxx:159
 TF1Editor.cxx:160
 TF1Editor.cxx:161
 TF1Editor.cxx:162
 TF1Editor.cxx:163
 TF1Editor.cxx:164
 TF1Editor.cxx:165
 TF1Editor.cxx:166
 TF1Editor.cxx:167
 TF1Editor.cxx:168
 TF1Editor.cxx:169
 TF1Editor.cxx:170
 TF1Editor.cxx:171
 TF1Editor.cxx:172
 TF1Editor.cxx:173
 TF1Editor.cxx:174
 TF1Editor.cxx:175
 TF1Editor.cxx:176
 TF1Editor.cxx:177
 TF1Editor.cxx:178
 TF1Editor.cxx:179
 TF1Editor.cxx:180
 TF1Editor.cxx:181
 TF1Editor.cxx:182
 TF1Editor.cxx:183
 TF1Editor.cxx:184
 TF1Editor.cxx:185
 TF1Editor.cxx:186
 TF1Editor.cxx:187
 TF1Editor.cxx:188
 TF1Editor.cxx:189
 TF1Editor.cxx:190
 TF1Editor.cxx:191
 TF1Editor.cxx:192
 TF1Editor.cxx:193
 TF1Editor.cxx:194
 TF1Editor.cxx:195
 TF1Editor.cxx:196
 TF1Editor.cxx:197
 TF1Editor.cxx:198
 TF1Editor.cxx:199
 TF1Editor.cxx:200
 TF1Editor.cxx:201
 TF1Editor.cxx:202
 TF1Editor.cxx:203
 TF1Editor.cxx:204
 TF1Editor.cxx:205
 TF1Editor.cxx:206
 TF1Editor.cxx:207
 TF1Editor.cxx:208
 TF1Editor.cxx:209
 TF1Editor.cxx:210
 TF1Editor.cxx:211
 TF1Editor.cxx:212
 TF1Editor.cxx:213
 TF1Editor.cxx:214
 TF1Editor.cxx:215
 TF1Editor.cxx:216
 TF1Editor.cxx:217
 TF1Editor.cxx:218
 TF1Editor.cxx:219
 TF1Editor.cxx:220
 TF1Editor.cxx:221
 TF1Editor.cxx:222
 TF1Editor.cxx:223
 TF1Editor.cxx:224
 TF1Editor.cxx:225
 TF1Editor.cxx:226
 TF1Editor.cxx:227
 TF1Editor.cxx:228
 TF1Editor.cxx:229
 TF1Editor.cxx:230
 TF1Editor.cxx:231
 TF1Editor.cxx:232
 TF1Editor.cxx:233
 TF1Editor.cxx:234
 TF1Editor.cxx:235
 TF1Editor.cxx:236
 TF1Editor.cxx:237
 TF1Editor.cxx:238
 TF1Editor.cxx:239
 TF1Editor.cxx:240
 TF1Editor.cxx:241
 TF1Editor.cxx:242
 TF1Editor.cxx:243
 TF1Editor.cxx:244
 TF1Editor.cxx:245
 TF1Editor.cxx:246
 TF1Editor.cxx:247
 TF1Editor.cxx:248
 TF1Editor.cxx:249
 TF1Editor.cxx:250
 TF1Editor.cxx:251
 TF1Editor.cxx:252
 TF1Editor.cxx:253
 TF1Editor.cxx:254
 TF1Editor.cxx:255
 TF1Editor.cxx:256
 TF1Editor.cxx:257
 TF1Editor.cxx:258
 TF1Editor.cxx:259
 TF1Editor.cxx:260
 TF1Editor.cxx:261
 TF1Editor.cxx:262
 TF1Editor.cxx:263
 TF1Editor.cxx:264
 TF1Editor.cxx:265
 TF1Editor.cxx:266
 TF1Editor.cxx:267
 TF1Editor.cxx:268
 TF1Editor.cxx:269
 TF1Editor.cxx:270
 TF1Editor.cxx:271
 TF1Editor.cxx:272
 TF1Editor.cxx:273
 TF1Editor.cxx:274
 TF1Editor.cxx:275
 TF1Editor.cxx:276
 TF1Editor.cxx:277
 TF1Editor.cxx:278
 TF1Editor.cxx:279
 TF1Editor.cxx:280
 TF1Editor.cxx:281
 TF1Editor.cxx:282
 TF1Editor.cxx:283
 TF1Editor.cxx:284
 TF1Editor.cxx:285
 TF1Editor.cxx:286
 TF1Editor.cxx:287
 TF1Editor.cxx:288
 TF1Editor.cxx:289
 TF1Editor.cxx:290
 TF1Editor.cxx:291
 TF1Editor.cxx:292
 TF1Editor.cxx:293
 TF1Editor.cxx:294
 TF1Editor.cxx:295
 TF1Editor.cxx:296
 TF1Editor.cxx:297
 TF1Editor.cxx:298
 TF1Editor.cxx:299
 TF1Editor.cxx:300
 TF1Editor.cxx:301
 TF1Editor.cxx:302
 TF1Editor.cxx:303
 TF1Editor.cxx:304
 TF1Editor.cxx:305
 TF1Editor.cxx:306
 TF1Editor.cxx:307
 TF1Editor.cxx:308
 TF1Editor.cxx:309
 TF1Editor.cxx:310
 TF1Editor.cxx:311
 TF1Editor.cxx:312
 TF1Editor.cxx:313
 TF1Editor.cxx:314
 TF1Editor.cxx:315
 TF1Editor.cxx:316
 TF1Editor.cxx:317
 TF1Editor.cxx:318
 TF1Editor.cxx:319
 TF1Editor.cxx:320
 TF1Editor.cxx:321
 TF1Editor.cxx:322
 TF1Editor.cxx:323
 TF1Editor.cxx:324
 TF1Editor.cxx:325
 TF1Editor.cxx:326
 TF1Editor.cxx:327
 TF1Editor.cxx:328
 TF1Editor.cxx:329
 TF1Editor.cxx:330
 TF1Editor.cxx:331
 TF1Editor.cxx:332
 TF1Editor.cxx:333
 TF1Editor.cxx:334
 TF1Editor.cxx:335
 TF1Editor.cxx:336
 TF1Editor.cxx:337
 TF1Editor.cxx:338
 TF1Editor.cxx:339
 TF1Editor.cxx:340
 TF1Editor.cxx:341
 TF1Editor.cxx:342
 TF1Editor.cxx:343
 TF1Editor.cxx:344