CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Private Attributes

TKinFitter Class Reference

#include <TKinFitter.h>

Inheritance diagram for TKinFitter:
TNamed

List of all members.

Public Member Functions

void addConstraint (TAbsFitConstraint *constraint)
void addMeasParticle (TAbsFitParticle *particle)
void addMeasParticles (TAbsFitParticle *p1, TAbsFitParticle *p2=0, TAbsFitParticle *p3=0, TAbsFitParticle *p4=0, TAbsFitParticle *p5=0, TAbsFitParticle *p6=0, TAbsFitParticle *p7=0, TAbsFitParticle *p8=0, TAbsFitParticle *p9=0)
void addUnmeasParticle (TAbsFitParticle *particle)
void addUnmeasParticles (TAbsFitParticle *p1, TAbsFitParticle *p2=0, TAbsFitParticle *p3=0, TAbsFitParticle *p4=0, TAbsFitParticle *p5=0, TAbsFitParticle *p6=0, TAbsFitParticle *p7=0, TAbsFitParticle *p8=0, TAbsFitParticle *p9=0)
Int_t fit ()
const TMatrixD * getCovMatrix ()
const TMatrixD * getCovMatrixFit ()
Double_t getF ()
Double_t getMaxDeltaS ()
Double_t getMaxF ()
Int_t getMaxNumberIter ()
const TAbsFitParticlegetMeasParticle (Int_t index)
Int_t getNbIter ()
Int_t getNDF ()
Int_t getNParA ()
Int_t getNParB ()
Double_t getS ()
Int_t getStatus ()
const TAbsFitParticlegetUnmeasParticle (Int_t index)
Int_t getVerbosity ()
Int_t nbConstraints ()
Int_t nbMeasParticles ()
Int_t nbUnmeasParticles ()
void print ()
void reset ()
void resetStatus ()
void setCovMatrix (TMatrixD &V)
void setMaxDeltaS (Double_t maxDeltaS)
void setMaxF (Double_t maxF)
void setMaxNbIter (Int_t maxNbIter)
void setVerbosity (Int_t verbosity=1)
 TKinFitter (const TString &name, const TString &title)
 TKinFitter ()
 ~TKinFitter ()

Protected Member Functions

Bool_t applyDeltaA ()
Bool_t applyDeltaY ()
void applyVFit ()
Bool_t calcA ()
Bool_t calcB ()
Bool_t calcC ()
Bool_t calcC11 ()
Bool_t calcC21 ()
Bool_t calcC22 ()
Bool_t calcC31 ()
Bool_t calcC32 ()
Bool_t calcC33 ()
Bool_t calcDeltaA ()
Bool_t calcDeltaY ()
Bool_t calcLambda ()
Bool_t calcV ()
Bool_t calcVA ()
Bool_t calcVB ()
Bool_t calcVFit ()
Bool_t converged (Double_t F, Double_t prevS, Double_t currS)
void countMeasParams ()
void countUnmeasParams ()
TString getStatusString ()
void printMatrix (const TMatrixD &matrix, const TString name="")
void resetParams ()

Private Attributes

TMatrixD _A
TMatrixD _AT
TMatrixD _B
TMatrixD _BT
TMatrixD _c
TMatrixD _C11
TMatrixD _C11T
TMatrixD _C21
TMatrixD _C21T
TMatrixD _C22
TMatrixD _C22T
TMatrixD _C31
TMatrixD _C31T
TMatrixD _C32
TMatrixD _C32T
TMatrixD _C33
TMatrixD _C33T
std::vector< TAbsFitConstraint * > _constraints
TMatrixD _deltaA
TMatrixD _deltaAstar
TMatrixD _deltaY
TMatrixD _deltaYstar
TMatrixD _lambda
TMatrixD _lambdaT
TMatrixD _lambdaVFit
Double_t _maxDeltaS
Double_t _maxF
Int_t _maxNbIter
std::vector< TAbsFitParticle * > _measParticles
Int_t _nbIter
Int_t _nParA
Int_t _nParB
Int_t _status
std::vector< TAbsFitParticle * > _unmeasParticles
TMatrixD _V
TMatrixD _VA
TMatrixD _VAinv
TMatrixD _VB
TMatrixD _VBinv
Int_t _verbosity
TMatrixD _Vinv
TMatrixD _yaVFit

Detailed Description

Definition at line 12 of file TKinFitter.h.


Constructor & Destructor Documentation

TKinFitter::TKinFitter ( )

Definition at line 21 of file TKinFitter.cc.

References reset().

                      :
  TNamed("UnNamed", "UnTitled"),
  _A(1, 1),
  _AT(1, 1),
  _B(1, 1),
  _BT(1, 1),
  _V(1, 1),
  _Vinv(1, 1),
  _VB(1, 1),
  _VBinv(1, 1),
  _VA(1, 1),
  _VAinv(1, 1),
  _c(1, 1),
  _C11(1, 1),
  _C11T(1, 1),
  _C21(1, 1),
  _C21T(1, 1),
  _C22(1, 1),
  _C22T(1, 1),
  _C31(1, 1),
  _C31T(1, 1),
  _C32(1, 1),
  _C32T(1, 1),
  _C33(1, 1),
  _C33T(1, 1),
  _deltaA(1, 1),
  _deltaY(1, 1),
  _deltaAstar(1, 1),
  _deltaYstar(1, 1),
  _lambda(1, 1),
  _lambdaT(1, 1),
  _lambdaVFit(1, 1),
  _yaVFit(1, 1),
  _constraints(0),
  _measParticles(0),
  _unmeasParticles(0)
{

  reset();

}
TKinFitter::TKinFitter ( const TString &  name,
const TString &  title 
)

Definition at line 63 of file TKinFitter.cc.

References reset().

                                                               :
  TNamed(name, title),
  _A(1, 1),
  _AT(1, 1),
  _B(1, 1),
  _BT(1, 1),
  _V(1, 1),
  _Vinv(1, 1),
  _VB(1, 1),
  _VBinv(1, 1),
  _VA(1, 1),
  _VAinv(1, 1),
  _c(1, 1),
  _C11(1, 1),
  _C11T(1, 1),
  _C21(1, 1),
  _C21T(1, 1),
  _C22(1, 1),
  _C22T(1, 1),
  _C31(1, 1),
  _C31T(1, 1),
  _C32(1, 1),
  _C32T(1, 1),
  _C33(1, 1),
  _C33T(1, 1),
  _deltaA(1, 1),
  _deltaY(1, 1),
  _deltaAstar(1, 1),
  _deltaYstar(1, 1),
  _lambda(1, 1),
  _lambdaT(1, 1),
  _lambdaVFit(1, 1),
  _yaVFit(1, 1),
  _constraints(0),
  _measParticles(0),
  _unmeasParticles(0)
{

  reset();

}
TKinFitter::~TKinFitter ( )

Definition at line 182 of file TKinFitter.cc.

                        {

}

Member Function Documentation

void TKinFitter::addConstraint ( TAbsFitConstraint constraint)

Definition at line 281 of file TKinFitter.cc.

References _constraints, countMeasParams(), and resetStatus().

Referenced by TSLToyGen::doToyExperiments(), CandMassKinFitter::set(), TtSemiLepKinFitter::setupFitter(), TtFullHadKinFitter::setupFitter(), and StKinFitter::setupFitter().

                                                              {
  // add a constraint

  resetStatus();

  if ( constraint != 0 ) {
    _constraints.push_back( constraint );
  }

  countMeasParams();

}
void TKinFitter::addMeasParticle ( TAbsFitParticle particle)

Definition at line 209 of file TKinFitter.cc.

References _measParticles, countMeasParams(), and resetStatus().

Referenced by TSLToyGen::doToyExperiments(), CandMassKinFitter::set(), TtSemiLepKinFitter::setupFitter(), TtFullHadKinFitter::setupFitter(), and StKinFitter::setupFitter().

                                                            {
  // add one measured particle

  resetStatus();

  if ( particle != 0 ) {
    _measParticles.push_back( particle );
  } else {
    edm::LogError ("NullPointer") << "Measured particle points to NULL. It will not be added to the KinFitter.";
  }

  countMeasParams();

}
void TKinFitter::addMeasParticles ( TAbsFitParticle p1,
TAbsFitParticle p2 = 0,
TAbsFitParticle p3 = 0,
TAbsFitParticle p4 = 0,
TAbsFitParticle p5 = 0,
TAbsFitParticle p6 = 0,
TAbsFitParticle p7 = 0,
TAbsFitParticle p8 = 0,
TAbsFitParticle p9 = 0 
)

Definition at line 224 of file TKinFitter.cc.

References _measParticles, countMeasParams(), and resetStatus().

                                                                                             {
  // add many measured particles

  resetStatus();

  if ( p1 != 0 ) _measParticles.push_back( p1 );
  if ( p2 != 0 ) _measParticles.push_back( p2 );
  if ( p3 != 0 ) _measParticles.push_back( p3 );
  if ( p4 != 0 ) _measParticles.push_back( p4 );
  if ( p5 != 0 ) _measParticles.push_back( p5 );
  if ( p6 != 0 ) _measParticles.push_back( p6 );
  if ( p7 != 0 ) _measParticles.push_back( p7 );
  if ( p8 != 0 ) _measParticles.push_back( p8 );
  if ( p9 != 0 ) _measParticles.push_back( p9 );

  countMeasParams();

}
void TKinFitter::addUnmeasParticle ( TAbsFitParticle particle)

Definition at line 245 of file TKinFitter.cc.

References _unmeasParticles, countUnmeasParams(), and resetStatus().

Referenced by TSLToyGen::doToyExperiments().

                                                              {
  // add one unmeasured particle

  resetStatus();

  if ( particle != 0 ) {
    _unmeasParticles.push_back( particle );
  } else {
    edm::LogError ("NullPointer") << "Unmeasured particle points to NULL. It will not be added to the KinFitter.";
  }

  countUnmeasParams();

}
void TKinFitter::addUnmeasParticles ( TAbsFitParticle p1,
TAbsFitParticle p2 = 0,
TAbsFitParticle p3 = 0,
TAbsFitParticle p4 = 0,
TAbsFitParticle p5 = 0,
TAbsFitParticle p6 = 0,
TAbsFitParticle p7 = 0,
TAbsFitParticle p8 = 0,
TAbsFitParticle p9 = 0 
)

Definition at line 260 of file TKinFitter.cc.

References _unmeasParticles, countUnmeasParams(), and resetStatus().

                                                                                                    {
  // add many unmeasured particles

  resetStatus();

  if ( p1 != 0 ) _unmeasParticles.push_back( p1 );
  if ( p2 != 0 ) _unmeasParticles.push_back( p2 );
  if ( p3 != 0 ) _unmeasParticles.push_back( p3 );
  if ( p4 != 0 ) _unmeasParticles.push_back( p4 );
  if ( p5 != 0 ) _unmeasParticles.push_back( p5 );
  if ( p6 != 0 ) _unmeasParticles.push_back( p6 );
  if ( p7 != 0 ) _unmeasParticles.push_back( p7 );
  if ( p8 != 0 ) _unmeasParticles.push_back( p8 );
  if ( p9 != 0 ) _unmeasParticles.push_back( p9 );

  countUnmeasParams();

}
Bool_t TKinFitter::applyDeltaA ( ) [protected]

Definition at line 1038 of file TKinFitter.cc.

References _deltaA, _unmeasParticles, TAbsFitParticle::applycorr(), TAbsFitParticle::getNPar(), and getHLTprescales::index.

Referenced by fit().

                               {
  //apply corrections to unmeasured particles

  int offsetParam = 0;
  for (unsigned int indexParticle = 0; indexParticle < _unmeasParticles.size(); indexParticle++) {

    TAbsFitParticle* particle = _unmeasParticles[indexParticle];
    Int_t nbParams = particle->getNPar();
    TMatrixD params( nbParams, 1 );
    for (Int_t index = 0; index < nbParams; index++) {
      params(index, 0) = _deltaA(index+offsetParam, 0);
    }
    particle->applycorr( &params );
    offsetParam+=nbParams;

  }

  return true;

}
Bool_t TKinFitter::applyDeltaY ( ) [protected]

Definition at line 1059 of file TKinFitter.cc.

References _constraints, _deltaY, _measParticles, TAbsFitParticle::applycorr(), TAbsFitConstraint::applyDeltaAlpha(), TAbsFitParticle::getNPar(), TAbsFitConstraint::getNPar(), and getHLTprescales::index.

Referenced by fit().

                               {
  //apply corrections to measured particles

  int offsetParam = 0;
  for (unsigned int indexParticle = 0; indexParticle < _measParticles.size(); indexParticle++) {

    TAbsFitParticle* particle = _measParticles[indexParticle];
    Int_t nbParams = particle->getNPar();
    TMatrixD params( nbParams, 1 );
    for (Int_t index = 0; index < nbParams; index++) {
      params(index, 0) = _deltaY(index+offsetParam, 0);
    }
    particle->applycorr( &params );
    offsetParam+=nbParams;

  }

  for (unsigned int indexConstraint = 0; indexConstraint < _constraints.size(); indexConstraint++) {

    TAbsFitConstraint* constraint = _constraints[indexConstraint];
    Int_t nbParams = constraint->getNPar();
    if ( nbParams > 0 ) {
      TMatrixD params( nbParams, 1 );
      for (Int_t index = 0; index < nbParams; index++) {
        params(index, 0) = _deltaY(index+offsetParam, 0);
      }
      constraint->applyDeltaAlpha( &params );
      offsetParam+=nbParams;
    }

  }

  return true;

}
void TKinFitter::applyVFit ( ) [protected]

Definition at line 991 of file TKinFitter.cc.

References _constraints, _measParticles, _unmeasParticles, _yaVFit, trackerHits::c, TAbsFitParticle::getNPar(), TAbsFitConstraint::getNPar(), csvReporter::r, TAbsFitParticle::setCovMatrixFit(), and TAbsFitConstraint::setCovMatrixFit().

Referenced by fit().

                           {
  // apply fit covariance matrix to measured and unmeasured  particles

  int offsetParam = 0;
  for (unsigned int indexParticle = 0; indexParticle < _measParticles.size(); indexParticle++) {
    TAbsFitParticle* particle = _measParticles[indexParticle];
    Int_t nbParams = particle->getNPar();
    TMatrixD vfit( nbParams, nbParams );
    for (Int_t c = 0; c < nbParams; c++) {
      for (Int_t r = 0; r < nbParams; r++) {
        vfit(r, c) = _yaVFit(r + offsetParam, c + offsetParam);
      }
    }
    particle->setCovMatrixFit( &vfit );
    offsetParam += nbParams;
  }

  for (unsigned int indexConstraint = 0; indexConstraint < _constraints.size(); indexConstraint++) {
    TAbsFitConstraint* constraint = _constraints[indexConstraint];
    Int_t nbParams = constraint->getNPar();
    if (nbParams > 0) {
      TMatrixD vfit( nbParams, nbParams );
      for (Int_t c = 0; c < nbParams; c++) {
        for (Int_t r = 0; r < nbParams; r++) {
          vfit(r, c) = _yaVFit(r + offsetParam, c + offsetParam);
        }
      }
      constraint->setCovMatrixFit( &vfit );
      offsetParam += nbParams;
    }
  }

  for (unsigned int indexParticle = 0; indexParticle < _unmeasParticles.size(); indexParticle++) {
    TAbsFitParticle* particle = _unmeasParticles[indexParticle];
    Int_t nbParams = particle->getNPar();
    TMatrixD vfit( nbParams, nbParams );
    for (Int_t c = 0; c < nbParams; c++) {
      for (Int_t r = 0; r < nbParams; r++) {
        vfit(r, c) = _yaVFit(r + offsetParam, c + offsetParam);
      }
    }
    particle->setCovMatrixFit( &vfit );
    offsetParam += nbParams;
  }

}
Bool_t TKinFitter::calcA ( ) [protected]

Definition at line 519 of file TKinFitter.cc.

References _A, _AT, _constraints, _nParA, _unmeasParticles, TAbsFitParticle::getDerivative(), and JetComb::kMult.

Referenced by fit().

                         {
  // Calculate the Jacobi matrix of unmeasured parameters df_i/da_i
  // Row i contains the derivatives of constraint f_i. Column q contains
  // the derivative wrt. a_q.

  _A.ResizeTo( _constraints.size(), _nParA );

  for (unsigned int indexConstr = 0; indexConstr < _constraints.size(); indexConstr++) {

    int offsetParam = 0;
    for (unsigned int indexParticle = 0; indexParticle < _unmeasParticles.size(); indexParticle++) {

      // Calculate matrix product  df/dP * dP/dy = (df/dr, df/dtheta, df/dphi, ...)

      TAbsFitParticle* particle = _unmeasParticles[indexParticle];
      TMatrixD* derivParticle = particle->getDerivative();
      TMatrixD* derivConstr = _constraints[indexConstr]->getDerivative( particle );
      TMatrixD deriv( *derivConstr, TMatrixD::kMult, *derivParticle );

      for (int indexParam = 0; indexParam < deriv.GetNcols(); indexParam++) {
        _A(indexConstr,indexParam+offsetParam) = deriv(0, indexParam);
      }
      offsetParam += deriv.GetNcols();

      delete derivParticle;
      delete derivConstr;

    }
  }

  // Calculate transposed matrix
  TMatrixD AT(TMatrixD::kTransposed, _A);
  _AT.ResizeTo( AT );
  _AT = AT;

  return true;

}
Bool_t TKinFitter::calcB ( ) [protected]

Definition at line 558 of file TKinFitter.cc.

References _B, _BT, _constraints, _measParticles, _nParB, _verbosity, TAbsFitParticle::getDerivative(), TAbsFitConstraint::getDerivativeAlpha(), JetComb::kMult, and printMatrix().

Referenced by fit().

                         {
  // Calculate the Jacobi matrix of measured parameters df_i/da_i
  // Row i contains the derivatives of constraint f_i. Column q contains
  // the derivative wrt. a_q.

  _B.ResizeTo( _constraints.size(), _nParB );

  int offsetParam = 0;
  for (unsigned int indexConstr = 0; indexConstr < _constraints.size(); indexConstr++) {

    offsetParam = 0;
    for (unsigned int indexParticle = 0; indexParticle < _measParticles.size(); indexParticle++) {

      // Calculate matrix product  df/dP * dP/dy = (df/dr, df/dtheta, df/dphi, ...)
      TAbsFitParticle* particle = _measParticles[indexParticle];
      TMatrixD* derivParticle = particle->getDerivative();
      TMatrixD* derivConstr = _constraints[indexConstr]->getDerivative( particle );
      TMatrixD deriv( *derivConstr,  TMatrixD::kMult, *derivParticle );
      if (_verbosity >= 3) {
        TString matrixName = "B deriv: Particle -> ";
        matrixName += particle->GetName();
        printMatrix( *derivParticle, matrixName );
        matrixName = "B deriv: Constraint -> ";
        matrixName += _constraints[indexConstr]->GetName();
        matrixName += " , Particle -> ";
        matrixName += particle->GetName();
        printMatrix( *derivConstr, matrixName );
      } 
      for (int indexParam = 0; indexParam < deriv.GetNcols(); indexParam++) {
        _B(indexConstr,indexParam+offsetParam) = deriv(0, indexParam);
      }
      offsetParam += deriv.GetNcols();

      delete derivParticle;
      delete derivConstr;

    }
  }

  for (unsigned int iC = 0; iC < _constraints.size(); iC++) {

    TAbsFitConstraint* constraint = _constraints[iC];
    TMatrixD* deriv = constraint->getDerivativeAlpha();

    if (deriv != 0) {

      if (_verbosity >= 3) {
        TString matrixName = "B deriv alpha: Constraint -> ";
        matrixName += constraint->GetName();
        printMatrix( *deriv, matrixName );
      } 
      for (int indexParam = 0; indexParam < deriv->GetNcols(); indexParam++) {
        _B( iC, indexParam+offsetParam ) = (*deriv)(0, indexParam);
      }
      offsetParam += deriv->GetNcols();
      
      delete deriv;
    }
  }

  TMatrixD BT( TMatrixD::kTransposed,  _B );
  _BT.ResizeTo( BT );
  _BT = BT;

  return true;

}
Bool_t TKinFitter::calcC ( ) [protected]

Definition at line 796 of file TKinFitter.cc.

References _A, _B, _c, _constraints, _measParticles, _nParA, _nParB, _unmeasParticles, _verbosity, a, alpha, TAbsFitConstraint::getNPar(), TAbsFitParticle::getParCurr(), TAbsFitConstraint::getParCurr(), TAbsFitConstraint::getParIni(), TAbsFitParticle::getParIni(), JetComb::kMult, printMatrix(), and detailsBasic3DVector::y.

Referenced by fit().

                         {
  // Calculate the matrix c = A*deltaAStar + B*deltaYStar - fStar

  int offsetParam = 0;

  // calculate delta(a*), = 0 in the first iteration
  TMatrixD deltaastar( 1, 1 );
  if ( _nParA > 0 ) {

    deltaastar.ResizeTo( _nParA, 1 );
    for (unsigned int indexParticle = 0; indexParticle < _unmeasParticles.size(); indexParticle++) {
    
      TAbsFitParticle* particle = _unmeasParticles[indexParticle];
      const TMatrixD* astar = particle->getParCurr();
      const TMatrixD* a = particle->getParIni();
      TMatrixD deltaastarpart(*astar);
      deltaastarpart -= *a;
      
      for (int indexParam = 0; indexParam < deltaastarpart.GetNrows(); indexParam++) {
        deltaastar(indexParam+offsetParam, 0) = deltaastarpart(indexParam, 0);
      }
      offsetParam += deltaastarpart.GetNrows();
      
    }

    if ( _verbosity >= 3 ) {
      printMatrix( deltaastar, "deltaastar" );
    }

  }

  // calculate delta(y*), = 0 in the first iteration
  TMatrixD deltaystar( _nParB, 1 );
  offsetParam = 0;
  for (unsigned int indexParticle = 0; indexParticle < _measParticles.size(); indexParticle++) {

    TAbsFitParticle* particle = _measParticles[indexParticle];
    const TMatrixD* ystar = particle->getParCurr();
    const TMatrixD* y = particle->getParIni();
    TMatrixD deltaystarpart(*ystar);
    deltaystarpart -= *y;

    for (int indexParam = 0; indexParam < deltaystarpart.GetNrows(); indexParam++) {
      deltaystar(indexParam+offsetParam, 0) = deltaystarpart(indexParam, 0);
    }
    offsetParam += deltaystarpart.GetNrows();

  } 

  for (unsigned int iC = 0; iC < _constraints.size(); iC++) {

    TAbsFitConstraint* constraint = _constraints[iC];
    
    if ( constraint->getNPar() > 0 ) {

      const TMatrixD* alphastar = constraint->getParCurr();
      const TMatrixD* alpha = constraint->getParIni();

      TMatrixD deltaalphastarpart(*alphastar);
      deltaalphastarpart -= *alpha;

      for (int indexParam = 0; indexParam < deltaalphastarpart.GetNrows(); indexParam++) {
        deltaystar(indexParam+offsetParam, 0) = deltaalphastarpart(indexParam, 0);
      }
      offsetParam += deltaalphastarpart.GetNrows();

    }
  }

  if ( _verbosity >= 3 ) {
    printMatrix( deltaystar, "deltaystar" );
  }

  // calculate f*
  TMatrixD fstar( _constraints.size(), 1 );
  for (unsigned int indexConstr = 0; indexConstr < _constraints.size(); indexConstr++) {
    fstar( indexConstr, 0 ) = _constraints[indexConstr]->getCurrentValue();
  }

  // calculate c
  _c.ResizeTo( fstar );
  _c = fstar;
  _c *= (-1.);
  TMatrixD Bdeltaystar( _B, TMatrixD::kMult, deltaystar );
  _c += Bdeltaystar;
  if ( _nParA ) {
    TMatrixD Adeltaastar( _A, TMatrixD::kMult, deltaastar );
    _c += Adeltaastar;
  }

  return true;

}
Bool_t TKinFitter::calcC11 ( ) [protected]

Definition at line 668 of file TKinFitter.cc.

References _A, _AT, _B, _BT, _C11, _C11T, _nParA, _V, _VAinv, _VB, and JetComb::kMult.

Referenced by fit().

                           {
  // Calculate the matrix C11 = V^(-1) - V^(-1)*BT*VB*B*V^(-1) + V^(-1)*BT*VB*A*VA^(-1)*AT*VB*B*V^(-1)

  TMatrixD VBT( _V, TMatrixD::kMult, _BT );
  TMatrixD VBB( _VB, TMatrixD::kMult, _B );
  TMatrixD VBTVBB( VBT, TMatrixD::kMult, VBB );
  TMatrixD m2( VBTVBB,  TMatrixD::kMult, _V );

  _C11.ResizeTo( _V );
  _C11 = _V;
  _C11 -= m2;

  if ( _nParA > 0 ) {
    TMatrixD VBA( _VB, TMatrixD::kMult, _A );
    TMatrixD VBTVBA( VBT, TMatrixD::kMult, VBA );
    TMatrixD VAinvAT( _VAinv, TMatrixD::kMult, _AT );
    TMatrixD VBTVBAVAinvAT( VBTVBA, TMatrixD::kMult, VAinvAT );
    TMatrixD VBTVBAVAinvATVBB( VBTVBAVAinvAT, TMatrixD::kMult, VBB );
    TMatrixD m3( VBTVBAVAinvATVBB, TMatrixD::kMult, _V );
    _C11 += m3;
  }

  TMatrixD C11T( TMatrixD::kTransposed,  _C11 );
  _C11T.ResizeTo( C11T );
  _C11T = C11T;

  return true;

}
Bool_t TKinFitter::calcC21 ( ) [protected]

Definition at line 698 of file TKinFitter.cc.

References _AT, _B, _C21, _C21T, _V, _VAinv, _VB, and JetComb::kMult.

Referenced by fit().

                           {
  // Calculate the matrix  C21 = -VA^(-1)*AT*VB*B*V^(-1)

  TMatrixD VAinvAT( _VAinv, TMatrixD::kMult, _AT );
  TMatrixD VBB( _VB, TMatrixD::kMult, _B );
  TMatrixD VAinvATVBB( VAinvAT, TMatrixD::kMult, VBB );
  TMatrixD C21( VAinvATVBB, TMatrixD::kMult, _V );
  C21 *= -1.;
  _C21.ResizeTo( C21 );
  _C21 = C21;
  
  TMatrixD C21T( TMatrixD::kTransposed,  _C21 );
  _C21T.ResizeTo( C21T );
  _C21T = C21T;

  return true;

}
Bool_t TKinFitter::calcC22 ( ) [protected]

Definition at line 717 of file TKinFitter.cc.

References _C22, _C22T, and _VAinv.

Referenced by fit().

                           {
  //  Calculate the matrix C22 = VA^(-1)

  _C22.ResizeTo( _VAinv );
  _C22 = _VAinv;

  TMatrixD C22T( TMatrixD::kTransposed,  _C22 );
  _C22T.ResizeTo( C22T );
  _C22T = C22T;

  return true;

}
Bool_t TKinFitter::calcC31 ( ) [protected]

Definition at line 731 of file TKinFitter.cc.

References _A, _AT, _B, _C31, _C31T, _nParA, _V, _VAinv, _VB, and JetComb::kMult.

Referenced by fit().

                           {
  // Calculate the matrix  C31 = VB*B*V^(-1) - VB*A*VA^(-1)*AT*VB*B*V^(-1)

  TMatrixD VbB(_VB, TMatrixD::kMult, _B);
  TMatrixD m1( VbB, TMatrixD::kMult, _V );

  _C31.ResizeTo( m1 );
  _C31 = m1;

  if ( _nParA > 0 ) {
    TMatrixD VbA(_VB, TMatrixD::kMult, _A);
    TMatrixD VAinvAT( _VAinv, TMatrixD::kMult, _AT );
    TMatrixD VbBV( VbB,  TMatrixD::kMult, _V );
    TMatrixD VbAVAinvAT(VbA, TMatrixD::kMult, VAinvAT); 
    TMatrixD m2(VbAVAinvAT, TMatrixD::kMult, VbBV);

    _C31 -= m2;
  }

  TMatrixD C31T( TMatrixD::kTransposed,  _C31 );
  _C31T.ResizeTo( C31T );
  _C31T = C31T;

  return true;

}
Bool_t TKinFitter::calcC32 ( ) [protected]

Definition at line 758 of file TKinFitter.cc.

References _A, _C32, _C32T, _VAinv, _VB, and JetComb::kMult.

Referenced by fit().

                           {
  // Calculate the matrix  C32 = VB*A*VA^(-1)

  TMatrixD VbA( _VB, TMatrixD::kMult, _A );
  TMatrixD C32( VbA, TMatrixD::kMult, _VAinv );
  _C32.ResizeTo( C32 );
  _C32 = C32;

  TMatrixD C32T( TMatrixD::kTransposed,  _C32 );
  _C32T.ResizeTo( C32T );
  _C32T = C32T;

  return true;

}
Bool_t TKinFitter::calcC33 ( ) [protected]

Definition at line 774 of file TKinFitter.cc.

References _A, _AT, _C33, _C33T, _nParA, _VAinv, _VB, and JetComb::kMult.

Referenced by fit().

                           {
  // Calculate the matrix C33 = -VB + VB*A*VA^(-1)*AT*VB

  _C33.ResizeTo( _VB );
  _C33 = _VB;
  _C33 *= -1.;

  if ( _nParA > 0 ) {
    TMatrixD VbA(_VB, TMatrixD::kMult, _A );
    TMatrixD VAinvAT( _VAinv, TMatrixD::kMult, _AT );
    TMatrixD VbAVAinvAT( VbA, TMatrixD::kMult, VAinvAT );
    TMatrixD C33( VbAVAinvAT,  TMatrixD::kMult, _VB );
    _C33 += C33;
  }

  TMatrixD C33T( TMatrixD::kTransposed,  _C33 );
  _C33T.ResizeTo( C33T );
  _C33T = C33T;

  return true;
}
Bool_t TKinFitter::calcDeltaA ( ) [protected]

Definition at line 890 of file TKinFitter.cc.

References _c, _C32T, _deltaA, _deltaAstar, _nbIter, and JetComb::kMult.

Referenced by fit().

                              {
  // Calculate the matrix deltaA = C32T * c
  // (corrections to unmeasured parameters)

  TMatrixD deltaA( _C32T, TMatrixD::kMult, _c );
  _deltaA.ResizeTo( deltaA );

  if (_nbIter == 0) {
    _deltaAstar.ResizeTo(deltaA);
    _deltaAstar.Zero();
  } else
    _deltaAstar = _deltaA;

  _deltaA = deltaA;

  return true;

}
Bool_t TKinFitter::calcDeltaY ( ) [protected]

Definition at line 909 of file TKinFitter.cc.

References _c, _C31T, _deltaY, _deltaYstar, _nbIter, and JetComb::kMult.

Referenced by fit().

                              {
  // Calculate the matrix deltaY = C31T * c 
  // (corrections to measured parameters)

  TMatrixD deltaY( _C31T, TMatrixD::kMult, _c );
  _deltaY.ResizeTo( deltaY );

  if (_nbIter == 0) {
    _deltaYstar.ResizeTo(deltaY);
    _deltaYstar.Zero();
  } else
    _deltaYstar = _deltaY;

  _deltaY = deltaY;

  return true;

}
Bool_t TKinFitter::calcLambda ( ) [protected]

Definition at line 928 of file TKinFitter.cc.

References _c, _C33, _lambda, _lambdaT, and JetComb::kMult.

Referenced by fit().

                              {
  // Calculate the matrix Lambda = C33 * c 
  // (Lagrange Multipliers)

  TMatrixD lambda( _C33,  TMatrixD::kMult, _c );
  _lambda.ResizeTo( lambda );
  _lambda = lambda;

  TMatrixD lambdaT( TMatrixD::kTransposed,  _lambda );
  _lambdaT.ResizeTo( lambdaT );
  _lambdaT = lambdaT;

  return true;

}
Bool_t TKinFitter::calcV ( ) [protected]

Definition at line 467 of file TKinFitter.cc.

References _constraints, _measParticles, _nParB, _status, _V, _Vinv, TAbsFitConstraint::getCovMatrix(), TAbsFitParticle::getCovMatrix(), TAbsFitParticle::getNPar(), and TAbsFitConstraint::getNPar().

Referenced by fit().

                         {
  // Combines the covariance matrices of all measured particles

  _V.ResizeTo( _nParB, _nParB );
  _V.Zero();

  Int_t offsetP = 0;
  for (unsigned int iP = 0; iP < _measParticles.size(); iP++) {
    TAbsFitParticle* particle = _measParticles[iP];
    Int_t nParP = particle->getNPar();
    const TMatrixD* covMatrix =  particle->getCovMatrix();

    for (int iX = offsetP; iX < offsetP + nParP; iX++) {
      for (int iY = offsetP; iY < offsetP + nParP; iY++) {

        _V(iX, iY) = (*covMatrix)(iX-offsetP, iY-offsetP);

      }
    }

    offsetP += nParP;
  }

  for (unsigned int iC = 0; iC < _constraints.size(); iC++) {
    TAbsFitConstraint* constraint = _constraints[iC];
    Int_t nParP = constraint->getNPar();
    const TMatrixD* covMatrix =  constraint->getCovMatrix();

    for (int iX = offsetP; iX < offsetP + nParP; iX++) {
      for (int iY = offsetP; iY < offsetP + nParP; iY++) {

        _V(iX, iY) = (*covMatrix)(iX-offsetP, iY-offsetP);

      }
    }

    offsetP += nParP;
  }

  _Vinv.ResizeTo( _V );
  _Vinv = _V;
  try {
    _Vinv.Invert();
  } catch (cms::Exception& e) {
    edm::LogInfo ("KinFitter") << "Failed to invert covariance matrix V. Fit will be aborted.";
    _status = -10;
  }

  return true;

}
Bool_t TKinFitter::calcVA ( ) [protected]

Definition at line 647 of file TKinFitter.cc.

References _A, _AT, _status, _VA, _VAinv, _VB, and JetComb::kMult.

Referenced by fit().

                          {
  // Calculate the matrix VA = (A^T*VB*A)

  TMatrixD ATVB( _AT, TMatrixD::kMult, _VB );
  TMatrixD VA(ATVB, TMatrixD::kMult, _A);
  _VA.ResizeTo( VA );
  _VA = VA;

  _VAinv.ResizeTo( _VA );
  _VAinv = _VA;
  try {
    _VAinv.Invert();
  } catch (cms::Exception& e) {
    edm::LogInfo ("KinFitter") << "Failed to invert matrix VA. Fit will be aborted.";
    _status = -10;
  }

  return true;

}
Bool_t TKinFitter::calcVB ( ) [protected]

Definition at line 626 of file TKinFitter.cc.

References _B, _BT, _status, _V, _VB, _VBinv, and JetComb::kMult.

Referenced by fit().

                          {
  // Calculate the matrix V_B = (B*V*B^T)^-1

  TMatrixD BV( _B, TMatrixD::kMult, _V );
  TMatrixD VBinv( BV, TMatrixD::kMult, _BT );
  _VBinv.ResizeTo( VBinv );
  _VBinv = VBinv;

  _VB.ResizeTo( _VBinv );
  _VB = _VBinv;
  try {
    _VB.Invert();
  } catch (cms::Exception& e) {
    edm::LogInfo ("KinFitter") << "Failed to invert matrix VB. Fit will be aborted.";
    _status = -10;
  }

  return true;

}
Bool_t TKinFitter::calcVFit ( ) [protected]

Definition at line 944 of file TKinFitter.cc.

References _C11, _C21, _C21T, _C22, _C33, _lambdaVFit, _nParA, and _yaVFit.

Referenced by fit().

                            {
  // Calculate the covariance matrix of fitted parameters
  //
  // Vfit(y) = ( C11  C21T )
  //     (a)   ( C21  C22  )
  //
  // Vfit(lambda) = (-C33)
  
  // Calculate covariance matrix of lambda
  _lambdaVFit.ResizeTo( _C33 );
  _lambdaVFit = _C33;
  _lambdaVFit *= -1.;


  // Calculate combined covariance matrix of y and a
  Int_t nbRows = _C11.GetNrows();
  Int_t nbCols = _C11.GetNcols();
  if ( _nParA > 0 ) {
    nbRows += _C21.GetNrows();
    nbCols += _C21T.GetNcols();
  }
  _yaVFit.ResizeTo( nbRows, nbCols );

  for (int iRow = 0; iRow < nbRows; iRow++) {
    for (int iCol = 0; iCol < nbCols; iCol++) {

      if (iRow >= _C11.GetNrows()) {
        if (iCol >= _C11.GetNcols()) {
          _yaVFit(iRow, iCol) = _C22(iRow-_C11.GetNrows(), iCol-_C11.GetNcols());
        } else {
          _yaVFit(iRow, iCol) = _C21(iRow-_C11.GetNrows(), iCol);
        }
      } else {
        if (iCol >= _C11.GetNcols()) {
          _yaVFit(iRow, iCol) = _C21T(iRow, iCol-_C11.GetNcols());
        } else {
          _yaVFit(iRow, iCol) = _C11(iRow, iCol);
        }
      }

    }
  }

  return true;

}
Bool_t TKinFitter::converged ( Double_t  F,
Double_t  prevS,
Double_t  currS 
) [protected]

Definition at line 1126 of file TKinFitter.cc.

References _maxDeltaS, and _maxF.

Referenced by fit().

                                                                         {
  // check whether convergence criteria are fulfilled

  Bool_t isConverged = false;
  
  // calculate F, delta(a) and delta(y) already applied
  isConverged = (F < _maxF);

  // Calculate current Chi^2 and delta(S)
  Double_t deltaS = currS - prevS;
  isConverged = isConverged && (TMath::Abs(deltaS) < _maxDeltaS);

  return isConverged;

}
void TKinFitter::countMeasParams ( ) [protected]

Definition at line 186 of file TKinFitter.cc.

References _constraints, _measParticles, and _nParB.

Referenced by addConstraint(), addMeasParticle(), and addMeasParticles().

                                 {
  // count number of measured parameters

  _nParB = 0;
  for (unsigned int indexParticle = 0; indexParticle < _measParticles.size(); indexParticle++) {
    _nParB += _measParticles[indexParticle]->getNPar();
  }
  for (unsigned int indexConstraint = 0; indexConstraint < _constraints.size(); indexConstraint++) {
    _nParB += _constraints[indexConstraint]->getNPar();
  }

}
void TKinFitter::countUnmeasParams ( ) [protected]

Definition at line 199 of file TKinFitter.cc.

References _nParA, and _unmeasParticles.

Referenced by addUnmeasParticle(), and addUnmeasParticles().

                                   {
  // count number of unmeasured parameters

  _nParA = 0;
  for (unsigned int indexParticle = 0; indexParticle < _unmeasParticles.size(); indexParticle++) {
    _nParA += _unmeasParticles[indexParticle]->getNPar();
  }

}
Int_t TKinFitter::fit ( )

Definition at line 309 of file TKinFitter.cc.

References _A, _B, _c, _C32T, _deltaA, _deltaAstar, _deltaY, _deltaYstar, _lambda, _lambdaT, _maxNbIter, _nbIter, _nParA, _status, _V, _VB, _VBinv, _verbosity, applyDeltaA(), applyDeltaY(), applyVFit(), calcA(), calcB(), calcC(), calcC11(), calcC21(), calcC22(), calcC31(), calcC32(), calcC33(), calcDeltaA(), calcDeltaY(), calcLambda(), calcV(), calcVA(), calcVB(), calcVFit(), converged(), getF(), getS(), print(), printMatrix(), resetParams(), and resetStatus().

Referenced by StKinFitter::addKinFitInfo(), TSLToyGen::doToyExperiments(), TtFullHadKinFitter::fit(), TtSemiLepKinFitter::fit(), and CandMassKinFitter::set().

                      {
  // Perform the fit
  // Returns:
  // 0: converged
  // 1: not converged

  resetParams();
  resetStatus();

  _nbIter = 0;
  Bool_t isConverged = false;
  Double_t prevF;
  Double_t currF = getF();
  Double_t prevS;
  Double_t currS = 0.;

  // Calculate covariance matrix V
  calcV();

  // print status
  if ( _verbosity >= 1 ) {
    print();
  }

  do {

    // Reset status to "RUNNING"
    // (if it was not aborted already due to singular covariance matrix)
    if ( _status != -10 ) {
      _status = 10;
    }

    // Calculate matrices
    calcB();
    calcVB();
    if ( _nParA > 0 ) {
      calcA();
      calcVA();
      calcC32();
    }
    calcC31();
    calcC33();
    calcC();

    // Calculate corretion for a, y, and lambda
    if ( _nParA > 0 ){
      calcDeltaA();
    }
    calcDeltaY();
    calcLambda();
   
    if( _verbosity >= 3 ) {
      printMatrix( _A      , "A"      );
      printMatrix( _B      , "B"      );
      printMatrix( _VBinv  , "VBinv"  );
      printMatrix( _VB     , "VB"     );
      printMatrix( _V      , "V"      );
      printMatrix( _deltaY , "deltaY" );
      printMatrix( _deltaA , "deltaA" );
      printMatrix( _C32T   , "C32T"   );
      printMatrix( _c      , "C"      );
    }

    if( _verbosity >= 2 ) {
      print();   
    }

    // Apply calculated corrections to measured and unmeasured particles
    if ( _nParA > 0 ) {
      applyDeltaA();
    }
    applyDeltaY();

    _nbIter++;
    
    //calculate F and S
    prevF = currF;
    currF = getF();
    prevS = currS;
    currS = getS();

    if( TMath::IsNaN(currF) ) {
      edm::LogInfo ("KinFitter") << "The current value of F is NaN. Fit will be aborted.";
      _status = -10;
    }
    if( TMath::IsNaN(currS) ) {
      edm::LogInfo ("KinFitter") << "The current value of S is NaN. Fit will be aborted.";
      _status = -10;
    }

    // Reduce step width if F is not getting smaller
    Int_t nstep = 0;
    while (currF >= prevF) {
      nstep++;
      if (nstep == 10) break;
      if (_nParA > 0) _deltaA -= (0.5) * (_deltaA - _deltaAstar);
      _deltaY -= (0.5) * (_deltaY - _deltaYstar);
      _lambda *= 0.5;
      _lambdaT *= 0.5;
      if (_nParA > 0) applyDeltaA();
      applyDeltaY();
      currF = getF();
      currS = getS();
    }
    
    // Test convergence
    isConverged = converged(currF, prevS, currS);

 
  } while ( (! isConverged) && (_nbIter < _maxNbIter) && (_status != -10) );

  // Calculate covariance matrices
  calcB();
  calcVB();
  
  if ( _nParA > 0 ) {
    calcA();
    calcVA();
    calcC21();
    calcC22();
    calcC32();
  }
  calcC11();
  calcC31();
  calcC33();
  calcVFit();
  applyVFit();
  
  // Set status information
  if (isConverged) {
    _status = 0;
  }
  else if (_status != -10) {
    _status = 1;
  }
  
  // print status
  if ( _verbosity >= 1 ) {
    print();
  }

  return _status;

}
const TMatrixD* TKinFitter::getCovMatrix ( ) [inline]

Definition at line 45 of file TKinFitter.h.

References _V.

{ return &_V; }
const TMatrixD* TKinFitter::getCovMatrixFit ( ) [inline]

Definition at line 47 of file TKinFitter.h.

References _yaVFit.

{ return &_yaVFit; }
Double_t TKinFitter::getF ( )

Definition at line 1095 of file TKinFitter.cc.

References _constraints.

Referenced by TSLToyGen::doToyExperiments(), fit(), and print().

                          {
  // calculate current absolut value of constraints
  // F = Sum[ Abs(f_k( aStar, yStar)) ] 

  Double_t F = 0.;
  for (unsigned int indexConstr = 0; indexConstr < _constraints.size(); indexConstr++) {
    F += TMath::Abs( _constraints[indexConstr]->getCurrentValue() );
  }
  
  return F;

}
Double_t TKinFitter::getMaxDeltaS ( ) [inline]

Definition at line 42 of file TKinFitter.h.

References _maxDeltaS.

{ return _maxDeltaS; }
Double_t TKinFitter::getMaxF ( ) [inline]

Definition at line 44 of file TKinFitter.h.

References _maxF.

Referenced by TSLToyGen::doToyExperiments().

{ return _maxF; }
Int_t TKinFitter::getMaxNumberIter ( ) [inline]

Definition at line 38 of file TKinFitter.h.

References _maxNbIter.

{ return _maxNbIter; }
const TAbsFitParticle* TKinFitter::getMeasParticle ( Int_t  index) [inline]

Definition at line 54 of file TKinFitter.h.

References _measParticles, and getHLTprescales::index.

{ return _measParticles[index]; }
Int_t TKinFitter::getNbIter ( ) [inline]

Definition at line 39 of file TKinFitter.h.

References _nbIter.

Referenced by TSLToyGen::doToyExperiments(), and TopKinFitter::fitNrIter().

{ return _nbIter; }
Int_t TKinFitter::getNDF ( ) [inline]

Definition at line 34 of file TKinFitter.h.

References _constraints, and _nParA.

Referenced by TSLToyGen::doToyExperiments(), TopKinFitter::fitProb(), print(), and CandMassKinFitter::set().

{ return  (_constraints.size() - _nParA); }
Int_t TKinFitter::getNParA ( ) [inline]

Definition at line 35 of file TKinFitter.h.

References _nParA.

{ return _nParA; }
Int_t TKinFitter::getNParB ( ) [inline]

Definition at line 36 of file TKinFitter.h.

References _nParB.

{ return _nParB; }
Double_t TKinFitter::getS ( )

Definition at line 1108 of file TKinFitter.cc.

References _deltaY, _nbIter, _Vinv, and JetComb::kMult.

Referenced by TSLToyGen::doToyExperiments(), fit(), TopKinFitter::fitProb(), TopKinFitter::fitS(), print(), and CandMassKinFitter::set().

                          {
  // calculate current value of Chi2
  // S = deltaYT * V^-1 * deltaY

  Double_t S = 0.;

  if ( _nbIter > 0 ) {
    
    TMatrixD deltaYTVinv(_deltaY, TMatrixD::kTransposeMult, _Vinv);
    TMatrixD S2(deltaYTVinv, TMatrixD::kMult, _deltaY);
    S = S2(0,0);
         
  }

  return S;

}
Int_t TKinFitter::getStatus ( void  ) [inline]
TString TKinFitter::getStatusString ( ) [protected]

Definition at line 1142 of file TKinFitter.cc.

References _status.

Referenced by print().

                                    {

  TString statusstring = "";

  switch ( _status ) {
      
    case -1: {
      statusstring = "NO FIT PERFORMED";
      break;
    }
    case 10: {
      statusstring = "RUNNING";
      break;
    }
    case -10: {
      statusstring = "ABORTED";
      break;
    }
    case 0: {
      statusstring = "CONVERGED";
      break;
    }
    case 1: {
      statusstring = "NOT CONVERGED";
      break;
    }
  }
    
  return statusstring;

}
const TAbsFitParticle* TKinFitter::getUnmeasParticle ( Int_t  index) [inline]

Definition at line 56 of file TKinFitter.h.

References _unmeasParticles, and getHLTprescales::index.

{ return _unmeasParticles[index]; }
Int_t TKinFitter::getVerbosity ( ) [inline]

Definition at line 51 of file TKinFitter.h.

References _verbosity.

{ return _verbosity; }
Int_t TKinFitter::nbConstraints ( ) [inline]

Definition at line 57 of file TKinFitter.h.

References _constraints.

{ return _constraints.size(); }
Int_t TKinFitter::nbMeasParticles ( ) [inline]

Definition at line 53 of file TKinFitter.h.

References _measParticles.

{ return _measParticles.size(); }
Int_t TKinFitter::nbUnmeasParticles ( ) [inline]

Definition at line 55 of file TKinFitter.h.

References _unmeasParticles.

{ return _unmeasParticles.size(); }
void TKinFitter::print ( void  )

Definition at line 1174 of file TKinFitter.cc.

References _constraints, _measParticles, _nbIter, _nParB, _status, _unmeasParticles, _yaVFit, TAbsFitParticle::getCovMatrix(), getF(), TAbsFitParticle::getInfoString(), getNDF(), TAbsFitParticle::getNPar(), TAbsFitParticle::getParCurr(), getS(), getStatusString(), funct::log(), and Gflash::par.

Referenced by fit().

                       {

  edm::LogVerbatim log("KinFitter");
  log << "\n"
      << "\n";
  // Print status of fit
  log << "Status: " << getStatusString()
      << "   F=" << getF() << "   S=" << getS() << "   N=" << _nbIter << "   NDF=" << getNDF() << "\n";
  // Print measured particles
  log << "measured particles: \n";
  Int_t parIndex = 0;
  for (unsigned int iP = 0; iP < _measParticles.size(); iP++) {
    TAbsFitParticle* particle = _measParticles[iP];
    Int_t nParP = particle->getNPar();
    const TMatrixD* par = particle->getParCurr();
    const TMatrixD* covP = particle->getCovMatrix();
    log << std::setw(3) << setiosflags(std::ios::right) << iP;
    log << std::setw(15) << setiosflags(std::ios::right) << particle->GetName();
    log << std::setw(3) << " ";
    for (int iPar = 0; iPar < nParP; iPar++) {
      if (iPar > 0) {
        log << setiosflags(std::ios::right) << std::setw(21) << " ";
      }
      TString colstr = "";
      colstr += parIndex;
      colstr += ":";
      log << std::setw(4) << colstr;
      log << std::setw(2) << " ";   
      log << setiosflags(std::ios::left) << setiosflags(std::ios::scientific) << std::setprecision(3);
      log << std::setw(15) << (*par)(iPar, 0);
      if(_nbIter > 0 && _status < 10) {
        log << std::setw(15) << TMath::Sqrt( _yaVFit(iPar, iPar) );
      } else {
        log << std::setw(15) << " ";
      }
      log << std::setw(15) << TMath::Sqrt( (*covP)(iPar, iPar) );
      log << "\n";
      parIndex++;
    }
    log << particle->getInfoString();
  }
  // Print unmeasured particles
  log << "unmeasured particles: \n";
  parIndex = 0;
  for (unsigned int iP = 0; iP < _unmeasParticles.size(); iP++) {
    TAbsFitParticle* particle = _unmeasParticles[iP];
    Int_t nParP = particle->getNPar();
    const TMatrixD* par = particle->getParCurr();
    log << std::setw(3) << setiosflags(std::ios::right) << iP;
    log << std::setw(15) << particle->GetName();
    log << std::setw(3) << " ";
    for (int iPar = 0; iPar < nParP; iPar++) {
      if (iPar > 0) {
        log << setiosflags(std::ios::right) << std::setw(21) << " ";
      }
      TString colstr = "";
      colstr += parIndex;
      colstr += ":";
      log << std::setw(4) << colstr;
      log << std::setw(2) << " ";
      log << setiosflags(std::ios::left) << setiosflags(std::ios::scientific) << std::setprecision(3);
      log << std::setw(15) << (*par)(iPar, 0);
      if(_nbIter > 0 && _status < 10) {
        log << std::setw(15) << TMath::Sqrt( _yaVFit(iPar+_nParB, iPar+_nParB) );
      } else {
        log << std::setw(15) << " ";
      }
      log << "\n";
      parIndex++;
    }
    log << particle->getInfoString();
  }
  log << "\n";
  // Print constraints
  log << "constraints: \n";
  for (unsigned int indexConstr = 0; indexConstr < _constraints.size(); indexConstr++) {
    log << _constraints[indexConstr]->getInfoString();
  }
  log << "\n";

}
void TKinFitter::printMatrix ( const TMatrixD &  matrix,
const TString  name = "" 
) [protected]

Definition at line 1256 of file TKinFitter.cc.

References i, funct::log(), and siStripFEDMonitor_P5_cff::Min.

Referenced by calcB(), calcC(), and fit().

                                                                       {
  // produce a tabular printout for matrices
  // this function is a modified version of Root's TMatrixTBase<Element>::Print method
  // which could not be used together with the MessageLogger

  if (!matrix.IsValid()) {
    edm::LogWarning ("InvalidMatrix") << "Matrix " << name << " is invalid.";
    return;
  }

  edm::LogVerbatim log("KinFitter");

  const Int_t nCols  = matrix.GetNcols();
  const Int_t nRows  = matrix.GetNrows();
  const Int_t colsPerSheet = 5;
  char topbar[100];
  Int_t nk = 6+13*TMath::Min(colsPerSheet, nCols);
  for(Int_t i = 0; i < nk; i++) topbar[i] = '-';
  topbar[nk] = 0;

  Int_t sw = (70-name.Length())/2;
 
  log << std::setfill('=') << std::setw(sw) << "=  " << name << std::setw(sw) << std::left << "  ="  << "\n"
      << std::setfill(' ') << std::right << "\n";

  log << nRows << "x" << nCols << " matrix is as follows \n";

  for (Int_t iSheet = 0; iSheet < nCols; iSheet += colsPerSheet) {
    log << "\n"
        << "     |";
    for (Int_t iCol = iSheet; iCol < iSheet+colsPerSheet && iCol < nCols; iCol++)
      log << std::setw(8) << iCol << "    |";
    log << "\n"
        << topbar << " \n";
    for(Int_t iRow = 0; iRow < nRows; iRow++) {
      log << std::setw(4) << iRow << " |";
      for (Int_t iCol = iSheet; iCol < iSheet+colsPerSheet && iCol < nCols; iCol++)
        log << std::setw(12) << matrix(iRow, iCol) << " ";
      log << "\n";
    }
  }

}
void TKinFitter::reset ( void  )

Definition at line 105 of file TKinFitter.cc.

References _A, _AT, _B, _BT, _c, _C11, _C11T, _C21, _C21T, _C22, _C22T, _C31, _C31T, _C32, _C32T, _C33, _C33T, _constraints, _deltaA, _deltaAstar, _deltaY, _deltaYstar, _lambda, _lambdaT, _lambdaVFit, _maxDeltaS, _maxF, _maxNbIter, _measParticles, _nbIter, _nParA, _nParB, _status, _unmeasParticles, _V, _VA, _VAinv, _VB, _VBinv, _verbosity, _Vinv, and _yaVFit.

Referenced by TKinFitter().

                       {
  // reset all internal parameters of the fitter

  _status = -1;
  _nbIter = 0;
  _nParA = 0;
  _nParB = 0;
  _verbosity = 1;
  _A.ResizeTo(1, 1);
  _AT.ResizeTo(1, 1);
  _B.ResizeTo(1, 1);
  _BT.ResizeTo(1, 1);
  _V.ResizeTo(1, 1);
  _Vinv.ResizeTo(1, 1);
  _VB.ResizeTo(1, 1);
  _VBinv.ResizeTo(1, 1);
  _VA.ResizeTo(1, 1);
  _VAinv.ResizeTo(1, 1);
  _c.ResizeTo(1, 1);
  _C11.ResizeTo(1, 1);
  _C11T.ResizeTo(1, 1);
  _C21.ResizeTo(1, 1);
  _C21T.ResizeTo(1, 1);
  _C22.ResizeTo(1, 1);
  _C22T.ResizeTo(1, 1);
  _C31.ResizeTo(1, 1);
  _C31T.ResizeTo(1, 1);
  _C32.ResizeTo(1, 1);
  _C32T.ResizeTo(1, 1);
  _C33.ResizeTo(1, 1);
  _C33T.ResizeTo(1, 1);
  _deltaA.ResizeTo(1, 1);
  _deltaY.ResizeTo(1, 1);
  _deltaAstar.ResizeTo(1, 1);
  _deltaYstar.ResizeTo(1, 1);
  _lambda.ResizeTo(1, 1);
  _lambdaT.ResizeTo(1, 1);
  _lambdaVFit.ResizeTo(1, 1);
  _yaVFit.ResizeTo(1, 1);

  _constraints.clear();
  _measParticles.clear();
  _unmeasParticles.clear();

  // Set to default values
  _maxNbIter = 50;
  _maxDeltaS = 5e-3;
  _maxF =  1e-4;

}
void TKinFitter::resetParams ( ) [protected]

Definition at line 164 of file TKinFitter.cc.

References _constraints, _measParticles, _unmeasParticles, TAbsFitParticle::reset(), and TAbsFitConstraint::reset().

Referenced by fit().

                             {
  // reset all particles to their initial parameters

  for (unsigned int iP = 0; iP < _measParticles.size(); iP++) {
    TAbsFitParticle* particle = _measParticles[iP];
    particle->reset();
  }
  for (unsigned int iP = 0; iP < _unmeasParticles.size(); iP++) {
    TAbsFitParticle* particle = _unmeasParticles[iP];
    particle->reset();
  }
  for (unsigned int iC = 0; iC < _constraints.size(); iC++) {
    TAbsFitConstraint* constraint = _constraints[iC];
    constraint->reset();
  }

}
void TKinFitter::resetStatus ( )

Definition at line 156 of file TKinFitter.cc.

References _nbIter, and _status.

Referenced by addConstraint(), addMeasParticle(), addMeasParticles(), addUnmeasParticle(), addUnmeasParticles(), and fit().

                             {
  // reset status of the fit

  _status = -1;
  _nbIter = 0;

}
void TKinFitter::setCovMatrix ( TMatrixD &  V)

Definition at line 454 of file TKinFitter.cc.

References _nParB, and _V.

                                           {
  // Set the covariance matrix of the measured particles

  if ( (V.GetNrows() != _nParB) || (V.GetNcols() != _nParB) ) {
    edm::LogError ("WrongMatrixSize")
      << "Covariance matrix of measured particles needs to be a " << _nParB << "x" << _nParB << " matrix.";
  } else {
    _V.ResizeTo( V );
    _V = V;
  }

}
void TKinFitter::setMaxDeltaS ( Double_t  maxDeltaS) [inline]

Definition at line 41 of file TKinFitter.h.

References _maxDeltaS.

Referenced by TSLToyGen::doToyExperiments(), CandMassKinFitter::set(), and TopKinFitter::TopKinFitter().

{ _maxDeltaS = TMath::Abs( maxDeltaS ); }
void TKinFitter::setMaxF ( Double_t  maxF) [inline]

Definition at line 43 of file TKinFitter.h.

References _maxF.

Referenced by TSLToyGen::doToyExperiments(), CandMassKinFitter::set(), and TopKinFitter::TopKinFitter().

{ _maxF = TMath::Abs( maxF ); }
void TKinFitter::setMaxNbIter ( Int_t  maxNbIter) [inline]

Definition at line 37 of file TKinFitter.h.

References _maxNbIter.

Referenced by TSLToyGen::doToyExperiments(), CandMassKinFitter::set(), and TopKinFitter::TopKinFitter().

{ _maxNbIter = maxNbIter; }
void TKinFitter::setVerbosity ( Int_t  verbosity = 1)

Definition at line 294 of file TKinFitter.cc.

References _verbosity, and verbosity.

Referenced by TSLToyGen::doToyExperiments(), CandMassKinFitter::set(), and TopKinFitter::TopKinFitter().

                                               { 
  // Set verbosity of the fitter:
  // 0: quiet
  // 1: print information before and after the fit
  // 2: print output for every iteration of the fit
  // 3: print debug information


  if ( verbosity < 0 ) verbosity = 0;
  if ( verbosity > 3 ) verbosity = 3;
  _verbosity = verbosity;

}

Member Data Documentation

TMatrixD TKinFitter::_A [private]

Definition at line 103 of file TKinFitter.h.

Referenced by calcA(), calcC(), calcC11(), calcC31(), calcC32(), calcC33(), calcVA(), fit(), and reset().

TMatrixD TKinFitter::_AT [private]

Definition at line 104 of file TKinFitter.h.

Referenced by calcA(), calcC11(), calcC21(), calcC31(), calcC33(), calcVA(), and reset().

TMatrixD TKinFitter::_B [private]

Definition at line 105 of file TKinFitter.h.

Referenced by calcB(), calcC(), calcC11(), calcC21(), calcC31(), calcVB(), fit(), and reset().

TMatrixD TKinFitter::_BT [private]

Definition at line 106 of file TKinFitter.h.

Referenced by calcB(), calcC11(), calcVB(), and reset().

TMatrixD TKinFitter::_c [private]

Definition at line 113 of file TKinFitter.h.

Referenced by calcC(), calcDeltaA(), calcDeltaY(), calcLambda(), fit(), and reset().

TMatrixD TKinFitter::_C11 [private]

Definition at line 115 of file TKinFitter.h.

Referenced by calcC11(), calcVFit(), and reset().

TMatrixD TKinFitter::_C11T [private]

Definition at line 116 of file TKinFitter.h.

Referenced by calcC11(), and reset().

TMatrixD TKinFitter::_C21 [private]

Definition at line 117 of file TKinFitter.h.

Referenced by calcC21(), calcVFit(), and reset().

TMatrixD TKinFitter::_C21T [private]

Definition at line 118 of file TKinFitter.h.

Referenced by calcC21(), calcVFit(), and reset().

TMatrixD TKinFitter::_C22 [private]

Definition at line 119 of file TKinFitter.h.

Referenced by calcC22(), calcVFit(), and reset().

TMatrixD TKinFitter::_C22T [private]

Definition at line 120 of file TKinFitter.h.

Referenced by calcC22(), and reset().

TMatrixD TKinFitter::_C31 [private]

Definition at line 121 of file TKinFitter.h.

Referenced by calcC31(), and reset().

TMatrixD TKinFitter::_C31T [private]

Definition at line 122 of file TKinFitter.h.

Referenced by calcC31(), calcDeltaY(), and reset().

TMatrixD TKinFitter::_C32 [private]

Definition at line 123 of file TKinFitter.h.

Referenced by calcC32(), and reset().

TMatrixD TKinFitter::_C32T [private]

Definition at line 124 of file TKinFitter.h.

Referenced by calcC32(), calcDeltaA(), fit(), and reset().

TMatrixD TKinFitter::_C33 [private]

Definition at line 125 of file TKinFitter.h.

Referenced by calcC33(), calcLambda(), calcVFit(), and reset().

TMatrixD TKinFitter::_C33T [private]

Definition at line 126 of file TKinFitter.h.

Referenced by calcC33(), and reset().

TMatrixD TKinFitter::_deltaA [private]

Definition at line 128 of file TKinFitter.h.

Referenced by applyDeltaA(), calcDeltaA(), fit(), and reset().

TMatrixD TKinFitter::_deltaAstar [private]

Definition at line 130 of file TKinFitter.h.

Referenced by calcDeltaA(), fit(), and reset().

TMatrixD TKinFitter::_deltaY [private]

Definition at line 129 of file TKinFitter.h.

Referenced by applyDeltaY(), calcDeltaY(), fit(), getS(), and reset().

TMatrixD TKinFitter::_deltaYstar [private]

Definition at line 131 of file TKinFitter.h.

Referenced by calcDeltaY(), fit(), and reset().

TMatrixD TKinFitter::_lambda [private]

Definition at line 132 of file TKinFitter.h.

Referenced by calcLambda(), fit(), and reset().

TMatrixD TKinFitter::_lambdaT [private]

Definition at line 133 of file TKinFitter.h.

Referenced by calcLambda(), fit(), and reset().

TMatrixD TKinFitter::_lambdaVFit [private]

Definition at line 135 of file TKinFitter.h.

Referenced by calcVFit(), and reset().

Double_t TKinFitter::_maxDeltaS [private]

Definition at line 99 of file TKinFitter.h.

Referenced by converged(), getMaxDeltaS(), reset(), and setMaxDeltaS().

Double_t TKinFitter::_maxF [private]

Definition at line 100 of file TKinFitter.h.

Referenced by converged(), getMaxF(), reset(), and setMaxF().

Int_t TKinFitter::_maxNbIter [private]

Definition at line 98 of file TKinFitter.h.

Referenced by fit(), getMaxNumberIter(), reset(), and setMaxNbIter().

Int_t TKinFitter::_nbIter [private]

Definition at line 146 of file TKinFitter.h.

Referenced by calcDeltaA(), calcDeltaY(), fit(), getNbIter(), getS(), print(), reset(), and resetStatus().

Int_t TKinFitter::_nParA [private]
Int_t TKinFitter::_nParB [private]

Definition at line 139 of file TKinFitter.h.

Referenced by calcB(), calcC(), calcV(), countMeasParams(), getNParB(), print(), reset(), and setCovMatrix().

Int_t TKinFitter::_status [private]

Definition at line 145 of file TKinFitter.h.

Referenced by calcV(), calcVA(), calcVB(), fit(), getStatus(), getStatusString(), print(), reset(), and resetStatus().

TMatrixD TKinFitter::_V [private]

Definition at line 107 of file TKinFitter.h.

Referenced by calcC11(), calcC21(), calcC31(), calcV(), calcVB(), fit(), getCovMatrix(), reset(), and setCovMatrix().

TMatrixD TKinFitter::_VA [private]

Definition at line 111 of file TKinFitter.h.

Referenced by calcVA(), and reset().

TMatrixD TKinFitter::_VAinv [private]

Definition at line 112 of file TKinFitter.h.

Referenced by calcC11(), calcC21(), calcC22(), calcC31(), calcC32(), calcC33(), calcVA(), and reset().

TMatrixD TKinFitter::_VB [private]

Definition at line 109 of file TKinFitter.h.

Referenced by calcC11(), calcC21(), calcC31(), calcC32(), calcC33(), calcVA(), calcVB(), fit(), and reset().

TMatrixD TKinFitter::_VBinv [private]

Definition at line 110 of file TKinFitter.h.

Referenced by calcVB(), fit(), and reset().

Int_t TKinFitter::_verbosity [private]

Definition at line 101 of file TKinFitter.h.

Referenced by calcB(), calcC(), fit(), getVerbosity(), reset(), and setVerbosity().

TMatrixD TKinFitter::_Vinv [private]

Definition at line 108 of file TKinFitter.h.

Referenced by calcV(), getS(), and reset().

TMatrixD TKinFitter::_yaVFit [private]

Definition at line 136 of file TKinFitter.h.

Referenced by applyVFit(), calcVFit(), getCovMatrixFit(), print(), and reset().