From 1d1bd34fd844170fa5e59e80cfb07ca6086e526f Mon Sep 17 00:00:00 2001
From: Ke Li <ke.li@cern.ch>
Date: Wed, 22 Sep 2021 18:15:53 +0200
Subject: [PATCH] add a flag to control biased and unbiased residual

---
 .../TrackerSPFit/python/TrackerSPFit.py       |   2 +
 .../python/TrackerSPFitTI12Data.py            |   2 +
 .../TrackerSPFit/src/TrackerSPFit.cxx         | 183 +++++++++---------
 .../TrackerSPFit/src/TrackerSPFit.h           | 164 ++++++++--------
 4 files changed, 174 insertions(+), 177 deletions(-)

diff --git a/Tracker/TrackerRecAlgs/TrackerSPFit/python/TrackerSPFit.py b/Tracker/TrackerRecAlgs/TrackerSPFit/python/TrackerSPFit.py
index cf69e95b..df0b3a82 100644
--- a/Tracker/TrackerRecAlgs/TrackerSPFit/python/TrackerSPFit.py
+++ b/Tracker/TrackerRecAlgs/TrackerSPFit/python/TrackerSPFit.py
@@ -23,6 +23,8 @@ def TrackerSPFitBasicCfg(flags, **kwargs):
     """Return ComponentAccumulator for TrackerSPFit"""
     acc = FaserSCT_GeometryCfg(flags)
     kwargs.setdefault("SpacePointsSCTName", "SCT_SpacePointContainer")
+    kwargs.setdefault("MaxChi2", 20)
+    kwargs.setdefault("UseBiasedResidual", True)
     acc.addEventAlgo(Tracker__TrackerSPFit(**kwargs))
    # attach ToolHandles
     return acc
diff --git a/Tracker/TrackerRecAlgs/TrackerSPFit/python/TrackerSPFitTI12Data.py b/Tracker/TrackerRecAlgs/TrackerSPFit/python/TrackerSPFitTI12Data.py
index 3f21c7c8..89bcc4d6 100644
--- a/Tracker/TrackerRecAlgs/TrackerSPFit/python/TrackerSPFitTI12Data.py
+++ b/Tracker/TrackerRecAlgs/TrackerSPFit/python/TrackerSPFitTI12Data.py
@@ -23,6 +23,8 @@ def TrackerSPFitBasicCfg(flags, **kwargs):
     """Return ComponentAccumulator for TrackerSPFit"""
     acc = FaserSCT_GeometryCfg(flags)
     kwargs.setdefault("SpacePointsSCTName", "SCT_SpacePointContainer")
+    kwargs.setdefault("MaxChi2", 100)
+    kwargs.setdefault("UseBiasedResidual", True)
     acc.addEventAlgo(Tracker__TrackerSPFit(**kwargs))
    # attach ToolHandles
     return acc
diff --git a/Tracker/TrackerRecAlgs/TrackerSPFit/src/TrackerSPFit.cxx b/Tracker/TrackerRecAlgs/TrackerSPFit/src/TrackerSPFit.cxx
index 69b4a256..1caf7ba2 100755
--- a/Tracker/TrackerRecAlgs/TrackerSPFit/src/TrackerSPFit.cxx
+++ b/Tracker/TrackerRecAlgs/TrackerSPFit/src/TrackerSPFit.cxx
@@ -70,12 +70,13 @@ namespace Tracker
       , m_residual_x_plane6(0)
       , m_residual_x_plane7(0)
       , m_residual_x_plane8(0)
-      //      , m_chi2(0)
-      //      , m_edm(0)
-      //      , m_ndf(0)
+      , m_chi2(0)
+      , m_edm(0)
+      , m_ndf(0)
       , m_thistSvc("THistSvc", name)
   { 
     declareProperty("MaxChi2", m_maxchi2=20);
+    declareProperty("UseBiasedResidual", m_bias=true);
   }
 
   //-----------------------------------------------------------------------
@@ -136,9 +137,9 @@ namespace Tracker
     m_residual_x_plane6=new TH1D("sp_residual_x_plane6","sp_residual_x_plane6",2000,-1,1);
     m_residual_x_plane7=new TH1D("sp_residual_x_plane7","sp_residual_x_plane7",2000,-1,1);
     m_residual_x_plane8=new TH1D("sp_residual_x_plane8","sp_residual_x_plane8",2000,-1,1);
-    //    m_chi2=new TH1D("chi2","chi2",100,0,100);
-    //    m_edm=new TH1D("edm","edm",100,0,0.01);
-    //    m_ndf=new TH1D("ndf","ndf",10,0,10);
+    m_chi2=new TH1D("chi2","chi2",100,0,100);
+    m_edm=new TH1D("edm","edm",100,0,0.01);
+    m_ndf=new TH1D("ndf","ndf",10,0,10);
     CHECK(m_thistSvc->regTree("/TrackerSPFit/spfit",m_tree));
     CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_x",m_hist_x));
     CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_y",m_hist_y));
@@ -176,9 +177,9 @@ namespace Tracker
     CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_residual_x_plane6",m_residual_x_plane6));
     CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_residual_x_plane7",m_residual_x_plane7));
     CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_residual_x_plane8",m_residual_x_plane8));
-    //    CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_chi2",m_chi2));
-    //    CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_edm",m_edm));
-    //    CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_ndf",m_ndf));
+    CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_chi2",m_chi2));
+    CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_edm",m_edm));
+    CHECK(m_thistSvc->regHist("/TrackerSPFit/sp/sp_ndf",m_ndf));
     ATH_MSG_INFO( "TrackerSPFit::initialized" );
     return StatusCode::SUCCESS;
   }
@@ -199,9 +200,9 @@ namespace Tracker
     m_tree->Branch("sp_y_residual",&m_sp_y_residual);
     m_tree->Branch("sp_z_residual",&m_sp_z_residual);
     m_tree->Branch("trackId",&m_trackId);
-    //    m_tree->Branch("track_chi2",&m_track_chi2);
-    //    m_tree->Branch("track_edm",&m_track_edm);
-    //    m_tree->Branch("track_ndf",&m_track_ndf);
+    m_tree->Branch("track_chi2",&m_track_chi2);
+    m_tree->Branch("track_edm",&m_track_edm);
+    m_tree->Branch("track_ndf",&m_track_ndf);
     //  m_tree->Branch("track_p0",&m_track_p0);
     //  m_tree->Branch("track_p1",&m_track_p1);
     //  m_tree->Branch("track_p2",&m_track_p2);
@@ -225,9 +226,9 @@ namespace Tracker
     m_sp_y_residual.clear();
     m_sp_z_residual.clear();
     m_trackId.clear();
-    //    m_track_chi2.clear();
-    //    m_track_edm.clear();
-    //    m_track_ndf.clear();
+    m_track_chi2.clear();
+    m_track_edm.clear();
+    m_track_ndf.clear();
     m_sp_station.clear();
     m_sp_layer.clear();
     m_sp_module.clear();
@@ -353,10 +354,12 @@ namespace Tracker
 	  m_sp_station.push_back(0);
 	  m_sp_layer.push_back(track.layer);
 	  m_sp_module.push_back(track.module);
-	  //	  m_track_chi2.push_back(track.chi2);
-	  //	  m_track_edm.push_back(track.edm);
-	  //	  m_track_ndf.push_back(track.ndf);
-	  double* par=const_cast<double*>(track.p);
+	  if(m_bias){
+	    m_track_chi2.push_back(track.chi2);
+	    m_track_edm.push_back(track.edm);
+	    m_track_ndf.push_back(track.ndf);
+	  }
+	  //double* par=const_cast<double*>(track.p);
 	  //	m_track_p0.push_back(par[0]);
 	  //	m_track_p1.push_back(par[1]);
 	  //	m_track_p2.push_back(par[2]);
@@ -392,14 +395,11 @@ namespace Tracker
 	  m_sp_station.push_back(1);
 	  m_sp_layer.push_back(track.layer);
 	  m_sp_module.push_back(track.module);
-	  //	  m_track_chi2.push_back(track.chi2);
-	  //	  m_track_edm.push_back(track.edm);
-	  //	  m_track_ndf.push_back(track.ndf);
-	  double* par=const_cast<double*>(track.p);
-	  //	m_track_p0.push_back(par[0]);
-	  //	m_track_p1.push_back(par[1]);
-	  //	m_track_p2.push_back(par[2]);
-	  //	m_track_p3.push_back(par[3]);
+	  if(m_bias){
+	    m_track_chi2.push_back(track.chi2);
+	    m_track_edm.push_back(track.edm);
+	    m_track_ndf.push_back(track.ndf);
+	  }
 	  if(track.layer==0){ m_residual_x_plane3->Fill(pre.x()-pos.x());m_residual_y_plane3->Fill(pre.y()-pos.y());}
 	  if(track.layer==1){ m_residual_x_plane4->Fill(pre.x()-pos.x());m_residual_y_plane4->Fill(pre.y()-pos.y());}
 	  if(track.layer==2){ m_residual_x_plane5->Fill(pre.x()-pos.x());m_residual_y_plane5->Fill(pre.y()-pos.y());}
@@ -431,14 +431,11 @@ namespace Tracker
 	  m_sp_station.push_back(2);
 	  m_sp_layer.push_back(track.layer);
 	  m_sp_module.push_back(track.module);
-	  //	  m_track_chi2.push_back(track.chi2);
-	  //	  m_track_edm.push_back(track.edm);
-	  //	  m_track_ndf.push_back(track.ndf);
-	  double* par=const_cast<double*>(track.p);
-	  //	m_track_p0.push_back(par[0]);
-	  //	m_track_p1.push_back(par[1]);
-	  //	m_track_p2.push_back(par[2]);
-	  //	m_track_p3.push_back(par[3]);
+	  if(m_bias){
+	    m_track_chi2.push_back(track.chi2);
+	    m_track_edm.push_back(track.edm);
+	    m_track_ndf.push_back(track.ndf);
+	  }
 	  if(track.layer==0){ m_residual_x_plane6->Fill(pre.x()-pos.x());m_residual_y_plane6->Fill(pre.y()-pos.y());}
 	  if(track.layer==1){ m_residual_x_plane7->Fill(pre.x()-pos.x());m_residual_y_plane7->Fill(pre.y()-pos.y());}
 	  if(track.layer==2){ m_residual_x_plane8->Fill(pre.x()-pos.x());m_residual_y_plane8->Fill(pre.y()-pos.y());}
@@ -478,8 +475,14 @@ namespace Tracker
       for(unsigned int i0=0;i0<layer0.size();i0++){
 	for(unsigned int i1=0;i1<layer1.size();i1++){
 	  for(unsigned int i2=0;i2<layer2.size();i2++){
-	    auto tmp=makeTrackSeg(layer0[i0],layer1[i1],layer2[i2],maxchi2);
-	    tracks.insert(tracks.end(),tmp.begin(),tmp.end());
+	    if(m_bias){
+	      auto tmp=makeTrackSeg(layer0[i0],layer1[i1],layer2[i2],maxchi2);
+	      tracks.insert(tracks.end(),tmp.begin(),tmp.end());
+	    }
+	    else{
+	      auto tmp=makeTrackSeg(layer0[i0],layer1[i1],layer2[i2]);
+	      tracks.insert(tracks.end(),tmp.begin(),tmp.end());
+	    }
 	  }
 	}
       }
@@ -487,7 +490,7 @@ namespace Tracker
     return tracks;
   }
 
-  std::vector<TrackerSPFit::SP_TSOS> TrackerSPFit::makeTrackSeg(SP_Seed sp0, SP_Seed sp1, SP_Seed sp2,  double maxchi2) const{
+  std::vector<TrackerSPFit::SP_TSOS> TrackerSPFit::makeTrackSeg(SP_Seed sp0, SP_Seed sp1, SP_Seed sp2) const{
     std::vector<SP_TSOS> spt;
     spt.clear();
     for(int isp=0;isp<3;isp++){
@@ -524,60 +527,58 @@ namespace Tracker
     }
     return spt;
   }
-  /*
-     std::vector<TrackerSPFit::SP_TSOS> TrackerSPFit::makeTrackSeg(SP_Seed sp0, SP_Seed sp1, SP_Seed sp2,  double maxchi2) const{
-     std::vector<SP_TSOS> spt;
-     spt.clear();
-     TGraph2DErrors* gra= new TGraph2DErrors();
-     gra->SetPoint(0,sp0.pos.x(),sp0.pos.y(),sp0.pos.z());
-     gra->SetPoint(1,sp1.pos.x(),sp1.pos.y(),sp1.pos.z());
-     gra->SetPoint(2,sp2.pos.x(),sp2.pos.y(),sp2.pos.z());
-     gra->SetPointError(0,sqrt((sp0.cov)(0,0)),sqrt((sp0.cov)(1,1)),sqrt((sp0.cov)(2,2)));
-     gra->SetPointError(1,sqrt((sp1.cov)(0,0)),sqrt((sp1.cov)(1,1)),sqrt((sp1.cov)(2,2)));
-     gra->SetPointError(2,sqrt((sp2.cov)(0,0)),sqrt((sp2.cov)(1,1)),sqrt((sp2.cov)(2,2)));
-
-     std::cout<<" spacepoints in the station"<<std::endl;
-     std::cout<<"sp 0 "<<sp0.pos.x()<<" "<<sp0.pos.y()<<" "<<sp0.pos.z()<<" "<<sqrt((sp0.cov)(0,0))<<" "<<sqrt((sp0.cov)(1,1))<<" "<<sqrt((sp0.cov)(2.2))<<std::endl;
-     std::cout<<"sp 1 "<<sp1.pos.x()<<" "<<sp1.pos.y()<<" "<<sp1.pos.z()<<" "<<sqrt((sp1.cov)(0,0))<<" "<<sqrt((sp1.cov)(1,1))<<" "<<sqrt((sp1.cov)(2.2))<<std::endl;
-     std::cout<<"sp 2 "<<sp2.pos.x()<<" "<<sp2.pos.y()<<" "<<sp2.pos.z()<<" "<<sqrt((sp2.cov)(0,0))<<" "<<sqrt((sp2.cov)(1,1))<<" "<<sqrt((sp2.cov)(2.2))<<std::endl;
-     ROOT::Fit::Fitter fitter;
-     SumDistance2 sumdist(gra);
-     ROOT::Math::Functor fcn(sumdist,4);
-     double initParam[4]={1,1,1,1};
-     fitter.SetFCN(fcn,initParam);
-//   for (int i = 0; i < 4; ++i) fitter.Config().ParSettings(i).SetStepSize(0.01);
-if(fitter.FitFCN()){
-const ROOT::Fit::FitResult & result =fitter.Result();
-double chi2=result.MinFcnValue();
-double edm=result.Edm();
-int ndf=result.Ndf();
-ATH_MSG_DEBUG( "TrackerSPFit::makeTrackSeg(), track chi2 = "<<chi2<<"  ; edm = "<<edm<<" ; ndf = "<<ndf );
-m_chi2->Fill(chi2);
-m_edm->Fill(edm);
-m_ndf->Fill(ndf);
-
-if(chi2<maxchi2){
-result.Print(std::cout);
-const double *fitParam=result.GetParams();
-std::cout<<" fit status: ook "<<chi2<<" "<<edm<<" "<<ndf<<" "<<fitParam[0]<<" "<<fitParam[1]<<" "<<fitParam[2]<<" "<<fitParam[3]<<std::endl;
-Amg::Vector3D err0(sqrt((sp0.cov)(0,0)),sqrt((sp0.cov)(1,1)),sqrt((sp0.cov)(2,2)));
-Amg::Vector3D err1(sqrt((sp1.cov)(0,0)),sqrt((sp1.cov)(1,1)),sqrt((sp1.cov)(2,2)));
-Amg::Vector3D err2(sqrt((sp2.cov)(0,0)),sqrt((sp2.cov)(1,1)),sqrt((sp2.cov)(2,2)));
-struct SP_TSOS tsos0{sp0.pos,predicted(sp0.pos.z(),fitParam),err0,sp0.layer,sp0.module,chi2,edm,ndf,fitParam};
-struct SP_TSOS tsos1{sp1.pos,predicted(sp1.pos.z(),fitParam),err1,sp1.layer,sp0.module,chi2,edm,ndf,fitParam};
-struct SP_TSOS tsos2{sp2.pos,predicted(sp2.pos.z(),fitParam),err2,sp2.layer,sp0.module,chi2,edm,ndf,fitParam};
-spt.push_back(tsos0);
-spt.push_back(tsos1);
-spt.push_back(tsos2);
-}
-}
+  std::vector<TrackerSPFit::SP_TSOS> TrackerSPFit::makeTrackSeg(SP_Seed sp0, SP_Seed sp1, SP_Seed sp2,  double maxchi2) const{
+    std::vector<SP_TSOS> spt;
+    spt.clear();
+    TGraph2DErrors* gra= new TGraph2DErrors();
+    gra->SetPoint(0,sp0.pos.x(),sp0.pos.y(),sp0.pos.z());
+    gra->SetPoint(1,sp1.pos.x(),sp1.pos.y(),sp1.pos.z());
+    gra->SetPoint(2,sp2.pos.x(),sp2.pos.y(),sp2.pos.z());
+    gra->SetPointError(0,sqrt((sp0.cov)(0,0)),sqrt((sp0.cov)(1,1)),sqrt((sp0.cov)(2,2)));
+    gra->SetPointError(1,sqrt((sp1.cov)(0,0)),sqrt((sp1.cov)(1,1)),sqrt((sp1.cov)(2,2)));
+    gra->SetPointError(2,sqrt((sp2.cov)(0,0)),sqrt((sp2.cov)(1,1)),sqrt((sp2.cov)(2,2)));
+
+    std::cout<<" spacepoints in the station"<<std::endl;
+    std::cout<<"sp 0 "<<sp0.pos.x()<<" "<<sp0.pos.y()<<" "<<sp0.pos.z()<<" "<<sqrt((sp0.cov)(0,0))<<" "<<sqrt((sp0.cov)(1,1))<<" "<<sqrt((sp0.cov)(2.2))<<std::endl;
+    std::cout<<"sp 1 "<<sp1.pos.x()<<" "<<sp1.pos.y()<<" "<<sp1.pos.z()<<" "<<sqrt((sp1.cov)(0,0))<<" "<<sqrt((sp1.cov)(1,1))<<" "<<sqrt((sp1.cov)(2.2))<<std::endl;
+    std::cout<<"sp 2 "<<sp2.pos.x()<<" "<<sp2.pos.y()<<" "<<sp2.pos.z()<<" "<<sqrt((sp2.cov)(0,0))<<" "<<sqrt((sp2.cov)(1,1))<<" "<<sqrt((sp2.cov)(2.2))<<std::endl;
+    ROOT::Fit::Fitter fitter;
+    SumDistance2 sumdist(gra);
+    ROOT::Math::Functor fcn(sumdist,4);
+    double initParam[4]={1,1,1,1};
+    fitter.SetFCN(fcn,initParam);
+    //   for (int i = 0; i < 4; ++i) fitter.Config().ParSettings(i).SetStepSize(0.01);
+    if(fitter.FitFCN()){
+      const ROOT::Fit::FitResult & result =fitter.Result();
+      double chi2=result.MinFcnValue();
+      double edm=result.Edm();
+      int ndf=result.Ndf();
+      ATH_MSG_DEBUG( "TrackerSPFit::makeTrackSeg(), track chi2 = "<<chi2<<"  ; edm = "<<edm<<" ; ndf = "<<ndf );
+      m_chi2->Fill(chi2);
+      m_edm->Fill(edm);
+      m_ndf->Fill(ndf);
+
+      if(chi2<maxchi2){
+	result.Print(std::cout);
+	const double *fitParam=result.GetParams();
+	std::cout<<" fit status: ook "<<chi2<<" "<<edm<<" "<<ndf<<" "<<fitParam[0]<<" "<<fitParam[1]<<" "<<fitParam[2]<<" "<<fitParam[3]<<std::endl;
+	Amg::Vector3D err0(sqrt((sp0.cov)(0,0)),sqrt((sp0.cov)(1,1)),sqrt((sp0.cov)(2,2)));
+	Amg::Vector3D err1(sqrt((sp1.cov)(0,0)),sqrt((sp1.cov)(1,1)),sqrt((sp1.cov)(2,2)));
+	Amg::Vector3D err2(sqrt((sp2.cov)(0,0)),sqrt((sp2.cov)(1,1)),sqrt((sp2.cov)(2,2)));
+	struct SP_TSOS tsos0{sp0.pos,predicted(sp0.pos.z(),fitParam),err0,sp0.layer,sp0.module,chi2,edm,ndf};
+	struct SP_TSOS tsos1{sp1.pos,predicted(sp1.pos.z(),fitParam),err1,sp1.layer,sp0.module,chi2,edm,ndf};
+	struct SP_TSOS tsos2{sp2.pos,predicted(sp2.pos.z(),fitParam),err2,sp2.layer,sp0.module,chi2,edm,ndf};
+	spt.push_back(tsos0);
+	spt.push_back(tsos1);
+	spt.push_back(tsos2);
+      }
+    }
 
-return spt;
-}
-*/
+    return spt;
+  }
 
-Amg::Vector3D TrackerSPFit::predicted(double z, const double *p) const {
-  return Amg::Vector3D(p[0]+p[1]*z,p[2]+p[3]*z,z);
-}
+  Amg::Vector3D TrackerSPFit::predicted(double z, const double *p) const {
+    return Amg::Vector3D(p[0]+p[1]*z,p[2]+p[3]*z,z);
+  }
 
 }
diff --git a/Tracker/TrackerRecAlgs/TrackerSPFit/src/TrackerSPFit.h b/Tracker/TrackerRecAlgs/TrackerSPFit/src/TrackerSPFit.h
index 432befef..cf025ad0 100755
--- a/Tracker/TrackerRecAlgs/TrackerSPFit/src/TrackerSPFit.h
+++ b/Tracker/TrackerRecAlgs/TrackerSPFit/src/TrackerSPFit.h
@@ -60,10 +60,11 @@ namespace Tracker
       virtual StatusCode finalize() override;
 
       struct SP_Seed{Amg::Vector3D pos; Amg::MatrixX cov; int layer; int module;};
-      //struct SP_TSOS{Amg::Vector3D pos; Amg::Vector3D predicted; Amg::Vector3D err; int layer;int module; double chi2; double edm; int ndf; const double *p;};
-      struct SP_TSOS{Amg::Vector3D pos; Amg::Vector3D predicted; Amg::Vector3D err; int layer;int module;  const double *p;};
+      struct SP_TSOS{Amg::Vector3D pos; Amg::Vector3D predicted; Amg::Vector3D err; int layer;int module; double chi2=-1.; double edm=-1.; int ndf=-1;};
+      //struct SP_TSOS{Amg::Vector3D pos; Amg::Vector3D predicted; Amg::Vector3D err; int layer;int module;  const double *p;};
       std::vector<SP_TSOS> makeTrackSeg(std::vector<SP_Seed> sps, double maxchi2) const;
       std::vector<SP_TSOS> makeTrackSeg(SP_Seed sp0, SP_Seed sp1, SP_Seed sp2, double maxchi2) const;
+      std::vector<SP_TSOS> makeTrackSeg(SP_Seed sp0, SP_Seed sp1, SP_Seed sp2) const;
       Amg::Vector3D predicted(double z, const double *p) const;
 
       // function Object to be minimized
@@ -78,13 +79,6 @@ namespace Tracker
 	  double xchi2= (xpred-x)*(xpred-x)/xe/xe;
 	  double ychi2= (ypred-y)*(ypred-y)/ye/ye;
 	  double d2=xchi2+ychi2;
-	  // distance line point is D= | (xp-x0) cross  ux |
-	  // where ux is direction of line and x0 is a point in the line (like t = 0)
-	  //	ROOT::Math::XYZVector xp(x,y,z);
-	  //	ROOT::Math::XYZVector x0(p[0], p[2], 0. );
-	  //	ROOT::Math::XYZVector x1(p[0] + p[1], p[2] + p[3], 1. );
-	  //	ROOT::Math::XYZVector u = (x1-x0).Unit();
-	  //	double d2 = ((xp-x0).Cross(u)).Mag2();
 	  return d2;
 	}
 	// implementation of the function to be minimized
@@ -112,88 +106,86 @@ namespace Tracker
       TrackerSPFit() = delete;
       TrackerSPFit(const TrackerSPFit&) =delete;
       TrackerSPFit &operator=(const TrackerSPFit&) = delete;
-      //@}
 
       SG::ReadHandleKey<FaserSCT_SpacePointContainer>  m_Sct_spcontainerKey{this, "SpacePointsSCTName", "SCT_SpacePointContainer"};
-      //@}
 
       SG::ReadCondHandleKey<TrackerDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};
-      //@}
 
-const FaserSCT_ID* m_idHelper{nullptr};
-mutable std::atomic<int> m_numberOfEvents{0};
-mutable std::atomic<int> m_numberOfSCT{0};
-mutable std::atomic<int> m_numberOfTrack{0};
-mutable std::atomic<int> m_numberOfSP{0};
-//@}
-TH1* m_hist_x;
-TH1* m_hist_y;
-TH1* m_hist_z;
-TH1* m_hist_r;
-TH1* m_hist_eta;
-TH1* m_hist_phi;
-TH1* m_hist_station;
-TH1* m_hist_strip;
-TH1* m_hist_layer;
-TH2* m_hist_x_y_plane0;
-TH2* m_hist_x_y_plane1;
-TH2* m_hist_x_y_plane2;
-TH2* m_hist_x_y_plane3;
-TH2* m_hist_x_y_plane4;
-TH2* m_hist_x_y_plane5;
-TH2* m_hist_x_y_plane6;
-TH1* m_hist_x_y_plane7;
-TH1* m_hist_x_y_plane8;
-TH1* m_residual_y_plane0;
-TH1* m_residual_y_plane1;
-TH1* m_residual_y_plane2;
-TH1* m_residual_y_plane3;
-TH1* m_residual_y_plane4;
-TH1* m_residual_y_plane5;
-TH1* m_residual_y_plane6;
-TH1* m_residual_y_plane7;
-TH1* m_residual_y_plane8;
-TH1* m_residual_x_plane0;
-TH1* m_residual_x_plane1;
-TH1* m_residual_x_plane2;
-TH1* m_residual_x_plane3;
-TH1* m_residual_x_plane4;
-TH1* m_residual_x_plane5;
-TH1* m_residual_x_plane6;
-TH1* m_residual_x_plane7;
-TH1* m_residual_x_plane8;
-//TH1* m_chi2;
-//TH1* m_edm;
-//TH1* m_ndf;
-ServiceHandle<ITHistSvc>  m_thistSvc;
-
-mutable int m_eventNumber;
-mutable std::vector<double> m_sp_x;
-mutable std::vector<double> m_sp_y;
-mutable std::vector<double> m_sp_z;
-mutable std::vector<double> m_sp_x_err;
-mutable std::vector<double> m_sp_y_err;
-mutable std::vector<double> m_sp_z_err;
-mutable std::vector<double> m_sp_x_predicted;
-mutable std::vector<double> m_sp_y_predicted;
-mutable std::vector<double> m_sp_z_predicted;
-mutable std::vector<double> m_sp_x_residual;
-mutable std::vector<double> m_sp_y_residual;
-mutable std::vector<double> m_sp_z_residual;
-mutable std::vector<int> m_trackId;
-//mutable std::vector<double> m_track_chi2;
-//mutable std::vector<double> m_track_edm;
-//mutable std::vector<int> m_track_ndf;
-//   mutable std::vector<double> m_track_p0;
-//   mutable std::vector<double> m_track_p1;
-//   mutable std::vector<double> m_track_p2;
-//   mutable std::vector<double> m_track_p3;
-mutable std::vector<int> m_sp_station;
-mutable std::vector<int> m_sp_layer;
-mutable std::vector<int> m_sp_module;
-double m_maxchi2;
-
-};
+      const FaserSCT_ID* m_idHelper{nullptr};
+      mutable std::atomic<int> m_numberOfEvents{0};
+      mutable std::atomic<int> m_numberOfSCT{0};
+      mutable std::atomic<int> m_numberOfTrack{0};
+      mutable std::atomic<int> m_numberOfSP{0};
+      //@}
+      TH1* m_hist_x;
+      TH1* m_hist_y;
+      TH1* m_hist_z;
+      TH1* m_hist_r;
+      TH1* m_hist_eta;
+      TH1* m_hist_phi;
+      TH1* m_hist_station;
+      TH1* m_hist_strip;
+      TH1* m_hist_layer;
+      TH2* m_hist_x_y_plane0;
+      TH2* m_hist_x_y_plane1;
+      TH2* m_hist_x_y_plane2;
+      TH2* m_hist_x_y_plane3;
+      TH2* m_hist_x_y_plane4;
+      TH2* m_hist_x_y_plane5;
+      TH2* m_hist_x_y_plane6;
+      TH1* m_hist_x_y_plane7;
+      TH1* m_hist_x_y_plane8;
+      TH1* m_residual_y_plane0;
+      TH1* m_residual_y_plane1;
+      TH1* m_residual_y_plane2;
+      TH1* m_residual_y_plane3;
+      TH1* m_residual_y_plane4;
+      TH1* m_residual_y_plane5;
+      TH1* m_residual_y_plane6;
+      TH1* m_residual_y_plane7;
+      TH1* m_residual_y_plane8;
+      TH1* m_residual_x_plane0;
+      TH1* m_residual_x_plane1;
+      TH1* m_residual_x_plane2;
+      TH1* m_residual_x_plane3;
+      TH1* m_residual_x_plane4;
+      TH1* m_residual_x_plane5;
+      TH1* m_residual_x_plane6;
+      TH1* m_residual_x_plane7;
+      TH1* m_residual_x_plane8;
+      TH1* m_chi2;
+      TH1* m_edm;
+      TH1* m_ndf;
+      ServiceHandle<ITHistSvc>  m_thistSvc;
+
+      mutable int m_eventNumber;
+      mutable std::vector<double> m_sp_x;
+      mutable std::vector<double> m_sp_y;
+      mutable std::vector<double> m_sp_z;
+      mutable std::vector<double> m_sp_x_err;
+      mutable std::vector<double> m_sp_y_err;
+      mutable std::vector<double> m_sp_z_err;
+      mutable std::vector<double> m_sp_x_predicted;
+      mutable std::vector<double> m_sp_y_predicted;
+      mutable std::vector<double> m_sp_z_predicted;
+      mutable std::vector<double> m_sp_x_residual;
+      mutable std::vector<double> m_sp_y_residual;
+      mutable std::vector<double> m_sp_z_residual;
+      mutable std::vector<int> m_trackId;
+      mutable std::vector<double> m_track_chi2;
+      mutable std::vector<double> m_track_edm;
+      mutable std::vector<int> m_track_ndf;
+      //   mutable std::vector<double> m_track_p0;
+      //   mutable std::vector<double> m_track_p1;
+      //   mutable std::vector<double> m_track_p2;
+      //   mutable std::vector<double> m_track_p3;
+      mutable std::vector<int> m_sp_station;
+      mutable std::vector<int> m_sp_layer;
+      mutable std::vector<int> m_sp_module;
+      double m_maxchi2;
+      bool m_bias;
+
+  };
 
 }
 #endif // TrackerSpacePointMakerAlg_TRACKERSPACEPOINTMAKERALG_H
-- 
GitLab