diff --git a/kalman/MpdKalmanHit.cxx b/kalman/MpdKalmanHit.cxx index 210829422d7c89f2fa18ca7e4e22d0d0a856b9cf..e2a2a2e658403de14326aea3355fe0af02a1f444 100644 --- a/kalman/MpdKalmanHit.cxx +++ b/kalman/MpdKalmanHit.cxx @@ -16,7 +16,8 @@ MpdKalmanHit::MpdKalmanHit() fHitType(kFixedP), fNofDim(2), fSignal(0.), - fDist(0.) + fDist(0.), + fEdge(99.) { /// Default constructor @@ -26,7 +27,7 @@ MpdKalmanHit::MpdKalmanHit() //__________________________________________________________________________ MpdKalmanHit::MpdKalmanHit(Int_t detID, Int_t nDim, HitType hitType, Double_t *meas, Double_t *err, - Double_t *cosSin, Double_t signal, Double_t dist, Int_t index) + Double_t *cosSin, Double_t signal, Double_t dist, Int_t index, Double_t edge) : TObject(), fDetectorID(detID), fFlag(1), @@ -35,7 +36,8 @@ MpdKalmanHit::MpdKalmanHit(Int_t detID, Int_t nDim, HitType hitType, Double_t *m fHitType(hitType), fNofDim(nDim), fSignal(signal), - fDist(dist) + fDist(dist), + fEdge(edge) { /// Constructor @@ -57,7 +59,8 @@ MpdKalmanHit::MpdKalmanHit (const MpdKalmanHit& hit) fHitType(hit.fHitType), fNofDim(hit.fNofDim), fSignal(hit.fSignal), - fDist(hit.fDist) + fDist(hit.fDist), + fEdge(hit.fEdge) { ///copy constructor diff --git a/kalman/MpdKalmanHit.h b/kalman/MpdKalmanHit.h index 16733420ec4d6218bd674933bca02cdd9d8564be..32905bf39258d4e84ff96241fc53af5e2207e007 100644 --- a/kalman/MpdKalmanHit.h +++ b/kalman/MpdKalmanHit.h @@ -20,7 +20,7 @@ class MpdKalmanHit : public TObject public: MpdKalmanHit(); ///< Default ctor - MpdKalmanHit(Int_t detID, Int_t nDim, HitType hitType, Double_t *meas, Double_t *err, Double_t *cosSin, Double_t signal, Double_t dist, Int_t index); ///< Ctor + MpdKalmanHit(Int_t detID, Int_t nDim, HitType hitType, Double_t *meas, Double_t *err, Double_t *cosSin, Double_t signal, Double_t dist, Int_t index, Double_t edge = 99.); ///< Ctor MpdKalmanHit (const MpdKalmanHit& hit); ///< copy constructor virtual ~MpdKalmanHit(); ///< Destructor Int_t GetDetectorID() const { return fDetectorID; } ///< get detector ID @@ -39,6 +39,7 @@ class MpdKalmanHit : public TObject Double_t GetSignal() const { return fSignal; } ///< Signal value Double_t GetDist() const { return fDist; } ///< Distance to interaction point Double_t GetPos() const; ///< Distance to interaction point + Double_t GetEdge() const { return fEdge; } ///< Distance to sector boundary //Double_t GetXY(Int_t indx) const { return fXY[indx]; } ///< get wire X or Y void SetDetectorID(Int_t detID) { fDetectorID = detID; } ///< set detector ID @@ -54,6 +55,7 @@ class MpdKalmanHit : public TObject void SetDist(Double_t dist) { fDist = dist; } ///< set distance void SetPos(Double_t pos) { fDist = pos; } ///< set distance void SetIndex(Int_t indx); ///< Add index of detector hit + void SetEdge(Double_t edge) { fEdge = edge; } ///< set distance to sector boundary Bool_t IsSortable() const { return kTRUE; } Int_t Compare(const TObject* hit) const; ///< sort in descending order in detector ID @@ -74,8 +76,9 @@ class MpdKalmanHit : public TObject Double32_t fCosSin[2]; ///< rotation factors (for stereo measurements) Double32_t fSignal; ///< signal Double32_t fDist; ///< distance to interaction point + Double32_t fEdge; ///< distance to sector boundary //Double_t fXY[2]; ///< X and Y of some point on the wire (for stereo measurements) - ClassDef(MpdKalmanHit,3); + ClassDef(MpdKalmanHit,4); }; #endif diff --git a/lhetrack/MpdTpcKalmanFilter.cxx b/lhetrack/MpdTpcKalmanFilter.cxx index ab065ded738436453ebc10db78d72920ac84b926..525c9a7d3984009b989d3c20750f1dc4fa2a47d5 100644 --- a/lhetrack/MpdTpcKalmanFilter.cxx +++ b/lhetrack/MpdTpcKalmanFilter.cxx @@ -1039,8 +1039,12 @@ void MpdTpcKalmanFilter::MakeKalmanHitsModul() //TpcPadID padIDobj = TpcPadID::numberToPadID(padID); //padID = padIDobj.sector(); padID = fSecGeo->Sector(padID); + Double_t xsec = (hit->GetLocalY() + fSecGeo->GetMinY()) * TMath::Tan(fSecGeo->Dphi()/2); + Double_t xloc = hit->GetLocalX(); Double_t edge = 0.0; // distance to sector boundary + if (xloc < 0) edge = xloc + xsec; + else edge = xloc - xsec; MpdKalmanHit *hitK = new ((*fKHits)[nKh++]) - MpdKalmanHit(lay*1000000+padID, 2, MpdKalmanHit::kFixedP, meas, err, cossin, hit->GetEnergyLoss()/hit->GetStep(), hit->GetLocalY(), j); + MpdKalmanHit(lay*1000000+padID, 2, MpdKalmanHit::kFixedP, meas, err, cossin, hit->GetEnergyLoss()/hit->GetStep(), hit->GetLocalY(), j, edge); hitK->SetLength(hit->GetLength()); //hitK->SetDedx (hit->GetEdep()/hit->GetStep()); //MpdKalmanFilter::Instance()->GetGeo()->SetGlobalPos(hitK,TVector3(hit->GetX(),hit->GetY(),hit->GetZ())); diff --git a/lhetrack/MpdTpcKalmanTrack.cxx b/lhetrack/MpdTpcKalmanTrack.cxx index 11bd9c03ebf83d4ee49815ef160c1bae3bd24afa..8341da8b124df09fa4f9a99b5160ade179f0f32e 100644 --- a/lhetrack/MpdTpcKalmanTrack.cxx +++ b/lhetrack/MpdTpcKalmanTrack.cxx @@ -239,5 +239,22 @@ Int_t MpdTpcKalmanTrack::Compare(const TObject* track) const else if (ptthis > pt) return -1; return 0; } +//__________________________________________________________________________ +Bool_t MpdTpcKalmanTrack::GetRecoQuality(Double_t dist, Double_t percentage) +{ + /// returns kTRUE if number of hits closer to boundaries than dist divided by nHits is larger than percentage + + MpdKalmanHit *hit = NULL; + Int_t nCloseHits = 0; + Int_t nTrHits = fTrHits->GetEntries(); + if (nTrHits == 0) {cout << "NO KALMAN HITS ARE FOUND" << endl; return kTRUE;} + for (Int_t itr = 0; itr < nTrHits; itr++) + { + hit = (MpdKalmanHit*) fTrHits->UncheckedAt(itr); + if (TMath::Abs(hit->GetEdge()) < dist) nCloseHits++; + } + if ((Double_t)(nCloseHits/(Double_t)nTrHits) > percentage) return kTRUE; + else return kFALSE; +} ClassImp(MpdTpcKalmanTrack) diff --git a/lhetrack/MpdTpcKalmanTrack.h b/lhetrack/MpdTpcKalmanTrack.h index 1dff2043311ea81e2d613e8573d3fcc2e0ae443b..9c109481f5b5d09bfb8cb4b9efbad719d5fab8a9 100644 --- a/lhetrack/MpdTpcKalmanTrack.h +++ b/lhetrack/MpdTpcKalmanTrack.h @@ -33,6 +33,7 @@ class MpdTpcKalmanTrack : public MpdKalmanTrack Bool_t IsSortable() const { return kTRUE; } Int_t Compare(const TObject* track) const; ///< sort in descending order in Pt void Reset(); ///< reset track (similar to destructor) + Bool_t GetRecoQuality(Double_t dist = 1.5, Double_t percentage = 0.5); ///< returns kTRUE if number of hits closer to boundaries than dist divided by nHits is larger than percentage private: