#include "hkalfilt2d.h"
ClassImp (HKalFilt2d)
HKalFilt2d::HKalFilt2d(Int_t n, Int_t measDim, Int_t stateDim,
HMdcTrackGField *fMap, Double_t fpol)
: HKalIFilt(n, measDim, stateDim, fMap, fpol) {
setHitType(Kalman::kSegHit);
}
Bool_t HKalFilt2d::calcMeasVecFromState(TVectorD &projMeasVec, const HKalTrackSite *site,
Kalman::kalFilterTypes stateType, Kalman::coordSys sys,
Int_t iHit) const {
#if kalDebug > 0
Int_t mdim = getMeasDim();
if(projMeasVec.GetNrows() != mdim) {
Warning("calcMeasVecFromState()", Form("Dimension of measurement vector (%i) does not match that of function parameter (%i).", mdim, projMeasVec.GetNrows()));
projMeasVec.ResizeTo(mdim);
}
if(mdim != 2) {
Error("calcMeasVecFromState()", Form("Dimension of measurement vector is %i. Expected 2 for segment hits.", mdim));
return kFALSE;
}
#endif
const TVectorD &sv = site->getStateVec(stateType);
projMeasVec(0) = sv(kIdxX0);
projMeasVec(1) = sv(kIdxY0);
return kTRUE;
}
Bool_t HKalFilt2d::calcProjector(Int_t iSite) const {
HKalTrackSite *site = getSite(iSite);
if(!site) {
return kFALSE;
}
Int_t mdim = getMeasDim();
Int_t sdim = getStateDim();
#if kalDebug > 0
if(getHitType() != Kalman::kSegHit) {
}
if(mdim != 2) {
Error("calcProjector()",
Form("Dimension of measurement vector is %i. Expected 2 for segment hits.", mdim));
return kFALSE;
}
if(sdim < Kalman::kIdxX0 || sdim < Kalman::kIdxY0) {
Error("calcProjector()",
Form("Dimension of state vector is %i. Expected at least %i.", sdim, TMath::Max(kIdxX0, kIdxY0)));
return kFALSE;
}
#endif
TMatrixD fProj(mdim, sdim);
fProj.Zero();
fProj(0, kIdxX0) = 1.;
fProj(1, kIdxY0) = 1.;
site->setStateProjMat(Kalman::kFiltered, fProj);
return kTRUE;
}