Logo ROOT  
Reference Guide
rf312_multirangefit.C File Reference

Detailed Description

View in nbviewer Open in SWAN Multidimensional models: performing fits in multiple (disjoint) ranges in one or more dimensions

RooFit v3.60 -- Developed by Wouter Verkerke and David Kirkby
Copyright (C) 2000-2013 NIKHEF, University of California & Stanford University
All rights reserved, please read http://roofit.sourceforge.net/license.txt
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'SB1' created with bounds [-10,10]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'SB1' created with bounds [-10,0]
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'SB2' created with bounds [-10,0]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'SB2' created with bounds [0,10]
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'SIG' created with bounds [0,10]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'SIG' created with bounds [0,10]
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'FULL' created with bounds [-10,10]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'FULL' created with bounds [-10,10]
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData) constructing test statistic for sub-range named SB1
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForSB1' created with bounds [-10,10]
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_model_modelData' created with bounds [-10,10]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'NormalizationRangeForSB1' created with bounds [-10,10]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'fit_nll_model_modelData' created with bounds [-10,0]
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData) fixing interpretation of coefficients of any RooAddPdf to full domain of observables
[#1] INFO:Minization -- RooMinimizer::optimizeConst: activating const optimization
[#1] INFO:Minization -- The following expressions have been identified as constant and will be precalculated and cached: (bkg)
[#1] INFO:Minization -- The following expressions will be evaluated in cache-and-track mode: (gx,gy)
**********
** 1 **SET PRINT 1
**********
**********
** 2 **SET NOGRAD
**********
PARAMETER DEFINITIONS:
NO. NAME VALUE STEP SIZE LIMITS
1 f 5.00000e-01 1.00000e-01 0.00000e+00 1.00000e+00
2 mx 1.00000e+00 2.00000e+00 -1.00000e+01 1.00000e+01
3 my 1.00000e+00 2.00000e+00 -1.00000e+01 1.00000e+01
**********
** 3 **SET ERR 0.5
**********
**********
** 4 **SET PRINT 1
**********
**********
** 5 **SET STR 1
**********
NOW USING STRATEGY 1: TRY TO BALANCE SPEED AGAINST RELIABILITY
**********
** 6 **MIGRAD 1500 1
**********
FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.
START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03
FCN=16262.2 FROM MIGRAD STATUS=INITIATE 12 CALLS 13 TOTAL
EDM= unknown STRATEGY= 1 NO ERROR MATRIX
EXT PARAMETER CURRENT GUESS STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 f 5.00000e-01 1.00000e-01 2.01358e-01 -5.77275e+01
2 mx 1.00000e+00 2.00000e+00 2.02430e-01 7.82209e+01
3 my 1.00000e+00 2.00000e+00 2.02430e-01 4.26863e+02
ERR DEF= 0.5
MIGRAD MINIMIZATION HAS CONVERGED.
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=16261.4 FROM MIGRAD STATUS=CONVERGED 65 CALLS 66 TOTAL
EDM=6.58779e-08 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 f 5.11324e-01 3.57757e-02 1.91429e-03 -3.36872e-03
2 mx 9.87405e-01 4.03232e-02 3.56822e-04 2.97325e-02
3 my 9.92960e-01 9.38758e-02 2.52190e-04 1.62080e-03
ERR DEF= 0.5
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5
1.282e-03 1.633e-06 3.203e-03
1.633e-06 1.626e-03 -2.189e-06
3.203e-03 -2.189e-06 8.813e-03
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3
1 0.95284 1.000 0.001 0.953
2 0.00557 0.001 1.000 -0.001
3 0.95284 0.953 -0.001 1.000
**********
** 7 **SET ERR 0.5
**********
**********
** 8 **SET PRINT 1
**********
**********
** 9 **HESSE 1500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=16261.4 FROM HESSE STATUS=OK 16 CALLS 82 TOTAL
EDM=6.53294e-08 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER INTERNAL INTERNAL
NO. NAME VALUE ERROR STEP SIZE VALUE
1 f 5.11324e-01 3.55416e-02 7.65715e-05 2.26501e-02
2 mx 9.87405e-01 4.03233e-02 7.13643e-05 9.89017e-02
3 my 9.92960e-01 9.32603e-02 1.00876e-05 9.94599e-02
ERR DEF= 0.5
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5
1.265e-03 1.698e-06 3.159e-03
1.698e-06 1.626e-03 -2.338e-06
3.159e-03 -2.338e-06 8.698e-03
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3
1 0.95220 1.000 0.001 0.952
2 0.00585 0.001 1.000 -0.001
3 0.95220 0.952 -0.001 1.000
[#1] INFO:Minization -- RooMinimizer::optimizeConst: deactivating const optimization
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData) constructing test statistic for sub-range named SB2
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForSB2' created with bounds [-10,10]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'NormalizationRangeForSB2' created with bounds [-10,10]
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData) fixing interpretation of coefficients of any RooAddPdf to full domain of observables
[#1] INFO:Minization -- RooMinimizer::optimizeConst: activating const optimization
[#1] INFO:Minization -- The following expressions have been identified as constant and will be precalculated and cached: (bkg)
[#1] INFO:Minization -- The following expressions will be evaluated in cache-and-track mode: (gx,gy)
**********
** 10 **SET PRINT 1
**********
**********
** 11 **SET NOGRAD
**********
PARAMETER DEFINITIONS:
NO. NAME VALUE STEP SIZE LIMITS
1 f 5.11324e-01 3.55416e-02 0.00000e+00 1.00000e+00
2 mx 9.87405e-01 4.03233e-02 -1.00000e+01 1.00000e+01
3 my 9.92960e-01 9.32603e-02 -1.00000e+01 1.00000e+01
**********
** 12 **SET ERR 0.5
**********
**********
** 13 **SET PRINT 1
**********
**********
** 14 **SET STR 1
**********
NOW USING STRATEGY 1: TRY TO BALANCE SPEED AGAINST RELIABILITY
**********
** 15 **MIGRAD 1500 1
**********
FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.
START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03
FCN=7580.37 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL
EDM= unknown STRATEGY= 1 NO ERROR MATRIX
EXT PARAMETER CURRENT GUESS STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 f 5.11324e-01 3.55416e-02 7.11616e-02 5.76142e+01
2 mx 9.87405e-01 4.03233e-02 4.05214e-03 -5.36255e+02
3 my 9.92960e-01 9.32603e-02 9.37249e-03 1.50798e+02
ERR DEF= 0.5
MIGRAD MINIMIZATION HAS CONVERGED.
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=7578.28 FROM MIGRAD STATUS=CONVERGED 58 CALLS 59 TOTAL
EDM=5.99393e-06 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 f 5.45866e-01 4.48627e-02 1.58044e-03 2.70551e-02
2 mx 1.12762e+00 1.10647e-01 1.95873e-04 -3.91797e-01
3 my 9.64618e-01 5.59523e-02 3.27587e-04 2.27176e-01
ERR DEF= 0.5
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5
2.018e-03 4.741e-03 -2.496e-04
4.741e-03 1.224e-02 -1.695e-04
-2.496e-04 -1.695e-04 3.131e-03
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3
1 0.95665 1.000 0.954 -0.099
2 0.95624 0.954 1.000 -0.027
3 0.24521 -0.099 -0.027 1.000
**********
** 16 **SET ERR 0.5
**********
**********
** 17 **SET PRINT 1
**********
**********
** 18 **HESSE 1500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=7578.28 FROM HESSE STATUS=OK 16 CALLS 75 TOTAL
EDM=5.96577e-06 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER INTERNAL INTERNAL
NO. NAME VALUE ERROR STEP SIZE VALUE
1 f 5.45866e-01 4.46434e-02 3.16088e-04 9.18610e-02
2 mx 1.12762e+00 1.10110e-01 3.91746e-05 1.13002e-01
3 my 9.64618e-01 5.59522e-02 6.55175e-05 9.66120e-02
ERR DEF= 0.5
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5
1.998e-03 4.693e-03 -2.465e-04
4.693e-03 1.212e-02 -1.613e-04
-2.465e-04 -1.613e-04 3.131e-03
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3
1 0.95621 1.000 0.953 -0.099
2 0.95580 0.953 1.000 -0.026
3 0.24520 -0.099 -0.026 1.000
[#1] INFO:Minization -- RooMinimizer::optimizeConst: deactivating const optimization
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData_SB1) constructing test statistic for sub-range named SB1
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_model_modelData_SB1' created with bounds [-10,10]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'fit_nll_model_modelData_SB1' created with bounds [-10,0]
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData_SB1) fixing interpretation of coefficients of any RooAddPdf to full domain of observables
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData_SB2) constructing test statistic for sub-range named SB2
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_model_modelData_SB2' created with bounds [-10,0]
[#1] INFO:Eval -- RooRealVar::setRange(y) new range named 'fit_nll_model_modelData_SB2' created with bounds [0,10]
[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_model_modelData_SB2) fixing interpretation of coefficients of any RooAddPdf to full domain of observables
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model_modelData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minization -- RooMinimizer::optimizeConst: activating const optimization
[#1] INFO:Minization -- The following expressions have been identified as constant and will be precalculated and cached: (bkg)
[#1] INFO:Minization -- The following expressions will be evaluated in cache-and-track mode: (gx,gy)
[#1] INFO:Minization -- The following expressions have been identified as constant and will be precalculated and cached: (bkg)
[#1] INFO:Minization -- The following expressions will be evaluated in cache-and-track mode: (gx,gy)
**********
** 19 **SET PRINT 1
**********
**********
** 20 **SET NOGRAD
**********
PARAMETER DEFINITIONS:
NO. NAME VALUE STEP SIZE LIMITS
1 f 5.45866e-01 4.46434e-02 0.00000e+00 1.00000e+00
2 mx 1.12762e+00 1.10110e-01 -1.00000e+01 1.00000e+01
3 my 9.64618e-01 5.59522e-02 -1.00000e+01 1.00000e+01
**********
** 21 **SET ERR 0.5
**********
**********
** 22 **SET PRINT 1
**********
**********
** 23 **SET STR 1
**********
NOW USING STRATEGY 1: TRY TO BALANCE SPEED AGAINST RELIABILITY
**********
** 24 **MIGRAD 1500 1
**********
FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.
START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03
FCN=23854.7 FROM MIGRAD STATUS=INITIATE 12 CALLS 13 TOTAL
EDM= unknown STRATEGY= 1 NO ERROR MATRIX
EXT PARAMETER CURRENT GUESS STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 f 5.45866e-01 4.46434e-02 8.97886e-02 2.03175e+02
2 mx 1.12762e+00 1.10110e-01 1.10819e-02 8.77800e+02
3 my 9.64618e-01 5.59522e-02 5.62146e-03 -1.47793e+03
ERR DEF= 0.5
MIGRAD MINIMIZATION HAS CONVERGED.
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=23840.4 FROM MIGRAD STATUS=CONVERGED 61 CALLS 62 TOTAL
EDM=1.97734e-06 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 f 5.01559e-01 1.30669e-02 1.78830e-03 -1.50525e-02
2 mx 1.00778e+00 3.32769e-02 2.78855e-04 -3.15587e-01
3 my 9.67772e-01 3.52773e-02 2.72572e-04 4.67726e-01
ERR DEF= 0.5
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5
1.708e-04 2.699e-04 3.183e-04
2.699e-04 1.107e-03 5.550e-04
3.183e-04 5.550e-04 1.244e-03
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3
1 0.76699 1.000 0.621 0.691
2 0.62365 0.621 1.000 0.473
3 0.69283 0.691 0.473 1.000
**********
** 25 **SET ERR 0.5
**********
**********
** 26 **SET PRINT 1
**********
**********
** 27 **HESSE 1500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=23840.4 FROM HESSE STATUS=OK 16 CALLS 78 TOTAL
EDM=1.97636e-06 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER INTERNAL INTERNAL
NO. NAME VALUE ERROR STEP SIZE VALUE
1 f 5.01559e-01 1.30555e-02 7.15321e-05 3.11894e-03
2 mx 1.00778e+00 3.32599e-02 5.57710e-05 1.00949e-01
3 my 9.67772e-01 3.52499e-02 5.45143e-05 9.69289e-02
ERR DEF= 0.5
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5
1.705e-04 2.693e-04 3.176e-04
2.693e-04 1.106e-03 5.535e-04
3.176e-04 5.535e-04 1.243e-03
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3
1 0.76652 1.000 0.620 0.690
2 0.62315 0.620 1.000 0.472
3 0.69224 0.690 0.472 1.000
[#1] INFO:Minization -- RooMinimizer::optimizeConst: deactivating const optimization
RooFitResult: minimized FCN value: 16261.4, estimated distance to minimum: 6.53294e-08
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0
Floating Parameter FinalValue +/- Error
-------------------- --------------------------
f 5.1132e-01 +/- 3.55e-02
mx 9.8741e-01 +/- 4.03e-02
my 9.9296e-01 +/- 9.33e-02
RooFitResult: minimized FCN value: 7578.28, estimated distance to minimum: 5.96577e-06
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0
Floating Parameter FinalValue +/- Error
-------------------- --------------------------
f 5.4587e-01 +/- 4.46e-02
mx 1.1276e+00 +/- 1.10e-01
my 9.6462e-01 +/- 5.60e-02
RooFitResult: minimized FCN value: 23840.4, estimated distance to minimum: 1.97636e-06
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0 HESSE=0
Floating Parameter FinalValue +/- Error
-------------------- --------------------------
f 5.0156e-01 +/- 1.31e-02
mx 1.0078e+00 +/- 3.33e-02
my 9.6777e-01 +/- 3.52e-02
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "RooConstVar.h"
#include "RooProdPdf.h"
#include "RooAddPdf.h"
#include "RooPolynomial.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "RooPlot.h"
#include "RooFitResult.h"
using namespace RooFit;
{
// C r e a t e 2 D p d f a n d d a t a
// -------------------------------------------
// Define observables x,y
RooRealVar x("x", "x", -10, 10);
RooRealVar y("y", "y", -10, 10);
// Construct the signal pdf gauss(x)*gauss(y)
RooRealVar mx("mx", "mx", 1, -10, 10);
RooRealVar my("my", "my", 1, -10, 10);
RooGaussian gx("gx", "gx", x, mx, RooConst(1));
RooGaussian gy("gy", "gy", y, my, RooConst(1));
RooProdPdf sig("sig", "sig", gx, gy);
// Construct the background pdf (flat in x,y)
RooPolynomial px("px", "px", x);
RooPolynomial py("py", "py", y);
RooProdPdf bkg("bkg", "bkg", px, py);
// Construct the composite model sig+bkg
RooRealVar f("f", "f", 0., 1.);
RooAddPdf model("model", "model", RooArgList(sig, bkg), f);
// Sample 10000 events in (x,y) from the model
RooDataSet *modelData = model.generate(RooArgSet(x, y), 10000);
// D e f i n e s i g n a l a n d s i d e b a n d r e g i o n s
// -------------------------------------------------------------------
// Construct the SideBand1,SideBand2,Signal regions
//
// |
// +-------------+-----------+
// | | |
// | Side | Sig |
// | Band1 | nal |
// | | |
// --+-------------+-----------+--
// | |
// | Side |
// | Band2 |
// | |
// +-------------+-----------+
// |
x.setRange("SB1", -10, +10);
y.setRange("SB1", -10, 0);
x.setRange("SB2", -10, 0);
y.setRange("SB2", 0, +10);
x.setRange("SIG", 0, +10);
y.setRange("SIG", 0, +10);
x.setRange("FULL", -10, +10);
y.setRange("FULL", -10, +10);
// P e r f o r m f i t s i n i n d i v i d u a l s i d e b a n d r e g i o n s
// -------------------------------------------------------------------------------------
// Perform fit in SideBand1 region (RooAddPdf coefficients will be interpreted in full range)
RooFitResult *r_sb1 = model.fitTo(*modelData, Range("SB1"), Save());
// Perform fit in SideBand2 region (RooAddPdf coefficients will be interpreted in full range)
RooFitResult *r_sb2 = model.fitTo(*modelData, Range("SB2"), Save());
// P e r f o r m f i t s i n j o i n t s i d e b a n d r e g i o n s
// -----------------------------------------------------------------------------
// Now perform fit to joint 'L-shaped' sideband region 'SB1|SB2'
// (RooAddPdf coefficients will be interpreted in full range)
RooFitResult *r_sb12 = model.fitTo(*modelData, Range("SB1,SB2"), Save());
// Print results for comparison
r_sb1->Print();
r_sb2->Print();
r_sb12->Print();
}
Date
July 2008
Author
Wouter Verkerke

Definition in file rf312_multirangefit.C.

RooAddPdf
RooAddPdf is an efficient implementation of a sum of PDFs of the form.
Definition: RooAddPdf.h:32
f
#define f(i)
Definition: RSha256.hxx:104
RooArgList
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgList.h:21
RooGaussian.h
x
Double_t x[n]
Definition: legend1.C:17
RooGaussian
Plain Gaussian p.d.f.
Definition: RooGaussian.h:24
RooAddPdf.h
TCanvas.h
RooDataSet.h
RooFitResult
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
Definition: RooFitResult.h:40
RooPolynomial.h
RooProdPdf.h
RooFit
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
Definition: RooCFunction1Binding.h:29
RooPolynomial
RooPolynomial implements a polynomial p.d.f of the form.
Definition: RooPolynomial.h:28
RooPlot.h
y
Double_t y[n]
Definition: legend1.C:17
RooRealVar.h
RooFitResult.h
RooConstVar.h
TAxis.h
RooFit::Range
RooCmdArg Range(const char *rangeName, Bool_t adjustNorm=kTRUE)
Definition: RooGlobalFunc.cxx:53
RooFitResult::Print
virtual void Print(Option_t *options=0) const
Print TNamed name and title.
Definition: RooFitResult.h:66
RooDataSet
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:33
make_cnn_model.model
model
Definition: make_cnn_model.py:6
rf312_multirangefit
Definition: rf312_multirangefit.py:1
RooRealVar
RooRealVar represents a variable that can be changed from the outside.
Definition: RooRealVar.h:37
RooFit::Save
RooCmdArg Save(Bool_t flag=kTRUE)
Definition: RooGlobalFunc.cxx:190
RooProdPdf
RooProdPdf is an efficient implementation of a product of PDFs of the form.
Definition: RooProdPdf.h:37
RooArgSet
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:29
RooFit::RooConst
RooConstVar & RooConst(Double_t val)
Definition: RooGlobalFunc.cxx:347