From 78e0495d1f1a23fdaeb4023e0f72108f1de28dfa Mon Sep 17 00:00:00 2001
From: Vadim Kostyukhin <vkost@cern.ch>
Date: Mon, 2 Feb 2015 17:10:50 +0100
Subject: [PATCH] Clean up Coverity issues 14752,13471,12177,12643
 (TrkVKalVrtCore-00-03-54)

        * Remove Coverity issues 14752,13471,12177,12643
	* TrkVKalVrtCore-00-03-54

2015-01-23 Vadim Kostyukhin <Vadim.Kostyukhin@cern.ch>

        * Remove compilation warning
	* TrkVKalVrtCore-00-03-53

2015-01-23 Vadim Kostyukhin <Vadim.Kostyukhin@cern.ch>

        * Multiple Coverity issue corrections
	* TrkVKalVrtCore-00-03-52
---
 .../TrkVKalVrtCore/TrkVKalVrtCore/ForCFT.h    |  9 ++--
 .../TrkVKalVrtCore/TrkVKalVrtCore.h           |  3 +-
 .../TrkVKalVrtCore/TrkVKalVrtCore/WorkArray.h | 21 ++--------
 .../TrkVKalVrtCore/cmt/requirements           |  3 +-
 .../TrkVKalVrtCore/src/CFitCascade.cxx        |  2 +-
 .../TrkVKalVrtCore/src/PrCFit.cxx             |  1 -
 .../TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx | 35 ++++++++++++++++
 .../TrkVKalVrtCore/src/getWorkArray.cxx       | 42 ++++++++++++++++++-
 8 files changed, 89 insertions(+), 27 deletions(-)

diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/ForCFT.h b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/ForCFT.h
index 2edb91667a5..71ba886053c 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/ForCFT.h
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/ForCFT.h
@@ -41,7 +41,7 @@ namespace Trk {
 //
 // temporary vertex in global ref.frame
     double vrtstp[3];        
-    long int kfrm, irob;
+    long int irob;
     double RobustScale;
     double robres[NTrkM];
     short int indtrkmc[NTrkM*8];	/* was [300][8] */
@@ -49,9 +49,12 @@ namespace Trk {
     double IterationPrecision;
  
     ForCFT(){
-      useMassCnst=0; usePhiCnst=0; useThetaCnst=0; usePointingCnst=0;
+      nmcnst=0;
+      useMassCnst=0; usePhiCnst=0; useThetaCnst=0; usePointingCnst=0; usePlaneCnst=0;
       useAprioriVrt=0; usePassNear=0; icht=0; Ap=Bp=Dp=Cp=0.;
-      IterationNumber = 100; IterationPrecision=1.e-3; RobustScale = 1.; irob=0;};
+      IterationNumber = 100; IterationPrecision=1.e-3; RobustScale = 1.; irob=0;
+      localbmag=2.0;   // Safety: standard magnetic field in ID 
+    };
     ~ForCFT(){};
   };
 
diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/TrkVKalVrtCore.h b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/TrkVKalVrtCore.h
index 40bd54a6286..cd91cb3f40a 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/TrkVKalVrtCore.h
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/TrkVKalVrtCore.h
@@ -117,7 +117,8 @@ namespace Trk {
     public:
       VKVertex();
      ~VKVertex();
-      VKVertex(const VKVertex & src);  //copy
+      VKVertex(const VKVertex & src);              //copy
+      VKVertex& operator= (const VKVertex & src);  //assign
 
      public:        // Relative coordinates with respect to refIterV[]
        double Chi2;         // vertex Chi2
diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/WorkArray.h b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/WorkArray.h
index 7a4fe8276dc..f3a088a590a 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/WorkArray.h
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/WorkArray.h
@@ -30,37 +30,22 @@ namespace Trk {
   
     public:
        vkalDynamicArrays(long int NTrkMax);
+       vkalDynamicArrays(const vkalDynamicArrays& );             //copy
+       vkalDynamicArrays& operator=(const vkalDynamicArrays& );  //assign
       ~vkalDynamicArrays();
-      double *get_tt() const;
-      double *get_part() const;
-      double *get_parf0() const;
-      double *get_scale() const;
       double *get_dphi() const;
-      double *get_eps() const;
       double *get_deps() const;
       double *get_drho() const;
       double *get_dtet() const;
-      double *get_phip() const;
-      double *get_phiv() const;
-      double *get_zp() const;
       double *get_dzp() const;
-      double *get_drdp() const;
 
     private:
-      double *tt;
-      double *part;
-      double *parf0;
-      double *scale;
       double *dphi;
-      double *eps;
       double *deps;
       double *drho;
       double *dtet;
-      double *phip;
-      double *phiv;
-      double *zp;
       double *dzp;
-      double *drdp;
+      long int NSIZE;
   };
 
 }
diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/cmt/requirements b/Tracking/TrkVertexFitter/TrkVKalVrtCore/cmt/requirements
index 25382f621c6..18439e1cbef 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/cmt/requirements
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/cmt/requirements
@@ -12,5 +12,4 @@ apply_pattern  installed_library
 
 private
 
-###macro_append cppflags "" Linux " -pg"
-###macro_append cpplinkflags "" Linux " -pg"
+#macro_append cppflags " -pedantic-errors"
diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascade.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascade.cxx
index d3970cf8ecb..0f00d5eadff 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascade.cxx
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascade.cxx
@@ -292,7 +292,7 @@ int fitVertexCascade( VKVertex * vk, int Pointing)
 //
 //  Now standard fit without pointing in cascade but WITH pointing to PV if present
 //
-  double Chi2Old=0.,Chi2Cur; 
+  double Chi2Old=0.,Chi2Cur=0.; 
   for(Iter=0; Iter<100; Iter++){
      Chi2Cur=0.;
      for(iv=0; iv<cascadeEvent_.cascadeNV; iv++){
diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/PrCFit.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/PrCFit.cxx
index 21d8400bacf..6ee9132fbaf 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/PrCFit.cxx
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/PrCFit.cxx
@@ -107,7 +107,6 @@ void prcfit( long int *ntrk, double  *wm, double  *wmfit, double  *bmag, double
     forcft_1.covvrt[3] = vrte[3];
     forcft_1.covvrt[4] = vrte[4];
     forcft_1.covvrt[5] = vrte[5];
-    forcft_1.kfrm = 0;
     forcft_1.irob = 0;
     forcft_1.IterationNumber    = 50;
     forcft_1.IterationPrecision = 1.e-3;
diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx
index 2851ce09bbc..90f180564d3 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx
@@ -127,6 +127,41 @@ namespace Trk {
     for( int i=0; i<(int)src.TrackList.size(); i++) TrackList.push_back( new VKTrack(*(src.TrackList[i])) );
   }
 
+  VKVertex& VKVertex::operator= (const VKVertex & src)        //Assignment operator
+  {
+    if (this!=&src){
+      Chi2=src.Chi2;                         // vertex Chi2
+      useApriorVertex=src.useApriorVertex;    //for a priory vertex position knowledge usage
+      passNearVertex=src.passNearVertex;      // needed for "passing near vertex" constraint
+      passWithTrkCov=src.passWithTrkCov;      //  Vertex, CovVertex, Charge and derivatives 
+      FVC=src.FVC;
+      for( int i=0; i<6; i++) {
+        fitVcov[i]    =src.fitVcov[i];  // range[0:5]
+        apriorVWGT[i] =src.apriorVWGT[i];
+        if(i>=3) continue;
+        fitV[i]    =src.fitV[i];   // range[0:2]
+        iniV[i]    =src.iniV[i];
+        cnstV[i]   =src.cnstV[i];
+        refIterV[i]=src.refIterV[i];
+        refV[i]    =src.refV[i];
+        apriorV[i] =src.apriorV[i];
+        fitMom[i]  = src.fitMom[i];
+      }
+      for( int i=0; i<21; i++){
+        savedVrtMomCov[i]=src.savedVrtMomCov[i];
+        fitCovXYZMom[i]=src.fitCovXYZMom[i];
+      }
+      nextCascadeVrt = 0;
+    //----- Creation of track copies
+      TrackList.clear();
+      tmpArr.clear();
+      ConstraintList.clear();
+      for( int i=0; i<(int)src.TrackList.size(); i++) TrackList.push_back( new VKTrack(*(src.TrackList[i])) );
+    //for( int i=0; i<(int)src.ConstraintList.size(); i++) ConstraintList.push_back( new (*(src.TrackList[i])) );
+    }
+    return *this;
+  }
+
   TWRK::TWRK(){}
   TWRK::~TWRK(){}
 
diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/getWorkArray.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/getWorkArray.cxx
index cf7ce15b69c..4ee926d9142 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/getWorkArray.cxx
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/getWorkArray.cxx
@@ -7,7 +7,7 @@
 namespace Trk {
 
 vkalDynamicArrays::vkalDynamicArrays(long int NTrkMax ) {
-
+    NSIZE  = NTrkMax;
     dphi   = new double[NTrkMax];
     deps   = new double[NTrkMax];
     drho   = new double[NTrkMax];
@@ -15,6 +15,46 @@ vkalDynamicArrays::vkalDynamicArrays(long int NTrkMax ) {
     dzp    = new double[NTrkMax];
 }
 
+vkalDynamicArrays::vkalDynamicArrays(const vkalDynamicArrays & src ) {  //copy
+    NSIZE=src.NSIZE;
+    dphi   = new double[NSIZE];
+    deps   = new double[NSIZE];
+    drho   = new double[NSIZE];
+    dtet   = new double[NSIZE];
+    dzp    = new double[NSIZE];
+    for(int i=0; i<NSIZE; i++){
+      dphi[i]=src.dphi[i];
+      deps[i]=src.deps[i];
+      drho[i]=src.drho[i];
+      dtet[i]=src.dtet[i];
+      dzp[i] =src.dzp[i];
+    }
+}
+
+vkalDynamicArrays& vkalDynamicArrays::operator= (const vkalDynamicArrays & src ) {  //assignment
+    if (this!=&src) {
+      NSIZE=src.NSIZE;
+      if(dphi) delete[] dphi;
+      if(deps) delete[] deps;
+      if(drho) delete[] drho;
+      if(dtet) delete[] dtet;
+      if(dzp)  delete[] dzp;
+      dphi   = new double[NSIZE];
+      deps   = new double[NSIZE];
+      drho   = new double[NSIZE];
+      dtet   = new double[NSIZE];
+      dzp    = new double[NSIZE];
+      for(int i=0; i<NSIZE; i++){
+	dphi[i]=src.dphi[i];
+	deps[i]=src.deps[i];
+	drho[i]=src.drho[i];
+	dtet[i]=src.dtet[i];
+	dzp[i] =src.dzp[i];
+      }
+    }
+    return *this;
+}
+
 vkalDynamicArrays::~vkalDynamicArrays() {
     delete[] dphi;
     delete[] deps;
-- 
GitLab