From 3e954c189380ddec34ecde12c7bfc06d79762005 Mon Sep 17 00:00:00 2001
From: alex <alex@se51-33.jinr.ru>
Date: Tue, 14 Feb 2017 16:06:10 +0300
Subject: [PATCH] For writing a distance from hit to TPC sector's boundary

---
 kalman/MpdKalmanHit.cxx         | 11 +++++++----
 kalman/MpdKalmanHit.h           |  7 +++++--
 lhetrack/MpdTpcKalmanFilter.cxx |  6 +++++-
 lhetrack/MpdTpcKalmanTrack.cxx  | 17 +++++++++++++++++
 lhetrack/MpdTpcKalmanTrack.h    |  1 +
 5 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/kalman/MpdKalmanHit.cxx b/kalman/MpdKalmanHit.cxx
index 2108294..e2a2a2e 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 1673342..32905bf 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 ab065de..525c9a7 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 11bd9c0..8341da8 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 1dff204..9c10948 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:
 
-- 
GitLab