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 <cstdint>
4
5#include "TGFrame.h"
6#include "TRootEmbeddedCanvas.h"
7#include "TGStatusBar.h"
8#include "TGButton.h"
9#include "TGTripleSlider.h"
10#include "TGNumberEntry.h"
11#include "TGLabel.h"
12
13#include "TH2.h"
14#include "TF1.h"
15#include "TGraphErrors.h"
16
17/** \addtogroup GUI
18 * @{
19 */
20
21/////////////////////////////////////////////////////////////////
22///
23/// \class TCalibrateDescant
24///
25/// This class implements a GUI to fit and calibrate DESCANT.
26///
27/////////////////////////////////////////////////////////////////
29
30class TParameterInput : public TGHorizontalFrame {
31public:
32 explicit TParameterInput(TGVerticalFrame*& frame) : TGHorizontalFrame(frame, 400, 400) {}
34 TParameterInput(TParameterInput&&) noexcept = delete;
35 TParameterInput& operator=(const TParameterInput&) = delete;
36 TParameterInput& operator=(TParameterInput&&) noexcept = delete;
37 ~TParameterInput() = default;
38 TGHorizontalFrame* Build(const std::string& name, const Int_t& baseId, const Double_t& xmin, const Double_t& xmax);
39
40 Bool_t ProcessMessage(Long_t msg, Long_t parameter1, Long_t parameter2) override;
41
42 double Value() const { return fEntry->GetNumber(); }
43 double LowLimit() const { return fEntryLow->GetNumber(); }
44 double HighLimit() const { return fEntryHigh->GetNumber(); }
45
46 const char* Name() const { return fLabel->GetTitle(); }
47
48 void Set(double val);
49 void Set(double val, double low, double high);
50
51 void UpdateSlider();
52 void UpdateEntries();
53
54 void Connect(TCalibrateDescant* parent);
55
56private:
57 void PrintStatus(const char*);
58
59 Int_t fBaseId{-1};
60
61 TGLabel* fLabel{nullptr};
62 TGTripleHSlider* fSlider{nullptr};
63 TGNumberEntry* fEntry{nullptr};
64 TGNumberEntry* fEntryLow{nullptr};
65 TGNumberEntry* fEntryHigh{nullptr};
66};
67
68class TCalibrateDescant : public TGMainFrame {
69public:
70 enum class ESourceType : std::uint8_t { k22NaLow,
74 k60Co,
75 k137Cs,
80 k241Am };
97
98 explicit TCalibrateDescant(TH2* hist, const ESourceType& source = ESourceType::k137Cs);
101 TCalibrateDescant& operator=(const TCalibrateDescant&) = delete;
102 TCalibrateDescant& operator=(TCalibrateDescant&&) noexcept = delete;
103 ~TCalibrateDescant() = default;
104
105 Bool_t ProcessMessage(Long_t msg, Long_t parameter1, Long_t parameter2) override;
106
107 void Previous();
108 void Next();
109 void Fit();
110 void ResetFit();
112 void Save();
113 void Status(Int_t px, Int_t py, Int_t pz, TObject* selected);
114 void FitCanvasZoomed();
117
118private:
119 void BuildInterface();
120 void MakeConnections();
122 void UpdateInterface();
123 void AddCalibrationPoint(double value, double uncertainty);
125
126 TH2* fMatrix{nullptr};
128 std::vector<TH1D*> fProjections;
129 std::vector<TGraphErrors*> fCalibrations;
130 TF1* fInitial{nullptr};
131 TF1* fFit{nullptr};
132 TF1* fEdge{nullptr};
133 TF1* fPeak{nullptr};
134 TF1* fNoise{nullptr};
135 TF1* fBg{nullptr};
136
138
139 TGVerticalFrame* fLeftFrame{nullptr};
140 TGVerticalFrame* fRightFrame{nullptr};
141
142 TRootEmbeddedCanvas* fFitCanvas{nullptr};
143 TRootEmbeddedCanvas* fCalibrationCanvas{nullptr};
144 TGStatusBar* fStatusBar{nullptr};
145
162
163 TGHorizontalFrame* fTopButtonFrame{nullptr};
164 TGHorizontalFrame* fBottomButtonFrame{nullptr};
165
166 TGTextButton* fPreviousButton{nullptr};
167 TGTextButton* fFitButton{nullptr};
168 TGTextButton* fNextButton{nullptr};
169 TGTextButton* fResetFitButton{nullptr};
170 TGTextButton* fUpdateInitialButton{nullptr};
171 TGTextButton* fSaveButton{nullptr};
172
173 /// \cond CLASSIMP
174 ClassDefOverride(TCalibrateDescant, 1) // NOLINT(readability-else-after-return)
175 /// \endcond
176};
177
178double MaximumRecoilEnergy(double gammaEnergy);
179double SourceEnergy(const TCalibrateDescant::ESourceType& source);
181double FullEdge(double* x, double* par);
182/*! @} */
183#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)