diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/CMakeLists.txt b/analysis/PWGC2F/femtoscopy/nicafemto/CMakeLists.txt index ae254d76eda35f834fbbfbfe40552e0475efb65f..32b7475bcd7d6b9abe64b37c879a5182add59612 100644 --- a/analysis/PWGC2F/femtoscopy/nicafemto/CMakeLists.txt +++ b/analysis/PWGC2F/femtoscopy/nicafemto/CMakeLists.txt @@ -4,14 +4,9 @@ set(NICA_CBM ) set(KF_HEADERS - ${CBMROOT_SOURCE_DIR}/L1 - ${CBMROOT_SOURCE_DIR}/L1/L1Algo - ${CBMROOT_SOURCE_DIR}/L1/ParticleFinder ${CLHEP_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${KFParticle_INCLUDE_DIR} - ${CBMROOT_SOURCE_DIR}/KF - ${CBMROOT_SOURCE_DIR}/KF/Interface ${CBMROOT_SOURCE_DIR}/external/KFParticle/KFParticle # ${CBMROOT_SOURCE_DIR}/analysis/nica_cbm/helpers ) diff --git a/reco/KF/KF.cmake b/reco/KF/KF.cmake index d4b610375fff8f4d75cfc8d0cd3626f85a912df4..d4aa313d967a136a3fa4e8e617205bd2edd7b440 100644 --- a/reco/KF/KF.cmake +++ b/reco/KF/KF.cmake @@ -5,6 +5,8 @@ set(INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Interface + ${CMAKE_CURRENT_SOURCE_DIR}/ParticleFitter + ${CMAKE_CURRENT_SOURCE_DIR}/obsolete ) set(SRCS @@ -20,10 +22,6 @@ set(SRCS CbmKFUMeasurement.cxx CbmKFVertexInterface.cxx -#### Tracker interfaces (will be moved to core/detector/*) ################ - CbmTrackingDetectorInterfaceInit.cxx -########################################################################### - #Interface/CbmEcalTrackExtrapolationKF.cxx Interface/CbmKFStsHit.cxx Interface/CbmKFTrack.cxx @@ -43,6 +41,15 @@ set(SRCS #CbmKFParticleFinderPID.cxx #CbmKFParticleFinderQa.cxx #CbmKFParticleInterface.cxx + ParticleFitter/CbmL1PFFitter.cxx + ParticleFitter/CbmL1PFMCParticle.cxx + obsolete/CbmL1TrackMerger.cxx + obsolete/CbmL1TofMerger.cxx + obsolete/CbmL1TrdTracklet.cxx + obsolete/CbmL1TrdTracklet4.cxx + # obsolete/CbmL1TrdTrackFinderSts.cxx + # obsolete/CbmL1CATrdTrackFinderSA.cxx + ) @@ -87,6 +94,7 @@ set(PUBLIC_DEPENDENCIES CbmBase CbmData CbmRecoBase + L1 FairRoot::Base ROOT::Core ROOT::Geom @@ -100,6 +108,7 @@ set(PRIVATE_DEPENDENCIES CbmStsBase CbmTofBase CbmTrdBase + KFParticle FairLogger::FairLogger FairRoot::GeoBase FairRoot::ParBase diff --git a/reco/KF/KFLinkDef.h b/reco/KF/KFLinkDef.h index ac53d37336fc8ac55b8e7ef02d18958940f932a2..6f16bb68b65a64b3c680125223ecf0c6d20c00dd 100644 --- a/reco/KF/KFLinkDef.h +++ b/reco/KF/KFLinkDef.h @@ -36,8 +36,14 @@ #pragma link C++ class CbmTrdTrackFitterKF + ; #pragma link C++ class CbmTofTrackFitterKF + ; #pragma link C++ class CbmGlobalTrackFitterKF + ; - -#pragma link C++ class CbmTrackingDetectorInterfaceInit + ; +#pragma link C++ class CbmL1TrackMerger + ; +#pragma link C++ class CbmL1TofMerger + ; +#pragma link C++ class CbmL1TrdTracklet + ; +#pragma link C++ class CbmL1TrdTracklet4 + ; +//#pragma link C++ class CbmL1TrdTrackFinderSts+; +//#pragma link C++ class CbmL1CATrdTrackFinderSA+; + +//#pragma link C++ class CbmTrackingDetectorInterfaceInit + ; //KFQA /* #pragma link C++ class CbmKFPartEfficiencies + ; diff --git a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx similarity index 99% rename from reco/L1/ParticleFinder/CbmL1PFFitter.cxx rename to reco/KF/ParticleFitter/CbmL1PFFitter.cxx index 559e18e6fb5be6500b673e7010134a1909951720..ad21d0b959463683dc5a6e702095c0f87bcf0f41 100644 --- a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx +++ b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx @@ -13,7 +13,7 @@ * *===================================================== * - * SIMD Fitter for CbmL1Track class + * SIMD Fitter * */ @@ -29,7 +29,6 @@ //L1Algo tools #include "CbmKFVertex.h" -#include "CbmL1Track.h" #include "FairRootManager.h" diff --git a/reco/L1/ParticleFinder/CbmL1PFFitter.h b/reco/KF/ParticleFitter/CbmL1PFFitter.h similarity index 100% rename from reco/L1/ParticleFinder/CbmL1PFFitter.h rename to reco/KF/ParticleFitter/CbmL1PFFitter.h diff --git a/reco/L1/ParticleFinder/CbmL1PFMCParticle.cxx b/reco/KF/ParticleFitter/CbmL1PFMCParticle.cxx similarity index 100% rename from reco/L1/ParticleFinder/CbmL1PFMCParticle.cxx rename to reco/KF/ParticleFitter/CbmL1PFMCParticle.cxx diff --git a/reco/L1/ParticleFinder/CbmL1PFMCParticle.h b/reco/KF/ParticleFitter/CbmL1PFMCParticle.h similarity index 100% rename from reco/L1/ParticleFinder/CbmL1PFMCParticle.h rename to reco/KF/ParticleFitter/CbmL1PFMCParticle.h diff --git a/reco/L1/CbmL1CATrdTrackFinderSA.cxx b/reco/KF/obsolete/CbmL1CATrdTrackFinderSA.cxx similarity index 100% rename from reco/L1/CbmL1CATrdTrackFinderSA.cxx rename to reco/KF/obsolete/CbmL1CATrdTrackFinderSA.cxx diff --git a/reco/L1/CbmL1CATrdTrackFinderSA.h b/reco/KF/obsolete/CbmL1CATrdTrackFinderSA.h similarity index 100% rename from reco/L1/CbmL1CATrdTrackFinderSA.h rename to reco/KF/obsolete/CbmL1CATrdTrackFinderSA.h diff --git a/reco/L1/CbmL1TofMerger.cxx b/reco/KF/obsolete/CbmL1TofMerger.cxx similarity index 100% rename from reco/L1/CbmL1TofMerger.cxx rename to reco/KF/obsolete/CbmL1TofMerger.cxx diff --git a/reco/L1/CbmL1TofMerger.h b/reco/KF/obsolete/CbmL1TofMerger.h similarity index 100% rename from reco/L1/CbmL1TofMerger.h rename to reco/KF/obsolete/CbmL1TofMerger.h diff --git a/reco/L1/CbmL1TrackMerger.cxx b/reco/KF/obsolete/CbmL1TrackMerger.cxx similarity index 100% rename from reco/L1/CbmL1TrackMerger.cxx rename to reco/KF/obsolete/CbmL1TrackMerger.cxx diff --git a/reco/L1/CbmL1TrackMerger.h b/reco/KF/obsolete/CbmL1TrackMerger.h similarity index 100% rename from reco/L1/CbmL1TrackMerger.h rename to reco/KF/obsolete/CbmL1TrackMerger.h diff --git a/reco/L1/CbmL1TrdHit.h b/reco/KF/obsolete/CbmL1TrdHit.h similarity index 97% rename from reco/L1/CbmL1TrdHit.h rename to reco/KF/obsolete/CbmL1TrdHit.h index 1ae98230f9be793a053fc72cf6efa05fca797caf..cf980b6ac928198291f5f85040f2c806d1a88b90 100644 --- a/reco/L1/CbmL1TrdHit.h +++ b/reco/KF/obsolete/CbmL1TrdHit.h @@ -21,8 +21,6 @@ #ifndef _CbmL1TrdHit_h_ #define _CbmL1TrdHit_h_ -#include "CbmKFHit.h" - struct CbmL1TrdHit //:public CbmL1KFUMeasurement { diff --git a/reco/L1/CbmL1TrdTrackFinderSts.cxx b/reco/KF/obsolete/CbmL1TrdTrackFinderSts.cxx similarity index 100% rename from reco/L1/CbmL1TrdTrackFinderSts.cxx rename to reco/KF/obsolete/CbmL1TrdTrackFinderSts.cxx diff --git a/reco/L1/CbmL1TrdTrackFinderSts.h b/reco/KF/obsolete/CbmL1TrdTrackFinderSts.h similarity index 100% rename from reco/L1/CbmL1TrdTrackFinderSts.h rename to reco/KF/obsolete/CbmL1TrdTrackFinderSts.h diff --git a/reco/L1/CbmL1TrdTracklet.cxx b/reco/KF/obsolete/CbmL1TrdTracklet.cxx similarity index 100% rename from reco/L1/CbmL1TrdTracklet.cxx rename to reco/KF/obsolete/CbmL1TrdTracklet.cxx diff --git a/reco/L1/CbmL1TrdTracklet.h b/reco/KF/obsolete/CbmL1TrdTracklet.h similarity index 100% rename from reco/L1/CbmL1TrdTracklet.h rename to reco/KF/obsolete/CbmL1TrdTracklet.h diff --git a/reco/L1/CbmL1TrdTracklet4.cxx b/reco/KF/obsolete/CbmL1TrdTracklet4.cxx similarity index 100% rename from reco/L1/CbmL1TrdTracklet4.cxx rename to reco/KF/obsolete/CbmL1TrdTracklet4.cxx diff --git a/reco/L1/CbmL1TrdTracklet4.h b/reco/KF/obsolete/CbmL1TrdTracklet4.h similarity index 100% rename from reco/L1/CbmL1TrdTracklet4.h rename to reco/KF/obsolete/CbmL1TrdTracklet4.h diff --git a/reco/L1/CMakeLists.txt b/reco/L1/CMakeLists.txt index 48e538c94f7f7675fac316fa005928f782fefc6e..b47941903b5a7a80ac354852e4af053b66d20530 100644 --- a/reco/L1/CMakeLists.txt +++ b/reco/L1/CMakeLists.txt @@ -14,7 +14,7 @@ set(INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/L1Algo ${CMAKE_CURRENT_SOURCE_DIR}/OffLineInterface - ${CMAKE_CURRENT_SOURCE_DIR}/ParticleFinder +# ${CMAKE_CURRENT_SOURCE_DIR}/ParticleFinder ${CMAKE_CURRENT_SOURCE_DIR}/qa ${CMAKE_CURRENT_SOURCE_DIR}/L1Algo/utils ${CMAKE_CURRENT_SOURCE_DIR}/catools @@ -23,19 +23,11 @@ set(INCLUDE_DIRECTORIES set(SRCS - # L1Algo / L1CATrackFinder.cxx - # CbmL1Performance.cxx - # CbmL1ReadEvent.cxx - # CbmL1CATrdTrackFinderSA.cxx - CbmL1TrdTracklet.cxx - CbmL1TrdTracklet4.cxx - CbmL1.cxx - - # CbmL1TrdTrackFinderSts.cxx - CbmL1TrackMerger.cxx - CbmL1TofMerger.cxx +#### Tracker interfaces (will be moved to core/detector/*) ################ + CbmTrackingDetectorInterfaceInit.cxx +########################################################################### - # L1AlgoInputData.cxx + CbmL1.cxx OffLineInterface/CbmL1StsTrackFinder.cxx OffLineInterface/CbmL1GlobalTrackFinder.cxx OffLineInterface/CbmL1GlobalFindTracksEvents.cxx @@ -47,6 +39,7 @@ set(SRCS L1Algo/L1BranchExtender.cxx L1Algo/L1TrackFitter.cxx L1Algo/L1Grid.cxx + CbmL1Util.cxx CbmL1Performance.cxx CbmL1ReadEvent.cxx CbmCaMCModule.cxx @@ -82,9 +75,6 @@ set(SRCS catools/CaToolsWFExpression.cxx catools/CaToolsMaterialHelper.cxx - ParticleFinder/CbmL1PFFitter.cxx - ParticleFinder/CbmL1PFMCParticle.cxx - qa/CbmTrackerInputQaTrd.cxx qa/CbmTrackerInputQaTof.cxx qa/CbmTrackingInputQaSts.cxx @@ -107,13 +97,12 @@ set(NO_DICT_SRCS set(HEADERS CbmL1Constants.h - CbmL1CATrdTrackFinderSA.h + CbmL1Util.h CbmL1DetectorID.h CbmL1MCPoint.h CbmL1Hit.h CbmL1Track.h CbmL1TrackPar.h - CbmL1TrdHit.h CbmL1Vtx.h L1Algo/L1Def.h L1Algo/L1Vector.h @@ -169,7 +158,6 @@ set(PUBLIC_DEPENDENCIES CbmBase CbmData CbmQaBase - KF FairLogger::FairLogger FairRoot::Base ROOT::Core diff --git a/reco/L1/CbmCaTimeSliceReader.cxx b/reco/L1/CbmCaTimeSliceReader.cxx index bb96dcf479cc181a213a0a8d2d4614853aeca1c7..63cdb5f2ab9ac6795223fc3139ccb8b76df8a56c 100644 --- a/reco/L1/CbmCaTimeSliceReader.cxx +++ b/reco/L1/CbmCaTimeSliceReader.cxx @@ -10,7 +10,7 @@ #include "CbmCaTimeSliceReader.h" #include "CbmGlobalTrack.h" -#include "CbmKFMath.h" // for CopyTrackParam2TC +#include "CbmL1Util.h" // for CopyTrackParam2TC #include "CbmMuchTrack.h" #include "CbmStsTrack.h" #include "CbmTofTrack.h" @@ -190,8 +190,8 @@ void TimeSliceReader::ReadRecoTracks() for (int iT = 0; iT < nTracks; ++iT) { auto* pInputTrack = static_cast<CbmStsTrack*>(fpBrRecoTracks->At(iT)); auto& track = (*fpvTracks)[iT]; - CbmKFMath::CopyTrackParam2TC(pInputTrack->GetParamFirst(), track.T, track.C); - CbmKFMath::CopyTrackParam2TC(pInputTrack->GetParamLast(), track.TLast, track.CLast); + cbm::L1Util::CopyTrackParam2TC(pInputTrack->GetParamFirst(), track.T, track.C); + cbm::L1Util::CopyTrackParam2TC(pInputTrack->GetParamLast(), track.TLast, track.CLast); track.chi2 = pInputTrack->GetChiSq(); track.NDF = pInputTrack->GetNDF(); track.Tpv[6] = pInputTrack->GetStartTime(); @@ -221,8 +221,8 @@ void TimeSliceReader::ReadRecoTracks() for (int iT = 0; iT < nTracks; ++iT) { auto* pInputTrack = static_cast<CbmGlobalTrack*>(fpBrRecoTracks->At(iT)); auto& track = (*fpvTracks)[iT]; - CbmKFMath::CopyTrackParam2TC(pInputTrack->GetParamFirst(), track.T, track.C); - CbmKFMath::CopyTrackParam2TC(pInputTrack->GetParamLast(), track.TLast, track.CLast); + cbm::L1Util::CopyTrackParam2TC(pInputTrack->GetParamFirst(), track.T, track.C); + cbm::L1Util::CopyTrackParam2TC(pInputTrack->GetParamLast(), track.TLast, track.CLast); track.chi2 = pInputTrack->GetChi2(); track.NDF = pInputTrack->GetNDF(); diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx index 679791372a74cd0e8970249ab149a8c33031512f..38376d99dbe74465c9886ab8fb8ff812bae567e1 100644 --- a/reco/L1/CbmL1.cxx +++ b/reco/L1/CbmL1.cxx @@ -20,9 +20,6 @@ #include "CbmL1.h" -#include "CbmKF.h" -#include "CbmKFVertex.h" -#include "CbmL1PFFitter.h" #include "CbmMCDataManager.h" #include "CbmMuchTrackingInterface.h" #include "CbmMvdTrackingInterface.h" @@ -421,8 +418,9 @@ InitStatus CbmL1::Init() // ** Target initialization ** // *************************** - auto& target = CbmKF::Instance()->vTargets[0]; - fInitManager.SetTargetPosition(target.x, target.y, target.z); + GetTargetInfo(); + + fInitManager.SetTargetPosition(fTargetX, fTargetY, fTargetZ); // ********************************* // ** Target field initialization ** @@ -486,7 +484,7 @@ InitStatus CbmL1::Init() // TODO: The CA TF result is dependent from type of geometry settings. Should be understood (S.Zharko) stationInfo.SetFrontBackStripsGeometry((fscal) mvdInterface->GetStripsStereoAngleFront(iSt), (fscal) mvdInterface->GetStripsStereoAngleBack(iSt)); - stationInfo.SetTrackingStatus(target.z < stationInfo.GetZdouble() ? true : false); + stationInfo.SetTrackingStatus(fTargetZ < stationInfo.GetZdouble() ? true : false); if (fvmDisabledStationIDs[L1DetectorID::kMvd].find(iSt) != fvmDisabledStationIDs[L1DetectorID::kMvd].cend()) { stationInfo.SetTrackingStatus(false); } @@ -514,7 +512,7 @@ InitStatus CbmL1::Init() // TODO: The CA TF result is dependent from type of geometry settings. Should be understood (S.Zharko) stationInfo.SetFrontBackStripsGeometry((fscal) stsInterface->GetStripsStereoAngleFront(iSt), (fscal) stsInterface->GetStripsStereoAngleBack(iSt)); - stationInfo.SetTrackingStatus(target.z < stationInfo.GetZdouble() ? true : false); + stationInfo.SetTrackingStatus(fTargetZ < stationInfo.GetZdouble() ? true : false); if (fvmDisabledStationIDs[L1DetectorID::kSts].find(iSt) != fvmDisabledStationIDs[L1DetectorID::kSts].cend()) { stationInfo.SetTrackingStatus(false); } @@ -541,7 +539,7 @@ InitStatus CbmL1::Init() // TODO: The CA TF result is dependent from type of geometry settings. Should be understood (S.Zharko) stationInfo.SetFrontBackStripsGeometry((fscal) muchInterface->GetStripsStereoAngleFront(iSt), (fscal) muchInterface->GetStripsStereoAngleBack(iSt)); - stationInfo.SetTrackingStatus(target.z < stationInfo.GetZdouble() ? true : false); + stationInfo.SetTrackingStatus(fTargetZ < stationInfo.GetZdouble() ? true : false); if (fvmDisabledStationIDs[L1DetectorID::kMuch].find(iSt) != fvmDisabledStationIDs[L1DetectorID::kMuch].cend()) { stationInfo.SetTrackingStatus(false); } @@ -569,7 +567,7 @@ InitStatus CbmL1::Init() fscal trdBackPhi = trdInterface->GetStripsStereoAngleBack(iSt); if (L1Algo::TrackingMode::kGlobal == fTrackingMode) { stationInfo.SetTimeInfo(false); } stationInfo.SetFrontBackStripsGeometry(trdFrontPhi, trdBackPhi); - stationInfo.SetTrackingStatus(target.z < stationInfo.GetZdouble() ? true : false); + stationInfo.SetTrackingStatus(fTargetZ < stationInfo.GetZdouble() ? true : false); if (iSt == 1 && L1Algo::TrackingMode::kMcbm == fTrackingMode && fMissingHits) { stationInfo.SetTrackingStatus(false); } @@ -600,7 +598,7 @@ InitStatus CbmL1::Init() fscal tofFrontPhi = tofInterface->GetStripsStereoAngleFront(iSt); fscal tofBackPhi = tofInterface->GetStripsStereoAngleBack(iSt); stationInfo.SetFrontBackStripsGeometry(tofFrontPhi, tofBackPhi); - stationInfo.SetTrackingStatus(target.z < stationInfo.GetZdouble() ? true : false); + stationInfo.SetTrackingStatus(fTargetZ < stationInfo.GetZdouble() ? true : false); if (fvmDisabledStationIDs[L1DetectorID::kTof].find(iSt) != fvmDisabledStationIDs[L1DetectorID::kTof].cend()) { stationInfo.SetTrackingStatus(false); } @@ -627,10 +625,10 @@ InitStatus CbmL1::Init() ca::tools::MaterialHelper matHelper; matHelper.SetSafeMaterialInitialization(fDoSafeMaterialInitialization); - if (!fMatBudgetParallelProjection) { matHelper.SetDoRadialProjection(target.z); } + if (!fMatBudgetParallelProjection) { matHelper.SetDoRadialProjection(fTargetZ); } matHelper.SetNraysPerDim(fMatBudgetNrays); - double zLast = target.z + 1.; // some gap (+1cm) to skip the target material + double zLast = fTargetZ + 1.; // some gap (+1cm) to skip the target material for (unsigned int ist = 0; ist < vStations.size(); ist++) { auto& station = vStations[ist]; @@ -1495,3 +1493,64 @@ void CbmL1::DumpMaterialToFile(TString fileName) } f->Write(); } + +// --------------------------------------------------------------------------------------------------------------------- +// Target finder +// + +void CbmL1::GetTargetInfo() +{ + // Loop over all nodes till a node with name "target" is found + // Extract the required infrmation from the node and store it in the + // proper structure + // The complete logic depends on the naming convention of the target. + // If the node doesn't contain the string target the procedure will fail + + fTargetX = 1.e10; + fTargetY = 1.e10; + fTargetZ = 1.e10; + + TString targetPath; + TGeoNode* targetNode {nullptr}; + FindTargetNode(targetPath, targetNode); + + if (!targetNode) { LOG(fatal) << "L1: can not find the target!"; } + + Double_t local[3] = {0., 0., 0.}; // target centre, local c.s. + Double_t global[3]; // target centre, global c.s. + gGeoManager->cd(targetPath); + gGeoManager->GetCurrentMatrix()->LocalToMaster(local, global); + fTargetX = global[0]; + fTargetY = global[1]; + fTargetZ = global[2]; + + LOG(info) << " Target found: \"" << targetPath << "\" at ( " << fTargetX << " " << fTargetY << " " << fTargetZ + << " ) "; +} + +// --------------------------------------------------------------------------------------------------------------------- +// Target finder - recursive routine +// + +void CbmL1::FindTargetNode(TString& targetPath, TGeoNode*& targetNode) +{ + if (!targetNode) { // init at the top of the tree + targetNode = gGeoManager->GetTopNode(); + targetPath = "/" + TString(targetNode->GetName()); + } + + if (TString(targetNode->GetName()).Contains("target")) { return; } + + for (Int_t iNode = 0; iNode < targetNode->GetNdaughters(); iNode++) { + TGeoNode* newNode = targetNode->GetDaughter(iNode); + TString newPath = targetPath + "/" + newNode->GetName(); + FindTargetNode(newPath, newNode); + if (newNode) { + targetPath = newPath; + targetNode = newNode; + return; + } + } + targetPath = ""; + targetNode = nullptr; +} diff --git a/reco/L1/CbmL1.h b/reco/L1/CbmL1.h index 37d698306b2a8688046ac17632bb6dc5a10022f0..df9317cf0f5d471a797408d96d0422669662e811 100644 --- a/reco/L1/CbmL1.h +++ b/reco/L1/CbmL1.h @@ -27,7 +27,6 @@ #include "CbmL1MCPoint.h" #include "CbmL1MCTrack.h" #include "CbmL1Track.h" -#include "CbmL1Vtx.h" #include "CbmMCDataArray.h" #include "CbmMCEventList.h" #include "CbmMCTrack.h" @@ -65,14 +64,13 @@ class L1Algo; class L1Event; class CbmL1ParticlesFinder; class L1FieldSlice; -class CbmL1Track; class CbmL1MCTrack; class KFTopoPerformance; class CbmMCDataObject; class CbmEvent; class TProfile2D; class TNtuple; - +class TGeoNode; /// Internal structure to handle link keys struct CbmL1LinkKey { @@ -451,6 +449,13 @@ private: /// Gets a pointer to L1InitManager (for an access in run_reco.C) L1InitManager* GetInitManager() { return &fInitManager; } + /// Get the target information + void GetTargetInfo(); + + /// A helper for GetTargetInfo() + void FindTargetNode(TString& targetPath, TGeoNode*& targetNode); + + void WriteHistosCurFile(TObject* obj); static std::istream& eatwhite(std::istream& is); // skip spaces @@ -493,6 +498,10 @@ private: bool fDoSafeMaterialInitialization {false}; /// Do safe but slow material initialisation /// to get around potential problems in TGeoVoxelFinder + double fTargetX {1.e10}; ///< target position X + double fTargetY {1.e10}; ///< target position Y + double fTargetZ {1.e10}; ///< target position Z + int fNpointsMvd = 0; ///< Number of MC points for MVD int fNpointsSts = 0; ///< Number of MC points for STS int fNpointsMuch = 0; ///< Number of MC points for MuCh diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx index d2c424a0b705445ce11f7a5924b35429ce204421..9f02e032d784f6bfdf2f1c040958041079b96ac4 100644 --- a/reco/L1/CbmL1Performance.cxx +++ b/reco/L1/CbmL1Performance.cxx @@ -13,13 +13,11 @@ * *==================================================================== * - * L1 Fit performance + * L1 Fit performance * *==================================================================== */ -#include "CbmKF.h" -#include "CbmKFMath.h" -#include "CbmKFTrack.h" // for vertex pulls + #include "CbmL1.h" #include "CbmL1Constants.h" #include "CbmL1Counters.h" @@ -37,6 +35,7 @@ #include "CbmTrdHit.h" #include "CbmTrdPoint.h" +#include "FairField.h" #include "FairRunAna.h" #include "FairTrackParam.h" // for vertex pulls @@ -118,7 +117,7 @@ void CbmL1::TrackMatch() else { hitmapChain[chainID] += 1; } - } // for iHit + } // for iHit // RTrack <-> MCTrack identification double max_percent = 0.0; // [%]. maximum persent of hits, which belong to one mcTrack. @@ -517,8 +516,6 @@ void CbmL1::EfficienciesPerformance() void CbmL1::HistoPerformance() // TODO: check if works correctly. Change vHitFast on match data in CbmL1**Track classes { - //CbmKF &KF = *CbmKF::Instance(); - static TProfile *p_eff_all_vs_mom, *p_eff_prim_vs_mom, *p_eff_sec_vs_mom, *p_eff_d0_vs_mom, *p_eff_prim_vs_theta, *p_eff_all_vs_pt, *p_eff_prim_vs_pt, *p_eff_all_vs_nhits, *p_eff_prim_vs_nhits, *p_eff_sec_vs_nhits; @@ -1640,23 +1637,17 @@ void CbmL1::FieldApproxCheck() TFile* fout = new TFile("FieldApprox.root", "RECREATE"); fout->cd(); - FairField* MF = CbmKF::Instance()->GetMagneticField(); - for (int ist = 0; ist < fNStations; ist++) { - double z = 0; - double Xmax = -100, Ymax = -100; - if (ist < fNMvdStations) { - CbmKFTube& t = CbmKF::Instance()->vMvdMaterial[ist]; - z = t.z; - Xmax = Ymax = t.R; - } - else { - CbmStsStation* station = CbmStsSetup::Instance()->GetStation(ist - fNMvdStations); - z = station->GetZ(); + assert(FairRunAna::Instance()); + FairField* MF = FairRunAna::Instance()->GetField(); + assert(MF); - Xmax = station->GetXmax(); - Ymax = station->GetYmax(); - } // if mvd + for (int ist = 0; ist < fpAlgo->GetParameters()->GetNstationsActive(); ist++) { + const L1Station& st = fpAlgo->GetParameters()->GetStation(ist); + + double z = st.fZ[0]; + double Xmax = st.Rmax[0]; + double Ymax = Xmax; // float step = 1.; @@ -1683,9 +1674,9 @@ void CbmL1::FieldApproxCheck() L1FieldValue B_L1; Double_t bbb, bbb_L1; - const int M = 5; // polinom order - const int N = (M + 1) * (M + 2) / 2; - const L1Station& st = fpAlgo->GetParameters()->GetStation(ist); + const int M = 5; // polinom order + const int N = (M + 1) * (M + 2) / 2; + for (int i = 0; i < N; i++) { FSl.cx[i] = st.fieldSlice.cx[i][0]; FSl.cy[i] = st.fieldSlice.cy[i][0]; @@ -1772,7 +1763,9 @@ void CbmL1::FieldIntegralCheck() TFile* fout = new TFile("FieldApprox.root", "RECREATE"); fout->cd(); - FairField* MF = CbmKF::Instance()->GetMagneticField(); + assert(FairRunAna::Instance()); + FairField* MF = FairRunAna::Instance()->GetField(); + assert(MF); int nPointsZ = 1000; int nPointsPhi = 100; diff --git a/reco/L1/CbmL1ReadEvent.cxx b/reco/L1/CbmL1ReadEvent.cxx index 76b504ea1cce40c9a83675394fbd2b0534560539..42810753fad53423f84c9e7cffd232622d525d7f 100644 --- a/reco/L1/CbmL1ReadEvent.cxx +++ b/reco/L1/CbmL1ReadEvent.cxx @@ -20,7 +20,6 @@ */ #include "CbmEvent.h" -#include "CbmKF.h" #include "CbmL1.h" #include "CbmMCDataObject.h" #include "CbmMatch.h" diff --git a/reco/L1/CbmL1TrackPar.h b/reco/L1/CbmL1TrackPar.h index 6dd5cc7474188c84f2d36e6de3a01c17b86de206..9233e73b8fb0eb20e9c163e8a622f6e3a58e8b13 100644 --- a/reco/L1/CbmL1TrackPar.h +++ b/reco/L1/CbmL1TrackPar.h @@ -5,20 +5,25 @@ #ifndef CbmL1TrackPar_H #define CbmL1TrackPar_H -#include "CbmKFTrackInterface.h" - #include "L1TrackPar.h" -struct CbmL1TrackPar : public CbmKFTrackInterface { +struct CbmL1TrackPar { public: CbmL1TrackPar() : chi2(0), NDF(0), mass(0), is_electron(0) {} - double* GetTrack() override { return T; } - double* GetCovMatrix() override { return C; } - double& GetRefChi2() override { return chi2; } - int& GetRefNDF() override { return NDF; } - double GetMass() const override { return mass; } - bool IsElectron() const override { return is_electron; } + double* GetTrack() { return T; } + double* GetCovMatrix() { return C; } + double& GetRefChi2() { return chi2; } + int& GetRefNDF() { return NDF; } + double GetMass() const { return mass; } + bool IsElectron() const { return is_electron; } + + int GetNOfHits() { return (NDF - 5) / 2; } /// Number of hits + int Id() const { return fId; }; + void SetId(int id) { fId = id; }; + +public: + int fId; double T[L1TrackPar::kNparTr]; double C[L1TrackPar::kNparCov]; double chi2; diff --git a/reco/L1/CbmL1Util.cxx b/reco/L1/CbmL1Util.cxx new file mode 100644 index 0000000000000000000000000000000000000000..53bfe81db7aff44a9bc77212129468efb36d6a7c --- /dev/null +++ b/reco/L1/CbmL1Util.cxx @@ -0,0 +1,46 @@ +/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt + SPDX-License-Identifier: GPL-3.0-only + Authors: Sergey Gorbunov [committer] */ + +#include "CbmL1Util.h" + +#include "FairTrackParam.h" + +namespace cbm::L1Util +{ + + void CopyTC2TrackParam(FairTrackParam* par, Double_t T[], Double_t C[]) + { + if (T) { + par->SetX(T[0]); + par->SetY(T[1]); + par->SetZ(T[5]); + par->SetTx(T[2]); + par->SetTy(T[3]); + par->SetQp(T[4]); + } + if (C) { + for (Int_t i = 0, iCov = 0; i < 5; i++) + for (Int_t j = 0; j <= i; j++, iCov++) + par->SetCovariance(i, j, C[iCov]); + } + } + + void CopyTrackParam2TC(const FairTrackParam* par, Double_t T[], Double_t C[]) + { + if (T) { + T[0] = par->GetX(); + T[1] = par->GetY(); + T[2] = par->GetTx(); + T[3] = par->GetTy(); + T[4] = par->GetQp(); + T[5] = par->GetZ(); + } + if (C) { + for (Int_t i = 0, iCov = 0; i < 5; i++) + for (Int_t j = 0; j <= i; j++, iCov++) + C[iCov] = par->GetCovariance(i, j); + } + } + +} // namespace cbm::L1Util diff --git a/reco/L1/CbmL1Util.h b/reco/L1/CbmL1Util.h new file mode 100644 index 0000000000000000000000000000000000000000..75cc3fc09a225702b8db007525d5fe7783975c8c --- /dev/null +++ b/reco/L1/CbmL1Util.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt + SPDX-License-Identifier: GPL-3.0-only + Authors: Sergey Gorbunov [committer] */ + +#ifndef CbmL1Util_H +#define CbmL1Util_H 1 + +#include "Rtypes.h" + +class FairTrackParam; + +/// +/// Collection of useful utilites for CbmL1 +/// +namespace cbm::L1Util +{ + + /// copy fair track param to arrays + // TODO: reorganize + void CopyTrackParam2TC(const FairTrackParam* par, Double_t T[], Double_t C[]); + + /// copy arrays to fair track param + // TODO: reorganize + void CopyTC2TrackParam(FairTrackParam* par, Double_t T[], Double_t C[]); + +} // namespace cbm::L1Util + +#endif diff --git a/reco/L1/CbmL1Vtx.h b/reco/L1/CbmL1Vtx.h index 288802829ee64960bf300103bc02ff4292cf54c3..6b52c024c7a7e122c443aaebb36becba6b2d767d 100644 --- a/reco/L1/CbmL1Vtx.h +++ b/reco/L1/CbmL1Vtx.h @@ -21,9 +21,8 @@ #ifndef CbmL1Vtx_H #define CbmL1Vtx_H -#include "CbmKFVertexInterface.h" -struct CbmL1Vtx : public CbmKFVertexInterface { +struct CbmL1Vtx { CbmL1Vtx() : MC_mass(0) , MC_q(0) @@ -52,14 +51,14 @@ struct CbmL1Vtx : public CbmKFVertexInterface { double mass, mass_err; - Double_t& GetRefX() { return x; } - Double_t& GetRefY() { return y; } - Double_t& GetRefZ() { return z; } - Double_t* GetCovMatrix() { return C; } - Double_t& GetRefChi2() { return chi2; } - Int_t& GetRefNDF() { return NDF; } - Double_t& GetRefMass() { return mass; } - Double_t& GetRefMassError() { return mass_err; } + double& GetRefX() { return x; } + double& GetRefY() { return y; } + double& GetRefZ() { return z; } + double* GetCovMatrix() { return C; } + double& GetRefChi2() { return chi2; } + int& GetRefNDF() { return NDF; } + double& GetRefMass() { return mass; } + double& GetRefMassError() { return mass_err; } }; #endif diff --git a/reco/KF/CbmTrackingDetectorInterfaceInit.cxx b/reco/L1/CbmTrackingDetectorInterfaceInit.cxx similarity index 100% rename from reco/KF/CbmTrackingDetectorInterfaceInit.cxx rename to reco/L1/CbmTrackingDetectorInterfaceInit.cxx diff --git a/reco/KF/CbmTrackingDetectorInterfaceInit.h b/reco/L1/CbmTrackingDetectorInterfaceInit.h similarity index 100% rename from reco/KF/CbmTrackingDetectorInterfaceInit.h rename to reco/L1/CbmTrackingDetectorInterfaceInit.h diff --git a/reco/L1/L1Algo/L1Field.cxx b/reco/L1/L1Algo/L1Field.cxx index 2dbaba5840a2a553c3e958ef1fa32f9c75479367..57172997aa079b9652d03b990d4054a2f5ccda31 100644 --- a/reco/L1/L1Algo/L1Field.cxx +++ b/reco/L1/L1Algo/L1Field.cxx @@ -4,7 +4,8 @@ #include "L1Field.h" -#include "CbmKF.h" +#include "FairField.h" +#include "FairRunAna.h" #include <iomanip> #include <iostream> @@ -179,12 +180,12 @@ void L1FieldRegion::CheckConsistency() const void L1FieldRegion::Get(const fvec& x, const fvec& y, const fvec& z, fvec* B) const { if (fgkForceUseOfOriginalField || fUseOriginalField) { + // TODO: replace with functional object + assert(FairRunAna::Instance()); for (size_t i = 0; i < fvec::size(); i++) { double inPos[3] = {x[i], y[i], z[i]}; - double outB[3]; - assert(CbmKF::Instance()); - assert(CbmKF::Instance()->GetMagneticField()); - CbmKF::Instance()->GetMagneticField()->GetFieldValue(inPos, outB); // TODO: replace with functional object + double outB[3] = {0., 0., 0.}; + if (FairRunAna::Instance()->GetField()) { FairRunAna::Instance()->GetField()->GetFieldValue(inPos, outB); } B[0][i] = outB[0]; B[1][i] = outB[1]; B[2][i] = outB[2]; diff --git a/reco/L1/L1Algo/utils/L1AlgoDraw.cxx b/reco/L1/L1Algo/utils/L1AlgoDraw.cxx index 67e72ae7c9b550dd2b4c5e5d9ff76983fa493695..5d4098beaf76faff879f3c95466e7385677475af 100644 --- a/reco/L1/L1Algo/utils/L1AlgoDraw.cxx +++ b/reco/L1/L1Algo/utils/L1AlgoDraw.cxx @@ -4,7 +4,6 @@ #include "L1AlgoDraw.h" -#include "CbmKF.h" #include "CbmL1.h" #include "TApplication.h" @@ -165,8 +164,9 @@ void L1AlgoDraw::DrawMCTracks() if (Zlast < par[5]) step = -step; while (fabs(par[5] - Zlast) > fabs(step)) { double znxt = par[5] + step; - CbmKF::Instance()->Propagate(par1, 0, znxt, par1[4]); - CbmKF::Instance()->Propagate(par, 0, znxt, par[4]); + //TODO: replace this part with some L1 utility + // CbmKF::Instance()->Propagate(par1, 0, znxt, par1[4]); + // CbmKF::Instance()->Propagate(par, 0, znxt, par[4]); double w = fabs(znxt - Zfrst); double w1 = fabs(znxt - Zlast); if (w + w1 < 1.e-3) { diff --git a/reco/L1/L1LinkDef.h b/reco/L1/L1LinkDef.h index 7ac1d5681782fce84e35846fc44ac26cc66b39e3..53245554a80a3c90ef27ce0bd7bb08df430d2e15 100644 --- a/reco/L1/L1LinkDef.h +++ b/reco/L1/L1LinkDef.h @@ -10,20 +10,15 @@ #pragma link off all classes; #pragma link off all functions; +#pragma link C++ class CbmTrackingDetectorInterfaceInit + ; #pragma link C++ class CbmL1 + ; #pragma link C++ class CbmL1StsTrackFinder + ; -//#pragma link C++ class CbmL1TrdTrackFinderSts+; -#pragma link C++ class CbmL1TrackMerger + ; -#pragma link C++ class CbmL1TofMerger + ; //#pragma link C++ class CbmL1MuchFinder+; //#pragma link C++ class CbmL1MuchHit+; //#pragma link C++ class CbmL1MuchTrack+; //#pragma link C++ class CbmL1MuchFinderQa+; -#pragma link C++ class CbmL1TrdTracklet + ; -#pragma link C++ class CbmL1TrdTracklet4 + ; #pragma link C++ class CbmL1GlobalTrackFinder + ; #pragma link C++ class CbmL1GlobalFindTracksEvents + ; -//#pragma link C++ class CbmL1CATrdTrackFinderSA+; //#pragma link C++ class CbmL1SttHit+; //#pragma link C++ class CbmL1SttTrackFinder+; //#pragma link C++ class CbmL1SttTrack+; diff --git a/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx b/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx index 27f0629d7ea56f7812714cbc2018d11a291b8d86..554588137708607a615ce549fd520f50370ed564 100644 --- a/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx +++ b/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx @@ -21,7 +21,7 @@ #include "CbmEvent.h" #include "CbmGlobalTrack.h" -#include "CbmKFMath.h" +#include "CbmL1Util.h" #include "CbmMuchTrack.h" #include "CbmStsHit.h" #include "CbmStsTrack.h" @@ -92,8 +92,8 @@ Int_t CbmL1GlobalTrackFinder::CopyL1Tracks(CbmEvent* event) CbmGlobalTrack* t = L1_DYNAMIC_CAST<CbmGlobalTrack*>(fGlobalTracks->At(globalTrackIndex++)); t->SetFlag(0); FairTrackParam fpar(*t->GetParamFirst()), lpar(*t->GetParamLast()); - CbmKFMath::CopyTC2TrackParam(&fpar, T.T, T.C); - CbmKFMath::CopyTC2TrackParam(&lpar, T.TLast, T.CLast); + cbm::L1Util::CopyTC2TrackParam(&fpar, T.T, T.C); + cbm::L1Util::CopyTC2TrackParam(&lpar, T.TLast, T.CLast); t->SetParamFirst(&fpar); t->SetParamLast(&lpar); t->SetChi2(T.chi2); @@ -177,8 +177,8 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmTrack(CbmL1Track l1track, CbmTrack* //track->SetFlag(T->GetQuality());//??? FairTrackParam fpar(*track->GetParamFirst()), lpar(*track->GetParamLast()); - CbmKFMath::CopyTC2TrackParam(&fpar, T->T, T->C); - CbmKFMath::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); + cbm::L1Util::CopyTC2TrackParam(&fpar, T->T, T->C); + cbm::L1Util::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); } // ------------------------------------------------------------------------- @@ -215,8 +215,8 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmStsTrack(CbmL1Track l1track, CbmStsT track->SetLastHitTimeError(T->CLast[20]); FairTrackParam fpar(*track->GetParamFirst()), lpar(*track->GetParamLast()); - CbmKFMath::CopyTC2TrackParam(&fpar, T->T, T->C); - CbmKFMath::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); + cbm::L1Util::CopyTC2TrackParam(&fpar, T->T, T->C); + cbm::L1Util::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); } // ------------------------------------------------------------------------- @@ -243,8 +243,8 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmMuchTrack(CbmL1Track l1track, CbmMuc //track->SetFlag(T->GetQuality());//??? FairTrackParam fpar(*track->GetParamFirst()), lpar(*track->GetParamLast()); - CbmKFMath::CopyTC2TrackParam(&fpar, T->T, T->C); - CbmKFMath::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); + cbm::L1Util::CopyTC2TrackParam(&fpar, T->T, T->C); + cbm::L1Util::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); } // ------------------------------------------------------------------------- @@ -272,8 +272,8 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmTrdTrack(CbmL1Track l1track, CbmTrdT //track->SetFlag(T->GetQuality());//??? FairTrackParam fpar(*track->GetParamFirst()), lpar(*track->GetParamLast()); - CbmKFMath::CopyTC2TrackParam(&fpar, T->Tpv, T->Cpv); - CbmKFMath::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); + cbm::L1Util::CopyTC2TrackParam(&fpar, T->Tpv, T->Cpv); + cbm::L1Util::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); } // ------------------------------------------------------------------------- @@ -300,8 +300,8 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmTofTrack(CbmL1Track l1track, CbmTofT //track->SetFlag(T->GetQuality());//??? //FairTrackParam fpar(*track->GetParamFirst()), lpar(*track->GetParamLast()); - //CbmKFMath::CopyTC2TrackParam(&fpar, T->T, T->C); - //CbmKFMath::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); + //CbmL1Util::CopyTC2TrackParam(&fpar, T->T, T->C); + //CbmL1Util::CopyTC2TrackParam(&lpar, T->TLast, T->CLast); } // ------------------------------------------------------------------------- diff --git a/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx b/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx index d61263b4a1697abff27f6c885573dcc9aceb55ed..dcf6a6193560a54211205ab6aaa2d0e1d080a11b 100644 --- a/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx +++ b/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx @@ -20,7 +20,7 @@ #include "CbmL1StsTrackFinder.h" #include "CbmEvent.h" -#include "CbmKFMath.h" +#include "CbmL1Util.h" #include "CbmStsHit.h" #include "CbmStsTrack.h" @@ -77,8 +77,8 @@ Int_t CbmL1StsTrackFinder::CopyL1Tracks(CbmEvent* event) CbmStsTrack* t = L1_DYNAMIC_CAST<CbmStsTrack*>(fTracks->At(trackIndex++)); t->SetFlag(0); FairTrackParam fpar(*t->GetParamFirst()), lpar(*t->GetParamLast()); - CbmKFMath::CopyTC2TrackParam(&fpar, T.T, T.C); - CbmKFMath::CopyTC2TrackParam(&lpar, T.TLast, T.CLast); + cbm::L1Util::CopyTC2TrackParam(&fpar, T.T, T.C); + cbm::L1Util::CopyTC2TrackParam(&lpar, T.TLast, T.CLast); t->SetParamFirst(&fpar); t->SetParamLast(&lpar); t->SetChiSq(T.chi2); diff --git a/reco/alignment/CMakeLists.txt b/reco/alignment/CMakeLists.txt index c2e9448ef00638a41d036b2dee1efd15d139dae2..136aa977142cff387f1bd9f1a92915a6282f32c7 100644 --- a/reco/alignment/CMakeLists.txt +++ b/reco/alignment/CMakeLists.txt @@ -17,7 +17,7 @@ set(PUBLIC_DEPENDENCIES ) set(PRIVATE_DEPENDENCIES - L1 + KF bba::library CbmStsBase ) diff --git a/reco/offline/steer/CMakeLists.txt b/reco/offline/steer/CMakeLists.txt index 597907cb4e5f87e1d10b4cec9d165db90d72a9ad..044afdd09e4371f64a65c0bd2e1db1fe2d27f83e 100644 --- a/reco/offline/steer/CMakeLists.txt +++ b/reco/offline/steer/CMakeLists.txt @@ -43,6 +43,7 @@ set(PRIVATE_DEPENDENCIES CbmTrdReco CbmSimSteer L1 + KF Algo )