first implementation of the single histo RRF fit (no plotting yet). Seems to work but the error estimate of the RRF asymmetry seems to be too large. Needs to be checked.
This commit is contained in:
parent
99864b2b82
commit
6ee5d76b35
@ -21,6 +21,7 @@ h_sources = \
|
||||
../include/PRunNonMusr.h \
|
||||
../include/PRunMuMinus.h \
|
||||
../include/PRunSingleHisto.h \
|
||||
../include/PRunSingleHistoRRF.h \
|
||||
../include/PStartupHandler.h \
|
||||
../include/PTheory.h
|
||||
|
||||
@ -65,6 +66,7 @@ cpp_sources = \
|
||||
PRunNonMusr.cpp \
|
||||
PRunMuMinus.cpp \
|
||||
PRunSingleHisto.cpp \
|
||||
PRunSingleHistoRRF.cpp \
|
||||
PStartupHandler.cpp \
|
||||
PTheory.cpp
|
||||
|
||||
|
@ -77,11 +77,13 @@ Double_t PFitterFcn::operator()(const std::vector<Double_t>& par) const
|
||||
|
||||
if (fUseChi2) { // chi square
|
||||
value += fRunListCollection->GetSingleHistoChisq(par);
|
||||
value += fRunListCollection->GetSingleHistoRRFChisq(par);
|
||||
value += fRunListCollection->GetAsymmetryChisq(par);
|
||||
value += fRunListCollection->GetMuMinusChisq(par);
|
||||
value += fRunListCollection->GetNonMusrChisq(par);
|
||||
} else { // max likelihood
|
||||
value += fRunListCollection->GetSingleHistoMaximumLikelihood(par);
|
||||
value += fRunListCollection->GetSingleHistoRRFMaximumLikelihood(par);
|
||||
value += fRunListCollection->GetAsymmetryMaximumLikelihood(par);
|
||||
value += fRunListCollection->GetMuMinusMaximumLikelihood(par);
|
||||
value += fRunListCollection->GetNonMusrMaximumLikelihood(par);
|
||||
|
@ -636,7 +636,13 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
|
||||
fout.width(16);
|
||||
fout << left << "rrf_freq ";
|
||||
fout.width(8);
|
||||
fout << left << fGlobal.GetRRFFreq(fGlobal.GetRRFUnit().Data());
|
||||
|
||||
cout << "debug> PMsrHandler::WriteMsrLogFile(): fGlobal.GetRRFFreq(fGlobal.GetRRFUnit().Data())=" << fGlobal.GetRRFFreq(fGlobal.GetRRFUnit().Data()) << endl;
|
||||
neededPrec = LastSignificant(fGlobal.GetRRFFreq(fGlobal.GetRRFUnit().Data()),10);
|
||||
cout << "debug> PMsrHandler::WriteMsrLogFile(): neededPrec=" << neededPrec << endl;
|
||||
fout.precision(neededPrec);
|
||||
|
||||
fout << left << fixed << fGlobal.GetRRFFreq(fGlobal.GetRRFUnit().Data());
|
||||
fout << " " << fGlobal.GetRRFUnit();
|
||||
fout << endl;
|
||||
} else if (sstr.BeginsWith("rrf_phase", TString::kIgnoreCase) && (fGlobal.GetFitType() == MSR_FITTYPE_SINGLE_HISTO_RRF)) {
|
||||
@ -1650,6 +1656,7 @@ Int_t PMsrHandler::WriteMsrFile(const Char_t *filename, map<UInt_t, TString> *co
|
||||
fout.width(16);
|
||||
fout << left << "rrf_freq ";
|
||||
fout.width(8);
|
||||
cout << "debug> PMsrHandler::WriteMsrFile(): fGlobal.GetRRFFreq(fGlobal.GetRRFUnit().Data())=" << fGlobal.GetRRFFreq(fGlobal.GetRRFUnit().Data()) << endl;
|
||||
fout << left << fGlobal.GetRRFFreq(fGlobal.GetRRFUnit().Data());
|
||||
fout << " " << fGlobal.GetRRFUnit();
|
||||
fout << endl;
|
||||
|
@ -752,21 +752,25 @@ Double_t PMsrGlobalBlock::GetRRFFreq(const char *unit)
|
||||
return freq;
|
||||
}
|
||||
|
||||
cout << endl << "debug> PMsrGlobalBlock::GetRRFFreq(" << unit << "): unitTag=" << unitTag << ", fRRFFreq=" << fRRFFreq;
|
||||
|
||||
// calc the conversion factor
|
||||
if (unitTag == fRRFUnitTag)
|
||||
freq = fRRFFreq;
|
||||
else if ((unitTag == RRF_UNIT_MHz) && (fRRFUnitTag == RRF_UNIT_Mcs))
|
||||
freq = fRRFFreq/TMath::TwoPi();
|
||||
else if ((unitTag == RRF_UNIT_MHz) && (fRRFUnitTag == RRF_UNIT_T))
|
||||
freq = fRRFFreq*GAMMA_BAR_MUON;
|
||||
freq = fRRFFreq*1e4*GAMMA_BAR_MUON; // 1e4 need for T -> G since GAMMA_BAR_MUON is given in MHz/G
|
||||
else if ((unitTag == RRF_UNIT_Mcs) && (fRRFUnitTag == RRF_UNIT_MHz))
|
||||
freq = fRRFFreq*TMath::TwoPi();
|
||||
else if ((unitTag == RRF_UNIT_Mcs) && (fRRFUnitTag == RRF_UNIT_T))
|
||||
freq = fRRFFreq*TMath::TwoPi()*GAMMA_BAR_MUON;
|
||||
freq = fRRFFreq*1e4*TMath::TwoPi()*GAMMA_BAR_MUON; // 1e4 need for T -> G since GAMMA_BAR_MUON is given in MHz/G
|
||||
else if ((unitTag == RRF_UNIT_T) && (fRRFUnitTag == RRF_UNIT_MHz))
|
||||
freq = fRRFFreq/GAMMA_BAR_MUON;
|
||||
freq = fRRFFreq/GAMMA_BAR_MUON*1e-4; // 1e-4 need for G -> T since GAMMA_BAR_MUON is given in MHz/G
|
||||
else if ((unitTag == RRF_UNIT_T) && (fRRFUnitTag == RRF_UNIT_Mcs))
|
||||
freq = fRRFFreq/(TMath::TwoPi()*GAMMA_BAR_MUON);
|
||||
freq = fRRFFreq/(TMath::TwoPi()*GAMMA_BAR_MUON)*1e-4; // 1e-4 need for G -> T since GAMMA_BAR_MUON is given in MHz/G
|
||||
|
||||
cout << endl << "debug> PMsrGlobalBlock::GetRRFFreq(" << unit << "): freq=" << freq << endl;
|
||||
|
||||
return freq;
|
||||
}
|
||||
|
@ -58,6 +58,12 @@ PRunListCollection::~PRunListCollection()
|
||||
}
|
||||
fRunSingleHistoList.clear();
|
||||
|
||||
for (UInt_t i=0; i<fRunSingleHistoRRFList.size(); i++) {
|
||||
fRunSingleHistoRRFList[i]->CleanUp();
|
||||
fRunSingleHistoRRFList[i]->~PRunSingleHistoRRF();
|
||||
}
|
||||
fRunSingleHistoRRFList.clear();
|
||||
|
||||
for (UInt_t i=0; i<fRunAsymmetryList.size(); i++) {
|
||||
fRunAsymmetryList[i]->CleanUp();
|
||||
fRunAsymmetryList[i]->~PRunAsymmetry();
|
||||
@ -100,12 +106,20 @@ Bool_t PRunListCollection::Add(Int_t runNo, EPMusrHandleTag tag)
|
||||
fitType = (*fMsrInfo->GetMsrGlobal()).GetFitType();
|
||||
}
|
||||
|
||||
cout << "debug> PRunListCollection::Add(): (runNo: " << runNo << "), fitType = " << fitType << endl;
|
||||
|
||||
switch (fitType) {
|
||||
case PRUN_SINGLE_HISTO:
|
||||
fRunSingleHistoList.push_back(new PRunSingleHisto(fMsrInfo, fData, runNo, tag));
|
||||
if (!fRunSingleHistoList[fRunSingleHistoList.size()-1]->IsValid())
|
||||
success = false;
|
||||
break;
|
||||
case PRUN_SINGLE_HISTO_RRF:
|
||||
cout << "debug> PRunListCollection::Add(): add RRF single histo run to PRunListCollection (runNo: " << runNo << ")" << endl;
|
||||
fRunSingleHistoRRFList.push_back(new PRunSingleHistoRRF(fMsrInfo, fData, runNo, tag));
|
||||
if (!fRunSingleHistoRRFList[fRunSingleHistoRRFList.size()-1]->IsValid())
|
||||
success = false;
|
||||
break;
|
||||
case PRUN_ASYMMETRY:
|
||||
fRunAsymmetryList.push_back(new PRunAsymmetry(fMsrInfo, fData, runNo, tag));
|
||||
if (!fRunAsymmetryList[fRunAsymmetryList.size()-1]->IsValid())
|
||||
@ -147,6 +161,8 @@ void PRunListCollection::SetFitRange(const TString fitRange)
|
||||
{
|
||||
for (UInt_t i=0; i<fRunSingleHistoList.size(); i++)
|
||||
fRunSingleHistoList[i]->SetFitRangeBin(fitRange);
|
||||
for (UInt_t i=0; i<fRunSingleHistoRRFList.size(); i++)
|
||||
fRunSingleHistoRRFList[i]->SetFitRangeBin(fitRange);
|
||||
for (UInt_t i=0; i<fRunAsymmetryList.size(); i++)
|
||||
fRunAsymmetryList[i]->SetFitRangeBin(fitRange);
|
||||
for (UInt_t i=0; i<fRunMuMinusList.size(); i++)
|
||||
@ -169,6 +185,8 @@ void PRunListCollection::SetFitRange(const PDoublePairVector fitRange)
|
||||
{
|
||||
for (UInt_t i=0; i<fRunSingleHistoList.size(); i++)
|
||||
fRunSingleHistoList[i]->SetFitRange(fitRange);
|
||||
for (UInt_t i=0; i<fRunSingleHistoRRFList.size(); i++)
|
||||
fRunSingleHistoRRFList[i]->SetFitRange(fitRange);
|
||||
for (UInt_t i=0; i<fRunAsymmetryList.size(); i++)
|
||||
fRunAsymmetryList[i]->SetFitRange(fitRange);
|
||||
for (UInt_t i=0; i<fRunMuMinusList.size(); i++)
|
||||
@ -198,6 +216,27 @@ Double_t PRunListCollection::GetSingleHistoChisq(const std::vector<Double_t>& pa
|
||||
return chisq;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// GetSingleHistoRRFChisq (public)
|
||||
//--------------------------------------------------------------------------
|
||||
/**
|
||||
* <p>Calculates chi-square of <em>all</em> single histogram RRF runs of a msr-file.
|
||||
*
|
||||
* <b>return:</b>
|
||||
* - chi-square of all single histogram RRF runs of the msr-file
|
||||
*
|
||||
* \param par fit parameter vector
|
||||
*/
|
||||
Double_t PRunListCollection::GetSingleHistoRRFChisq(const std::vector<Double_t>& par) const
|
||||
{
|
||||
Double_t chisq = 0.0;
|
||||
|
||||
for (UInt_t i=0; i<fRunSingleHistoRRFList.size(); i++)
|
||||
chisq += fRunSingleHistoRRFList[i]->CalcChiSquare(par);
|
||||
|
||||
return chisq;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// GetAsymmetryChisq (public)
|
||||
//--------------------------------------------------------------------------
|
||||
@ -299,6 +338,9 @@ Double_t PRunListCollection::GetSingleHistoChisqExpected(const std::vector<Doubl
|
||||
case PRUN_SINGLE_HISTO:
|
||||
expectedChisq = fRunSingleHistoList[subIdx]->CalcChiSquareExpected(par);
|
||||
break;
|
||||
case PRUN_SINGLE_HISTO_RRF:
|
||||
expectedChisq = fRunSingleHistoRRFList[subIdx]->CalcChiSquareExpected(par);
|
||||
break;
|
||||
case PRUN_ASYMMETRY:
|
||||
expectedChisq = fRunAsymmetryList[subIdx]->CalcChiSquareExpected(par);
|
||||
break;
|
||||
@ -353,6 +395,9 @@ Double_t PRunListCollection::GetSingleRunChisq(const std::vector<Double_t>& par,
|
||||
case PRUN_SINGLE_HISTO:
|
||||
chisq = fRunSingleHistoList[subIdx]->CalcChiSquare(par);
|
||||
break;
|
||||
case PRUN_SINGLE_HISTO_RRF:
|
||||
chisq = fRunSingleHistoRRFList[subIdx]->CalcChiSquare(par);
|
||||
break;
|
||||
case PRUN_ASYMMETRY:
|
||||
chisq = fRunAsymmetryList[subIdx]->CalcChiSquare(par);
|
||||
break;
|
||||
@ -376,7 +421,7 @@ Double_t PRunListCollection::GetSingleRunChisq(const std::vector<Double_t>& par,
|
||||
* <p>Calculates log max-likelihood of <em>all</em> single histogram runs of a msr-file.
|
||||
*
|
||||
* <b>return:</b>
|
||||
* - chi-square of all single histogram runs of the msr-file
|
||||
* - log max-likelihood of all single histogram runs of the msr-file
|
||||
*
|
||||
* \param par fit parameter vector
|
||||
*/
|
||||
@ -390,6 +435,27 @@ Double_t PRunListCollection::GetSingleHistoMaximumLikelihood(const std::vector<D
|
||||
return mlh;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// GetSingleHistoRRFMaximumLikelihood (public)
|
||||
//--------------------------------------------------------------------------
|
||||
/**
|
||||
* <p>Calculates log max-likelihood of <em>all</em> single histogram RRF runs of a msr-file.
|
||||
*
|
||||
* <b>return:</b>
|
||||
* - log max-likelihood of all single histogram runs of the msr-file
|
||||
*
|
||||
* \param par fit parameter vector
|
||||
*/
|
||||
Double_t PRunListCollection::GetSingleHistoRRFMaximumLikelihood(const std::vector<Double_t>& par) const
|
||||
{
|
||||
Double_t mlh = 0.0;
|
||||
|
||||
for (UInt_t i=0; i<fRunSingleHistoRRFList.size(); i++)
|
||||
mlh += fRunSingleHistoRRFList[i]->CalcMaxLikelihood(par);
|
||||
|
||||
return mlh;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// GetAsymmetryMaximumLikelihood (public)
|
||||
//--------------------------------------------------------------------------
|
||||
@ -419,7 +485,7 @@ Double_t PRunListCollection::GetAsymmetryMaximumLikelihood(const std::vector<Dou
|
||||
* <p>Calculates log max-likelihood of <em>all</em> mu minus runs of a msr-file.
|
||||
*
|
||||
* <b>return:</b>
|
||||
* - chi-square of all mu minus runs of the msr-file
|
||||
* - log max-likelihood of all mu minus runs of the msr-file
|
||||
*
|
||||
* \param par fit parameter vector
|
||||
*/
|
||||
@ -493,6 +559,9 @@ UInt_t PRunListCollection::GetNoOfBinsFitted(const UInt_t idx) const
|
||||
case PRUN_SINGLE_HISTO:
|
||||
result = fRunSingleHistoList[subIdx]->GetNoOfFitBins();
|
||||
break;
|
||||
case PRUN_SINGLE_HISTO_RRF:
|
||||
result = fRunSingleHistoRRFList[subIdx]->GetNoOfFitBins();
|
||||
break;
|
||||
case PRUN_ASYMMETRY:
|
||||
result = fRunAsymmetryList[subIdx]->GetNoOfFitBins();
|
||||
break;
|
||||
@ -526,6 +595,9 @@ UInt_t PRunListCollection::GetTotalNoOfBinsFitted() const
|
||||
for (UInt_t i=0; i<fRunSingleHistoList.size(); i++)
|
||||
counts += fRunSingleHistoList[i]->GetNoOfFitBins();
|
||||
|
||||
for (UInt_t i=0; i<fRunSingleHistoRRFList.size(); i++)
|
||||
counts += fRunSingleHistoRRFList[i]->GetNoOfFitBins();
|
||||
|
||||
for (UInt_t i=0; i<fRunAsymmetryList.size(); i++)
|
||||
counts += fRunAsymmetryList[i]->GetNoOfFitBins();
|
||||
|
||||
@ -581,6 +653,49 @@ PRunData* PRunListCollection::GetSingleHisto(UInt_t index, EDataSwitch tag)
|
||||
return data;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// GetSingleHistoRRF (public)
|
||||
//--------------------------------------------------------------------------
|
||||
/**
|
||||
* <p>Get a processed single histogram RRF data set.
|
||||
*
|
||||
* <b>return:</b>
|
||||
* - pointer to the run data set (processed data) if data set is found
|
||||
* - null pointer otherwise
|
||||
*
|
||||
* \param index msr-file run index
|
||||
* \param tag kIndex -> data at index, kRunNo -> data of given run no
|
||||
*/
|
||||
PRunData* PRunListCollection::GetSingleHistoRRF(UInt_t index, EDataSwitch tag)
|
||||
{
|
||||
PRunData *data = 0;
|
||||
|
||||
switch (tag) {
|
||||
case kIndex:
|
||||
if ((index < 0) || (index >= fRunSingleHistoRRFList.size())) {
|
||||
cerr << endl << "PRunListCollection::GetSingleHistoRRF: **ERROR** index = " << index << " out of bounds";
|
||||
cerr << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
fRunSingleHistoRRFList[index]->CalcTheory();
|
||||
data = fRunSingleHistoRRFList[index]->GetData();
|
||||
break;
|
||||
case kRunNo:
|
||||
for (UInt_t i=0; i<fRunSingleHistoRRFList.size(); i++) {
|
||||
if (fRunSingleHistoRRFList[i]->GetRunNo() == index) {
|
||||
data = fRunSingleHistoRRFList[i]->GetData();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: // error
|
||||
break;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// GetAsymmetry (public)
|
||||
//--------------------------------------------------------------------------
|
||||
|
1483
src/classes/PRunSingleHistoRRF.cpp
Normal file
1483
src/classes/PRunSingleHistoRRF.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,7 @@
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2007-2014 by Andreas Suter *
|
||||
* Copyright (C) 2007-2016 by Andreas Suter *
|
||||
* andreas.suter@psi.ch *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@ -37,6 +37,7 @@ using namespace std;
|
||||
#include "PMsrHandler.h"
|
||||
#include "PRunDataHandler.h"
|
||||
#include "PRunSingleHisto.h"
|
||||
#include "PRunSingleHistoRRF.h"
|
||||
#include "PRunAsymmetry.h"
|
||||
#include "PRunMuMinus.h"
|
||||
#include "PRunNonMusr.h"
|
||||
@ -58,6 +59,7 @@ class PRunListCollection
|
||||
virtual void SetFitRange(const TString fitRange);
|
||||
|
||||
virtual Double_t GetSingleHistoChisq(const std::vector<Double_t>& par) const;
|
||||
virtual Double_t GetSingleHistoRRFChisq(const std::vector<Double_t>& par) const;
|
||||
virtual Double_t GetAsymmetryChisq(const std::vector<Double_t>& par) const;
|
||||
virtual Double_t GetMuMinusChisq(const std::vector<Double_t>& par) const;
|
||||
virtual Double_t GetNonMusrChisq(const std::vector<Double_t>& par) const;
|
||||
@ -66,6 +68,7 @@ class PRunListCollection
|
||||
virtual Double_t GetSingleRunChisq(const std::vector<Double_t>& par, const UInt_t idx) const;
|
||||
|
||||
virtual Double_t GetSingleHistoMaximumLikelihood(const std::vector<Double_t>& par) const;
|
||||
virtual Double_t GetSingleHistoRRFMaximumLikelihood(const std::vector<Double_t>& par) const;
|
||||
virtual Double_t GetAsymmetryMaximumLikelihood(const std::vector<Double_t>& par) const;
|
||||
virtual Double_t GetMuMinusMaximumLikelihood(const std::vector<Double_t>& par) const;
|
||||
virtual Double_t GetNonMusrMaximumLikelihood(const std::vector<Double_t>& par) const;
|
||||
@ -74,11 +77,13 @@ class PRunListCollection
|
||||
virtual UInt_t GetTotalNoOfBinsFitted() const;
|
||||
|
||||
virtual UInt_t GetNoOfSingleHisto() const { return fRunSingleHistoList.size(); } ///< returns the number of single histogram data sets present in the msr-file
|
||||
virtual UInt_t GetNoOfSingleHistoRRF() const { return fRunSingleHistoRRFList.size(); } ///< returns the number of single histogram RRF data sets present in the msr-file
|
||||
virtual UInt_t GetNoOfAsymmetry() const { return fRunAsymmetryList.size(); } ///< returns the number of asymmetry data sets present in the msr-file
|
||||
virtual UInt_t GetNoOfMuMinus() const { return fRunMuMinusList.size(); } ///< returns the number of mu minus data sets present in the msr-file
|
||||
virtual UInt_t GetNoOfNonMusr() const { return fRunNonMusrList.size(); } ///< returns the number of non-muSR data sets present in the msr-file
|
||||
|
||||
virtual PRunData* GetSingleHisto(UInt_t index, EDataSwitch tag=kIndex);
|
||||
virtual PRunData* GetSingleHistoRRF(UInt_t index, EDataSwitch tag=kIndex);
|
||||
virtual PRunData* GetAsymmetry(UInt_t index, EDataSwitch tag=kIndex);
|
||||
virtual PRunData* GetMuMinus(UInt_t index, EDataSwitch tag=kIndex);
|
||||
virtual PRunData* GetNonMusr(UInt_t index, EDataSwitch tag=kIndex);
|
||||
@ -94,10 +99,11 @@ class PRunListCollection
|
||||
PMsrHandler *fMsrInfo; ///< pointer to the msr-file handler
|
||||
PRunDataHandler *fData; ///< pointer to the run-data handler
|
||||
|
||||
vector<PRunSingleHisto*> fRunSingleHistoList; ///< stores all processed single histogram data
|
||||
vector<PRunAsymmetry*> fRunAsymmetryList; ///< stores all processed asymmetry data
|
||||
vector<PRunMuMinus*> fRunMuMinusList; ///< stores all processed mu-minus data
|
||||
vector<PRunNonMusr*> fRunNonMusrList; ///< stores all processed non-muSR data
|
||||
vector<PRunSingleHisto*> fRunSingleHistoList; ///< stores all processed single histogram data
|
||||
vector<PRunSingleHistoRRF*> fRunSingleHistoRRFList; ///< stores all processed single histogram RRF data
|
||||
vector<PRunAsymmetry*> fRunAsymmetryList; ///< stores all processed asymmetry data
|
||||
vector<PRunMuMinus*> fRunMuMinusList; ///< stores all processed mu-minus data
|
||||
vector<PRunNonMusr*> fRunNonMusrList; ///< stores all processed non-muSR data
|
||||
};
|
||||
|
||||
#endif // _PRUNLISTCOLLECTION_H_
|
||||
|
79
src/include/PRunSingleHistoRRF.h
Normal file
79
src/include/PRunSingleHistoRRF.h
Normal file
@ -0,0 +1,79 @@
|
||||
/***************************************************************************
|
||||
|
||||
PRunSingleHistoRRF.h
|
||||
|
||||
Author: Andreas Suter
|
||||
e-mail: andreas.suter@psi.ch
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2007-2016 by Andreas Suter *
|
||||
* andreas.suter@psi.ch *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _PRUNSINGLEHISTORRF_H_
|
||||
#define _PRUNSINGLEHISTORRF_H_
|
||||
|
||||
#include "PRunBase.h"
|
||||
|
||||
/**
|
||||
* <p>Class handling single histogram fit type.
|
||||
*/
|
||||
class PRunSingleHistoRRF : public PRunBase
|
||||
{
|
||||
public:
|
||||
PRunSingleHistoRRF();
|
||||
PRunSingleHistoRRF(PMsrHandler *msrInfo, PRunDataHandler *rawData, UInt_t runNo, EPMusrHandleTag tag);
|
||||
virtual ~PRunSingleHistoRRF();
|
||||
|
||||
virtual Double_t CalcChiSquare(const std::vector<Double_t>& par);
|
||||
virtual Double_t CalcChiSquareExpected(const std::vector<Double_t>& par);
|
||||
virtual Double_t CalcMaxLikelihood(const std::vector<Double_t>& par);
|
||||
virtual void CalcTheory();
|
||||
|
||||
virtual UInt_t GetNoOfFitBins();
|
||||
|
||||
virtual void SetFitRangeBin(const TString fitRange);
|
||||
|
||||
protected:
|
||||
virtual void CalcNoOfFitBins();
|
||||
virtual Bool_t PrepareData();
|
||||
virtual Bool_t PrepareFitData(PRawRunData* runData, const UInt_t histoNo);
|
||||
virtual Bool_t PrepareRawViewData(PRawRunData* runData, const UInt_t histoNo);
|
||||
virtual Bool_t PrepareViewData(PRawRunData* runData, const UInt_t histoNo);
|
||||
|
||||
private:
|
||||
static const Double_t N0EstimateEndTime = 2.0; ///< end time in (us) over which N0 is estimated. Should evetually go into the musrfit_startup.xml
|
||||
|
||||
UInt_t fNoOfFitBins; ///< number of bins to be fitted
|
||||
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
|
||||
|
||||
PDoubleVector fForward; ///< forward histo data
|
||||
|
||||
virtual Bool_t GetProperT0(PRawRunData* runData, PMsrGlobalBlock *globalBlock, PUIntVector &histoNo);
|
||||
virtual Bool_t GetProperDataRange();
|
||||
virtual void GetProperFitRange(PMsrGlobalBlock *globalBlock);
|
||||
virtual Double_t EstimateN0();
|
||||
virtual Bool_t EstimateBkg(UInt_t histoNo);
|
||||
};
|
||||
|
||||
#endif // _PRUNSINGLEHISTORRF_H_
|
@ -175,10 +175,10 @@ void musrfit_dump_ascii(char *fileName, PRunListCollection *runList)
|
||||
// go through the run list, get the data and dump it in a file
|
||||
|
||||
int runCounter = 0;
|
||||
PRunData *data;
|
||||
|
||||
// single histos
|
||||
unsigned int size = runList->GetNoOfSingleHisto();
|
||||
PRunData *data;
|
||||
if (size > 0) {
|
||||
for (unsigned int i=0; i<size; i++) {
|
||||
data = runList->GetSingleHisto(i);
|
||||
@ -190,6 +190,19 @@ void musrfit_dump_ascii(char *fileName, PRunListCollection *runList)
|
||||
}
|
||||
}
|
||||
|
||||
// single histos
|
||||
size = runList->GetNoOfSingleHistoRRF();
|
||||
if (size > 0) {
|
||||
for (unsigned int i=0; i<size; i++) {
|
||||
data = runList->GetSingleHistoRRF(i);
|
||||
if (data) {
|
||||
// dump data
|
||||
musrfit_write_ascii(fln, data, runCounter);
|
||||
runCounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// asymmetry
|
||||
size = runList->GetNoOfAsymmetry();
|
||||
if (size > 0) {
|
||||
@ -308,10 +321,10 @@ void musrfit_dump_root(char *fileName, PRunListCollection *runList)
|
||||
// go through the run list, get the data and dump it in a file
|
||||
|
||||
int runCounter = 0;
|
||||
PRunData *data;
|
||||
|
||||
// single histos
|
||||
unsigned int size = runList->GetNoOfSingleHisto();
|
||||
PRunData *data;
|
||||
if (size > 0) {
|
||||
for (unsigned int i=0; i<size; i++) {
|
||||
data = runList->GetSingleHisto(i);
|
||||
@ -323,6 +336,19 @@ void musrfit_dump_root(char *fileName, PRunListCollection *runList)
|
||||
}
|
||||
}
|
||||
|
||||
// single histo RRF
|
||||
size = runList->GetNoOfSingleHistoRRF();
|
||||
if (size > 0) {
|
||||
for (unsigned int i=0; i<size; i++) {
|
||||
data = runList->GetSingleHistoRRF(i);
|
||||
if (data) {
|
||||
// dump data
|
||||
musrfit_write_root(f, fln, data, runCounter);
|
||||
runCounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// asymmetry
|
||||
size = runList->GetNoOfAsymmetry();
|
||||
if (size > 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user