From af7b729a5acd4185a503650153af64b0fe46ffdd Mon Sep 17 00:00:00 2001 From: Suter Andreas Date: Tue, 26 Apr 2016 12:39:27 +0200 Subject: [PATCH] start-/endTimeBin are now class members. This reduces the number of recalculations. --- ChangeLog | 2 + src/classes/PRunAsymmetry.cpp | 36 +++++++++--------- src/classes/PRunMuMinus.cpp | 64 ++++++++++++-------------------- src/classes/PRunSingleHisto.cpp | 65 ++++++++++++--------------------- src/include/PRunAsymmetry.h | 7 ++++ src/include/PRunMuMinus.h | 7 ++++ src/include/PRunSingleHisto.h | 14 ++++++- 7 files changed, 92 insertions(+), 103 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7c19f899..e8a6d9ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,8 @@ changes since 0.17.0 =================================== NEW 2016-04-22 Added the theory function muMinusExpTF for mu minus fits NEW 2016-02-23 It is now possible to export the averaged data/Fourier +CHANGED 2016-04-26 start-/endTimeBin are now class members. This reduces + the number of recalculations. changes since 0.16.0 =================================== diff --git a/src/classes/PRunAsymmetry.cpp b/src/classes/PRunAsymmetry.cpp index a2572b32..b385b87d 100644 --- a/src/classes/PRunAsymmetry.cpp +++ b/src/classes/PRunAsymmetry.cpp @@ -62,6 +62,9 @@ PRunAsymmetry::PRunAsymmetry() : PRunBase() // the fit range can be changed in the command block, these variables need to be accessible fGoodBins[0] = -1; fGoodBins[1] = -1; + + fStartTimeBin = -1; + fEndTimeBin = -1; } //-------------------------------------------------------------------------- @@ -82,6 +85,9 @@ PRunAsymmetry::PRunAsymmetry(PMsrHandler *msrInfo, PRunDataHandler *rawData, UIn fGoodBins[0] = -1; fGoodBins[1] = -1; + fStartTimeBin = -1; + fEndTimeBin = -1; + fPacking = fRunInfo->GetPacking(); if (fPacking == -1) { // i.e. packing is NOT given in the RUN-block, it must be given in the GLOBAL-block fPacking = fMsrInfo->GetMsrGlobal()->GetPacking(); @@ -189,15 +195,7 @@ Double_t PRunAsymmetry::CalcChiSquare(const std::vector& par) // calculate chi square Double_t time(1.0); - Int_t i, N(static_cast(fData.GetValue()->size())); - - // In order not to have an IF in the next loop, determine the start and end bins for the fit range now - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > N) - endTimeBin = N; + Int_t i; // Calculate the theory function once to ensure one function evaluation for the current set of parameters. // This is needed for the LF and user functions where some non-thread-save calculations only need to be calculated once @@ -206,12 +204,12 @@ Double_t PRunAsymmetry::CalcChiSquare(const std::vector& par) asymFcnValue = fTheory->Func(time, par, fFuncValues); #ifdef HAVE_GOMP - Int_t chunk = (endTimeBin - startTimeBin)/omp_get_num_procs(); + Int_t chunk = (fEndTimeBin - fStartTimeBin)/omp_get_num_procs(); if (chunk < 10) chunk = 10; #pragma omp parallel for default(shared) private(i,time,diff,asymFcnValue,a,b,f) schedule(dynamic,chunk) reduction(+:chisq) #endif - for (i=startTimeBin; i < endTimeBin; ++i) { + for (i=fStartTimeBin; i(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > static_cast(fData.GetValue()->size())) - endTimeBin = fData.GetValue()->size(); + fStartTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); + if (fStartTimeBin < 0) + fStartTimeBin = 0; + fEndTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; + if (fEndTimeBin > static_cast(fData.GetValue()->size())) + fEndTimeBin = fData.GetValue()->size(); - if (endTimeBin > startTimeBin) - fNoOfFitBins = endTimeBin - startTimeBin; + if (fEndTimeBin > fStartTimeBin) + fNoOfFitBins = fEndTimeBin - fStartTimeBin; else fNoOfFitBins = 0; } diff --git a/src/classes/PRunMuMinus.cpp b/src/classes/PRunMuMinus.cpp index bdcf7049..244b9bb1 100644 --- a/src/classes/PRunMuMinus.cpp +++ b/src/classes/PRunMuMinus.cpp @@ -52,6 +52,9 @@ PRunMuMinus::PRunMuMinus() : PRunBase() fGoodBins[0] = -1; fGoodBins[1] = -1; + fStartTimeBin = -1; + fEndTimeBin = -1; + fHandleTag = kEmpty; } @@ -87,6 +90,9 @@ PRunMuMinus::PRunMuMinus(PMsrHandler *msrInfo, PRunDataHandler *rawData, UInt_t fGoodBins[0] = -1; fGoodBins[1] = -1; + fStartTimeBin = -1; + fEndTimeBin = -1; + if (!PrepareData()) { cerr << endl << ">> PRunMuMinus::PRunMuMinus: **SEVERE ERROR**: Couldn't prepare data for fitting!"; cerr << endl << ">> This is very bad :-(, will quit ..."; @@ -130,15 +136,7 @@ Double_t PRunMuMinus::CalcChiSquare(const std::vector& par) // calculate chi square Double_t time(1.0); - Int_t i, N(static_cast(fData.GetValue()->size())); - - // In order not to have an IF in the next loop, determine the start and end bins for the fit range now - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > N) - endTimeBin = N; + Int_t i; // Calculate the theory function once to ensure one function evaluation for the current set of parameters. // This is needed for the LF and user functions where some non-thread-save calculations only need to be calculated once @@ -147,12 +145,12 @@ Double_t PRunMuMinus::CalcChiSquare(const std::vector& par) time = fTheory->Func(time, par, fFuncValues); #ifdef HAVE_GOMP - Int_t chunk = (endTimeBin - startTimeBin)/omp_get_num_procs(); + Int_t chunk = (fEndTimeBin - fStartTimeBin)/omp_get_num_procs(); if (chunk < 10) chunk = 10; #pragma omp parallel for default(shared) private(i,time,diff) schedule(dynamic,chunk) reduction(+:chisq) #endif - for (i=startTimeBin; i < endTimeBin; ++i) { + for (i=fStartTimeBin; i < fEndTimeBin; ++i) { time = fData.GetDataTimeStart() + (Double_t)i*fData.GetDataTimeStep(); diff = fData.GetValue()->at(i) - fTheory->Func(time, par, fFuncValues); chisq += diff*diff / (fData.GetError()->at(i)*fData.GetError()->at(i)); @@ -186,15 +184,7 @@ Double_t PRunMuMinus::CalcChiSquareExpected(const std::vector& par) // calculate chi square Double_t time(1.0); - Int_t i, N(static_cast(fData.GetValue()->size())); - - // In order not to have an IF in the next loop, determine the start and end bins for the fit range now - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > N) - endTimeBin = N; + Int_t i; // Calculate the theory function once to ensure one function evaluation for the current set of parameters. // This is needed for the LF and user functions where some non-thread-save calculations only need to be calculated once @@ -203,12 +193,12 @@ Double_t PRunMuMinus::CalcChiSquareExpected(const std::vector& par) time = fTheory->Func(time, par, fFuncValues); #ifdef HAVE_GOMP - Int_t chunk = (endTimeBin - startTimeBin)/omp_get_num_procs(); + Int_t chunk = (fEndTimeBin - fStartTimeBin)/omp_get_num_procs(); if (chunk < 10) chunk = 10; #pragma omp parallel for default(shared) private(i,time,diff) schedule(dynamic,chunk) reduction(+:chisq) #endif - for (i=startTimeBin; i < endTimeBin; ++i) { + for (i=fStartTimeBin; i < fEndTimeBin; ++i) { time = fData.GetDataTimeStart() + (Double_t)i*fData.GetDataTimeStep(); theo = fTheory->Func(time, par, fFuncValues); diff = fData.GetValue()->at(i) - theo; @@ -243,15 +233,7 @@ Double_t PRunMuMinus::CalcMaxLikelihood(const std::vector& par) Double_t theo; Double_t data; Double_t time(1.0); - Int_t i, N(static_cast(fData.GetValue()->size())); - - // In order not to have an IF in the next loop, determine the start and end bins for the fit range now - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > N) - endTimeBin = N; + Int_t i; // Calculate the theory function once to ensure one function evaluation for the current set of parameters. // This is needed for the LF and user functions where some non-thread-save calculations only need to be calculated once @@ -260,12 +242,12 @@ Double_t PRunMuMinus::CalcMaxLikelihood(const std::vector& par) time = fTheory->Func(time, par, fFuncValues); #ifdef HAVE_GOMP - Int_t chunk = (endTimeBin - startTimeBin)/omp_get_num_procs(); + Int_t chunk = (fEndTimeBin - fStartTimeBin)/omp_get_num_procs(); if (chunk < 10) chunk = 10; #pragma omp parallel for default(shared) private(i,time,theo,data) schedule(dynamic,chunk) reduction(-:mllh) #endif - for (i=startTimeBin; i < endTimeBin; ++i) { + for (i=fStartTimeBin; i < fEndTimeBin; ++i) { time = fData.GetDataTimeStart() + (Double_t)i*fData.GetDataTimeStep(); // calculate theory for the given parameter set theo = fTheory->Func(time, par, fFuncValues); @@ -401,15 +383,15 @@ void PRunMuMinus::SetFitRangeBin(const TString fitRange) void PRunMuMinus::CalcNoOfFitBins() { // In order not having to loop over all bins and to stay consistent with the chisq method, calculate the start and end bins explicitly - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > static_cast(fData.GetValue()->size())) - endTimeBin = fData.GetValue()->size(); + fStartTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); + if (fStartTimeBin < 0) + fStartTimeBin = 0; + fEndTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; + if (fEndTimeBin > static_cast(fData.GetValue()->size())) + fEndTimeBin = fData.GetValue()->size(); - if (endTimeBin > startTimeBin) - fNoOfFitBins = endTimeBin - startTimeBin; + if (fEndTimeBin > fStartTimeBin) + fNoOfFitBins = fEndTimeBin - fStartTimeBin; else fNoOfFitBins = 0; } diff --git a/src/classes/PRunSingleHisto.cpp b/src/classes/PRunSingleHisto.cpp index 020c31e6..8b8b3094 100644 --- a/src/classes/PRunSingleHisto.cpp +++ b/src/classes/PRunSingleHisto.cpp @@ -64,6 +64,9 @@ PRunSingleHisto::PRunSingleHisto() : PRunBase() // the fit range can be changed in the command block, these variables need to be accessible fGoodBins[0] = -1; fGoodBins[1] = -1; + + fStartTimeBin = -1; + fEndTimeBin = -1; } //-------------------------------------------------------------------------- @@ -81,6 +84,7 @@ PRunSingleHisto::PRunSingleHisto(PMsrHandler *msrInfo, PRunDataHandler *rawData, { fScaleN0AndBkg = IsScaleN0AndBkg(); fNoOfFitBins = 0; + fBackground = 0; fPacking = fRunInfo->GetPacking(); if (fPacking == -1) { // i.e. packing is NOT given in the RUN-block, it must be given in the GLOBAL-block @@ -99,6 +103,9 @@ PRunSingleHisto::PRunSingleHisto(PMsrHandler *msrInfo, PRunDataHandler *rawData, fGoodBins[0] = -1; fGoodBins[1] = -1; + fStartTimeBin = -1; + fEndTimeBin = -1; + if (!PrepareData()) { cerr << endl << ">> PRunSingleHisto::PRunSingleHisto: **SEVERE ERROR**: Couldn't prepare data for fitting!"; cerr << endl << ">> This is very bad :-(, will quit ..."; @@ -173,15 +180,7 @@ Double_t PRunSingleHisto::CalcChiSquare(const std::vector& par) // calculate chi square Double_t time(1.0); - Int_t i, N(static_cast(fData.GetValue()->size())); - - // In order not to have an IF in the next loop, determine the start and end bins for the fit range now - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > N) - endTimeBin = N; + Int_t i; // Calculate the theory function once to ensure one function evaluation for the current set of parameters. // This is needed for the LF and user functions where some non-thread-save calculations only need to be calculated once @@ -190,12 +189,12 @@ Double_t PRunSingleHisto::CalcChiSquare(const std::vector& par) time = fTheory->Func(time, par, fFuncValues); #ifdef HAVE_GOMP - Int_t chunk = (endTimeBin - startTimeBin)/omp_get_num_procs(); + Int_t chunk = (fEndTimeBin - fStartTimeBin)/omp_get_num_procs(); if (chunk < 10) chunk = 10; #pragma omp parallel for default(shared) private(i,time,diff) schedule(dynamic,chunk) reduction(+:chisq) #endif - for (i=startTimeBin; i < endTimeBin; ++i) { + for (i=fStartTimeBin; iat(i) - (N0*TMath::Exp(-time/tau)*(1.0+fTheory->Func(time, par, fFuncValues))+bkg); @@ -266,15 +265,7 @@ Double_t PRunSingleHisto::CalcChiSquareExpected(const std::vector& par // calculate chi square Double_t time(1.0); - Int_t i, N(static_cast(fData.GetValue()->size())); - - // In order not to have an IF in the next loop, determine the start and end bins for the fit range now - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > N) - endTimeBin = N; + Int_t i; // Calculate the theory function once to ensure one function evaluation for the current set of parameters. // This is needed for the LF and user functions where some non-thread-save calculations only need to be calculated once @@ -283,12 +274,12 @@ Double_t PRunSingleHisto::CalcChiSquareExpected(const std::vector& par time = fTheory->Func(time, par, fFuncValues); #ifdef HAVE_GOMP - Int_t chunk = (endTimeBin - startTimeBin)/omp_get_num_procs(); + Int_t chunk = (fEndTimeBin - fStartTimeBin)/omp_get_num_procs(); if (chunk < 10) chunk = 10; #pragma omp parallel for default(shared) private(i,time,diff) schedule(dynamic,chunk) reduction(+:chisq) #endif - for (i=startTimeBin; i < endTimeBin; ++i) { + for (i=fStartTimeBin; i < fEndTimeBin; ++i) { time = fData.GetDataTimeStart() + (Double_t)i*fData.GetDataTimeStep(); theo = N0*TMath::Exp(-time/tau)*(1.0+fTheory->Func(time, par, fFuncValues))+bkg; diff = fData.GetValue()->at(i) - theo; @@ -359,7 +350,7 @@ Double_t PRunSingleHisto::CalcMaxLikelihood(const std::vector& par) Double_t theo; Double_t data; Double_t time(1.0); - Int_t i, N(static_cast(fData.GetValue()->size())); + Int_t i; // norm is needed since there is no simple scaling like in chisq case to get the correct Max.Log.Likelihood value when normlizing N(t) to 1/ns Double_t normalizer = 1.0; @@ -367,14 +358,6 @@ Double_t PRunSingleHisto::CalcMaxLikelihood(const std::vector& par) if (fScaleN0AndBkg) normalizer = fPacking * (fTimeResolution * 1.0e3); - // In order not to have an IF in the next loop, determine the start and end bins for the fit range now - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > N) - endTimeBin = N; - // Calculate the theory function once to ensure one function evaluation for the current set of parameters. // This is needed for the LF and user functions where some non-thread-save calculations only need to be calculated once // for a given set of parameters---which should be done outside of the parallelized loop. @@ -382,12 +365,12 @@ Double_t PRunSingleHisto::CalcMaxLikelihood(const std::vector& par) time = fTheory->Func(time, par, fFuncValues); #ifdef HAVE_GOMP - Int_t chunk = (endTimeBin - startTimeBin)/omp_get_num_procs(); + Int_t chunk = (fEndTimeBin - fStartTimeBin)/omp_get_num_procs(); if (chunk < 10) chunk = 10; #pragma omp parallel for default(shared) private(i,time,theo,data) schedule(dynamic,chunk) reduction(-:mllh) #endif - for (i=startTimeBin; iFunc(time, par, fFuncValues))+bkg; @@ -588,15 +571,15 @@ void PRunSingleHisto::SetFitRangeBin(const TString fitRange) void PRunSingleHisto::CalcNoOfFitBins() { // In order not having to loop over all bins and to stay consistent with the chisq method, calculate the start and end bins explicitly - Int_t startTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); - if (startTimeBin < 0) - startTimeBin = 0; - Int_t endTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; - if (endTimeBin > static_cast(fData.GetValue()->size())) - endTimeBin = fData.GetValue()->size(); + fStartTimeBin = static_cast(ceil((fFitStartTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())); + if (fStartTimeBin < 0) + fStartTimeBin = 0; + fEndTimeBin = static_cast(floor((fFitEndTime - fData.GetDataTimeStart())/fData.GetDataTimeStep())) + 1; + if (fEndTimeBin > static_cast(fData.GetValue()->size())) + fEndTimeBin = fData.GetValue()->size(); - if (endTimeBin > startTimeBin) - fNoOfFitBins = endTimeBin - startTimeBin; + if (fEndTimeBin > fStartTimeBin) + fNoOfFitBins = fEndTimeBin - fStartTimeBin; else fNoOfFitBins = 0; } diff --git a/src/include/PRunAsymmetry.h b/src/include/PRunAsymmetry.h index 1bb04701..fb788c17 100644 --- a/src/include/PRunAsymmetry.h +++ b/src/include/PRunAsymmetry.h @@ -52,6 +52,10 @@ class PRunAsymmetry : public PRunBase virtual void SetFitRangeBin(const TString fitRange); + virtual Int_t GetStartTimeBin() { return fStartTimeBin; } + virtual Int_t GetEndTimeBin() { return fEndTimeBin; } + virtual Int_t GetPacking() { return fPacking; } + protected: virtual void CalcNoOfFitBins(); virtual Bool_t PrepareData(); @@ -71,6 +75,9 @@ class PRunAsymmetry : public PRunBase Int_t fGoodBins[4]; ///< keep first/last good bins. 0=fgb, 1=lgb (forward); 2=fgb, 3=lgb (backward) + Int_t fStartTimeBin; ///< bin at which the fit starts + Int_t fEndTimeBin; ///< bin at which the fit ends + Bool_t SubtractFixBkg(); Bool_t SubtractEstimatedBkg(); diff --git a/src/include/PRunMuMinus.h b/src/include/PRunMuMinus.h index 6c731dd6..80297118 100644 --- a/src/include/PRunMuMinus.h +++ b/src/include/PRunMuMinus.h @@ -51,6 +51,10 @@ class PRunMuMinus : public PRunBase virtual void SetFitRangeBin(const TString fitRange); + virtual Int_t GetStartTimeBin() { return fStartTimeBin; } + virtual Int_t GetEndTimeBin() { return fEndTimeBin; } + virtual Int_t GetPacking() { return fPacking; } + protected: virtual void CalcNoOfFitBins(); virtual Bool_t PrepareData(); @@ -65,6 +69,9 @@ class PRunMuMinus : public PRunBase PDoubleVector fForward; ///< forward histo data + Int_t fStartTimeBin; ///< bin at which the fit starts + Int_t fEndTimeBin; ///< bin at which the fit ends + virtual Bool_t GetProperT0(PRawRunData* runData, PMsrGlobalBlock *globalBlock, PUIntVector &histoNo); virtual Bool_t GetProperDataRange(); virtual void GetProperFitRange(PMsrGlobalBlock *globalBlock); diff --git a/src/include/PRunSingleHisto.h b/src/include/PRunSingleHisto.h index 3980cff1..15423636 100644 --- a/src/include/PRunSingleHisto.h +++ b/src/include/PRunSingleHisto.h @@ -51,6 +51,13 @@ class PRunSingleHisto : public PRunBase virtual void SetFitRangeBin(const TString fitRange); + virtual Double_t GetBackground() { return fBackground; } + + virtual Int_t GetStartTimeBin() { return fStartTimeBin; } + virtual Int_t GetEndTimeBin() { return fEndTimeBin; } + virtual Int_t GetPacking() { return fPacking; } + virtual Bool_t GetScaleN0AndBkg() { return fScaleN0AndBkg; } + protected: virtual void CalcNoOfFitBins(); virtual Bool_t PrepareData(); @@ -64,9 +71,12 @@ class PRunSingleHisto : public PRunBase Double_t fBackground; ///< needed if background range is given (units: 1/bin) Int_t fPacking; ///< packing for this particular run. Either given in the RUN- or GLOBAL-block. - Int_t fGoodBins[2]; ///< keep first/last good bins. 0=fgb, 1=lgb + Int_t fGoodBins[2]; ///< keep first/last good bins. 0=fgb, 1=lgb - PDoubleVector fForward; ///< forward histo data + PDoubleVector fForward; ///< forward histo data + + Int_t fStartTimeBin; ///< bin at which the fit starts + Int_t fEndTimeBin; ///< bin at which the fit ends virtual Bool_t GetProperT0(PRawRunData* runData, PMsrGlobalBlock *globalBlock, PUIntVector &histoNo); virtual Bool_t GetProperDataRange();