Commit 2eefbbe5 authored by Anatoly Solomin's avatar Anatoly Solomin Committed by Jordi Garra Tico

RichMirrCombinFit: stopping decision now here; RichMirrAlign: regularizationMode introduced.

parent ec26903a
Pipeline #11229 failed with stage
################################################################################
# Package: RichMirrAlign
################################################################################
gaudi_subdir(RichMirrAlign v19r0)
gaudi_subdir(RichMirrAlign v19r1)
find_package(Boost COMPONENTS regex program_options)
find_package(ROOT COMPONENTS Hist Minuit2)
......
package RichMirrAlign
version v19r0
version v19r1
branches cmt doc files python src
......@@ -8,7 +8,7 @@ branches cmt doc files python src
# add necessary "use" statements
use GaudiPolicy v*
use ROOT v* LCG_Interfaces
use ROOT v* LCG_Interfaces
use Boost v* LCG_Interfaces
use XercesC v* LCG_Interfaces
use xqilla v* LCG_Interfaces
......@@ -25,4 +25,4 @@ application RichHPDAlign ../src/RichHPDAlign.cpp ../src/HPDAlign.cpp ../src/H
apply_pattern application_path
#===============================================================================
apply_pattern install_python_modules
apply_pattern install_python_modules
......@@ -4,18 +4,28 @@ Package Coordinators : Paras Naik, Anatoly Solomin
Purpose : RICH mirror alignment program
</pre>
<h2><a name="v19r0)">2016-04-25 Rich/RichMirrAlign v19r0</a></h2>
<h2><a name="v19r1)">2016-05-22 Rich/RichMirrAlign v19r1</a></h2>
<h3><a name="Note">This version is in master of PANOPTES v6r0.
The regularization in LS method is accounted
for the magnifications. Added the ability to
use four separate stop tolerances for primary
and secondary mirrors and Y, Z, calculated
from nominal sigma, its tolerance fraction and
magnifications, or set by hand. Improved
printouts. Eliminated default values for
RICH-dependent options.
The regularization in LS method is accounted for
the magnifications (can be switched off). Added
the ability to use four separate stop tolerances
for primary and secondary mirrors and Y, Z,
calculated from nominal sigma, its tolerance
fraction and magnifications, or set by hand.
Improved printouts. Eliminated default values
for RICH-dependent options.
</a></h3>
<pre>
2016-05-22 - Anatoly Solomin
- Incremented version to v19r1.
- As Paras suggested, the "magnification" in the regularization
term can now be switched off. Introduced regularizationMode
option: 0(def)->use "magnified" with average magn factors
regularization terms; !=0-> all "magnifications" = 1.
</pre>
<pre>
2016-04-25 - Anatoly Solomin
- Incremented version to v19r0.
......@@ -51,7 +61,7 @@ Purpose : RICH mirror alignment program
(averaged magnification factor priY_Y)
1->use those set up by hand in the conf file.
- Respective changes in the conf files. Examles in <...>/files.
- Respective changes in the conf files. Examples in <...>/files.
- Eliminated default values for RICH-dependent options.
......@@ -98,7 +108,7 @@ Purpose : RICH mirror alignment program
- combAndMirrSubsets file got new, more convenient format. Pattern
is in Panoptes_XXXXX/Rich/RichMirrCombinFit/files
- Added "files" folder with *.conf files and
- Added "files" folder with *.conf files and
RichMirrAlignREADME.txt with example how to run (cmt fashion).
Updated cmt/requirements accordingly.
......
......@@ -17,4 +17,5 @@ stopTolerancePriY = 0.1
stopTolerancePriZ = 0.1
stopToleranceSecY = 0.1
stopToleranceSecZ = 0.1
regularizationMode = 0
printMode = 2
......@@ -17,4 +17,5 @@ stopTolerancePriY = 0.1
stopTolerancePriZ = 0.1
stopToleranceSecY = 0.1
stopToleranceSecZ = 0.1
regularizationMode = 0
printMode = 2
This diff is collapsed.
......@@ -26,13 +26,15 @@ const vector<string> & combSubset ,
const map<string, double> & combRot ,
const map<string, double> & magnFactAv ,
const map<string, double> & magnFactAvAll ,
const map<string, unsigned int> & name_order
const map<string, unsigned int> & name_order ,
const int & regularizationMode
) :
m_combSubset ( combSubset ),
m_combRot ( combRot ),
m_magnFactAv ( magnFactAv ),
m_magnFactAvAll ( magnFactAvAll ),
m_name_order ( name_order ),
m_regularizationMode ( regularizationMode ),
m_theErrorDef ( 1.0 ) {
......@@ -170,11 +172,20 @@ double RichMirrAlignFcn::operator() (const vector<double>& par) const {
// Each component of the solution vector is multiplied by the
// respective magnification factor, averaged over all mirror
// combinations and calibrational tilts:
N += ( pow<2>(m_magnFactAvAll.find("priY_Y")->second * priY)
+ pow<2>(m_magnFactAvAll.find("secY_Y")->second * secY)
+ pow<2>(m_magnFactAvAll.find("priZ_Z")->second * priZ)
+ pow<2>(m_magnFactAvAll.find("secZ_Z")->second * secZ)
);
if (m_regularizationMode == 0) {
N += ( pow<2>(priY * m_magnFactAvAll.find("priY_Y")->second)
+ pow<2>(secY * m_magnFactAvAll.find("secY_Y")->second)
+ pow<2>(priZ * m_magnFactAvAll.find("priZ_Z")->second)
+ pow<2>(secZ * m_magnFactAvAll.find("secZ_Z")->second)
);
}
else {
N += ( pow<2>(priY)
+ pow<2>(secY)
+ pow<2>(priZ)
+ pow<2>(secZ)
);
}
/*
cout <<format("N =%|8.3f| ")%N;
*/
......
......@@ -15,11 +15,12 @@ class RichMirrAlignFcn : public ROOT::Minuit2::FCNBase {
public:
/// Standard constructor
RichMirrAlignFcn(
const std::vector<std::string> & combSubset ,
const std::map<std::string, double> & combRot ,
const std::map<std::string, double> & magnFactAv ,
const std::map<std::string, double> & magnFactAvAll ,
const std::map<std::string, unsigned int> & name_order
const std::vector<std::string> & combSubset ,
const std::map<std::string, double> & combRot ,
const std::map<std::string, double> & magnFactAv ,
const std::map<std::string, double> & magnFactAvAll ,
const std::map<std::string, unsigned int> & name_order ,
const int & regularizationMode
);
virtual ~RichMirrAlignFcn(); ///< Destructor
......@@ -31,12 +32,13 @@ public:
protected:
private:
std::vector<std::string> m_combSubset ;
std::map<std::string, double> m_combRot ;
std::map<std::string, double> m_magnFactAv ;
std::map<std::string, double> m_magnFactAvAll ;
std::map<std::string, unsigned int> m_name_order ;
double m_theErrorDef ;
std::vector<std::string> m_combSubset ;
std::map<std::string, double> m_combRot ;
std::map<std::string, double> m_magnFactAv ;
std::map<std::string, double> m_magnFactAvAll ;
std::map<std::string, unsigned int> m_name_order ;
int m_regularizationMode ;
double m_theErrorDef ;
};
#endif // RICHALIGN_RICHMIRRALIGNFCN_H
################################################################################
# Package: RichMirrCombinFit
################################################################################
gaudi_subdir(RichMirrCombinFit v16r0p1)
gaudi_subdir(RichMirrCombinFit v17r0)
find_package(Boost COMPONENTS regex program_options)
find_package(ROOT COMPONENTS Core Hist Graf Gpad RIO RooFitCore RooFit RooStats)
......
......@@ -13,9 +13,11 @@
#include <TFile.h>
#include <TH1D.h>
#include <TH2D.h>
#include <TString.h>
using namespace std;
typedef std::map<std::string, MirrComb> MapCombNamCombObj;
typedef map<string, MirrComb> MapCombNamCombObj;
class MirrCombFit : public IMirrCombFit
{
......@@ -28,10 +30,10 @@ public:
void HistoList();
std::string MirrCombNam(int pri, int sec);
string MirrCombNam(int pri, int sec);
virtual void ReadConfFile(std::string confFile);
virtual void ReadConfFile(string confFile);
virtual void FitHistos();
......@@ -53,7 +55,7 @@ public:
void BinCounter(TH2D*);
void Print(std::ostream& out) const;
void Print(ostream& out) const;
private:
......@@ -67,36 +69,42 @@ protected:
void CreateMapCombNamCombObj();
// ATTENTION: for observability, please any future
// additions keep in the alphabetic order !!!
int m_backgroundOrder;
double m_begRange;
std::string m_combAndMirrSubsetsFile;
string m_combAndMirrSubsetsFile;
double m_deltaThetaWindow;
double m_endRange;
int m_fixSinusoidShift;
std::vector<TString> m_histoNames;
int m_fitMethod;
std::string m_inputHistosFile;
int m_fixSinusoidShift;
vector<TString> m_histoNames;
string m_inputHistosFile;
int m_iterationCount;
double m_minAverageBinPop;
std::vector<std::string> m_mirrCombList;
MapCombNamCombObj m_mapNamObj;
std::string m_outputResultsFile;
int m_minAverageBinPop;
vector<string> m_mirrCombList;
double m_nominalResolutionSigma;
double m_nominSig;
string m_outputResultsFile;
int m_phiBinFactor;
std::string m_plotDir;
string m_plotDir;
int m_plotOutputLevel;
int m_priMirrs;
std::string m_rich;
string m_rich;
int m_secMirrs;
double m_sigmaTDR;
double m_sinusoidShift;
double m_stopSigmaFraction;
double m_stopTolerance;
std::string m_thisVariant;
int m_stopToleranceMode;
string m_thisVariant;
int m_useGlobalFitMean;
double m_warningFactor;
int m_zeroGlobalFitMean;
};
std::ostream& operator<<(std::ostream& out, const MirrCombFit& fit);
ostream& operator<<(ostream& out, const MirrCombFit& fit);
#endif
package RichMirrCombinFit
version v16r0p1
version v17r0
branches cmt doc files python RichMirrCombinFit src
......
......@@ -5,8 +5,83 @@ Purpose : RICH mirror combination histos fitting program
</pre>
<h2><a name="v17r0">2016-05-22 Rich/RichMirrCombinFit v17r0</a></h2>
<h3><a name="Note">This version is in PANOPTES v6r0 master. Very
important: the stopping decision is now made
here, by checking whether all relative to the
fraction of the nominal resolution sigma tilts of
all mirror combinations over all axes are < 1.
</a></h3>
<pre>
2016-05-22 - Anatoly Solomin
- Incremented version to v17r0.
- Very important: [re-]implemented "STOP"/"CONTINUE" decision
generating in MirrCombFit::CombinFitDecision(), that now permits to
stop running immediately after the main (untilted) bunch of
histograms are fitted. If all histograms, i.e. all mirror
combinations, have both Y and Z tilts within tolerance, no need to
do anything else, even compute the new compensations and update the
CONDDB. Let alone running with calibrational tilts to re-evaluate
the magnification factors "on-fly".
This new feature supersedes the stopping decision in RichMirrAlign,
even the new one, with the diversified stop tolerances.
Therefore, switch to this mode of stopping decision taking requires
respective upgrade of the driver script.
- Eliminated default values for RICH-dependent options.
- Introduced option nominalResolutionSigma: RICH-dependent nominal
Cherenkov angle distribution sigma; no default here.
- Introduced option stopSigmaFraction (default 0.5): tolerance
for total tilt of mirror pair in terms of fraction of the
nominal sigma.
- Introduced option stopToleranceMode: 0(default)->calculate it
from nominal sigma and stopSigmaFraction, e.g.
stopTolerance = nominalResolutionSigma*stopSigmaFraction
1->use the one set up by hand in the conf file.
- Respective changes in the conf files. Examples in <...>/files.
- Changed order of lines in the conf file to make it more readable.
- Respectively, changed order of lines in the options reading part.
- In the options reading part equipped all options that have no
defaults (RICH-dependent and iteration count) with the diagnostics
if they are not defined in the configuration file.
- Improved printout of the options.
- m_minAverageBinPop is now integer. Purely internal change.
- Implemented choice of stopTolerance according to
stopToleranceMode in the MirrCombFit::CombinFitDecision()
- Corrected and improved WARNING/NOTE/OK printouts in
CombinFitDecision() NOTE is when relative shift of a mirror
combination over an axis is > 1, but < warningFactor.
- m_sigmaTDR is replaced by m_nominSig = m_nominalResolutionSigma/1000.0
just for non-ambiguity and convenience.
- Removed from RichXMirrCombFit.cpp constructors hard-coded m_begRange,
m_endRange, m_nominSig, because they are derived from the respective
options:
m_begRange = -deltaThetaWindow/1000.0;
m_endRange = deltaThetaWindow/1000.0;
m_nominSig = m_nominalResolutionSigma/1000.0;
</pre>
<h2><a name="v16r0p1">2016-03-29 Rich/RichMirrCombinFit v16r0p1</a></h2>
<h3><a name="Note">This version to be released in PANOPTES v5r7.
<h3><a name="Note">This version was released in PANOPTES v6r0.
Fixed typos in release notes.
Last SVN-tagged version. We have now moved to git!
</a></h3>
......@@ -170,14 +245,14 @@ Purpose : RICH mirror combination histos fitting program
- In MirrCombinFit.cpp Replaced: gStyle->SetPalette(kBlueYellow), was
kRainBow, which is strongly deprecated at CERN,
- Added "files" folder with *Subsets.txt, *.conf files and
- Added "files" folder with *Subsets.txt, *.conf files and
RichMirrCombinFitREADME.txt with example how to run (cmt fashion).
Updated cmt/requirements accordingly.
- Code stile now complies to CERN's rules: indentations, TypeA* typea;
++i in loops, etc. Please, please, do not use your personal code
styles: this is core LHCb software, not our private at all.
- HPD part still needs to be investigated.
</pre>
......
plotDir = /afs/cern.ch/user/a/asolomin/public/rich_align_test
richDetector = 1
thisVariant = Mp6Wi8.0Fm5Mm0Sm0_online_Collision15
inputHistos = RichRecQCHistos_rich1_Mp6Wi8.0Fm5Mm0Sm0_online_Collision15_i0.root
mirrCombinFitResults = Rich1MirrCombinFit_Mp6Wi8.0Fm5Mm0Sm0_online_Collision15_i0.txt
combAndMirrSubsets = Rich1CombAndMirrSubsets.txt
fixSinusoidShift = 1
minAverageBinPop = 6
phiBinFactor = 3
deltaThetaWindow = 8.0
combinFitMethod = 5
iterationCount = 0
plotOutputLevel = 2
plotDir = /afs/cern.ch/user/a/asolomin/public/rich_align_test
richDetector = 1
iterationCount = 0
thisVariant = Mp6Wi8.0Fm5Mm0Sm0_online_Collision15
inputHistos = RichRecQCHistos_rich1_Mp6Wi8.0Fm5Mm0Sm0_online_Collision15_i0.root
mirrCombinFitResults = Rich1MirrCombinFit_Mp6Wi8.0Fm5Mm0Sm0_online_Collision15_i0.txt
combAndMirrSubsets = Rich1CombAndMirrSubsets.txt
fixSinusoidShift = 1
minAverageBinPop = 6
phiBinFactor = 3
deltaThetaWindow = 8.0
combinFitMethod = 5
plotOutputLevel = 2
stopToleranceMode = 0
nominalResolutionSigma = 1.6
stopSigmaFraction = 0.5
plotDir = /afs/cern.ch/user/a/asolomin/public/rich_align_test
richDetector = 2
thisVariant = Mp6Wi4.0Fm5Mm0Sm1_online_Collision15
inputHistos = RichRecQCHistos_rich2_Mp6Wi4.0Fm5Mm0Sm0_online_Collision15_i0.root
mirrCombinFitResults = Rich2MirrCombinFit_Mp6Wi4.0Fm5Mm0Sm0_online_Collision15_i0.txt
combAndMirrSubsets = Rich2CombAndMirrSubsets.txt
fixSinusoidShift = 1
minAverageBinPop = 6
phiBinFactor = 3
deltaThetaWindow = 4.0
combinFitMethod = 5
iterationCount = 0
plotOutputLevel = 2
plotDir = /afs/cern.ch/user/a/asolomin/public/rich_align_test
richDetector = 2
iterationCount = 0
thisVariant = Mp6Wi4.0Fm5Mm0Sm0_online_Collision15
inputHistos = RichRecQCHistos_rich2_Mp6Wi4.0Fm5Mm0Sm0_online_Collision15_i0.root
mirrCombinFitResults = Rich2MirrCombinFit_Mp6Wi4.0Fm5Mm0Sm0_online_Collision15_i0.txt
combAndMirrSubsets = Rich2CombAndMirrSubsets.txt
fixSinusoidShift = 1
minAverageBinPop = 6
phiBinFactor = 3
deltaThetaWindow = 4.0
combinFitMethod = 5
plotOutputLevel = 2
stopToleranceMode = 0
nominalResolutionSigma = 0.7
stopSigmaFraction = 0.25
This diff is collapsed.
......@@ -25,13 +25,9 @@ using namespace std;
Rich1MirrCombFit::Rich1MirrCombFit()
{
m_begRange = -0.007; // Anatoly: harmless, because value from the config file is assigned to it later on
m_endRange = 0.007; // Anatoly: harmless, because value from the config file is assigned to it later on
m_rich = "1";
m_priMirrs = 4;
m_secMirrs = 16;
m_rich = "1";
m_sinusoidShift = 0.0; // Anatoly: harmless, because value from the config file is assigned to it later on
m_sigmaTDR = 0.00145;
cout <<"Creating Mirror Combs"<< endl;
this->CreateMapCombNamCombObj();
}
......@@ -106,15 +102,15 @@ void Rich1MirrCombFit::FitSurface(bool unifyWidths = false)
fitSurface->SetParLimits( 0, m_begRange+0.001, m_endRange-0.001); // total tilt around Y in rad limits
fitSurface->SetParLimits( 1, m_begRange+0.001, m_endRange-0.001); // total tilt around Z in rad limits
fitSurface->SetParLimits( 2, -m_sigmaTDR*0.25, m_sigmaTDR*0.25 ); // sinusoid shift in rad limits
fitSurface->SetParLimits( 2, -m_nominSig*0.25, m_nominSig*0.25 ); // sinusoid shift in rad limits
if (m_fixSinusoidShift) {
fitSurface->FixParameter( 2, m_sinusoidShift ); // sinusoid shift in rad is constant
}
if (unifyWidths) {
fitSurface->SetParameter( 3, m_sigmaTDR ); // sigma in rad unified
fitSurface->SetParLimits( 3, m_sigmaTDR*0.5, m_sigmaTDR*3.0 ); // sigma in rad unified limits
fitSurface->SetParameter( 3, m_nominSig ); // sigma in rad unified
fitSurface->SetParLimits( 3, m_nominSig*0.5, m_nominSig*3.0 ); // sigma in rad unified limits
}
for (int phibin=1; phibin<=phiBins; ++phibin) { // e.g. 1 - 20
......@@ -140,9 +136,9 @@ void Rich1MirrCombFit::FitSurface(bool unifyWidths = false)
//double maxBinCenter = slice->GetBinCenter( slice->GetMaximumBin());
if ( avHeight > m_minAverageBinPop ) {
if ( avHeight > (double)m_minAverageBinPop ) {
if ( ! unifyWidths ) {
fitSurface->SetParameter( 2 +phibin, m_sigmaTDR ); // sigma in rad
fitSurface->SetParameter( 2 +phibin, m_nominSig ); // sigma in rad
}
fitSurface->SetParameter( 2+phiBins +corrUniWid+phibin, avHeight*0.5 ); // const before gauss
fitSurface->SetParameter( 2+phiBins*2+corrUniWid+phibin, avHeight*0.3 ); // constant background
......@@ -150,7 +146,7 @@ void Rich1MirrCombFit::FitSurface(bool unifyWidths = false)
fitSurface->SetParameter( 2+phiBins*4+corrUniWid+phibin, 0.0 ); // quadratic background
if ( ! unifyWidths ) {
fitSurface->SetParLimits( 2 +phibin, m_sigmaTDR*0.5, m_sigmaTDR*3.0 ); // sigma in rad limits
fitSurface->SetParLimits( 2 +phibin, m_nominSig*0.5, m_nominSig*3.0 ); // sigma in rad limits
}
fitSurface->SetParLimits( 2+phiBins +corrUniWid+phibin, 0.0, 1.0e7 ); // const before gauss limits
//fitSurface->SetParLimits( 2+phiBins*2+corrUniWid+phibin, 0.0, 1.0e7 ); // constant background limits
......@@ -445,7 +441,7 @@ void Rich1MirrCombFit::FitSlices(TGraphErrors* cleanPlot)
DThetaFitter dThetaFitter(m_begRange,m_endRange, 0, m_backgroundOrder);
dThetaFitter.setMean(m_sinusoidShift);
dThetaFitter.setWidth(m_sigmaTDR);
dThetaFitter.setWidth(m_nominSig);
dThetaFitter.loadHistogram(stripe);
// Add mean values to 2D plot to fit
......
......@@ -25,13 +25,9 @@ using namespace std;
Rich2MirrCombFit::Rich2MirrCombFit()
{
m_begRange = -0.004; // Anatoly: harmless, because value from the config file is assigned to it later on
m_endRange = 0.004; // Anatoly: harmless, because value from the config file is assigned to it later on
m_rich = "2";
m_priMirrs = 56;
m_secMirrs = 40;
m_rich = "2";
m_sinusoidShift = 0.0; // Anatoly: harmless, because value from the config file is assigned to it later on
m_sigmaTDR = 0.0006;
cout <<"Creating Mirror Combs"<< endl;
this->CreateMapCombNamCombObj();
}
......@@ -106,15 +102,15 @@ void Rich2MirrCombFit::FitSurface(bool unifyWidths = false)
fitSurface->SetParLimits( 0, m_begRange+0.001, m_endRange-0.001); // total tilt around Y in rad limits
fitSurface->SetParLimits( 1, m_begRange+0.001, m_endRange-0.001); // total tilt around Z in rad limits
fitSurface->SetParLimits( 2, -m_sigmaTDR*0.25, m_sigmaTDR*0.25 ); // sinusoid shift in rad limits
fitSurface->SetParLimits( 2, -m_nominSig*0.25, m_nominSig*0.25 ); // sinusoid shift in rad limits
if (m_fixSinusoidShift) {
fitSurface->FixParameter( 2, m_sinusoidShift ); // sinusoid shift in rad is constant
}
if (unifyWidths) {
fitSurface->SetParameter( 3, m_sigmaTDR ); // sigma in rad unified
fitSurface->SetParLimits( 3, m_sigmaTDR*0.5, m_sigmaTDR*3.0 ); // sigma in rad unified limits
fitSurface->SetParameter( 3, m_nominSig ); // sigma in rad unified
fitSurface->SetParLimits( 3, m_nominSig*0.5, m_nominSig*3.0 ); // sigma in rad unified limits
}
for (int phibin=1; phibin<=phiBins; ++phibin) { // e.g. 1 - 20
......@@ -140,9 +136,9 @@ void Rich2MirrCombFit::FitSurface(bool unifyWidths = false)
//double maxBinCenter = slice->GetBinCenter( slice->GetMaximumBin());
if ( avHeight > m_minAverageBinPop ) {
if ( avHeight > (double)m_minAverageBinPop ) {
if ( ! unifyWidths ) {
fitSurface->SetParameter( 2 +phibin, m_sigmaTDR ); // sigma in rad
fitSurface->SetParameter( 2 +phibin, m_nominSig ); // sigma in rad
}
fitSurface->SetParameter( 2+phiBins +corrUniWid+phibin, avHeight*0.5 ); // const before gauss
fitSurface->SetParameter( 2+phiBins*2+corrUniWid+phibin, avHeight*0.3 ); // constant background
......@@ -150,7 +146,7 @@ void Rich2MirrCombFit::FitSurface(bool unifyWidths = false)
fitSurface->SetParameter( 2+phiBins*4+corrUniWid+phibin, 0.0 ); // quadratic background
if ( ! unifyWidths ) {
fitSurface->SetParLimits( 2 +phibin, m_sigmaTDR*0.5, m_sigmaTDR*3.0 ); // sigma in rad limits
fitSurface->SetParLimits( 2 +phibin, m_nominSig*0.5, m_nominSig*3.0 ); // sigma in rad limits
}
fitSurface->SetParLimits( 2+phiBins +corrUniWid+phibin, 0.0, 1.0e7 ); // const before gauss limits
//fitSurface->SetParLimits( 2+phiBins*2+corrUniWid+phibin, 0.0, 1.0e7 ); // constant background limits
......@@ -445,7 +441,7 @@ void Rich2MirrCombFit::FitSlices(TGraphErrors* cleanPlot)
DThetaFitter dThetaFitter(m_begRange,m_endRange, 0, m_backgroundOrder);
dThetaFitter.setMean(m_sinusoidShift);
dThetaFitter.setWidth(m_sigmaTDR);
dThetaFitter.setWidth(m_nominSig);
dThetaFitter.loadHistogram(stripe);
// Add mean values to 2D plot to fit
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment