diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index 6b8f1795..9fde611b 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -88,8 +88,9 @@ PMusrCanvas::PMusrCanvas() * */ PMusrCanvas::PMusrCanvas(const int number, const char* title, - Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh) : - fPlotNumber(number) + Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh, + const Bool_t batch) : + fBatchMode(batch), fPlotNumber(number) { fMultiGraphData = 0; fMultiGraphDiff = 0; @@ -111,7 +112,9 @@ PMusrCanvas::PMusrCanvas(const int number, const char* title, PMusrCanvas::PMusrCanvas(const int number, const char* title, Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh, PMsrFourierStructure fourierDefault, - const PIntVector markerList, const PIntVector colorList) : + const PIntVector markerList, const PIntVector colorList, + const Bool_t batch) : + fBatchMode(batch), fPlotNumber(number), fFourier(fourierDefault), fMarkerList(markerList), fColorList(colorList) { @@ -443,14 +446,16 @@ void PMusrCanvas::UpdateDataTheoryPad() } // handle data HandleNonMusrDataSet(i, runNo, data); - // disable Fourier menus - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_REAL); - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_IMAG); - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_REAL_AND_IMAG); - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PWR); - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE); - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_PLUS); - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_MINUS); + if (!fBatchMode) { + // disable Fourier menus + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_REAL); + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_IMAG); + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_REAL_AND_IMAG); + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PWR); + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE); + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_PLUS); + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_MINUS); + } break; default: fValid = false; @@ -596,6 +601,9 @@ void PMusrCanvas::HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected) if (event != kKeyPress) return; + if (fBatchMode) + return; + // cout << ">this " << this << endl; // cout << ">fMainCanvas " << fMainCanvas << endl; // cout << ">selected " << selected << endl; @@ -726,6 +734,9 @@ void PMusrCanvas::HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected) */ void PMusrCanvas::HandleMenuPopup(Int_t id) { + if (fBatchMode) + return; + if (id == P_MENU_ID_DATA+P_MENU_PLOT_OFFSET*fPlotNumber) { // set appropriate plot view fCurrentPlotView = PV_DATA; @@ -1031,41 +1042,43 @@ void PMusrCanvas::InitMusrCanvas(const char* title, Int_t wtopx, Int_t wtopy, In return; } - // add canvas menu - fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp(); - fBar = fImp->GetMenuBar(); - fPopupMain = fBar->AddPopup("&Musrfit"); + // add canvas menu if not in batch mode + if (!fBatchMode) { + fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp(); + fBar = fImp->GetMenuBar(); + fPopupMain = fBar->AddPopup("&Musrfit"); - fPopupFourier = new TGPopupMenu(); - fPopupMain->AddEntry("&Data", P_MENU_ID_DATA+P_MENU_PLOT_OFFSET*fPlotNumber); - fPopupMain->AddSeparator(); + fPopupFourier = new TGPopupMenu(); + fPopupMain->AddEntry("&Data", P_MENU_ID_DATA+P_MENU_PLOT_OFFSET*fPlotNumber); + fPopupMain->AddSeparator(); - fPopupMain->AddPopup("&Fourier", fPopupFourier); - 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); - fPopupFourier->AddEntry("Show Power", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PWR); - fPopupFourier->AddEntry("Show Phase", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE); - fPopupFourier->AddSeparator(); - fPopupFourier->AddEntry("Phase +", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_PLUS); - fPopupFourier->AddEntry("Phase -", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_MINUS); - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_PLUS); - fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_MINUS); + fPopupMain->AddPopup("&Fourier", fPopupFourier); + 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); + fPopupFourier->AddEntry("Show Power", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PWR); + fPopupFourier->AddEntry("Show Phase", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE); + fPopupFourier->AddSeparator(); + fPopupFourier->AddEntry("Phase +", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_PLUS); + fPopupFourier->AddEntry("Phase -", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_MINUS); + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_PLUS); + fPopupFourier->DisableEntry(P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_FOURIER_PHASE_MINUS); - fPopupMain->AddEntry("D&ifference", P_MENU_ID_DIFFERENCE+P_MENU_PLOT_OFFSET*fPlotNumber); - fPopupMain->AddSeparator(); + fPopupMain->AddEntry("D&ifference", P_MENU_ID_DIFFERENCE+P_MENU_PLOT_OFFSET*fPlotNumber); + fPopupMain->AddSeparator(); - fPopupSave = new TGPopupMenu(); - fPopupSave->AddEntry("Save ascii", P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_ASCII); - fPopupSave->AddEntry("Save db", P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_DB); + fPopupSave = new TGPopupMenu(); + fPopupSave->AddEntry("Save ascii", P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_ASCII); + fPopupSave->AddEntry("Save db", P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_DB); - fPopupMain->AddPopup("&Save Data", fPopupSave); - fBar->MapSubwindows(); - fBar->Layout(); + fPopupMain->AddPopup("&Save Data", fPopupSave); + fBar->MapSubwindows(); + fBar->Layout(); - fPopupMain->Connect("TGPopupMenu", "Activated(Int_t)", "PMusrCanvas", this, "HandleMenuPopup(Int_t)"); + fPopupMain->Connect("TGPopupMenu", "Activated(Int_t)", "PMusrCanvas", this, "HandleMenuPopup(Int_t)"); - fPopupMain->CheckEntry(P_MENU_ID_DATA+P_MENU_PLOT_OFFSET*fPlotNumber); + fPopupMain->CheckEntry(P_MENU_ID_DATA+P_MENU_PLOT_OFFSET*fPlotNumber); + } // divide the canvas into 4 pads // title pad @@ -2178,8 +2191,10 @@ void PMusrCanvas::PlotData() { fDataTheoryPad->cd(); - // uncheck fourier menu entries - fPopupFourier->UnCheckEntries(); + if (!fBatchMode) { + // uncheck fourier menu entries + fPopupFourier->UnCheckEntries(); + } if (fPlotType < 0) // plot type not defined return; diff --git a/src/include/PMusrCanvas.h b/src/include/PMusrCanvas.h index 4c24b077..3104502e 100644 --- a/src/include/PMusrCanvas.h +++ b/src/include/PMusrCanvas.h @@ -149,11 +149,11 @@ class PMusrCanvas : public TObject, public TQObject public: PMusrCanvas(); PMusrCanvas(const int number, const char* title, - Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh); + Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh, const Bool_t batch); PMusrCanvas(const int number, const char* title, Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh, PMsrFourierStructure fourierDefault, - const PIntVector markerList, const PIntVector colorList); + const PIntVector markerList, const PIntVector colorList, const Bool_t batch); virtual ~PMusrCanvas(); virtual Bool_t IsValid() { return fValid; } @@ -175,6 +175,7 @@ class PMusrCanvas : public TObject, public TQObject virtual void SaveGraphicsAndQuit(char *fileName, char *graphicsFormat); private: + Bool_t fBatchMode; /// musrview in ROOT batch mode Bool_t fValid; Bool_t fDifferenceView; /// tag showing that the shown data, fourier, are the difference between data and theory Int_t fCurrentPlotView; /// tag showing what the current plot view is: data, fourier, ... diff --git a/src/musrview.cpp b/src/musrview.cpp index 28be6a18..e2bc85fa 100644 --- a/src/musrview.cpp +++ b/src/musrview.cpp @@ -250,6 +250,11 @@ cout << endl; if (success) { // generate Root application needed for PMusrCanvas + if (graphicsOutput) { + argv[argc] = (char*)malloc(16*sizeof(char)); + strcpy(argv[argc], "-b"); + argc++; + } TApplication app("App", &argc, argv); vector canvasVector; @@ -263,10 +268,11 @@ cout << endl; 10+i*100, 10+i*100, 800, 600, startupHandler->GetFourierDefaults(), startupHandler->GetMarkerList(), - startupHandler->GetColorList()); + startupHandler->GetColorList(), + graphicsOutput); else musrCanvas = new PMusrCanvas(i, msrHandler->GetMsrTitle()->Data(), - 10+i*100, 10+i*100, 800, 600); + 10+i*100, 10+i*100, 800, 600, graphicsOutput); if (!musrCanvas->IsValid()) { cout << endl << "**SEVERE ERROR** Couldn't invoke all necessary objects, will quit.";