ROOT logo
#ifndef FITONEDIMDIALOG
#define FITONEDIMDIALOG
#include "TGraph.h"
#include "TH1.h"
#include "TVirtualPad.h"
#include "TPad.h"
#include "TRootCanvas.h"
#include "TString.h"
#include "FhMarker.h"
#include "TGMrbValuesAndText.h"
//_____________________________________________________________________________________


class FitOneDimDialog : public TObject {

private:
   TRootCanvas* fParentWindow;
   TGMrbValuesAndText *fDialog;
   TString fFuncName;
   Int_t   fFuncNumber;
   TString fFuncFromFile;
   TCanvas *fSelPad;
   TH1     *fSelHist;
   TF1     *fCalFunc;
   TF1     *fFitFunc;
   TGraph  *fGraph;
   Color_t fColor;
   Width_t fWidth;
   Style_t fStyle;
   TString fName;
   TString fGausFuncName;
   TString fExpFuncName;
   TString fPolFuncName;
   TString fFormFuncName;
   TString fFormula;
   FhMarkerList * fMarkers;
   Double_t fFrom;
   Double_t fTo;
   Double_t fMean;
   Double_t fMeanError;
   Double_t fConstant;
   Double_t fExpA;
   Double_t fExpB;
   Double_t fExpC;
   Double_t fExpO;     // Offset
//   Double_t fExpD;
   Int_t fExpFixA;
   Int_t fExpFixB;
   Int_t fExpFixC;
   Int_t fExpFixO;
//   Int_t fExpFixD;
   Int_t fPolN;
   Double_t fPolPar[6];
   Int_t    fPolFixPar[6];
   Double_t fFormPar[6];
   Int_t    fFormFixPar[6];

   Int_t    fAdded;
   Double_t fLinBgConst;
   Double_t fLinBgSlope;
   Bool_t   fLinBgSet;
   Int_t fUseoldpars;        // use parameters of previous fit
   Int_t fUsedbg;            // use prederminated linear background
   Int_t fNpeaks;            // number peaks used
   Int_t fReqNmarks;
   Int_t fNmarks;
   Int_t fNevents;
   Int_t fNsegsGraph;        // Number of segments (np - 1) of a graph
   Int_t fFitOptAddAll;      // Add all fitted functions to histogram
   Bool_t fFitPeakListDone;
   Int_t fAutoClearMarks;    // Clear marks after fit
// The following parameters should be set with "FitPeakList"
   Int_t    fInteractive;    // Run interactivly, ie. really present dialog widgets
   Double_t fPeakSep;        // if peaks are closer (unit of sigma) they are fitted together
   Double_t fFitWindow;      // Fit window: peak pos += fFitWindow
   Int_t fBackg0;            // Force background = 0
   Int_t fSlope0;            // Force background slope = 0 (use constant background)
   Int_t fOnesig;            // Use same sigma for all peaks ( if fittted together)
   Int_t fGaussOnly;         // Pure gauss function, no tail
   Int_t fGaussTail;         // Pure gauss + tail function
   Int_t fTailOnly;          // Pure tail function, no gauss
   Int_t fLowtail;           // Use low tail
   Int_t fHightail;          // Use high tail
   Int_t fShowcof;           // Display components of fit
   Double_t fMeanBond;       // Bind variation of gauss mean +- this value
   Int_t fConfirmStartValues;// Present a widget with start values before fitting
   Int_t fPrintStartValues;  // Print start values
   Int_t fFitOptLikelihood;  // Use Likelihood method (default chi2)
   Int_t fFitOptQuiet;       // Suppress printout during fitting
   Int_t fFitOptOneLine;     // One line / peak
   Int_t fFitOptVerbose;     // Verbose printout during fitting
   Int_t fFitOptMinos;       // Use minos to improve fit after migrad
   Int_t fFitOptErrors1;     // Set all errors to 1`
   Int_t fFitOptIntegral;    // Use integral of bin
   Int_t fFitOptNoDraw;      // dont draw fit result
   Int_t fFitPrintCovariance;// Print Correlation matrix (normalized covariance)
   Int_t   fNpeaksList;
   Int_t   fNpeaksListIndex;
   TArrayD fConstantList;
   TArrayD fMeanList;
   TArrayD fSigmaList;
   TArrayD fChi2List;
   
public:   
	enum EFitHistBits {
		 kSelected = BIT(15)
	};

public:
   FitOneDimDialog(TH1 * hist, Int_t type = 1, Int_t interactive = 1);
   FitOneDimDialog(TGraph * graph, Int_t type = 1, Int_t interactive = 1);
   void DisplayMenu(Int_t type = 1);
   virtual ~FitOneDimDialog();
   void RecursiveRemove(TObject * obj);
   Bool_t FitPeakList();
   Bool_t FitGausExecute();
   void FitExpExecute();
   void DrawExpExecute();
   void CalcStartParExp();
   void ExpExecute(Int_t draw_only = 0);
   void FitPolExecute();
   void DrawPolExecute();
   void PolExecute(Int_t draw_only = 0);
   void PrintCorrelation();
   void AddPeaktoList(TF1 *func);
   Double_t GetParValue(const char * pname);
   void PrintPeakList();
   void FitFormExecute();
   void DrawFormExecute();
   void GraphFormExecute();
   void FormExecute(Int_t draw_only = 0);
   void FillHistRandom();
   TH1  *FindHistInPad();
//   void AddToCalibration();
   void SetFitOptions(){};
   Int_t GetMaxBin(TH1 * h1, Int_t binl, Int_t binu);
   void GetGaussEstimate(TH1 *h, Double_t from, Double_t to,
                         Double_t bg,TArrayD & par);
   void GetGaussEstimate(TGraph *g, Double_t from, Double_t to,
                         Double_t bg,TArrayD & par);
   void DetLinearBackground();
   Int_t GetMarkers();
   void ClearMarkers();
   void ClearFunctionList();
   void WriteoutFunction();
   void PrintMarkers();
   Int_t SetMarkers();
   void SetFittingOptions();
   Bool_t FitPeakListDone() { return fFitPeakListDone; };
   void SaveDefaults();
   void RestoreDefaults();
   void CloseDialog();
   void CloseDown(Int_t wid);
   void IncrementIndex(TString * arg);
   void SaveFunction();
   void GetFunction();
   void ExecuteGetFunction();
   void GetSelectedFunction();
   void SetStartParameters();
//
   void SetPeakSep( Double_t peaksep) { fPeakSep = peaksep; };
   void SetFitWindow( Double_t fitwindow) { fFitWindow = fitwindow; };
   void SetUseoldpars( Int_t useoldpars) { fUseoldpars = useoldpars; };
   void SetUsedbg( Int_t usedbg) { fUsedbg = usedbg; };
   void SetNpeaks( Int_t npeaks) { fNpeaks = npeaks; };
   void SetReqNmarks( Int_t reqnmarks) { fReqNmarks = reqnmarks; };
   void SetNmarks( Int_t nmarks) { fNmarks = nmarks; };
   void SetNevents( Int_t nevents) { fNevents = nevents; };
   void SetBackg0( Int_t backg0) { fBackg0 = backg0; };
   void SetSlope0( Int_t slope0) { fSlope0 = slope0; };
   void SetOnesig( Int_t onesig) { fOnesig = onesig; };
   void SetLowtail( Int_t lowtail) { fLowtail = lowtail; };
   void SetHightail( Int_t hightail) { fHightail = hightail; };
   void SetShowcof( Int_t showcof) { fShowcof = showcof; };
   void SetAutoClearMarks( Int_t autoclearmarks) { fAutoClearMarks = autoclearmarks; };
   void SetConfirmStartValues( Int_t confirmstartvalues) { fConfirmStartValues = confirmstartvalues; };
   void SetFitOptLikelihood( Int_t fitoptlikelihood) { fFitOptLikelihood = fitoptlikelihood; };
   void SetFitOptQuiet( Int_t fitoptquiet) { fFitOptQuiet = fitoptquiet; };
   void SetFitOptOneLine( Int_t val) {fFitOptOneLine  = val; };
   void SetFitOptVerbose( Int_t fitoptverbose) { fFitOptVerbose = fitoptverbose; };
   void SetFitOptMinos( Int_t fitoptminos) { fFitOptMinos = fitoptminos; };
   void SetFitOptErrors1( Int_t fitopterrors1) { fFitOptErrors1 = fitopterrors1; };
   void SetFitOptIntegral( Int_t fitoptintegral) { fFitOptIntegral = fitoptintegral; };
   void SetFitOptNoDraw( Int_t fitoptnodraw) { fFitOptNoDraw = fitoptnodraw; };
   void SetFitOptAddAll( Int_t fitoptaddall) { fFitOptAddAll = fitoptaddall; };
   void SetFitPrintCovariance( Int_t fitprintcovariance) { fFitPrintCovariance = fitprintcovariance; };
//
   Double_t GetPeakSep() { return fPeakSep; };
   Double_t GetFitWindow() { return fFitWindow; };
   Int_t GetUseoldpars() { return fUseoldpars; };
   Int_t GetUsedbg() { return fUsedbg; };
   Int_t GetNpeaks() { return fNpeaks; };
   Int_t GetReqNmarks() { return fReqNmarks; };
   Int_t GetNmarks() { return fNmarks; };
   Int_t GetNevents() { return fNevents; };
   Int_t GetBackg0() { return fBackg0; };
   Int_t GetSlope0() { return fSlope0; };
   Int_t GetOnesig() { return fOnesig; };
   Int_t GetLowtail() { return fLowtail; };
   Int_t GetHightail() { return fHightail; };
   Int_t GetShowcof() { return fShowcof; };
   Int_t GetAutoClearMarks() { return fAutoClearMarks; };
   Int_t GetConfirmStartValues() { return fConfirmStartValues; };
   Int_t GetFitOptLikelihood() { return fFitOptLikelihood; };
   Int_t GetFitOptQuiet() { return fFitOptQuiet; };
   Int_t GetFitOptOneLine() {return fFitOptOneLine; };
   Int_t GetFitOptVerbose() { return fFitOptVerbose; };
   Int_t GetFitOptMinos() { return fFitOptMinos; };
   Int_t GetFitOptErrors1() { return fFitOptErrors1; };
   Int_t GetFitOptIntegral() { return fFitOptIntegral; };
   Int_t GetFitOptNoDraw() { return fFitOptNoDraw; };
   Int_t GetFitOptAddAll() { return fFitOptAddAll; };
   Int_t GetFitPrintCovariance() { return fFitPrintCovariance; };
   void CRButtonPressed(Int_t, Int_t, TObject *){};
	void Check4Reselect();
ClassDef(FitOneDimDialog,0)
};
#endif
 FitOneDimDialog.h:1
 FitOneDimDialog.h:2
 FitOneDimDialog.h:3
 FitOneDimDialog.h:4
 FitOneDimDialog.h:5
 FitOneDimDialog.h:6
 FitOneDimDialog.h:7
 FitOneDimDialog.h:8
 FitOneDimDialog.h:9
 FitOneDimDialog.h:10
 FitOneDimDialog.h:11
 FitOneDimDialog.h:12
 FitOneDimDialog.h:13
 FitOneDimDialog.h:14
 FitOneDimDialog.h:15
 FitOneDimDialog.h:16
 FitOneDimDialog.h:17
 FitOneDimDialog.h:18
 FitOneDimDialog.h:19
 FitOneDimDialog.h:20
 FitOneDimDialog.h:21
 FitOneDimDialog.h:22
 FitOneDimDialog.h:23
 FitOneDimDialog.h:24
 FitOneDimDialog.h:25
 FitOneDimDialog.h:26
 FitOneDimDialog.h:27
 FitOneDimDialog.h:28
 FitOneDimDialog.h:29
 FitOneDimDialog.h:30
 FitOneDimDialog.h:31
 FitOneDimDialog.h:32
 FitOneDimDialog.h:33
 FitOneDimDialog.h:34
 FitOneDimDialog.h:35
 FitOneDimDialog.h:36
 FitOneDimDialog.h:37
 FitOneDimDialog.h:38
 FitOneDimDialog.h:39
 FitOneDimDialog.h:40
 FitOneDimDialog.h:41
 FitOneDimDialog.h:42
 FitOneDimDialog.h:43
 FitOneDimDialog.h:44
 FitOneDimDialog.h:45
 FitOneDimDialog.h:46
 FitOneDimDialog.h:47
 FitOneDimDialog.h:48
 FitOneDimDialog.h:49
 FitOneDimDialog.h:50
 FitOneDimDialog.h:51
 FitOneDimDialog.h:52
 FitOneDimDialog.h:53
 FitOneDimDialog.h:54
 FitOneDimDialog.h:55
 FitOneDimDialog.h:56
 FitOneDimDialog.h:57
 FitOneDimDialog.h:58
 FitOneDimDialog.h:59
 FitOneDimDialog.h:60
 FitOneDimDialog.h:61
 FitOneDimDialog.h:62
 FitOneDimDialog.h:63
 FitOneDimDialog.h:64
 FitOneDimDialog.h:65
 FitOneDimDialog.h:66
 FitOneDimDialog.h:67
 FitOneDimDialog.h:68
 FitOneDimDialog.h:69
 FitOneDimDialog.h:70
 FitOneDimDialog.h:71
 FitOneDimDialog.h:72
 FitOneDimDialog.h:73
 FitOneDimDialog.h:74
 FitOneDimDialog.h:75
 FitOneDimDialog.h:76
 FitOneDimDialog.h:77
 FitOneDimDialog.h:78
 FitOneDimDialog.h:79
 FitOneDimDialog.h:80
 FitOneDimDialog.h:81
 FitOneDimDialog.h:82
 FitOneDimDialog.h:83
 FitOneDimDialog.h:84
 FitOneDimDialog.h:85
 FitOneDimDialog.h:86
 FitOneDimDialog.h:87
 FitOneDimDialog.h:88
 FitOneDimDialog.h:89
 FitOneDimDialog.h:90
 FitOneDimDialog.h:91
 FitOneDimDialog.h:92
 FitOneDimDialog.h:93
 FitOneDimDialog.h:94
 FitOneDimDialog.h:95
 FitOneDimDialog.h:96
 FitOneDimDialog.h:97
 FitOneDimDialog.h:98
 FitOneDimDialog.h:99
 FitOneDimDialog.h:100
 FitOneDimDialog.h:101
 FitOneDimDialog.h:102
 FitOneDimDialog.h:103
 FitOneDimDialog.h:104
 FitOneDimDialog.h:105
 FitOneDimDialog.h:106
 FitOneDimDialog.h:107
 FitOneDimDialog.h:108
 FitOneDimDialog.h:109
 FitOneDimDialog.h:110
 FitOneDimDialog.h:111
 FitOneDimDialog.h:112
 FitOneDimDialog.h:113
 FitOneDimDialog.h:114
 FitOneDimDialog.h:115
 FitOneDimDialog.h:116
 FitOneDimDialog.h:117
 FitOneDimDialog.h:118
 FitOneDimDialog.h:119
 FitOneDimDialog.h:120
 FitOneDimDialog.h:121
 FitOneDimDialog.h:122
 FitOneDimDialog.h:123
 FitOneDimDialog.h:124
 FitOneDimDialog.h:125
 FitOneDimDialog.h:126
 FitOneDimDialog.h:127
 FitOneDimDialog.h:128
 FitOneDimDialog.h:129
 FitOneDimDialog.h:130
 FitOneDimDialog.h:131
 FitOneDimDialog.h:132
 FitOneDimDialog.h:133
 FitOneDimDialog.h:134
 FitOneDimDialog.h:135
 FitOneDimDialog.h:136
 FitOneDimDialog.h:137
 FitOneDimDialog.h:138
 FitOneDimDialog.h:139
 FitOneDimDialog.h:140
 FitOneDimDialog.h:141
 FitOneDimDialog.h:142
 FitOneDimDialog.h:143
 FitOneDimDialog.h:144
 FitOneDimDialog.h:145
 FitOneDimDialog.h:146
 FitOneDimDialog.h:147
 FitOneDimDialog.h:148
 FitOneDimDialog.h:149
 FitOneDimDialog.h:150
 FitOneDimDialog.h:151
 FitOneDimDialog.h:152
 FitOneDimDialog.h:153
 FitOneDimDialog.h:154
 FitOneDimDialog.h:155
 FitOneDimDialog.h:156
 FitOneDimDialog.h:157
 FitOneDimDialog.h:158
 FitOneDimDialog.h:159
 FitOneDimDialog.h:160
 FitOneDimDialog.h:161
 FitOneDimDialog.h:162
 FitOneDimDialog.h:163
 FitOneDimDialog.h:164
 FitOneDimDialog.h:165
 FitOneDimDialog.h:166
 FitOneDimDialog.h:167
 FitOneDimDialog.h:168
 FitOneDimDialog.h:169
 FitOneDimDialog.h:170
 FitOneDimDialog.h:171
 FitOneDimDialog.h:172
 FitOneDimDialog.h:173
 FitOneDimDialog.h:174
 FitOneDimDialog.h:175
 FitOneDimDialog.h:176
 FitOneDimDialog.h:177
 FitOneDimDialog.h:178
 FitOneDimDialog.h:179
 FitOneDimDialog.h:180
 FitOneDimDialog.h:181
 FitOneDimDialog.h:182
 FitOneDimDialog.h:183
 FitOneDimDialog.h:184
 FitOneDimDialog.h:185
 FitOneDimDialog.h:186
 FitOneDimDialog.h:187
 FitOneDimDialog.h:188
 FitOneDimDialog.h:189
 FitOneDimDialog.h:190
 FitOneDimDialog.h:191
 FitOneDimDialog.h:192
 FitOneDimDialog.h:193
 FitOneDimDialog.h:194
 FitOneDimDialog.h:195
 FitOneDimDialog.h:196
 FitOneDimDialog.h:197
 FitOneDimDialog.h:198
 FitOneDimDialog.h:199
 FitOneDimDialog.h:200
 FitOneDimDialog.h:201
 FitOneDimDialog.h:202
 FitOneDimDialog.h:203
 FitOneDimDialog.h:204
 FitOneDimDialog.h:205
 FitOneDimDialog.h:206
 FitOneDimDialog.h:207
 FitOneDimDialog.h:208
 FitOneDimDialog.h:209
 FitOneDimDialog.h:210
 FitOneDimDialog.h:211
 FitOneDimDialog.h:212
 FitOneDimDialog.h:213
 FitOneDimDialog.h:214
 FitOneDimDialog.h:215
 FitOneDimDialog.h:216
 FitOneDimDialog.h:217
 FitOneDimDialog.h:218