From cf7f8c07977d82c4d7e1801b2ab474cbf0d69a28 Mon Sep 17 00:00:00 2001 From: Alessio Piucci <alessio.piucci@cern.ch> Date: Sat, 27 May 2017 16:52:43 +0200 Subject: [PATCH] Added the multiple scattering contribution to the chi2 covariance --- CMakeLists.txt | 3 +- include/TFRChiSquaredFit.cpp | 58 +++++++++++++++++++++++------- include/TFRChiSquaredFit.h | 8 +++-- include/TFRGeometry.cpp | 32 ++++------------- include/TFRGeometry.h | 12 ++++--- include/TFRMultipleScattering.cpp | 6 ---- include/TFRMultipleScattering.h | 7 ++-- include/TFRPropagator.cpp | 11 +++--- include/TFRPropagator.h | 18 ++++------ slides/day_4_performance.odp | Bin 2467683 -> 2470047 bytes src/detector_sim.cpp | 51 +++----------------------- src/fitting_chi2_linear.cpp | 8 ++--- src/fitting_chi2_quadratic.cpp | 8 ++--- 13 files changed, 92 insertions(+), 130 deletions(-) delete mode 100644 include/TFRMultipleScattering.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8077bcf..2e2eb00 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -234,7 +234,6 @@ target_link_libraries(DICT ${ROOT_LIBRARIES}) #add the custom libraries add_library(cparser include/cparser.cpp) add_library(geometry include/TFRGeometry.cpp) -add_library(mscattering include/TFRMultipleScattering.cpp) add_library(propagator include/TFRPropagator.cpp) add_library(kalmanfilter include/TFRKalmanFilter) add_library(chisqfit include/TFRChiSquaredFit.cpp) @@ -259,7 +258,7 @@ foreach( appsourcefile ${APP_SOURCES} ) add_executable( ${executablename} ${appsourcefile} ${ROOT_HEADERS} ) # link all the libraries - target_link_libraries( ${executablename} cparser geometry mscattering propagator chisqfit kalmanfilter DICT ${ROOT_LIBRARIES} ) + target_link_libraries( ${executablename} cparser geometry propagator chisqfit kalmanfilter DICT ${ROOT_LIBRARIES} ) endforeach( appsourcefile ${APP_SOURCES} ) diff --git a/include/TFRChiSquaredFit.cpp b/include/TFRChiSquaredFit.cpp index bc16e86..86733f8 100644 --- a/include/TFRChiSquaredFit.cpp +++ b/include/TFRChiSquaredFit.cpp @@ -112,7 +112,8 @@ bool TFRChiSquaredFit::FitLinear1D(TFRTrack *track, bool xz_view){ //---------- // Perform a 1D linear fit, with matrix formalism //---------- -bool TFRChiSquaredFit::FitLinear1D_matrix(TFRTrack *track, bool xz_view){ +bool TFRChiSquaredFit::FitLinear1D_matrix(TFRTrack *track, bool xz_view, + TFRGeometry *detector_geo){ //linear formalism: // f = Ap @@ -172,16 +173,30 @@ bool TFRChiSquaredFit::FitLinear1D_matrix(TFRTrack *track, bool xz_view){ //should I fit the x or y position of the clusters? if(xz_view){ X(i) = curr_cluster->GetX(); - - //let's assume uncorrelated measurements V(i, i) = curr_cluster->GetCovariance()(0, 0); } else{ X(i) = curr_cluster->GetY(); - - //let's assume uncorrelated measurements V(i, i) = curr_cluster->GetCovariance()(1, 1); - } + } //if(xz_view) + + //should I take in account the multiple scattering? + if(detector_geo->GetMultipleScattStatus()){ + //assume momentum and Kaon mass... + double momentum = 5000.; + double beta = sqrt(1. - pow(493.7/momentum, 2)); + + //the first cluster is not effected + if(i != 0){ + V(i, i) += (pow(A(i, 1) - A(i - 1., 1), 2.) + * pow(detector_geo->GetMultipleScattering()->GetThetaRMSGauss(curr_cluster->GetLayer().GetXoverXZero(), + beta, momentum, 1), + 2.)); + + //let's forget the off-diagional elements, for now... + + } //if(i != 0) + } //if(detector_geo->GetMultipleScattStatus()) ++i; @@ -239,7 +254,8 @@ bool TFRChiSquaredFit::FitLinear1D_matrix(TFRTrack *track, bool xz_view){ //---------- // Perform a 1D quadratic fit, with matrix formalism //---------- -bool TFRChiSquaredFit::FitQuadratic1D_matrix(TFRTrack *track, bool xz_view){ +bool TFRChiSquaredFit::FitQuadratic1D_matrix(TFRTrack *track, bool xz_view, + TFRGeometry *detector_geo){ //almost the same of the linear case, with the only difference of the dimensionality: // f = Ap @@ -285,17 +301,32 @@ bool TFRChiSquaredFit::FitQuadratic1D_matrix(TFRTrack *track, bool xz_view){ //should I fit the x or y position of the clusters? if(xz_view){ X(i) = curr_cluster->GetX(); - - //let's assume uncorrelated measurements V(i, i) = curr_cluster->GetCovariance()(0, 0); } else{ X(i) = curr_cluster->GetY(); - - //let's assume uncorrelated measurements V(i, i) = curr_cluster->GetCovariance()(1, 1); } + //should I take in account the multiple scattering? + if(detector_geo->GetMultipleScattStatus()){ + + //assume momentum and Kaon mass... + double momentum = 5000.; + double beta = sqrt(1. - pow(493.7/momentum, 2)); + + //the first cluster is not effected + if(i != 0){ + V(i, i) += (pow(A(i, 1) - A(i - 1., 1), 2.) + * pow(detector_geo->GetMultipleScattering()->GetThetaRMSGauss(curr_cluster->GetLayer().GetXoverXZero(), + beta, momentum, 1), + 2.)); + + //let's forget the off-diagional elements, for now... + + } //if(i != 0) + } //if(detector_geo->GetMultipleScattStatus()) + ++i; } //loop over the clusters @@ -343,7 +374,8 @@ bool TFRChiSquaredFit::FitQuadratic1D_matrix(TFRTrack *track, bool xz_view){ //---------- // Perform a 2D linear fit, with matrix formalism //---------- -bool TFRChiSquaredFit::FitLinear2D_matrix(TFRTrack *track){ +bool TFRChiSquaredFit::FitLinear2D_matrix(TFRTrack *track, + TFRGeometry *detector_geo){ //linear formalism: // f = Ap @@ -423,6 +455,8 @@ bool TFRChiSquaredFit::FitLinear2D_matrix(TFRTrack *track){ //let's assume uncorrelated measurements on x and y V.SetSub(i*2, i*2, curr_cluster->GetCovariance()); + + //to write the multiple scattering contribution to the covariance! ++i; diff --git a/include/TFRChiSquaredFit.h b/include/TFRChiSquaredFit.h index 54c0ced..3443691 100644 --- a/include/TFRChiSquaredFit.h +++ b/include/TFRChiSquaredFit.h @@ -36,13 +36,15 @@ class TFRChiSquaredFit { bool FitLinear1D(TFRTrack *track, bool xz_view = true); /*! Perform a 1D linear fit, with matrix formalism */ - bool FitLinear1D_matrix(TFRTrack *track, bool xz_view = true); + bool FitLinear1D_matrix(TFRTrack *track, bool xz_view, + TFRGeometry *detector_geo); /*! Perform a 1D quadratic fit, with matrix formalism */ - bool FitQuadratic1D_matrix(TFRTrack *track, bool xz_view = true); + bool FitQuadratic1D_matrix(TFRTrack *track, bool xz_view, + TFRGeometry *detector_geo); /*! Perform a 2D linear fit, with matrix formalism */ - bool FitLinear2D_matrix(TFRTrack *track); + bool FitLinear2D_matrix(TFRTrack *track, TFRGeometry *detector_geo); protected: diff --git a/include/TFRGeometry.cpp b/include/TFRGeometry.cpp index 4e4a50b..c593852 100644 --- a/include/TFRGeometry.cpp +++ b/include/TFRGeometry.cpp @@ -10,26 +10,6 @@ //------------ TFRGeometry::TFRGeometry(const std::string configFile_name){ - //-------------------------------// - // setup the default propagator // - //-------------------------------// - - /* - propagator = new TEveTrackPropagator(); - - //setup the Runge Kutta stepper - propagator->SetStepper(TEveTrackPropagator::kRungeKutta); - - //set a uniform magnetic field on x direction - propagator->SetMagField(0., 10., 0.); - - //some other options - propagator->SetFitDaughters(kFALSE); //do not follow the daughters particles - propagator->SetMaxZ(1000.); //maximum z-coordinate to propagate, cm - propagator->SetMaxR(100000000); //maximum bending radius to propagate, cm - propagator->SetDelta(pow(10., -6.)); //'error' on trajectory reconstruction - */ - //-----------------------------------------------// // set the geometry from the input config file // //-----------------------------------------------// @@ -41,8 +21,7 @@ TFRGeometry::TFRGeometry(const std::string configFile_name){ //----------------------------------// //loop over the detector layers, to create the keys of the map (i.e. indexing by layer id) - - //I've no clue why the hell in ROOT there aren't nice implementations of iterators, + //I've no clue why the hell in ROOT there aren't nice implementations of iterators, //but just this stupid way (that I even didn't used at my C course during my bachelor) TIter it_layer((TFRLayers*) this->GetLayers()); TFRLayer *curr_layer; @@ -50,7 +29,6 @@ TFRGeometry::TFRGeometry(const std::string configFile_name){ //loop over the detector layers while((curr_layer = (TFRLayer*) it_layer.Next())) layer_map.insert(std::make_pair(curr_layer->GetID(), curr_layer)); - //--------------------------// // set the magnetic field // @@ -65,10 +43,12 @@ TFRGeometry::TFRGeometry(const std::string configFile_name){ B_mag = configFile.get<double>("B_field.magnitude"); - //--------------------------------------// - // set the multiple scattering status // - //--------------------------------------// + //-------------------------------// + // set the multiple scattering // + //-------------------------------// + mult_scatt = new TFRMultipleScattering(); + if(configFile.get<unsigned int>("multiple_scattering") == 1) multiple_scattering = true; else diff --git a/include/TFRGeometry.h b/include/TFRGeometry.h index 740256f..7370452 100644 --- a/include/TFRGeometry.h +++ b/include/TFRGeometry.h @@ -23,6 +23,7 @@ #include "TFRMCHit.h" #include "TFRCluster.h" #include "TFRLayer.h" +#include "TFRMultipleScattering.h" using namespace std; @@ -87,7 +88,10 @@ class TFRGeometry { /*! Returns the magnitude of the magnetic field */ inline double GetBMag() const {return B_mag;}; - + + /*! Get the multiple scattering */ + inline TFRMultipleScattering* GetMultipleScattering(){return mult_scatt;} + /*! Set the multiple scattering status (enabled/disabled) */ inline void SetMultipleScattStatus(bool _multiple_scattering) { multiple_scattering = _multiple_scattering;} @@ -102,9 +106,6 @@ class TFRGeometry { /*! Geometry tag */ std::string tag; - /*! Track propagator */ - //TEveTrackPropagator *propagator; - /*! Detector layers */ TFRLayers *layers; @@ -120,6 +121,9 @@ class TFRGeometry { /*! Magnitude of the magnetic field */ double B_mag; + /*! Multiple scattering */ + TFRMultipleScattering *mult_scatt; + /*! Status of the multiple scattering simulation (enabled/disabled) */ bool multiple_scattering; diff --git a/include/TFRMultipleScattering.cpp b/include/TFRMultipleScattering.cpp deleted file mode 100644 index c6b0e4f..0000000 --- a/include/TFRMultipleScattering.cpp +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * @author Alessio Piucci - * @brief Library to handle the simulation of the multiple scattering - */ - -#include "TFRMultipleScattering.h" diff --git a/include/TFRMultipleScattering.h b/include/TFRMultipleScattering.h index 1f7edf2..b4ee40e 100644 --- a/include/TFRMultipleScattering.h +++ b/include/TFRMultipleScattering.h @@ -17,9 +17,6 @@ #include "TROOT.h" #include "TRandom3.h" -//custom libraries -#include "TFRLayer.h" - using namespace std; class TFRMultipleScattering { @@ -36,9 +33,9 @@ class TFRMultipleScattering { ~TFRMultipleScattering( ); /*! Returns the angular deviation with Gaussian approximation */ - inline double GetThetaGauss(const TFRLayer layer, + inline double GetThetaGauss(const double x_over_Xzero, const double beta, const double p, const int charge) const - { return random->Gaus(0., GetThetaRMSGauss(layer.GetXoverXZero(), beta, p, charge)); }; + { return random->Gaus(0., GetThetaRMSGauss(x_over_Xzero, beta, p, charge)); }; /*! Returns the rms theta for Gaussian approximation */ inline double GetThetaRMSGauss(const double x_over_Xzero, diff --git a/include/TFRPropagator.cpp b/include/TFRPropagator.cpp index e7820cd..01ec1f5 100644 --- a/include/TFRPropagator.cpp +++ b/include/TFRPropagator.cpp @@ -272,20 +272,21 @@ bool TFRPropagator::AddScatteringToCovariance(TFRState *state, TFRLayer *layer){ if(x < xmin || x > xmax || y < ymin || y > ymax) return false; - //Check wether we should calcualte the effect of MS at this point. + //Check wether we should calculate the effect of MS at this point. if(!m_useMs || !m_geo->GetMultipleScattStatus()) return true; //Get multiple scattering factor (how much material) double XoverXZero = layer->GetXoverXZero(); - //Calculate the expected angular defelction + //Calculate the expected angular deflection double momentum = fabs(1.0/(state->GetStateVect())[4]); //assume kaon mass - double beta = sqrt(1.-pow(493.7/momentum,2)); + double beta = sqrt(1. - pow(493.7/momentum, 2)); - double angleRms = m_multiplescattering->GetThetaRMSGauss(XoverXZero, beta, momentum, 1); - //Tranlsate this angle in variations of tx and ty, tan(alpah) = x/z = tx (Good enough approximation also for the 2D scattering case) + double angleRms = m_geo->GetMultipleScattering()->GetThetaRMSGauss(XoverXZero, beta, momentum, 1); + + //Translate this angle in variations of tx and ty, tan(alpah) = x/z = tx (Good enough approximation also for the 2D scattering case) double txRms2 = pow((1+pow((state->GetStateVect())[2],2))*angleRms,2); double tyRms2 = pow((1+pow((state->GetStateVect())[3],2))*angleRms,2);//TODO diff --git a/include/TFRPropagator.h b/include/TFRPropagator.h index 16880f9..f358280 100644 --- a/include/TFRPropagator.h +++ b/include/TFRPropagator.h @@ -19,7 +19,6 @@ #include "TFRLayer.h" #include "TFRState.h" #include "TFRGeometry.h" -#include "TFRMultipleScattering.h" using namespace std; @@ -31,9 +30,7 @@ class TFRPropagator { /*! Standard constructor */ TFRPropagator(TFRGeometry *_geometry, bool useMultipleScattering = false) : - m_geo(_geometry), m_useMs(useMultipleScattering) { - m_multiplescattering = new TFRMultipleScattering(); - } + m_geo(_geometry), m_useMs(useMultipleScattering) {} /*! Destructor */ ~TFRPropagator( ){ }; @@ -44,22 +41,22 @@ class TFRPropagator { /*! Get the information wether multiple scattering is taken into account or not */ bool MultipleScatteringUsed() const {return m_useMs;}; - /*! Set wether multiple scattering is taken into account or not*/ + /*! Set wether multiple scattering is taken into account or not */ void UseMultipleScattering(bool ms) { m_useMs = ms;}; - /*! Extrapolate a state to a given z position. Returns false if the track is extrapolated ouside a detector layer or if the particle is replected by the magnetic field*/ + /*! Extrapolate a state to a given z position. Returns false if the track is extrapolated ouside a detector layer or if the particle is replected by the magnetic field */ bool PropagateState(TFRState *state, double z); - /*! Extrapolate a state to a given z position without taking into account multiple scattering at layers. Returns false if the track is extrapolated ouside a detector layer or if the particle is replected by the magnetic field*/ + /*! Extrapolate a state to a given z position without taking into account multiple scattering at layers. Returns false if the track is extrapolated ouside a detector layer or if the particle is replected by the magnetic field */ bool PropagateStateNoScattering(TFRState *state, double z); /*! Extrapolate a state to a given z position with a straight line */ void PropagateStateStraight(TFRState *state, double z); - /*! Extrapolate a state to a given z position in a constant magnetic field. Returns false if the particle is replected by the magnetic field*/ + /*! Extrapolate a state to a given z position in a constant magnetic field. Returns false if the particle is replected by the magnetic field */ bool PropagateStateInBField(TFRState *state, double z); - /*! Add the effect ofmultiple scattering at a certain layer to the covariance matrix of the state*/ + /*! Add the effect of multiple scattering at a certain layer to the covariance matrix of the state */ bool AddScatteringToCovariance(TFRState *state, TFRLayer *layer); protected: @@ -69,9 +66,6 @@ class TFRPropagator { /*! The used geometry */ TFRGeometry *m_geo; - /*! Class to deal with multiple scattering */ - TFRMultipleScattering *m_multiplescattering; - /*! take into account multiple scattering or not*/ bool m_useMs; diff --git a/slides/day_4_performance.odp b/slides/day_4_performance.odp index b5ea1ddf052e482b0a3d55d8aec9f0eebb739f7d..3c510be9b5cd9275d14ff46b1b3387a66556d2d1 100644 GIT binary patch delta 18604 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 YzjRy<RR$}AD+RM<=v3YGBPd+`zq=C?i2wiq delta 16249 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 diff --git a/src/detector_sim.cpp b/src/detector_sim.cpp index 262565f..385b9d2 100644 --- a/src/detector_sim.cpp +++ b/src/detector_sim.cpp @@ -25,7 +25,6 @@ #include "../include/TFRParticle.h" #include "../include/TFRGeometry.h" #include "../include/TFRPropagator.h" -#include "../include/TFRMultipleScattering.h" using namespace std; @@ -139,9 +138,6 @@ int main(int argc, char **argv){ TRandom3 *random_ms = new TRandom3(); //multiple scattering random_ms->SetSeed(1); - //set the tool required to simulate the multiple scattering - TFRMultipleScattering *mscattering = new TFRMultipleScattering(); - //I've no clue why the hell in ROOT there aren't nice implementations of iterators, //but just this stupid way (that I even didn't used at my C course during my bachelor) TIter it_event(event_list); @@ -166,23 +162,6 @@ int main(int argc, char **argv){ if(curr_particle->GetCharge() == 0) continue; - /* - //set a TEveRecTrack, required for the propagation of a TEveTrack - TEveRecTrackD *temp_track = new TEveRecTrackD(); - - temp_track->fV.Set(curr_particle->GetVertex()); - temp_track->fP.Set(curr_particle->GetMomentum()); - temp_track->fSign = curr_particle->GetCharge(); - - TEveTrack *prop_track = new TEveTrack(temp_track, detector_geo->GetPropagator()); - - prop_track->GetPropagator()->InitTrack(curr_particle->GetVertex(), - curr_particle->GetCharge()); - - //propagate the particle! - //TEve_track-->MakeTrack(); - */ - //I've no clue why the hell in ROOT there aren't nice implementations of iterators, //but just this stupid way (that I even didn't used at my C course during my bachelor) TIter it_layer((TFRLayers*) detector_geo->GetLayers()); @@ -202,15 +181,6 @@ int main(int argc, char **argv){ TFRMCHit *intersection = new TFRMCHit(*curr_layer); - /* - //check if the intersection is valid - if(prop_track->GetPropagator()->IntersectPlane(temp_track->fP, - curr_layer->GetPosition(), curr_layer->GetOrtVersor(), - intersection_position)){ - - intersection->SetPosition(intersection_position); - */ - //check if the intersection is valid if(propagator->PropagateState(temp_state, curr_layer->GetZ())){ @@ -222,10 +192,10 @@ int main(int argc, char **argv){ if(detector_geo->GetMultipleScattStatus()){ //get the angle by wich the track is reflected (the full angle between track before and after scattering) - double theta_ms = sqrt(2.) * mscattering->GetThetaGauss(*curr_layer, - curr_particle->GetBeta(), - curr_particle->GetMomentumMod(), - curr_particle->GetCharge()); + double theta_ms = sqrt(2.) * detector_geo->GetMultipleScattering()->GetThetaGauss(curr_layer->GetXoverXZero(), + curr_particle->GetBeta(), + curr_particle->GetMomentumMod(), + curr_particle->GetCharge()); //Express the current momentum in the coordinate system where z is along the momentum double sinalpha = temp_state->GetMomentum()[0] @@ -267,19 +237,6 @@ int main(int argc, char **argv){ } //if(detector_geo->GetMultipleScattStatus()) - /* - temp_track->fP.Set(TEveVectorD(pxz * sin(alpha + theta_ms), - temp_track->fP[1], - pxz * cos(alpha + theta_ms))); - */ - - /* - //update the propagator - prop_track = new TEveTrack(temp_track, detector_geo->GetPropagator()); - prop_track->GetPropagator()->InitTrack(temp_track->fV, - curr_particle->GetCharge()); - */ - //add the intersection to the vector of the hits of the particle intersection->SetPosition(TVector3(temp_state->GetX(), temp_state->GetY(), diff --git a/src/fitting_chi2_linear.cpp b/src/fitting_chi2_linear.cpp index 16843b6..708ed01 100644 --- a/src/fitting_chi2_linear.cpp +++ b/src/fitting_chi2_linear.cpp @@ -116,13 +116,13 @@ bool fitStraightTracklets(TFRTrack *track, // now I can finally fit the two tracklets // //-------------------------------------------// - if(!chi2_fit->FitLinear1D_matrix(track_beforeB)){ + if(!chi2_fit->FitLinear1D_matrix(track_beforeB, true, detector_geo)){ std::cout << "Error: problem with linear chi2 fitting of the tracklet before B." << std::endl; track->SetFitStatus(false); return false; } - if(!chi2_fit->FitLinear1D_matrix(track_afterB)){ + if(!chi2_fit->FitLinear1D_matrix(track_afterB, true, detector_geo)){ std::cout << "Error: problem with linear chi2 fitting of the tracklet after B." << std::endl; track->SetFitStatus(false); return false; @@ -181,7 +181,7 @@ bool fitStraightTracklets(TFRTrack *track, // linear fit on the xy plane // //------------------------------// - if(!chi2_fit->FitLinear1D_matrix(track_beforeB, false)){ + if(!chi2_fit->FitLinear1D_matrix(track_beforeB, false, detector_geo)){ std::cout << "Error: problem with linear chi2 fitting of the tracklet before B on the yz plane." << std::endl; track->SetFitStatus(false); return false; @@ -246,7 +246,7 @@ bool extrapolateVertex(TFRTrack *track, //----------------------------// //fit the straight tracklet with the 2D chi2 fit - if(!chi2_fit->FitLinear2D_matrix(track_beforeB)){ + if(!chi2_fit->FitLinear2D_matrix(track_beforeB, detector_geo)){ std::cout << "Error: problem with linear 2D chi2 fitting of the tracklet before B." << std::endl; track->SetFitStatus(false); return false; diff --git a/src/fitting_chi2_quadratic.cpp b/src/fitting_chi2_quadratic.cpp index 494ea6b..34d7e6f 100644 --- a/src/fitting_chi2_quadratic.cpp +++ b/src/fitting_chi2_quadratic.cpp @@ -89,14 +89,14 @@ bool fitStraightAndParabola(TFRTrack *track, //-------------------------------------------// //fit the straight tracklet - if(!chi2_fit->FitLinear1D_matrix(track_beforeB)){ + if(!chi2_fit->FitLinear1D_matrix(track_beforeB, true, detector_geo)){ std::cout << "Error: problem with linear chi2 fitting of the tracklet before B." << std::endl; track->SetFitStatus(false); return false; } //fit the parabolic tracklet - if(!chi2_fit->FitQuadratic1D_matrix(track_inB)){ + if(!chi2_fit->FitQuadratic1D_matrix(track_inB, true, detector_geo)){ std::cout << "Error: problem with parabolic chi2 fitting of the tracklet in B." << std::endl; track->SetFitStatus(false); return false; @@ -152,7 +152,7 @@ bool fitStraightAndParabola(TFRTrack *track, // linear fit on the xy plane // //------------------------------// - if(!chi2_fit->FitLinear1D_matrix(track_beforeB, false)){ + if(!chi2_fit->FitLinear1D_matrix(track_beforeB, false, detector_geo)){ std::cout << "Error: problem with linear chi2 fitting of the tracklet before B on the yz plane." << std::endl; track->SetFitStatus(false); return false; @@ -217,7 +217,7 @@ bool extrapolateVertex(TFRTrack *track, //----------------------------// //fit the straight tracklet with the 2D chi2 fit - if(!chi2_fit->FitLinear2D_matrix(track_beforeB)){ + if(!chi2_fit->FitLinear2D_matrix(track_beforeB, detector_geo)){ std::cout << "Error: problem with linear 2D chi2 fitting of the tracklet before B." << std::endl; track->SetFitStatus(false); return false; -- GitLab