136 const TVectorD& P = rhs.first;
137 const TVectorD& Y = rhs.second;
151 TVectorD delta_y(Y -
mMY);
152 TVectorD delta_p(P -
mMP);
156 mVPP.Rank1Update(delta_p, alpha);
157 mVPY.Rank1Update(delta_p, delta_y, alpha);
158 mVYY.Rank1Update(delta_y, alpha);
162 mMP += delta_p * beta;
163 mMY += delta_y * beta;
187 TVectorD delta_y(
mMY - rhs.
mMY);
188 TVectorD delta_p(
mMP - rhs.
mMP);
194 mVYY.Rank1Update(delta_y, alpha);
196 mVPY.Rank1Update(delta_p, delta_y, alpha);
198 mVPP.Rank1Update(delta_p, alpha);
202 mMY += delta_y * beta;
203 mMP += delta_p * beta;
216 if(i<0 || i >=
nP )
return -1;
218 mean =
mMP(i);
return 0;
227 if(i<0 || i >=
nY )
return -1;
229 mean =
mMY(i);
return 0;
238 if(i<0 || i >=
nY )
return -1;
240 mean =
mMYp(i);
return 0;
249 if(i<0 || i >=
nP )
return -1;
261 if(i<0 || i >=
nY )
return -1;
272 if(i<0 || i >=
nY )
return -1;
283 if( i>j) {
int k=i; i=j; j=k; }
285 if(i<0 || i >=
nP )
return -11;
297 if(ip<0 || ip >=
nP )
return -11;
298 if(iy<0 || iy >=
nY )
return -12;
309 if( i>j) {
int k=i; i=j; j=k; }
311 if(i<0 || i >=
nY )
return -11;
326 for (
size_t i = 1; i <dim; i++) {
329 QwMessage << Form(
"\n mean sig(distrib) nSig(mean) correlation-matrix ....\n");
330 for (
size_t i = 0; i <dim; i++) {
336 if(sigI>0.) nSig=meanI/err;
338 QwMessage << Form(
"P%d: %+12.4g %12.3g %.1f ",(
int)i,meanI,sigI,nSig);
339 for (
size_t j = 1; j <dim; j++) {
340 if( j<=i) {
QwMessage << Form(
" %12s",
"._._._.");
continue;}
344 double corel=cov / sigI / sigJ;
359 QwMessage << Form(
" j, mean, sig(mean), nSig(mean), sig(distribution) \n");
361 for (
int i = 0; i <
nY; i++) {
366 double nSigErr = meanI / err;
367 QwMessage << Form(
"Y%02d, %+11.4g, %12.4g, %8.1f, %12.4g "" ",i,meanI,err,nSigErr,sigI)<<
QwLog::endl;
379 QwMessage << Form(
"\n j slope sigma mean/sigma\n");
380 for (
int iy = 0; iy <
nY; iy++) {
382 for (
int j = 0; j <
nP; j++) {
383 double val=
Axy(j,iy);
384 double err=
dAxy(j,iy);
387 if(fabs(nSig)>3.) x=
'*';
388 QwMessage << Form(
" slope_%d = %11.3g +/-%11.3g (nSig=%.2f) %c\n",j,val, err,nSig,x);
402 for (
int i = 0; i <
nP; i++) {
405 QwMessage << Form(
"\n j meanY sigY correlation with Ps ....\n");
406 for (
int iy = 0; iy <
nY; iy++) {
411 QwMessage << Form(
" %3d %6sY%d: %+12.4g %12.4g ",iy,
" ",iy,meanI,sigI);
412 for (
int ip = 0; ip <
nP; ip++) {
416 double corel = cov / sigI / sigJ;
430 for (
int i = 0; i <
nY; i++){
443 for (
int i = 0; i <
nY; i++){
477 if (
mRPP.Determinant() < std::pow(10,-(2*
nP))) {
478 QwWarning <<
"LRB: correlation matrix nearly singular, "
479 <<
"determinant = " <<
mRPP.Determinant()
480 <<
" (set includes highly correlated variable pairs)"
487 QwWarning <<
"LRB: solving failed (this happens when only few events)."
492 TMatrixD invRPP(TMatrixD::kInverted,
mRPP);
493 Axy = TMatrixD(invRPP, TMatrixD::kMult,
mRPY);
517 dAxy.Rank1Update(TMatrixDDiag(invRPP), TMatrixDDiag(
mRYYp), norm);
A logfile class, based on an identical class in the Hermes analyzer.
#define QwWarning
Predefined log drain for warnings.
#define QwMessage
Predefined log drain for regular messages.
Linear regression utility class based on Bevington and Pebay algorithms.
static std::ostream & endl(std::ostream &)
End of the line.
Int_t getCovarianceP(int i, int j, Double_t &covar) const
Get mean value of a variable, returns error code.
void printSummaryYP() const
Int_t getCovarianceY(int i, int j, Double_t &covar) const
Int_t getSigmaY(const int i, Double_t &sigma) const
TMatrixD mVPY
unnormalized covariances
void printSummaryP() const
void printSummaryMeansWithUncCorrected() const
void printSummaryAlphas() const
TMatrixD mRPY
correlations
Int_t getMeanY(const int i, Double_t &mean) const
Int_t getMeanYprime(const int i, Double_t &mean) const
void printSummaryY() const
Int_t getMeanP(const int i, Double_t &mean) const
Get mean value of a variable, returns error code.
Int_t getCovariancePY(int ip, int iy, Double_t &covar) const
Long64_t fGoodEventNumber
accumulated so far
void printSummaryMeansWithUnc() const
Int_t getSigmaYprime(const int i, Double_t &sigma) const
TMatrixD mSPY
normalized covariances
Int_t fErrorFlag
is information valid
Int_t getSigmaP(const int i, Double_t &sigma) const
Get mean value of a variable, returns error code.
LinRegBevPeb & operator+=(const std::pair< TVectorD, TVectorD > &rhs)