switched PMusrCanvas where possible to smart pointers.
This commit is contained in:
parent
93754a9fc2
commit
dbfadc4e42
@ -119,7 +119,6 @@ ClassImpQ(PMusrCanvas)
|
||||
PMusrCanvas::PMusrCanvas()
|
||||
{
|
||||
fTimeout = 0;
|
||||
fTimeoutTimer = nullptr;
|
||||
|
||||
fScaleN0AndBkg = true;
|
||||
fValid = false;
|
||||
@ -134,16 +133,6 @@ PMusrCanvas::PMusrCanvas()
|
||||
fImp = nullptr;
|
||||
fBar = nullptr;
|
||||
fPopupMain = nullptr;
|
||||
fPopupFourier = nullptr;
|
||||
|
||||
fStyle = nullptr;
|
||||
fMainCanvas = nullptr;
|
||||
fTitlePad = nullptr;
|
||||
fDataTheoryPad = nullptr;
|
||||
fParameterPad = nullptr;
|
||||
fTheoryPad = nullptr;
|
||||
fInfoPad = nullptr;
|
||||
fMultiGraphLegend = nullptr;
|
||||
|
||||
fHistoFrame = nullptr;
|
||||
|
||||
@ -153,11 +142,6 @@ PMusrCanvas::PMusrCanvas()
|
||||
InitFourier();
|
||||
InitAverage();
|
||||
|
||||
fCurrentFourierPhaseText = nullptr;
|
||||
|
||||
fRRFText = nullptr;
|
||||
fRRFLatexText = nullptr;
|
||||
|
||||
fXRangePresent = false;
|
||||
fYRangePresent = false;
|
||||
fXmin = 0.0;
|
||||
@ -193,7 +177,6 @@ PMusrCanvas::PMusrCanvas(const Int_t number, const Char_t* title,
|
||||
fBatchMode(batch), fPlotNumber(number)
|
||||
{
|
||||
fTimeout = 0;
|
||||
fTimeoutTimer = nullptr;
|
||||
fAveragedView = false;
|
||||
|
||||
fMultiGraphData = nullptr;
|
||||
@ -206,11 +189,6 @@ PMusrCanvas::PMusrCanvas(const Int_t number, const Char_t* title,
|
||||
CreateStyle();
|
||||
InitMusrCanvas(title, wtopx, wtopy, ww, wh);
|
||||
|
||||
fCurrentFourierPhaseText = nullptr;
|
||||
|
||||
fRRFText = nullptr;
|
||||
fRRFLatexText = nullptr;
|
||||
|
||||
fXRangePresent = false;
|
||||
fYRangePresent = false;
|
||||
fXmin = 0.0;
|
||||
@ -252,7 +230,6 @@ PMusrCanvas::PMusrCanvas(const Int_t number, const Char_t* title,
|
||||
fMarkerList(markerList), fColorList(colorList)
|
||||
{
|
||||
fTimeout = 0;
|
||||
fTimeoutTimer = nullptr;
|
||||
|
||||
fMultiGraphData = nullptr;
|
||||
fMultiGraphDiff = nullptr;
|
||||
@ -263,11 +240,6 @@ PMusrCanvas::PMusrCanvas(const Int_t number, const Char_t* title,
|
||||
CreateStyle();
|
||||
InitMusrCanvas(title, wtopx, wtopy, ww, wh);
|
||||
|
||||
fCurrentFourierPhaseText = nullptr;
|
||||
|
||||
fRRFText = nullptr;
|
||||
fRRFLatexText = nullptr;
|
||||
|
||||
fXRangePresent = false;
|
||||
fYRangePresent = false;
|
||||
fXmin = 0.0;
|
||||
@ -287,31 +259,6 @@ PMusrCanvas::PMusrCanvas(const Int_t number, const Char_t* title,
|
||||
PMusrCanvas::~PMusrCanvas()
|
||||
{
|
||||
// cleanup
|
||||
if (fTimeoutTimer) {
|
||||
delete fTimeoutTimer;
|
||||
fTimeoutTimer = nullptr;
|
||||
}
|
||||
if (fCurrentFourierPhaseText) {
|
||||
delete fCurrentFourierPhaseText;
|
||||
fCurrentFourierPhaseText = nullptr;
|
||||
}
|
||||
if (fRRFLatexText) {
|
||||
delete fRRFLatexText;
|
||||
fRRFLatexText = nullptr;
|
||||
}
|
||||
if (fRRFText) {
|
||||
delete fRRFText;
|
||||
fRRFText = nullptr;
|
||||
}
|
||||
if (fStyle) {
|
||||
delete fStyle;
|
||||
fStyle = nullptr;
|
||||
}
|
||||
if (fTitlePad) {
|
||||
fTitlePad->Clear();
|
||||
delete fTitlePad;
|
||||
fTitlePad = nullptr;
|
||||
}
|
||||
if (fData.size() > 0) {
|
||||
for (UInt_t i=0; i<fData.size(); i++)
|
||||
CleanupDataSet(fData[i]);
|
||||
@ -322,11 +269,6 @@ PMusrCanvas::~PMusrCanvas()
|
||||
CleanupDataSet(fNonMusrData[i]);
|
||||
fNonMusrData.clear();
|
||||
}
|
||||
if (fMultiGraphLegend) {
|
||||
fMultiGraphLegend->Clear();
|
||||
delete fMultiGraphLegend;
|
||||
fMultiGraphLegend = nullptr;
|
||||
}
|
||||
if (fMultiGraphData) {
|
||||
delete fMultiGraphData;
|
||||
fMultiGraphData = nullptr;
|
||||
@ -335,29 +277,6 @@ PMusrCanvas::~PMusrCanvas()
|
||||
delete fMultiGraphDiff;
|
||||
fMultiGraphDiff = nullptr;
|
||||
}
|
||||
if (fDataTheoryPad) {
|
||||
delete fDataTheoryPad;
|
||||
fDataTheoryPad = nullptr;
|
||||
}
|
||||
if (fParameterPad) {
|
||||
fParameterPad->Clear();
|
||||
delete fParameterPad;
|
||||
fParameterPad = nullptr;
|
||||
}
|
||||
if (fTheoryPad) {
|
||||
fTheoryPad->Clear();
|
||||
delete fTheoryPad;
|
||||
fTheoryPad = nullptr;
|
||||
}
|
||||
if (fInfoPad) {
|
||||
fInfoPad->Clear();
|
||||
delete fInfoPad;
|
||||
fInfoPad = nullptr;
|
||||
}
|
||||
if (fMainCanvas) {
|
||||
delete fMainCanvas;
|
||||
fMainCanvas = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
@ -409,7 +328,7 @@ void PMusrCanvas::SetMsrHandler(PMsrHandler *msrHandler)
|
||||
(fMsrHandler->GetMsrPlotList()->at(0).fRRFFreq != 0.0)) ||
|
||||
(fMsrHandler->GetMsrGlobal()->GetRRFPacking() > 0 &&
|
||||
fMsrHandler->GetMsrGlobal()->GetRRFUnit().CompareTo("??"))) {
|
||||
fRRFLatexText = new TLatex();
|
||||
fRRFLatexText = std::make_unique<TLatex>();
|
||||
fRRFLatexText->SetNDC(kTRUE);
|
||||
fRRFLatexText->SetTextFont(62);
|
||||
fRRFLatexText->SetTextSize(0.03);
|
||||
@ -417,7 +336,7 @@ void PMusrCanvas::SetMsrHandler(PMsrHandler *msrHandler)
|
||||
Int_t rrfUnitTag = -1;
|
||||
Double_t rrfFreq = 0.0;
|
||||
if (fMsrHandler->GetMsrPlotList()->at(0).fRRFPacking > 0) { // RRF single histo PLOT
|
||||
fRRFText = new TString("RRF: ");
|
||||
fRRFText = std::make_unique<TString>("RRF: ");
|
||||
rrfUnitTag = fMsrHandler->GetMsrPlotList()->at(0).fRRFUnit;
|
||||
rrfFreq = fMsrHandler->GetMsrPlotList()->at(0).fRRFFreq;
|
||||
TString rrfFreqStr("");
|
||||
@ -446,7 +365,7 @@ void PMusrCanvas::SetMsrHandler(PMsrHandler *msrHandler)
|
||||
*fRRFText += TString(", RRF packing = ");
|
||||
*fRRFText += fMsrHandler->GetMsrPlotList()->at(0).fRRFPacking;
|
||||
} else { // RRF single histo FIT
|
||||
fRRFText = new TString("RRF: ");
|
||||
fRRFText = std::make_unique<TString>("RRF: ");
|
||||
rrfUnitTag = fMsrHandler->GetMsrGlobal()->GetRRFUnitTag();
|
||||
rrfFreq = fMsrHandler->GetMsrGlobal()->GetRRFFreq(fMsrHandler->GetMsrGlobal()->GetRRFUnit().Data());
|
||||
TString rrfFreqStr("");
|
||||
@ -493,11 +412,7 @@ void PMusrCanvas::SetTimeout(Int_t timeout)
|
||||
if (fTimeout <= 0)
|
||||
return;
|
||||
|
||||
if (fTimeoutTimer) {
|
||||
delete fTimeoutTimer;
|
||||
fTimeoutTimer = nullptr;
|
||||
}
|
||||
fTimeoutTimer = new TTimer();
|
||||
fTimeoutTimer.reset(new TTimer());
|
||||
|
||||
fTimeoutTimer->Connect("Timeout()", "PMusrCanvas", this, "Done()");
|
||||
|
||||
@ -1542,7 +1457,7 @@ void PMusrCanvas::LastCanvasClosed()
|
||||
void PMusrCanvas::WindowClosed()
|
||||
{
|
||||
// std::cerr << ">> fMainCanvas->GetName()=" << fMainCanvas->GetName() << std::endl;
|
||||
gROOT->GetListOfCanvases()->Remove(fMainCanvas);
|
||||
gROOT->GetListOfCanvases()->Remove(fMainCanvas.get());
|
||||
LastCanvasClosed();
|
||||
}
|
||||
|
||||
@ -2323,7 +2238,7 @@ void PMusrCanvas::CreateStyle()
|
||||
{
|
||||
TString musrStyle("musrStyle");
|
||||
musrStyle += fPlotNumber;
|
||||
fStyle = new TStyle(musrStyle, musrStyle);
|
||||
fStyle = std::make_unique<TStyle>(musrStyle, musrStyle);
|
||||
fStyle->SetOptStat(0); // no statistics options
|
||||
fStyle->SetOptTitle(0); // no title
|
||||
fStyle->cd();
|
||||
@ -2407,25 +2322,11 @@ void PMusrCanvas::InitMusrCanvas(const Char_t* title, Int_t wtopx, Int_t wtopy,
|
||||
fImp = nullptr;
|
||||
fBar = nullptr;
|
||||
fPopupMain = nullptr;
|
||||
fPopupFourier = nullptr;
|
||||
|
||||
fMainCanvas = nullptr;
|
||||
fTitlePad = nullptr;
|
||||
fDataTheoryPad = nullptr;
|
||||
fParameterPad = nullptr;
|
||||
fTheoryPad = nullptr;
|
||||
fInfoPad = nullptr;
|
||||
fMultiGraphLegend = nullptr;
|
||||
|
||||
// invoke canvas
|
||||
TString canvasName = TString("fMainCanvas");
|
||||
canvasName += fPlotNumber;
|
||||
fMainCanvas = new TCanvas(canvasName.Data(), title, wtopx, wtopy, ww, wh);
|
||||
if (fMainCanvas == nullptr) {
|
||||
std::cerr << std::endl << ">> PMusrCanvas::PMusrCanvas(): **PANIC ERROR** Couldn't invoke " << canvasName.Data();
|
||||
std::cerr << std::endl;
|
||||
return;
|
||||
}
|
||||
fMainCanvas = std::make_unique<TCanvas>(canvasName.Data(), title, wtopx, wtopy, ww, wh);
|
||||
|
||||
fMainCanvas->Connect("Closed()", "PMusrCanvas", this, "LastCanvasClosed()");
|
||||
|
||||
@ -2436,11 +2337,11 @@ void PMusrCanvas::InitMusrCanvas(const Char_t* title, Int_t wtopx, Int_t wtopy,
|
||||
fBar = fImp->GetMenuBar();
|
||||
fPopupMain = fBar->AddPopup("&Musrfit");
|
||||
|
||||
fPopupFourier = new TGPopupMenu();
|
||||
fPopupFourier = std::make_unique<TGPopupMenu>();
|
||||
fPopupMain->AddEntry("&Data", P_MENU_ID_DATA+P_MENU_PLOT_OFFSET*fPlotNumber);
|
||||
fPopupMain->AddSeparator();
|
||||
|
||||
fPopupMain->AddPopup("&Fourier", fPopupFourier);
|
||||
fPopupMain->AddPopup("&Fourier", fPopupFourier.get());
|
||||
fPopupFourier->AddEntry("Show Real", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_REAL);
|
||||
fPopupFourier->AddEntry("Show Imag", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_IMAG);
|
||||
fPopupFourier->AddEntry("Show Real+Imag", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_REAL_AND_IMAG);
|
||||
@ -2470,57 +2371,32 @@ void PMusrCanvas::InitMusrCanvas(const Char_t* title, Int_t wtopx, Int_t wtopy,
|
||||
|
||||
// divide the canvas into 4 pads
|
||||
// title pad
|
||||
fTitlePad = new TPaveText(0.0, YTITLE, 1.0, 1.0, "NDC");
|
||||
if (fTitlePad == nullptr) {
|
||||
std::cerr << std::endl << ">> PMusrCanvas::PMusrCanvas(): **PANIC ERROR** Couldn't invoke fTitlePad";
|
||||
std::cerr << std::endl;
|
||||
return;
|
||||
}
|
||||
fTitlePad = std::make_unique<TPaveText>(0.0, YTITLE, 1.0, 1.0, "NDC");
|
||||
fTitlePad->SetFillColor(TColor::GetColor(255,255,255));
|
||||
fTitlePad->SetTextAlign(12); // middle, left
|
||||
fTitlePad->AddText(title);
|
||||
fTitlePad->Draw();
|
||||
|
||||
// data/theory pad
|
||||
fDataTheoryPad = new TPad("dataTheoryPad", "dataTheoryPad", 0.0, YINFO, XTHEO, YTITLE);
|
||||
if (fDataTheoryPad == nullptr) {
|
||||
std::cerr << std::endl << ">> PMusrCanvas::PMusrCanvas(): **PANIC ERROR** Couldn't invoke fDataTheoryPad";
|
||||
std::cerr << std::endl;
|
||||
return;
|
||||
}
|
||||
fDataTheoryPad = std::make_unique<TPad>("dataTheoryPad", "dataTheoryPad", 0.0, YINFO, XTHEO, YTITLE);
|
||||
fDataTheoryPad->SetFillColor(TColor::GetColor(255,255,255));
|
||||
fDataTheoryPad->Draw();
|
||||
|
||||
// parameter pad
|
||||
fParameterPad = new TPaveText(XTHEO, 0.5, 1.0, YTITLE, "NDC");
|
||||
if (fParameterPad == nullptr) {
|
||||
std::cerr << std::endl << ">> PMusrCanvas::PMusrCanvas(): **PANIC ERROR** Couldn't invoke fParameterPad";
|
||||
std::cerr << std::endl;
|
||||
return;
|
||||
}
|
||||
fParameterPad = std::make_unique<TPaveText>(XTHEO, 0.5, 1.0, YTITLE, "NDC");
|
||||
fParameterPad->SetFillColor(TColor::GetColor(255,255,255));
|
||||
fParameterPad->SetTextAlign(13); // top, left
|
||||
fParameterPad->SetTextFont(102); // courier bold, scalable so that greek parameters will be plotted properly
|
||||
|
||||
// theory pad
|
||||
fTheoryPad = new TPaveText(XTHEO, 0.1, 1.0, 0.5, "NDC");
|
||||
if (fTheoryPad == nullptr) {
|
||||
std::cerr << std::endl << ">> PMusrCanvas::PMusrCanvas(): **PANIC ERROR** Couldn't invoke fTheoryPad";
|
||||
std::cerr << std::endl;
|
||||
return;
|
||||
}
|
||||
fTheoryPad = std::make_unique<TPaveText>(XTHEO, 0.1, 1.0, 0.5, "NDC");
|
||||
fTheoryPad->SetFillColor(TColor::GetColor(255,255,255));
|
||||
fTheoryPad->SetTextAlign(13); // top, left
|
||||
fTheoryPad->SetTextFont(102); // courier bold, scalable so that greek parameters will be plotted properly
|
||||
|
||||
|
||||
// info pad
|
||||
fInfoPad = new TLegend(0.0, 0.0, 1.0, YINFO, "NDC");
|
||||
if (fInfoPad == nullptr) {
|
||||
std::cerr << std::endl << ">> PMusrCanvas::PMusrCanvas(): **PANIC ERROR** Couldn't invoke fInfoPad";
|
||||
std::cerr << std::endl;
|
||||
return;
|
||||
}
|
||||
fInfoPad = std::make_unique<TLegend>(0.0, 0.0, 1.0, YINFO, "NDC");
|
||||
fInfoPad->SetFillColor(TColor::GetColor(255,255,255));
|
||||
fInfoPad->SetTextAlign(12); // middle, left
|
||||
|
||||
@ -4913,11 +4789,7 @@ void PMusrCanvas::PlotData(Bool_t unzoom)
|
||||
// set y-axis label
|
||||
fMultiGraphData->GetYaxis()->SetTitle(yAxisTitle.Data());
|
||||
} else { // more than one data set present, hence add a legend
|
||||
if (fMultiGraphLegend) {
|
||||
delete fMultiGraphLegend;
|
||||
}
|
||||
fMultiGraphLegend = new TLegend(0.8, 0.8, 1.0, 1.0);
|
||||
assert(fMultiGraphLegend != nullptr);
|
||||
fMultiGraphLegend.reset(new TLegend(0.8, 0.8, 1.0, 1.0));
|
||||
PStringVector legendLabel;
|
||||
for (UInt_t i=0; i<plotInfo.fRuns.size(); i++) {
|
||||
runNo = (UInt_t)plotInfo.fRuns[i]-1;
|
||||
@ -6110,12 +5982,6 @@ void PMusrCanvas::PlotFourierDifference(Bool_t unzoom)
|
||||
*/
|
||||
void PMusrCanvas::PlotFourierPhaseValue(Bool_t unzoom)
|
||||
{
|
||||
// check if phase TLatex object is present
|
||||
if (fCurrentFourierPhaseText) {
|
||||
delete fCurrentFourierPhaseText;
|
||||
fCurrentFourierPhaseText = nullptr;
|
||||
}
|
||||
|
||||
double x, y;
|
||||
TString str;
|
||||
|
||||
@ -6127,7 +5993,7 @@ void PMusrCanvas::PlotFourierPhaseValue(Bool_t unzoom)
|
||||
}
|
||||
x = 0.7;
|
||||
y = 0.85;
|
||||
fCurrentFourierPhaseText = new TLatex();
|
||||
fCurrentFourierPhaseText.reset(new TLatex());
|
||||
fCurrentFourierPhaseText->SetNDC(kTRUE);
|
||||
fCurrentFourierPhaseText->SetText(x, y, str.Data());
|
||||
fCurrentFourierPhaseText->SetTextFont(62);
|
||||
|
@ -255,28 +255,28 @@ class PMusrCanvas : public TObject, public TQObject
|
||||
Double_t fXmin, fXmax, fYmin, fYmax; ///< data/theory frame range
|
||||
|
||||
PDoubleVector fCurrentFourierPhase; ///< holds the current Fourier phase(s)
|
||||
TLatex *fCurrentFourierPhaseText; ///< used in Re/Im Fourier to show the current phase in the pad
|
||||
TString *fRRFText; ///< RRF information
|
||||
TLatex *fRRFLatexText; ///< used to display RRF info
|
||||
std::unique_ptr<TLatex> fCurrentFourierPhaseText; ///< used in Re/Im Fourier to show the current phase in the pad
|
||||
std::unique_ptr<TString> fRRFText; ///< RRF information
|
||||
std::unique_ptr<TLatex> fRRFLatexText; ///< used to display RRF info
|
||||
|
||||
TStyle *fStyle; ///< A collection of all graphics attributes
|
||||
std::unique_ptr<TStyle> fStyle; ///< A collection of all graphics attributes
|
||||
|
||||
TTimer *fTimeoutTimer; ///< timeout timer in order to terminate if no action is taking place for too long
|
||||
std::unique_ptr<TTimer> fTimeoutTimer; ///< timeout timer in order to terminate if no action is taking place for too long
|
||||
|
||||
// canvas menu related variables
|
||||
TRootCanvas *fImp; ///< ROOT native GUI version of main window with menubar and drawing area
|
||||
TGMenuBar *fBar; ///< menu bar
|
||||
TGPopupMenu *fPopupMain; ///< popup menu Musrfit in the main menu bar
|
||||
TGPopupMenu *fPopupFourier; ///< popup menu of the Musrfit/Fourier sub menu
|
||||
std::unique_ptr<TGPopupMenu> fPopupFourier; ///< popup menu of the Musrfit/Fourier sub menu
|
||||
|
||||
// canvas related variables
|
||||
TCanvas *fMainCanvas; ///< main canvas
|
||||
TPaveText *fTitlePad; ///< title pad used to display a title
|
||||
TPad *fDataTheoryPad; ///< data/theory pad used to display the data/theory
|
||||
TPaveText *fParameterPad; ///< parameter pad used to display the fitting parameters
|
||||
TPaveText *fTheoryPad; ///< theory pad used to display the theory and functions
|
||||
TLegend *fInfoPad; ///< info pad used to display a legend of the data plotted
|
||||
TLegend *fMultiGraphLegend; ///< used for non-muSR plots to display a legend
|
||||
std::unique_ptr<TCanvas> fMainCanvas; ///< main canvas
|
||||
std::unique_ptr<TPaveText> fTitlePad; ///< title pad used to display a title
|
||||
std::unique_ptr<TPad> fDataTheoryPad; ///< data/theory pad used to display the data/theory
|
||||
std::unique_ptr<TPaveText> fParameterPad; ///< parameter pad used to display the fitting parameters
|
||||
std::unique_ptr<TPaveText> fTheoryPad; ///< theory pad used to display the theory and functions
|
||||
std::unique_ptr<TLegend> fInfoPad; ///< info pad used to display a legend of the data plotted
|
||||
std::unique_ptr<TLegend> fMultiGraphLegend; ///< used for non-muSR plots to display a legend
|
||||
|
||||
TH1F *fHistoFrame; ///< fHistoFrame is a 'global' frame needed in order to plot histograms with (potentially) different x-frames
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user