Skip to content
Snippets Groups Projects
Commit ab09a715 authored by Administrator's avatar Administrator Committed by Pierre-Alain Loizeau
Browse files

Test if empty branches in the output file exist

Add a macro which loops over all defined branches according to the BranchList
folder and checks is empty branches exist. Empty branches indicate a problem.
Add test to the CI which execute the macro for all created output files.
parent e77a8552
No related branches found
No related tags found
No related merge requests found
Pipeline #34091 failed
......@@ -5,6 +5,9 @@ GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/run/run_digi.C)
GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/run/run_reco.C)
GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/run/run_qa.C)
Set(MACRO_DIR ${CBMROOT_BINARY_DIR}/macro/run)
GENERATE_CBM_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/tools/checkBranchFilled.C ${MACRO_DIR})
GENERATE_EXE_SCRIPT(${CBMROOT_BINARY_DIR}/bin cbmreco_offline)
Set(MACRO_DIR ${CMAKE_CURRENT_BINARY_DIR})
......@@ -114,6 +117,18 @@ foreach(setup IN LISTS cbm_setup)
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_tra_coll
set(testname run_${sname}_tra_coll_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_coll.tra.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_tra_coll_${setup}
FIXTURES_SETUP fixt_tra_coll_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_tra_sign
# --- Transport run with signal events, using run_tra_file.C
set(testname run_${sname}_tra_sign)
......@@ -152,11 +167,23 @@ foreach(setup IN LISTS cbm_setup)
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_tra_coll_${setup}
FIXTURES_REQUIRED fixt_tra_coll_test_output_${setup}
FIXTURES_SETUP fixt_digi_ev_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_digi_ev
set(testname run_${sname}_digi_ev_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_ev.raw.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_digi_ev_${setup}
FIXTURES_SETUP fixt_digi_ev_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_digi_ts
# --- Detector response simulation, time-based, using run_digi.C
set(testname run_${sname}_digi_ts)
......@@ -170,11 +197,23 @@ foreach(setup IN LISTS cbm_setup)
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED "fixt_tra_coll_${setup};fixt_tra_sign_${setup};fixt_tra_beam_${setup}"
FIXTURES_REQUIRED "fixt_tra_coll_test_output_${setup};fixt_tra_sign_${setup};fixt_tra_beam_${setup}"
FIXTURES_SETUP fixt_digi_ts_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_digi_ts
set(testname run_${sname}_digi_ts_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_ts.raw.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_digi_ts_${setup}
FIXTURES_SETUP fixt_digi_ts_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_reco_ev_ideal
# --- Event-by-event reconstruction from event-based simulation
# --- Ideal raw event builder
......@@ -185,11 +224,23 @@ foreach(setup IN LISTS cbm_setup)
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_digi_ev_${setup}
FIXTURES_REQUIRED fixt_digi_ev_test_output_${setup}
FIXTURES_SETUP fixt_reco_ev_ideal_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_ev_ideal
set(testname run_${sname}_reco_ev_ideal_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_eb_eb_ideal.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_ev_ideal_${setup}
FIXTURES_SETUP fixt_reco_ev_ideal_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_reco_offline_ev_ideal
# --- Event-by-event reconstruction from event-based simulation, with binary cbmreco_offline
# --- Ideal raw event builder
......@@ -203,11 +254,23 @@ foreach(setup IN LISTS cbm_setup)
add_test(NAME ${testname} COMMAND ${binary} ${cl_options})
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FIXTURES_REQUIRED fixt_digi_ev_${setup}
FIXTURES_REQUIRED fixt_digi_ev_test_output_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_ideal_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_offline_ev_ideal
set(testname run_${sname}_reco_offline_ev_ideal_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_offline_ev_ideal.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_offline_ev_ideal_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_ideal_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_reco_ev_real
# --- Event-by-event reconstruction from event-based simulation
# --- Real raw event builder
......@@ -219,11 +282,23 @@ foreach(setup IN LISTS cbm_setup)
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_digi_ev_${setup}
FIXTURES_REQUIRED fixt_digi_ev_test_output_${setup}
FIXTURES_SETUP fixt_reco_ev_real_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_ev_real
set(testname run_${sname}_reco_ev_real_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_eb_eb_real.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_ev_real_${setup}
FIXTURES_SETUP fixt_reco_ev_real_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_reco_offline_ev_real
# --- Event-by-event reconstruction from event-based simulation, with binary cbmreco_offline
# --- Real raw event builder
......@@ -237,8 +312,20 @@ foreach(setup IN LISTS cbm_setup)
add_test(NAME ${testname} COMMAND ${binary} ${cl_options})
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FIXTURES_REQUIRED fixt_digi_ev_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_ideal_${setup}
FIXTURES_REQUIRED fixt_digi_ev_test_output_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_real_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_offline_ev_real
set(testname run_${sname}_reco_offline_ev_real_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_offline_ev_real.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_offline_ev_real_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_real_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
......@@ -253,11 +340,23 @@ foreach(setup IN LISTS cbm_setup)
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_digi_ts_${setup}
FIXTURES_REQUIRED fixt_digi_ts_test_output_${setup}
FIXTURES_SETUP fixt_reco_ts_eb_ideal_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_ts_eb_ideal
set(testname run_${sname}_reco_ts_eb_ideal_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_ts_eb_ideal.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_ts_eb_ideal_${setup}
FIXTURES_SETUP fixt_reco_ts_eb_ideal_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_reco_offline_ts_eb_ideal
# --- Event-by-event reconstruction from time-based simulation, with binary cbmreco_offline
# --- Ideal raw event builder
......@@ -271,11 +370,24 @@ foreach(setup IN LISTS cbm_setup)
add_test(NAME ${testname} COMMAND ${binary} ${cl_options})
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FIXTURES_REQUIRED fixt_digi_ev_${setup}
FIXTURES_REQUIRED fixt_digi_ev_test_output_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_ideal_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_offline_ts_eb_ideal
set(testname run_${sname}_reco_offline_ts_eb_ideal_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_offline_ts_eb_ideal.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_offline_ev_ideal_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_ideal_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_reco_ts_eb_real
# --- Event-by-event reconstruction from time-based simulation
# --- Real raw event builder
......@@ -287,11 +399,23 @@ foreach(setup IN LISTS cbm_setup)
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_digi_ts_${setup}
FIXTURES_REQUIRED fixt_digi_ts_test_output_${setup}
FIXTURES_SETUP fixt_reco_ts_eb_real_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_ts_eb_real
set(testname run_${sname}_reco_ts_eb_real_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_ts_eb_real.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_ts_eb_real_${setup}
FIXTURES_SETUP fixt_reco_ts_eb_real_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_reco_offline_ts_eb_real
# --- Event-by-event reconstruction from event-based simulation, with binary cbmreco_offline
# --- Real raw event builder
......@@ -305,8 +429,20 @@ foreach(setup IN LISTS cbm_setup)
add_test(NAME ${testname} COMMAND ${binary} ${cl_options})
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FIXTURES_REQUIRED fixt_digi_ev_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_ideal_${setup}
FIXTURES_REQUIRED fixt_digi_ev_test_output_${setup}
FIXTURES_SETUP fixt_reco_offline_ts_eb_real_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_offline_ts_eb_real
set(testname run_${sname}_reco_offline_ts_eb_real_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_offline_ts_eb_real.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_offline_ts_eb_real_${setup}
FIXTURES_SETUP fixt_reco_offline_ts_eb_real_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
......@@ -323,11 +459,13 @@ foreach(setup IN LISTS cbm_setup)
FAIL_REGULAR_EXPRESSION "QA checks failed"
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "QA checks passed;Macro finished successfully"
FIXTURES_REQUIRED "fixt_tra_coll_${setup};fixt_digi_ts_${setup};fixt_reco_ts_eb_ideal_${setup}"
FIXTURES_REQUIRED
"fixt_tra_coll_test_output_${setup};fixt_digi_ts_test_output_${setup};fixt_reco_ts_eb_ideal_test_output_${setup}"
FIXTURES_SETUP fixt_qa_ts_eb_ideal_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_qa_ts_eb_real
# --- Run QA tasks with Event-by-event reconstruction from time-based simulation
# --- Real raw event builder
......@@ -341,7 +479,8 @@ foreach(setup IN LISTS cbm_setup)
FAIL_REGULAR_EXPRESSION "QA checks failed"
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "QA checks passed;Macro finished successfully"
FIXTURES_REQUIRED "fixt_tra_coll_${setup};fixt_digi_ts_${setup};fixt_reco_ts_eb_real_${setup}"
FIXTURES_REQUIRED
"fixt_tra_coll_test_output_${setup};fixt_digi_ts_test_output_${setup};fixt_reco_ts_eb_real_test_output_${setup}"
FIXTURES_SETUP fixt_qa_ts_eb_real_${setup}
RESOURCE_LOCK collParDb_${setup}
)
......@@ -356,11 +495,23 @@ foreach(setup IN LISTS cbm_setup)
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_digi_ts_${setup}
FIXTURES_REQUIRED fixt_digi_ts_test_output_${setup}
FIXTURES_SETUP fixt_reco_ts_tb_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_ts_tb
set(testname run_${sname}_reco_ts_tb_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_ts_tb.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_ts_tb_${setup}
FIXTURES_SETUP fixt_reco_ts_tb_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test run_reco_offline_ts_tb
# --- Time-based reconstruction from time-based simulation, with binary cbmreco_offline
set(testname run_${sname}_reco_offline_ts_tb)
......@@ -373,11 +524,22 @@ foreach(setup IN LISTS cbm_setup)
add_test(NAME ${testname} COMMAND ${binary} ${cl_options})
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FIXTURES_REQUIRED fixt_digi_ev_${setup}
FIXTURES_SETUP fixt_reco_offline_ev_ideal_${setup}
FIXTURES_REQUIRED fixt_digi_ev_test_output_${setup}
FIXTURES_SETUP fixt_reco_offline_ts_tb_${setup}
RESOURCE_LOCK collParDb_${setup}
)
# --- Test output of run_reco_offline_ts_tb
set(testname run_${sname}_reco_offline_ts_tb_test_output)
add_test(${testname} ${MACRO_DIR}/checkBranchFilled.sh \"data/${sname}_offline_ts_tb.reco.root\")
set_tests_properties(${testname} PROPERTIES
TIMEOUT ${timeOutTime}
FAIL_REGULAR_EXPRESSION "segmentation violation"
PASS_REGULAR_EXPRESSION "Macro finished successfully"
FIXTURES_REQUIRED fixt_reco_offline_ts_tb_${setup}
FIXTURES_SETUP fixt_reco_offline_ts_tb_test_output_${setup}
RESOURCE_LOCK collParDb_${setup}
)
endforeach(setup IN LISTS cbm_setup)
......
......
/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Florian Uhlig [committer] */
#if !defined(__CLING__)
#include "TBranch.h"
#include "TFile.h"
#include "TLeaf.h"
#include "TList.h"
#include "TObjString.h"
#include "TString.h"
#include "TTree.h"
#include <algorithm>
#include <iostream>
#endif
int checkBranchFilled(TString inFile)
{
//Open the file and acces the Tree as well as the TList with branch names
std::unique_ptr<TFile> _file{TFile::Open(inFile.Data(), "READ")};
std::unique_ptr<TTree> inTree{dynamic_cast<TTree*>(_file->Get("cbmsim"))};
std::unique_ptr<TList> _list{dynamic_cast<TList*>(_file->Get("BranchList"))};
Int_t retVal = 0;
// Loop over all branches defined in the BranchList folder. These are the
// branches which were registered by the framework
for (const auto&& obj : *_list) {
// The TList contains a list of TObjString
// access the content with GetString()
TString branchName = static_cast<TObjString*>(obj)->GetString();
std::cout << "Checking if branch " << branchName << " is empty" << std::endl;
TBranch* _branch = inTree->FindBranch(branchName);
// Skip branches which ends with a dot since these are not TClonesArrays
// or std::vector but some auxillary data
// Also skip entries in the BranchList folder which do not contain a
// branch name. This can happen if the branch was only present in memory
// and wasn't written to file
if (!_branch || branchName.EndsWith(".")) continue;
TObjArray* leaves = _branch->GetListOfLeaves();
TObjArray* subbranch = _branch->GetListOfBranches();
// The following code I put together after one day of trial and error.
// Unfortunately I can't really explain it but when the main branch
// eg. MvdDigi_ is empty the maximum and the minimum extracted from the
// leaf is equal which is used as trigger to indicate an empty branch
if (0 != subbranch->GetEntriesFast()) {
for (UInt_t ui = 0; ui < leaves->GetEntriesFast(); ++ui) {
TLeaf* lf = static_cast<TLeaf*>(leaves->At(ui));
Int_t min = lf->GetMinimum();
Int_t max = lf->GetMaximum();
if (max == min) {
std::cout << "[ERROR] Branch " << branchName << " is empty" << std::endl;
++retVal;
}
}
}
}
if (0 == retVal) {
std::cout << "Macro finished successfully" << std::endl;
}
return retVal;
}
int main(int argc, char** argv)
{
if (argc != 2) {
std::cout << "Wrong number of arguments!" << std::endl;
std::cout << "Please pass the file name as only parameter" << std::endl;
return -1;
}
const std::string filelist = argv[1];
return checkBranchFilled(filelist);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment