From 5da0b69c3361f7685313c0c5fbd413963461b789 Mon Sep 17 00:00:00 2001 From: Victor Schwan <162138084+Victor-Schwan@users.noreply.github.com> Date: Wed, 28 Aug 2024 20:16:22 +0200 Subject: [PATCH] Make FullLDC tracking more flexible (#72) * cld tracking detector names in setupGEOM added; otherwise _sectors empty removed printing of subdetector names around line 949: streamlog of SIT layer check more verbose; FullLDCTracking_MarlinTrk formatted using .clang-format vscode setting json files added introduced vars for subdetector names in setupGeom; less hardcoding Relaxation of the condition on the vectors V and Z, antiparallel also permitted; experimental modification tasks.json added rm vscode specific files * ProcessorParameters for more Subdetectors added * Revert changes to SiliconTracking_MarlinTrk from a45db09c06ebf647d675d2ee5e2c160fc49e36c; removed CLD detector names as v11 reco uses ConformalTracking now --- .../include/FullLDCTracking_MarlinTrk.h | 6 + .../src/FullLDCTracking_MarlinTrk.cc | 160 +++++++++--------- 2 files changed, 86 insertions(+), 80 deletions(-) diff --git a/source/Refitting/include/FullLDCTracking_MarlinTrk.h b/source/Refitting/include/FullLDCTracking_MarlinTrk.h index 60810b0..0c0ae21 100644 --- a/source/Refitting/include/FullLDCTracking_MarlinTrk.h +++ b/source/Refitting/include/FullLDCTracking_MarlinTrk.h @@ -334,6 +334,12 @@ class FullLDCTracking_MarlinTrk : public Processor { std::string _LDCTrackCollection{}; + std::string m_vtxDetName{}; + std::string m_forwardTrackerDetName{}; + std::string m_innerBarrelTrackerDetName{}; + std::string m_vertexEndcapDetName{}; + std::string m_siliconExternalTrackerDetName{}; + TrackExtendedVec _allSiTracks{}; TrackExtendedVec _allTPCTracks{}; TrackExtendedVec _allCombinedTracks{}; diff --git a/source/Refitting/src/FullLDCTracking_MarlinTrk.cc b/source/Refitting/src/FullLDCTracking_MarlinTrk.cc index 24c12cb..acac40d 100644 --- a/source/Refitting/src/FullLDCTracking_MarlinTrk.cc +++ b/source/Refitting/src/FullLDCTracking_MarlinTrk.cc @@ -1,4 +1,5 @@ #include "FullLDCTracking_MarlinTrk.h" + #include #include #include @@ -10,43 +11,38 @@ #include #include #include +#include +#include +#include + #include #include +#include #include #include "ClusterShapes.h" -#include -#include -#include - #include "DD4hep/DD4hepUnits.h" #include "DD4hep/Detector.h" #include "DDRec/DetectorData.h" - -#include -#include - #include "MarlinTrk/Factory.h" #include "MarlinTrk/HelixFit.h" #include "MarlinTrk/HelixTrack.h" #include "MarlinTrk/IMarlinTrack.h" -#include "MarlinTrk/MarlinTrkUtils.h" - #include "MarlinTrk/LCIOTrackPropagators.h" - #include "MarlinTrk/MarlinTrkDiagnostics.h" +#include "MarlinTrk/MarlinTrkUtils.h" #ifdef MARLINTRK_DIAGNOSTICS_ON #include "MarlinTrk/DiagnosticsController.h" #endif -#include "UTIL/LCTrackerConf.h" #include #include #include #include +#include "UTIL/LCTrackerConf.h" #include "gsl/gsl_cdf.h" #include "gsl/gsl_randist.h" @@ -132,6 +128,21 @@ FullLDCTracking_MarlinTrk::FullLDCTracking_MarlinTrk() : Processor("FullLDCTrack std::string("LDCTracks")); // steering parameters + registerProcessorParameter("VertexDetectorName", "Name of the vertex (barrel) tracking detector in the geometry", + m_vtxDetName, std::string("VXD")); + + registerProcessorParameter("ForwardTrackerDetectorName", "Name of the forward tracking detector in the geometry", + m_forwardTrackerDetName, std::string("FTD")); + + registerProcessorParameter("InnerTrackerDetectorName", "Name of the inner (barrel) tracking detector in the geometry", + m_innerBarrelTrackerDetName, std::string("SIT")); + + registerProcessorParameter("VertexEndcapDetectorName", "Name of the vertex endcap tracking detector in the geometry", + m_vertexEndcapDetName, std::string("VertexEndcap")); + + registerProcessorParameter("SiliconExternalDetectorName", + "Name of the silicon external tracking detector in the geometry", + m_siliconExternalTrackerDetName, std::string("SET")); registerProcessorParameter("D0CutForMerging", "Cut on D0 difference for merging of Si and TPC segments", _d0CutForMerging, float(500.0)); @@ -179,15 +190,15 @@ FullLDCTracking_MarlinTrk::FullLDCTracking_MarlinTrk() : Processor("FullLDCTrack registerProcessorParameter("PtCutToMergeTPCSegments", "Cut on Pt of tracks for merging TPC segments", _PtCutToMergeTPC, float(1.2)); - registerProcessorParameter( - "cosThetaCutHighPtMerge", - "Cut on cos theta between the two momentum vectors when considering merger of high Pt tracks", - _cosThetaCutHighPtMerge, float(0.99)); + registerProcessorParameter("cosThetaCutHighPtMerge", + "Cut on cos theta between the two momentum vectors when considering " + "merger of high Pt tracks", + _cosThetaCutHighPtMerge, float(0.99)); - registerProcessorParameter( - "cosThetaCutSoftHighPtMerge", - "cut on cos theta between the two momentum vectors when considering merger of high Pt tracks for softer dp/p cut", - _cosThetaCutSoftHighPtMerge, float(0.998)); + registerProcessorParameter("cosThetaCutSoftHighPtMerge", + "cut on cos theta between the two momentum vectors when considering " + "merger of high Pt tracks for softer dp/p cut", + _cosThetaCutSoftHighPtMerge, float(0.998)); registerProcessorParameter("momDiffCutHighPtMerge", "cut on dp/p when considering merger of high Pt tracks", _momDiffCutHighPtMerge, float(0.01)); @@ -196,18 +207,19 @@ FullLDCTracking_MarlinTrk::FullLDCTracking_MarlinTrk() : Processor("FullLDCTrack "softer cut on dp/p when considering merger of high Pt tracks", _momDiffCutSoftHighPtMerge, float(0.25)); - registerProcessorParameter( - "hitDistanceCutHighPtMerge", - "cut on 3D distance between hit and helix extrapolation when considering merger of high Pt tracks", - _hitDistanceCutHighPtMerge, float(25.0)); + registerProcessorParameter("hitDistanceCutHighPtMerge", + "cut on 3D distance between hit and helix extrapolation when considering " + "merger of high Pt tracks", + _hitDistanceCutHighPtMerge, float(25.0)); - registerProcessorParameter( - "maxHitDistanceCutHighPtMerge", - "cut for max 3D distance between any hit and helix extrapolation when considering merger of high Pt tracks", - _maxHitDistanceCutHighPtMerge, float(50.0)); + registerProcessorParameter("maxHitDistanceCutHighPtMerge", + "cut for max 3D distance between any hit and helix extrapolation when " + "considering merger of high Pt tracks", + _maxHitDistanceCutHighPtMerge, float(50.0)); registerProcessorParameter("maxFractionOfOutliersCutHighPtMerge", - "cut on maximum fraction of outliers when considering merger of high Pt tracks", + "cut on maximum fraction of outliers when " + "considering merger of high Pt tracks", _maxFractionOfOutliersCutHighPtMerge, float(0.95)); registerProcessorParameter("CutOnTPCHits", "Cut on the number of the TPC hits for tracks with no Si hits", @@ -257,7 +269,8 @@ FullLDCTracking_MarlinTrk::FullLDCTracking_MarlinTrk() : Processor("FullLDCTrack _forbidOverlapInZTPC, int(0)); registerProcessorParameter("ForbidOverlapInZComb", - "Forbid overlap in Z for combining TPC segments with tracks having Si hits", + "Forbid overlap in Z for combining TPC segments " + "with tracks having Si hits", _forbidOverlapInZComb, int(0)); registerProcessorParameter("MultipleScatteringOn", "Use MultipleScattering in Fit", _MSOn, bool(true)); @@ -302,15 +315,16 @@ FullLDCTracking_MarlinTrk::FullLDCTracking_MarlinTrk() : Processor("FullLDCTrack float(0.05)); registerProcessorParameter("TrackSystemName", - "Name of the track fitting system to be used (KalTest, DDKalTest, aidaTT, ... )", + "Name of the track fitting system to be used " + "(KalTest, DDKalTest, aidaTT, ... )", _trkSystemName, std::string("KalTest")); #ifdef MARLINTRK_DIAGNOSTICS_ON - registerOptionalParameter( - "RunMarlinTrkDiagnostics", - "Run MarlinTrk Diagnostics. MarlinTrk must be compiled with MARLINTRK_DIAGNOSTICS_ON defined", - _runMarlinTrkDiagnostics, bool(false)); + registerOptionalParameter("RunMarlinTrkDiagnostics", + "Run MarlinTrk Diagnostics. MarlinTrk must be " + "compiled with MARLINTRK_DIAGNOSTICS_ON defined", + _runMarlinTrkDiagnostics, bool(false)); registerOptionalParameter("DiagnosticsName", "Name of the root file and root tree if running Diagnostics", _MarlinTrkDiagnosticsName, std::string("FullLDCTrackingDiagnostics")); @@ -387,10 +401,12 @@ void FullLDCTracking_MarlinTrk::processEvent(LCEvent* evt) { Sorting(_allCombinedTracks); streamlog_out(DEBUG5) << "************************************Sorting by Chi2/NDF done ..." << std::endl; - streamlog_out(DEBUG5) << "************************************Selection of all 2 track combininations ..." + streamlog_out(DEBUG5) << "************************************Selection of " + "all 2 track combininations ..." << std::endl; SelectCombinedTracks(); - streamlog_out(DEBUG5) << "************************************Selection of all 2 track combininations done ..." + streamlog_out(DEBUG5) << "************************************Selection of " + "all 2 track combininations done ..." << std::endl; streamlog_out(DEBUG5) << "************************************Trying non combined tracks ..." << std::endl; @@ -431,8 +447,9 @@ void FullLDCTracking_MarlinTrk::AddTrackColToEvt(LCEvent* evt, TrackExtendedVec& float pyTot = 0.0; float pzTot = 0.0; - // SJA:FIXME: So here we are going to do one final refit. This can certainly be optimised, but rather than worry about - // the mememory management right now lets make it work, and optimise it later ... + // SJA:FIXME: So here we are going to do one final refit. This can certainly + // be optimised, but rather than worry about the mememory management right now + // lets make it work, and optimise it later ... for (int iTRK = 0; iTRK < nTrkCand; ++iTRK) { TrackExtended* trkCand = trkVec[iTRK]; @@ -458,14 +475,15 @@ void FullLDCTracking_MarlinTrk::AddTrackColToEvt(LCEvent* evt, TrackExtendedVec& if (trkHit) { trkHits.push_back(trkHit); } else { - throw EVENT::Exception(std::string("FullLDCTracking_MarlinTrk::AddTrackColToEvt: TrackerHit pointer == NULL ")); + throw EVENT::Exception(std::string("FullLDCTracking_MarlinTrk::AddTrackColToEvt: " + "TrackerHit pointer == NULL ")); } } if (trkHits.size() < 3) { - streamlog_out(DEBUG3) - << "FullLDCTracking_MarlinTrk::AddTrackColToEvt: Cannot fit less than 3 hits. Number of hits = " - << trkHits.size() << std::endl; + streamlog_out(DEBUG3) << "FullLDCTracking_MarlinTrk::AddTrackColToEvt: " + "Cannot fit less than 3 hits. Number of hits = " + << trkHits.size() << std::endl; continue; } @@ -567,7 +585,6 @@ void FullLDCTracking_MarlinTrk::AddTrackColToEvt(LCEvent* evt, TrackExtendedVec& try { error = MarlinTrk::createFinalisedLCIOTrack(marlinTrk, trkHits, Track, fit_backwards, &ts_initial, _bField, _maxChi2PerHit); - } catch (...) { // delete Track; // delete marlinTrk; @@ -691,7 +708,6 @@ void FullLDCTracking_MarlinTrk::AddTrackColToEvt(LCEvent* evt, TrackExtendedVec& << " rejectTrackonImpactParameters " << rejectTrackonImpactParameters << std::endl; delete Track; - } else { float omega = trkStateIP->getOmega(); float tanLambda = trkStateIP->getTanLambda(); @@ -943,8 +959,9 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { int layer = getLayerID(trkhit); if (layer < 0 || (unsigned)layer >= _nLayersSIT) { - streamlog_out(ERROR) << "FullLDCTracking_MarlinTrk => fatal error in SIT : layer is outside allowed range : " - << layer << std::endl; + streamlog_out(ERROR) << "FullLDCTracking_MarlinTrk => fatal error in SIT : hit layer number " << layer + << " is outside of the total number of layers in the given geometry: " << _nLayersSIT + << std::endl; exit(1); } @@ -955,14 +972,12 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { "SPACEPOINTS must be use instead. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << std::endl; exit(1); - } // most likely case: COMPOSITE_SPACEPOINT hits formed from stereo strip hits else if (BitSet32(trkhit->getType())[UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT]) { // SJA:FIXME: fudge for now by a factor of two and ignore covariance drphi = 2 * sqrt(trkhit->getCovMatrix()[0] + trkhit->getCovMatrix()[2]); dz = sqrt(trkhit->getCovMatrix()[5]); - } // or a PIXEL based SIT, using 2D TrackerHitPlane like the VXD above else if ((trkhit_P = dynamic_cast(hitCollection->getElementAt(ielem)))) { @@ -973,8 +988,8 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { const float eps = 1.0e-07; // V must be the global z axis - if (fabs(1.0 - V.dot(Z)) > eps) { - streamlog_out(ERROR) << "FullLDCTracking_MarlinTrk: PIXEL SIT Hit measurment vectors V is not equal to the " + if (!(fabs(1.0 - V.dot(Z)) > eps || fabs(-1.0 - V.dot(Z)) > eps)) { + streamlog_out(ERROR) << "FullLDCTracking_MarlinTrk: PIXEL SIT Hit measurement vectors V is not equal to the " "global Z axis. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << std::endl; exit(1); @@ -990,13 +1005,11 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { drphi = trkhit_P->getdU(); dz = trkhit_P->getdV(); - } // or a simple cylindrical design, as used in the LOI else if ((trkhit_C = dynamic_cast(hitCollection->getElementAt(ielem)))) { drphi = trkhit_C->getdRPhi(); dz = trkhit_C->getdZ(); - } // this would be very unlikely, but who knows ... just an ordinary TrackerHit, which is not a COMPOSITE_SPACEPOINT else { @@ -1032,7 +1045,6 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { << " drphi " << hitExt->getResolutionRPhi() << " dz " << hitExt->getResolutionZ() << " layer = " << layer << std::endl; } - } catch (DataNotAvailableException& e) { streamlog_out(DEBUG4) << " collection not found : " << _SITTrackerHitCollection.c_str() << std::endl; } @@ -1079,14 +1091,12 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { "SPACEPOINTS must be use instead. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << std::endl; exit(1); - } // most likely case: COMPOSITE_SPACEPOINT hits formed from stereo strip hits else if (BitSet32(trkhit->getType())[UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT]) { // SJA:FIXME: fudge for now by a factor of two and ignore covariance drphi = 2 * sqrt(trkhit->getCovMatrix()[0] + trkhit->getCovMatrix()[2]); dz = sqrt(trkhit->getCovMatrix()[5]); - } // or a PIXEL based SET, using 2D TrackerHitPlane like the VXD above else if ((trkhit_P = dynamic_cast(hitCollection->getElementAt(ielem)))) { @@ -1114,13 +1124,11 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { drphi = trkhit_P->getdU(); dz = trkhit_P->getdV(); - } // or a simple cylindrical design, as used in the LOI else if ((trkhit_C = dynamic_cast(hitCollection->getElementAt(ielem)))) { drphi = trkhit_C->getdRPhi(); dz = trkhit_C->getdZ(); - } // this would be very unlikely, but who knows ... just an ordinary TrackerHit, which is not a COMPOSITE_SPACEPOINT else { @@ -1156,7 +1164,6 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { << " drphi " << hitExt->getResolutionRPhi() << " dz " << hitExt->getResolutionZ() << " layer = " << layer << std::endl; } - } catch (DataNotAvailableException& e) { streamlog_out(DEBUG4) << " collection not found : " << _SETTrackerHitCollection.c_str() << std::endl; } @@ -1195,7 +1202,6 @@ void FullLDCTracking_MarlinTrk::prepareVectors(LCEvent* event) { << " drphi " << hitExt->getResolutionRPhi() << " dz " << hitExt->getResolutionZ() << " layer = " << layer << std::endl; } - } catch (DataNotAvailableException& e) { streamlog_out(DEBUG4) << _VTXTrackerHitCollection.c_str() << " collection is unavailable" << std::endl; } @@ -1493,7 +1499,6 @@ void FullLDCTracking_MarlinTrk::MergeTPCandSiTracks() { int iopt = 1; PrintOutMerging(tpcTrackExt, siTrackExt, iopt); } - } else { if (_debug >= 3) { int iopt = 6; @@ -2006,7 +2011,6 @@ void FullLDCTracking_MarlinTrk::SelectCombinedTracks() { PrintOutMerging(secondTrack, firstTrack, iopt); } } - } else { // if(nTracks>2) streamlog_out(DEBUG2) << " ***************** SelectCombinedTracks: MORE THAN TWO TRACKS " << nCombTrk @@ -3022,7 +3026,6 @@ float FullLDCTracking_MarlinTrk::CompareTrk(TrackExtended* first, TrackExtended* den = momSecond; result = nom / den; - } else { @@ -4394,7 +4397,6 @@ void FullLDCTracking_MarlinTrk::PrintOutMerging(TrackExtended* firstTrackExt, Tr << " veto = " << VetoMerge(firstTrackExt, secondTrackExt) << std::endl; streamlog_out(DEBUG4) << std::endl; - } // ... or if it was an incorrect TPC to TPC rejection ... @@ -4450,7 +4452,6 @@ void FullLDCTracking_MarlinTrk::PrintOutMerging(TrackExtended* firstTrackExt, Tr << " veto = " << VetoMerge(firstTrackExt, secondTrackExt) << std::endl; streamlog_out(DEBUG4) << std::endl; - } // ... or if it was an incorrect TPC to Si rejection ... @@ -4512,7 +4513,6 @@ void FullLDCTracking_MarlinTrk::PrintOutMerging(TrackExtended* firstTrackExt, Tr streamlog_out(DEBUG4) << " Overlap = " << SegmentRadialOverlap(firstTrackExt, secondTrackExt) << " veto = " << VetoMerge(firstTrackExt, secondTrackExt) << std::endl; streamlog_out(DEBUG4) << std::endl; - } // ... or if it was an correct merger ... else if (firstMCP == secondMCP && iopt < 6 && _debug > 3) { @@ -4721,7 +4721,6 @@ bool FullLDCTracking_MarlinTrk::VetoMerge(TrackExtended* firstTrackExt, TrackExt delete combinedTrack->getGroupTracks(); delete combinedTrack; - } else { streamlog_out(DEBUG1) << "FullLDCTracking_MarlinTrk::VetoMerge fails CombineTracks(firstTrackExt,secondTrackExt,true) test" @@ -4749,41 +4748,42 @@ void FullLDCTracking_MarlinTrk::setupGeom(const dd4hep::Detector& theDetector) { //-- VXD Parameters-- _nLayersVTX = 0; + // const std::string nameVertexBarrelDetector = "VertexBarrel"; + try { - streamlog_out(DEBUG9) << " filling VXD parameters " << std::endl; + streamlog_out(DEBUG9) << " filling " << m_vtxDetName << " parameters " << '\n'; - dd4hep::DetElement vtxDE = theDetector.detector("VXD"); + dd4hep::DetElement vtxDE = theDetector.detector(m_vtxDetName); dd4hep::rec::ZPlanarData* vtx = vtxDE.extension(); _nLayersVTX = vtx->layers.size(); - } catch (std::runtime_error& e) { - streamlog_out(DEBUG9) << " ### VXD detector Not Present in Compact File" << std::endl; + streamlog_out(ERROR) << " " << m_vtxDetName << " detector Not Present in Compact File" << '\n'; } //-- SIT Parameters-- _nLayersSIT = 0; try { - streamlog_out(DEBUG9) << " filling SIT parameters " << std::endl; + streamlog_out(DEBUG9) << " filling " << m_innerBarrelTrackerDetName << " parameters " << '\n'; - dd4hep::DetElement sitDE = theDetector.detector("SIT"); + dd4hep::DetElement sitDE = theDetector.detector(m_innerBarrelTrackerDetName); dd4hep::rec::ZPlanarData* sit = sitDE.extension(); _nLayersSIT = sit->layers.size(); } catch (std::runtime_error& e) { - streamlog_out(DEBUG9) << " ### SIT detector Not Present in Compact File " << std::endl; + streamlog_out(ERROR) << " " << m_innerBarrelTrackerDetName << " detector Not Present in Compact File " << '\n'; } //-- SET Parameters-- _nLayersSET = 0; try { - streamlog_out(DEBUG9) << " filling SET parameters " << std::endl; + streamlog_out(DEBUG9) << " filling " << m_siliconExternalTrackerDetName << " parameters " << '\n'; - dd4hep::DetElement setDE = theDetector.detector("SET"); + dd4hep::DetElement setDE = theDetector.detector(m_siliconExternalTrackerDetName); dd4hep::rec::ZPlanarData* set = setDE.extension(); _nLayersSET = set->layers.size(); } catch (std::runtime_error& e) { - streamlog_out(DEBUG9) << " ### SET detector Not Present in Compact File " << std::endl; + streamlog_out(ERROR) << " " << m_siliconExternalTrackerDetName << " detector Not Present in Compact File " << '\n'; } //-- FTD Parameters-- @@ -4791,9 +4791,9 @@ void FullLDCTracking_MarlinTrk::setupGeom(const dd4hep::Detector& theDetector) { _nLayersFTD = 0; try { - streamlog_out(DEBUG9) << " filling FTD parameters " << std::endl; + streamlog_out(DEBUG9) << " filling " << m_forwardTrackerDetName << " parameters " << '\n'; - dd4hep::DetElement ftdDE = theDetector.detector("FTD"); + dd4hep::DetElement ftdDE = theDetector.detector(m_forwardTrackerDetName); dd4hep::rec::ZDiskPetalsData* ftd = ftdDE.extension(); _nLayersFTD = ftd->layers.size(); @@ -4808,6 +4808,6 @@ void FullLDCTracking_MarlinTrk::setupGeom(const dd4hep::Detector& theDetector) { _nLayersFTD = _zLayerFTD.size(); } catch (std::runtime_error& e) { - streamlog_out(DEBUG9) << " ### FTD detector Not Present in Compact File" << std::endl; + streamlog_out(ERROR) << " " << m_forwardTrackerDetName << " detector Not Present in Compact File" << '\n'; } }