From 658f043f1c8b861da4fdbe724755669d7b66b408 Mon Sep 17 00:00:00 2001
From: myliu <201916234@mail.sdu.edu.cn>
Date: Thu, 5 Jan 2023 22:59:48 +0800
Subject: [PATCH] Add a script to run the RecGenfitAlgSDT

---
 Examples/options/tut_detsim_rec_SDT.py        | 322 ++++++++++++++++++
 .../src/TruthTracker/TruthTrackerAlg.cpp      |  32 +-
 .../src/TruthTracker/TruthTrackerAlg.h        |   9 +-
 3 files changed, 341 insertions(+), 22 deletions(-)
 create mode 100644 Examples/options/tut_detsim_rec_SDT.py

diff --git a/Examples/options/tut_detsim_rec_SDT.py b/Examples/options/tut_detsim_rec_SDT.py
new file mode 100644
index 00000000..02ac7612
--- /dev/null
+++ b/Examples/options/tut_detsim_rec_SDT.py
@@ -0,0 +1,322 @@
+#!/usr/bin/env python
+from Gaudi.Configuration import *
+
+from Configurables import k4DataSvc
+dsvc = k4DataSvc("EventDataSvc")
+
+from Configurables import RndmGenSvc, HepRndm__Engine_CLHEP__RanluxEngine_
+seed = [10]
+# rndmengine = HepRndm__Engine_CLHEP__RanluxEngine_() # The default engine in Gaudi
+rndmengine = HepRndm__Engine_CLHEP__HepJamesRandom_("RndmGenSvc.Engine") # The default engine in Geant4
+rndmengine.SetSingleton = True
+rndmengine.Seeds = seed
+
+rndmgensvc = RndmGenSvc("RndmGenSvc")
+rndmgensvc.Engine = rndmengine.name()
+
+##############################################################################
+# Event Data Svc
+##############################################################################
+from Configurables import k4DataSvc
+dsvc = k4DataSvc("EventDataSvc")
+
+
+# option for standalone tracker study
+geometry_option = "CRD_o1_v01/CRD_o1_v01-onlyTracker.xml"
+#geometry_option = "CRD_o1_v01/CRD_o1_v01-onlyTracker_noWire_18.xml"
+#geometry_option = "CRD_o1_v01/CRD_o1_v01.xml"
+
+if not os.getenv("DETCRDROOT"):
+    print("Can't find the geometry. Please setup envvar DETCRDROOT." )
+    sys.exit(-1)
+
+geometry_path = os.path.join(os.getenv("DETCRDROOT"), "compact", geometry_option)
+if not os.path.exists(geometry_path):
+    print("Can't find the compact geometry file: %s"%geometry_path)
+    sys.exit(-1)
+
+from Configurables import GeomSvc
+geosvc = GeomSvc("GeomSvc")
+geosvc.compact = geometry_path
+
+##############################################################################
+# Physics Generator
+##############################################################################
+from Configurables import GenAlgo
+from Configurables import GtGunTool
+from Configurables import StdHepRdr
+from Configurables import SLCIORdr
+from Configurables import HepMCRdr
+from Configurables import GenPrinter
+gun = GtGunTool("GtGunTool")
+gun.Particles = ["mu-"]
+gun.EnergyMins = [40] # GeV
+gun.EnergyMaxs = [40] # GeV
+gun.ThetaMins  = [85]    # deg
+gun.ThetaMaxs  = [85]  # deg
+gun.PhiMins    = [0]    # deg
+gun.PhiMaxs    = [360]  # deg
+# stdheprdr = StdHepRdr("StdHepRdr")
+# stdheprdr.Input = "/cefs/data/stdhep/CEPC250/2fermions/E250.Pbhabha.e0.p0.whizard195/bhabha.e0.p0.00001.stdhep"
+# lciordr = SLCIORdr("SLCIORdr")
+# lciordr.Input = "/cefs/data/stdhep/lcio250/signal/Higgs/E250.Pbbh.whizard195/E250.Pbbh_X.e0.p0.whizard195/Pbbh_X.e0.p0.00001.slcio"
+# hepmcrdr = HepMCRdr("HepMCRdr")
+# hepmcrdr.Input = "example_UsingIterators.txt"
+
+genprinter = GenPrinter("GenPrinter")
+
+genalg = GenAlgo("GenAlgo")
+genalg.GenTools = ["GtGunTool"]
+#genalg.GenTools = ["StdHepRdr"]
+# genalg.GenTools = ["StdHepRdr", "GenPrinter"]
+# genalg.GenTools = ["SLCIORdr", "GenPrinter"]
+# genalg.GenTools = ["HepMCRdr", "GenPrinter"]
+
+##############################################################################
+# Detector Simulation
+##############################################################################
+from Configurables import DetSimSvc
+detsimsvc = DetSimSvc("DetSimSvc")
+
+from Configurables import DetSimAlg
+detsimalg = DetSimAlg("DetSimAlg")
+detsimalg.RandomSeeds = seed
+# detsimalg.VisMacs = ["vis.mac"]
+detsimalg.RunCmds = [
+    #"/tracking/verbose 1",
+]
+detsimalg.AnaElems = [
+    # example_anatool.name()
+    # "ExampleAnaElemTool"
+    "Edm4hepWriterAnaElemTool"
+]
+detsimalg.RootDetElem = "WorldDetElemTool"
+
+from Configurables import AnExampleDetElemTool
+example_dettool = AnExampleDetElemTool("AnExampleDetElemTool")
+
+dedxoption = "BetheBlochEquationDedxSimTool"
+from Configurables import DriftChamberSensDetTool
+dc_sensdettool = DriftChamberSensDetTool("DriftChamberSensDetTool")
+dc_sensdettool.DedxSimTool = dedxoption
+
+from Configurables import DummyDedxSimTool
+from Configurables import BetheBlochEquationDedxSimTool
+
+if dedxoption == "DummyDedxSimTool":
+    dedx_simtool = DummyDedxSimTool("DummyDedxSimTool")
+elif dedxoption == "BetheBlochEquationDedxSimTool":
+    dedx_simtool = BetheBlochEquationDedxSimTool("BetheBlochEquationDedxSimTool")
+    dedx_simtool.material_Z = 2
+    dedx_simtool.material_A = 4
+    dedx_simtool.scale = 10
+    dedx_simtool.resolution = 0.0001
+    
+from Configurables import MarlinEvtSeeder
+evtseeder = MarlinEvtSeeder("EventSeeder")
+
+from Configurables import GearSvc
+gearsvc = GearSvc("GearSvc")
+
+from Configurables import TrackSystemSvc
+tracksystemsvc = TrackSystemSvc("TrackSystemSvc")
+
+# digitization
+vxdhitname  = "VXDTrackerHits"
+sithitname  = "SITTrackerHits"
+dchitname   = "DCTrackerHits"
+sethitname  = "SETTrackerHits"
+setspname   = "SETSpacePoints"
+ftdhitname  = "FTDTrackerHits"
+ftdspname   = "FTDSpacePoints"
+from Configurables import PlanarDigiAlg
+digiVXD = PlanarDigiAlg("VXDDigi")
+digiVXD.SimTrackHitCollection = "VXDCollection"
+digiVXD.TrackerHitCollection = vxdhitname
+digiVXD.ResolutionU = [0.0028, 0.006, 0.004, 0.004, 0.004, 0.004]
+digiVXD.ResolutionV = [0.0028, 0.006, 0.004, 0.004, 0.004, 0.004]
+digiVXD.UsePlanarTag = True
+#digiVXD.OutputLevel = DEBUG
+
+digiSIT = PlanarDigiAlg("SITDigi")
+digiSIT.IsStrip = False
+digiSIT.SimTrackHitCollection = "SITCollection"
+digiSIT.TrackerHitCollection = sithitname
+digiSIT.TrackerHitAssociationCollection = "SITTrackerHitAssociation"
+digiSIT.ResolutionU = [0.0072]
+digiSIT.ResolutionV = [0.086]
+digiSIT.UsePlanarTag = True
+#digiSIT.OutputLevel = DEBUG
+
+digiSET = PlanarDigiAlg("SETDigi")
+digiSET.IsStrip = False
+digiSET.SimTrackHitCollection = "SETCollection"
+digiSET.TrackerHitCollection = sethitname
+digiSET.TrackerHitAssociationCollection = "SETTrackerHitAssociation"
+digiSET.ResolutionU = [0.0072]
+digiSET.ResolutionV = [0.086]
+digiSET.UsePlanarTag = True
+#digiSET.OutputLevel = DEBUG
+
+digiFTD = PlanarDigiAlg("FTDDigi")
+digiFTD.IsStrip = False
+digiFTD.SimTrackHitCollection = "FTDCollection"
+digiFTD.TrackerHitCollection = ftdhitname
+digiFTD.TrackerHitAssociationCollection = "FTDTrackerHitAssociation"
+digiFTD.ResolutionU = [0.003, 0.003, 0.0072, 0.0072, 0.0072, 0.0072, 0.0072]
+digiFTD.ResolutionV = [0.003, 0.003, 0.0072, 0.0072, 0.0072, 0.0072, 0.0072]
+digiFTD.UsePlanarTag = True
+#digiFTD.OutputLevel = DEBUG
+
+from Configurables import DCHDigiAlg
+digiDC = DCHDigiAlg("DCHDigi")
+digiDC.DigiDCHitCollection = dchitname
+digiDC.WriteAna = True
+#digiDC.mom_threshold=98.
+#digiDC.mom_threshold_high=102.
+#digiDC.OutputLevel = DEBUG
+
+# two strip tracker hits -> one space point
+from Configurables import SpacePointBuilderAlg
+spFTD = SpacePointBuilderAlg("FTDBuilder")
+spFTD.TrackerHitCollection = ftdhitname
+spFTD.TrackerHitAssociationCollection = "FTDTrackerHitAssociation"
+spFTD.SpacePointCollection = ftdspname
+spFTD.SpacePointAssociationCollection = "FTDSpacePointAssociation"
+#spFTD.OutputLevel = DEBUG
+
+# tracking
+from Configurables import SiliconTrackingAlg
+tracking = SiliconTrackingAlg("SiliconTracking")
+tracking.HeaderCol = "EventHeader"
+tracking.VTXHitCollection = vxdhitname
+tracking.SITHitCollection = sithitname
+tracking.FTDPixelHitCollection = ftdhitname
+tracking.FTDSpacePointCollection = ftdspname
+tracking.SITRawHitCollection = "NotNeedForPixelSIT"
+tracking.FTDRawHitCollection = ftdhitname
+tracking.UseSIT = True
+tracking.SmoothOn = False
+#tracking.OutputLevel = DEBUG
+
+from Configurables import ForwardTrackingAlg
+forward = ForwardTrackingAlg("ForwardTracking")
+forward.FTDPixelHitCollection = ftdhitname
+forward.FTDSpacePointCollection = ftdspname
+forward.FTDRawHitCollection = ftdhitname
+forward.Chi2ProbCut = 0.0
+forward.HitsPerTrackMin = 3
+forward.BestSubsetFinder = "SubsetSimple"
+forward.Criteria = ["Crit2_DeltaPhi","Crit2_StraightTrackRatio","Crit3_3DAngle","Crit3_ChangeRZRatio","Crit3_IPCircleDist","Crit4_3DAngleChange","Crit4_DistToExtrapolation",
+                    "Crit2_DeltaRho","Crit2_RZRatio","Crit3_PT"]
+forward.CriteriaMin = [0,  0.9,  0,  0.995, 0,  0.8, 0,   20,  1.002, 0.1,      0,   0.99, 0,    0.999, 0,   0.99, 0]
+forward.CriteriaMax = [30, 1.02, 10, 1.015, 20, 1.3, 1.0, 150, 1.08,  99999999, 0.8, 1.01, 0.35, 1.001, 1.5, 1.01, 0.05]
+#forward.OutputLevel = DEBUG
+
+from Configurables import TrackSubsetAlg
+subset = TrackSubsetAlg("TrackSubset")
+subset.TrackInputCollections = ["ForwardTracks", "SiTracks"]
+subset.RawTrackerHitCollections = [vxdhitname, sithitname, ftdhitname, ftdspname]
+subset.TrackSubsetCollection = "SubsetTracks"
+#subset.OutputLevel = DEBUG
+
+##TODO: DC reconstruction, as preliminary, use Clupatra like as TPC
+#from Configurables import ClupatraAlg
+#clupatra = ClupatraAlg("Clupatra")
+#clupatra.TPCHitCollection = dchitname
+#clupatra.DistanceCut = 100.
+#clupatra.MaxDeltaChi2 = 100.
+#clupatra.Chi2Cut = 150.
+##clupatra.OutputLevel = DEBUG
+#
+#from Configurables import FullLDCTrackingAlg
+#full = FullLDCTrackingAlg("FullTracking")
+#full.VTXTrackerHits = vxdhitname
+#full.SITTrackerHits = sithitname
+#full.TPCTrackerHits = dchitname # add TPC or DC tracker hit here, if TPC or DC track is set by full.TPCTracks
+#full.SETTrackerHits = sethitname
+#full.FTDPixelTrackerHits = ftdhitname
+#full.FTDSpacePoints = ftdspname
+#full.SITRawHits     = "NotNeedForPixelSIT"
+#full.SETRawHits     = "NotNeedForPixelSET"
+#full.FTDRawHits     = ftdhitname
+#full.TPCTracks = "ClupatraTracks" # add standalone TPC or DC track here
+#full.SiTracks  = "SubsetTracks"
+#full.OutputTracks  = "MarlinTrkTracks"
+#full.SITHitToTrackDistance = 3.
+#full.SETHitToTrackDistance = 5.
+##full.OutputLevel = DEBUG
+#
+##TODO: more reconstruction, PFA etc.
+
+from Configurables import TruthTrackerAlg
+truthTrackerAlg = TruthTrackerAlg("TruthTrackerAlg")
+truthTrackerAlg.maxDigiCut=500
+truthTrackerAlg.useSi=True
+truthTrackerAlg.hist=True
+#truthTrackerAlg.useNoiseHits=True
+truthTrackerAlg.smearHits=True
+#truthTrackerAlg.useFirstHitForDC=True
+#truthTrackerAlg.useIdealHit=False
+truthTrackerAlg.DigiDCHitCollection="DCTrackerHits"
+#truthTrackerAlg.OutputLevel=DEBUG
+##############################################################################
+# GenfitAlg
+##############################################################################
+from Configurables import RecGenfitAlgSDT
+recGenfitAlgSDT = RecGenfitAlgSDT("RecGenfitAlgSDT")
+recGenfitAlgSDT.debugPid=1
+#recGenfitAlgSDT.debug=10
+#recGenfitAlgSDT.debugGenfit=10000
+recGenfitAlgSDT.DigiDCHitCollection="DCTrackerHits"
+recGenfitAlgSDT.SmearDCHitAssociationCollection = "SmearDCHitAssociationCollection"
+#recGenfitAlgSDT.OutputLevel=DEBUG
+recGenfitAlgSDT.measurementTypeSi=1 # -1: not use, 0:use space point, 1:use detector measurment
+recGenfitAlgSDT.measurementTypeDC=1 # -1: not use, 0:use space point, 1:use detector measurment
+#recGenfitAlgSDT.sigmaHitU=[0.11, 0.0028, 0.006, 0.004, 0.004, 0.004, 0.004]
+#recGenfitAlgSDT.sigmaHitV=[0.2, 0.0028, 0.006, 0.004, 0.004, 0.004, 0.004]
+
+from Configurables import NTupleSvc
+ntsvc = NTupleSvc("NTupleSvc")
+ntsvc.Output = ["MyTuples DATAFILE='DCH_digi.root' OPT='NEW' TYP='ROOT'",
+    "TruthTrackerAlg DATAFILE='truthTracker.root' OPT='NEW' TYP='ROOT'",
+    "RecGenfitAlgSDT DATAFILE='fit.root' OPT='NEW' TYP='ROOT'"
+]
+
+###############################################################################
+## Event service
+###############################################################################
+#from Configurables import k4DataSvc
+#dsvc = k4DataSvc("EventDataSvc",
+#    #input = "CRD-o1-v01-SimDigi00_1k.root"
+#    input = "test-detsim10.root"
+#)
+#from Configurables import PodioInput
+#podioinput = PodioInput("PodioReader", collections=[
+#        #"EventHeader",
+#        "MCParticle",
+#        "DriftChamberHitsCollection",
+#        "VXDCollection",
+#        "SITCollection",
+#        "SETCollection",
+#        #"DCHitAssociationCollection",
+#])
+
+# output
+from Configurables import PodioOutput
+out = PodioOutput("outputalg")
+out.filename = "CRD-o1-v01-onlyTracker.root"
+out.outputCommands = ["keep *"]
+
+# ApplicationMgr
+from Configurables import ApplicationMgr
+ApplicationMgr(
+    #TopAlg = [ genalg, detsimalg, digiVXD, digiSIT, digiSET, digiFTD, spFTD, digiDC, tracking, forward, subset, out],
+    #TopAlg = [podioinput,  digiVXD, digiSIT, digiSET, digiFTD, spFTD, digiDC, tracking, forward, subset, truthTrackerAlg, recGenfitAlgSDT, out],
+    TopAlg = [genalg, detsimalg, digiVXD, digiSIT, digiSET, digiFTD, spFTD, digiDC, tracking, forward, subset, truthTrackerAlg, recGenfitAlgSDT, out],
+    EvtSel = 'NONE',
+    EvtMax = 10,
+    ExtSvc = [rndmengine, rndmgensvc, dsvc, evtseeder, geosvc, gearsvc, ntsvc],
+    HistogramPersistency = 'ROOT',
+    OutputLevel = ERROR
+)
diff --git a/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.cpp b/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.cpp
index 7b2b7afe..0d5100b6 100644
--- a/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.cpp
+++ b/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.cpp
@@ -232,7 +232,7 @@ StatusCode TruthTrackerAlg::execute()
     //mcRecoTrackerAssociationCol=m_mcRecoParticleAssociation.get();
 
     ///New SDT track
-    edm4hep::MutableTrack sdtTk=sdtTkCol->create();
+    edm4hep::Track sdtTk=sdtTkCol->create();
 
     int nVXDHit=0;
     int nSITHit=0;
@@ -316,7 +316,7 @@ StatusCode TruthTrackerAlg::execute()
 
     if(m_useDC){
         ///Create DC Track
-        edm4hep::MutableTrack dcTrack=dcTrackCol->create();
+        edm4hep::Track dcTrack=dcTrackCol->create();
 
         //Create TrackState
         edm4hep::TrackState trackStateFirstDCHit;
@@ -458,10 +458,8 @@ void TruthTrackerAlg::getTrackStateFromMcParticle(
         trackState.Z0=helix.getZ0();
         trackState.tanLambda=helix.getTanLambda();
         trackState.referencePoint=helix.getReferencePoint();
-
-        decltype(trackState.covMatrix) covMatrix;
-        for(int i=0;i<covMatrix.size();i++){covMatrix[i]=999.;}//FIXME
-
+        std::array<float,15> covMatrix;
+        for(int i=0;i<15;i++){covMatrix[i]=1.;}//FIXME
         trackState.covMatrix=covMatrix;
 
         getCircleFromPosMom(pos,mom,B[2]/dd4hep::tesla,mcParticle.getCharge(),m_helixRadius,m_helixXC,m_helixYC);
@@ -528,8 +526,8 @@ bool TruthTrackerAlg::getTrackStateFirstHit(
         trackState.Z0=helix.getZ0();
         trackState.tanLambda=helix.getTanLambda();
         trackState.referencePoint=helix.getReferencePoint();
-        std::array<float,21> covMatrix;
-        for(int i=0;i<21;i++){covMatrix[i]=100.;}//FIXME
+        std::array<float,15> covMatrix;
+        for(int i=0;i<15;i++){covMatrix[i]=100.;}//FIXME
         trackState.covMatrix=covMatrix;
         debug()<<"first hit trackState "<<trackState<<endmsg;
         return true;
@@ -593,7 +591,7 @@ void TruthTrackerAlg::debugEvent()
 
 int TruthTrackerAlg::addIdealHitsToTk(DataHandle<edm4hep::TrackerHitCollection>&
         colHandle, edm4hep::TrackerHitCollection*& truthTrackerHitCol,
-        edm4hep::MutableTrack& track, const char* msg,int nHitAdded)
+        edm4hep::Track& track, const char* msg,int nHitAdded)
 {
     if(nHitAdded>0) return nHitAdded;
     int nHit=0;
@@ -616,7 +614,7 @@ int TruthTrackerAlg::addIdealHitsToTk(DataHandle<edm4hep::TrackerHitCollection>&
 
         //add modified hit
         auto tmpHit = truthTrackerHitCol->create();
-        tmpHit=hit.clone();
+        tmpHit=hit;
         tmpHit.setTime(fabs(docaIdeal)*1e3/40.);//40#um/ns, drift time in ns
         track.addToTrackerHits(tmpHit);
 
@@ -667,7 +665,7 @@ int TruthTrackerAlg::makeNoiseHit(edm4hep::SimTrackerHitCollection* SimVec,
         trkHit.setCellID(wcellid);
         trkHit.setTime(pocaTime);
         trkHit.setEDep(mcHit.getEDep());
-        //trkHit.setEdx(mcHit.getEdx());
+        trkHit.setEdx(mcHit.getEdx());
         trkHit.setPosition(mcHit.getPosition());
         trkHit.setCovMatrix(mcHit.getCovMatrix());
         for(int iAsso=0;iAsso<(int) assoHits->size();iAsso++)
@@ -755,7 +753,7 @@ int TruthTrackerAlg::smearDCTkhit(DataHandle<edm4hep::TrackerHitCollection>&
         smearHit.setQuality(hit.getQuality());
         smearHit.setEDep(hit.getEDep());
         smearHit.setEDepError(hit.getEDepError());
-        //smearHit.setEdx(hit.getEdx());
+        smearHit.setEdx(hit.getEdx());
         smearHit.setPosition(hit.getPosition());
         smearHit.setCovMatrix(hit.getCovMatrix());
         smearHit.addToRawHits(hit.getObjectID());
@@ -791,7 +789,7 @@ int TruthTrackerAlg::smearDCTkhit(DataHandle<edm4hep::TrackerHitCollection>&
 }
 
 int TruthTrackerAlg::addHitsToTk(DataHandle<edm4hep::TrackerHitCollection>&
-        colHandle, edm4hep::MutableTrack& track, const char* msg,int nHitAdded)
+        colHandle, edm4hep::Track& track, const char* msg,int nHitAdded)
 {
     if(nHitAdded>0) return nHitAdded;
     int nHit=0;
@@ -808,7 +806,7 @@ int TruthTrackerAlg::addHitsToTk(DataHandle<edm4hep::TrackerHitCollection>&
 int TruthTrackerAlg::addSimHitsToTk(
         DataHandle<edm4hep::SimTrackerHitCollection>& colHandle,
         edm4hep::TrackerHitCollection*& truthTrackerHitCol,
-        edm4hep::MutableTrack& track, const char* msg,int nHitAdded)
+        edm4hep::Track& track, const char* msg,int nHitAdded)
 {
     if(nHitAdded>0) return nHitAdded;
     int nHit=0;
@@ -863,12 +861,12 @@ int TruthTrackerAlg::addSimHitsToTk(
 }
 
 int TruthTrackerAlg::addHotsToTk(edm4hep::Track& sourceTrack,
-        edm4hep::MutableTrack& targetTrack, int hitType,const char* msg,int nHitAdded)
+        edm4hep::Track& targetTrack, int hitType,const char* msg,int nHitAdded)
 {
     if(nHitAdded>0) return nHitAdded;
     int nHit=0;
     for(unsigned int iHit=0;iHit<sourceTrack.trackerHits_size();iHit++){
-        edm4hep::TrackerHit hit=sourceTrack.getTrackerHits(iHit);
+        edm4hep::ConstTrackerHit hit=sourceTrack.getTrackerHits(iHit);
         UTIL::BitField64 encoder(lcio::ILDCellID0::encoder_string);
         encoder.setValue(hit.getCellID());
         if(encoder[lcio::ILDCellID0::subdet]==hitType){
@@ -887,7 +885,7 @@ int TruthTrackerAlg::nHotsOnTrack(edm4hep::Track& track, int hitType)
 {
     int nHit=0;
     for(unsigned int iHit=0;iHit<track.trackerHits_size();iHit++){
-        edm4hep::TrackerHit hit=track.getTrackerHits(iHit);
+        edm4hep::ConstTrackerHit hit=track.getTrackerHits(iHit);
         UTIL::BitField64 encoder(lcio::ILDCellID0::encoder_string);
         encoder.setValue(hit.getCellID());
         if(encoder[lcio::ILDCellID0::subdet]==hitType){
diff --git a/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.h b/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.h
index 563d9854..32136cd4 100644
--- a/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.h
+++ b/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.h
@@ -22,7 +22,6 @@ namespace edm4hep {
     class TrackerHitCollection;
     class TrackCollection;
     class Track;
-    class MutableTrack;
     class TrackState;
     class ReconstructedParticleCollection;
     class MCRecoTrackerAssociationCollection;
@@ -43,7 +42,7 @@ class TruthTrackerAlg: public GaudiAlgorithm
                 mcParticleCol, edm4hep::TrackState& stat);
         int addSimHitsToTk(DataHandle<edm4hep::SimTrackerHitCollection>&
                 colHandle, edm4hep::TrackerHitCollection*& truthTrackerHitCol,
-                edm4hep::MutableTrack& track, const char* msg,int nHitAdded);
+                edm4hep::Track& track, const char* msg,int nHitAdded);
         int smearDCTkhit(DataHandle<edm4hep::TrackerHitCollection>&
                 colHandle,DataHandle<edm4hep::TrackerHitCollection>& smearCol,
                 DataHandle<edm4hep::SimTrackerHitCollection>& SimDCHitCol,
@@ -52,12 +51,12 @@ class TruthTrackerAlg: public GaudiAlgorithm
                 DataHandle<edm4hep::MCRecoTrackerAssociationCollection>& AssoSmearDCHitCol,
                 double resX, double resY, double resZ);
         int addHitsToTk(DataHandle<edm4hep::TrackerHitCollection>&
-                colHandle, edm4hep::MutableTrack& track, const char* msg,int nHitAdded);
+                colHandle, edm4hep::Track& track, const char* msg,int nHitAdded);
         int addIdealHitsToTk(DataHandle<edm4hep::TrackerHitCollection>&
                 colHandle, edm4hep::TrackerHitCollection*& truthTrackerHitCol,
-                edm4hep::MutableTrack& track, const char* msg,int nHitAdded);
+                edm4hep::Track& track, const char* msg,int nHitAdded);
 
-        int addHotsToTk(edm4hep::Track& sourceTrack,edm4hep::MutableTrack&
+        int addHotsToTk(edm4hep::Track& sourceTrack,edm4hep::Track&
                 targetTrack, int hitType,const char* msg,int nHitAdded);
         int nHotsOnTrack(edm4hep::Track& track, int hitType);
         int trackerHitColSize(DataHandle<edm4hep::TrackerHitCollection>& hitCol);
-- 
GitLab