Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "PhysicsTools/KinFitter/interface/TFitConstraintEp.h"
00014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00015 #include <iostream>
00016 #include <iomanip>
00017 #include "TClass.h"
00018
00019
00020
00021
00022
00023
00024
00025 TFitConstraintEp::TFitConstraintEp()
00026 :TAbsFitConstraint()
00027 ,_particles(0)
00028 ,_constraint(0.)
00029 ,_component(TFitConstraintEp::pX)
00030 {}
00031
00032 TFitConstraintEp::TFitConstraintEp(const TString &name, const TString &title,
00033 TFitConstraintEp::component thecomponent,
00034 Double_t constraint)
00035 :TAbsFitConstraint(name, title)
00036 ,_constraint(constraint)
00037 ,_component(thecomponent)
00038 {
00039 }
00040
00041 TFitConstraintEp::TFitConstraintEp(std::vector<TAbsFitParticle*>* particles,
00042 TFitConstraintEp::component thecomponent,
00043 Double_t constraint)
00044 :TAbsFitConstraint()
00045 ,_particles(0)
00046 ,_constraint(constraint)
00047 ,_component(thecomponent)
00048 {
00049
00050
00051
00052
00053
00054
00055
00056
00057 if (particles) {
00058 _particles = (*particles);
00059 }
00060 }
00061
00062 TFitConstraintEp::TFitConstraintEp(const TString &name, const TString &title,
00063 std::vector<TAbsFitParticle*>* particles,
00064 TFitConstraintEp::component thecomponent,
00065 Double_t constraint)
00066 :TAbsFitConstraint(name, title)
00067 ,_particles(0)
00068 ,_constraint(constraint)
00069 ,_component(thecomponent)
00070 {
00071
00072
00073
00074
00075
00076
00077
00078
00079 if (particles) {
00080 _particles = (*particles);
00081 }
00082 }
00083
00084
00085
00086
00087 TFitConstraintEp::~TFitConstraintEp() {
00088
00089 }
00090
00091 void TFitConstraintEp::addParticle( TAbsFitParticle* particle ) {
00092
00093
00094 _particles.push_back( particle );
00095
00096 }
00097
00098 void TFitConstraintEp::addParticles( TAbsFitParticle* p1, TAbsFitParticle* p2, TAbsFitParticle* p3, TAbsFitParticle* p4,
00099 TAbsFitParticle* p5, TAbsFitParticle* p6, TAbsFitParticle* p7, TAbsFitParticle* p8,
00100 TAbsFitParticle* p9, TAbsFitParticle* p10) {
00101
00102
00103 if (p1) addParticle( p1 );
00104 if (p2) addParticle( p2 );
00105 if (p3) addParticle( p3 );
00106 if (p4) addParticle( p4 );
00107 if (p5) addParticle( p5 );
00108 if (p6) addParticle( p6 );
00109 if (p7) addParticle( p7 );
00110 if (p8) addParticle( p8 );
00111 if (p9) addParticle( p9 );
00112 if (p10) addParticle( p10 );
00113
00114 }
00115
00116
00117
00118
00119 TMatrixD* TFitConstraintEp::getDerivative( TAbsFitParticle* particle ) {
00120
00121
00122
00123 TMatrixD* DerivativeMatrix = new TMatrixD(1,4);
00124 (*DerivativeMatrix) *= 0.;
00125 (*DerivativeMatrix)(0,(int) _component) = 1.;
00126 return DerivativeMatrix;
00127 }
00128
00129
00130 Double_t TFitConstraintEp::getInitValue() {
00131
00132
00133 Double_t InitValue(0) ;
00134 UInt_t Npart = _particles.size();
00135 for (unsigned int i=0;i<Npart;i++) {
00136 const TLorentzVector* FourVec = _particles[i]->getIni4Vec();
00137 InitValue += (*FourVec)[(int) _component];
00138 }
00139 InitValue -= _constraint;
00140 return InitValue;
00141 }
00142
00143 Double_t TFitConstraintEp::getCurrentValue() {
00144
00145
00146 Double_t CurrentValue(0);
00147 UInt_t Npart = _particles.size();
00148 for (unsigned int i=0;i<Npart;i++) {
00149 const TLorentzVector* FourVec = _particles[i]->getCurr4Vec();
00150 CurrentValue += (*FourVec)[(int) _component];
00151 }
00152 CurrentValue -= _constraint;
00153 return CurrentValue;
00154 }
00155
00156 TString TFitConstraintEp::getInfoString() {
00157
00158
00159 std::stringstream info;
00160 info << std::scientific << std::setprecision(6);
00161
00162 info << "__________________________" << std::endl
00163 << std::endl;
00164 info << "OBJ: " << IsA()->GetName() << "\t" << GetName() << "\t" << GetTitle() << std::endl;
00165
00166 info << "initial value: " << getInitValue() << std::endl;
00167 info << "current value: " << getCurrentValue() << std::endl;
00168 info << "component: " << _component << std::endl;
00169 info << "constraint: " << _constraint << std::endl;
00170
00171 return info.str();
00172
00173 }
00174
00175 void TFitConstraintEp::print() {
00176
00177
00178 edm::LogVerbatim("KinFitter") << this->getInfoString();
00179
00180 }