/** CbmLitWeightCalculatorTukey.h *@author A.Lebedev *@since 2009 ** ** **/ #include "CbmLitWeightCalculatorTukey.h" #include "CbmLitHit.h" //#include "CbmLitStripHit.h" //#include "CbmLitPixelHit.h" #include "CbmLitMath.h" //#include #include CbmLitWeightCalculatorTukey::CbmLitWeightCalculatorTukey() { } CbmLitWeightCalculatorTukey::~CbmLitWeightCalculatorTukey() { } LitStatus CbmLitWeightCalculatorTukey::Initialize() { return kLITSUCCESS; } LitStatus CbmLitWeightCalculatorTukey::Finalize() { return kLITSUCCESS; } LitStatus CbmLitWeightCalculatorTukey::DoCalculate( const CbmLitTrackParam* par, HitPtrIterator itBegin, HitPtrIterator itEnd, myf T) { for(HitPtrIterator it = itBegin; it != itEnd; it++) { if ((*it)->IsOutlier()) continue; if (TukeyWeight(par, *it, T) == kLITERROR) return kLITERROR; } if (Normalize(itBegin, itEnd) == kLITERROR) return kLITERROR; return kLITSUCCESS; } LitStatus CbmLitWeightCalculatorTukey::DoCalculate( const CbmLitTrackParam* par, HitPtrVector& hits, myf T) { return DoCalculate(par, hits.begin(), hits.end(), T); } LitStatus CbmLitWeightCalculatorTukey::TukeyWeight( const CbmLitTrackParam* par, CbmLitHit* hit, myf T) const { myf chiSq = ChiSq(par, hit); if (chiSq < T){ myf t = 1 - (chiSq / T); hit->SetW(t * t); } else hit->SetW(0.); return kLITSUCCESS; } LitStatus CbmLitWeightCalculatorTukey::Normalize( HitPtrIterator itBegin, HitPtrIterator itEnd) const { myf sumW = 0.; for(HitPtrIterator it = itBegin; it != itEnd; it++) { if ((*it)->IsOutlier()) continue; sumW += (*it)->GetW(); } if (sumW == 0.) { return kLITERROR; } else { for(HitPtrIterator it = itBegin; it != itEnd; it++) { if ((*it)->IsOutlier()) continue; (*it)->SetW((*it)->GetW() / sumW); } } return kLITSUCCESS; }