From 7270e2e58db4c3662cdf13d815a1155cef273168 Mon Sep 17 00:00:00 2001 From: nemu Date: Tue, 9 Jun 2009 12:56:58 +0000 Subject: [PATCH] added view_packing option in the PLOT block --- src/classes/PMusrCanvas.cpp | 2 +- src/classes/PRunAsymmetry.cpp | 42 +++++++++++++++++++-------------- src/classes/PRunSingleHisto.cpp | 42 +++++++++++++++++++++------------ 3 files changed, 52 insertions(+), 34 deletions(-) diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index e150ad26..d02b5df1 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -1392,7 +1392,7 @@ void PMusrCanvas::HandleDataSet(unsigned int plotNo, unsigned int runNo, PRunDat end = data->fDataTimeStart + data->fValue.size()*data->fDataTimeStep; size = data->fValue.size(); -cout << endl << ">> PMusrCanvas::HandleDataSet(): data->fDataTimeStart = " << data->fDataTimeStart << ", data->fDataTimeStep = " << data->fDataTimeStep << endl; +//cout << endl << ">> PMusrCanvas::HandleDataSet(): data->fDataTimeStart = " << data->fDataTimeStart << ", data->fDataTimeStep = " << data->fDataTimeStep << endl; // check if 'use_fit_range' plotting is whished if (fMsrHandler->GetMsrPlotList()->at(fPlotNumber).fUseFitRanges) { diff --git a/src/classes/PRunAsymmetry.cpp b/src/classes/PRunAsymmetry.cpp index 36e33c14..8cad6019 100644 --- a/src/classes/PRunAsymmetry.cpp +++ b/src/classes/PRunAsymmetry.cpp @@ -755,6 +755,12 @@ bool PRunAsymmetry::PrepareFitData(PRawRunData* runData, unsigned int histoNo[2] */ bool PRunAsymmetry::PrepareViewData(PRawRunData* runData, unsigned int histoNo[2]) { + // check if view_packing is wished + int packing = fRunInfo->fPacking; + if (fMsrInfo->GetMsrPlotList()->at(0).fViewPacking > 0) { + packing = fMsrInfo->GetMsrPlotList()->at(0).fViewPacking; + } + // feed the parameter vector std::vector par; PMsrParamList *paramList = fMsrInfo->GetMsrParamList(); @@ -764,10 +770,10 @@ bool PRunAsymmetry::PrepareViewData(PRawRunData* runData, unsigned int histoNo[2 // transform raw histo data. This is done the following way (for details see the manual): // first rebin the data, than calculate the asymmetry // first get start data, end data, and t0 - int val = fRunInfo->fDataRange[0]-fRunInfo->fPacking*(fRunInfo->fDataRange[0]/fRunInfo->fPacking); + int val = fRunInfo->fDataRange[0]-packing*(fRunInfo->fDataRange[0]/packing); do { if (fRunInfo->fDataRange[2] - fRunInfo->fDataRange[0] < 0) - val += fRunInfo->fPacking; + val += packing; } while (val + fRunInfo->fDataRange[2] - fRunInfo->fDataRange[0] < 0); int start[2] = {val, val + fRunInfo->fDataRange[2] - fRunInfo->fDataRange[0]}; @@ -781,12 +787,12 @@ cout << endl; */ // make sure that there are equal number of rebinned bins in forward and backward - unsigned int noOfBins0 = (runData->fDataBin[histoNo[0]].size()-start[0])/fRunInfo->fPacking; - unsigned int noOfBins1 = (runData->fDataBin[histoNo[1]].size()-start[1])/fRunInfo->fPacking; + unsigned int noOfBins0 = (runData->fDataBin[histoNo[0]].size()-start[0])/packing; + unsigned int noOfBins1 = (runData->fDataBin[histoNo[1]].size()-start[1])/packing; if (noOfBins0 > noOfBins1) noOfBins0 = noOfBins1; - end[0] = start[0] + noOfBins0 * fRunInfo->fPacking; - end[1] = start[1] + noOfBins0 * fRunInfo->fPacking; + end[0] = start[0] + noOfBins0 * packing; + end[1] = start[1] + noOfBins0 * packing; // check if start, end, and t0 make any sense // 1st check if start and end are in proper order @@ -820,19 +826,19 @@ cout << endl; double error = 0.0; // forward for (int i=start[0]; ifPacking == 1) { + if (packing == 1) { forwardPacked.fValue.push_back(fForward[i]); forwardPacked.fError.push_back(fForwardErr[i]); - } else { // packed data, i.e. fRunInfo->fPacking > 1 - if (((i-start[0]) % fRunInfo->fPacking == 0) && (i != start[0])) { // fill data + } else { // packed data, i.e. packing > 1 + if (((i-start[0]) % packing == 0) && (i != start[0])) { // fill data // in order that after rebinning the fit does not need to be redone (important for plots) // the value is normalize to per bin - value /= fRunInfo->fPacking; + value /= packing; forwardPacked.fValue.push_back(value); if (value == 0.0) forwardPacked.fError.push_back(1.0); else - forwardPacked.fError.push_back(TMath::Sqrt(error)/fRunInfo->fPacking); + forwardPacked.fError.push_back(TMath::Sqrt(error)/packing); value = 0.0; error = 0.0; } @@ -842,19 +848,19 @@ cout << endl; } // backward for (int i=start[1]; ifPacking == 1) { + if (packing == 1) { backwardPacked.fValue.push_back(fBackward[i]); backwardPacked.fError.push_back(fBackwardErr[i]); - } else { // packed data, i.e. fRunInfo->fPacking > 1 - if (((i-start[1]) % fRunInfo->fPacking == 0) && (i != start[1])) { // fill data + } else { // packed data, i.e. packing > 1 + if (((i-start[1]) % packing == 0) && (i != start[1])) { // fill data // in order that after rebinning the fit does not need to be redone (important for plots) // the value is normalize to per bin - value /= fRunInfo->fPacking; + value /= packing; backwardPacked.fValue.push_back(value); if (value == 0.0) backwardPacked.fError.push_back(1.0); else - backwardPacked.fError.push_back(TMath::Sqrt(error)/fRunInfo->fPacking); + backwardPacked.fError.push_back(TMath::Sqrt(error)/packing); value = 0.0; error = 0.0; } @@ -875,8 +881,8 @@ cout << endl; double f, b, ef, eb, alpha = 1.0, beta = 1.0; // fill data time start, and step // data start at data_start-t0 - fData.fDataTimeStart = fTimeResolution*((double)start[0]-t0[0]+(double)(fRunInfo->fPacking-1)/2.0); - fData.fDataTimeStep = fTimeResolution*(double)fRunInfo->fPacking; + fData.fDataTimeStart = fTimeResolution*((double)start[0]-t0[0]+(double)(packing-1)/2.0); + fData.fDataTimeStep = fTimeResolution*(double)packing; /* cout << endl << ">> start time = " << fData.fDataTimeStart << ", step = " << fData.fDataTimeStep; diff --git a/src/classes/PRunSingleHisto.cpp b/src/classes/PRunSingleHisto.cpp index b36457f7..a6c04dc0 100644 --- a/src/classes/PRunSingleHisto.cpp +++ b/src/classes/PRunSingleHisto.cpp @@ -553,11 +553,17 @@ bool PRunSingleHisto::PrepareFitData(PRawRunData* runData, const unsigned int hi */ bool PRunSingleHisto::PrepareRawViewData(PRawRunData* runData, const unsigned int histoNo) { + // check if view_packing is wished + int packing = fRunInfo->fPacking; + if (fMsrInfo->GetMsrPlotList()->at(0).fViewPacking > 0) { + packing = fMsrInfo->GetMsrPlotList()->at(0).fViewPacking; + } + // raw data, since PMusrCanvas is doing ranging etc. // start = the first bin which is a multiple of packing backward from first good data bin - int start = fRunInfo->fDataRange[0] - (fRunInfo->fDataRange[0]/fRunInfo->fPacking)*fRunInfo->fPacking; + int start = fRunInfo->fDataRange[0] - (fRunInfo->fDataRange[0]/packing)*packing; // end = last bin starting from start which is a multipl of packing and still within the data - int end = start + ((runData->fDataBin[histoNo].size()-start)/fRunInfo->fPacking)*fRunInfo->fPacking; + int end = start + ((runData->fDataBin[histoNo].size()-start)/packing)*packing; // check if start, end, and t0 make any sense // 1st check if start and end are in proper order if (end < start) { // need to swap them @@ -581,21 +587,21 @@ bool PRunSingleHisto::PrepareRawViewData(PRawRunData* runData, const unsigned in double value = 0.0; // data start at data_start-t0 // time shifted so that packing is included correctly, i.e. t0 == t0 after packing - fData.fDataTimeStart = fTimeResolution*((double)start-(double)t0+(double)(fRunInfo->fPacking-1)/2.0); - fData.fDataTimeStep = fTimeResolution*fRunInfo->fPacking; + fData.fDataTimeStart = fTimeResolution*((double)start-(double)t0+(double)(packing-1)/2.0); + fData.fDataTimeStep = fTimeResolution*packing; /* cout << endl << ">> time resolution = " << fTimeResolution; -cout << endl << ">> start = " << start << ", t0 = " << t0 << ", packing = " << fRunInfo->fPacking; +cout << endl << ">> start = " << start << ", t0 = " << t0 << ", packing = " << packing; cout << endl << ">> data start time = " << fData.fDataTimeStart; */ double normalizer = 1.0; for (int i=start; ifPacking == 0) && (i != start)) { // fill data + if (((i-start) % packing == 0) && (i != start)) { // fill data // in order that after rebinning the fit does not need to be redone (important for plots) // the value is normalize to per 1 nsec - normalizer = fRunInfo->fPacking * (fTimeResolution * 1e3); // fTimeResolution us->ns + normalizer = packing * (fTimeResolution * 1e3); // fTimeResolution us->ns value /= normalizer; fData.fValue.push_back(value); if (value == 0.0) @@ -705,15 +711,21 @@ cout << endl << ">> data start time = " << fData.fDataTimeStart; */ bool PRunSingleHisto::PrepareViewData(PRawRunData* runData, const unsigned int histoNo) { + // check if view_packing is wished + int packing = fRunInfo->fPacking; + if (fMsrInfo->GetMsrPlotList()->at(0).fViewPacking > 0) { + packing = fMsrInfo->GetMsrPlotList()->at(0).fViewPacking; + } + // transform raw histo data. This is done the following way (for details see the manual): // for the single histo fit, just the rebinned raw data are copied // first get start data, end data, and t0 int t0 = fT0s[0]; // start = the first bin which is a multiple of packing backward from first good data bin - int start = fRunInfo->fDataRange[0] - (fRunInfo->fDataRange[0]/fRunInfo->fPacking)*fRunInfo->fPacking; + int start = fRunInfo->fDataRange[0] - (fRunInfo->fDataRange[0]/packing)*packing; // end = last bin starting from start which is a multiple of packing and still within the data - int end = start + ((runData->fDataBin[histoNo].size()-start)/fRunInfo->fPacking)*fRunInfo->fPacking; + int end = start + ((runData->fDataBin[histoNo].size()-start)/packing)*packing; // check if start, end, and t0 make any sense // 1st check if start and end are in proper order @@ -780,8 +792,8 @@ bool PRunSingleHisto::PrepareViewData(PRawRunData* runData, const unsigned int h double time; // data start at data_start-t0 shifted by (pack-1)/2 - fData.fDataTimeStart = fTimeResolution*((double)start-(double)t0+(double)(fRunInfo->fPacking-1)/2.0); - fData.fDataTimeStep = fTimeResolution*fRunInfo->fPacking; + fData.fDataTimeStart = fTimeResolution*((double)start-(double)t0+(double)(packing-1)/2.0); + fData.fDataTimeStep = fTimeResolution*packing; /* cout << endl << ">> start time = " << fData.fDataTimeStart << ", step = " << fData.fDataTimeStep; @@ -791,17 +803,17 @@ cout << endl << "--------------------------------" << endl; double normalizer = 1.0; for (int i=start; ifPacking == 0) && (i != start)) { // fill data + if (((i-start) % packing == 0) && (i != start)) { // fill data // in order that after rebinning the fit does not need to be redone (important for plots) // the value is normalize to per 1 nsec - normalizer = fRunInfo->fPacking * (fTimeResolution * 1.0e3); // fTimeResolution us->ns + normalizer = packing * (fTimeResolution * 1.0e3); // fTimeResolution us->ns value /= normalizer; - time = (((double)i-(double)(fRunInfo->fPacking-1)/2.0)-t0)*fTimeResolution; + time = (((double)i-(double)(packing-1)/2.0)-t0)*fTimeResolution; expval = TMath::Exp(+time/tau)/N0; fData.fValue.push_back(-1.0+expval*(value-bkg)); //cout << endl << ">> i=" << i << ",t0=" << t0 << ",time=" << time << ",expval=" << expval << ",value=" << value << ",bkg=" << bkg << ",expval*(value-bkg)-1=" << expval*(value-bkg)-1.0; fData.fError.push_back(expval*TMath::Sqrt(value/normalizer)); -//cout << endl << ">> " << time << ", " << expval << ", " << -1.0+expval*(value-bkg) << ", " << expval*TMath::Sqrt(value/fRunInfo->fPacking); +//cout << endl << ">> " << time << ", " << expval << ", " << -1.0+expval*(value-bkg) << ", " << expval*TMath::Sqrt(value/packing); value = 0.0; } value += runData->fDataBin[histoNo][i];