diff --git a/src/classes/PMusrT0.cpp b/src/classes/PMusrT0.cpp index b42a535b..ff677bdc 100644 --- a/src/classes/PMusrT0.cpp +++ b/src/classes/PMusrT0.cpp @@ -50,6 +50,7 @@ ClassImpQ(PMusrT0) */ PMusrT0::PMusrT0() { + fMainCanvas = 0; } //-------------------------------------------------------------------------- @@ -62,6 +63,57 @@ PMusrT0::PMusrT0() */ PMusrT0::PMusrT0(PRawRunData *rawRunData, unsigned int histoNo) { + cout << endl << "run Name = " << rawRunData->fRunName.Data() << ", histoNo = " << histoNo << endl; + + TString str = rawRunData->fRunName + TString(" : "); + str += histoNo; + + // feed necessary objects + + // feed raw data histo + Int_t noOfBins = rawRunData->fDataBin[histoNo].size(); + Double_t start = -0.5; + Double_t end = noOfBins + 0.5; + fHisto = new TH1F("fHisto", str.Data(), noOfBins, start, end); + fHisto->SetMarkerStyle(21); + fHisto->SetMarkerSize(1); + fHisto->SetMarkerColor(TColor::GetColor(0,0,0)); // black + + for (unsigned int i=0; ifDataBin[histoNo].size(); i++) { + fHisto->SetBinContent(i+1, rawRunData->fDataBin[histoNo][i]); + } + + // generate canvas etc + fMainCanvas = new TCanvas("fMainCanvas", str); + + // add canvas menu + fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp(); + fBar = fImp->GetMenuBar(); + fPopupMain = fBar->AddPopup("&MusrT0"); + + fPopupMain->AddEntry("&T0", P_MENU_ID_T0); + fPopupMain->AddSeparator(); + fPopupMain->AddEntry("First Bkg Channel", P_MENU_ID_FIRST_BKG_CHANNEL); + fPopupMain->AddEntry("Last Bkg Channel", P_MENU_ID_LAST_BKG_CHANNEL); + fPopupMain->AddSeparator(); + fPopupMain->AddEntry("First Data Channel", P_MENU_ID_FIRST_DATA_CHANNEL); + fPopupMain->AddEntry("Last Data Channel", P_MENU_ID_LAST_DATA_CHANNEL); + fPopupMain->AddSeparator(); + fPopupMain->AddEntry("UnZoom", P_MENU_ID_UNZOOM); + + + fBar->MapSubwindows(); + fBar->Layout(); + fPopupMain->Connect("TGPopupMenu", "Activated(Int_t)", "PMusrT0", this, "HandleMenuPopup(Int_t)"); + + fMainCanvas->cd(); + fMainCanvas->Show(); + + fMainCanvas->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)", "PMusrT0", + this, "HandleCmdKey(Int_t,Int_t,Int_t,TObject*)"); + + // draw histos etc + fHisto->Draw("p"); } //-------------------------------------------------------------------------- @@ -72,6 +124,14 @@ PMusrT0::PMusrT0(PRawRunData *rawRunData, unsigned int histoNo) */ PMusrT0::~PMusrT0() { + if (fMainCanvas) { + delete fMainCanvas; + fMainCanvas = 0; + } + if (fHisto) { + delete fHisto; + fHisto = 0; + } } //-------------------------------------------------------------------------- @@ -134,6 +194,36 @@ void PMusrT0::HandleMenuPopup(Int_t id) { } +//-------------------------------------------------------------------------- +// HandleMenuPopup (SLOT) +//-------------------------------------------------------------------------- +/** + *

+ * + */ +void PMusrT0::SetMsrHandler(PMsrHandler *msrHandler) +{ + fMsrHandler = msrHandler; + + InitDataAndBkg(); +} + +//-------------------------------------------------------------------------- +// HandleMenuPopup (SLOT) +//-------------------------------------------------------------------------- +/** + *

+ * + */ +void PMusrT0::InitDataAndBkg() +{ + // feed data range histo + + // feed background histo + + // add lines +} + //-------------------------------------------------------------------------- // END //-------------------------------------------------------------------------- diff --git a/src/include/PMusrT0.h b/src/include/PMusrT0.h index 08e8efe9..35efde4c 100644 --- a/src/include/PMusrT0.h +++ b/src/include/PMusrT0.h @@ -38,8 +38,21 @@ #include #include #include +#include +#include #include "PMusr.h" +#ifndef __MAKECINT__ +#include "PMsrHandler.h" +#endif // __MAKECINT__ + +// Canvas menu id's +#define P_MENU_ID_T0 100 +#define P_MENU_ID_FIRST_BKG_CHANNEL 101 +#define P_MENU_ID_LAST_BKG_CHANNEL 102 +#define P_MENU_ID_FIRST_DATA_CHANNEL 103 +#define P_MENU_ID_LAST_DATA_CHANNEL 104 +#define P_MENU_ID_UNZOOM 105 //-------------------------------------------------------------------------- /** @@ -54,11 +67,39 @@ class PMusrT0 : public TObject, public TQObject virtual ~PMusrT0(); - private: virtual void Done(Int_t status=0); // *SIGNAL* virtual void HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected); // SLOT virtual void HandleMenuPopup(Int_t id); // SLOT +#ifndef __MAKECINT__ + virtual void SetMsrHandler(PMsrHandler *msrHandler); +#endif // __MAKECINT__ + + private: +#ifndef __MAKECINT__ + PMsrHandler *fMsrHandler; +#endif // __MAKECINT__ + + // canvas menu related variables + TRootCanvas *fImp; + TGMenuBar *fBar; + TGPopupMenu *fPopupMain; + + // canvas related variables + TCanvas *fMainCanvas; + + TH1F *fHisto; + TH1F *fData; + TH1F *fBkg; + + TLine *fT0Line; + TLine *fFirstBkgLine; + TLine *fLastBkgLine; + TLine *fFirstDataLine; + TLine *fLastDataLine; + + void InitDataAndBkg(); + ClassDef(PMusrT0, 1) }; diff --git a/src/musrt0.cpp b/src/musrt0.cpp index 77fb553f..6af81305 100644 --- a/src/musrt0.cpp +++ b/src/musrt0.cpp @@ -62,6 +62,34 @@ void musrt0_syntax() cout << endl << endl; } +//-------------------------------------------------------------------------- +/** + *

+ * + */ +bool musrt0_item(TApplication &app, PMsrHandler *msrHandler, PRawRunData *rawRunData, unsigned int histoNo) +{ + PMusrT0 *musrT0 = new PMusrT0(rawRunData, histoNo); + + if (musrT0 == 0) { + cout << endl << "**ERROR** Couldn't invoke musrT0 ..."; + cout << endl << " run name " << rawRunData->fRunName.Data(); + cout << endl << " histo No " << histoNo; + cout << endl; + return false; + } + + musrT0->SetMsrHandler(msrHandler); + + musrT0->Connect("Done(Int_t)", "TApplication", &app, "Terminate(Int_t)"); + + app.Run(true); // true needed that Run will return after quit + delete musrT0; + musrT0 = 0; + + return true; +} + //-------------------------------------------------------------------------- int main(int argc, char *argv[]) { @@ -165,40 +193,37 @@ int main(int argc, char *argv[]) } - vector t0Vector; if (success) { -/* // generate Root application needed for PMusrCanvas TApplication app("App", &argc, argv); -*/ + // generate vector of all necessary PMusrT0 objects - PMusrT0 *musrT0; for (unsigned int i=0; isize(); i++) { switch (runList->at(i).fFitType) { case MSR_FITTYPE_SINGLE_HISTO: for (unsigned int j=0; jat(i).fRunName.size(); j++) { // necessary in case of ADDRUN - musrT0 = new PMusrT0(dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fForwardHistoNo); - t0Vector.push_back(musrT0); + if (!musrt0_item(app, msrHandler, dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fForwardHistoNo)) + exit(0); } break; case MSR_FITTYPE_ASYM: for (unsigned int j=0; jat(i).fRunName.size(); j++) { // necessary in case of ADDRUN - musrT0 = new PMusrT0(dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fForwardHistoNo); - t0Vector.push_back(musrT0); - musrT0 = new PMusrT0(dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fBackwardHistoNo); - t0Vector.push_back(musrT0); + if (!musrt0_item(app, msrHandler, dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fForwardHistoNo)) + exit(0); + if (!musrt0_item(app, msrHandler, dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fBackwardHistoNo)) + exit(0); } break; case MSR_FITTYPE_ASYM_RRF: for (unsigned int j=0; jat(i).fRunName.size(); j++) { // necessary in case of ADDRUN - musrT0 = new PMusrT0(dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fForwardHistoNo); - t0Vector.push_back(musrT0); - musrT0 = new PMusrT0(dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fBackwardHistoNo); - t0Vector.push_back(musrT0); - musrT0 = new PMusrT0(dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fRightHistoNo); - t0Vector.push_back(musrT0); - musrT0 = new PMusrT0(dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fLeftHistoNo); - t0Vector.push_back(musrT0); + if (!musrt0_item(app, msrHandler, dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fForwardHistoNo)) + exit(0); + if (!musrt0_item(app, msrHandler, dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fBackwardHistoNo)) + exit(0); + if (!musrt0_item(app, msrHandler, dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fRightHistoNo)) + exit(0); + if (!musrt0_item(app, msrHandler, dataHandler->GetRunData(runList->at(i).fRunName[j]), runList->at(i).fLeftHistoNo)) + exit(0); } break; default: @@ -289,15 +314,6 @@ cout << endl; delete dataHandler; dataHandler = 0; } - if (t0Vector.size() > 0) { - for (unsigned int i=0; i