GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TCalibrateDescant.h
Go to the documentation of this file.
1#ifndef TCALIBRATEDESCANT_H
2#define TCALIBRATEDESCANT_H
3#include "TGFrame.h"
4#include "TRootEmbeddedCanvas.h"
5#include "TGStatusBar.h"
6#include "TGButton.h"
7#include "TGTripleSlider.h"
8#include "TGNumberEntry.h"
9#include "TGLabel.h"
10
11#include "TH1D.h"
12#include "TH2.h"
13#include "TF1.h"
14#include "TGraphErrors.h"
15#include "TMath.h"
16
17#include "GCanvas.h"
18
19/** \addtogroup GUI
20 * @{
21 */
22
23/////////////////////////////////////////////////////////////////
24///
25/// \class TCalibrateDescant
26///
27/// This class implements a GUI to fit and calibrate DESCANT.
28///
29/////////////////////////////////////////////////////////////////
31
32class TParameterInput : public TGHorizontalFrame {
33public:
34 explicit TParameterInput(TGVerticalFrame*& frame) : TGHorizontalFrame(frame, 400, 400) {}
36 TParameterInput(TParameterInput&&) noexcept = delete;
37 TParameterInput& operator=(const TParameterInput&) = delete;
38 TParameterInput& operator=(TParameterInput&&) noexcept = delete;
39 ~TParameterInput() = default;
40 TGHorizontalFrame* Build(const std::string& name, const Int_t& baseId, const Double_t& xmin, const Double_t& xmax);
41
42 Bool_t ProcessMessage(Long_t msg, Long_t parameter1, Long_t parameter2) override;
43
44 double Value() const { return fEntry->GetNumber(); }
45 double LowLimit() const { return fEntryLow->GetNumber(); }
46 double HighLimit() const { return fEntryHigh->GetNumber(); }
47
48 const char* Name() const { return fLabel->GetTitle(); }
49
50 void Set(double val);
51 void Set(double val, double low, double high);
52
53 void UpdateSlider();
54 void UpdateEntries();
55
56 void Connect(TCalibrateDescant* parent);
57
58private:
59 void PrintStatus(const char*);
60
61 Int_t fBaseId{-1};
62
63 TGLabel* fLabel{nullptr};
64 TGTripleHSlider* fSlider{nullptr};
65 TGNumberEntry* fEntry{nullptr};
66 TGNumberEntry* fEntryLow{nullptr};
67 TGNumberEntry* fEntryHigh{nullptr};
68};
69
70class TCalibrateDescant : public TGMainFrame {
71public:
72 enum class ESourceType { k22NaLow,
76 k60Co,
77 k137Cs,
82 k241Am };
99
100 explicit TCalibrateDescant(TH2* hist, const ESourceType& source = ESourceType::k137Cs);
103 TCalibrateDescant& operator=(const TCalibrateDescant&) = delete;
104 TCalibrateDescant& operator=(TCalibrateDescant&&) noexcept = delete;
105 ~TCalibrateDescant() = default;
106
107 Bool_t ProcessMessage(Long_t msg, Long_t parameter1, Long_t parameter2) override;
108
109 void Previous();
110 void Next();
111 void Fit();
112 void ResetFit();
114 void Save();
115 void Status(Int_t px, Int_t py, Int_t pz, TObject* selected);
116 void FitCanvasZoomed();
119
120private:
121 void BuildInterface();
122 void MakeConnections();
124 void UpdateInterface();
125 void AddCalibrationPoint(double value, double uncertainty);
127
128 TH2* fMatrix{nullptr};
130 std::vector<TH1D*> fProjections;
131 std::vector<TGraphErrors*> fCalibrations;
132 TF1* fInitial{nullptr};
133 TF1* fFit{nullptr};
134 TF1* fEdge{nullptr};
135 TF1* fPeak{nullptr};
136 TF1* fNoise{nullptr};
137 TF1* fBg{nullptr};
138
140
141 TGVerticalFrame* fLeftFrame{nullptr};
142 TGVerticalFrame* fRightFrame{nullptr};
143
144 TRootEmbeddedCanvas* fFitCanvas{nullptr};
145 TRootEmbeddedCanvas* fCalibrationCanvas{nullptr};
146 TGStatusBar* fStatusBar{nullptr};
147
164
165 TGHorizontalFrame* fTopButtonFrame{nullptr};
166 TGHorizontalFrame* fBottomButtonFrame{nullptr};
167
168 TGTextButton* fPreviousButton{nullptr};
169 TGTextButton* fFitButton{nullptr};
170 TGTextButton* fNextButton{nullptr};
171 TGTextButton* fResetFitButton{nullptr};
172 TGTextButton* fUpdateInitialButton{nullptr};
173 TGTextButton* fSaveButton{nullptr};
174
175 /// \cond CLASSIMP
176 ClassDefOverride(TCalibrateDescant, 1) // NOLINT(readability-else-after-return)
177 /// \endcond
178};
179
180double MaximumRecoilEnergy(double gammaEnergy);
181double SourceEnergy(const TCalibrateDescant::ESourceType& source);
183double FullEdge(double* x, double* par);
184/*! @} */
185#endif
TH1D * hist
Definition UserFillObj.h:3
TParameterInput * fPeakPos
TParameterInput * fNoiseAmp
TParameterInput * fPosition
TCalibrateDescant(TH2 *hist, const ESourceType &source=ESourceType::k137Cs)
TParameterInput * fPeakSigma
TCalibrateDescant(TCalibrateDescant &&) noexcept=delete
TGStatusBar * fStatusBar
TGTextButton * fFitButton
TGVerticalFrame * fLeftFrame
void AddCalibrationPoint(double value, double uncertainty)
TParameterInput * fSigma
TGTextButton * fPreviousButton
TGHorizontalFrame * fTopButtonFrame
TParameterInput * fBgDecayConst
TGHorizontalFrame * fBottomButtonFrame
TParameterInput * fBgAmp
TParameterInput * fThresholdSigma
std::vector< TH1D * > fProjections
TGTextButton * fSaveButton
TGTextButton * fUpdateInitialButton
TCalibrateDescant(const TCalibrateDescant &)=delete
TParameterInput * fBgConst
TParameterInput * fAmplitude
TRootEmbeddedCanvas * fFitCanvas
TGTextButton * fResetFitButton
TParameterInput * fDSigma
std::vector< TGraphErrors * > fCalibrations
TParameterInput * fPeakAmp
Bool_t ProcessMessage(Long_t msg, Long_t parameter1, Long_t parameter2) override
TGVerticalFrame * fRightFrame
TRootEmbeddedCanvas * fCalibrationCanvas
TGTextButton * fNextButton
TParameterInput * fNoisePos
TParameterInput * fCutoff
void Status(Int_t px, Int_t py, Int_t pz, TObject *selected)
TParameterInput * fThreshold
TParameterInput * fNoiseSigma
TGNumberEntry * fEntry
TGNumberEntry * fEntryLow
TGNumberEntry * fEntryHigh
TGTripleHSlider * fSlider
double HighLimit() const
const char * Name() const
void Connect(TCalibrateDescant *parent)
TParameterInput(const TParameterInput &)=delete
TParameterInput(TParameterInput &&) noexcept=delete
TGHorizontalFrame * Build(const std::string &name, const Int_t &baseId, const Double_t &xmin, const Double_t &xmax)
Bool_t ProcessMessage(Long_t msg, Long_t parameter1, Long_t parameter2) override
double Value() const
double LowLimit() const
void PrintStatus(const char *)
void Set(double val)
TParameterInput(TGVerticalFrame *&frame)
double SourceEnergyUncertainty(const TCalibrateDescant::ESourceType &source)
double FullEdge(double *x, double *par)
double SourceEnergy(const TCalibrateDescant::ESourceType &source)
double MaximumRecoilEnergy(double gammaEnergy)