diff --git a/macro/geometry/check_radlen.C b/macro/geometry/check_radlen.C new file mode 100644 index 0000000000000000000000000000000000000000..8ebabb8e4201d1d55600554fb3249b77f2818478 --- /dev/null +++ b/macro/geometry/check_radlen.C @@ -0,0 +1,105 @@ +/* Copyright (C) 2021 Facility for Antiproton and Ion Research in Europe, Darmstadt + SPDX-License-Identifier: GPL-3.0-only + Authors: P.-A. Loizeau [committer] */ + +#include <cstdlib> +#include <iostream> + +#include <cmath> + +uint32_t check_radlen(std::string fileName = "test.geo.root", double_t dTolerance = 0.1) +{ + /// Instantiate a FairRun to get the unit convention in ROOT Geo classes forced to ROOT one + /// (fix for the bug present between ROOT v6.18 and 6.25) + FairRunAna* fRun = new FairRunAna(); + + TString myName = "check_radlen"; + + TFile file(fileName.c_str(), "READ"); + if (!file.IsOpen()) { + std::cerr << "Was a root geo file supplied?" << std::endl; + exit(1); + }; + gROOT->cd(); + + file.GetObject("FAIRGeom", gGeoManager); + if (nullptr == gGeoManager) { + std::cout << "No geo manager found in file, probably this is a standalone geometry file" << std::endl; + + std::string geo_tag = fileName.substr(fileName.find_last_of('/') + 1); + geo_tag = geo_tag.substr(0, geo_tag.find_first_of('.')); + std::cout << "Trying to load volume with geo tag extracted from file name: " << geo_tag << std::endl; + + TGeoVolume* pDetVol = nullptr; + file.GetObject(geo_tag.c_str(), pDetVol); + if (nullptr == pDetVol) { + std::cout << "Could not load the volume with a geo_tag matching the filename, file is not proper CBMROOT geometry" + << std::endl; + exit(1); + } + + std::cerr << "Method to load the materials from a -not simulated- geometry NOT YET IMPLEMENTED" << std::endl; + exit(1); + } + + gROOT->cd(); + + TList* plMats = gGeoManager->GetListOfMaterials(); + + uint32_t uNbMats = plMats->GetEntries(); + uint32_t uNbSkip = 0; + uint32_t uNbFail = 0; + uint32_t uNbOkay = 0; + for (const auto&& pObj : *plMats) { + TGeoMaterial* material = dynamic_cast<TGeoMaterial*>(pObj); + + std::string sRes = "SKIP \t"; + double_t dA = material->GetA(); + double_t dZ = material->GetZ(); + double_t dRho = material->GetDensity(); + double_t dRadLen = material->GetRadLen(); + + double_t dExpRadLen = 0.; + double_t dDiff = 0.; + double_t dDeviation = 0.; + + if (dZ < 1) { + /// Special case for "vacuum" and "dummy" + uNbSkip++; + } + else { + dExpRadLen = (716.4 * dA / (dZ * (dZ + 1) * std::log(287 / std::sqrt(dZ))) / dRho); + dDiff = dExpRadLen - dRadLen; + dDeviation = std::fabs(dDiff) / dRadLen; + if (dDeviation < dTolerance) { + sRes = "OKAY \t"; + uNbOkay++; + } + else { + sRes = "FAIL \t"; + uNbFail++; + } + } + + std::cout << sRes; + if (material->IsMixture()) { + std::cout << Form("Mixture \t%20s \tindex = %i \tAeff = %7g \tZeff = %7g \trho = %8g \tradlen = %8g \t", + material->GetName(), material->GetIndex(), dA, dZ, dRho, dRadLen); + } + else { + std::cout << Form("Material \t%20s \tindex = %i \tA = %7g \tZ = %7g \trho = %8g \tradlen = %8g \t", + material->GetName(), material->GetIndex(), dA, dZ, dRho, dRadLen); + } + std::cout << Form("Expected radlen = %8g \t Dev = %8g \t Diff = %8g", dExpRadLen, dDeviation, dDiff) << std::endl; + } + + gROOT->cd(); + RemoveGeoManager(); + file.Close(); + + std::cout << uNbFail << " failures and " << uNbSkip << " skipped in " << uNbMats << " materials" << std::endl; + + std::cout << "Program Ends" << std::endl; + + return uNbFail; +} // End of macro diff --git a/macro/geometry/check_radlen.sh b/macro/geometry/check_radlen.sh index 003ac609503ee3b0beffde31495c5f5ffc48f00f..5cc5d38f956032b052766edaf615a0217e7e636f 100755 --- a/macro/geometry/check_radlen.sh +++ b/macro/geometry/check_radlen.sh @@ -4,7 +4,7 @@ echo "Scanning the geometry" $1 -root -l -b -q '$VMCWORKDIR/macro/geometry/scan_geometry.C("'$1'")' 1>tmp +root -l -b -q '$VMCWORKDIR/macro/geometry/scan_geometry.C("'$1'")' &>tmp ROOT_EXIT=$?; if [ 0 -ne $ROOT_EXIT ]; then @@ -33,16 +33,16 @@ variables=`echo "$line" | sed -e 's/eff//g' | sed -e 's/index/jndex/g' | sed -e $variables \ 'BEGIN{\ if(Z<1){ - printf "SKIP"; \ + printf "SKIP \t "; \ exit 3; }; cal_rad_len=(716.4*A/(Z*(Z+1)*log(287/sqrt(Z)))/rho);\ #print cal_rad_len; diff=(cal_rad_len - radlen);\ if(diff*diff <= TOL*TOL*radlen*radlen ){\ - printf "OKAY"; exit 1; + printf "OKAY \t " cal_rad_len; exit 1; }else{\ - printf "FAIL"; exit 2; + printf "FAIL \t " cal_rad_len; exit 2; }}' STATUS=$?; diff --git a/macro/geometry/scan_geometry.C b/macro/geometry/scan_geometry.C index d6a23b63f9b92f0894507515aa6322cad897d45b..6dbb83d4f302eee6b709f67cfdab0eef2b42c719 100644 --- a/macro/geometry/scan_geometry.C +++ b/macro/geometry/scan_geometry.C @@ -34,15 +34,17 @@ void scan_geometry(std::string fileName = "test.geo.root", uint32_t uMaxNodeDept file.GetListOfKeys()->Print(); file.GetSize(); - std::string geo_tag = fileName.substr(fileName.find_last_of('/') + 1); - geo_tag = geo_tag.substr(0, geo_tag.find_first_of('.')); - std::cout << "geo tag extracted from file name is: " << geo_tag << std::endl; file.GetObject("FAIRGeom", gGeoManager); if (gGeoManager != nullptr) { top = gGeoManager->GetTopVolume(); }; gROOT->cd(); - if (top == nullptr) file.GetObject(geo_tag.c_str(), top); + if (top == nullptr) { + std::string geo_tag = fileName.substr(fileName.find_last_of('/') + 1); + geo_tag = geo_tag.substr(0, geo_tag.find_first_of('.')); + std::cout << "geo tag extracted from file name is: " << geo_tag << std::endl; + file.GetObject(geo_tag.c_str(), top); + } if (top == nullptr) file.GetObject("FAIRGeom", top); if (top == nullptr) file.GetObject("top", top); if (top == nullptr) file.GetObject("TOP", top); diff --git a/macro/mcbm/CMakeLists.txt b/macro/mcbm/CMakeLists.txt index 313fbf7a8db63be136ce2b9a8ae2a0826a04100a..f7c40d1192f6d89e3ffad89339e03c1de0bf4cd6 100644 --- a/macro/mcbm/CMakeLists.txt +++ b/macro/mcbm/CMakeLists.txt @@ -10,9 +10,7 @@ GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/mcbm/mcbm_qa.C) Set(MACRO_DIR ${CMAKE_CURRENT_BINARY_DIR}) GENERATE_CBM_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/geometry/check_media.C ${MACRO_DIR}) - -GENERATE_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/geometry/check_radlen.sh ${MACRO_DIR}) - +GENERATE_CBM_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/geometry/check_radlen.C ${MACRO_DIR}) # ============================================================================ # disable dev tests - GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/mcbm/mcbm_mc_dev.C) @@ -147,7 +145,7 @@ ForEach(setup IN LISTS cbm_setup) # --- Test check_radlen.sh set(testname mcbm_radlen_${setup}) - add_test(${testname} ${MACRO_DIR}/check_radlen.sh data/${setup}_test.geo.root ) + add_test(${testname} ${MACRO_DIR}/check_radlen.sh \"data/${setup}_test.geo.root\" ) Set(fixture_mcbm_radlen fixture_radlen_${setup}) set_tests_properties(${testname} PROPERTIES TIMEOUT 100 diff --git a/macro/run/CMakeLists.txt b/macro/run/CMakeLists.txt index fb485d1f53ff793dc1a28aceb2fd0c2b5ce05f60..58f360fe14b5fc068b98d12c44de904f741f3890 100644 --- a/macro/run/CMakeLists.txt +++ b/macro/run/CMakeLists.txt @@ -8,7 +8,7 @@ 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 ${CMAKE_CURRENT_BINARY_DIR}) -GENERATE_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/geometry/check_radlen.sh ${MACRO_DIR}) +GENERATE_CBM_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/geometry/check_radlen.C ${MACRO_DIR}) # ============================================================================ @@ -82,9 +82,8 @@ foreach(setup IN LISTS cbm_setup) # --- Test run_transport_json_config # --- Transport run using run_transport_json_config.C - set(json_config_file ${CBMROOT_SOURCE_DIR}/macro/run/config_ci.json) set(testname run_transport_json_config) - add_test(${testname} ${MACRO_DIR}/run_transport_json_config.sh \"${json_config_file}\" 2 ${randomSeed}) + add_test(${testname} ${MACRO_DIR}/run_transport_json_config.sh \"\" 2 ${randomSeed}) set_tests_properties(${testname} PROPERTIES TIMEOUT ${timeOutTime} PASS_REGULAR_EXPRESSION "Macro finished successfully" @@ -96,7 +95,7 @@ foreach(setup IN LISTS cbm_setup) # --- Test run_digi_json_config # --- Digitization run with using run_digi_json_config.C set(testname run_digi_json_config) - add_test(${testname} ${MACRO_DIR}/run_digi_json_config.sh \"${json_config_file}\") + add_test(${testname} ${MACRO_DIR}/run_digi_json_config.sh) set_tests_properties(${testname} PROPERTIES TIMEOUT ${timeOutTime} PASS_REGULAR_EXPRESSION "Macro finished successfully" @@ -110,11 +109,11 @@ foreach(setup IN LISTS cbm_setup) set(testname run_${sname}_tra_coll) set(input ${CBMROOT_SOURCE_DIR}/input/urqmd.auau.10gev.centr.root) add_test(${testname} ${MACRO_DIR}/run_tra_file.sh - \"${input}\" ${nEvents} \"data/${sname}_coll\" \"${setup}\" kGeant3 ${randomSeed} kTRUE) + \"${input}\" ${nEvents} \"data/${sname}_coll\" \"${setup}\" kGeant3 ${randomSeed}) set_tests_properties(${testname} PROPERTIES TIMEOUT ${timeOutTime} PASS_REGULAR_EXPRESSION "Macro finished successfully" - FIXTURES_REQUIRED run_cleanup + FIXTURES_REQUIRED cleanup FIXTURES_SETUP fixt_tra_coll_${setup} RESOURCE_LOCK collParDb_${setup} ) @@ -124,7 +123,7 @@ foreach(setup IN LISTS cbm_setup) set(testname run_${sname}_tra_sign) set(input ${CBMROOT_SOURCE_DIR}/input/pluto.auau.8gev.omega.mpmm.0001.root) add_test(${testname} ${MACRO_DIR}/run_tra_file.sh - \"${input}\" ${nEvents} \"data/${sname}_sign\" \"${setup}\" kGeant3 ${randomSeed} kTRUE) + \"${input}\" ${nEvents} \"data/${sname}_sign\" \"${setup}\" kGeant3 ${randomSeed}) set_tests_properties(${testname} PROPERTIES TIMEOUT ${timeOutTime} PASS_REGULAR_EXPRESSION "Macro finished successfully" @@ -137,7 +136,7 @@ foreach(setup IN LISTS cbm_setup) # --- Transport run with beam events, using run_tra_beam.C set(testname run_${sname}_tra_beam) add_test(${testname} ${MACRO_DIR}/run_tra_beam.sh - ${nBeam} \"Au\" 10 -1 \"data/${sname}_beam\" \"${setup}\" kGeant3 ${randomSeed} kTRUE) + ${nBeam} \"Au\" 10 -1 \"data/${sname}_beam\" \"${setup}\" kGeant3 ${randomSeed}) set_tests_properties(${testname} PROPERTIES TIMEOUT ${timeOutTime} PASS_REGULAR_EXPRESSION "Macro finished successfully" @@ -179,8 +178,7 @@ foreach(setup IN LISTS cbm_setup) # --- Test check_radlen.sh # --- Transport run with collision events, using run_tra_file.C set(testname check_${sname}_radlen) - add_test(${testname} ${MACRO_DIR}/check_radlen.sh - data/${sname}_coll.geo.root ) + add_test(${testname} ${MACRO_DIR}/check_radlen.sh \"data/${sname}_coll.geo.root\" ) set_tests_properties(${testname} PROPERTIES TIMEOUT ${timeOutTime} FIXTURES_REQUIRED "fixt_digi_ev_${setup};fixt_digi_ts_${setup}" @@ -252,8 +250,8 @@ foreach(setup IN LISTS cbm_setup) # --- Real raw event builder set(testname run_${sname}_qa) add_test(${testname} ${MACRODIR}/run_qa.sh - \"data/${sname}_coll\" \"data/${sname}_ts\" \"data/${sname}_ts_eb_real\" - \"data/${sname}_coll\" \"data/${sname}_qa\" \"${setup}\" -1 + \"data/${sname}_coll\" \"data/${sname}_ts\" \"data/${sname}_ts_eb_real\" + \"data/${sname}_coll\" \"data/${sname}_qa\" \"${setup}\" -1 \"data/${sname}_sign\" \"data/${sname}_beam\" ) set_tests_properties(${testname} PROPERTIES TIMEOUT ${timeOutTime} @@ -277,6 +275,29 @@ foreach(setup IN LISTS cbm_setup) RESOURCE_LOCK collParDb_${setup} ) + # --- Test run_transport_json_config + # --- Transport run using run_transport_json_config.C + set(testname run_transport_json_config) + add_test(${testname} ${MACRO_DIR}/run_transport_json_config.sh \"\" 2 ${randomSeed}) + set_tests_properties(${testname} PROPERTIES + TIMEOUT ${timeOutTime} + PASS_REGULAR_EXPRESSION "Macro finished successfully" + FIXTURES_REQUIRED cleanup + FIXTURES_SETUP fixt_tra_json_config + RESOURCE_LOCK json_config_ParDb + ) + + # --- Test run_digi_json_config + # --- Digitization run with using run_digi_json_config.C + set(testname run_digi_json_config) + add_test(${testname} ${MACRO_DIR}/run_digi_json_config.sh) + set_tests_properties(${testname} PROPERTIES + TIMEOUT ${timeOutTime} + PASS_REGULAR_EXPRESSION "Macro finished successfully" + FIXTURES_REQUIRED fixt_tra_json_config + FIXTURES_SETUP fixt_digi_json_config + RESOURCE_LOCK json_config_ParDb + ) endforeach(setup IN LISTS cbm_setup)