Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F11221931
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
13 KB
Subscribers
None
View Options
diff --git a/examples/Test_Dpipi.cc b/examples/Test_Dpipi.cc
index 128a88b..5704276 100644
--- a/examples/Test_Dpipi.cc
+++ b/examples/Test_Dpipi.cc
@@ -1,329 +1,329 @@
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include "TFile.h"
#include "TH2.h"
#include "TRandom.h"
#include "TString.h"
#include "TSystem.h"
#include "TF1.h"
#include "TCanvas.h"
#include "LauDaughters.hh"
#include "LauDecayTimePdf.hh"
#include "LauEffModel.hh"
#include "LauIsobarDynamics.hh"
#include "LauMagPhaseCoeffSet.hh"
#include "LauRandom.hh"
#include "LauRealImagCoeffSet.hh"
#include "LauTimeDepFitModel.hh"
#include "LauVetoes.hh"
#include "LauFlavTag.hh"
#include "Lau1DHistPdf.hh"
#include "Lau1DCubicSpline.hh"
#include "Test_Dpipi_ProgOpts.hh"
int main(const int argc, const char ** argv)
{
const TestDpipi_ProgramSettings settings{argc,argv};
if ( settings.helpRequested ) {
return EXIT_SUCCESS;
}
if ( ! settings.parsedOK ) {
return EXIT_FAILURE;
}
const Bool_t fixPhiMix{ settings.fixPhiMix || settings.dType == LauTimeDepFitModel::CPEigenvalue::QFS };
const Bool_t useSinCos{kTRUE};
Double_t nSigEvents{0};
switch (settings.dType) {
case LauTimeDepFitModel::CPEigenvalue::CPEven :
nSigEvents = 15000;
break;
case LauTimeDepFitModel::CPEigenvalue::CPOdd :
nSigEvents = 5000;
break;
case LauTimeDepFitModel::CPEigenvalue::QFS :
nSigEvents = 50000;
break;
}
LauRandom::setSeed(settings.RNGseed);
LauDaughters* daughtersB0bar = new LauDaughters("B0_bar", "pi+", "pi-", "D0");
LauDaughters* daughtersB0 = new LauDaughters("B0", "pi+", "pi-", "D0_bar");
// efficiency
LauVetoes* vetoes = new LauVetoes();
//vetoes->addMassVeto( 2, 2.00776, 2.01276 );
LauEffModel* effModelB0bar = new LauEffModel(daughtersB0bar, vetoes);
LauEffModel* effModelB0 = new LauEffModel(daughtersB0, vetoes);
//Args for flavTag: useAveDelta - kFALSE and useEtaPrime - kFALSE
LauFlavTag* flavTag = new LauFlavTag(kFALSE,kFALSE);
flavTag->setTrueTagVarName("trueTag");
if (settings.dType == LauTimeDepFitModel::CPEigenvalue::QFS) {
flavTag->setDecayFlvVarName("decayFlv");
}
TFile* etaFile = TFile::Open("ft-eta-hist.root");
TH1* etaHist = dynamic_cast<TH1*>(etaFile->Get("ft_eta_hist"));
Lau1DHistPdf* etaHistPDF = new Lau1DHistPdf("eta",etaHist,0.0,0.5,kTRUE,kFALSE);
const Double_t meanEta { etaHistPDF->getMean() };
// if the tagging is perfect then also make it perfectly efficient, otherwise 50% efficient
const Double_t tagEffVal { (meanEta == 0.0) ? 1.0 : 0.5 };
std::pair<Double_t,Double_t> tagEff {tagEffVal, tagEffVal};
// use a null calibration for the time being, so p0 = <eta> and p1 = 1
std::pair<Double_t,Double_t> calib0 {meanEta, meanEta};
std::pair<Double_t,Double_t> calib1 {1.0, 1.0};
flavTag->addTagger("OSTagger", "tagVal_OS", "mistagVal_OS", etaHistPDF, tagEff, calib0, calib1);
// signal dynamics
LauIsobarDynamics* sigModelB0bar = new LauIsobarDynamics(daughtersB0bar, effModelB0bar);
sigModelB0bar->setIntFileName("integ_B0bar.dat");
sigModelB0bar->addResonance("D*+_2", 2, LauAbsResonance::RelBW);
sigModelB0bar->addResonance("D*+_0", 2, LauAbsResonance::RelBW);
sigModelB0bar->addResonance("rho0(770)", 3, LauAbsResonance::RelBW);
sigModelB0bar->addResonance("f_0(980)", 3, LauAbsResonance::RelBW);
sigModelB0bar->addResonance("f_2(1270)", 3, LauAbsResonance::RelBW);
LauIsobarDynamics* sigModelB0 = new LauIsobarDynamics(daughtersB0, effModelB0);
sigModelB0->setIntFileName("integ_B0.dat");
sigModelB0->addResonance("D*-_2", 1, LauAbsResonance::RelBW);
sigModelB0->addResonance("D*-_0", 1, LauAbsResonance::RelBW);
sigModelB0->addResonance("rho0(770)", 3, LauAbsResonance::RelBW);
sigModelB0->addResonance("f_0(980)", 3, LauAbsResonance::RelBW);
sigModelB0->addResonance("f_2(1270)", 3, LauAbsResonance::RelBW);
// fit model
LauTimeDepFitModel* fitModel = new LauTimeDepFitModel(sigModelB0bar,sigModelB0,flavTag);
std::vector<LauAbsCoeffSet*> coeffset;
coeffset.push_back( new LauRealImagCoeffSet("D*+_2", 1.00, 0.00, kTRUE, kTRUE) );
coeffset.push_back( new LauRealImagCoeffSet("D*+_0", 0.53*TMath::Cos( 3.00), 0.53*TMath::Sin( 3.00), kFALSE, kFALSE) );
coeffset.push_back( new LauRealImagCoeffSet("rho0(770)", 1.22*TMath::Cos( 2.25), 1.22*TMath::Sin( 2.25), kFALSE, kFALSE) );
coeffset.push_back( new LauRealImagCoeffSet("f_0(980)", 0.19*TMath::Cos(-2.48), 0.19*TMath::Sin(-2.48), kFALSE, kFALSE) );
coeffset.push_back( new LauRealImagCoeffSet("f_2(1270)", 0.75*TMath::Cos( 2.97), 0.75*TMath::Sin( 2.97), kFALSE, kFALSE) );
for (std::vector<LauAbsCoeffSet*>::iterator iter=coeffset.begin(); iter!=coeffset.end(); ++iter) {
fitModel->setAmpCoeffSet(*iter);
}
fitModel->setCPEigenvalue( settings.dType );
fitModel->setPhiMix( 2.0*LauConstants::beta, fixPhiMix, useSinCos );
// production asymmetry
fitModel->setAsymmetries(0.0,kTRUE);
// Delta t PDFs
const Double_t minDt(0.0);
const Double_t maxDt(15.0);
const Double_t minDtErr(0.0);
const Double_t maxDtErr(0.215);
const std::vector<Bool_t> scale {
settings.perEventTimeErr && kTRUE,
settings.perEventTimeErr && kTRUE,
};
const UInt_t nGauss(scale.size());
LauParameter * mean0 = new LauParameter("dt_mean_0", scale[0] ? -1.63e-3 : -1.84e-03, -0.01, 0.01, kTRUE );
LauParameter * mean1 = new LauParameter("dt_mean_1", scale[1] ? -1.63e-3 : -3.62e-03, -0.01, 0.01, kTRUE );
LauParameter * sigma0 = new LauParameter("dt_sigma_0", scale[0] ? 0.991 : 3.05e-02, 0.0, 2.0, kTRUE );
LauParameter * sigma1 = new LauParameter("dt_sigma_1", scale[1] ? 1.80 : 6.22e-02, 0.0, 2.5, kTRUE );
LauParameter * frac1 = new LauParameter("dt_frac_1", scale[0] && scale[1] ? 0.065 : 0.761, 0.0, 1.0, kTRUE);
LauParameter * tau = new LauParameter("dt_tau", 1.520, 0.5, 5.0, settings.fixLifetime);
LauParameter * freq = new LauParameter("dt_deltaM", 0.5064, 0.0, 1.0, settings.fixDeltaM);
std::vector<LauAbsRValue*> dtPars {
mean0,
mean1,
sigma0,
sigma1,
frac1,
tau,
freq
};
-
- // Decay time acceptance histogram
- TFile* dtaFile = TFile::Open("dta-hist.root");
- TH1* dtaHist = dynamic_cast<TH1*>(dtaFile->Get("dta_hist"));
-
- // Create the spline knot positions and y-values
- std::vector<Double_t> dtvals = {0.,1., 2., 4., 7., 10., 15.};
- // Starting Y values, to be fit to dtaHist
- std::vector<Double_t> effvals = {0.,0.022,0.035,0.05,0.051,0.052,0.055};
-
+
// Decay time error histogram
TFile* dteFile = TFile::Open("dte-hist.root");
TH1* dteHist = dynamic_cast<TH1*>(dteFile->Get("dte_hist"));
LauDecayTimePdf * dtPdf = new LauDecayTimePdf( "decayTime", "decayTimeErr", dtPars, minDt, maxDt, minDtErr, maxDtErr, LauDecayTimePdf::ExpTrig, nGauss, scale, LauDecayTimePdf::DecayTime, settings.timeEffModel );
dtPdf->doSmearing(settings.timeResolution);
if ( settings.perEventTimeErr ) {
dtPdf->setErrorHisto( dteHist );
}
+ // Decay time acceptance histogram
+ TFile* dtaFile = TFile::Open("dta-hist.root");
+ TH1* dtaHist = dynamic_cast<TH1*>(dtaFile->Get("dta_hist"));
+
+ // Create the spline knot positions and y-values
+ std::vector<Double_t> dtvals = {0.,0.5 ,1., 2., 3., 4., 7., 10., 15.};
+ // Starting Y values, to be fit to dtaHist
+ std::vector<Double_t> effvals = {0.,0.01 ,0.022,0.035,0.042,0.05,0.051,0.052,0.055};
+
Lau1DCubicSpline* dtEffSpline = nullptr;
switch(settings.timeEffModel)
{
case LauDecayTimePdf::EfficiencyMethod::Spline:
{
fitModel->setASqMaxValue(0.06);
- dtEffSpline = new Lau1DCubicSpline(dtvals,effvals,Lau1DCubicSpline::StandardSpline,Lau1DCubicSpline::Natural,Lau1DCubicSpline::Natural);
+ dtEffSpline = new Lau1DCubicSpline(dtvals,effvals,Lau1DCubicSpline::AkimaSpline,Lau1DCubicSpline::Natural,Lau1DCubicSpline::Natural);
dtEffSpline->fitToTH1(dtaHist);
dtPdf->setEffiSpline(dtEffSpline);
// Set which knots to float and which to fix (at least 1 knot must be fixed, not the first one)
// Knots should only be floating if both DeltaM and the B lifetime are fixed!
for(auto& par : dtPdf -> getEffiPars())
{par -> fixed( not (settings.fixDeltaM and settings.fixLifetime) );}
dtPdf -> getEffiPars().at(3) -> fixed(kTRUE);
break;
}
case LauDecayTimePdf::EfficiencyMethod::Binned:
{
fitModel->setASqMaxValue(0.06);
dtPdf->setEffiHist(dtaHist);
break;
}
case LauDecayTimePdf::EfficiencyMethod::Flat:
{
fitModel->setASqMaxValue(4.1);
break;
}
}
fitModel->setSignalDtPdf( dtPdf );
// set the number of signal events
std::cout<<"nSigEvents = "<<nSigEvents<<std::endl;
LauParameter* nSigPar = new LauParameter("signalEvents", nSigEvents, -2.0*nSigEvents, 2.0*nSigEvents, kTRUE);
fitModel->setNSigEvents(nSigPar);
// set the number of experiments
if (settings.command == Command::Generate) {
fitModel->setNExpts(settings.nExptGen, settings.firstExptGen);
} else {
fitModel->setNExpts(settings.nExptFit, settings.firstExptFit);
}
fitModel->useAsymmFitErrors(kFALSE);
fitModel->useRandomInitFitPars(kFALSE);
fitModel->doPoissonSmearing(kFALSE);
fitModel->doEMLFit(kFALSE);
fitModel->writeLatexTable(kFALSE);
TString dTypeStr;
switch (settings.dType) {
case LauTimeDepFitModel::CPEigenvalue::CPEven :
dTypeStr = "CPEven";
break;
case LauTimeDepFitModel::CPEigenvalue::CPOdd :
dTypeStr = "CPOdd";
break;
case LauTimeDepFitModel::CPEigenvalue::QFS :
dTypeStr = "QFS";
break;
}
TString dataFile("");
TString treeName("fitTree");
TString rootFileName("");
TString tableFileName("");
TString fitToyFileName("");
TString splotFileName("");
dataFile = "TEST-Dpipi";
dataFile += "_"+dTypeStr;
switch(settings.timeEffModel)
{
case LauDecayTimePdf::EfficiencyMethod::Spline:
dataFile += "_Spline";
break;
case LauDecayTimePdf::EfficiencyMethod::Binned:
dataFile += "_Hist";
break;
case LauDecayTimePdf::EfficiencyMethod::Flat:
dataFile += "_Flat";
break;
}
if (settings.timeResolution) {
if (settings.perEventTimeErr) {
dataFile += "_DTRperevt";
} else {
dataFile += "_DTRavg";
}
} else {
dataFile += "_DTRoff";
}
dataFile += "_expts";
dataFile += settings.firstExptGen;
dataFile += "-";
dataFile += settings.firstExptGen+settings.nExptGen-1;
dataFile += ".root";
if (settings.command == Command::Generate) {
rootFileName = "dummy.root";
tableFileName = "genResults";
} else {
rootFileName = "fit"; rootFileName += settings.iFit;
rootFileName += "_Results_"; rootFileName += dTypeStr;
rootFileName += "_expts"; rootFileName += settings.firstExptFit; rootFileName += "-"; rootFileName += settings.firstExptFit+settings.nExptFit-1;
rootFileName += ".root";
tableFileName = "fit"; tableFileName += settings.iFit;
tableFileName += "_Results_"; tableFileName += dTypeStr;
tableFileName += "_expts"; tableFileName += settings.firstExptFit; tableFileName += "-"; tableFileName += settings.firstExptFit+settings.nExptFit-1;
fitToyFileName = "fit"; fitToyFileName += settings.iFit;
fitToyFileName += "_ToyMC_"; fitToyFileName += dTypeStr;
fitToyFileName += "_expts"; fitToyFileName += settings.firstExptFit; fitToyFileName += "-"; fitToyFileName += settings.firstExptFit+settings.nExptFit-1;
fitToyFileName += ".root";
splotFileName = "fit"; splotFileName += settings.iFit;
splotFileName += "_sPlot_"; splotFileName += dTypeStr;
splotFileName += "_expts"; splotFileName += settings.firstExptFit; splotFileName += "-"; splotFileName += settings.firstExptFit+settings.nExptFit-1;
splotFileName += ".root";
}
// Generate toy from the fitted parameters
//fitModel->compareFitData(1, fitToyFileName);
// Write out per-event likelihoods and sWeights
//fitModel->writeSPlotData(splotFileName, "splot", kFALSE);
// Execute the generation/fit
switch (settings.command) {
case Command::Generate :
fitModel->run( "gen", dataFile, treeName, rootFileName, tableFileName );
break;
case Command::Fit :
fitModel->run( "fit", dataFile, treeName, rootFileName, tableFileName );
break;
case Command::SimFit :
fitModel->runTask( dataFile, treeName, rootFileName, tableFileName, "localhost", settings.port );
break;
}
return EXIT_SUCCESS;
}
diff --git a/test/TestFitSplineToTH1.cc b/test/TestFitSplineToTH1.cc
index 83528bb..732bb7b 100644
--- a/test/TestFitSplineToTH1.cc
+++ b/test/TestFitSplineToTH1.cc
@@ -1,35 +1,35 @@
#include <vector>
#include "TFile.h"
#include "TH1.h"
#include "TF1.h"
#include "TCanvas.h"
#include "Lau1DCubicSpline.hh"
//int main(const int argc, const char ** argv)
int main()
{
TFile* dtaFile = TFile::Open("dta-hist.root");
TH1* dtaHist = dynamic_cast<TH1*>(dtaFile->Get("dta_hist"));
- std::vector<Double_t> dtvals = {0.,1., 2., 4., 7., 10., 15.};
- std::vector<Double_t> effvals = {0.,0.022,0.035,0.05,0.051,0.052,0.055};
+ std::vector<Double_t> dtvals = {0.,0.5 ,1., 2., 3., 4., 7., 10., 15.};
+ std::vector<Double_t> effvals = {0.,0.01 ,0.022,0.035,0.042,0.05,0.051,0.052,0.055};
Lau1DCubicSpline* dtEffSpline = nullptr;
dtEffSpline = new Lau1DCubicSpline(dtvals,effvals,Lau1DCubicSpline::AkimaSpline,Lau1DCubicSpline::Natural,Lau1DCubicSpline::Natural);
dtEffSpline->fitToTH1(dtaHist);
TF1* tf1 = dtEffSpline->makeTF1();
TCanvas canvas("canvas","canvas",800,450);
dtaHist->Draw();
tf1->Draw("SAME");
canvas.SaveAs("TF1fitTest.pdf");
delete dtEffSpline;
delete dtaHist;
dtaFile->Close();
delete dtaFile;
return 0;
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, May 14, 11:08 AM (17 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5088968
Default Alt Text
(13 KB)
Attached To
rLAURA laura
Event Timeline
Log In to Comment