diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp
index a019e389..55335a7c 100644
--- a/src/classes/PMusrCanvas.cpp
+++ b/src/classes/PMusrCanvas.cpp
@@ -400,9 +400,9 @@ void PMusrCanvas::HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected)
cout << endl << ">> will show the Fourier transform, to be implemented yet." << endl;
}
} else if (x == '+') {
- cout << endl << ">> if Fourier is shown, will add " << fFourier.fPhaseIncrement << "° to the Fourier." << endl;
+ IncrementFourierPhase();
} else if (x == '-') {
- cout << endl << ">> if Fourier is shown, will subtract " << fFourier.fPhaseIncrement << "° to the Fourier." << endl;
+ DecrementFourierPhase();
} else {
// do all the necessary stuff **TO BE DONE**
fMainCanvas->Update();
@@ -439,9 +439,9 @@ void PMusrCanvas::HandleMenuPopup(Int_t id)
fPopupFourier->CheckEntry(id);
HandleFourier(FOURIER_PLOT_PHASE);
} else if (id == P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_PLUS) {
- cout << endl << ">> will add " << fFourier.fPhaseIncrement << "° Phase to the Fourier ..." << endl;
+ IncrementFourierPhase();
} else if (id == P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_MINUS) {
- cout << endl << ">> will subtract " << fFourier.fPhaseIncrement << "° Phase to the Fourier ..." << endl;
+ DecrementFourierPhase();
} else if (id == P_MENU_ID_DIFFERENCE+P_MENU_PLOT_OFFSET*fPlotNumber) {
if (fPopupMain->IsEntryChecked(id))
fPopupMain->UnCheckEntry(id);
@@ -2517,3 +2517,79 @@ cout << endl << ">> theory scale = " << scale << ", data.res/theory.res = " << f
PlotFourier();
}
}
+
+//--------------------------------------------------------------------------
+// IncrementFourierPhase (private)
+//--------------------------------------------------------------------------
+/**
+ *
+ *
+ * \param tag
+ */
+void PMusrCanvas::IncrementFourierPhase()
+{
+ double re, im;
+ const double cp = TMath::Cos(fFourier.fPhaseIncrement/180.0*TMath::Pi());
+ const double sp = TMath::Sin(fFourier.fPhaseIncrement/180.0*TMath::Pi());
+
+ for (unsigned int i=0; iGetNbinsX()-1; j++) { // loop over a fourier data set
+ // calculate new fourier data set value
+ re = fData[i].dataFourierRe->GetBinContent(j) * cp - fData[i].dataFourierIm->GetBinContent(j) * sp;
+ im = fData[i].dataFourierIm->GetBinContent(j) * cp + fData[i].dataFourierIm->GetBinContent(j) * sp;
+ // overwrite fourier data set value
+ fData[i].dataFourierRe->SetBinContent(j, re);
+ fData[i].dataFourierIm->SetBinContent(j, im);
+ }
+ }
+ if ((fData[i].theoryFourierRe != 0) && (fData[i].theoryFourierIm != 0)) {
+ for (int j=1; jGetNbinsX()-1; j++) { // loop over a fourier data set
+ // calculate new fourier data set value
+ re = fData[i].theoryFourierRe->GetBinContent(j) * cp - fData[i].theoryFourierIm->GetBinContent(j) * sp;
+ im = fData[i].theoryFourierIm->GetBinContent(j) * cp + fData[i].theoryFourierIm->GetBinContent(j) * sp;
+ // overwrite fourier data set value
+ fData[i].theoryFourierRe->SetBinContent(j, re);
+ fData[i].theoryFourierIm->SetBinContent(j, im);
+ }
+ }
+ }
+}
+
+//--------------------------------------------------------------------------
+// DecrementFourierPhase (private)
+//--------------------------------------------------------------------------
+/**
+ *
+ *
+ * \param tag
+ */
+void PMusrCanvas::DecrementFourierPhase()
+{
+ double re, im;
+ const double cp = TMath::Cos(fFourier.fPhaseIncrement/180.0*TMath::Pi());
+ const double sp = TMath::Sin(fFourier.fPhaseIncrement/180.0*TMath::Pi());
+
+ for (unsigned int i=0; iGetNbinsX()-1; j++) { // loop over a fourier data set
+ // calculate new fourier data set value
+ re = fData[i].dataFourierRe->GetBinContent(j) * cp + fData[i].dataFourierIm->GetBinContent(j) * sp;
+ im = fData[i].dataFourierIm->GetBinContent(j) * cp - fData[i].dataFourierIm->GetBinContent(j) * sp;
+ // overwrite fourier data set value
+ fData[i].dataFourierRe->SetBinContent(j, re);
+ fData[i].dataFourierIm->SetBinContent(j, im);
+ }
+ }
+ if ((fData[i].theoryFourierRe != 0) && (fData[i].theoryFourierIm != 0)) {
+ for (int j=1; jGetNbinsX()-1; j++) { // loop over a fourier data set
+ // calculate new fourier data set value
+ re = fData[i].theoryFourierRe->GetBinContent(j) * cp + fData[i].theoryFourierIm->GetBinContent(j) * sp;
+ im = fData[i].theoryFourierIm->GetBinContent(j) * cp - fData[i].theoryFourierIm->GetBinContent(j) * sp;
+ // overwrite fourier data set value
+ fData[i].theoryFourierRe->SetBinContent(j, re);
+ fData[i].theoryFourierIm->SetBinContent(j, im);
+ }
+ }
+ }
+}
diff --git a/src/include/PMusrCanvas.h b/src/include/PMusrCanvas.h
index 06d97b1c..5d216128 100644
--- a/src/include/PMusrCanvas.h
+++ b/src/include/PMusrCanvas.h
@@ -226,6 +226,8 @@ class PMusrCanvas : public TObject, public TQObject
virtual void PlotData();
virtual void PlotDifference();
virtual void PlotFourier();
+ virtual void IncrementFourierPhase();
+ virtual void DecrementFourierPhase();
virtual void SaveDataAscii();
virtual void SaveDataDb();