From 9552da8b4fe84e2bd61024f171bd16dbcd54d769 Mon Sep 17 00:00:00 2001 From: "s.zharko@gsi.de" <s.zharko@gsi.de> Date: Thu, 6 Mar 2025 17:58:46 +0100 Subject: [PATCH] Adding bba alignment to offlien data reconstruction chain --- macro/alignment/run_BbaAlignment_mcbm.C | 1 + macro/beamtime/common/reco_mcbm.sh | 45 +++++++++++++++++++- macro/beamtime/mcbm2025/mcbm_event_reco_L1.C | 1 + reco/alignment/CbmBbaAlignmentTask.cxx | 7 ++- reco/alignment/CbmBbaAlignmentTask.h | 9 +++- 5 files changed, 56 insertions(+), 7 deletions(-) diff --git a/macro/alignment/run_BbaAlignment_mcbm.C b/macro/alignment/run_BbaAlignment_mcbm.C index 2607632273..4592f514d2 100644 --- a/macro/alignment/run_BbaAlignment_mcbm.C +++ b/macro/alignment/run_BbaAlignment_mcbm.C @@ -144,6 +144,7 @@ void run_BbaAlignment_mcbm(Int_t nEvents = -1, TString dataset = "data/mcbm_beam // ----- BBA alignment -------------------------------------------- CbmBbaAlignmentTask* alignment = new CbmBbaAlignmentTask(); + alignment->SetMatrixOutFileName(Form("AlignmentMatrices_%s_finetuning.root", setupName.Data())); alignment->SetMcbmTrackingMode(); alignment->SetSimulatedMisalignmentRange(SimulatedMisalignmentRange); diff --git a/macro/beamtime/common/reco_mcbm.sh b/macro/beamtime/common/reco_mcbm.sh index 4844bdf88e..e49c650819 100755 --- a/macro/beamtime/common/reco_mcbm.sh +++ b/macro/beamtime/common/reco_mcbm.sh @@ -145,6 +145,7 @@ DO_RECO=0 DO_QA=0 # Main QA Macro DO_QA_MODULE=0 # QA Macro by Alexandru DO_LAMBDA=0 # Lambda analysis using KFParticleFinder +DO_BBA=0 # BBA alignment on reconstructed data STEPS_TO_PRINT="" ONLINE_PAR=${VMCWORKDIR}/parameters/online @@ -156,6 +157,7 @@ DIR_UNPACK="" DIR_RECO="" DIR_QA="" DIR_KFPF="" +DIR_BBA="" # ----- Run information RUN=-1 @@ -190,6 +192,10 @@ while [[ $# -gt 0 ]]; do DO_LAMBDA=1 STEPS_TO_PRINT="${STEPS_TO_PRINT} --kfpf" ;; + --bba ) + DO_BBA=1 + STEPS_TO_PRINT="${STEPS_TO_PRINT} --bba" + ;; --tsa ) TSA=${2} ;; @@ -223,6 +229,9 @@ while [[ $# -gt 0 ]]; do --kfpf-dir ) DIR_KFPF=${2} ;; + --bba-dir ) + DIR_BBA=${2} + ;; --setup-only ) I_WANT_ONLY_SETUP=1 ;; @@ -271,6 +280,11 @@ else DIR_KFPF=$(realpath -m ${DIR_KFPF}) fi +if [[ -z ${DIR_BBA} ]]; then + DIR_BBA=${DATA_TOP_DIR} +else + DIR_BBA=$(realpath -m ${DIR_KFPF}) +fi # ----- Check the environment # @@ -338,6 +352,7 @@ if [[ ${I_WANT_ONLY_SETUP} -eq 1 ]]; then DO_QA=0 DO_QA_MODULE=0 DO_LAMBDA=0 + DO_BBA=0 STEPS_TO_PRINT=" --setup" if [[ ${RUN} -lt 0 ]]; then RUN=${RUN_IF_ONLY_SETUP_NEEDED} @@ -368,6 +383,7 @@ MACRO_RECO="${VMCWORKDIR}/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C" MACRO_QA="${VMCWORKDIR}/macro/mcbm/mcbm_qa.C" MACRO_QA_MODULE="${VMCWORKDIR}/macro/qa/run_recoQa.C" MACRO_KFPF="${VMCWORKDIR}/macro/mcbm/mcbm_hadron_kfp_ana.C" +MACRO_BBA="${VMCWORKDIR}/macro/alignment/run_BbaAlignment_mcbm.C" SETUP_NAME=$(${RUN_INFO} --run ${RUN} --geotag) # ----- Setting selections vs. run number @@ -398,7 +414,7 @@ RECO_FILE="${DIR_RECO}/${FILE_LABEL}.rec.root" KF_SETUP_FILE="${DIR_RECO}/${FILE_LABEL}.rec.kf.setup" KF_MATERIAL="${DIR_RECO}/${SETUP_NAME}.mat.kf.bin" CA_PAR_FILE="${DIR_RECO}/${FILE_LABEL}.rec.ca.par" - +BBA_FILE="${DIR_BBA}/${FILE_LABEL}.ali.root" # ----- # Log Files @@ -603,5 +619,32 @@ if [[ ${DO_LAMBDA} -eq 1 ]]; then root -b -l -q ${MACRO_KFPF}"(${PARS})" fi +# ----- Run BBA alignment +if [[ ${DO_BBA} -eq 1 ]]; then + BBA_REC="${DIR_BBA}/${FILE_LABEL}.rec.root" + BBA_GEO="${DIR_BBA}/${FILE_LABEL}.geo.root" + BBA_PAR="${DIR_BBA}/${FILE_LABEL}.par.root" + if [[ ${BBA_REC} != ${RECO_FILE} ]]; then + pushd . + cd ${DIR_BBA} + ln -s -f $(realpath ${RECO_FILE}) $(basename ${BBA_REC}) + popd + fi + if [[ ${BBA_GEO} != ${SETUP_GEO_FILE} ]]; then + pushd . + cd ${DIR_BBA} + ln -s -f $(realpath ${SETUP_GEO_FILE}) $(basename ${BBA_GEO}) + popd + fi + if [[ ${BBA_PAR} != ${RECO_PAR_FILE} ]]; then + pushd . + cd ${DIR_BBA} + ln -s -f $(realpath ${RECO_PAR_FILE}) $(basename ${BBA_PAR}) + popd + fi + BBA_DATASET="${DIR_BBA}/${FILE_LABEL}" + PARS="0,\"${BBA_DATASET}\",\"${SETUP_NAME}\",0.,kFALSE"; + root -b -l -q ${MACRO_BBA}"(${PARS})" +fi printf "Reconstruction of %s succeeded\n" "${TSA_INP}" diff --git a/macro/beamtime/mcbm2025/mcbm_event_reco_L1.C b/macro/beamtime/mcbm2025/mcbm_event_reco_L1.C index b2befd366e..293f5362ea 100644 --- a/macro/beamtime/mcbm2025/mcbm_event_reco_L1.C +++ b/macro/beamtime/mcbm2025/mcbm_event_reco_L1.C @@ -128,6 +128,7 @@ Bool_t mcbm_event_reco_L1(UInt_t uRunId = 3453, if (uRunId >= 2160) iCalSet = 700900500; if (uRunId >= 2352) iCalSet = 22002500; if (uRunId >= 2700) iCalSet = 12032500; + if (uRunId >= 3399) iCalSet = 22002500; Double_t Tint = 100.; // coincidence time interval Int_t iTrackMode = 2; // 2 for TofTracker diff --git a/reco/alignment/CbmBbaAlignmentTask.cxx b/reco/alignment/CbmBbaAlignmentTask.cxx index 255b7686d0..e36f8b7d05 100644 --- a/reco/alignment/CbmBbaAlignmentTask.cxx +++ b/reco/alignment/CbmBbaAlignmentTask.cxx @@ -326,7 +326,7 @@ void CbmBbaAlignmentTask::Exec(Option_t* /*opt*/) fFitter.SetDefaultMomentumForMs(0.1); for (int iTr = 0; iTr < fInputStsTracks->GetEntriesFast(); iTr++) { - if (static_cast<int>(fTracks.size()) >= fMaxNtracks) { + if (fMaxNtracks && static_cast<int>(fTracks.size()) >= fMaxNtracks) { break; } const CbmStsTrack* stsTrack = dynamic_cast<CbmStsTrack*>(fInputStsTracks->At(iTr)); @@ -1044,10 +1044,9 @@ void CbmBbaAlignmentTask::Finish() } // sensors // save matrices to disk - TFile* misalignmentMatrixRootfile = - new TFile("AlignmentMatrices_mcbm_beam_2022_05_23_nickel_finetuning.root", "RECREATE"); + TFile* misalignmentMatrixRootfile = new TFile(fsMatrixOutFileName, "RECREATE"); if (misalignmentMatrixRootfile->IsOpen()) { - gDirectory->WriteObject(&alignmentMatrices, "AlignmentMatrices"); + gDirectory->WriteObject(&alignmentMatrices, "MisalignMatrices"); misalignmentMatrixRootfile->Write(); misalignmentMatrixRootfile->Close(); } diff --git a/reco/alignment/CbmBbaAlignmentTask.h b/reco/alignment/CbmBbaAlignmentTask.h index 0aa2f51319..5db2bb39b8 100644 --- a/reco/alignment/CbmBbaAlignmentTask.h +++ b/reco/alignment/CbmBbaAlignmentTask.h @@ -35,7 +35,7 @@ class CbmBbaAlignmentTask : public FairTask { public: // Constructors/Destructors --------- CbmBbaAlignmentTask(const char* name = "CbmBbaAlignmentTask", Int_t iVerbose = 0, - TString histoFileName = "CbmBbaAlignmentHisto.root"); + TString histoFileName = "./CbmBbaAlignmentHisto.root"); ~CbmBbaAlignmentTask(); Int_t GetZtoNStation(Double_t getZ); @@ -50,6 +50,8 @@ class CbmBbaAlignmentTask : public FairTask { void SetSimulatedMisalignmentRange(double range) { fSimulatedMisalignmentRange = range; } void SetRandomSeed(int seed) { fRandomSeed = seed; } + void SetMatrixOutFileName(TString sMatrixOutFileName) { fsMatrixOutFileName = sMatrixOutFileName; } + public: enum TrackingMode { @@ -133,14 +135,16 @@ class CbmBbaAlignmentTask : public FairTask { // collection of selected tracks and hits std::vector<TrackContainer> fTracks; + //output file with histograms + TString fsMatrixOutFileName{"AlignmentMatrices_finetuning.root"}; TString fHistoFileName{"CbmBbaAlignmentHisto.root"}; TFile* fHistoFile{nullptr}; TDirectory* fHistoDir{nullptr}; Int_t fNEvents{0}; - Int_t fMaxNtracks{100000}; + Int_t fMaxNtracks{0}; int fNtrackingStations{0}; int fNalignmentBodies{0}; @@ -156,6 +160,7 @@ class CbmBbaAlignmentTask : public FairTask { long fNdfTotal{0}; long fFixedNdf{-1}; + std::vector<Sensor> fSensors; std::vector<AlignmentBody> fAlignmentBodies; -- GitLab