some more work towards musrt0

This commit is contained in:
nemu 2009-03-26 07:59:39 +00:00
parent b38e8beffc
commit b076b4d957
3 changed files with 175 additions and 28 deletions

View File

@ -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; i<rawRunData->fDataBin[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)
//--------------------------------------------------------------------------
/**
* <p>
*
*/
void PMusrT0::SetMsrHandler(PMsrHandler *msrHandler)
{
fMsrHandler = msrHandler;
InitDataAndBkg();
}
//--------------------------------------------------------------------------
// HandleMenuPopup (SLOT)
//--------------------------------------------------------------------------
/**
* <p>
*
*/
void PMusrT0::InitDataAndBkg()
{
// feed data range histo
// feed background histo
// add lines
}
//--------------------------------------------------------------------------
// END
//--------------------------------------------------------------------------

View File

@ -38,8 +38,21 @@
#include <TRootCanvas.h>
#include <TGMenu.h>
#include <TCanvas.h>
#include <TH1.h>
#include <TLine.h>
#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)
};

View File

@ -62,6 +62,34 @@ void musrt0_syntax()
cout << endl << endl;
}
//--------------------------------------------------------------------------
/**
* <p>
*
*/
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<PMusrT0*> 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; i<runList->size(); i++) {
switch (runList->at(i).fFitType) {
case MSR_FITTYPE_SINGLE_HISTO:
for (unsigned int j=0; j<runList->at(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; j<runList->at(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; j<runList->at(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<t0Vector.size(); i++) {
if (t0Vector[i] != 0) {
delete t0Vector[i];
t0Vector[i] = 0;
}
}
t0Vector.clear();
}
return 0;
}