From 5e1dd892b0c9f9ea664a1b57027b02a7551dbac0 Mon Sep 17 00:00:00 2001 From: nemu Date: Sat, 7 Mar 2009 16:17:47 +0000 Subject: [PATCH] fixed main problem of various runs with different labels for db-files --- src/classes/PMusrCanvas.cpp | 6 +- src/classes/PRunListCollection.cpp | 16 +++-- src/classes/PRunNonMusr.cpp | 106 +++++++++++++---------------- src/include/PRunListCollection.h | 4 +- src/include/PRunNonMusr.h | 9 ++- 5 files changed, 70 insertions(+), 71 deletions(-) diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index 78de7d5c..eaae7474 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -2166,8 +2166,8 @@ void PMusrCanvas::PlotData() PMsrRunList runs = *fMsrHandler->GetMsrRunList(); PMsrPlotStructure plotInfo = fMsrHandler->GetMsrPlotList()->at(fPlotNumber); unsigned int runNo = (unsigned int)plotInfo.fRuns[0].Re()-1; - TString xAxisTitle = fRunList->GetXAxisTitle(runs[runNo].fRunName); - TString yAxisTitle = fRunList->GetYAxisTitle(runs[runNo].fRunName); + TString xAxisTitle = fRunList->GetXAxisTitle(runs[runNo].fRunName, runNo); + TString yAxisTitle = fRunList->GetYAxisTitle(runs[runNo].fRunName, runNo); if (fNonMusrData.size() > 0) { // check if fMultiGraphData needs to be created, and if yes add all data and theory @@ -2250,7 +2250,7 @@ void PMusrCanvas::PlotDifference() PMsrRunList runs = *fMsrHandler->GetMsrRunList(); PMsrPlotStructure plotInfo = fMsrHandler->GetMsrPlotList()->at(fPlotNumber); unsigned int runNo = (unsigned int)plotInfo.fRuns[0].Re()-1; - TString xAxisTitle = fRunList->GetXAxisTitle(runs[runNo].fRunName); + TString xAxisTitle = fRunList->GetXAxisTitle(runs[runNo].fRunName, runNo); // if fMultiGraphDiff is not present create it and add the diff data if (!fMultiGraphDiff) { diff --git a/src/classes/PRunListCollection.cpp b/src/classes/PRunListCollection.cpp index ef11ae2f..94e0c56b 100644 --- a/src/classes/PRunListCollection.cpp +++ b/src/classes/PRunListCollection.cpp @@ -484,12 +484,14 @@ const char* PRunListCollection::GetSetup(TString &runName) /** *

* - * \param runName + * \param runName name of the run file + * \param idx msr-file run index */ -const char* PRunListCollection::GetXAxisTitle(TString &runName) +const char* PRunListCollection::GetXAxisTitle(TString &runName, const unsigned int idx) { PRawRunData *runData = fData->GetRunData(runName); - int index = fData->GetRunData(runName)->fDataNonMusr.fXIndex; + + int index = fRunNonMusrList[idx]->GetXIndex(); // cout << endl << ">>PRunListCollection::GetXAxisTitle, x-index = " << index; // cout << endl; @@ -503,12 +505,14 @@ const char* PRunListCollection::GetXAxisTitle(TString &runName) /** *

* - * \param runName + * \param runName name of the run file + * \param idx msr-file run index */ -const char* PRunListCollection::GetYAxisTitle(TString &runName) +const char* PRunListCollection::GetYAxisTitle(TString &runName, const unsigned int idx) { PRawRunData *runData = fData->GetRunData(runName); - int index = fData->GetRunData(runName)->fDataNonMusr.fYIndex; + + int index = fRunNonMusrList[idx]->GetYIndex(); // cout << endl << ">>PRunListCollection::GetYAxisTitle, y-index = " << index; // cout << endl; diff --git a/src/classes/PRunNonMusr.cpp b/src/classes/PRunNonMusr.cpp index d2a3df79..20d0340c 100644 --- a/src/classes/PRunNonMusr.cpp +++ b/src/classes/PRunNonMusr.cpp @@ -47,6 +47,8 @@ PRunNonMusr::PRunNonMusr() : PRunBase() fNoOfFitBins = 0; fHandleTag = kEmpty; + + fRawRunData = 0; } //-------------------------------------------------------------------------- @@ -60,6 +62,13 @@ PRunNonMusr::PRunNonMusr() : PRunBase() */ PRunNonMusr::PRunNonMusr(PMsrHandler *msrInfo, PRunDataHandler *rawData, unsigned int runNo, EPMusrHandleTag tag) : PRunBase(msrInfo, rawData, runNo, tag) { + // get the proper run + fRawRunData = fRawData->GetRunData(fRunInfo->fRunName); + if (!fRawRunData) { // couldn't get run + cout << endl << "PRunNonMusr::PRunNonMusr(): **ERROR** Couldn't get raw run data!"; + fValid = false; + } + // calculate fData if (!PrepareData()) fValid = false; @@ -169,44 +178,37 @@ bool PRunNonMusr::PrepareFitData() { bool success = true; - // get the proper run - PRawRunData* runData = fRawData->GetRunData(fRunInfo->fRunName); - if (!runData) { // couldn't get run - cout << endl << "PRunNonMusr::PrepareFitData(): **ERROR** Couldn't get run " << fRunInfo->fRunName.Data() << "!"; - return false; - } - // keep start/stop time for fit: here the meaning is of course start x, stop x fFitStartTime = fRunInfo->fFitRange[0]; fFitStopTime = fRunInfo->fFitRange[1]; // get x-, y-index - unsigned int xIndex = GetXIndex(runData); - unsigned int yIndex = GetYIndex(runData); + unsigned int xIndex = GetXIndex(); + unsigned int yIndex = GetYIndex(); // cout << endl << ">> xIndex=" << xIndex << ", yIndex=" << yIndex; // pack the raw data double value = 0.0; double err = 0.0; -// cout << endl << ">> runData->fDataNonMusr.fData[" << xIndex << "].size()=" << runData->fDataNonMusr.fData[xIndex].size(); - for (unsigned int i=0; ifDataNonMusr.fData[xIndex].size(); i++) { +// cout << endl << ">> fRawRunData->fDataNonMusr.fData[" << xIndex << "].size()=" << fRawRunData->fDataNonMusr.fData[xIndex].size(); + for (unsigned int i=0; ifDataNonMusr.fData[xIndex].size(); i++) { // cout << endl << ">> i=" << i << ", packing=" << fRunInfo->fPacking; if (fRunInfo->fPacking == 1) { - fData.fX.push_back(runData->fDataNonMusr.fData[xIndex][i]); - fData.fValue.push_back(runData->fDataNonMusr.fData[yIndex][i]); - fData.fError.push_back(runData->fDataNonMusr.fErrData[yIndex][i]); + fData.fX.push_back(fRawRunData->fDataNonMusr.fData[xIndex][i]); + fData.fValue.push_back(fRawRunData->fDataNonMusr.fData[yIndex][i]); + fData.fError.push_back(fRawRunData->fDataNonMusr.fErrData[yIndex][i]); } else { // packed data, i.e. fRunInfo->fPacking > 1 if ((i % fRunInfo->fPacking == 0) && (i != 0)) { // fill data // cout << endl << "-> i=" << i; - fData.fX.push_back(runData->fDataNonMusr.fData[xIndex][i]-(runData->fDataNonMusr.fData[xIndex][i]-runData->fDataNonMusr.fData[xIndex][i-fRunInfo->fPacking])/2.0); + fData.fX.push_back(fRawRunData->fDataNonMusr.fData[xIndex][i]-(fRawRunData->fDataNonMusr.fData[xIndex][i]-fRawRunData->fDataNonMusr.fData[xIndex][i-fRunInfo->fPacking])/2.0); fData.fValue.push_back(value); fData.fError.push_back(TMath::Sqrt(err)); value = 0.0; err = 0.0; } // sum raw data values - value += runData->fDataNonMusr.fData[yIndex][i]; - err += runData->fDataNonMusr.fErrData[yIndex][i]*runData->fDataNonMusr.fErrData[yIndex][i]; + value += fRawRunData->fDataNonMusr.fData[yIndex][i]; + err += fRawRunData->fDataNonMusr.fErrData[yIndex][i]*fRawRunData->fDataNonMusr.fErrData[yIndex][i]; } } // cout << endl << ">> fData.fValue.size()=" << fData.fValue.size(); @@ -235,44 +237,36 @@ bool PRunNonMusr::PrepareViewData() { bool success = true; - // get the proper run - PRawRunData* runData = fRawData->GetRunData(fRunInfo->fRunName); - if (!runData) { // couldn't get run - cout << endl << "PRunNonMusr::PrepareViewData(): **ERROR** Couldn't get run " << fRunInfo->fRunName.Data() << "!"; - return false; - } +cout << endl << ">> fRunInfo->fRunName = " << fRunInfo->fRunName.Data(); // get x-, y-index - unsigned int xIndex = GetXIndex(runData); - unsigned int yIndex = GetYIndex(runData); -// cout << endl << "PRunNonMusr::PrepareViewData: xIndex=" << xIndex << ", yIndex=" << yIndex << endl; - // set x-, y-axis-index - runData->fDataNonMusr.fXIndex = xIndex; - runData->fDataNonMusr.fYIndex = yIndex; + unsigned int xIndex = GetXIndex(); + unsigned int yIndex = GetYIndex(); +cout << endl << "PRunNonMusr::PrepareViewData: xIndex=" << xIndex << ", yIndex=" << yIndex << endl; // fill data histo // pack the raw data double value = 0.0; double err = 0.0; -// cout << endl << ">> runData->fDataNonMusr.fData[" << xIndex << "].size()=" << runData->fDataNonMusr.fData[xIndex].size(); - for (unsigned int i=0; ifDataNonMusr.fData[xIndex].size(); i++) { +// cout << endl << ">> fRawRunData->fDataNonMusr.fData[" << xIndex << "].size()=" << fRawRunData->fDataNonMusr.fData[xIndex].size(); + for (unsigned int i=0; ifDataNonMusr.fData[xIndex].size(); i++) { // cout << endl << ">> i=" << i << ", packing=" << fRunInfo->fPacking; if (fRunInfo->fPacking == 1) { - fData.fX.push_back(runData->fDataNonMusr.fData[xIndex][i]); - fData.fValue.push_back(runData->fDataNonMusr.fData[yIndex][i]); - fData.fError.push_back(runData->fDataNonMusr.fErrData[yIndex][i]); + fData.fX.push_back(fRawRunData->fDataNonMusr.fData[xIndex][i]); + fData.fValue.push_back(fRawRunData->fDataNonMusr.fData[yIndex][i]); + fData.fError.push_back(fRawRunData->fDataNonMusr.fErrData[yIndex][i]); } else { // packed data, i.e. fRunInfo->fPacking > 1 if ((i % fRunInfo->fPacking == 0) && (i != 0)) { // fill data // cout << endl << "-> i=" << i; - fData.fX.push_back(runData->fDataNonMusr.fData[xIndex][i]-(runData->fDataNonMusr.fData[xIndex][i]-runData->fDataNonMusr.fData[xIndex][i-fRunInfo->fPacking])/2.0); + fData.fX.push_back(fRawRunData->fDataNonMusr.fData[xIndex][i]-(fRawRunData->fDataNonMusr.fData[xIndex][i]-fRawRunData->fDataNonMusr.fData[xIndex][i-fRunInfo->fPacking])/2.0); fData.fValue.push_back(value); fData.fError.push_back(TMath::Sqrt(err)); value = 0.0; err = 0.0; } // sum raw data values - value += runData->fDataNonMusr.fData[yIndex][i]; - err += runData->fDataNonMusr.fErrData[yIndex][i]*runData->fDataNonMusr.fErrData[yIndex][i]; + value += fRawRunData->fDataNonMusr.fData[yIndex][i]; + err += fRawRunData->fDataNonMusr.fErrData[yIndex][i]*fRawRunData->fDataNonMusr.fErrData[yIndex][i]; } } // cout << endl << ">> fData.fValue.size()=" << fData.fValue.size(); @@ -370,30 +364,29 @@ bool PRunNonMusr::PrepareViewData() /** *

* - * \param runData */ -unsigned int PRunNonMusr::GetXIndex(PRawRunData* runData) +unsigned int PRunNonMusr::GetXIndex() { unsigned int index = 0; bool found = false; -// cout << endl << ">> PRunNonMusr::GetXIndex:"; - if (runData->fDataNonMusr.fXIndex >= 0) { // ascii-file format -// cout << endl << ">> PRunNonMusr::GetXIndex: ascii-file format"; - index = runData->fDataNonMusr.fXIndex; +//cout << endl << ">> PRunNonMusr::GetXIndex: fRawRunData->fDataNonMusr.fXIndex = " << fRawRunData->fDataNonMusr.fXIndex; + if (fRawRunData->fDataNonMusr.fXIndex >= 0) { // ascii-file format +//cout << endl << ">> PRunNonMusr::GetXIndex: ascii-file format"; + index = fRawRunData->fDataNonMusr.fXIndex; found = true; } else { // db-file format -// cout << endl << ">> PRunNonMusr::GetXIndex: db-file format"; +//cout << endl << ">> PRunNonMusr::GetXIndex: db-file format"; if (fRunInfo->fXYDataIndex[0] > 0) { // xy-data already indices -// cout << endl << ">> PRunNonMusr::GetXIndex: xy-data already indices"; +//cout << endl << ">> PRunNonMusr::GetXIndex: xy-data are already indices, i.e. not labels"; index = fRunInfo->fXYDataIndex[0]-1; // since xy-data start with 1 ... found = true; } else { // xy-data data tags which needs to be converted to an index -// cout << endl << ">> fDataTags.size()=" << runData->fDataNonMusr.fDataTags.size(); - for (unsigned int i=0; ifDataNonMusr.fDataTags.size(); i++) { - if (runData->fDataNonMusr.fDataTags[i].CompareTo(fRunInfo->fXYDataLabel[0]) == 0) { -// cout << endl << ">> i=" << i << ", runData->fDataNonMusr.fDataTags[i]=" << runData->fDataNonMusr.fDataTags[i].Data(); -// cout << endl << ">> fRunInfo->fXYDataLabel[0]=" << fRunInfo->fXYDataLabel[0].Data(); +//cout << endl << ">> fDataTags.size()=" << fRawRunData->fDataNonMusr.fDataTags.size(); + for (unsigned int i=0; ifDataNonMusr.fDataTags.size(); i++) { + if (fRawRunData->fDataNonMusr.fDataTags[i].CompareTo(fRunInfo->fXYDataLabel[0]) == 0) { +//cout << endl << ">> i=" << i << ", fRawRunData->fDataNonMusr.fDataTags[i]=" << fRawRunData->fDataNonMusr.fDataTags[i].Data(); +//cout << endl << ">> fRunInfo->fXYDataLabel[0]=" << fRunInfo->fXYDataLabel[0].Data(); index = i; found = true; break; @@ -417,25 +410,24 @@ unsigned int PRunNonMusr::GetXIndex(PRawRunData* runData) /** *

* - * \param runData */ -unsigned int PRunNonMusr::GetYIndex(PRawRunData* runData) +unsigned int PRunNonMusr::GetYIndex() { unsigned int index = 0; bool found = false; // cout << endl << ">> PRunNonMusr::GetYIndex:"; - if (runData->fDataNonMusr.fYIndex >= 0) { // ascii-file format - index = runData->fDataNonMusr.fYIndex; + if (fRawRunData->fDataNonMusr.fYIndex >= 0) { // ascii-file format + index = fRawRunData->fDataNonMusr.fYIndex; found = true; } else { // db-file format if (fRunInfo->fXYDataIndex[1] > 0) { // xy-data already indices index = fRunInfo->fXYDataIndex[1]-1; // since xy-data start with 1 ... found = true; } else { // xy-data data tags which needs to be converted to an index - for (unsigned int i=0; ifDataNonMusr.fDataTags.size(); i++) { - if (runData->fDataNonMusr.fDataTags[i].CompareTo(fRunInfo->fXYDataLabel[1]) == 0) { -// cout << endl << ">> i=" << i << ", runData->fDataNonMusr.fDataTags[i]=" << runData->fDataNonMusr.fDataTags[i].Data(); + for (unsigned int i=0; ifDataNonMusr.fDataTags.size(); i++) { + if (fRawRunData->fDataNonMusr.fDataTags[i].CompareTo(fRunInfo->fXYDataLabel[1]) == 0) { +// cout << endl << ">> i=" << i << ", fRawRunData->fDataNonMusr.fDataTags[i]=" << fRawRunData->fDataNonMusr.fDataTags[i].Data(); // cout << endl << ">> fRunInfo->fXYDataLabel[1]=" << fRunInfo->fXYDataLabel[1].Data(); index = i; found = true; diff --git a/src/include/PRunListCollection.h b/src/include/PRunListCollection.h index 191ecbb6..0ea6f4ed 100644 --- a/src/include/PRunListCollection.h +++ b/src/include/PRunListCollection.h @@ -79,8 +79,8 @@ class PRunListCollection virtual double GetField(TString &runName); virtual double GetEnergy(TString &runName); virtual const char* GetSetup(TString &runName); - virtual const char* GetXAxisTitle(TString &runName); - virtual const char* GetYAxisTitle(TString &runName); + virtual const char* GetXAxisTitle(TString &runName, const unsigned int idx); + virtual const char* GetYAxisTitle(TString &runName, const unsigned int idx); private: PMsrHandler *fMsrInfo; ///< keeps all msr file info diff --git a/src/include/PRunNonMusr.h b/src/include/PRunNonMusr.h index ef7474c9..5f078a5a 100644 --- a/src/include/PRunNonMusr.h +++ b/src/include/PRunNonMusr.h @@ -32,6 +32,7 @@ #ifndef _PRUNNONMUSR_H_ #define _PRUNNONMUSR_H_ +#include "PMusr.h" #include "PRunBase.h" class PRunNonMusr : public PRunBase @@ -47,18 +48,20 @@ class PRunNonMusr : public PRunBase virtual unsigned int GetNoOfFitBins() { return fNoOfFitBins; } + virtual unsigned int GetXIndex(); + virtual unsigned int GetYIndex(); + protected: virtual bool PrepareData(); virtual bool PrepareFitData(); virtual bool PrepareViewData(); private: + PRawRunData *fRawRunData; + double fFitStartTime; double fFitStopTime; unsigned int fNoOfFitBins; - - unsigned int GetXIndex(PRawRunData* runData); - unsigned int GetYIndex(PRawRunData* runData); }; #endif // _PRUNNONMUSR_H_