File indexing completed on 2024-04-06 12:23:36
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #include <iostream>
0018 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0019 #include "PhysicsTools/KinFitter/interface/TFitParticleECart.h"
0020
0021
0022
0023
0024 TFitParticleECart::TFitParticleECart() : TAbsFitParticle() { init(nullptr, nullptr); }
0025
0026 TFitParticleECart::TFitParticleECart(const TFitParticleECart& fitParticle)
0027 : TAbsFitParticle(fitParticle.GetName(), fitParticle.GetTitle()) {
0028 _nPar = fitParticle._nPar;
0029 _u1 = fitParticle._u1;
0030 _u2 = fitParticle._u2;
0031 _u3 = fitParticle._u3;
0032 _covMatrix.ResizeTo(fitParticle._covMatrix);
0033 _covMatrix = fitParticle._covMatrix;
0034 _iniparameters.ResizeTo(fitParticle._iniparameters);
0035 _iniparameters = fitParticle._iniparameters;
0036 _parameters.ResizeTo(fitParticle._parameters);
0037 _parameters = fitParticle._parameters;
0038 _pini = fitParticle._pini;
0039 _pcurr = fitParticle._pcurr;
0040 }
0041
0042 TFitParticleECart::TFitParticleECart(TLorentzVector* pini, const TMatrixD* theCovMatrix) : TAbsFitParticle() {
0043 init(pini, theCovMatrix);
0044 }
0045
0046 TFitParticleECart::TFitParticleECart(const TString& name,
0047 const TString& title,
0048 TLorentzVector* pini,
0049 const TMatrixD* theCovMatrix)
0050 : TAbsFitParticle(name, title) {
0051 init(pini, theCovMatrix);
0052 }
0053
0054 TAbsFitParticle* TFitParticleECart::clone(const TString& newname) const {
0055
0056
0057 TAbsFitParticle* myclone = new TFitParticleECart(*this);
0058 if (newname.Length() > 0)
0059 myclone->SetName(newname);
0060 return myclone;
0061 }
0062
0063
0064
0065
0066 TFitParticleECart::~TFitParticleECart() {}
0067
0068
0069
0070
0071 void TFitParticleECart::init(TLorentzVector* pini, const TMatrixD* theCovMatrix) {
0072 _nPar = 4;
0073 setIni4Vec(pini);
0074 setCovMatrix(theCovMatrix);
0075 }
0076
0077 TLorentzVector* TFitParticleECart::calc4Vec(const TMatrixD* params) {
0078
0079
0080
0081 if (params == nullptr) {
0082 return nullptr;
0083 }
0084
0085 if (params->GetNcols() != 1 || params->GetNrows() != _nPar) {
0086 edm::LogError("WrongMatrixSize") << GetName() << "::calc4Vec - Parameter matrix has wrong size.";
0087 return nullptr;
0088 }
0089
0090 Double_t X = (*params)(0, 0);
0091 Double_t Y = (*params)(1, 0);
0092 Double_t Z = (*params)(2, 0);
0093 Double_t E = (*params)(3, 0);
0094
0095 TLorentzVector* vec = new TLorentzVector(X, Y, Z, E);
0096 return vec;
0097 }
0098
0099 void TFitParticleECart::setIni4Vec(const TLorentzVector* pini) {
0100
0101
0102
0103 if (pini == nullptr) {
0104 _u1.SetXYZ(0., 0., 0.);
0105 _u3.SetXYZ(0., 0., 0.);
0106 _u2.SetXYZ(0., 0., 0.);
0107 _pini.SetXYZT(0., 0., 0., 0.);
0108 _pcurr = _pini;
0109
0110 _iniparameters.ResizeTo(_nPar, 1);
0111 _iniparameters(0, 0) = 0;
0112 _iniparameters(1, 0) = 0;
0113 _iniparameters(2, 0) = 0;
0114 _iniparameters(3, 0) = 0.;
0115
0116 _parameters.ResizeTo(_nPar, 1);
0117 _parameters = _iniparameters;
0118
0119 } else {
0120 _pini = (*pini);
0121 _pcurr = _pini;
0122
0123 _u1.SetXYZ(1., 0., 0.);
0124 _u2.SetXYZ(0., 1., 0.);
0125 _u3.SetXYZ(0., 0., 1.);
0126
0127 _iniparameters.ResizeTo(_nPar, 1);
0128 _iniparameters(0, 0) = _pini.X();
0129 _iniparameters(1, 0) = _pini.Y();
0130 _iniparameters(2, 0) = _pini.Z();
0131 _iniparameters(3, 0) = _pini.E();
0132 _parameters.ResizeTo(_nPar, 1);
0133 _parameters = _iniparameters;
0134 }
0135 }
0136
0137 TMatrixD* TFitParticleECart::getDerivative() {
0138
0139
0140
0141
0142 TMatrixD* DerivativeMatrix = new TMatrixD(4, 4);
0143 (*DerivativeMatrix) *= 0.;
0144
0145
0146 (*DerivativeMatrix)(0, 0) = 1.;
0147 (*DerivativeMatrix)(1, 0) = 0.;
0148 (*DerivativeMatrix)(2, 0) = 0.;
0149 (*DerivativeMatrix)(3, 0) = 0.;
0150
0151
0152 (*DerivativeMatrix)(0, 1) = 0;
0153 (*DerivativeMatrix)(1, 1) = 1;
0154 (*DerivativeMatrix)(2, 1) = 0;
0155 (*DerivativeMatrix)(3, 1) = 0.;
0156
0157
0158 (*DerivativeMatrix)(0, 2) = 0.;
0159 (*DerivativeMatrix)(1, 2) = 0.;
0160 (*DerivativeMatrix)(2, 2) = 1.;
0161 (*DerivativeMatrix)(3, 2) = 0.;
0162
0163
0164 (*DerivativeMatrix)(0, 3) = 0.;
0165 (*DerivativeMatrix)(1, 3) = 0.;
0166 (*DerivativeMatrix)(2, 3) = 0.;
0167 (*DerivativeMatrix)(3, 3) = 1.;
0168
0169 return DerivativeMatrix;
0170 }
0171
0172 TMatrixD* TFitParticleECart::transform(const TLorentzVector& vec) {
0173
0174
0175
0176 TMatrixD* tparams = new TMatrixD(_nPar, 1);
0177 (*tparams)(0, 0) = vec.X();
0178 (*tparams)(1, 0) = vec.Y();
0179 (*tparams)(2, 0) = vec.Z();
0180 (*tparams)(3, 0) = vec.E();
0181
0182 return tparams;
0183 }