diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a46a954291cc94e931b6915370d5e6e688db9bc..3cba605b33ce3adcd9ad6a604170521570005156 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,7 +25,7 @@ build_image: - mkdir build - cd build - set +e && source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh; set -e - - set +e && asetup --input=../../calypso/asetup.faser Athena,22.0.31; set -e + - set +e && asetup --input=../../calypso/asetup.faser Athena,22.0.40; set -e - cmake ../../calypso - make -j 3 artifacts: @@ -41,8 +41,8 @@ test_unittest: - yum -y install man - cd build - set +e && source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh; set -e - - set +e && asetup --input=../../calypso/asetup.faser Athena,22.0.31; set -e + - set +e && asetup --input=../../calypso/asetup.faser Athena,22.0.40; set -e - set +e && source `find . -name 'setup.sh'`; set -e - - ctest -j12 + - ctest -j3 dependencies: - build_image diff --git a/CMakeLists.txt b/CMakeLists.txt index 897dc34131e44d7e48eccd4e169e8ed33806479c..03794e5362f9ec38fa160ef6135830324734d4f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,6 @@ -cmake_minimum_required(VERSION 3.6) +cmake_minimum_required(VERSION 3.10) +# suppress warning and unwanted behavior +set(CMAKE_POLICY_DEFAULT_CMP0074 NEW) file( READ ${CMAKE_SOURCE_DIR}/version.txt _version ) string( STRIP ${_version} _version ) project( Calypso VERSION ${_version} LANGUAGES C CXX Fortran ) diff --git a/Calorimeter/CaloDetDescr/CaloIdDictFiles/data/IdDictCalorimeter_TB00.xml b/Calorimeter/CaloDetDescr/CaloIdDictFiles/data/IdDictCalorimeter_TB00.xml new file mode 100644 index 0000000000000000000000000000000000000000..c932a0c74bfeaf9d15648d49eb6a2cfa5aeb49b8 --- /dev/null +++ b/Calorimeter/CaloDetDescr/CaloIdDictFiles/data/IdDictCalorimeter_TB00.xml @@ -0,0 +1,27 @@ +<IdDictionary name="Calorimeter"> + + <field name="part" > + <label name="Ecal" value="1" /> + </field> + + <field name="row"> + <label name="Bottom" value="0" /> + <label name="Top" value="1" /> + </field> + + <field name="module"> + <!-- facing downstream (hence "starboard" and "port") + x must increase right to left for a right-handed + coordinate system --> + <label name="Starboard" value="0" /> + <label name="Center" value="1" /> + <label name="Port" value="2" /> + </field> + + <region> + <range field="part" value="Ecal" /> + <range field="row" values="Bottom Top" wraparound="FALSE" /> + <range field="module" values="Starboard Center Port" wraparound="FALSE" /> + <range field="pmt" minvalue="0" maxvalue="0" /> + </region> +</IdDictionary> \ No newline at end of file diff --git a/Calorimeter/CaloDetDescr/CaloReadoutGeometry/CaloReadoutGeometry/CaloDetectorElement.h b/Calorimeter/CaloDetDescr/CaloReadoutGeometry/CaloReadoutGeometry/CaloDetectorElement.h index 452822c0a481ba734b8c18aa5174cc04c3179e8f..a9b29abde4e5b14eaf7664488a030514aed1f474 100644 --- a/Calorimeter/CaloDetDescr/CaloReadoutGeometry/CaloReadoutGeometry/CaloDetectorElement.h +++ b/Calorimeter/CaloDetDescr/CaloReadoutGeometry/CaloReadoutGeometry/CaloDetectorElement.h @@ -38,6 +38,7 @@ class GeoAlignmentStore; namespace Trk{ class Surface; class SurfaceBounds; + constexpr DetectorElemType Calorimeter = DetectorElemType::Csc; } namespace CaloDD { @@ -403,6 +404,10 @@ namespace CaloDD { public: const CaloCommonItems* getCommonItems() const; + + /** TrkDetElementBase interface detectorType + */ + virtual Trk::DetectorElemType detectorType() const override final; /////////////////////////////////////////////////////////////////// // Private methods: @@ -514,7 +519,12 @@ namespace CaloDD { /////////////////////////////////////////////////////////////////// // Inline methods: /////////////////////////////////////////////////////////////////// - + + + inline Trk::DetectorElemType CaloDetectorElement::detectorType() const{ + return Trk::Calorimeter; + } + inline HepGeom::Point3D<double> CaloDetectorElement::globalPositionHit(const HepGeom::Point3D<double> &localPos) const { return Amg::EigenTransformToCLHEP(transformHit())*localPos; diff --git a/Calorimeter/CaloDetDescr/EcalGeoModel/src/EcalDetectorTool.cxx b/Calorimeter/CaloDetDescr/EcalGeoModel/src/EcalDetectorTool.cxx index bd4b729877d78083bbad2fa08091686d0c10f884..cdd48cd1f9287fd33b3158897f9b54cf4607d70e 100644 --- a/Calorimeter/CaloDetDescr/EcalGeoModel/src/EcalDetectorTool.cxx +++ b/Calorimeter/CaloDetDescr/EcalGeoModel/src/EcalDetectorTool.cxx @@ -65,7 +65,7 @@ EcalDetectorTool::create() ATH_CHECK(m_rdbAccessSvc.retrieve()); // Print the Ecal version tag: std::string ecalVersionTag{m_rdbAccessSvc->getChildTag("Ecal", versionKey.tag(), versionKey.node(), "FASERDD")}; - ATH_MSG_INFO("Ecal Version: " << ecalVersionTag << " Package Version: " << PACKAGE_VERSION); + ATH_MSG_INFO("Ecal Version: " << ecalVersionTag); // Check if version is empty. If so, then the Ecal cannot be built. This may or may not be intentional. We // just issue an INFO message. if (ecalVersionTag.empty()) { @@ -181,7 +181,7 @@ EcalDetectorTool::clear() StatusCode EcalDetectorTool::registerCallback ATLAS_NOT_THREAD_SAFE () { - StatusCode sc{StatusCode::FAILURE, true}; + StatusCode sc{StatusCode::FAILURE}; if (m_alignable.value()) { if (m_useDynamicAlignFolders.value()) { ATH_MSG_WARNING("Called unsupported EcalDetectorTool::registerCallback() with useDynamicAlignFolders = true"); diff --git a/Calorimeter/FaserCaloSimEvent/src/CaloHitIdHelper.cxx b/Calorimeter/FaserCaloSimEvent/src/CaloHitIdHelper.cxx index cdf4d186395589cc2f7b025201afc3e487028334..eec88553dae53bc6e415b385494b32a7f83645ad 100644 --- a/Calorimeter/FaserCaloSimEvent/src/CaloHitIdHelper.cxx +++ b/Calorimeter/FaserCaloSimEvent/src/CaloHitIdHelper.cxx @@ -48,8 +48,8 @@ void CaloHitIdHelper::Initialize() { if (detStore->retrieve(pix, "EcalID").isFailure()) { pix = 0; } } - InitializeField("Row", 0, 1); - InitializeField("Module", 0, 1); + InitializeField("Row", 0, 2); + InitializeField("Module", 0, 2); // Need three values for test beam } // Station diff --git a/Control/CalypsoConfiguration/python/AllConfigFlags.py b/Control/CalypsoConfiguration/python/AllConfigFlags.py index cf26c40c3229ededad7f96a8080896e990cc30ef..3fd0a09b8d1ceedfdde7c1e83e2c75815c25fbe3 100644 --- a/Control/CalypsoConfiguration/python/AllConfigFlags.py +++ b/Control/CalypsoConfiguration/python/AllConfigFlags.py @@ -32,7 +32,7 @@ def _createCfgFlags(): # acf=AthConfigFlags() fcf = athenaConfigFlags - fcf.Input.Files = ["_FASER_GENERIC_INPUTFILE_NAME_",] # former global.InputFiles + fcf.Input.Files = ["_CALYPSO_GENERIC_INPUTFILE_NAME_",] # former global.InputFiles # acf.addFlag('Input.SecondaryFiles', []) # secondary input files for DoubleEventSelector # acf.addFlag('Input.isMC', lambda prevFlags : "IS_SIMULATION" in GetFileMD(prevFlags.Input.Files).get("eventTypes",[]) ) # former global.isMC # acf.addFlag('Input.RunNumber', lambda prevFlags : list(GetFileMD(prevFlags.Input.Files).get("runNumbers",[]))) # former global.RunNumber diff --git a/Control/CalypsoConfiguration/python/DetectorConfigFlags.py b/Control/CalypsoConfiguration/python/DetectorConfigFlags.py index 5588000a509db94c0317d831ab1893a1461dde17..763f1176951ecef9e3ecb3a57d7b8a607d449bbb 100644 --- a/Control/CalypsoConfiguration/python/DetectorConfigFlags.py +++ b/Control/CalypsoConfiguration/python/DetectorConfigFlags.py @@ -220,35 +220,33 @@ def disableDetectors(flags, detectors, toggle_geometry=False): def modifyDetectorConfigFlags(flags): # disable problematic ATLAS flags by hand - flags.Detector.GeometryCSC = False - flags.Detector.GeometrysTGC = False - flags.Detector.GeometryMM = False + # flags.Detector.GeometryCSC = False + # flags.Detector.GeometrysTGC = False + # flags.Detector.GeometryMM = False - flags.Detector.EnableBCM = False - flags.Detector.EnableDBM = False - flags.Detector.EnablePixel = False - flags.Detector.EnableSCT = False - flags.Detector.EnableTRT = False + # flags.Detector.EnableBCM = False + # flags.Detector.EnableDBM = False + # flags.Detector.EnablePixel = False + # flags.Detector.EnableSCT = False + # flags.Detector.EnableTRT = False # Upgrade ITk Inner Tracker is a separate and parallel detector - flags.Detector.EnableBCMPrime = False - flags.Detector.EnableITkPixel = False - flags.Detector.EnableITkStrip = False + # flags.Detector.EnableBCMPrime = False + # flags.Detector.EnableITkPixel = False + # flags.Detector.EnableITkStrip = False - flags.Detector.EnableHGTD = False + # flags.Detector.EnableHGTD = False # Calorimeters - flags.Detector.EnableLAr = False - flags.Detector.EnableTile = False + # flags.Detector.EnableLAr = False + # flags.Detector.EnableTile = False # Muon Spectrometer - flags.Detector.EnableCSC = False - flags.Detector.EnableMDT = False - flags.Detector.EnableRPC = False - flags.Detector.EnableTGC = False - flags.Detector.EnablesTGC = False - flags.Detector.EnableMM = False - - flags.Detector.RecoIBL = False + # flags.Detector.EnableCSC = False + # flags.Detector.EnableMDT = False + # flags.Detector.EnableRPC = False + # flags.Detector.EnableTGC = False + # flags.Detector.EnablesTGC = False + # flags.Detector.EnableMM = False return flags \ No newline at end of file diff --git a/Control/CalypsoExample/GenEventExample/src/GenEventReadAlg.h b/Control/CalypsoExample/GenEventExample/src/GenEventReadAlg.h index b99e07a09e679336b85ab27d464f60cdc18c82d4..4e45d15d349898a6691d46eff484d4740c66a15d 100644 --- a/Control/CalypsoExample/GenEventExample/src/GenEventReadAlg.h +++ b/Control/CalypsoExample/GenEventExample/src/GenEventReadAlg.h @@ -29,6 +29,6 @@ class GenEventReadAlg : public AthHistogramAlgorithm // Read handle keys for data containers // Any other event data can be accessed identically - // Note the key names ("GEN_EVENT" or "SCT_Hits") are Gaudi properties and can be configured at run-time - SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "GEN_EVENT" }; + // Note the key names ("BeamTruthEvent" or "SCT_Hits") are Gaudi properties and can be configured at run-time + SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "BeamTruthEvent" }; }; \ No newline at end of file diff --git a/Control/CalypsoExample/GeoModelTest/CMakeLists.txt b/Control/CalypsoExample/GeoModelTest/CMakeLists.txt index d42aea9fde56245e7b3ffd663ba39a9280352e39..5c4205019552d4db08974473329ba6fdca37cb44 100644 --- a/Control/CalypsoExample/GeoModelTest/CMakeLists.txt +++ b/Control/CalypsoExample/GeoModelTest/CMakeLists.txt @@ -20,6 +20,11 @@ atlas_add_test( GeoModelCheck PROPERTIES WORKING_DIRECTORY ${CMAKE_BINARY_DIR} PROPERTIES TIMEOUT 300 ) +atlas_add_test( TestBeamGeoCheck + SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/python/TestBeamTestConfig.py + PROPERTIES WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + PROPERTIES TIMEOUT 300 ) + # Install files from the package: #atlas_install_headers( GeoModelTest ) #atlas_install_joboptions( share/*.py ) diff --git a/Control/CalypsoExample/GeoModelTest/python/TestBeamTestConfig.py b/Control/CalypsoExample/GeoModelTest/python/TestBeamTestConfig.py new file mode 100644 index 0000000000000000000000000000000000000000..641c9a7558a39389d33e2c6f220b951af096f7dc --- /dev/null +++ b/Control/CalypsoExample/GeoModelTest/python/TestBeamTestConfig.py @@ -0,0 +1,72 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +#!/usr/bin/env python +import sys +from AthenaCommon.Constants import VERBOSE, INFO +from AthenaConfiguration.ComponentFactory import CompFactory + +def GeoModelTestCfg(flags, name="GeoModelTestAlg", **kwargs): + + # Initialize GeoModel + from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg + a = FaserGeometryCfg(flags) + + # Initialize field service + from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg + a.merge(MagneticFieldSvcCfg(flags)) + # Disable the field + cacheAlg = a.getCondAlgo("FaserFieldCacheCondAlg") + cacheAlg.UseDipoScale = 0.0 + cacheAlg.UseDCS = False + + # Configure the algorithm itself + GeoModelTestAlg = CompFactory.GeoModelTestAlg + a.addEventAlgo(GeoModelTestAlg(name, FirstSCTStation=0, + LastSCTStation=0, + NumVetoStations=1, + NumVetoPlatesPerStation=2, + NumTriggerStations=0, + **kwargs)) + + return a + +if __name__ == "__main__": + from AthenaCommon.Logging import log#, logging + from AthenaCommon.Configurable import Configurable + from CalypsoConfiguration.AllConfigFlags import ConfigFlags + + Configurable.configurableRun3Behavior = True + +# Flags for this job + ConfigFlags.Input.isMC = True # Needed to bypass autoconfig + ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-02" # Always needed; must match FaserVersion + ConfigFlags.GeoModel.FaserVersion = "FASER-TB00" # Default FASER geometry + ConfigFlags.GeoModel.GeoExportFile = "faserTestBeamGeo.db" # Writes out a GeoModel file with the full geometry tree (optional, comment out to skip) + # ConfigFlags.Detector.EnableVeto = True + # ConfigFlags.Detector.EnableTrigger = True + # ConfigFlags.Detector.EnablePreshower= True + # ConfigFlags.Detector.EnableFaserSCT = True + # ConfigFlags.Detector.EnableUpstreamDipole = True + # ConfigFlags.Detector.EnableCentralDipole = True + # ConfigFlags.Detector.EnableDownstreamDipole = True + # ConfigFlags.Detector.EnableEcal = True + ConfigFlags.lock() + +# Configure components + from CalypsoConfiguration.MainServicesConfig import MainServicesCfg + acc = MainServicesCfg(ConfigFlags) + +# Set up algorithm + acc.merge(GeoModelTestCfg(ConfigFlags)) + +# Configure verbosity + msgSvc = acc.getService("MessageSvc") + msgSvc.Format = "% F%30W%S%7W%R%T %0W%M" + # ConfigFlags.dump() + # logging.getLogger('forcomps').setLevel(VERBOSE) + acc.foreach_component("*").OutputLevel = VERBOSE + acc.foreach_component("*ClassID*").OutputLevel = INFO + log.setLevel(VERBOSE) + +# Execute and finish + sys.exit(int(acc.run(maxEvents=1).isFailure())) diff --git a/Control/CalypsoExample/GeoModelTest/src/GeoModelTestAlg.cxx b/Control/CalypsoExample/GeoModelTest/src/GeoModelTestAlg.cxx index 85bcd7e50311645693e8cba809cfc41e31beb093..2deb292d34deba66b91761a7a9d95f10fdcbf0c1 100644 --- a/Control/CalypsoExample/GeoModelTest/src/GeoModelTestAlg.cxx +++ b/Control/CalypsoExample/GeoModelTest/src/GeoModelTestAlg.cxx @@ -545,17 +545,17 @@ StatusCode GeoModelTestAlg::testVeto() const { ATH_MSG_ALWAYS("Retrieved (typed) Veto detector manager with " << vetoMgr->getNumTreeTops() << " treetops directly from DetStore."); // Compare numerology with the "right" answers from our properties - if (vetoMgr->numerology().numStations() != m_numVetoStations || vetoMgr->getNumTreeTops() != m_numVetoStations) + if (vetoMgr->numerology().numStations() != m_numVetoStations) { ATH_MSG_FATAL("Disagreement in number of veto stations."); return StatusCode::FAILURE; } - if (vetoMgr->numerology().numPlatesPerStation() != m_numVetoPlatesPerStation) + if (m_numVetoStations > 0 && vetoMgr->numerology().numPlatesPerStation() != m_numVetoPlatesPerStation) { ATH_MSG_FATAL("Disagreement in number of plates per veto station."); return StatusCode::FAILURE; } - if (vetoMgr->numerology().numPmtsPerPlate() != m_numVetoPmtsPerPlate) + if (m_numVetoStations > 0 && m_numVetoPlatesPerStation > 0 && vetoMgr->numerology().numPmtsPerPlate() != m_numVetoPmtsPerPlate) { ATH_MSG_FATAL("Disagreement in number of pmts per veto plate."); return StatusCode::FAILURE; @@ -605,7 +605,7 @@ StatusCode GeoModelTestAlg::testVeto() const return StatusCode::FAILURE; } } - if (next == nullptr && prev == nullptr) + if (next == nullptr && prev == nullptr && m_numVetoPlatesPerStation > 1) { ATH_MSG_FATAL("Veto element " << hash << " has no previous OR next neighbor."); return StatusCode::FAILURE; @@ -704,12 +704,12 @@ StatusCode GeoModelTestAlg::testTrigger() const ATH_MSG_FATAL("Disagreement in number of Trigger stations."); return StatusCode::FAILURE; } - if (triggerMgr->numerology().numPlatesPerStation() != m_numTriggerPlatesPerStation) + if (m_numTriggerStations > 0 && triggerMgr->numerology().numPlatesPerStation() != m_numTriggerPlatesPerStation) { ATH_MSG_FATAL("Disagreement in number of plates per Trigger station."); return StatusCode::FAILURE; } - if (triggerMgr->numerology().numPmtsPerPlate() != m_numTriggerPmtsPerPlate) + if (m_numTriggerStations > 0 && m_numTriggerPlatesPerStation > 0 && triggerMgr->numerology().numPmtsPerPlate() != m_numTriggerPmtsPerPlate) { ATH_MSG_FATAL("Disagreement in number of pmts per Trigger plate."); return StatusCode::FAILURE; @@ -759,7 +759,7 @@ StatusCode GeoModelTestAlg::testTrigger() const return StatusCode::FAILURE; } } - if (next == nullptr && prev == nullptr) + if (next == nullptr && prev == nullptr && m_numTriggerPlatesPerStation > 1) { ATH_MSG_FATAL("Trigger element " << hash << " has no previous OR next neighbor."); return StatusCode::FAILURE; @@ -858,12 +858,12 @@ StatusCode GeoModelTestAlg::testPreshower() const ATH_MSG_FATAL("Disagreement in number of preshower stations."); return StatusCode::FAILURE; } - if (preshowerMgr->numerology().numPlatesPerStation() != m_numPreshowerPlatesPerStation) + if (m_numPreshowerStations > 0 && preshowerMgr->numerology().numPlatesPerStation() != m_numPreshowerPlatesPerStation) { ATH_MSG_FATAL("Disagreement in number of plates per preshower station."); return StatusCode::FAILURE; } - if (preshowerMgr->numerology().numPmtsPerPlate() != m_numPreshowerPmtsPerPlate) + if (m_numPreshowerStations > 0 && m_numPreshowerPlatesPerStation > 0 && preshowerMgr->numerology().numPmtsPerPlate() != m_numPreshowerPmtsPerPlate) { ATH_MSG_FATAL("Disagreement in number of pmts per preshower plate."); return StatusCode::FAILURE; @@ -913,7 +913,7 @@ StatusCode GeoModelTestAlg::testPreshower() const return StatusCode::FAILURE; } } - if (next == nullptr && prev == nullptr) + if (next == nullptr && prev == nullptr && m_numPreshowerPlatesPerStation > 1) { ATH_MSG_FATAL("Preshower element " << hash << " has no previous OR next neighbor."); return StatusCode::FAILURE; diff --git a/Control/CalypsoExample/RDOReadExample/src/RDOReadAlg.h b/Control/CalypsoExample/RDOReadExample/src/RDOReadAlg.h index 9f3dd5f4ef98cd67204712be254313e6f3fa2910..40f0e1f2a29ccccf3d8f1499c381fc70ec3d1e39 100644 --- a/Control/CalypsoExample/RDOReadExample/src/RDOReadAlg.h +++ b/Control/CalypsoExample/RDOReadExample/src/RDOReadAlg.h @@ -27,7 +27,7 @@ class RDOReadAlg : public AthHistogramAlgorithm // Read handle keys for data containers // Any other event data can be accessed identically - // Note the key names ("GEN_EVENT" or "SCT_Hits") are Gaudi properties and can be configured at run-time + // Note the key names ("BeamTruthEvent" or "SCT_Hits") are Gaudi properties and can be configured at run-time SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "TruthEvent" }; SG::ReadHandleKey<FaserSiHitCollection> m_faserSiHitKey { this, "FaserSiHitCollection", "SCT_Hits" }; SG::ReadHandleKey<FaserSCT_RDO_Container> m_faserRdoKey { this, "FaserSCT_RDO_Container", "SCT_RDOs"}; diff --git a/Control/CalypsoExample/SimHitExample/CaloREADME.md b/Control/CalypsoExample/SimHitExample/CaloREADME.md new file mode 100644 index 0000000000000000000000000000000000000000..a93c9216916fd7c5359a996ee89e6a44888fff0e --- /dev/null +++ b/Control/CalypsoExample/SimHitExample/CaloREADME.md @@ -0,0 +1,47 @@ + +# Running the ECAL simulation + +Use runEcal.py to specify particle type, energy, mass, z position in calo, theta and phi ranges etc +runEcal.py location: calypso/Simulation/G4Faser/G4FaserAlg/test/runEcal.py + - ConfigFlags.Output.HITSFileName = "" +specifies the output name of the HITS file + - pg.sampler.pid = -11 +particle ID (-11 = electron) + - pg.sampler.mom = PG.EThetaMPhiSampler(energy=100*GeV, theta=[0,pi/20], phi=[0,2*pi], mass=0.511) +set particle energy, theta, phi and mass + - pg.sampler.pos = PG.PosSampler(x=[-5.0, 5.0], y=[-5.0, 5.0], z=2744.1, t=0.0) +set position of beam in terms of x and y coordinates +z = 2744.1 (mm) corresponds to calorimeter face +x=60.9 and y=49.6 corresponds to centre of top left module + - sys.exit(int(acc.run(maxEvents=1000).isFailure())) +set the number of events to simulate +1000 event simulations at 1 TeV for electrons and photons need to be split +change the random seed in this case + - pg.randomSeed = 123456 + +Run this file in Calypso's run directory to genetate HITS file of simulation. + +# Plotting Histograms in CaloSimHitAlg + +Once the HITS file has been generated from runEcal.py: + - use CaloSimHitExample_jobOptions.py to loop over HITS and generate HistoFile + - the histogram plotting is specified in CaloSimHitAlg.h and CaloSimHitAlg.cxx + +CaloSimHitAlg.cxx plots variations of 6 histograms: + - eLoss - energy deposited per hit in the 4 ECAL modules (GeV) + - eLossBR - eLoss in bottom right ECAL module + - eLossTR - eLoss in top right ECAL module + - eLossBL - eLoss in bottom left ECAL module + - eLossTL - eLoss in top left ECAL module + - eLossTot - total energy deposited by particle across all 4 ECAL modules (GeV) + - eLossBRTot - eLossTot in bottom right ECAL module + - eLossTRTot - eLossTot in top right ECAL module + - eLossBLTot - eLossTot in bottom left ECAL module + - eLossTLTot - eLossTot in top left ECAL module + - module - cross section of hits in the calo, where (0,0), (1,0), (0,1) and (1,1) correspond to ECAL module centres + - modulePos - cross section of hits in the calo, showing their position in mm + - meanTime - events in the calo as a function of mean time (ns) + - weightedTime - energy weighted events in the calo as a function of mean time (ns) + +There are also fractional histograms for eLoss and eLossTot that give the deposited energy as a fraction of injected energy. +Due to the histograms not depending on injected energy of simulated particle, may need to Rebin() when drawing eLoss and eLossTot histograms. diff --git a/Control/CalypsoExample/SimHitExample/src/CaloSimHitAlg.cxx b/Control/CalypsoExample/SimHitExample/src/CaloSimHitAlg.cxx index f99ce4b4a9d68c0df89d918aa96d26d53a96efbc..fb4049f7aa40da02ce37ca2ad7d1686cc672d972 100644 --- a/Control/CalypsoExample/SimHitExample/src/CaloSimHitAlg.cxx +++ b/Control/CalypsoExample/SimHitExample/src/CaloSimHitAlg.cxx @@ -14,22 +14,46 @@ StatusCode CaloSimHitAlg::initialize() // initialize a histogram // letter at end of TH1 indicated variable type (D double, F float etc) // first string is root object name, second is histogram title + + + m_eloss = new TH1D("eLoss", "Calo Hit Energy Loss;Energy Loss [GeV];Events", 1000000, 0, 100); // 100000 bins, can rebin if needed - 1000 GeV inj - max 100 per event + m_elossTL = new TH1D("eLossTL", "Calo Hit Energy Loss Top Left Module;Energy Loss [GeV];Events", 100000, 0, 100); + m_elossTR = new TH1D("eLossTR", "Calo Hit Energy Loss Top Right Module;Energy Loss [GeV];Events", 100000, 0, 100); + m_elossBR = new TH1D("eLossBR", "Calo Hit Energy Loss Bottom Right Module;Energy Loss [GeV];Events", 100000, 0, 100); + m_elossBL = new TH1D("eLossBL", "Calo Hit Energy Loss Bottom Left Module;Energy Loss [GeV];Events", 100000, 0, 100); +// 1 million bins + m_elossTot = new TH1D("eLossTot", "Total Energy Deposited in Calorimeter;Deposited Energy [GeV];Events", 1000000, 0, 1000); + m_elossTLTot = new TH1D("eLossTLTot", "Total Energy Deposited in Top Left Module;Deposited Energy [GeV];Events", 1000000, 0, 1000); + m_elossTRTot = new TH1D("eLossTRTot", "Total Energy Deposited in Top Right Module;Deposited Energy [GeV];Events", 1000000, 0, 1000); + m_elossBRTot = new TH1D("eLossBRTot", "Total Energy Deposited in Bottom Right Module;Deposited Energy [GeV];Events", 1000000, 0, 1000); + m_elossBLTot = new TH1D("eLossBLTot", "Total Energy Deposited in Bottom Left Module;Deposited Energy [GeV];Events", 1000000, 0, 1000); - m_eloss = new TH1D("eLoss", "Calo Hit Energy Loss Fraction;Fraction;Events", 1000, 0, 0.0001); - m_elossTL = new TH1D("eLossTL", "Calo Hit Energy Loss Fraction Top Left Module;Fraction;Events", 1000, 0, 0.0001); - m_elossTR = new TH1D("eLossTR", "Calo Hit Energy Loss Fraction Top Right Module;Fraction;Events", 1000, 0, 0.0001); - m_elossBR = new TH1D("eLossBR", "Calo Hit Energy Loss Fraction Bottom Right Module;Fraction;Events", 1000, 0, 0.0001); - m_elossBL = new TH1D("eLossBL", "Calo Hit Energy Loss Fraction Bottom Left Module;Fraction;Events", 1000, 0, 0.0001); + m_module = new TH2D("module;x;y", "Calo Hit Module", 2, -0.5, 1.5, 2, -0.5, 1.5 ); + // m_modulePos = new TH2D("modulePos;x;y", "Calo Hit Module Position", 13, -130, 130, 13, -130, 130 ); + // x4 original number of bins + m_modulePos = new TH2D("modulePos;x;y", "Calo Hit Module Position", 52, -130, 130, 52, -130, 130 ); - m_elossTot = new TH1D("eLossTot", "Total Energy Fraction Deposited in Calorimeter;Fraction;Events", 1000, 0, 1); - m_elossTLTot = new TH1D("eLossTLTot", "Total Energy Fraction Deposited in Top Left Module;Fraction;Events", 1000, 0, 1); - m_elossTRTot = new TH1D("eLossTRTot", "Total Energy Fraction Deposited in Top Right Module;Fraction;Events", 1000, 0, 1); - m_elossBRTot = new TH1D("eLossBRTot", "Total Energy Fraction Deposited in Bottom Right Module;Fraction;Events", 1000, 0, 1); - m_elossBLTot = new TH1D("eLossBLTot", "Total Energy Fraction Deposited in Bottom Left Module;Fraction;Events", 1000, 0, 1); + // as a fraction of injected energy (when known) - m_module = new TH2D("module;x;y", "Calo Hit Module", 2, -0.5, 1.5, 2, -0.5, 1.5 ); - m_modulePos = new TH2D("modulePos;x;y", "Calo Hit Module Position", 13, -130, 130, 13, -130, 130 ); - + m_eloss_frac = new TH1D("eLoss_frac", "Calo Hit Energy Loss Fraction;Fraction;Events", 100000, 0, 0.1); + m_elossTL_frac = new TH1D("eLossTL_frac", "Calo Hit Energy Loss Fraction Top Left Module;Fraction;Events", 100000, 0, 0.01); + m_elossTR_frac = new TH1D("eLossTR_frac", "Calo Hit Energy Loss Fraction Top Right Module;Fraction;Events", 100000, 0, 0.01); + m_elossBR_frac = new TH1D("eLossBR_frac", "Calo Hit Energy Loss Fraction Bottom Right Module;Fraction;Events", 100000, 0, 0.01); + m_elossBL_frac = new TH1D("eLossBL_frac", "Calo Hit Energy Loss Fraction Bottom Left Module;Fraction;Events", 100000, 0, 0.01); + + m_elossTot_frac = new TH1D("eLossTot_frac", "Total Energy Fraction Deposited in Calorimeter;Fraction;Events", 1000000, 0, 1); + m_elossTLTot_frac = new TH1D("eLossTLTot_frac", "Total Energy Fraction Deposited in Top Left Module;Fraction;Events", 1000000, 0, 1); + m_elossTRTot_frac = new TH1D("eLossTRTot_frac", "Total Energy Fraction Deposited in Top Right Module;Fraction;Events", 1000000, 0, 1); + m_elossBRTot_frac = new TH1D("eLossBRTot_frac", "Total Energy Fraction Deposited in Bottom Right Module;Fraction;Events", 1000000, 0, 1); + m_elossBLTot_frac = new TH1D("eLossBLTot_frac", "Total Energy Fraction Deposited in Bottom Left Module;Fraction;Events", 1000000, 0, 1); + + // new histograms hits vs time 29/6/21 + + m_meanTime = new TH1D("meanTime", "Events vs Mean Time;Time [ns];Events",4000, 0, 2); + m_weightedTime = new TH1D("weightedTime", "Weighted Events vs Time;Time [ns];Events",4000, 0, 2); // weighted energy should be in GeV + + ATH_CHECK(histSvc()->regHist("/HIST/meanTime", m_meanTime)); + ATH_CHECK(histSvc()->regHist("/HIST/weightedTime", m_weightedTime)); ATH_CHECK(histSvc()->regHist("/HIST/eloss", m_eloss)); ATH_CHECK(histSvc()->regHist("/HIST/elossTL", m_elossTL)); @@ -42,10 +66,24 @@ StatusCode CaloSimHitAlg::initialize() ATH_CHECK(histSvc()->regHist("/HIST/elossTRTot", m_elossTRTot)); ATH_CHECK(histSvc()->regHist("/HIST/elossBRTot", m_elossBRTot)); ATH_CHECK(histSvc()->regHist("/HIST/elossBLTot", m_elossBLTot)); - + ATH_CHECK(histSvc()->regHist("/HIST/modules", m_module)); ATH_CHECK(histSvc()->regHist("/HIST/modulePos", m_modulePos)); + // as a fraction of injected energy + + ATH_CHECK(histSvc()->regHist("/HIST/eloss_frac", m_eloss_frac)); + ATH_CHECK(histSvc()->regHist("/HIST/elossTL_frac", m_elossTL_frac)); + ATH_CHECK(histSvc()->regHist("/HIST/elossTR_frac", m_elossTR_frac)); + ATH_CHECK(histSvc()->regHist("/HIST/elossBR_frac", m_elossBR_frac)); + ATH_CHECK(histSvc()->regHist("/HIST/elossBL_frac", m_elossBL_frac)); + + ATH_CHECK(histSvc()->regHist("/HIST/elossTot_frac", m_elossTot_frac)); + ATH_CHECK(histSvc()->regHist("/HIST/elossTLTot_frac", m_elossTLTot_frac)); + ATH_CHECK(histSvc()->regHist("/HIST/elossTRTot_frac", m_elossTRTot_frac)); + ATH_CHECK(histSvc()->regHist("/HIST/elossBRTot_frac", m_elossBRTot_frac)); + ATH_CHECK(histSvc()->regHist("/HIST/elossBLTot_frac", m_elossBLTot_frac)); + // initialize data handle keys ATH_CHECK( m_mcEventKey.initialize() ); ATH_CHECK( m_faserCaloHitKey.initialize() ); @@ -78,8 +116,18 @@ StatusCode CaloSimHitAlg::execute() if (ev->particles_size() > 0) { HepMC::GenEvent::particle_const_iterator p = ev->particles_begin(); - ePrimary = (*p)->momentum().e(); + //ePrimary = (*p)->momentum().e(); + + for ( ; p != ev->particles_end(); ++p) { + // Particle gun primaries have BCs starting at 10000, while others have 3 digit values + if ((*p)->barcode() > 11000) continue; + ePrimary += (*p)->momentum().e(); + } + std::cout << "E Primary " << ePrimary << std::endl; } + + //ev->print(); + //ePrimary = 1000000; // The hit container might be empty because particles missed the modules if (h_caloHits->size() == 0) return StatusCode::SUCCESS; @@ -91,18 +139,38 @@ StatusCode CaloSimHitAlg::execute() // BL = bottom left calorimeter module // BR = bottom right calorimeter module - float e(0);; + float e(0); float tl(0); float tr(0); float br(0); float bl(0); + float e_frac(0); + float tl_frac(0); + float tr_frac(0); + float br_frac(0); + float bl_frac(0); + + + for (const CaloHit& hit : *h_caloHits) { //hit.print(); - float ehit = hit.energyLoss()/ePrimary; + float ehit_frac = hit.energyLoss()/ePrimary; + float ehit = hit.energyLoss()/1000; // to convert from MeV to GeV + m_eloss_frac->Fill(ehit_frac); m_eloss->Fill(ehit); + e_frac += ehit_frac; e += ehit; + // add extra time hist + float time = hit.meanTime(); + m_meanTime->Fill(time); + + // add weighted energy hist + m_weightedTime->Fill(time,ehit); + + // + m_module->Fill(hit.getModule(), hit.getRow()); m_modulePos->Fill(hit.getModule()==0 ? -121.9/2 + hit.localStartPosition().x() : 121.9/2 + hit.localStartPosition().x(), hit.getRow()==0 ? -121.9/2 + hit.localStartPosition().y() : 121.9/2 + hit.localStartPosition().y()); @@ -110,21 +178,29 @@ StatusCode CaloSimHitAlg::execute() if (hit.getModule() == 0 && hit.getRow() == 1) // 0 1 TL { m_elossTL->Fill(ehit); + m_elossTL_frac->Fill(ehit_frac); + tl_frac += ehit_frac; tl += ehit; } if (hit.getModule() == 1 && hit.getRow() == 1) // 1 1 TR { m_elossTR->Fill(ehit); + m_elossTR_frac->Fill(ehit_frac); + tr_frac += ehit_frac; tr += ehit; } if (hit.getModule() == 1 && hit.getRow() == 0) // 1 0 BR { m_elossBR->Fill(ehit); + m_elossBR_frac->Fill(ehit_frac); + br_frac += ehit_frac; br += ehit; } if (hit.getModule() == 0 && hit.getRow() == 0) // 0 0 BL { m_elossBL->Fill(ehit); + m_elossBL_frac->Fill(ehit_frac); + bl_frac += ehit_frac; bl += ehit; } @@ -136,6 +212,14 @@ StatusCode CaloSimHitAlg::execute() m_elossBRTot->Fill(br); m_elossBLTot->Fill(bl); + // as a fraction of injected energy + + m_elossTot_frac->Fill(e_frac); + m_elossTLTot_frac->Fill(tl_frac); + m_elossTRTot_frac->Fill(tr_frac); + m_elossBRTot_frac->Fill(br_frac); + m_elossBLTot_frac->Fill(bl_frac); + return StatusCode::SUCCESS; } diff --git a/Control/CalypsoExample/SimHitExample/src/CaloSimHitAlg.h b/Control/CalypsoExample/SimHitExample/src/CaloSimHitAlg.h index 6f34f71f14cb04df34e1c17b5256027d4f0d2a9b..3c912341eb84e10d4447f6e66b9373f2e79469c4 100644 --- a/Control/CalypsoExample/SimHitExample/src/CaloSimHitAlg.h +++ b/Control/CalypsoExample/SimHitExample/src/CaloSimHitAlg.h @@ -21,6 +21,9 @@ class CaloSimHitAlg : public AthHistogramAlgorithm TH2* m_module; TH2* m_modulePos; TH1* m_elossTot; + + TH1* m_meanTime; + TH1* m_weightedTime; // add new histograms // TL = top left calorimeter module @@ -35,11 +38,24 @@ class CaloSimHitAlg : public AthHistogramAlgorithm TH1* m_elossTLTot; TH1* m_elossTRTot; TH1* m_elossBRTot; - TH1* m_elossBLTot; + TH1* m_elossBLTot; + + // add in fractional histograms + + TH1* m_eloss_frac; + TH1* m_elossTL_frac; + TH1* m_elossTR_frac; + TH1* m_elossBR_frac; + TH1* m_elossBL_frac; + TH1* m_elossTot_frac; + TH1* m_elossTLTot_frac; + TH1* m_elossTRTot_frac; + TH1* m_elossBRTot_frac; + TH1* m_elossBLTot_frac; // Read handle keys for data containers // Any other event data can be accessed identically - // Note the key names ("GEN_EVENT" or "SCT_Hits") are Gaudi properties and can be configured at run-time - SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "GEN_EVENT" }; + // Note the key names ("BeamTruthEvent" or "SCT_Hits") are Gaudi properties and can be configured at run-time + SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "BeamTruthEvent" }; SG::ReadHandleKey<CaloHitCollection> m_faserCaloHitKey { this, "CaloHitCollection", "EcalHits" }; }; diff --git a/Control/CalypsoExample/SimHitExample/src/SimHitAlg.h b/Control/CalypsoExample/SimHitExample/src/SimHitAlg.h index d7747bbfb9fc3c95920c99cbbe7ea0537bad0dca..476f2999a4c403d73d7d303c1ed45256e0f9f7f5 100644 --- a/Control/CalypsoExample/SimHitExample/src/SimHitAlg.h +++ b/Control/CalypsoExample/SimHitExample/src/SimHitAlg.h @@ -36,10 +36,10 @@ class SimHitAlg : public AthHistogramAlgorithm // Read handle keys for data containers // Any other event data can be accessed identically - // Note the key names ("GEN_EVENT" or "SCT_Hits") are Gaudi properties and can be configured at run-time + // Note the key names ("BeamTruthEvent" or "SCT_Hits") are Gaudi properties and can be configured at run-time // Truth information - SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "GEN_EVENT" }; + SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "BeamTruthEvent" }; // Tracker hits SG::ReadHandleKey<FaserSiHitCollection> m_faserSiHitKey { this, "FaserSiHitCollection", "SCT_Hits" }; diff --git a/Control/CalypsoExample/TrackerDataAccessExample/python/TrackerDataAccessExampleConfig.py b/Control/CalypsoExample/TrackerDataAccessExample/python/TrackerDataAccessExampleConfig.py index 0a2d083a8d0ca8a201bf9b34e4e8947289b57666..066f8560b4df98fae490fc79a876c21ae1332313 100755 --- a/Control/CalypsoExample/TrackerDataAccessExample/python/TrackerDataAccessExampleConfig.py +++ b/Control/CalypsoExample/TrackerDataAccessExample/python/TrackerDataAccessExampleConfig.py @@ -4,7 +4,7 @@ import sys from AthenaConfiguration.ComponentFactory import CompFactory -from AthenaCommon.Constants import VERBOSE, INFO +from AthenaCommon.Constants import INFO, WARNING Cmake_working_dir = sys.argv[1] print("Cmake_working_dir = ", Cmake_working_dir) @@ -30,6 +30,7 @@ def TrackerDataAccessExampleCfg(flags, name="TrackerDataAccessExampleAlg", **kwa if __name__ == "__main__": from AthenaCommon.Configurable import Configurable from CalypsoConfiguration.AllConfigFlags import ConfigFlags + from AthenaCommon.Logging import logging Configurable.configurableRun3Behavior = True @@ -66,16 +67,11 @@ if __name__ == "__main__": # Configure verbosity # ConfigFlags.dump() - # logging.getLogger('forcomps').setLevel(VERBOSE) - acc.foreach_component("*").OutputLevel = VERBOSE + logging.getLogger('forcomps').setLevel(WARNING) + acc.foreach_component("*").OutputLevel = INFO acc.foreach_component("*ClassID*").OutputLevel = INFO + acc.foreach_component("*TrackerDataAccess*").OutputLevel = WARNING # log.setLevel(VERBOSE) - acc.getService("FaserByteStreamInputSvc").DumpFlag = True - acc.getService("FaserEventSelector").OutputLevel = VERBOSE - acc.getService("FaserByteStreamInputSvc").OutputLevel = VERBOSE - acc.getService("FaserByteStreamCnvSvc").OutputLevel = VERBOSE - acc.getService("FaserByteStreamAddressProviderSvc").OutputLevel = VERBOSE - acc.getService("MessageSvc").Format = "% F%40W%S%7W%R%T %0W%M" # Execute and finish sys.exit(int(acc.run(maxEvents=-1).isFailure())) diff --git a/Control/CalypsoExample/WaveformAnalysisExample/CMakeLists.txt b/Control/CalypsoExample/WaveformAnalysisExample/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3c40f4c6ca6b4b34a6d25464a6aa05156bd9411c --- /dev/null +++ b/Control/CalypsoExample/WaveformAnalysisExample/CMakeLists.txt @@ -0,0 +1,8 @@ +atlas_subdir( WaveformAnalysisExample ) + +atlas_add_component( WaveformAnalysisExample + src/*.cxx + src/components/WaveformAnalysisExample_entries.cxx + LINK_LIBRARIES AthenaBaseComps xAODFaserWaveform + ) + diff --git a/Control/CalypsoExample/WaveformAnalysisExample/src/WaveformHitAlg.cxx b/Control/CalypsoExample/WaveformAnalysisExample/src/WaveformHitAlg.cxx new file mode 100644 index 0000000000000000000000000000000000000000..1e6a1a68fc3935e4c7374007eca47902d4f44d1f --- /dev/null +++ b/Control/CalypsoExample/WaveformAnalysisExample/src/WaveformHitAlg.cxx @@ -0,0 +1,26 @@ +#include "WaveformHitAlg.h" + +WaveformHitAlg::WaveformHitAlg(const std::string& name, ISvcLocator* pSvcLocator) + : AthHistogramAlgorithm(name, pSvcLocator) { } + +WaveformHitAlg::~WaveformHitAlg() { } + +StatusCode WaveformHitAlg::initialize() +{ + //ATH_CHECK( m_faserWaveformHitKey.initialize() ); + //ATH_MSG_INFO( "Using Faser WaveformHit collection with key " << m_faserWaveformHitKey.key()); + + return StatusCode::SUCCESS; +} + + +StatusCode WaveformHitAlg::execute() +{ + return StatusCode::SUCCESS; +} + + +StatusCode WaveformHitAlg::finalize() +{ + return StatusCode::SUCCESS; +} diff --git a/Control/CalypsoExample/WaveformAnalysisExample/src/WaveformHitAlg.h b/Control/CalypsoExample/WaveformAnalysisExample/src/WaveformHitAlg.h new file mode 100644 index 0000000000000000000000000000000000000000..6aa6798c1c32e14e8da9870ebe6a410725f9246f --- /dev/null +++ b/Control/CalypsoExample/WaveformAnalysisExample/src/WaveformHitAlg.h @@ -0,0 +1,28 @@ +#ifndef WAVEFORMANALYSISEXAMPLE_WAVEFORMHITALG_H +#define WAVEFORMANALYSISEXAMPLE_WAVEFORMHITALG_H + +#include "AthenaBaseComps/AthHistogramAlgorithm.h" +#include "xAODFaserWaveform/WaveformHitContainer.h" + +#include <TH1.h> + +/* WaveformHit reading example - Carl Gwilliam + Lottie Cavanagh, Liverpool */ + +class WaveformHitAlg : public AthHistogramAlgorithm +{ +public: + WaveformHitAlg(const std::string& name, ISvcLocator* pSvcLocator); + + virtual ~WaveformHitAlg(); + + StatusCode initialize(); + StatusCode execute(); + StatusCode finalize(); + +private: + + SG::ReadHandle<xAOD::WaveformHitContainer> m_waveformHits; + //SG::ReadHandleKey<xAOD::WaveformHitContainer> m_faserWaveformHitKey { this, "WaveformHitContainerKey", "CaloWaveformHits" }; +}; + +#endif diff --git a/Control/CalypsoExample/WaveformAnalysisExample/src/components/WaveformAnalysisExample_entries.cxx b/Control/CalypsoExample/WaveformAnalysisExample/src/components/WaveformAnalysisExample_entries.cxx new file mode 100644 index 0000000000000000000000000000000000000000..370b5668e5824c05cb3cd7fb227e6350f543be51 --- /dev/null +++ b/Control/CalypsoExample/WaveformAnalysisExample/src/components/WaveformAnalysisExample_entries.cxx @@ -0,0 +1,3 @@ +#include "../WaveformHitAlg.h" + +DECLARE_COMPONENT( WaveformHitAlg ) diff --git a/Control/CalypsoExample/WaveformDataAccessExample/CMakeLists.txt b/Control/CalypsoExample/WaveformDataAccessExample/CMakeLists.txt index 69bfbf2e24d75088351f75892d627d60e1ad302a..703ced096e170c92949af056d37cad12057b81cf 100644 --- a/Control/CalypsoExample/WaveformDataAccessExample/CMakeLists.txt +++ b/Control/CalypsoExample/WaveformDataAccessExample/CMakeLists.txt @@ -8,7 +8,7 @@ atlas_subdir( WaveformDataAccessExample ) atlas_add_component( WaveformDataAccessExample src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps ScintRawEvent ) + LINK_LIBRARIES AthenaBaseComps WaveRawEvent ) atlas_install_python_modules( python/*.py ) diff --git a/Control/CalypsoExample/WaveformDataAccessExample/python/WaveformDataAccessExampleConfig.py b/Control/CalypsoExample/WaveformDataAccessExample/python/WaveformDataAccessExampleConfig.py index 5d0cfcdeaaac4f96e094b635138edf66466208e2..1151c74dffc7ddaa0182df025e82dd243c36684a 100755 --- a/Control/CalypsoExample/WaveformDataAccessExample/python/WaveformDataAccessExampleConfig.py +++ b/Control/CalypsoExample/WaveformDataAccessExample/python/WaveformDataAccessExampleConfig.py @@ -14,7 +14,7 @@ def WaveformDataAccessExampleCfg(flags, name="WaveformDataAccessExampleAlg", **k from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg a = FaserGeometryCfg(flags) - WaveformDataAccessExampleAlg = CompFactory.ScintWaveformAccess + WaveformDataAccessExampleAlg = CompFactory.RawWaveformAccess a.addEventAlgo(WaveformDataAccessExampleAlg(name, **kwargs)) from FaserByteStreamCnvSvc.FaserByteStreamCnvSvcConfig import FaserByteStreamCnvSvcCfg @@ -56,7 +56,7 @@ if __name__ == "__main__": from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg itemList = [ "xAOD::EventInfo#*", "xAOD::EventAuxInfo#*", - "ScintWaveformContainer#*" + "RawWaveformContainer#*" ] acc.merge(OutputStreamCfg(ConfigFlags, "RDO", itemList)) ostream = acc.getEventAlgo("OutputStreamRDO") diff --git a/Control/CalypsoExample/WaveformDataAccessExample/src/ScintWaveformAccess.cxx b/Control/CalypsoExample/WaveformDataAccessExample/src/RawWaveformAccess.cxx similarity index 54% rename from Control/CalypsoExample/WaveformDataAccessExample/src/ScintWaveformAccess.cxx rename to Control/CalypsoExample/WaveformDataAccessExample/src/RawWaveformAccess.cxx index d3de51d50d765ad4c3ffc4908ab0f426ef80e0ca..0d06d587ddb18dc55bee24650e282af8fdd856e7 100644 --- a/Control/CalypsoExample/WaveformDataAccessExample/src/ScintWaveformAccess.cxx +++ b/Control/CalypsoExample/WaveformDataAccessExample/src/RawWaveformAccess.cxx @@ -3,28 +3,27 @@ */ /* - * ScintWaveformAccess.cxx + * RawWaveformAccess.cxx * * Simple algorithm to access waveform data from storegate. * Try to write a proper thread-safe algorithm. * */ -#include "ScintWaveformAccess.h" -//#include "ScintRawEvent/ScintWaveform.h" +#include "RawWaveformAccess.h" -ScintWaveformAccess::ScintWaveformAccess(const std::string& name, ISvcLocator* pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator) +RawWaveformAccess::RawWaveformAccess(const std::string& name, ISvcLocator* pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator) { } -ScintWaveformAccess::~ScintWaveformAccess() +RawWaveformAccess::~RawWaveformAccess() { } StatusCode -ScintWaveformAccess::initialize() +RawWaveformAccess::initialize() { - ATH_MSG_DEBUG("ScintWaveformAccess::initialize() called"); + ATH_MSG_DEBUG("RawWaveformAccess::initialize() called"); // Must initialize SG handles ATH_CHECK( m_CaloWaveformContainer.initialize() ); @@ -38,40 +37,40 @@ ScintWaveformAccess::initialize() } StatusCode -ScintWaveformAccess::finalize() +RawWaveformAccess::finalize() { - ATH_MSG_DEBUG("ScintWaveformAccess::finalize() called"); + ATH_MSG_DEBUG("RawWaveformAccess::finalize() called"); return StatusCode::SUCCESS; } StatusCode -ScintWaveformAccess::execute(const EventContext& ctx) const +RawWaveformAccess::execute(const EventContext& ctx) const { - ATH_MSG_DEBUG("ScintWaveformAccess::execute() called"); + ATH_MSG_DEBUG("RawWaveformAccess::execute() called"); // Try reading all of the different containers - SG::ReadHandle<ScintWaveformContainer> caloHandle(m_CaloWaveformContainer, ctx); + SG::ReadHandle<RawWaveformContainer> caloHandle(m_CaloWaveformContainer, ctx); ATH_MSG_INFO("Found ReadHandle for CaloWaveforms"); ATH_MSG_INFO(*caloHandle); - SG::ReadHandle<ScintWaveformContainer> vetoHandle(m_VetoWaveformContainer, ctx); + SG::ReadHandle<RawWaveformContainer> vetoHandle(m_VetoWaveformContainer, ctx); ATH_MSG_INFO("Found ReadHandle for VetoWaveforms"); ATH_MSG_INFO(*vetoHandle); - SG::ReadHandle<ScintWaveformContainer> triggerHandle(m_TriggerWaveformContainer, ctx); + SG::ReadHandle<RawWaveformContainer> triggerHandle(m_TriggerWaveformContainer, ctx); ATH_MSG_INFO("Found ReadHandle for TriggerWaveforms"); ATH_MSG_INFO(*triggerHandle); - SG::ReadHandle<ScintWaveformContainer> preshowerHandle(m_PreshowerWaveformContainer, ctx); + SG::ReadHandle<RawWaveformContainer> preshowerHandle(m_PreshowerWaveformContainer, ctx); ATH_MSG_INFO("Found ReadHandle for PreshowerWaveforms"); ATH_MSG_INFO(*preshowerHandle); - SG::ReadHandle<ScintWaveformContainer> testHandle(m_TestWaveformContainer, ctx); + SG::ReadHandle<RawWaveformContainer> testHandle(m_TestWaveformContainer, ctx); ATH_MSG_INFO("Found ReadHandle for TestWaveforms"); ATH_MSG_INFO(*testHandle); - SG::ReadHandle<ScintWaveformContainer> clockHandle(m_ClockWaveformContainer, ctx); + SG::ReadHandle<RawWaveformContainer> clockHandle(m_ClockWaveformContainer, ctx); ATH_MSG_INFO("Found ReadHandle for ClockWaveforms"); ATH_MSG_INFO(*clockHandle); diff --git a/Control/CalypsoExample/WaveformDataAccessExample/src/ScintWaveformAccess.h b/Control/CalypsoExample/WaveformDataAccessExample/src/RawWaveformAccess.h similarity index 58% rename from Control/CalypsoExample/WaveformDataAccessExample/src/ScintWaveformAccess.h rename to Control/CalypsoExample/WaveformDataAccessExample/src/RawWaveformAccess.h index ac73b688d35cf9a793c6868027f5b0c62165abbd..d26b1eac4afab5baa890c6de5eadda5b13b5acb3 100644 --- a/Control/CalypsoExample/WaveformDataAccessExample/src/ScintWaveformAccess.h +++ b/Control/CalypsoExample/WaveformDataAccessExample/src/RawWaveformAccess.h @@ -3,26 +3,26 @@ */ /* - * ScintWaveformAccess.h + * RawWaveformAccess.h * * Simple algorithm to access digitizer data from storegate. * Try to write a proper thread-safe algorithm. * */ -#ifndef WAVEFORMDATAACCESSEXAMPLE_SCINTWAVEFORMACCESS_H -#define WAVEFORMDATAACCESSEXAMPLE_SCINTWAVEFORMACCESS_H +#ifndef WAVEFORMDATAACCESSEXAMPLE_RAWWAVEFORMACCESS_H +#define WAVEFORMDATAACCESSEXAMPLE_RAWWAVEFORMACCESS_H #include "AthenaBaseComps/AthReentrantAlgorithm.h" #include "StoreGate/ReadHandleKey.h" -#include "ScintRawEvent/ScintWaveformContainer.h" +#include "WaveRawEvent/RawWaveformContainer.h" -class ScintWaveformAccess: public AthReentrantAlgorithm +class RawWaveformAccess: public AthReentrantAlgorithm { public: - ScintWaveformAccess(const std::string& name, ISvcLocator* pSvcLocator); - virtual ~ScintWaveformAccess(); + RawWaveformAccess(const std::string& name, ISvcLocator* pSvcLocator); + virtual ~RawWaveformAccess(); virtual StatusCode initialize() override; virtual StatusCode execute(const EventContext& ctx) const override; @@ -30,18 +30,18 @@ class ScintWaveformAccess: public AthReentrantAlgorithm private: /// StoreGate key - SG::ReadHandleKey<ScintWaveformContainer> m_CaloWaveformContainer + SG::ReadHandleKey<RawWaveformContainer> m_CaloWaveformContainer { this, "CaloWaveformContainerKey", "CaloWaveforms", "ReadHandleKey for CaloWaveforms Container"}; - SG::ReadHandleKey<ScintWaveformContainer> m_VetoWaveformContainer + SG::ReadHandleKey<RawWaveformContainer> m_VetoWaveformContainer { this, "VetoWaveformContainerKey", "VetoWaveforms", "ReadHandleKey for CaloWaveforms Container"}; - SG::ReadHandleKey<ScintWaveformContainer> m_TriggerWaveformContainer + SG::ReadHandleKey<RawWaveformContainer> m_TriggerWaveformContainer { this, "TriggerWaveformContainerKey", "TriggerWaveforms", "ReadHandleKey for TriggerWaveforms Container"}; - SG::ReadHandleKey<ScintWaveformContainer> m_PreshowerWaveformContainer + SG::ReadHandleKey<RawWaveformContainer> m_PreshowerWaveformContainer { this, "PreshowerWaveformContainerKey", "PreshowerWaveforms", "ReadHandleKey for PreshowerWaveforms Container"}; - SG::ReadHandleKey<ScintWaveformContainer> m_TestWaveformContainer + SG::ReadHandleKey<RawWaveformContainer> m_TestWaveformContainer { this, "TestWaveformContainerKey", "TestWaveforms", "ReadHandleKey for TestWaveforms Container"}; - SG::ReadHandleKey<ScintWaveformContainer> m_ClockWaveformContainer + SG::ReadHandleKey<RawWaveformContainer> m_ClockWaveformContainer { this, "ClockWaveformContainerKey", "ClockWaveforms", "ReadHandleKey for ClockWaveforms Container"}; }; -#endif /* WAVEFORMDATAACCESSEXAMPLE_SCINTWAVEFORMACCESS_H */ +#endif /* WAVEFORMDATAACCESSEXAMPLE_RAWWAVEFORMACCESS_H */ diff --git a/Control/CalypsoExample/WaveformDataAccessExample/src/components/WaveformDataAccess_entries.cxx b/Control/CalypsoExample/WaveformDataAccessExample/src/components/WaveformDataAccess_entries.cxx index 41c3b845a273f71238cb72602ec2489459d9d780..4cf977bfe8b96042565fa5b42c9cd0e8db77b994 100644 --- a/Control/CalypsoExample/WaveformDataAccessExample/src/components/WaveformDataAccess_entries.cxx +++ b/Control/CalypsoExample/WaveformDataAccessExample/src/components/WaveformDataAccess_entries.cxx @@ -1,3 +1,3 @@ -#include "../ScintWaveformAccess.h" +#include "../RawWaveformAccess.h" -DECLARE_COMPONENT( ScintWaveformAccess ) +DECLARE_COMPONENT( RawWaveformAccess ) diff --git a/DetectorDescription/DetDescrCnvSvc/python/DetStoreConfig.py b/DetectorDescription/DetDescrCnvSvc/python/DetStoreConfig.py index 40a838de765d5aafaa1eb5bb34352cb5211b6db7..1e769c27f31cf8550872bf168ed98a39d4a8ff91 100644 --- a/DetectorDescription/DetDescrCnvSvc/python/DetStoreConfig.py +++ b/DetectorDescription/DetDescrCnvSvc/python/DetStoreConfig.py @@ -6,11 +6,11 @@ # def _setupDetStoreConfig(): - from AthenaCommon.AppMgr import theApp + # from AthenaCommon.AppMgr import theApp from AthenaCommon.AppMgr import ServiceMgr as svcMgr # first, make sure we create a DetectorStore - import AthenaCommon.AtlasUnixStandardJob + # import AthenaCommon.AtlasUnixStandardJob #theApp.CreateSvc += [ svcMgr.DetectorStore.getFullName() ] # now configure the Detector Description converter service diff --git a/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql b/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql index edd02d7b67c730dfc55387e0123d9b53d858fa96..25673485d439d673d60366b80f62285228601f98 100644 --- a/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql +++ b/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql @@ -235,6 +235,21 @@ CREATE TABLE IF NOT EXISTS "VETOPLATEGENERAL_DATA2TAG" ( "VETOPLATEGENERAL_DATA_ID" SLONGLONG ); -- +DROP TABLE IF EXISTS "VETORADIATORGENERAL_DATA"; +CREATE TABLE IF NOT EXISTS "VETORADIATORGENERAL_DATA" ( + "VETORADIATORGENERAL_DATA_ID" SLONGLONG UNIQUE, + "WIDTH" DOUBLE, + "LENGTH" DOUBLE, + "THICKNESS" DOUBLE, + "MATERIAL" TEXT +); +-- +DROP TABLE IF EXISTS "VETORADIATORGENERAL_DATA2TAG"; +CREATE TABLE IF NOT EXISTS "VETORADIATORGENERAL_DATA2TAG" ( + "VETORADIATORGENERAL_TAG_ID" SLONGLONG, + "VETORADIATORGENERAL_DATA_ID" SLONGLONG +); +-- -- Tables for describing Trigger scintillator plates (and passive radiators) -- DROP TABLE IF EXISTS "TRIGGERTOPLEVEL_DATA"; @@ -326,6 +341,7 @@ CREATE TABLE IF NOT EXISTS "PRESHOWERSTATIONGENERAL_DATA2TAG" ( "PRESHOWERSTATIONGENERAL_TAG_ID" SLONGLONG, "PRESHOWERSTATIONGENERAL_DATA_ID" SLONGLONG ); +-- DROP TABLE IF EXISTS "PRESHOWERPLATEGENERAL_DATA"; CREATE TABLE IF NOT EXISTS "PRESHOWERPLATEGENERAL_DATA" ( "PRESHOWERPLATEGENERAL_DATA_ID" SLONGLONG UNIQUE, @@ -342,6 +358,40 @@ CREATE TABLE IF NOT EXISTS "PRESHOWERPLATEGENERAL_DATA2TAG" ( "PRESHOWERPLATEGENERAL_DATA_ID" SLONGLONG ); -- +-- The Preshower radiators +-- +DROP TABLE IF EXISTS "PRESHOWERRADIATORGENERAL_DATA"; +CREATE TABLE IF NOT EXISTS "PRESHOWERRADIATORGENERAL_DATA" ( + "PRESHOWERRADIATORGENERAL_DATA_ID" SLONGLONG UNIQUE, + "WIDTH" DOUBLE, + "LENGTH" DOUBLE, + "THICKNESS" DOUBLE, + "MATERIAL" TEXT +); +-- +DROP TABLE IF EXISTS "PRESHOWERRADIATORGENERAL_DATA2TAG"; +CREATE TABLE IF NOT EXISTS "PRESHOWERRADIATORGENERAL_DATA2TAG" ( + "PRESHOWERRADIATORGENERAL_TAG_ID" SLONGLONG, + "PRESHOWERRADIATORGENERAL_DATA_ID" SLONGLONG +); +-- +-- The Preshower absorbers +-- +DROP TABLE IF EXISTS "PRESHOWERABSORBERGENERAL_DATA"; +CREATE TABLE IF NOT EXISTS "PRESHOWERABSORBERGENERAL_DATA" ( + "PRESHOWERABSORBERGENERAL_DATA_ID" SLONGLONG UNIQUE, + "WIDTH" DOUBLE, + "LENGTH" DOUBLE, + "THICKNESS" DOUBLE, + "MATERIAL" TEXT +); +-- +DROP TABLE IF EXISTS "PRESHOWERABSORBERGENERAL_DATA2TAG"; +CREATE TABLE IF NOT EXISTS "PRESHOWERABSORBERGENERAL_DATA2TAG" ( + "PRESHOWERABSORBERGENERAL_TAG_ID" SLONGLONG, + "PRESHOWERABSORBERGENERAL_DATA_ID" SLONGLONG +); +-- -- Ecal top level tables -- DROP TABLE IF EXISTS "ECALTOPLEVEL_DATA"; @@ -662,6 +712,7 @@ INSERT INTO "HVS_NODE" VALUES (210, "VetoTopLevel", 21, 0, NULL); INSERT INTO "HVS_NODE" VALUES (211, "VetoStationGeneral", 21, 0, NULL); INSERT INTO "HVS_NODE" VALUES (212, "VetoPlateGeneral", 21, 0, NULL); INSERT INTO "HVS_NODE" VALUES (214, "VetoSwitches", 21, 0, NULL ); +INSERT INTO "HVS_NODE" VALUES (215, "VetoRadiatorGeneral", 21, 0, NULL); INSERT INTO "HVS_NODE" VALUES (22, "Trigger", 2, 1, NULL); INSERT INTO "HVS_NODE" VALUES (220, "TriggerTopLevel", 22, 0, NULL); INSERT INTO "HVS_NODE" VALUES (221, "TriggerStationGeneral", 22, 0, NULL); @@ -672,6 +723,8 @@ INSERT INTO "HVS_NODE" VALUES (230, "PreshowerTopLevel", 23, 0, NULL); INSERT INTO "HVS_NODE" VALUES (231, "PreshowerStationGeneral", 23, 0, NULL); INSERT INTO "HVS_NODE" VALUES (232, "PreshowerPlateGeneral", 23, 0, NULL); INSERT INTO "HVS_NODE" VALUES (234, "PreshowerSwitches", 23, 0, NULL ); +INSERT INTO "HVS_NODE" VALUES (235, "PreshowerRadiatorGeneral", 23, 0, NULL); +INSERT INTO "HVS_NODE" VALUES (236, "PreshowerAbsorberGeneral", 23, 0, NULL); INSERT INTO "HVS_NODE" VALUES (3, "Tracker", 0, 1, NULL); INSERT INTO "HVS_NODE" VALUES (3003, "TrackerMaterials", 3, 0, NULL); INSERT INTO "HVS_NODE" VALUES (3004, "TrackerMatComponents", 3, 0, NULL); @@ -708,14 +761,18 @@ INSERT INTO "HVS_TAG2NODE" VALUES (0, "FASER-01", 100039, NULL, 0, 0, 1590796800 INSERT INTO "HVS_TAG2NODE" VALUES (0, "FASER-CR", 107784, NULL, 0, 0, 1598400000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (0, "FASER-02", 107788, NULL, 0, 0, 1619222400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (0, "FASERNU-02", 107804, NULL, 0, 0, 1619308800000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (0, "FASER-TB00", 107834, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (90, "FaserCommon-00", 100013, NULL, 0, 0, 1549324800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (9000, "Materials-00", 100005, NULL, 0, 0, 1549238400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (9001, "StdMaterials-00", 100006, NULL, 0, 0, 1549238400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (9002, "StdMatComponents-00", 100007, NULL, 0, 0, 1549238400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (9003, "Elements-00", 100008, NULL, 0, 0, 1549238400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (1, "Neutrino-00", 100031, NULL, 0, 0, 1582416000000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (1, "Neutrino-TB00", 107811, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (11,"Emulsion-00", 100034, NULL, 0, 0, 1582416000000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (11,"Emulsion-TB00", 107812, NULL, 0, 0, 1582416000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (110, "EmulsionTopLevel-00", 100035, NULL, 0, 0, 1582416000000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (110, "EmulsionTopLevel-TB00", 107813, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (111, "EmulsionGeneral-00", 107805, NULL, 0, 0, 1619308800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (112, "EmulsionFilm-00", 107806, NULL, 0, 0, 1619308800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (113, "EmulsionPlates-00", 107807, NULL, 0, 0, 1619308800000000000, NULL, 22); @@ -723,21 +780,26 @@ INSERT INTO "HVS_TAG2NODE" VALUES (114, "EmulsionSwitches-00", 100036, NULL, 0, INSERT INTO "HVS_TAG2NODE" VALUES (2, "Scintillator-00", 100001, NULL, 0, 0, 1549238400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (2, "Scintillator-01", 100042, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (2, "Scintillator-02", 107789, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (2, "Scintillator-TB00", 107814, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (3, "Tracker-00", 100002, NULL, 0, 0, 1549238400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (3, "Tracker-01", 100038, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (3, "Tracker-CR", 107783, NULL, 0, 0, 1598400000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (3, "Tracker-02", 107790, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (3, "Tracker-TB00", 107815, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (31, "SCT-00", 100026, NULL, 0, 0, 1567987200000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (31, "SCT-01", 100037, NULL, 0, 0, 1159079680000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (31, "SCT-CR", 107781, NULL, 0, 0, 1598400000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (31, "SCT-02", 107791, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (31, "SCT-TB00", 107816, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (32, "Dipole-00", 100027, NULL, 0, 0, 1568678400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (32, "Dipole-01", 100041, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (32, "Dipole-02", 107792, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (32, "Dipole-TB00", 107817, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (310, "SctTopLevel-00", 106788, NULL, 0, 0, 1567987200000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (310, "SctTopLevel-01", 106790, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (310, "SctTopLevel-CR", 107786, NULL, 0, 0, 1598400000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (310, "SctTopLevel-02", 107793, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (310, "SctTopLevel-TB00", 107818, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (311, "SctBarrelModule-00", 107003, NULL, 0, 0, 1567987200000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (312, "SctBarrelSensor-00", 106730, NULL, 0, 0, 1567987200000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (313, "SctFaserGeneral-00", 106789, NULL, 0, 0, 1567987200000000000, NULL, 22); @@ -753,35 +815,47 @@ INSERT INTO "HVS_TAG2NODE" VALUES (3182,"SctFrameShape-00", 100055, NULL, 0, 0, INSERT INTO "HVS_TAG2NODE" VALUES (320, "DipoleTopLevel-00", 100029, NULL, 0, 0, 1568678400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (320, "DipoleTopLevel-01", 100040, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (320, "DipoleTopLevel-02", 107794, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (320, "DipoleTopLevel-TB00", 107819, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (321, "DipoleGeneral-00", 100004, NULL, 0, 0, 1568678400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (324, "DipoleSwitches-00", 100028, NULL, 0, 0, 1568678400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (4, "Calorimeter-00", 100003, NULL, 0, 0, 1549238400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (4, "Calorimeter-02", 107795, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (4, "Calorimeter-TB00", 107820, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (41, "Ecal-00", 100056, NULL, 0, 0, 1593907200000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (41, "Ecal-02", 107796, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (41, "Ecal-TB00", 107821, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (410, "EcalTopLevel-00", 100058, NULL, 0, 0, 1599350400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (410, "EcalTopLevel-02", 107797, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (410, "EcalTopLevel-TB00", 107822, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (411, "EcalRowGeneral-00", 100059, NULL, 0, 0, 1599350400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (411, "EcalRowGeneral-TB00", 107830, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (414, "EcalSwitches-00", 100057, NULL, 0, 0, 1593907200000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (210, "VetoTopLevel-00", 100009, NULL, 0, 0, 1567123200000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (210, "VetoTopLevel-01", 100046, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (210, "VetoTopLevel-02", 107798, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (210, "VetoTopLevel-TB00", 107823, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (211, "VetoStationGeneral-00", 100010, NULL, 0, 0, 1567123200000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (212, "VetoPlateGeneral-00", 100025, NULL, 0, 0, 1567209600000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (211, "VetoStationGeneral-01", 100049, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (212, "VetoPlateGeneral-01", 100050, NULL, 0, 0, 1590796800000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (211, "VetoStationGeneral-TB00", 107833, NULL, 0, 0, 1627862400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (215, "VetoRadiatorGeneral-00", 107810, NULL, 0, 0, 1627776000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (220, "TriggerTopLevel-00", 110009, NULL, 0, 0, 1581292800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (220, "TriggerTopLevel-01", 100047, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (220, "TriggerTopLevel-02", 107799, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (220, "TriggerTopLevel-TB00", 107824, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (221, "TriggerStationGeneral-00", 110010, NULL, 0, 0, 1581292800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (221, "TriggerStationGeneral-01", 100051, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (222, "TriggerPlateGeneral-00", 110025, NULL, 0, 0, 1581292800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (230, "PreshowerTopLevel-00", 120009, NULL, 0, 0, 1581292800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (230, "PreshowerTopLevel-01", 100048, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (230, "PreshowerTopLevel-02", 107800, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (230, "PreshowerTopLevel-TB00", 107825, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (231, "PreshowerStationGeneral-00", 120010, NULL, 0, 0, 1581292800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (231, "PreshowerStationGeneral-01", 100052, NULL, 0, 0, 1590796800000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (232, "PreshowerPlateGeneral-00", 120025, NULL, 0, 0, 1581292800000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (235, "PreshowerRadatorGeneral-00", 107808, NULL, 0, 0, 1627776000000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (236, "PreshowerAbsorberGeneral-00", 107809, NULL, 0, 0, 1627776000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (1003, "NeutrinoMaterials-00", 100032, NULL, 0, 0, 1582416000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (1004, "NeutrinoMatComponents-00", 100033, NULL, 0, 0, 1582416000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (2003, "ScintMaterials-00", 100011, NULL, 0, 0, 1549238400000000000, NULL, 22); @@ -802,45 +876,66 @@ INSERT INTO "HVS_TAG2NODE" VALUES (23, "Preshower-01", 100045, NULL, 0, 0, 15907 INSERT INTO "HVS_TAG2NODE" VALUES (21, "Veto-02", 107801, NULL, 0, 0, 1619222400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (22, "Trigger-02", 107802, NULL, 0, 0, 1619222400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (23, "Preshower-02", 107803, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (21, "Veto-TB00", 107826, NULL, 0, 0, 1627862400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (22, "Trigger-TB00", 107827, NULL, 0, 0, 1627862400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (23, "Preshower-TB00", 107828, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (1005, "NeutrinoIdentifier-00", 100030, NULL, 0, 0, 1582416000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (2005, "ScintIdentifier-00", 100016, NULL, 0, 0, 1550448000000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (2005, "ScintIdentifier-TB00", 107832, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (3005, "TrackerIdentifier-00", 100017, NULL, 0, 0, 1550448000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (3005, "TrackerIdentifier-CR", 107785, NULL, 0, 0, 1598400000000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (3005, "TrackerIdentifier-02", 107787, NULL, 0, 0, 1619222400000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (3005, "TrackerIdentifier-TB00", 107829, NULL, 0, 0, 1627862400000000000, NULL, 22); INSERT INTO "HVS_TAG2NODE" VALUES (4005, "CaloIdentifier-00", 100018, NULL, 0, 0, 1550448000000000000, NULL, 22); +INSERT INTO "HVS_TAG2NODE" VALUES (4005, "CaloIdentifier-TB00", 107831, NULL, 0, 0, 1627862400000000000, NULL, 22); -- Data for the HVS_LTAG2LTAG table INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107804, 1, 100031); +INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107834, 1, 107811); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100000, 2, 100001); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100039, 2, 100042); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107784, 2, 100042); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107788, 2, 107789); +INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107834, 2, 107814); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100000, 3, 100002); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100039, 3, 100038); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107784, 3, 107783); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107788, 3, 107790); +INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107834, 3, 107815); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100000, 4, 100003); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100039, 4, 100003); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107784, 4, 100003); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107788, 4, 107795); +INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107834, 4, 107820); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100000, 90, 100013); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100039, 90, 100013); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107788, 90, 100013); +INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107834, 90, 100013); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100000, 9000, 100005); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 100039, 9000, 100005); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107784, 9000, 100005); INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107788, 9000, 100005); +INSERT INTO "HVS_LTAG2LTAG" VALUES (0, 107834, 9000, 100005); INSERT INTO "HVS_LTAG2LTAG" VALUES (9000, 100005, 9001, 100006); INSERT INTO "HVS_LTAG2LTAG" VALUES (9000, 100005, 9002, 100007); INSERT INTO "HVS_LTAG2LTAG" VALUES (9000, 100005, 9003, 100008); INSERT INTO "HVS_LTAG2LTAG" VALUES (1, 100031, 11, 100034); +INSERT INTO "HVS_LTAG2LTAG" VALUES (1, 107811, 11, 107812); INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 100034, 110, 100035); INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 100034, 111, 107805); INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 100034, 112, 107806); INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 100034, 113, 107807); INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 100034, 114, 100036); +INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 107812, 110, 107813); +INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 107812, 111, 107805); +INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 107812, 112, 107806); +INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 107812, 113, 107807); +INSERT INTO "HVS_LTAG2LTAG" VALUES (11, 107812, 114, 100036); INSERT INTO "HVS_LTAG2LTAG" VALUES (1, 100031, 1003, 100032); INSERT INTO "HVS_LTAG2LTAG" VALUES (1, 100031, 1004, 100033); INSERT INTO "HVS_LTAG2LTAG" VALUES (1, 100031, 1005, 100030); +INSERT INTO "HVS_LTAG2LTAG" VALUES (1, 107811, 1003, 100032); +INSERT INTO "HVS_LTAG2LTAG" VALUES (1, 107811, 1004, 100033); +INSERT INTO "HVS_LTAG2LTAG" VALUES (1, 107811, 1005, 100030); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 100001, 21, 100015); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 100001, 22, 100019); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 100001, 23, 100020); @@ -850,6 +945,9 @@ INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 100042, 23, 100045); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107789, 21, 107801); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107789, 22, 107802); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107789, 23, 107803); +INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107814, 21, 107826); +INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107814, 22, 107827); +INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107814, 23, 107828); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 100001, 2003, 100011); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 100001, 2004, 100012); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 100001, 2005, 100016); @@ -859,113 +957,152 @@ INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 100042, 2005, 100016); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107789, 2003, 100011); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107789, 2004, 100012); INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107789, 2005, 100016); +INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107814, 2003, 100011); +INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107814, 2004, 100012); +INSERT INTO "HVS_LTAG2LTAG" VALUES (2, 107814, 2005, 100016); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 100015, 210, 100009); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 100043, 210, 100046); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 107801, 210, 100046); +INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 107826, 210, 107823); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 100015, 211, 100010); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 100043, 211, 100049); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 107801, 211, 100049); +INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 107826, 211, 100049); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 100015, 212, 100025); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 100043, 212, 100050); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 107801, 212, 100050); +INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 107826, 212, 100050); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 100015, 214, 100014); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 100043, 214, 100014); INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 107801, 214, 100014); +INSERT INTO "HVS_LTAG2LTAG" VALUES (21, 107826, 214, 100014); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 100019, 220, 110009); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 100044, 220, 100047); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 107802, 220, 100047); +INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 107827, 220, 107824); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 100019, 221, 110010); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 100044, 221, 100051); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 107802, 221, 100051); +INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 107827, 221, 100051); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 100019, 222, 110025); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 100044, 222, 110025); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 107802, 222, 110025); +INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 107827, 222, 110025); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 100019, 224, 110014); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 100044, 224, 110014); INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 107802, 224, 110014); +INSERT INTO "HVS_LTAG2LTAG" VALUES (22, 107827, 224, 110014); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 100020, 230, 120009); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 100045, 230, 120048); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 107803, 230, 120048); +INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 107828, 230, 107825); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 100020, 231, 120010); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 100045, 231, 100052); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 107803, 231, 100052); +INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 107828, 231, 100052); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 100020, 232, 120025); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 100045, 232, 120025); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 107803, 232, 120025); +INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 107828, 232, 120025); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 100020, 234, 120014); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 100045, 234, 120014); INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 107803, 234, 120014); +INSERT INTO "HVS_LTAG2LTAG" VALUES (23, 107828, 234, 120014); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100002, 31, 100026); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100038, 31, 100037); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107783, 31, 107781); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107790, 31, 107791); +INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107815, 31, 107816); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100002, 32, 100027); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100038, 32, 100041); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107790, 32, 107792); +INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107815, 32, 107817); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100002, 3003, 100021); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100038, 3003, 100021); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107790, 3003, 100021); +INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107815, 3003, 100021); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100002, 3004, 100022); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100038, 3004, 100022); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107790, 3004, 100022); +INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107815, 3004, 100022); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100002, 3005, 100017); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 100038, 3005, 100017); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107781, 3005, 107785); INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107790, 3005, 107787); +INSERT INTO "HVS_LTAG2LTAG" VALUES (3, 107815, 3005, 107829); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 310, 106788); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 310, 106790); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100081, 310, 107786); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 310, 106790); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 310, 107818); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 311, 107003); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 311, 107003); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 311, 107003); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 311, 107003); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 312, 106730); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 312, 106730); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 312, 106730); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 312, 106730); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 313, 106789); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 313, 106791); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107781, 313, 107780); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 313, 106791); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 313, 106791); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 314, 107782); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 314, 107782); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 314, 107782); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 314, 107782); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 315, 107777); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 315, 107777); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 315, 107777); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 315, 107777); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 316, 107778); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 316, 107778); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 316, 107778); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 316, 107778); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 317, 107779); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 317, 107779); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 317, 107779); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 317, 107779); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100026, 318, 100053); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 100037, 318, 100053); INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107791, 318, 100053); +INSERT INTO "HVS_LTAG2LTAG" VALUES (31, 107816, 318, 100053); INSERT INTO "HVS_LTAG2LTAG" VALUES (318, 100053, 3181, 100054); INSERT INTO "HVS_LTAG2LTAG" VALUES (318, 100053, 3182, 100055); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 100027, 320, 100029); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 100041, 320, 100040); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 107792, 320, 107794); +INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 107817, 320, 107819); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 100027, 321, 100004); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 100041, 321, 100004); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 107792, 321, 100004); +INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 107817, 321, 100004); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 100027, 324, 100028); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 100041, 324, 100028); INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 107792, 324, 100028); +INSERT INTO "HVS_LTAG2LTAG" VALUES (32, 107817, 324, 100028); INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 100003, 41, 100056); INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 107795, 41, 107796); +INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 107820, 41, 107821); INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 100003, 4003, 100023); INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 100003, 4004, 100024); INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 100003, 4005, 100018); INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 107795, 4003, 100023); INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 107795, 4004, 100024); INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 107795, 4005, 100018); +INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 107820, 4003, 100023); +INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 107820, 4004, 100024); +INSERT INTO "HVS_LTAG2LTAG" VALUES (4, 107820, 4005, 100018); INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 100056, 410, 100058); INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 107796, 410, 107797); +INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 107821, 410, 107822); INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 100056, 411, 100059); INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 100056, 414, 100057); INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 107796, 411, 100059); INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 107796, 414, 100057); +INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 107821, 411, 107830); +INSERT INTO "HVS_LTAG2LTAG" VALUES (41, 107821, 414, 100057); -- Data for the HVS_TAGCACHE table INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "FASER", "FASER-00", 100000); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "FaserCommon", "FaserCommon-00", 100013); @@ -1003,12 +1140,15 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "EcalSwitches", "EcalSwitch INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "VetoTopLevel", "VetoTopLevel-00", 100009); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "VetoStationGeneral", "VetoStationGeneral-00", 100010); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "VetoPlateGeneral", "VetoPlateGeneral-00", 100025); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "VetoRadiatorGeneral", "VetoRadiatorGeneral-00", 107810); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "TriggerTopLevel", "TriggerTopLevel-00", 110009); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "TriggerStationGeneral", "TriggerStationGeneral-00", 110010); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "TriggerPlateGeneral", "TriggerPlateGeneral-00", 110025); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "PreshowerTopLevel", "PreshowerTopLevel-00", 120009); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "PreshowerStationGeneral", "PreshowerStationGeneral-00", 120010); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "PreshowerPlateGeneral", "PreshowerPlateGeneral-00", 120025); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "PreshowerRadiatorGeneral", "PreshowerRadiatorGeneral-00", 107808); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "PreshowerAbsorberGeneral", "PreshowerAbsorberGeneral-00", 107809); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "NeutrinoMaterials", "NeutrinoMaterials-00", 100032); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "NeutrinoMatComponents", "NeutrinoMatComponents-00", 100033); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintMaterials", "ScintMaterials-00", 100011); @@ -1027,6 +1167,7 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "NeutrinoIdentifier", "NeutrinoId INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintIdentifier", "ScintIdentifier-00", 100016); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "TrackerIdentifier", "TrackerIdentifier-00", 100017); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "CaloIdentifier", "CaloIdentifier-00", 100018); +-- INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "FASER", "FASER-01", 100039); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "FaserCommon", "FaserCommon-00", 100013); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "Materials", "Materials-00", 100005); @@ -1063,12 +1204,15 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "EcalSwitches", "EcalSwitch INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "VetoTopLevel", "VetoTopLevel-01", 100046); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "VetoStationGeneral", "VetoStationGeneral-01", 100049); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "VetoPlateGeneral", "VetoPlateGeneral-01", 100050); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "VetoRadiatorGeneral", "VetoRadiatorGeneral-00", 107810); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "TriggerTopLevel", "TriggerTopLevel-01", 100047); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "TriggerStationGeneral", "TriggerStationGeneral-01", 100051); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "TriggerPlateGeneral", "TriggerPlateGeneral-00", 110025); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "PreshowerTopLevel", "PreshowerTopLevel-01", 100048); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "PreshowerStationGeneral", "PreshowerStationGeneral-01", 100052); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "PreshowerPlateGeneral", "PreshowerPlateGeneral-00", 120025); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "PreshowerRadiatorGeneral", "PreshowerRadiatorGeneral-00", 107808); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "PreshowerAbsorberGeneral", "PreshowerAbsorberGeneral-00", 107809); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "NeutrinoMaterials", "NeutrinoMaterials-00", 100032); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "NeutrinoMatComponents", "NeutrinoMatComponents-00", 100033); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "ScintMaterials", "ScintMaterials-00", 100011); @@ -1087,6 +1231,7 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "NeutrinoIdentifier", "NeutrinoId INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "ScintIdentifier", "ScintIdentifier-00", 100016); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "TrackerIdentifier", "TrackerIdentifier-00", 100017); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-01", "CaloIdentifier", "CaloIdentifier-00", 100018); +-- INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "FASER", "FASER-CR", 107784); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "FaserCommon", "FaserCommon-00", 100013); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "Materials", "Materials-00", 100005); @@ -1123,12 +1268,15 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "EcalSwitches", "EcalSwitch INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "VetoTopLevel", "VetoTopLevel-01", 100046); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "VetoStationGeneral", "VetoStationGeneral-01", 100049); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "VetoPlateGeneral", "VetoPlateGeneral-01", 100050); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "VetoRadiatorGeneral", "VetoRadiatorGeneral-00", 107810); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "TriggerTopLevel", "TriggerTopLevel-01", 100047); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "TriggerStationGeneral", "TriggerStationGeneral-01", 100051); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "TriggerPlateGeneral", "TriggerPlateGeneral-00", 110025); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "PreshowerTopLevel", "PreshowerTopLevel-01", 100048); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "PreshowerStationGeneral", "PreshowerStationGeneral-01", 100052); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "PreshowerPlateGeneral", "PreshowerPlateGeneral-00", 120025); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "PreshowerRadiatorGeneral", "PreshowerRadiatorGeneral-00", 107808); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "PreshowerAbsorberGeneral", "PreshowerAbsorberGeneral-00", 107809); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "NeutrinoMaterials", "NeutrinoMaterials-00", 100032); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "NeutrinoMatComponents", "NeutrinoMatComponents-00", 100033); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "ScintMaterials", "ScintMaterials-00", 100011); @@ -1147,7 +1295,7 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "NeutrinoIdentifier", "NeutrinoId INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "ScintIdentifier", "ScintIdentifier-00", 100016); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "TrackerIdentifier", "TrackerIdentifier-CR", 107785); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-CR", "CaloIdentifier", "CaloIdentifier-00", 100018); - +-- INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "FASER", "FASER-02", 107788); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "FaserCommon", "FaserCommon-00", 100013); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "Materials", "Materials-00", 100005); @@ -1180,12 +1328,15 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "EcalSwitches", "EcalSwitch INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "VetoTopLevel", "VetoTopLevel-02", 107798); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "VetoStationGeneral", "VetoStationGeneral-01", 100049); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "VetoPlateGeneral", "VetoPlateGeneral-01", 100050); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "VetoRadiatorGeneral", "VetoRadiatorGeneral-00", 107810); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "TriggerTopLevel", "TriggerTopLevel-02", 107799); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "TriggerStationGeneral", "TriggerStationGeneral-01", 100051); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "TriggerPlateGeneral", "TriggerPlateGeneral-00", 110025); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "PreshowerTopLevel", "PreshowerTopLevel-02", 107800); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "PreshowerStationGeneral", "PreshowerStationGeneral-01", 100052); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "PreshowerPlateGeneral", "PreshowerPlateGeneral-00", 120025); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "PreshowerRadiatorGeneral", "PreshowerRadiatorGeneral-00", 107808); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "PreshowerAbsorberGeneral", "PreshowerAbsorberGeneral-00", 107809); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "NeutrinoMaterials", "NeutrinoMaterials-00", 100032); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "NeutrinoMatComponents", "NeutrinoMatComponents-00", 100033); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "ScintMaterials", "ScintMaterials-00", 100011); @@ -1204,7 +1355,7 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "NeutrinoIdentifier", "NeutrinoId INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "ScintIdentifier", "ScintIdentifier-00", 100016); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "TrackerIdentifier", "TrackerIdentifier-02", 107787); INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-02", "CaloIdentifier", "CaloIdentifier-00", 100018); - +-- INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "FASER", "FASERNU-02", 107804); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "FaserCommon", "FaserCommon-00", 100013); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "Materials", "Materials-00", 100005); @@ -1244,12 +1395,15 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "EcalSwitches", "EcalSwit INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "VetoTopLevel", "VetoTopLevel-02", 107798); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "VetoStationGeneral", "VetoStationGeneral-01", 100049); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "VetoPlateGeneral", "VetoPlateGeneral-01", 100050); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "VetoRadiatorGeneral", "VetoRadiatorGeneral-00", 107810); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "TriggerTopLevel", "TriggerTopLevel-02", 107799); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "TriggerStationGeneral", "TriggerStationGeneral-01", 100051); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "TriggerPlateGeneral", "TriggerPlateGeneral-00", 110025); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "PreshowerTopLevel", "PreshowerTopLevel-02", 107800); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "PreshowerStationGeneral", "PreshowerStationGeneral-01", 100052); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "PreshowerPlateGeneral", "PreshowerPlateGeneral-00", 120025); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "PreshowerRadiatorGeneral", "PreshowerRadiatorGeneral-00", 107808); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "PreshowerAbsorberGeneral", "PreshowerAbsorberGeneral-00", 107809); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "NeutrinoMaterials", "NeutrinoMaterials-00", 100032); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "NeutrinoMatComponents", "NeutrinoMatComponents-00", 100033); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "ScintMaterials", "ScintMaterials-00", 100011); @@ -1268,7 +1422,73 @@ INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "NeutrinoIdentifier", "Neutrino INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "ScintIdentifier", "ScintIdentifier-00", 100016); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "TrackerIdentifier", "TrackerIdentifier-02", 107787); INSERT INTO "HVS_TAGCACHE" VALUES ("FASERNU-02", "CaloIdentifier", "CaloIdentifier-00", 100018); - +-- +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "FASER", "FASER-TB00", 107834); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "FaserCommon", "FaserCommon-00", 100013); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Materials", "Materials-00", 100005); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "StdMaterials", "StdMaterials-00", 100006); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "StdMatComponents", "StdMatComponents-00", 100007); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Elements", "Elements-00", 100008); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Neutrino", "Neutrino-TB00", 107811); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Emulsion", "Emulsion-TB00", 107812); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "EmulsionTopLevel", "EmulsionTopLevel-TB00", 107813); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "EmulsionGeneral", "EmulsionGeneral-00", 107805); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "EmulsionFilm", "EmulsionFilm-00", 107806); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "EmulsionPlates", "EmulsionPlates-00", 107807); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "EmulsionSwitches", "EmulsionSwitches-00", 100036); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Scintillator", "Scintillator-TB00", 107814); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Tracker", "Tracker-TB00", 107815); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SCT", "SCT-TB00", 107816); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctTopLevel", "SCTTopLevel-TB00", 107818); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctBrlModule", "SCTBrlModule-00", 107003); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctBrlSensor", "SCTBrlSensor-00", 106730); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctFaserGeneral", "SCTFaserGeneral-01", 106791); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctSwitches", "SCTSwitches-00", 107782); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SCTMaterials", "SCTMaterials-00", 107777); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SCTMatComponents", "SCTMatComponents-00", 107778); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctConditions", "SctConditions-00", 107779); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctFrame", "SctFrame-00", 100053); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctFrameGeneral", "SctFrameGeneral-00", 100054); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "SctFrameShape", "SctFrameShape-00", 100055); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Dipole", "Dipole-TB00", 107817); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "DipoleTopLevel", "DipoleTopLevel-TB00", 107819); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "DipoleGeneral", "DipoleGeneral-00", 100004); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "DipoleSwitches", "DipoleSwitches-00", 100028); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Calorimeter", "Calorimeter-TB00", 107820); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Ecal", "Ecal-TB00", 107821); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "EcalTopLevel", "EcalTopLevel-TB00", 107822); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "EcalRowGeneral", "EcalRowGeneral-TB00", 107830); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "EcalSwitches", "EcalSwitches-00", 100057); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "VetoTopLevel", "VetoTopLevel-TB00", 107823); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "VetoStationGeneral", "VetoStationGeneral-TB00", 107833); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "VetoPlateGeneral", "VetoPlateGeneral-01", 100050); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "VetoRadiatorGeneral","VetoRadiatorGeneral-00", 107810); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "TriggerTopLevel", "TriggerTopLevel-TB00", 107824); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "TriggerStationGeneral", "TriggerStationGeneral-01", 100051); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "TriggerPlateGeneral", "TriggerPlateGeneral-00", 110025); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "PreshowerTopLevel", "PreshowerTopLevel-TB00", 107825); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "PreshowerStationGeneral", "PreshowerStationGeneral-01", 100052); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "PreshowerPlateGeneral", "PreshowerPlateGeneral-00", 120025); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "PreshowerRadiatorGeneral", "PreshowerRadiatorGeneral-00", 107808); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "PreshowerAbsorberGeneral", "PreshowerAbsorberGeneral-00", 107809); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "NeutrinoMaterials", "NeutrinoMaterials-00", 100032); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "NeutrinoMatComponents", "NeutrinoMatComponents-00", 100033); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "ScintMaterials", "ScintMaterials-00", 100011); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "ScintMatComponents", "ScintMatComponents-00", 100012); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "TrackerMaterials", "TrackerMaterials-00", 100021); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "TrackerMatComponents", "TrackerMatComponents-00", 100022); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "CaloMaterials", "CaloMaterials-00", 100023); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "CaloMatComponents", "CaloMatComponents-00", 100024); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "VetoSwitches", "VetoSwitches-00", 100014); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "TriggerSwitches", "TriggerSwitches-00", 110014); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "PreshowerSwitches", "PreshowerSwitches-00", 120014); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Veto", "Veto-TB00", 107826); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Trigger", "Trigger-TB00", 107827); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "Preshower", "Preshower-TB00", 107828); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "NeutrinoIdentifier", "NeutrinoIdentifier-00", 100030); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "ScintIdentifier", "ScintIdentifier-TB00", 107832); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "TrackerIdentifier", "TrackerIdentifier-TB00", 107829); +INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-TB00", "CaloIdentifier", "CaloIdentifier-TB00", 107831); -- -- -- Part 2b: Content (Leaf node) data @@ -1815,6 +2035,7 @@ INSERT INTO "EMULSIONTOPLEVEL_DATA" VALUES (0, 0.0, 0.0, -2475.72, 0.0, 0.0, 0.0 INSERT INTO "EMULSIONTOPLEVEL_DATA" VALUES (1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 321, "StationA"); INSERT INTO "EMULSIONTOPLEVEL_DATA2TAG" VALUES (100035, 0); INSERT INTO "EMULSIONTOPLEVEL_DATA2TAG" VALUES (100035, 1); +INSERT INTO "EMULSIONTOPLEVEL_DATA2TAG" VALUES (107813, 0); -- -- INSERT INTO "EMULSIONGENERAL_DATA" VALUES (0, 35, 22, -524.275, 525.275); @@ -1868,6 +2089,9 @@ INSERT INTO "VETOTOPLEVEL_DATA" VALUES (5, 0.0, 0.0, 100.0, 0.0, 0.0, 0.0, 321, INSERT INTO "VETOTOPLEVEL_DATA" VALUES (6, 0.0, 0.0, -1694.65, 0.0, 0.0, 0.0, 321, "Veto"); INSERT INTO "VETOTOPLEVEL_DATA" VALUES (7, 0.0, 0.0, -85.0, 0.0, 0.0, 2.6, 321, "StationA"); INSERT INTO "VETOTOPLEVEL_DATA" VALUES (8, 0.0, 0.0, 85.0, 0.0, 0.0,-2.6, 321, "StationB"); +INSERT INTO "VETOTOPLEVEL_DATA" VALUES (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 321, "Radiator"); +INSERT INTO "VETOTOPLEVEL_DATA" VALUES (10, 0.0, 0.0, 21.0, 0.0, 0.0, 0.0, 321, "Veto"); +INSERT INTO "VETOTOPLEVEL_DATA" VALUES (11, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 321, "StationA"); INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (100009, 0); INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (100009, 1); INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (100009, 2); @@ -1877,29 +2101,39 @@ INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (100046, 5); INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (107798, 6); INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (107798, 7); INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (107798, 8); +INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (107798, 9); +INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (107823, 10); +INSERT INTO "VETOTOPLEVEL_DATA2TAG" VALUES (107823, 11); -- -- INSERT INTO "VETOSTATIONGENERAL_DATA" VALUES (0, 2, 100.0); INSERT INTO "VETOSTATIONGENERAL_DATA" VALUES (1, 2, 20.0); +INSERT INTO "VETOSTATIONGENERAL_DATA" VALUES (2, 2, 21.0); INSERT INTO "VETOSTATIONGENERAL_DATA2TAG" VALUES (100010, 0); INSERT INTO "VETOSTATIONGENERAL_DATA2TAG" VALUES (100049, 1); +INSERT INTO "VETOSTATIONGENERAL_DATA2TAG" VALUES (107833, 2); -- INSERT INTO "VETOPLATEGENERAL_DATA" VALUES (0, 1, 300.0, 300.0, 20.0, "scint::Scintillator"); INSERT INTO "VETOPLATEGENERAL_DATA" VALUES (1, 1, 300.0, 300.0, 19.5, "scint::Scintillator"); INSERT INTO "VETOPLATEGENERAL_DATA2TAG" VALUES (100025, 0); INSERT INTO "VETOPLATEGENERAL_DATA2TAG" VALUES (100050, 1); -- +INSERT INTO "VETORADIATORGENERAL_DATA" VALUES (0, 400.0, 350.0, 100.0, "std::Lead"); +INSERT INTO "VETORADIATORGENERAL_DATA2TAG" VALUES (107810, 0); +-- -- INSERT INTO "TRIGGERTOPLEVEL_DATA" VALUES (0, 0.0, 0.0, 187.0, 0.0, 0.0, 0.0, 321, "Trigger"); INSERT INTO "TRIGGERTOPLEVEL_DATA" VALUES (1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 321, "StationA"); INSERT INTO "TRIGGERTOPLEVEL_DATA" VALUES (2, 0.0, -5.0, -28.9, 0.0, 0.0, 0.0, 321, "Trigger"); INSERT INTO "TRIGGERTOPLEVEL_DATA" VALUES (3, 0.0, -5.0, -29.2, 0.0, 0.0, 0.0, 321, "Trigger"); +INSERT INTO "TRIGGERTOPLEVEL_DATA" VALUES (4, 0.0, -5.0, -29.2, 0.0, 0.0, 0.0, 321, "Trigger"); INSERT INTO "TRIGGERTOPLEVEL_DATA2TAG" VALUES (110009, 0); INSERT INTO "TRIGGERTOPLEVEL_DATA2TAG" VALUES (110009, 1); INSERT INTO "TRIGGERTOPLEVEL_DATA2TAG" VALUES (100047, 1); INSERT INTO "TRIGGERTOPLEVEL_DATA2TAG" VALUES (100047, 2); INSERT INTO "TRIGGERTOPLEVEL_DATA2TAG" VALUES (107799, 3); INSERT INTO "TRIGGERTOPLEVEL_DATA2TAG" VALUES (107799, 1); +INSERT INTO "TRIGGERTOPLEVEL_DATA2TAG" VALUES (107824, 4); -- -- INSERT INTO "TRIGGERSTATIONGENERAL_DATA" VALUES (0, 2, 195.0, 11.0); @@ -1914,48 +2148,71 @@ INSERT INTO "TRIGGERPLATEGENERAL_DATA2TAG" VALUES (110025, 0); INSERT INTO "PRESHOWERTOPLEVEL_DATA" VALUES (0, 0.0, 0.0, 2626.0, 0.0, 0.0, 0.0, 321, "Preshower"); INSERT INTO "PRESHOWERTOPLEVEL_DATA" VALUES (1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 321, "StationA"); INSERT INTO "PRESHOWERTOPLEVEL_DATA" VALUES (2, 0.0, 0.0, 2662.7, 0.0, 0.0, 0.0, 321, "Preshower"); -INSERT INTO "PRESHOWERTOPLEVEL_DATA" VALUES (3, 0.0, 0.0, 2662.35, 0.0, 0.0, 0.0, 321, "Preshower"); +--INSERT INTO "PRESHOWERTOPLEVEL_DATA" VALUES (3, 0.0, 0.0, 2662.35, 0.0, 0.0, 0.0, 321, "Preshower"); +INSERT INTO "PRESHOWERTOPLEVEL_DATA" VALUES (3, 0.0, 0.0, 2618.35, 0.0, 0.0, 0.0, 321, "Preshower"); +INSERT INTO "PRESHOWERTOPLEVEL_DATA" VALUES (4, 0.0, 0.0, 522.0, 0.0, 0.0, 0.0, 321, "Preshower"); +INSERT INTO "PRESHOWERTOPLEVEL_DATA" VALUES (5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 321, "StationA"); INSERT INTO "PRESHOWERTOPLEVEL_DATA2TAG" VALUES (120009, 0); INSERT INTO "PRESHOWERTOPLEVEL_DATA2TAG" VALUES (120009, 1); INSERT INTO "PRESHOWERTOPLEVEL_DATA2TAG" VALUES (100048, 1); INSERT INTO "PRESHOWERTOPLEVEL_DATA2TAG" VALUES (100048, 2); INSERT INTO "PRESHOWERTOPLEVEL_DATA2TAG" VALUES (107800, 1); INSERT INTO "PRESHOWERTOPLEVEL_DATA2TAG" VALUES (107800, 3); +INSERT INTO "PRESHOWERTOPLEVEL_DATA2TAG" VALUES (107825, 4); +INSERT INTO "PRESHOWERTOPLEVEL_DATA2TAG" VALUES (107825, 5); -- -- INSERT INTO "PRESHOWERSTATIONGENERAL_DATA" VALUES (0, 2, 80.0); -INSERT INTO "PRESHOWERSTATIONGENERAL_DATA" VALUES (1, 2, 82.0); +INSERT INTO "PRESHOWERSTATIONGENERAL_DATA" VALUES (1, 2, 75.0); INSERT INTO "PRESHOWERSTATIONGENERAL_DATA2TAG" VALUES (120010, 0); INSERT INTO "PRESHOWERSTATIONGENERAL_DATA2TAG" VALUES (100052, 1); -- INSERT INTO "PRESHOWERPLATEGENERAL_DATA" VALUES (0, 1, 300.0, 300.0, 20.0, "scint::Scintillator"); INSERT INTO "PRESHOWERPLATEGENERAL_DATA2TAG" VALUES (120025, 0); -- +INSERT INTO "PRESHOWERRADIATORGENERAL_DATA" VALUES (0, 300.0, 300.0, 3.0, "std::Wolfram"); +INSERT INTO "PRESHOWERRADIATORGENERAL_DATA2TAG" VALUES (107808, 0); +-- +INSERT INTO "PRESHOWERABSORBERGENERAL_DATA" VALUES (0, 300.0, 300.0, 50.0, "scint::Graphite"); +INSERT INTO "PRESHOWERABSORBERGENERAL_DATA2TAG" VALUES (107809, 0); +-- -- INSERT INTO "ECALTOPLEVEL_DATA" VALUES (0, 0.0, 0.0, 3099.2, 0.0, 0.0, 0.0, 321, "Ecal"); INSERT INTO "ECALTOPLEVEL_DATA" VALUES (1, 0.0, -71.6, 0.0, 0.0, 2.8, 0.0, 321, "BottomRow"); INSERT INTO "ECALTOPLEVEL_DATA" VALUES (2, 0.0, 49.6, 0.0, 0.0, 2.8, 0.0, 321, "TopRow"); INSERT INTO "ECALTOPLEVEL_DATA" VALUES (3, 0.0, 0.0, 3098.9, 0.0, 0.0, 0.0, 321, "Ecal"); +INSERT INTO "ECALTOPLEVEL_DATA" VALUES (4, 0.0, -71.6, 0.0, 0.0, 0.0, 0.0, 321, "BottomRow"); +INSERT INTO "ECALTOPLEVEL_DATA" VALUES (5, 0.0, 49.6, 0.0, 0.0, 0.0, 0.0, 321, "TopRow"); +INSERT INTO "ECALTOPLEVEL_DATA" VALUES (6, -17.22, -22.80, 1088.66, -2.8, -2.8, 0.0, 321, "Ecal"); INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (100058, 0); INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (100058, 1); INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (100058, 2); INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (107797, 1); INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (107797, 2); INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (107797, 3); +INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (107822, 4); +INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (107822, 5); +INSERT INTO "ECALTOPLEVEL_DATA2TAG" VALUES (107822, 6); -- -- INSERT INTO "ECALROWGENERAL_DATA" VALUES (0, 2, 0.0, 2.8); +INSERT INTO "ECALROWGENERAL_DATA" VALUES (1, 3, 0.0, 0.0); INSERT INTO "ECALROWGENERAL_DATA2TAG" VALUES (100059, 0); +INSERT INTO "ECALROWGENERAL_DATA2TAG" VALUES (107830, 1); -- -- INSERT INTO "SCINTMATERIALS_DATA" VALUES (0, "Scintillator", 1.032); +INSERT INTO "SCINTMATERIALS_DATA" VALUES (1, "Graphite", 1.8); INSERT INTO "SCINTMATERIALS_DATA2TAG" VALUES (100011, 0); +INSERT INTO "SCINTMATERIALS_DATA2TAG" VALUES (100011, 1); -- -- INSERT INTO "SCINTMATCOMPONENTS_DATA" VALUES (0, 0, "Carbon", 0.475); INSERT INTO "SCINTMATCOMPONENTS_DATA" VALUES (1, 0, "Hydrogen", 0.525); +INSERT INTO "SCINTMATCOMPONENTS_DATA" VALUES (2, 1, "Carbon", 1.0); INSERT INTO "SCINTMATCOMPONENTS_DATA2TAG" VALUES (100012, 0); INSERT INTO "SCINTMATCOMPONENTS_DATA2TAG" VALUES (100012, 1); +INSERT INTO "SCINTMATCOMPONENTS_DATA2TAG" VALUES (100012, 2); -- -- INSERT INTO "FASERCOMMON_DATA" VALUES (0, "RUN3", "TRACKER", "NONE"); @@ -1987,19 +2244,25 @@ INSERT INTO "NEUTRINOIDENTIFIER_DATA2TAG" VALUES (100030, 0); -- -- INSERT INTO "SCINTIDENTIFIER_DATA" VALUES (0, "Scintillator", "ScintIdDictFiles/IdDictScintillator.xml", "Baseline layout"); +INSERT INTO "SCINTIDENTIFIER_DATA" VALUES (1, "Scintillator", "ScintIdDictFiles/IdDictScintillator_TB00.xml", "2021 Test-beam layout"); INSERT INTO "SCINTIDENTIFIER_DATA2TAG" VALUES (100016, 0); +INSERT INTO "SCINTIDENTIFIER_DATA2TAG" VALUES (107832, 1); -- -- INSERT INTO "TRACKERIDENTIFIER_DATA" VALUES (0, "Tracker", "TrackerIdDictFiles/IdDictTracker.xml", "Baseline layout"); INSERT INTO "TRACKERIDENTIFIER_DATA" VALUES (1, "Tracker", "TrackerIdDictFiles/IdDictCosmic.xml", "Cosmic ray test stand"); INSERT INTO "TRACKERIDENTIFIER_DATA" VALUES (2, "Tracker", "TrackerIdDictFiles/IdDictInterface.xml", "Tracker with interface detector"); +INSERT INTO "TRACKERIDENTIFIER_DATA" VALUES (3, "Tracker", "TrackerIdDictFiles/IdDictInterface_TB00.xml", "2021 Test-beam layout"); INSERT INTO "TRACKERIDENTIFIER_DATA2TAG" VALUES (100017, 0); INSERT INTO "TRACKERIDENTIFIER_DATA2TAG" VALUES (107785, 1); INSERT INTO "TRACKERIDENTIFIER_DATA2TAG" VALUES (107787, 2); +INSERT INTO "TRACKERIDENTIFIER_DATA2TAG" VALUES (107829, 3); -- -- INSERT INTO "CALOIDENTIFIER_DATA" VALUES (0, "Calorimeter", "CaloIdDictFiles/IdDictCalorimeter.xml", "Baseline layout"); +INSERT INTO "CALOIDENTIFIER_DATA" VALUES (1, "Calorimeter", "CaloIdDictFiles/IdDictCalorimeter_TB00.xml", "2021 Test-beam layout"); INSERT INTO "CALOIDENTIFIER_DATA2TAG" VALUES (100018, 0); +INSERT INTO "CALOIDENTIFIER_DATA2TAG" VALUES (107831, 1); -- -- DROP TABLE IF EXISTS "SCTBRLSENSOR_DATA"; @@ -2034,6 +2297,9 @@ INSERT INTO "SCTTOPLEVEL_DATA" VALUES(6,0.0,0.0, 1190.0,0.0,0.0,0.0,312,'Station INSERT INTO "SCTTOPLEVEL_DATA" VALUES(7,0.0,0.0, 1237.7075,0.0,0.0,0.0,312,'SCT'); INSERT INTO "SCTTOPLEVEL_DATA" VALUES(8,0.0,0.0, 1237.4 ,0.0,0.0,0.0,312,'SCT'); INSERT INTO "SCTTOPLEVEL_DATA" VALUES(9,0.0,0.0,-3097.55 ,0.0,0.0,0.0,312,'Interface'); +INSERT INTO "SCTTOPLEVEL_DATA" VALUES(10,0.0,0.0, 276.75 ,0.0,0.0,0.0,312,'SCT'); +INSERT INTO "SCTTOPLEVEL_DATA" VALUES(11,0.0,0.0, 0.0 ,0.0,0.0,0.0,312,'Interface'); + DROP TABLE IF EXISTS "SCTTOPLEVEL_DATA2TAG"; @@ -2053,6 +2319,8 @@ INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(107793,5); INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(107793,6); INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(107793,8); INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(107793,9); +INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(107818,10); +INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(107818,11); -- -- DROP TABLE IF EXISTS "SCTFASERGENERAL_DATA"; @@ -2174,7 +2442,7 @@ INSERT INTO "DIPOLETOPLEVEL_DATA" VALUES(6,0.0,0.0,1837.726,0.0,0.0,0.0,312,'Dow INSERT INTO "DIPOLETOPLEVEL_DATA" VALUES(7,0.0,0.0,-812.60,0.0,0.0,0.0,312,'UpstreamDipole'); INSERT INTO "DIPOLETOPLEVEL_DATA" VALUES(8,0.0,0.0, 637.40,0.0,0.0,0.0,312,'CentralDipole'); INSERT INTO "DIPOLETOPLEVEL_DATA" VALUES(9,0.0,0.0,1837.40,0.0,0.0,0.0,312,'DownstreamDipole'); - +INSERT INTO "DIPOLETOPLEVEL_DATA" VALUES(10,0.0,0.0, 0.0,0.0,0.0,0.0,312,'Dipole'); DROP TABLE IF EXISTS "DIPOLETOPLEVEL_DATA2TAG"; CREATE TABLE "DIPOLETOPLEVEL_DATA2TAG" ( "DIPOLETOPLEVEL_TAG_ID" SLONGLONG ,"DIPOLETOPLEVEL_DATA_ID" SLONGLONG ); @@ -2190,6 +2458,7 @@ INSERT INTO "DIPOLETOPLEVEL_DATA2TAG" VALUES(107794,3); INSERT INTO "DIPOLETOPLEVEL_DATA2TAG" VALUES(107794,7); INSERT INTO "DIPOLETOPLEVEL_DATA2TAG" VALUES(107794,8); INSERT INTO "DIPOLETOPLEVEL_DATA2TAG" VALUES(107794,9); +INSERT INTO "DIPOLETOPLEVEL_DATA2TAG" VALUES(107819,10); -- -- DROP TABLE IF EXISTS "DIPOLEGENERAL_DATA"; diff --git a/Event/FaserByteStreamCnvSvc/share/jobOptions_faserBSToRDO.py b/Event/FaserByteStreamCnvSvc/share/jobOptions_faserBSToRDO.py index 5ce99e4b6f98016bc67dd908ea7ff3a02d503c4f..3a424d4a2f0ae52afa3a19880c5b2996b12c2a3a 100644 --- a/Event/FaserByteStreamCnvSvc/share/jobOptions_faserBSToRDO.py +++ b/Event/FaserByteStreamCnvSvc/share/jobOptions_faserBSToRDO.py @@ -51,8 +51,8 @@ tda = FaserTriggerDataAccess("FaserTriggerDataAccess") tda.OutputLevel = DEBUG job += tda -from ScintByteStream.ScintByteStreamConf import ScintWaveformAccess -wfm = ScintWaveformAccess("ScintWaveformAccess") +from WaveByteStream.WaveByteStreamConf import RawWaveformAccess +wfm = RawWaveformAccess("RawWaveformAccess") wfm.OutputLevel = DEBUG job += wfm diff --git a/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx b/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx index 341fa8d72af65d084dfeb1e41d73828599e0c1f7..531e74c5a0dac4b55899f05d953f4021ddbd3694 100644 --- a/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx +++ b/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx @@ -155,8 +155,8 @@ StatusCode EventInfoByteStreamAuxCnv::createObj(IOpaqueAddress* pAddr, DataObjec // Run Number int runNumber = re->run_number(); - // Event Number - uint64_t eventNumber = re->event_id(); + // Event Number (ordinal number of event in file) + uint64_t eventNumber = re->event_counter(); // Time Stamp uint32_t bc_time_sec = re->timestamp()/1E6; // timestamp is in usec diff --git a/Event/FaserByteStreamCnvSvc/src/FaserByteStreamCnvSvc.cxx b/Event/FaserByteStreamCnvSvc/src/FaserByteStreamCnvSvc.cxx index c35ddacbbf70b2e92c5b5122ee5df4408114e545..08197aa15ffe3d7e046e564d56689c2c2516dfe1 100644 --- a/Event/FaserByteStreamCnvSvc/src/FaserByteStreamCnvSvc.cxx +++ b/Event/FaserByteStreamCnvSvc/src/FaserByteStreamCnvSvc.cxx @@ -14,7 +14,7 @@ //#include "eformat/SourceIdentifier.h" //#include "eformat/StreamTag.h" -#include "AthenaKernel/IClassIDSvc.h" +#include "GaudiKernel/IClassIDSvc.h" #include "AthenaPoolUtilities/CondAttrListCollection.h" diff --git a/Event/FaserByteStreamCnvSvc/src/FaserByteStreamInputSvc.cxx b/Event/FaserByteStreamCnvSvc/src/FaserByteStreamInputSvc.cxx index 8695ec12b9233fff232a3759e78891d8f8caeb90..d24a2f65b5accb31762148887a8e0445041ecaea 100644 --- a/Event/FaserByteStreamCnvSvc/src/FaserByteStreamInputSvc.cxx +++ b/Event/FaserByteStreamCnvSvc/src/FaserByteStreamInputSvc.cxx @@ -9,7 +9,7 @@ //#include "ByteStreamData/ByteStreamMetadataContainer.h" #include "FaserByteStreamCnvSvcBase/FaserByteStreamAddress.h" #include "FaserEventStorage/pickFaserDataReader.h" - +#include "FaserEventStorage/EventStorageIssues.h" #include "Gaudi/Property.h" #include "PersistentDataModel/DataHeader.h" @@ -67,7 +67,7 @@ FaserByteStreamInputSvc::~FaserByteStreamInputSvc() { } //------------------------------------------------------------------------------ StatusCode FaserByteStreamInputSvc::initialize() { - ATH_MSG_INFO("Initializing " << name() << " - package version " << PACKAGE_VERSION); + ATH_MSG_INFO("Initializing " << name() ); ATH_CHECK(m_storeGate.retrieve()); ATH_CHECK(m_robProvider.retrieve()); @@ -116,10 +116,22 @@ const EventFull* FaserByteStreamInputSvc::nextEvent() { if (m_evtInFile+1 > m_evtOffsets.size()) { // get current event position (cast to long long until native tdaq implementation) + // This is the usual situation, reading past previous point in file ATH_MSG_DEBUG("nextEvent _above_ high water mark"); m_evtFileOffset = (long long)m_reader->getPosition(); m_evtOffsets.push_back(m_evtFileOffset); - m_reader->getData(theEvent); + + // Catch truncated events + try { + m_reader->getData(theEvent); + } catch (const FaserEventStorage::ES_OutOfFileBoundary& e) { + // Attempt to read beyond end of file, likely truncated event + ATH_MSG_WARNING("DataReader reports FaserEventStorage::ES_OutOfFileBoundary, stop reading file!"); + return NULL; + } catch (...) { + // rethrow any other exceptions + throw; + } } else { diff --git a/Event/FaserByteStreamCnvSvc/src/FaserEventSelectorByteStream.cxx b/Event/FaserByteStreamCnvSvc/src/FaserEventSelectorByteStream.cxx index ef11d4c96265b1a8c8bd74e373dc59a8be8299cd..5a29672fe71cc9eff05810a13303bc2f0077e0c0 100644 --- a/Event/FaserByteStreamCnvSvc/src/FaserEventSelectorByteStream.cxx +++ b/Event/FaserByteStreamCnvSvc/src/FaserEventSelectorByteStream.cxx @@ -95,7 +95,7 @@ FaserEventSelectorByteStream::~FaserEventSelectorByteStream() { } //________________________________________________________________________________ StatusCode FaserEventSelectorByteStream::initialize() { - ATH_MSG_INFO("Initializing " << name() << " - package version " << PACKAGE_VERSION); + ATH_MSG_INFO("Initializing " << name()); if (!::AthService::initialize().isSuccess()) { ATH_MSG_FATAL("Cannot initialize AthService base class."); return(StatusCode::FAILURE); @@ -806,7 +806,8 @@ StatusCode FaserEventSelectorByteStream::makeServer(int /*num*/) { if (m_eventStreamingTool.empty()) { return(StatusCode::FAILURE); } - return(m_eventStreamingTool->makeServer(1)); + std::string dummyString; + return(m_eventStreamingTool->makeServer(1, dummyString)); } //________________________________________________________________________________ @@ -814,7 +815,8 @@ StatusCode FaserEventSelectorByteStream::makeClient(int /*num*/) { if (m_eventStreamingTool.empty()) { return(StatusCode::FAILURE); } - return(m_eventStreamingTool->makeClient(0)); + std::string dummyString; + return(m_eventStreamingTool->makeClient(0, dummyString)); } //________________________________________________________________________________ diff --git a/Event/FaserByteStreamCnvSvcBase/python/FaserByteStreamCnvSvcBaseConfig.py b/Event/FaserByteStreamCnvSvcBase/python/FaserByteStreamCnvSvcBaseConfig.py index af4766a10cae35fd51cebc003e1f842dacc98974..3a50a75d55c0c2a1e06d6edfa6d900722d5a83c1 100644 --- a/Event/FaserByteStreamCnvSvcBase/python/FaserByteStreamCnvSvcBaseConfig.py +++ b/Event/FaserByteStreamCnvSvcBase/python/FaserByteStreamCnvSvcBaseConfig.py @@ -13,12 +13,12 @@ def FaserByteStreamCnvSvcBaseCfg(flags, **kwargs): "xAOD::FaserTriggerDataAux/FaserTriggerDataAux." ] adxProvider.TypeNames += [ - "ScintWaveformContainer/CaloWaveforms", - "ScintWaveformContainer/VetoWaveforms", - "ScintWaveformContainer/TriggerWaveforms", - "ScintWaveformContainer/PreshowerWaveforms", - "ScintWaveformContainer/ClockWaveforms", - "ScintWaveformContainer/TestWaveforms" + "RawWaveformContainer/CaloWaveforms", + "RawWaveformContainer/VetoWaveforms", + "RawWaveformContainer/TriggerWaveforms", + "RawWaveformContainer/PreshowerWaveforms", + "RawWaveformContainer/ClockWaveforms", + "RawWaveformContainer/TestWaveforms" ] adxProvider.TypeNames += [ "FaserSCT_RDO_Container/SCT_RDOs", diff --git a/Event/FaserByteStreamCnvSvcBase/share/BSAddProvSvc_jobOptions.py b/Event/FaserByteStreamCnvSvcBase/share/BSAddProvSvc_jobOptions.py index 3adf8709d527b6d90c4a1ca24cc2940d6aaef8cc..84aef96722842b0e478b8de7307e58cf69e48e4e 100644 --- a/Event/FaserByteStreamCnvSvcBase/share/BSAddProvSvc_jobOptions.py +++ b/Event/FaserByteStreamCnvSvcBase/share/BSAddProvSvc_jobOptions.py @@ -15,11 +15,11 @@ svcMgr.FaserByteStreamAddressProviderSvc.TypeNames += [ # in the ScintByteStream/ScintByteStreamCnv service # TestWaveforms is configurable for testing purposes svcMgr.FaserByteStreamAddressProviderSvc.TypeNames += [ - "ScintWaveformContainer/CaloWaveforms", - "ScintWaveformContainer/VetoWaveforms", - "ScintWaveformContainer/TriggerWaveforms", - "ScintWaveformContainer/PreshowerWaveforms", - "ScintWaveformContainer/TestWaveforms" + "RawWaveformContainer/CaloWaveforms", + "RawWaveformContainer/VetoWaveforms", + "RawWaveformContainer/TriggerWaveforms", + "RawWaveformContainer/PreshowerWaveforms", + "RawWaveformContainer/TestWaveforms" ] # Add tracker RDO containers diff --git a/Event/FaserByteStreamCnvSvcBase/src/FaserByteStreamAddressProviderSvc.cxx b/Event/FaserByteStreamCnvSvcBase/src/FaserByteStreamAddressProviderSvc.cxx index e5b16c854481b52a346ef7bbf9131e4d0d31e813..252075361d8e75084d78dc4359ec8b29deb7ffd5 100644 --- a/Event/FaserByteStreamCnvSvcBase/src/FaserByteStreamAddressProviderSvc.cxx +++ b/Event/FaserByteStreamCnvSvcBase/src/FaserByteStreamAddressProviderSvc.cxx @@ -11,7 +11,7 @@ #include "SGTools/TransientAddress.h" #include "GaudiKernel/ListItem.h" -#include "AthenaKernel/IClassIDSvc.h" +#include "GaudiKernel/IClassIDSvc.h" //#include "eformat/SourceIdentifier.h" @@ -27,7 +27,7 @@ FaserByteStreamAddressProviderSvc::~FaserByteStreamAddressProviderSvc() { } //________________________________________________________________________________ StatusCode FaserByteStreamAddressProviderSvc::initialize() { - ATH_MSG_INFO("Initializing " << name() << " - package version " << PACKAGE_VERSION); + ATH_MSG_INFO("Initializing " << name()); if (!::AthService::initialize().isSuccess()) { ATH_MSG_FATAL("Cannot initialize AthService base class."); return(StatusCode::FAILURE); diff --git a/Event/FaserByteStreamCnvSvcBase/src/FaserByteStreamCnvSvcBase.cxx b/Event/FaserByteStreamCnvSvcBase/src/FaserByteStreamCnvSvcBase.cxx index a250c8597214513e610c2598efb41448489d21a2..b41792c41b68e6814edcba83e229d43012ddedcc 100644 --- a/Event/FaserByteStreamCnvSvcBase/src/FaserByteStreamCnvSvcBase.cxx +++ b/Event/FaserByteStreamCnvSvcBase/src/FaserByteStreamCnvSvcBase.cxx @@ -11,7 +11,7 @@ #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/IIncidentSvc.h" -#include "AthenaKernel/IClassIDSvc.h" +#include "GaudiKernel/IClassIDSvc.h" #include "StoreGate/StoreGateSvc.h" //______________________________________________________________________________ diff --git a/Event/FaserByteStreamCnvSvcBase/src/FaserROBDataProviderSvc.cxx b/Event/FaserByteStreamCnvSvcBase/src/FaserROBDataProviderSvc.cxx index a897e51681e2278a7b0a02cb8f7569c2042c121e..4863796dab9affef15b662cbeb0091c62b8115c1 100644 --- a/Event/FaserByteStreamCnvSvcBase/src/FaserROBDataProviderSvc.cxx +++ b/Event/FaserByteStreamCnvSvcBase/src/FaserROBDataProviderSvc.cxx @@ -98,7 +98,7 @@ FaserROBDataProviderSvc::~FaserROBDataProviderSvc() { // Initialization StatusCode FaserROBDataProviderSvc::initialize() { - ATH_MSG_INFO("Initializing " << name() << " - package version " << PACKAGE_VERSION); + ATH_MSG_INFO("Initializing " << name()); if (!::AthService::initialize().isSuccess()) { ATH_MSG_FATAL("Cannot initialize AthService base class."); return(StatusCode::FAILURE); diff --git a/Generators/DIFGenerator/python/DIFSampler.py b/Generators/DIFGenerator/python/DIFSampler.py index 18f9156b4c385cc11614ac0937897ac813b34583..24659c0178d8cbefc9843a24a1a10ef38bbcde21 100644 --- a/Generators/DIFGenerator/python/DIFSampler.py +++ b/Generators/DIFGenerator/python/DIFSampler.py @@ -344,7 +344,7 @@ if __name__ == "__main__": s = daughters[0].mom+daughters[1].mom try: - assert DIFS.mother_sampler.pid() == None + assert DIFS.mother_sampler.pid() is None assert mother_mom.E()**2 - mother_mom.P()**2 - epsilon <= s.E()**2 - s.P()**2 <= mother_mom.E()**2 - mother_mom.P()**2 + epsilon assert mother_mom.Px() - epsilon <= s.Px() <= mother_mom.Px() + epsilon assert mother_mom.Py() - epsilon <= s.Py() <= mother_mom.Py() + epsilon diff --git a/Generators/FaserCosmicGenerator/README.md b/Generators/FaserCosmicGenerator/README.md index 7a2ea2f057ee6eeb89851b4a0ed0d8de168ede4b..512c32c60d6d875dba083a0fc2e5dc34e7dc8499 100644 --- a/Generators/FaserCosmicGenerator/README.md +++ b/Generators/FaserCosmicGenerator/README.md @@ -2,11 +2,11 @@ ## Setup -In Athena 22.0.31, the scipy module is missing from the LCG environment for some reason. +In Athena 22.0.40, the scipy module is missing from the LCG environment for some reason. To use the generator, the following command is required after the usual steps to setup the release: -`lsetup "lcgenv -p LCG_98python3_ATLAS_8 x86_64-centos7-gcc8-opt scipy"` +`export PYTHONPATH=/cvmfs/sft.cern.ch/lcg/releases/LCG_100_ATLAS_5/scipy/1.5.1/x86_64-centos7-gcc8-opt/lib/python3.8/site-packages:${PYTHONPATH}` ## Usage diff --git a/Generators/FaserParticleGun/CMakeLists.txt b/Generators/FaserParticleGun/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..dfc2bbd92f4488e6ccf0a4fffab49d98460234e9 --- /dev/null +++ b/Generators/FaserParticleGun/CMakeLists.txt @@ -0,0 +1,10 @@ +################################################################################ +# Package: FaserParticleGun +################################################################################ + +# Declare the package name: +atlas_subdir( FaserParticleGun ) + +# Install files from the package: +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) + diff --git a/Generators/FaserParticleGun/python/FaserParticleGunConfig.py b/Generators/FaserParticleGun/python/FaserParticleGunConfig.py new file mode 100644 index 0000000000000000000000000000000000000000..f5ba68bcba67791b3d7fa6792518ba74b90d1bb6 --- /dev/null +++ b/Generators/FaserParticleGun/python/FaserParticleGunConfig.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python + +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# import sys +from AthenaConfiguration.MainServicesConfig import AthSequencer +import ParticleGun as PG + +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator +from AthenaConfiguration.ComponentFactory import CompFactory +# from AthenaCommon.Constants import VERBOSE, INFO +from AthenaCommon.SystemOfUnits import TeV +from AthenaCommon.PhysicalConstants import pi + + +def FaserParticleGunCommonCfg(ConfigFlags, **kwargs) : + cfg = ComponentAccumulator(AthSequencer("AthBeginSeq", Sequential = True)) + + + # have to do this in a clunky way, since ParticleGun does not recognize all keywords we might get passed + pg = PG.ParticleGun( name = kwargs.setdefault("name", "ParticleGun"), + randomSeed = kwargs.setdefault("randomSeed", 12345), + randomSvcName = kwargs.setdefault("randomSvcName", "AtRndmGenSvc"), + randomStream = kwargs.setdefault("randomStream", "ParticleGun") ) + + pg.McEventKey = kwargs.setdefault("McEventKey", "BeamTruthEvent") + cfg.addEventAlgo(pg, sequenceName = "AthBeginSeq", primary = True) # to run *before* G4 + + return cfg + + +def FaserParticleGunSingleParticleCfg(ConfigFlags, **kwargs) : + cfg = FaserParticleGunCommonCfg(ConfigFlags, **kwargs) + + pg = cfg.getPrimary() + + pg.sampler.pid = kwargs.setdefault("pid", -13) + pg.sampler.mom = PG.EThetaMPhiSampler(energy = kwargs.setdefault("energy", 1*TeV), + theta = kwargs.setdefault("theta", [0, pi/20]), + phi = kwargs.setdefault("phi", [0, 2*pi]), + mass = kwargs.setdefault("mass", 0.0) ) + pg.sampler.pos = PG.PosSampler(x = kwargs.setdefault("x", [-5, 5]), + y = kwargs.setdefault("y", [-5, 5]), + z = kwargs.setdefault("z", -3750.0), + t = kwargs.setdefault("t", 0.0) ) + + return cfg + +def FaserParticleGunSingleEcalParticleCfg(ConfigFlags, **kwargs) : + cfg = FaserParticleGunCommonCfg(ConfigFlags, **kwargs) + + pg = cfg.getPrimary() + + pg.sampler.pid = kwargs.setdefault("pid", 11) + pg.sampler.mom = PG.EThetaMPhiSampler(energy = kwargs.setdefault("energy", 1*TeV), + theta = kwargs.setdefault("theta", [0, pi/200]), + phi = kwargs.setdefault("phi", [0, 2*pi]), + mass = kwargs.setdefault("mass", 0.0) ) + pg.sampler.pos = PG.PosSampler(x = kwargs.setdefault("x", [-5, 5]), + y = kwargs.setdefault("y", [-5, 5]), + z = kwargs.setdefault("z", 2730.0), + t = kwargs.setdefault("t", 0.0) ) + + return cfg + +def FaserParticleGunCosmicsCfg(ConfigFlags, **kwargs) : + # Supported keyword arguments: + # + # chargeRatio (default: 1.27) + # maxMuonEnergyGeV (default: 10000) + # thetaMinDegree (default: 0) + # thetaMaxDegree (default: 80) + # targetDepthMeters (default: 85) + # targetDxMm (default: 600) - width of target slab + # targetDyMm (default: 600) - height of target slab + # targetDzMm (default: 7000) - length of target slab + # x0Mm (default: 0) - X center of target slab in FASER coordinate system + # y0Mm (default: 0) - Y center of target slab in FASER coordinate system + # z0Mm (default: 150) - Z center of target slab in FASER coordinate system + # + + cfg = FaserParticleGunCommonCfg(ConfigFlags, **kwargs) + + pg = cfg.getPrimary() + + from FaserCosmicGenerator import CosmicSampler + pg.sampler = CosmicSampler(**kwargs) + + return cfg + +def FaserParticleGunDecayInFlightCfg(ConfigFlags, **kwargs) : + # Supported keyword arguments: + # + # daughter1_pid (default: 11) + # daughter2_pid (default: -11) + # mother_pid (default: none) + # mother_mom (default: PG.EThetaMPhiSampler(sqrt((1*TeV)**2 + (10*MeV)**2),0,10*MeV,0)) + # mother_pos (default: CylinderSampler([0, 100**2],[0, 2*pi],[-1500, 0],0)) + # + # Note that ALL of these can be samplers themselves - either the simple, "literal" variety or a sampler object configured by the caller + # + + cfg = FaserParticleGunCommonCfg(ConfigFlags, **kwargs) + + pg = cfg.getPrimary() + + from DIFGenerator import DIFSampler + pg.sampler = DIFSampler(**kwargs) + + return cfg + +def FaserParticleGunCfg(ConfigFlags) : + generator = ConfigFlags.Sim.Gun.setdefault("Generator", "SingleParticle") + kwargs = ConfigFlags.Sim.Gun + if generator == "SingleEcalParticle" : + return FaserParticleGunSingleEcalParticleCfg(ConfigFlags, **kwargs) + elif generator == "Cosmics" : + return FaserParticleGunCosmicsCfg(ConfigFlags, **kwargs) + elif generator == "DecayInFlight" : + return FaserParticleGunDecayInFlightCfg(ConfigFlags, **kwargs) + else : + return FaserParticleGunSingleParticleCfg(ConfigFlags, **kwargs ) diff --git a/Scintillator/ScintEventCnv/ScintByteStream/python/ScintByteStreamConfig.py b/Generators/FaserParticleGun/python/__init__.py similarity index 100% rename from Scintillator/ScintEventCnv/ScintByteStream/python/ScintByteStreamConfig.py rename to Generators/FaserParticleGun/python/__init__.py diff --git a/MagneticField/MagFieldElements/MagFieldElements/FaserFieldCache.h b/MagneticField/MagFieldElements/MagFieldElements/FaserFieldCache.h index 6011b4658c310962a68f6dd63d65caa81435617e..3e1c8df5c9e04f9ae4b6c0b3759780529dfe639f 100644 --- a/MagneticField/MagFieldElements/MagFieldElements/FaserFieldCache.h +++ b/MagneticField/MagFieldElements/MagFieldElements/FaserFieldCache.h @@ -37,11 +37,12 @@ namespace MagField { // : public ::AthMessaging { public: - FaserFieldCache(); + FaserFieldCache() = default; // ** constructor to setup with field scale and magnetic field service for first access to field */ FaserFieldCache(double fieldScale, const FaserFieldMap* fieldMap); - FaserFieldCache& operator= (FaserFieldCache&& other) = default; + FaserFieldCache& operator= (FaserFieldCache&& other) = default; + FaserFieldCache(FaserFieldCache&& other) = default; ~FaserFieldCache() = default; /** get B field value at given position */ @@ -58,7 +59,6 @@ namespace MagField { FaserFieldCache(const FaserFieldCache& other) = delete; FaserFieldCache& operator= (const FaserFieldCache& other) = delete; - FaserFieldCache(FaserFieldCache&& other) = delete; inline bool fillFieldCache(double x, double y, double z); // inline bool fillFieldCacheZR(double z, double r); diff --git a/MagneticField/MagFieldElements/src/FaserFieldCache.cxx b/MagneticField/MagFieldElements/src/FaserFieldCache.cxx index 5d08317efd2b4e9847046bee2393b6e808a489e6..040dc170ba0b1ec106dc2bf2aa4449b8159ba01d 100644 --- a/MagneticField/MagFieldElements/src/FaserFieldCache.cxx +++ b/MagneticField/MagFieldElements/src/FaserFieldCache.cxx @@ -12,9 +12,6 @@ #include "MagFieldElements/FaserFieldCache.h" /// Constructor -MagField::FaserFieldCache::FaserFieldCache() -{} - MagField::FaserFieldCache::FaserFieldCache(double scale, const FaserFieldMap* fieldMap) : diff --git a/Monitoring/python/MonitorValueBase.py b/Monitoring/python/MonitorValueBase.py index 82220c35ca5d513952bb1fd71ecac5cf4f38fd96..c4f5552d8da5e3c4ee0e24d5e03520896a2883e3 100644 --- a/Monitoring/python/MonitorValueBase.py +++ b/Monitoring/python/MonitorValueBase.py @@ -148,7 +148,7 @@ class MonitorValueBase (): # Set type if not configured actualType = self.__class__.__name__ - if self.conf.type == None: + if self.conf.type is None: self.conf.type = actualType # Check that type is correct diff --git a/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionDetectorTool.cxx b/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionDetectorTool.cxx index ed7015b1f6734f3f5be7ba60b4594ea830896ea6..11f32197b20833c8cfeb8c3fc7c566fc7fea959b 100644 --- a/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionDetectorTool.cxx +++ b/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionDetectorTool.cxx @@ -66,7 +66,7 @@ EmulsionDetectorTool::create() ATH_CHECK(m_rdbAccessSvc.retrieve()); // Print the Emulsion version tag: std::string emulsionVersionTag{m_rdbAccessSvc->getChildTag("Emulsion", versionKey.tag(), versionKey.node(), "FASERDD")}; - ATH_MSG_INFO("Emulsion Version: " << emulsionVersionTag << " Package Version: " << PACKAGE_VERSION); + ATH_MSG_INFO("Emulsion Version: " << emulsionVersionTag); // Check if version is empty. If so, then the Emulsion cannot be built. This may or may not be intentional. We // just issue an INFO message. if (emulsionVersionTag.empty()) { @@ -172,7 +172,7 @@ EmulsionDetectorTool::clear() StatusCode EmulsionDetectorTool::registerCallback() { - StatusCode sc{StatusCode::FAILURE, true}; + StatusCode sc{StatusCode::FAILURE}; if (m_alignable.value()) { ATH_MSG_WARNING("Called untested EmulsionDetectorTool::registerCallback()"); if (m_useDynamicAlignFolders.value()) { diff --git a/Neutrino/NeutrinoDetDescr/NeutrinoReadoutGeometry/NeutrinoReadoutGeometry/NeutrinoDetectorElement.h b/Neutrino/NeutrinoDetDescr/NeutrinoReadoutGeometry/NeutrinoReadoutGeometry/NeutrinoDetectorElement.h index 14641723e8d8d81878772e3d4cba75c2b5158f3d..492daccd4dfd15e7bbe15ce19a08311ab5198e17 100644 --- a/Neutrino/NeutrinoDetDescr/NeutrinoReadoutGeometry/NeutrinoReadoutGeometry/NeutrinoDetectorElement.h +++ b/Neutrino/NeutrinoDetDescr/NeutrinoReadoutGeometry/NeutrinoReadoutGeometry/NeutrinoDetectorElement.h @@ -38,6 +38,7 @@ class GeoAlignmentStore; namespace Trk{ class Surface; class SurfaceBounds; + constexpr DetectorElemType Emulsion = DetectorElemType::SolidState; } namespace NeutrinoDD { @@ -382,6 +383,10 @@ namespace NeutrinoDD { public: const NeutrinoCommonItems* getCommonItems() const; + + /** TrkDetElementBase interface detectorType + */ + virtual Trk::DetectorElemType detectorType() const override final; /////////////////////////////////////////////////////////////////// // Private methods: @@ -487,6 +492,10 @@ namespace NeutrinoDD { // Inline methods: /////////////////////////////////////////////////////////////////// + inline Trk::DetectorElemType NeutrinoDetectorElement::detectorType() const{ + return Trk::Emulsion; + } + inline HepGeom::Point3D<double> NeutrinoDetectorElement::globalPositionHit(const HepGeom::Point3D<double> &localPos) const { return Amg::EigenTransformToCLHEP(transformHit())*localPos; diff --git a/README.md b/README.md index 00cfe12e7f430130237cb366a8b761cde37e5568..310f3646591eae6b890efc2f8f461a11aa0e5c7e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ git clone --recursive https://:@gitlab.cern.ch:8443/$USERNAME/calypso.git #The next three lines are used to setup the ATLAS release environment export ATLAS_LOCAL_ROOT_BASE=/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh -asetup --input=calypso/asetup.faser Athena,22.0.31 +asetup --input=calypso/asetup.faser Athena,22.0.40 #create build directory mkdir build @@ -41,6 +41,8 @@ It can be convenient to alias the "asetup --input=calypso/asetup.faser" to somet ** `ConfigFlags.GeoModel.FaserVersion = "FASERNU-02"` and `ConfigFlags.IOVDb.GlobalTag = OFLCOND-FASER-02` enables the full FaserNu (IFT + emulsion) setup +** `ConfigFlags.GeoModel.FaserVersion = "FASER-TB00"` and `ConfigFlags.IOVDb.GlobalTag = OFLCOND-FASER-02` enables the 2021 Test-beam setup. + * The "FaserActsKalmanFilter" package is temporarily disabled. * The command `lsetup "lcgenv -p LCG_98python3_ATLAS_8 x86_64-centos7-gcc8-opt sqlite"` may be necessary to avoid errors when generating a database diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerAbsorberParameters.cxx b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerAbsorberParameters.cxx new file mode 100644 index 0000000000000000000000000000000000000000..f1d515e0ad3cabd93796f1f3f2426d34a9a0d289 --- /dev/null +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerAbsorberParameters.cxx @@ -0,0 +1,46 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include "PreshowerAbsorberParameters.h" +#include "PreshowerGeometryManager.h" + +#include "PreshowerDataBase.h" + +#include "RDBAccessSvc/IRDBRecord.h" +#include "GaudiKernel/SystemOfUnits.h" + +#include <cmath> + + +PreshowerAbsorberParameters::PreshowerAbsorberParameters(PreshowerDataBase* rdb) +{ + m_rdb = rdb; +} + +// +// Absorber General +// +double +PreshowerAbsorberParameters::absorberWidth() const +{ + return m_rdb->absorberGeneral()->getDouble("WIDTH") * Gaudi::Units::mm; +} + +double +PreshowerAbsorberParameters::absorberLength() const +{ + return m_rdb->absorberGeneral()->getDouble("LENGTH") * Gaudi::Units::mm; +} + +double +PreshowerAbsorberParameters::absorberThickness() const +{ + return m_rdb->absorberGeneral()->getDouble("THICKNESS") * Gaudi::Units::mm; +} + +std::string PreshowerAbsorberParameters::absorberMaterial() const +{ + return m_rdb->absorberGeneral()->getString("MATERIAL"); +} + diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerAbsorberParameters.h b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerAbsorberParameters.h new file mode 100644 index 0000000000000000000000000000000000000000..1d2bafd3d501d26bba2cca36a0b25e6c8b969057 --- /dev/null +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerAbsorberParameters.h @@ -0,0 +1,31 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef PreshowerGeoModel_PreshowerAbsorberParameters_H +#define PreshowerGeoModel_PreshowerAbsorberParameters_H + +#include <string> + +class PreshowerDataBase; + +class PreshowerAbsorberParameters { + +public: + + // Constructor + PreshowerAbsorberParameters(PreshowerDataBase* rdb); + + // General + double absorberThickness() const; + double absorberWidth() const; + double absorberLength() const; + std::string absorberMaterial() const; + + private: + PreshowerDataBase * m_rdb; + +}; + + +#endif // PreshowerGeoModel_PreshowerAbsorberParameters_H diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDataBase.cxx b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDataBase.cxx index e45e3051cf883674f2216a86579ebdf2856aaa41..422c40ab4347b2669792d43994e0cc7dbc2c90c6 100644 --- a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDataBase.cxx +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDataBase.cxx @@ -77,6 +77,12 @@ PreshowerDataBase::PreshowerDataBase(const PreshowerGeoModelAthenaComps * athena m_plateGeneral = rdbSvc->getRecordsetPtr("PreshowerPlateGeneral", versionTag, versionNode, "FASERDD"); msg(MSG::DEBUG) << "Table PreshowerPlateGeneral Fetched" << endmsg; + m_radiatorGeneral = rdbSvc->getRecordsetPtr("PreshowerRadiatorGeneral", versionTag, versionNode, "FASERDD"); + msg(MSG::DEBUG) << "Table PreshowerRadiatorGeneral Fetched" << endmsg; + + m_absorberGeneral = rdbSvc->getRecordsetPtr("PreshowerAbsorberGeneral", versionTag, versionNode, "FASERDD"); + msg(MSG::DEBUG) << "Table PreshowerAbsorberGeneral Fetched" << endmsg; + } const PreshowerGeoModelAthenaComps* PreshowerDataBase::athenaComps() const { return m_athenaComps; } @@ -93,6 +99,8 @@ IRDBRecordset_ptr PreshowerDataBase::topLevelTable() const {return m_topLevel;} const IRDBRecord* PreshowerDataBase::stationGeneral() const {return (*m_stationGeneral)[0];} const IRDBRecord* PreshowerDataBase::plateGeneral() const {return (*m_plateGeneral)[0];} +const IRDBRecord* PreshowerDataBase::radiatorGeneral() const {return (*m_radiatorGeneral)[0];} +const IRDBRecord* PreshowerDataBase::absorberGeneral() const {return (*m_absorberGeneral)[0];} const std::string & PreshowerDataBase::versionTag() const { return m_preshowerVersionTag; diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDataBase.h b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDataBase.h index 7021191a20b434a95dfe66606c742ba9258e5f52..ef6e4acbbe74446a4dd3035ea2bb0242d9de1e17 100644 --- a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDataBase.h +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDataBase.h @@ -28,6 +28,8 @@ public: const IRDBRecord* stationGeneral() const; const IRDBRecord* plateGeneral() const; + const IRDBRecord* radiatorGeneral() const; + const IRDBRecord* absorberGeneral() const; // Return the Preshower version tag. const std::string & versionTag() const; @@ -52,6 +54,8 @@ private: IRDBRecordset_ptr m_stationGeneral; IRDBRecordset_ptr m_plateGeneral; + IRDBRecordset_ptr m_radiatorGeneral; + IRDBRecordset_ptr m_absorberGeneral; }; diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDetectorTool.cxx b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDetectorTool.cxx index a64eead9a31c558994b87fb61c9366ad62d977c0..dfa1e24e35c5f224d802369f81fd4c377a15581f 100644 --- a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDetectorTool.cxx +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerDetectorTool.cxx @@ -66,7 +66,7 @@ PreshowerDetectorTool::create() ATH_CHECK(m_rdbAccessSvc.retrieve()); // Print the Preshower version tag: std::string preshowerVersionTag{m_rdbAccessSvc->getChildTag("Preshower", versionKey.tag(), versionKey.node(), "FASERDD")}; - ATH_MSG_INFO("Preshower Version: " << preshowerVersionTag << " Package Version: " << PACKAGE_VERSION); + ATH_MSG_INFO("Preshower Version: " << preshowerVersionTag); // Check if version is empty. If so, then the Preshower cannot be built. This may or may not be intentional. We // just issue an INFO message. if (preshowerVersionTag.empty()) { @@ -172,7 +172,7 @@ PreshowerDetectorTool::clear() StatusCode PreshowerDetectorTool::registerCallback() { - StatusCode sc{StatusCode::FAILURE, true}; + StatusCode sc{StatusCode::FAILURE}; if (m_alignable.value()) { ATH_MSG_WARNING("Called untested PreshowerDetectorTool::registerCallback()"); if (m_useDynamicAlignFolders.value()) { diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerGeometryManager.cxx b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerGeometryManager.cxx index 6be4e0d11075d22a7f89c8bbb2421c47247ca47f..f635cf293ba2abcc77a39d63f58ada3fff845272 100644 --- a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerGeometryManager.cxx +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerGeometryManager.cxx @@ -9,6 +9,8 @@ #include "ScintReadoutGeometry/ScintCommonItems.h" #include "PreshowerStationParameters.h" #include "PreshowerPlateParameters.h" +#include "PreshowerRadiatorParameters.h" +#include "PreshowerAbsorberParameters.h" #include "PreshowerDataBase.h" #include "PreshowerGeneralParameters.h" #include "PreshowerGeoModel/PreshowerGeoModelAthenaComps.h" @@ -22,6 +24,8 @@ PreshowerGeometryManager::PreshowerGeometryManager(PreshowerDataBase* rdb) m_stationParameters = std::make_unique<PreshowerStationParameters>(m_rdb); m_plateParameters = std::make_unique<PreshowerPlateParameters>(m_rdb); + m_radiatorParameters = std::make_unique<PreshowerRadiatorParameters>(m_rdb); + m_absorberParameters = std::make_unique<PreshowerAbsorberParameters>(m_rdb); m_generalParameters = std::make_unique<PreshowerGeneralParameters>(m_rdb); m_distortedMatManager = std::make_unique<ScintDD::DistortedMaterialManager>(); } @@ -73,6 +77,17 @@ PreshowerGeometryManager::plateParameters() const return m_plateParameters.get(); } +const PreshowerRadiatorParameters * +PreshowerGeometryManager::radiatorParameters() const +{ + return m_radiatorParameters.get(); +} +const PreshowerAbsorberParameters * +PreshowerGeometryManager::absorberParameters() const +{ + return m_absorberParameters.get(); +} + const PreshowerGeneralParameters * PreshowerGeometryManager::generalParameters() const { @@ -94,6 +109,8 @@ PreshowerGeometryManager::operator=(const PreshowerGeometryManager& right) { m_rdb = right.m_rdb; m_stationParameters.reset(new PreshowerStationParameters(m_rdb)); m_plateParameters.reset(new PreshowerPlateParameters(m_rdb)); + m_radiatorParameters.reset(new PreshowerRadiatorParameters(m_rdb)); + m_absorberParameters.reset(new PreshowerAbsorberParameters(m_rdb)); m_generalParameters.reset(new PreshowerGeneralParameters(m_rdb)); m_distortedMatManager.reset(new ScintDD::DistortedMaterialManager()); } @@ -107,6 +124,8 @@ PreshowerGeometryManager::PreshowerGeometryManager(const PreshowerGeometryManage m_rdb = right.m_rdb; m_stationParameters.reset(new PreshowerStationParameters(m_rdb)); m_plateParameters.reset(new PreshowerPlateParameters(m_rdb)); + m_radiatorParameters.reset(new PreshowerRadiatorParameters(m_rdb)); + m_absorberParameters.reset(new PreshowerAbsorberParameters(m_rdb)); m_generalParameters.reset(new PreshowerGeneralParameters(m_rdb)); m_distortedMatManager.reset(new ScintDD::DistortedMaterialManager()); } diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerGeometryManager.h b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerGeometryManager.h index 4f8336cdda68af6ac37c8d09f2c39f718d751b7f..23d24bde7ac19e6db4de05fea7ee341b18149db8 100644 --- a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerGeometryManager.h +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerGeometryManager.h @@ -16,6 +16,8 @@ namespace ScintDD { class PreshowerStationParameters; class PreshowerPlateParameters; +class PreshowerRadiatorParameters; +class PreshowerAbsorberParameters; class PreshowerDataBase; class PreshowerGeneralParameters; class PreshowerGeoModelAthenaComps; @@ -42,6 +44,8 @@ public: const PreshowerStationParameters* stationParameters() const; const PreshowerPlateParameters* plateParameters() const; + const PreshowerRadiatorParameters* radiatorParameters() const; + const PreshowerAbsorberParameters* absorberParameters() const; const PreshowerGeneralParameters* generalParameters() const; const ScintDD::DistortedMaterialManager* distortedMatManager() const; @@ -57,6 +61,8 @@ private: std::unique_ptr<PreshowerStationParameters> m_stationParameters; std::unique_ptr<PreshowerPlateParameters> m_plateParameters; + std::unique_ptr<PreshowerRadiatorParameters> m_radiatorParameters; + std::unique_ptr<PreshowerAbsorberParameters> m_absorberParameters; std::unique_ptr<PreshowerGeneralParameters> m_generalParameters; std::unique_ptr<ScintDD::DistortedMaterialManager> m_distortedMatManager; diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerRadiatorParameters.cxx b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerRadiatorParameters.cxx new file mode 100644 index 0000000000000000000000000000000000000000..b3d95c86f41f05b7897fb7fe95e07cccae43c7f7 --- /dev/null +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerRadiatorParameters.cxx @@ -0,0 +1,46 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include "PreshowerRadiatorParameters.h" +#include "PreshowerGeometryManager.h" + +#include "PreshowerDataBase.h" + +#include "RDBAccessSvc/IRDBRecord.h" +#include "GaudiKernel/SystemOfUnits.h" + +#include <cmath> + + +PreshowerRadiatorParameters::PreshowerRadiatorParameters(PreshowerDataBase* rdb) +{ + m_rdb = rdb; +} + +// +// Radiator General +// +double +PreshowerRadiatorParameters::radiatorWidth() const +{ + return m_rdb->radiatorGeneral()->getDouble("WIDTH") * Gaudi::Units::mm; +} + +double +PreshowerRadiatorParameters::radiatorLength() const +{ + return m_rdb->radiatorGeneral()->getDouble("LENGTH") * Gaudi::Units::mm; +} + +double +PreshowerRadiatorParameters::radiatorThickness() const +{ + return m_rdb->radiatorGeneral()->getDouble("THICKNESS") * Gaudi::Units::mm; +} + +std::string PreshowerRadiatorParameters::radiatorMaterial() const +{ + return m_rdb->radiatorGeneral()->getString("MATERIAL"); +} + diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerRadiatorParameters.h b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerRadiatorParameters.h new file mode 100644 index 0000000000000000000000000000000000000000..68d9ce08ae76376216a35c66da8dcc5b5cc7076a --- /dev/null +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerRadiatorParameters.h @@ -0,0 +1,31 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef PreshowerGeoModel_PreshowerRadiatorParameters_H +#define PreshowerGeoModel_PreshowerRadiatorParameters_H + +#include <string> + +class PreshowerDataBase; + +class PreshowerRadiatorParameters { + +public: + + // Constructor + PreshowerRadiatorParameters(PreshowerDataBase* rdb); + + // General + double radiatorThickness() const; + double radiatorWidth() const; + double radiatorLength() const; + std::string radiatorMaterial() const; + + private: + PreshowerDataBase * m_rdb; + +}; + + +#endif // PreshowerGeoModel_PreshowerRadiatorParameters_H diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerStation.cxx b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerStation.cxx index bdd8c5b964fb26c4db91f09764ed1dd98e66721d..a511085e1fda3124716531849a838d773a2cf726 100644 --- a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerStation.cxx +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerStation.cxx @@ -9,6 +9,8 @@ #include "PreshowerGeometryManager.h" #include "PreshowerStationParameters.h" #include "PreshowerGeneralParameters.h" +#include "PreshowerRadiatorParameters.h" +#include "PreshowerAbsorberParameters.h" #include "PreshowerIdentifier.h" #include "PreshowerPlate.h" @@ -55,13 +57,36 @@ PreshowerStation::getParameters() const PreshowerGeneralParameters* generalParameters = m_geometryManager->generalParameters(); m_safety = generalParameters->safety(); - m_width = m_plate->width() + m_safety; - m_length = m_plate->length() + m_safety; - // pitch includes thickness of one plate - m_thickness = (m_numPlates - 1) * m_platePitch + m_plate->thickness() + m_safety; - // Set numerology m_detectorManager->numerology().setNumPlatesPerStation(m_numPlates); + + // Passive radiator information + const PreshowerRadiatorParameters* radiatorParameters = m_geometryManager->radiatorParameters(); + m_radiatorWidth = radiatorParameters->radiatorWidth(); + m_radiatorLength = radiatorParameters->radiatorLength(); + m_radiatorThickness = radiatorParameters->radiatorThickness(); + m_radiatorMaterial = m_materials->getMaterial(radiatorParameters->radiatorMaterial()); + + // Passive absorber information + const PreshowerAbsorberParameters* absorberParameters = m_geometryManager->absorberParameters(); + m_absorberWidth = absorberParameters->absorberWidth(); + m_absorberLength = absorberParameters->absorberLength(); + m_absorberThickness = absorberParameters->absorberThickness(); + m_absorberMaterial = m_materials->getMaterial(absorberParameters->absorberMaterial()); + + // pitch includes thickness of one plate + m_width = std::max(std::max(m_plate->width(), m_radiatorWidth), m_absorberWidth) + m_safety; + m_length = std::max(std::max(m_plate->length(), m_radiatorLength), m_absorberLength) + m_safety; + + // Compute air-gaps between slabs; for now assumed equal based on scintillator pitch + m_airGap = (m_platePitch - m_plate->thickness() - m_radiatorThickness - m_absorberThickness)/3; + if (m_airGap < 0) + { + m_detectorManager->msg(MSG::FATAL) << "Invalid passive material geometry for preshower; air gap is negative." << endmsg; + } + + m_thickness = (m_numPlates - 1) * m_platePitch + m_plate->thickness() + 3 * m_airGap + 2 * m_absorberThickness + m_radiatorThickness + m_safety; + } const GeoLogVol * @@ -71,6 +96,13 @@ PreshowerStation::preBuild() // Box envelope containing the station. const GeoBox* stationEnvelopeShape = new GeoBox(0.5 * m_width, 0.5 * m_length, 0.5 * m_thickness); GeoLogVol* stationLog = new GeoLogVol(getName(), stationEnvelopeShape, m_materials->gasMaterial()); + + const GeoBox* radiatorShape = new GeoBox(0.5 * m_radiatorWidth, 0.5 * m_radiatorLength, 0.5 * m_radiatorThickness); + m_radiatorLog = new GeoLogVol("PreshowerRadiator", radiatorShape, m_radiatorMaterial); + + const GeoBox* absorberShape = new GeoBox(0.5 * m_absorberWidth, 0.5 * m_absorberLength, 0.5 * m_absorberThickness); + m_absorberLog = new GeoLogVol("PreshowerAbsorber", absorberShape, m_absorberMaterial); + return stationLog; } @@ -80,21 +112,51 @@ PreshowerStation::build(PreshowerIdentifier id) GeoFullPhysVol * station = new GeoFullPhysVol(m_logVolume); - double activeDepth = m_thickness - m_safety; + // double activeDepth = m_thickness - m_safety; double plateThickness = m_plate->thickness(); for (int iPlate = 0; iPlate < m_numPlates; iPlate++) { + station->add(new GeoNameTag("Absorber#"+intToString(iPlate))); + double zA = (-m_numPlates/2.0 + iPlate) * m_platePitch; + GeoTransform* absorberTransform = new GeoTransform(GeoTrf::Translate3D(0.0, + 0.0, + zA)); + station->add(absorberTransform); + GeoVPhysVol* absorberPV = new GeoPhysVol(m_absorberLog); + station->add(absorberPV); + + station->add(new GeoNameTag("Radiator#"+intToString(iPlate))); + double zR = zA + m_airGap + (m_absorberThickness + m_radiatorThickness)/2; + GeoTransform* radiatorTransform = new GeoTransform(GeoTrf::Translate3D(0.0, + 0.0, + zR)); + station->add(radiatorTransform); + GeoVPhysVol* radiatorPV = new GeoPhysVol(m_radiatorLog); + station->add(radiatorPV); + station->add(new GeoNameTag("Plate#"+intToString(iPlate))); station->add(new GeoIdentifierTag(iPlate)); id.setPlate(iPlate); + double zP = zR + m_airGap + (plateThickness + m_radiatorThickness)/2; GeoAlignableTransform* transform = new GeoAlignableTransform(GeoTrf::Translate3D(0.0, 0.0, - (plateThickness - activeDepth)/2 + iPlate * m_platePitch)); + zP)); station->add(transform); GeoVPhysVol* platePV = m_plate->build(id); station->add(platePV); m_detectorManager->addAlignableTransform(0, id.getPlateId(), transform, platePV); - } + } + + // Now add the final downstream absorber after the last plate + station->add(new GeoNameTag("Absorber#"+intToString(m_numPlates))); + double zA = m_numPlates/2.0 * m_platePitch; + GeoTransform* absorberTransform = new GeoTransform(GeoTrf::Translate3D(0.0, + 0.0, + zA)); + station->add(absorberTransform); + GeoVPhysVol* absorberPV = new GeoPhysVol(m_absorberLog); + station->add(absorberPV); + return station; } diff --git a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerStation.h b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerStation.h index fb4d6f588699db07cb0212bb850d59b1062bee21..e1307290b3ef3c89f26a4453a0515f80780d9fea 100644 --- a/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerStation.h +++ b/Scintillator/ScintDetDescr/PreshowerGeoModel/src/PreshowerStation.h @@ -10,6 +10,7 @@ class GeoVPhysVol; class GeoFullPhysVol; class GeoLogVol; +class GeoMaterial; class PreshowerIdentifier; class PreshowerPlate; @@ -30,7 +31,19 @@ public: double thickness() const {return m_thickness;} double width() const {return m_width;} double length() const {return m_length;} + + double radiatorThickness() const {return m_radiatorThickness;} + double radiatorWidth() const {return m_radiatorWidth;} + double radiatorLength() const {return m_radiatorLength;} + const GeoMaterial* radiatorMaterial() const {return m_radiatorMaterial;} + + double absorberThickness() const {return m_absorberThickness;} + double absorberWidth() const {return m_absorberWidth;} + double absorberLength() const {return m_absorberLength;} + const GeoMaterial* absorberMaterial() const {return m_absorberMaterial;} + double airGap() const {return m_airGap;} + private: void getParameters(); virtual const GeoLogVol * preBuild(); @@ -44,6 +57,22 @@ private: double m_width; double m_length; + double m_radiatorThickness; + double m_radiatorWidth; + double m_radiatorLength; + + const GeoMaterial* m_radiatorMaterial; + const GeoLogVol* m_radiatorLog; + + double m_absorberThickness; + double m_absorberWidth; + double m_absorberLength; + + const GeoMaterial* m_absorberMaterial; + const GeoLogVol* m_absorberLog; + + double m_airGap; + double m_safety; }; diff --git a/Scintillator/ScintDetDescr/ScintIdDictFiles/data/IdDictScintillator_TB00.xml b/Scintillator/ScintDetDescr/ScintIdDictFiles/data/IdDictScintillator_TB00.xml new file mode 100644 index 0000000000000000000000000000000000000000..a4b3f0c98f58f58bf64ef490bf6d6f446bb0256b --- /dev/null +++ b/Scintillator/ScintDetDescr/ScintIdDictFiles/data/IdDictScintillator_TB00.xml @@ -0,0 +1,27 @@ +<IdDictionary name="Scintillator"> + + <field name="part" > + <label name="Veto" value="1" /> + <label name="Trigger" value="2" /> + <label name="Preshower" value="3" /> + </field> + + <region> + <range field="part" value="Veto" /> + <range field="station" minvalue="0" maxvalue="0" /> + <range field="plate" minvalue="0" maxvalue="1" /> + <range field="pmt" minvalue="0" maxvalue="0" /> + </region> + <region> + <range field="part" value="Trigger"/> + <range field="station" minvalue="0" maxvalue="0" /> + <range field="plate" minvalue="0" maxvalue="1" /> + <range field="pmt" minvalue="0" maxvalue="1" /> + </region> + <region> + <range field="part" value="Preshower" /> + <range field="station" minvalue="0" maxvalue="0" /> + <range field="plate" minvalue="0" maxvalue="1" /> + <range field="pmt" minvalue="0" maxvalue="0" /> + </region> +</IdDictionary> \ No newline at end of file diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h index 08d89603be7167480491a5beab34a1d6e0f783a1..2f1e7c0a95be335fcc8e349159d9f6b4b4efe213 100644 --- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h +++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h @@ -38,6 +38,7 @@ class GeoAlignmentStore; namespace Trk{ class Surface; class SurfaceBounds; + constexpr DetectorElemType Scintillator = DetectorElemType::TRT; } namespace ScintDD { @@ -142,10 +143,12 @@ namespace ScintDD { //@{ /// identifier of this detector element: - Identifier identify() const; + virtual Identifier identify() const override final; + // Identifier identify() const; /// identifier hash - IdentifierHash identifyHash() const; + virtual IdentifierHash identifyHash() const override final; + // IdentifierHash identifyHash() const; /// Returns the id helper const FaserDetectorID* getIdHelper() const; @@ -188,13 +191,13 @@ namespace ScintDD { /// Local (simulation/hit frame) to global transform virtual const GeoTrf::Transform3D & transformHit() const; /// Local (reconstruction frame) to global transform - const Amg::Transform3D & transform() const; + virtual const Amg::Transform3D & transform() const override; /// Default Local (reconstruction frame) to global transform /// ie with no misalignment. const HepGeom::Transform3D defTransformCLHEP() const; const Amg::Transform3D defTransform() const; /// Center in global coordinates - const Amg::Vector3D & center() const; + virtual const Amg::Vector3D & center() const override; const HepGeom::Transform3D & transformCLHEP() const; @@ -233,7 +236,7 @@ namespace ScintDD { const Amg::Vector3D & etaAxis() const; const HepGeom::Vector3D<double> & etaAxisCLHEP() const; /// Get reconstruction local normal axes in global frame. Choosen to give right-handed coordinate frame. - const Amg::Vector3D & normal() const; + virtual const Amg::Vector3D & normal() const override; /// transform a hit local position into a global position: HepGeom::Point3D<double> globalPositionHit(const HepGeom::Point3D<double> &simulationLocalPos) const; @@ -255,7 +258,7 @@ namespace ScintDD { /// Element Surface virtual Trk::Surface & surface(); - virtual const Trk::Surface & surface() const; + virtual const Trk::Surface & surface() const override; //@} @@ -332,7 +335,7 @@ namespace ScintDD { double length() const; // Length in y direction double thickness() const; // Thickness in z direction - virtual const Trk::SurfaceBounds & bounds() const; + virtual const Trk::SurfaceBounds & bounds() const override; // Test that it is in the active region // Intersect has 3 states @@ -393,7 +396,11 @@ namespace ScintDD { public: const ScintCommonItems* getCommonItems() const; - + + /** TrkDetElementBase interface detectorType + */ + virtual Trk::DetectorElemType detectorType() const override final; + /////////////////////////////////////////////////////////////////// // Private methods: /////////////////////////////////////////////////////////////////// @@ -500,6 +507,13 @@ namespace ScintDD { // Inline methods: /////////////////////////////////////////////////////////////////// + + inline Trk::DetectorElemType ScintDetectorElement::detectorType() const{ + return Trk::Scintillator; + } + + + inline HepGeom::Point3D<double> ScintDetectorElement::globalPositionHit(const HepGeom::Point3D<double> &localPos) const { return Amg::EigenTransformToCLHEP(transformHit())*localPos; diff --git a/Scintillator/ScintDetDescr/TriggerGeoModel/src/TriggerDetectorTool.cxx b/Scintillator/ScintDetDescr/TriggerGeoModel/src/TriggerDetectorTool.cxx index 878e632899d7419a775994050861c1f32bb06327..acbaf4a282f115ee69ca6ef3fdfde81eee9251c6 100644 --- a/Scintillator/ScintDetDescr/TriggerGeoModel/src/TriggerDetectorTool.cxx +++ b/Scintillator/ScintDetDescr/TriggerGeoModel/src/TriggerDetectorTool.cxx @@ -66,7 +66,7 @@ TriggerDetectorTool::create() ATH_CHECK(m_rdbAccessSvc.retrieve()); // Print the Trigger version tag: std::string triggerVersionTag{m_rdbAccessSvc->getChildTag("Trigger", versionKey.tag(), versionKey.node(), "FASERDD")}; - ATH_MSG_INFO("Trigger Version: " << triggerVersionTag << " Package Version: " << PACKAGE_VERSION); + ATH_MSG_INFO("Trigger Version: " << triggerVersionTag); // Check if version is empty. If so, then the Trigger cannot be built. This may or may not be intentional. We // just issue an INFO message. if (triggerVersionTag.empty()) { @@ -172,7 +172,7 @@ TriggerDetectorTool::clear() StatusCode TriggerDetectorTool::registerCallback() { - StatusCode sc{StatusCode::FAILURE, true}; + StatusCode sc{StatusCode::FAILURE}; if (m_alignable.value()) { ATH_MSG_WARNING("Called untested TriggerDetectorTool::registerCallback()"); if (m_useDynamicAlignFolders.value()) { diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.cxx index 44bb1e086f16685bd9b7ce768d9942a08e9cf334..2ef72a43a9063a8f00c9f74b8eac89f75eb3121c 100644 --- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.cxx +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.cxx @@ -77,6 +77,10 @@ VetoDataBase::VetoDataBase(const VetoGeoModelAthenaComps * athenaComps) m_plateGeneral = rdbSvc->getRecordsetPtr("VetoPlateGeneral", versionTag, versionNode, "FASERDD"); msg(MSG::DEBUG) << "Table VetoPlateGeneral Fetched" << endmsg; + m_radiatorGeneral = rdbSvc->getRecordsetPtr("VetoRadiatorGeneral", versionTag, versionNode, "FASERDD"); + msg(MSG::DEBUG) << "Table VetoRadiatorGeneral Fetched" << endmsg; + + } const VetoGeoModelAthenaComps* VetoDataBase::athenaComps() const { return m_athenaComps; } @@ -93,6 +97,7 @@ IRDBRecordset_ptr VetoDataBase::topLevelTable() const {return m_topLevel;} const IRDBRecord* VetoDataBase::stationGeneral() const {return (*m_stationGeneral)[0];} const IRDBRecord* VetoDataBase::plateGeneral() const {return (*m_plateGeneral)[0];} +const IRDBRecord* VetoDataBase::radiatorGeneral() const {return (*m_radiatorGeneral)[0];} const std::string & VetoDataBase::versionTag() const { return m_vetoVersionTag; diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.h b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.h index cce56bba95689ae521b73a419d8c72a9fb0552f4..74f2365b22dad7eb92ff5cb4513db45ceb29000f 100644 --- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.h +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.h @@ -41,6 +41,7 @@ public: // const IRDBRecord* brlThermalShield() const; const IRDBRecord* stationGeneral() const; const IRDBRecord* plateGeneral() const; + const IRDBRecord* radiatorGeneral() const; // const IRDBRecord* brlFSI() const; // int brlFSISize() const; // const IRDBRecord* brlFSILocation(int i) const; @@ -119,6 +120,7 @@ private: // IRDBRecordset_ptr m_brlThermalShield; IRDBRecordset_ptr m_stationGeneral; IRDBRecordset_ptr m_plateGeneral; + IRDBRecordset_ptr m_radiatorGeneral; // IRDBRecordset_ptr m_brlFSI; // IRDBRecordset_ptr m_brlFSILocation; // IRDBRecordset_ptr m_fwdSensor; diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorFactory.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorFactory.cxx index c85ae49d8c24d8c72debd67b90232054f7098749..9d3d9659f6fd590cb053c589e53d8719cce3ebea 100644 --- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorFactory.cxx +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorFactory.cxx @@ -20,6 +20,7 @@ #include "ScintReadoutGeometry/ScintDetectorDesign.h" #include "VetoStation.h" +#include "VetoRadiator.h" #include "VetoPlate.h" #include "VetoDataBase.h" #include "VetoGeoModel/VetoGeoModelAthenaComps.h" @@ -149,14 +150,11 @@ void VetoDetectorFactory::create(GeoPhysVol *world) std::string stationA_Label = "StationA"; std::string stationB_Label = "StationB"; - // std::string absorberA_Label = "AbsorberA"; - // std::string absorberB_Label = "AbsorberB"; + std::string radiator_Label = "Radiator"; bool stationA_Present = vetoGeneral->partPresent(stationA_Label); bool stationB_Present = vetoGeneral->partPresent(stationB_Label); - // bool absorberA_Present = vetoGeneral->partPresent(absorberA_Label); - // bool absorberB_Present = vetoGeneral->partPresent(absorberB_Label); - + bool radiator_Present = vetoGeneral->partPresent(radiator_Label); // // Plate is the same for all stations // @@ -214,6 +212,25 @@ void VetoDetectorFactory::create(GeoPhysVol *world) m_detectorManager->addAlignableTransform(1, id.getPlateId(), stationB_Transform, stationB_PV); } + // Passive radiator + if (radiator_Present) + { + msg(MSG::DEBUG) << "Building the Veto Radiator." << endmsg; + + // Create the radiator + VetoRadiator radiator("VetoRadiator", m_detectorManager, m_geometryManager, m_materials); + GeoAlignableTransform* radiator_Transform = new GeoAlignableTransform(vetoTransform * vetoGeneral->partTransform(radiator_Label)); + + GeoNameTag* topLevelNameTag = new GeoNameTag("Veto"); + scint->add(topLevelNameTag); + scint->add(new GeoIdentifierTag(0)); + scint->add(radiator_Transform); + scint->add(radiator.getVolume()); + m_detectorManager->addTreeTop(radiator.getVolume()); + + } + + // Set the neighbours m_detectorManager->initNeighbours(); diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorTool.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorTool.cxx index d588039a74e5df1973cc11b29be5311be1014af6..71ad2bf461c25eef45db32cae8496c5699bdcd02 100644 --- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorTool.cxx +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorTool.cxx @@ -66,7 +66,7 @@ VetoDetectorTool::create() ATH_CHECK(m_rdbAccessSvc.retrieve()); // Print the Veto version tag: std::string vetoVersionTag{m_rdbAccessSvc->getChildTag("Veto", versionKey.tag(), versionKey.node(), "FASERDD")}; - ATH_MSG_INFO("Veto Version: " << vetoVersionTag << " Package Version: " << PACKAGE_VERSION); + ATH_MSG_INFO("Veto Version: " << vetoVersionTag); // Check if version is empty. If so, then the Veto cannot be built. This may or may not be intentional. We // just issue an INFO message. if (vetoVersionTag.empty()) { @@ -172,7 +172,7 @@ VetoDetectorTool::clear() StatusCode VetoDetectorTool::registerCallback() { - StatusCode sc{StatusCode::FAILURE, true}; + StatusCode sc{StatusCode::FAILURE}; if (m_alignable.value()) { ATH_MSG_WARNING("Called untested VetoDetectorTool::registerCallback()"); if (m_useDynamicAlignFolders.value()) { diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoGeometryManager.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoGeometryManager.cxx index 1e5757aff9a4f931b45c0e3cc6e0e3330328a8ff..53190a50a7897d448b2ebdea0f108b83d5917765 100644 --- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoGeometryManager.cxx +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoGeometryManager.cxx @@ -9,6 +9,7 @@ #include "ScintReadoutGeometry/ScintCommonItems.h" #include "VetoStationParameters.h" #include "VetoPlateParameters.h" +#include "VetoRadiatorParameters.h" #include "VetoDataBase.h" #include "VetoGeneralParameters.h" #include "VetoGeoModel/VetoGeoModelAthenaComps.h" @@ -22,6 +23,7 @@ VetoGeometryManager::VetoGeometryManager(VetoDataBase* rdb) m_stationParameters = std::make_unique<VetoStationParameters>(m_rdb); m_plateParameters = std::make_unique<VetoPlateParameters>(m_rdb); + m_radiatorParameters = std::make_unique<VetoRadiatorParameters>(m_rdb); m_generalParameters = std::make_unique<VetoGeneralParameters>(m_rdb); m_distortedMatManager = std::make_unique<ScintDD::DistortedMaterialManager>(); } @@ -73,6 +75,13 @@ VetoGeometryManager::plateParameters() const return m_plateParameters.get(); } +const VetoRadiatorParameters * +VetoGeometryManager::radiatorParameters() const +{ + return m_radiatorParameters.get(); +} + + const VetoGeneralParameters * VetoGeometryManager::generalParameters() const { @@ -94,6 +103,7 @@ VetoGeometryManager::operator=(const VetoGeometryManager& right) { m_rdb = right.m_rdb; m_stationParameters.reset(new VetoStationParameters(m_rdb)); m_plateParameters.reset(new VetoPlateParameters(m_rdb)); + m_radiatorParameters.reset(new VetoRadiatorParameters(m_rdb)); m_generalParameters.reset(new VetoGeneralParameters(m_rdb)); m_distortedMatManager.reset(new ScintDD::DistortedMaterialManager()); } @@ -107,6 +117,7 @@ VetoGeometryManager::VetoGeometryManager(const VetoGeometryManager& right) { m_rdb = right.m_rdb; m_stationParameters.reset(new VetoStationParameters(m_rdb)); m_plateParameters.reset(new VetoPlateParameters(m_rdb)); + m_radiatorParameters.reset(new VetoRadiatorParameters(m_rdb)); m_generalParameters.reset(new VetoGeneralParameters(m_rdb)); m_distortedMatManager.reset(new ScintDD::DistortedMaterialManager()); } diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoGeometryManager.h b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoGeometryManager.h index 8531453e2791b7767e585d0f0bee5e1fe9b89f10..317cfd1442aace6744701381910420dec9172f13 100644 --- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoGeometryManager.h +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoGeometryManager.h @@ -16,6 +16,7 @@ namespace ScintDD { class VetoStationParameters; class VetoPlateParameters; +class VetoRadiatorParameters; class VetoDataBase; class VetoGeneralParameters; class VetoGeoModelAthenaComps; @@ -42,6 +43,7 @@ public: const VetoStationParameters* stationParameters() const; const VetoPlateParameters* plateParameters() const; + const VetoRadiatorParameters* radiatorParameters() const; const VetoGeneralParameters* generalParameters() const; const ScintDD::DistortedMaterialManager* distortedMatManager() const; @@ -57,6 +59,7 @@ private: std::unique_ptr<VetoStationParameters> m_stationParameters; std::unique_ptr<VetoPlateParameters> m_plateParameters; + std::unique_ptr<VetoRadiatorParameters> m_radiatorParameters; std::unique_ptr<VetoGeneralParameters> m_generalParameters; std::unique_ptr<ScintDD::DistortedMaterialManager> m_distortedMatManager; diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiator.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiator.cxx new file mode 100644 index 0000000000000000000000000000000000000000..74fb3adc6c23bfc463f0bf1bad45deeb29aaa3e5 --- /dev/null +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiator.cxx @@ -0,0 +1,55 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include "VetoRadiator.h" + +#include "VetoMaterialManager.h" + +#include "VetoGeometryManager.h" +#include "VetoGeneralParameters.h" +#include "VetoRadiatorParameters.h" + +#include "GeoModelKernel/GeoBox.h" +#include "GeoModelKernel/GeoLogVol.h" +#include "GeoModelKernel/GeoPhysVol.h" +#include "GeoModelKernel/GeoMaterial.h" + +VetoRadiator::VetoRadiator(const std::string & name, + ScintDD::VetoDetectorManager* detectorManager, + const VetoGeometryManager* geometryManager, + VetoMaterialManager* materials) + : VetoSharedComponentFactory(name, detectorManager, geometryManager, materials) +{ + getParameters(); + m_physVolume = build(); +} + +void +VetoRadiator::getParameters() +{ + const VetoRadiatorParameters * parameters = m_geometryManager->radiatorParameters(); + const VetoGeneralParameters* generalParameters = m_geometryManager->generalParameters(); + + m_material = m_materials->getMaterial(parameters->radiatorMaterial()); + m_safety = generalParameters->safety(); + m_thickness = parameters->radiatorThickness(); + m_width = parameters->radiatorWidth(); + m_length = parameters->radiatorLength(); +} + +GeoVPhysVol * +VetoRadiator::build() +{ + // Just a simple box. + const GeoBox * simpleRadiatorShape = new GeoBox(0.5*m_width, + 0.5*m_length, + 0.5*m_thickness); + + const GeoLogVol * simpleRadiatorLog = + new GeoLogVol(getName(), simpleRadiatorShape, m_material); + + GeoPhysVol * simpleRadiator = new GeoPhysVol(simpleRadiatorLog); + + return simpleRadiator; +} diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiator.h b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiator.h new file mode 100644 index 0000000000000000000000000000000000000000..20bb6099faa3d2c49d2ae15de81183fd4c95abca --- /dev/null +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiator.h @@ -0,0 +1,42 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef VETOGEOMODEL_VETORADIATOR_H +#define VETOGEOMODEL_VETORADIATOR_H + +#include "VetoComponentFactory.h" + +class GeoVPhysVol; +class GeoFullPhysVol; +class GeoLogVol; +class GeoMaterial; + +class VetoRadiator : public VetoSharedComponentFactory +{ + +public: + VetoRadiator(const std::string & name, + ScintDD::VetoDetectorManager* detectorManager, + const VetoGeometryManager* geometryManager, + VetoMaterialManager* materials); + +public: + const GeoMaterial * material() const {return m_material;} + double thickness() const {return m_thickness;} + double width() const {return m_width;} + double length() const {return m_length;} + +private: + virtual GeoVPhysVol * build(); + void getParameters(); + + const GeoMaterial * m_material; + double m_thickness; + double m_width; + double m_length; + + double m_safety; +}; + +#endif // VETOGEOMODEL_VETORADIATOR_H diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiatorParameters.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiatorParameters.cxx new file mode 100644 index 0000000000000000000000000000000000000000..85e1f604cdcfa3939781b2261cf73f0423c20e15 --- /dev/null +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiatorParameters.cxx @@ -0,0 +1,46 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include "VetoRadiatorParameters.h" +#include "VetoGeometryManager.h" + +#include "VetoDataBase.h" + +#include "RDBAccessSvc/IRDBRecord.h" +#include "GaudiKernel/SystemOfUnits.h" + +#include <cmath> + + +VetoRadiatorParameters::VetoRadiatorParameters(VetoDataBase* rdb) +{ + m_rdb = rdb; +} + +// +// Radiator General +// +double +VetoRadiatorParameters::radiatorWidth() const +{ + return m_rdb->radiatorGeneral()->getDouble("WIDTH") * Gaudi::Units::mm; +} + +double +VetoRadiatorParameters::radiatorLength() const +{ + return m_rdb->radiatorGeneral()->getDouble("LENGTH") * Gaudi::Units::mm; +} + +double +VetoRadiatorParameters::radiatorThickness() const +{ + return m_rdb->radiatorGeneral()->getDouble("THICKNESS") * Gaudi::Units::mm; +} + +std::string VetoRadiatorParameters::radiatorMaterial() const +{ + return m_rdb->radiatorGeneral()->getString("MATERIAL"); +} + diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiatorParameters.h b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiatorParameters.h new file mode 100644 index 0000000000000000000000000000000000000000..83c8bc61bf3210a668a00000776ce361929c7de0 --- /dev/null +++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoRadiatorParameters.h @@ -0,0 +1,31 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef VetoGeoModel_VetoRadiatorParameters_H +#define VetoGeoModel_VetoRadiatorParameters_H + +#include <string> + +class VetoDataBase; + +class VetoRadiatorParameters { + +public: + + // Constructor + VetoRadiatorParameters(VetoDataBase* rdb); + + // Barrel General + double radiatorThickness() const; + double radiatorWidth() const; + double radiatorLength() const; + std::string radiatorMaterial() const; + + private: + VetoDataBase * m_rdb; + +}; + + +#endif // VetoGeoModel_VetoRadiatorParameters_H diff --git a/Scintillator/ScintEventCnv/ScintByteStream/python/__init__.py b/Scintillator/ScintEventCnv/ScintByteStream/python/__init__.py deleted file mode 100644 index 547eccb66acdda3b759d6569fcbb3fec0491ad35..0000000000000000000000000000000000000000 --- a/Scintillator/ScintEventCnv/ScintByteStream/python/__init__.py +++ /dev/null @@ -1 +0,0 @@ -#ScintByteStream \ No newline at end of file diff --git a/Scintillator/ScintEventCnv/ScintByteStream/src/components/ScintByteStream_entries.cxx b/Scintillator/ScintEventCnv/ScintByteStream/src/components/ScintByteStream_entries.cxx deleted file mode 100644 index f44dd7e55aa408a39abd10a422d18bd32aae30ab..0000000000000000000000000000000000000000 --- a/Scintillator/ScintEventCnv/ScintByteStream/src/components/ScintByteStream_entries.cxx +++ /dev/null @@ -1,6 +0,0 @@ -#include "../ScintWaveformDecoderTool.h" -#include "../ScintByteStreamCnv.h" - -DECLARE_COMPONENT( ScintWaveformDecoderTool ) - -DECLARE_CONVERTER( ScintByteStreamCnv ) diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintEventAthenaPoolCnvDict.h b/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintEventAthenaPoolCnvDict.h deleted file mode 100644 index ddf45c6476d7fc12ed80b0ff8ea5b96e5575ecc4..0000000000000000000000000000000000000000 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintEventAthenaPoolCnvDict.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef SCINTEVENTATHENAPOOLCNVDICT_H -#define SCINTEVENTATHENAPOOLCNVDICT_H - -#include "ScintEventAthenaPool/ScintWaveform_p0.h" -#include "ScintEventAthenaPool/ScintWaveformContainer_p0.h" - -#endif diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/selection.xml b/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/selection.xml deleted file mode 100644 index 5c52a4cc6e9f4dbc3c13448549729f939a12f1c3..0000000000000000000000000000000000000000 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/selection.xml +++ /dev/null @@ -1,4 +0,0 @@ -<lcgdict> - <class name="ScintWaveform_p0" /> - <class name="ScintWaveformContainer_p0" id="344d904d-6338-41f1-94ee-ea609ea4ae44" /> -</lcgdict> diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformCnv_p0.h b/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformCnv_p0.h deleted file mode 100644 index 41bb1530d9623e528b1c50fa4a4e680580f86451..0000000000000000000000000000000000000000 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformCnv_p0.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - Copyright (C) 2020 CERN for the benefit of the FASER collaboration -*/ - -#ifndef SCINTWAVEFORMCNV_P0_H -#define SCINTWAVEFORMCNV_P0_H - -#include "ScintRawEvent/ScintWaveform.h" -#include "ScintEventAthenaPool/ScintWaveform_p0.h" - -#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" - -class ScintWaveformCnv_p0 : public T_AthenaPoolTPCnvBase<ScintWaveform, ScintWaveform_p0> { - public: - ScintWaveformCnv_p0() {}; - - virtual void persToTrans(const ScintWaveform_p0* persObj, - ScintWaveform* transObj, - MsgStream& log); - - virtual void transToPers(const ScintWaveform* transObj, - ScintWaveform_p0* persObj, - MsgStream& log); - private: -}; - -#endif diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv.cxx b/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv.cxx deleted file mode 100644 index afea1cac3c2143502dff9f2810e0f245260088ba..0000000000000000000000000000000000000000 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv.cxx +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright (C) 2020 CERN for the benefit of the FASER collaboration -*/ - -#include "ScintWaveformContainerCnv.h" - -ScintWaveformContainer_PERS* -ScintWaveformContainerCnv::createPersistent (ScintWaveformContainer* transCont) { - ATH_MSG_DEBUG("ScintWaveformContainerCnv::createPersistent()"); - - ScintWaveformContainerCnv_PERS converter; - - ScintWaveformContainer_PERS* persObj(nullptr); - persObj = converter.createPersistent( transCont, msg() ); - return persObj; -} - -ScintWaveformContainer* -ScintWaveformContainerCnv::createTransient() { - ATH_MSG_DEBUG("ScintWaveformContainerCnv::createTransient()"); - - static const pool::Guid p0_guid("344d904d-6338-41f1-94ee-ea609ea4ae44"); - ScintWaveformContainer* trans(0); - - // Check for GUID of each persistent type - if ( compareClassGuid(p0_guid) ) { - std::unique_ptr< ScintWaveformContainer_p0 > col_vect( poolReadObject< ScintWaveformContainer_p0 >() ); - - ScintWaveformContainerCnv_p0 converter_p0; - trans = converter_p0.createTransient( col_vect.get(), msg() ); - - } else { - - // Didn't find a known type - throw std::runtime_error("Unsupported persistent version of ScintWaveformContainer"); - } - - return trans; - -} - - diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv.h b/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv.h deleted file mode 100644 index c0160c8ef2df1cb0c5cb555d01cf0e819757e860..0000000000000000000000000000000000000000 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright 2020 CERN for the benefit of the FASER collaboration -*/ - -#ifndef SCINTWAVEFORMCONTAINERCNV_H -#define SCINTWAVEFORMCONTAINERCNV_H - -#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h" - -#include "ScintWaveformContainerCnv_p0.h" - -#include "ScintRawEvent/ScintWaveformContainer.h" -#include "ScintEventAthenaPool/ScintWaveformContainer_p0.h" - -// The latest persistent representation -typedef ScintWaveformContainer_p0 ScintWaveformContainer_PERS; -typedef ScintWaveformContainerCnv_p0 ScintWaveformContainerCnv_PERS; - -typedef T_AthenaPoolCustomCnv< ScintWaveformContainer, ScintWaveformContainer_PERS > ScintWaveformContainerCnvBase; - -class ScintWaveformContainerCnv : public ScintWaveformContainerCnvBase { - friend class CnvFactory<ScintWaveformContainerCnv>; - - public: - ScintWaveformContainerCnv (ISvcLocator* svcloc) : ScintWaveformContainerCnvBase(svcloc) {} - - protected: - virtual ScintWaveformContainer_PERS* createPersistent (ScintWaveformContainer* transCont); - virtual ScintWaveformContainer* createTransient (); - -}; - -#endif diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv_p0.h b/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv_p0.h deleted file mode 100644 index 6792e2a2ea96287baa8fdcc431cb3bfc2ac769dd..0000000000000000000000000000000000000000 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv_p0.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - Copyright 2020 CERN for the benefit of the FASER collaboration -*/ - -#ifndef SCINTWAVEFORMCONTAINERCNV_P0_H -#define SCINTWAVEFORMCONTAINERCNV_P0_H - -#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" - -#include "ScintRawEvent/ScintWaveformContainer.h" -#include "ScintEventAthenaPool/ScintWaveformContainer_p0.h" - -class ScintWaveformContainerCnv_p0 : public T_AthenaPoolTPCnvBase<ScintWaveformContainer, ScintWaveformContainer_p0> { - - public: - ScintWaveformContainerCnv_p0() {}; - - virtual void persToTrans(const ScintWaveformContainer_p0* persCont, - ScintWaveformContainer* transCont, - MsgStream& log); - - virtual void transToPers(const ScintWaveformContainer* transCont, - ScintWaveformContainer_p0* persCont, - MsgStream& log); - -}; - -#endif diff --git a/Scintillator/ScintRawEvent/ScintRawEvent/ScintRawEventDict.h b/Scintillator/ScintRawEvent/ScintRawEvent/ScintRawEventDict.h deleted file mode 100644 index 9a41f31400207f466dbe44769c19545f3d82c5b4..0000000000000000000000000000000000000000 --- a/Scintillator/ScintRawEvent/ScintRawEvent/ScintRawEventDict.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (C) 2020 CERN for the benefit of the FASER collaboration -*/ - -#ifndef SCINTRAWEVENT_SCINTRAWEVENTDICT_H -#define SCINTRAWEVENT_SCINTRAWEVENTDICT_H - -#include "ScintRawEvent/ScintWaveformContainer.h" - -#endif diff --git a/Scintillator/ScintRawEvent/ScintRawEvent/ScintWaveformContainer.h b/Scintillator/ScintRawEvent/ScintRawEvent/ScintWaveformContainer.h deleted file mode 100644 index 4438e55df5f057c3c76b17431eea68282b299bb7..0000000000000000000000000000000000000000 --- a/Scintillator/ScintRawEvent/ScintRawEvent/ScintWaveformContainer.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef SCINTRAWEVENT_SCINTWAVEFORMCONTAINER_H -#define SCINTRAWEVENT_SCINTWAVEFORMCONTAINER_H - -#include "ScintRawEvent/ScintWaveform.h" -#include "AthContainers/DataVector.h" -#include "AthenaKernel/CLASS_DEF.h" - -// Make this a class in case we need to add some functions -class ScintWaveformContainer : public DataVector<ScintWaveform> { - public: - void print() const; -}; - -std::ostream -&operator<<(std::ostream &out, const ScintWaveformContainer &container); - -CLASS_DEF(ScintWaveformContainer, 1215612331, 1 ) -SG_BASE(ScintWaveformContainer, DataVector<ScintWaveform>); - -#endif // SCINTRAWEVENT_SCINTWAVEFORMCONTAINER_H diff --git a/Scintillator/ScintRawEvent/ScintRawEvent/selection.xml b/Scintillator/ScintRawEvent/ScintRawEvent/selection.xml deleted file mode 100644 index f60a803c76b1a6520b65869aa57a88b347507600..0000000000000000000000000000000000000000 --- a/Scintillator/ScintRawEvent/ScintRawEvent/selection.xml +++ /dev/null @@ -1,7 +0,0 @@ -<lcgdict> - <class name="ScintWaveformContainer" id="f40fd51f-b70e-4cc8-971d-b6ab5c751a86" /> - <class name="DataVector<ScintWaveform>" id="e4b393bd-e9b8-458a-8691-b0ebbfd6999c" /> - <class name="std::vector<ScintWaveform*>" /> - <class name="std::vector<const ScintWaveform*>" /> - <class name="ScintWaveform" /> -</lcgdict> diff --git a/Scintillator/ScintRecAlgs/src/components/ScintRecAlgs_entries.cxx b/Scintillator/ScintRecAlgs/src/components/ScintRecAlgs_entries.cxx deleted file mode 100644 index 9634fc8f9a4adbd9d6950b1727fc5f19f72d7ec0..0000000000000000000000000000000000000000 --- a/Scintillator/ScintRecAlgs/src/components/ScintRecAlgs_entries.cxx +++ /dev/null @@ -1,5 +0,0 @@ -#include "../ScintWaveformRecAlg.h" -#include "../ScintClockRecAlg.h" - -DECLARE_COMPONENT( ScintWaveformRecAlg ) -DECLARE_COMPONENT( ScintClockRecAlg ) diff --git a/Simulation/G4Faser/G4FaserAlg/CMakeLists.txt b/Simulation/G4Faser/G4FaserAlg/CMakeLists.txt index 574f02421cdf6125e80cc0b83497e077db1e321b..76828930fd30794c8677e23fed1699158a80b091 100644 --- a/Simulation/G4Faser/G4FaserAlg/CMakeLists.txt +++ b/Simulation/G4Faser/G4FaserAlg/CMakeLists.txt @@ -26,8 +26,18 @@ atlas_add_component( G4FaserAlg INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} LINK_LIBRARIES ${GEANT4_LIBRARIES} ${EIGEN_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib AthenaBaseComps AthenaKernel GaudiKernel G4AtlasInterfaces G4FaserAlgLib G4AtlasAlgLib SGTools StoreGateLib SGtests EventInfo GeneratorObjects FaserMCTruthBaseLib ) -atlas_add_test( G4FaserAlgConfig_Test - SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/test/runG4.py +atlas_add_test( G4FaserAlgConfig_TestFaser + SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/test/G4FaserAlgConfigNew_Test.py GeoModel.FaserVersion="'FASER-01'" IOVDb.GlobalTag="'OFLCOND-FASER-01'" Output.HITSFileName='faser.HITS.pool.root' + PROPERTIES TIMEOUT 300 + PROPERTIES WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + +atlas_add_test( G4FaserAlgConfig_TestFaserNu + SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/test/G4FaserAlgConfigNew_Test.py GeoModel.FaserVersion="'FASERNU-02'" IOVDb.GlobalTag="'OFLCOND-FASER-02'" Output.HITSFileName='faserNu.HITS.pool.root' + PROPERTIES TIMEOUT 300 + PROPERTIES WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + +atlas_add_test( G4FaserAlgConfig_TestTestbeam + SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/test/G4FaserAlgConfigNew_Test.py GeoModel.FaserVersion="'FASER-TB00'" IOVDb.GlobalTag="'OFLCOND-FASER-02'" Output.HITSFileName='tb.HITS.pool.root' PROPERTIES TIMEOUT 300 PROPERTIES WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) diff --git a/Simulation/G4Faser/G4FaserAlg/python/G4FaserAlgConfigNew.py b/Simulation/G4Faser/G4FaserAlg/python/G4FaserAlgConfigNew.py index 7e24163ad90fc101363f39bc33e2c48670b3dd9a..82c35779d0225b979cf8d04c2f3b20bd17f5f930 100644 --- a/Simulation/G4Faser/G4FaserAlg/python/G4FaserAlgConfigNew.py +++ b/Simulation/G4Faser/G4FaserAlg/python/G4FaserAlgConfigNew.py @@ -1,230 +1,156 @@ -# -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -# -from AthenaConfiguration.ComponentFactory import CompFactory -# -# Manager classes for detector geometry and sensitive detectors -# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS and FASER collaborations from G4FaserServices.G4FaserServicesConfigNew import DetectorGeometrySvcCfg, PhysicsListSvcCfg +from FaserISF_Services.FaserISF_ServicesConfigNew import FaserTruthServiceCfg, FaserInputConverterCfg +from FaserISF_Services.FaserISF_ServicesCoreConfigNew import FaserGeoIDSvcCfg from G4FaserTools.G4FaserToolsConfigNew import SensitiveDetectorMasterToolCfg +from G4FaserTools.G4FaserToolsConfigNew import FastSimulationMasterToolCfg from G4FaserServices.G4FaserUserActionConfigNew import UserActionSvcCfg -from G4FaserServices.G4FaserUserActionConfigNew import UserActionMaterialStepRecorderSvcCfg -# from G4AtlasApps.G4Atlas_MetadataNew import writeSimulationParametersMetadata -# -# Framework utilities -# -from FaserISF_Services.FaserISF_ServicesConfigNew import FaserTruthServiceCfg, FaserInputConverterCfg, FaserGeoIDSvcCfg -# -# from G4FaserAlg.G4FaserAlgConf import G4FaserAlg -G4FaserAlg=CompFactory.G4FaserAlg - -def G4FaserAlgCfg(ConfigFlags, name='G4FaserAlg', **kwargs): - # - # add Services to G4AtlasAlg - # +# from G4FaserApps.G4Faser_MetadataNew import writeSimulationParametersMetadata +from AthenaConfiguration.ComponentFactory import CompFactory +from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg + + +def G4FaserAlgBasicCfg(ConfigFlags, name="G4FaserAlg", **kwargs): + """Return ComponentAccumulator configured for Faser G4 simulation, without output""" + # wihout output result = DetectorGeometrySvcCfg(ConfigFlags) - kwargs.setdefault('DetGeoSvc', result.getService("DetectorGeometrySvc")) - # - # MC particle container names - # - kwargs.setdefault("InputTruthCollection", "GEN_EVENT") + kwargs.setdefault("DetGeoSvc", result.getService("DetectorGeometrySvc")) + + kwargs.setdefault("InputTruthCollection", "BeamTruthEvent") #tocheck -are these string inputs? kwargs.setdefault("OutputTruthCollection", "TruthEvent") - # - # Option to free memory by dropping GeoModel after construction - # - # if ConfigFlags.Sim.ReleaseGeoModel: - kwargs.setdefault('ReleaseGeoModel', ConfigFlags.Sim.ReleaseGeoModel) - # - # Record the particle flux during the simulation - # - #if ConfigFlags.Sim.RecordFlux: - kwargs.setdefault('RecordFlux' , ConfigFlags.Sim.RecordFlux) - # - # Treatment of bad events - # - # if ConfigFlags.Sim.FlagAbortedEvents: + ## Killing neutrinos + + ## Don"t drop the GeoModel + kwargs.setdefault("ReleaseGeoModel", ConfigFlags.Sim.ReleaseGeoModel) + + ## Record the particle flux during the simulation + kwargs.setdefault("RecordFlux", ConfigFlags.Sim.RecordFlux) + + if ConfigFlags.Sim.FlagAbortedEvents: ## default false - kwargs.setdefault('FlagAbortedEvents' ,ConfigFlags.Sim.FlagAbortedEvents) - if ConfigFlags.Sim.FlagAbortedEvents and ConfigFlags.Sim.KillAbortedEvents: - print('WARNING When G4AtlasAlg.FlagAbortedEvents is True G4AtlasAlg.KillAbortedEvents should be False!!! Setting G4AtlasAlg.KillAbortedEvents = False now!') - kwargs.setdefault('KillAbortedEvents' ,False) - # if ConfigFlags.Sim.KillAbortedEvents: - ## default true - kwargs.setdefault('KillAbortedEvents' ,ConfigFlags.Sim.KillAbortedEvents) - # - # Random numbers - # - from RngComps.RandomServices import AthEngines, RNG - if ConfigFlags.Random.Engine in AthEngines.keys(): - result.merge(RNG(ConfigFlags.Random.Engine, name="AthRNGSvc")) - kwargs.setdefault("AtRndmGenSvc",result.getService("AthRNGSvc")) + kwargs.setdefault("FlagAbortedEvents", ConfigFlags.Sim.FlagAbortedEvents) + if ConfigFlags.Sim.FlagAbortedEvents and ConfigFlags.Sim.KillAbortedEvents: + print("WARNING When G4FaserAlg.FlagAbortedEvents is True G4FaserAlg.KillAbortedEvents should be False. Setting G4FaserAlg.KillAbortedEvents = False now.") + kwargs.setdefault("KillAbortedEvents", False) + + ## default true + kwargs.setdefault("KillAbortedEvents", ConfigFlags.Sim.KillAbortedEvents) + + from RngComps.RandomServices import RNG + result.merge(RNG(ConfigFlags.Random.Engine, name="AthRNGSvc")) + kwargs.setdefault("AtRndmGenSvc", result.getService("AthRNGSvc")) kwargs.setdefault("RandomGenerator", "athena") - # - # Multi-threading settings - # - is_hive = ConfigFlags.Concurrency.NumThreads > 1 - kwargs.setdefault('MultiThreading', is_hive) - # - # What truth information to save? - # + + # Multi-threading settinggs + #is_hive = (concurrencyProps.ConcurrencyFlags.NumThreads() > 0) + is_hive = ConfigFlags.Concurrency.NumThreads > 0 + kwargs.setdefault("MultiThreading", is_hive) + accMCTruth = FaserTruthServiceCfg(ConfigFlags) result.merge(accMCTruth) - kwargs.setdefault('TruthRecordService', result.getService("FaserISF_TruthService")) - #kwargs.setdefault('TruthRecordService', ConfigFlags.Sim.TruthStrategy) # TODO need to have manual override (simFlags.TruthStrategy.TruthServiceName()) - # - # Locates detector region for space points (no longer used by G4FaserAlg) - # - accGeoID = FaserGeoIDSvcCfg(ConfigFlags) - result.merge(accGeoID) - #kwargs.setdefault('GeoIDSvc', result.getService('ISF_FaserGeoIDSvc')) - # - # Converts generator particles to a proprietary type managed by ISF - # + kwargs.setdefault("TruthRecordService", result.getService("FaserISF_TruthService")) + #kwargs.setdefault("TruthRecordService", ConfigFlags.Sim.TruthStrategy) # TODO need to have manual override (simFlags.TruthStrategy.TruthServiceName()) + + # accGeoID = FaserGeoIDSvcCfg(ConfigFlags) + # result.merge(accGeoID) + # kwargs.setdefault("GeoIDSvc", result.getService("ISF_FaserGeoIDSvc")) + + #input converter accInputConverter = FaserInputConverterCfg(ConfigFlags) result.merge(accInputConverter) - kwargs.setdefault('InputConverter', result.getService("ISF_FaserInputConverter")) - # - # Sensitive detector master tool - # - accSensitiveDetector = SensitiveDetectorMasterToolCfg(ConfigFlags) - result.merge(accSensitiveDetector) - kwargs.setdefault('SenDetMasterTool', result.getPublicTool("SensitiveDetectorMasterTool")) #NOTE - is still a public tool - # + kwargs.setdefault("InputConverter", result.getService("ISF_FaserInputConverter")) + + #sensitive detector master tool + SensitiveDetector = result.popToolsAndMerge(SensitiveDetectorMasterToolCfg(ConfigFlags)) + result.addPublicTool(SensitiveDetector) + kwargs.setdefault("SenDetMasterTool", result.getPublicTool(SensitiveDetector.name)) + + #fast simulation master tool + FastSimulation = result.popToolsAndMerge(FastSimulationMasterToolCfg(ConfigFlags)) + result.addPublicTool(FastSimulation) + kwargs.setdefault("FastSimMasterTool", result.getPublicTool(FastSimulation.name)) + #Write MetaData container - # - #result.merge(writeSimulationParametersMetadata(ConfigFlags)) - # + # result.merge(writeSimulationParametersMetadata(ConfigFlags)) + #User action services (Slow...) - # result.merge( UserActionSvcCfg(ConfigFlags) ) - kwargs.setdefault('UserActionSvc', result.getService( "G4UA::UserActionSvc") ) + kwargs.setdefault("UserActionSvc", result.getService( "G4UA::UserActionSvc") ) #PhysicsListSvc result.merge( PhysicsListSvcCfg(ConfigFlags) ) - kwargs.setdefault('PhysicsListSvc', result.getService( "PhysicsListSvc") ) + kwargs.setdefault("PhysicsListSvc", result.getService( "PhysicsListSvc") ) - # - # Output level - # ## G4AtlasAlg verbosities (available domains = Navigator, Propagator, Tracking, Stepping, Stacking, Event) ## Set stepper verbose = 1 if the Athena logging level is <= DEBUG # TODO: Why does it complain that G4AtlasAlgConf.G4AtlasAlg has no "Verbosities" object? Fix. - verbosities=dict(Placeholder = '0') - if "OutputLevel" in kwargs and kwargs["OutputLevel"] <= 2 : - verbosities["Tracking"]='1' - print (verbosities) - kwargs.setdefault('Verbosities', verbosities) - # - # Set commands for the G4FaserAlg - # + # FIXME GaudiConfig2 seems to fail to distinguish an empty dict {} from None + verbosities=dict(foo="bar") + #from AthenaCommon.AppMgr import ServiceMgr + #if ServiceMgr.MessageSvc.OutputLevel <= 2: + # verbosities["Tracking"]="1" + # print verbosities + kwargs.setdefault("Verbosities", verbosities) + + # Set commands for the G4AtlasAlg kwargs.setdefault("G4Commands", ConfigFlags.Sim.G4Commands) - result.addEventAlgo(G4FaserAlg(name, **kwargs)) + result.addEventAlgo(CompFactory.G4FaserAlg(name, **kwargs)) + return result -def G4FaserMaterialStepRecorderAlgCfg(ConfigFlags, name='G4FaserAlg', **kwargs): - # - # add Services to G4AtlasAlg - # - result = DetectorGeometrySvcCfg(ConfigFlags) - kwargs.setdefault('DetGeoSvc', result.getService("DetectorGeometrySvc")) - # - # MC particle container names - # - kwargs.setdefault("InputTruthCollection", "GEN_EVENT") - kwargs.setdefault("OutputTruthCollection", "TruthEvent") - # - # Option to free memory by dropping GeoModel after construction - # - # if ConfigFlags.Sim.ReleaseGeoModel: - kwargs.setdefault('ReleaseGeoModel', ConfigFlags.Sim.ReleaseGeoModel) - # - # Record the particle flux during the simulation - # - #if ConfigFlags.Sim.RecordFlux: - kwargs.setdefault('RecordFlux' , ConfigFlags.Sim.RecordFlux) - # - # Treatment of bad events - # - # if ConfigFlags.Sim.FlagAbortedEvents: - ## default false - kwargs.setdefault('FlagAbortedEvents' ,ConfigFlags.Sim.FlagAbortedEvents) - if ConfigFlags.Sim.FlagAbortedEvents and ConfigFlags.Sim.KillAbortedEvents: - print('WARNING When G4AtlasAlg.FlagAbortedEvents is True G4AtlasAlg.KillAbortedEvents should be False!!! Setting G4AtlasAlg.KillAbortedEvents = False now!') - kwargs.setdefault('KillAbortedEvents' ,False) - # if ConfigFlags.Sim.KillAbortedEvents: - ## default true - kwargs.setdefault('KillAbortedEvents' ,ConfigFlags.Sim.KillAbortedEvents) - # - # Random numbers - # - from RngComps.RandomServices import AthEngines, RNG - if ConfigFlags.Random.Engine in AthEngines.keys(): - result.merge(RNG(ConfigFlags.Random.Engine, name="AthRNGSvc")) - kwargs.setdefault("AtRndmGenSvc",result.getService("AthRNGSvc")) - kwargs.setdefault("RandomGenerator", "athena") - # - # Multi-threading settings - # - is_hive = ConfigFlags.Concurrency.NumThreads > 1 - kwargs.setdefault('MultiThreading', is_hive) - # - # What truth information to save? - # - accMCTruth = FaserTruthServiceCfg(ConfigFlags) - result.merge(accMCTruth) - kwargs.setdefault('TruthRecordService', result.getService("FaserISF_TruthService")) - #kwargs.setdefault('TruthRecordService', ConfigFlags.Sim.TruthStrategy) # TODO need to have manual override (simFlags.TruthStrategy.TruthServiceName()) - # - # Locates detector region for space points (no longer used by G4FaserAlg) - # - accGeoID = FaserGeoIDSvcCfg(ConfigFlags) - result.merge(accGeoID) - #kwargs.setdefault('GeoIDSvc', result.getService('ISF_FaserGeoIDSvc')) - # - # Converts generator particles to a proprietary type managed by ISF - # - accInputConverter = FaserInputConverterCfg(ConfigFlags) - result.merge(accInputConverter) - kwargs.setdefault('InputConverter', result.getService("ISF_FaserInputConverter")) - # - # Sensitive detector master tool - # - accSensitiveDetector = SensitiveDetectorMasterToolCfg(ConfigFlags) - result.merge(accSensitiveDetector) - kwargs.setdefault('SenDetMasterTool', result.getPublicTool("SensitiveDetectorMasterTool")) #NOTE - is still a public tool - # - #Write MetaData container - # - #result.merge(writeSimulationParametersMetadata(ConfigFlags)) - # - #User action services (Slow...) - # - result.merge(UserActionMaterialStepRecorderSvcCfg(ConfigFlags) ) - kwargs.setdefault('UserActionSvc', result.getService( "G4UA::UserActionSvc") ) +def G4FaserAlgOutputCfg(ConfigFlags): + """ + Return ComponentAccumulator with output for G4 simulation. Not standalone. - #PhysicsListSvc - result.merge( PhysicsListSvcCfg(ConfigFlags) ) - kwargs.setdefault('PhysicsListSvc', result.getService( "PhysicsListSvc") ) + follows G4Atlas.flat.configuration.py + """ + ItemList = ["EventInfo#*", + "McEventCollection#TruthEvent"] - # - # Output level - # - ## G4AtlasAlg verbosities (available domains = Navigator, Propagator, Tracking, Stepping, Stacking, Event) - ## Set stepper verbose = 1 if the Athena logging level is <= DEBUG - # TODO: Why does it complain that G4AtlasAlgConf.G4AtlasAlg has no "Verbosities" object? Fix. - verbosities=dict(Placeholder = '0') - if "OutputLevel" in kwargs and kwargs["OutputLevel"] <= 2 : - verbosities["Tracking"]='1' - print (verbosities) - kwargs.setdefault('Verbosities', verbosities) - # - # Set commands for the G4FaserAlg - # - kwargs.setdefault("G4Commands", ConfigFlags.Sim.G4Commands) + if ConfigFlags.Sim.IncludeParentsInG4Event: + ItemList += ["McEventCollection#BeamTruthEvent"] + + if ConfigFlags.Detector.EnableEmulsion: + ItemList += ["NeutrinoHitCollection#*"] + + if ConfigFlags.Detector.EnableFaserSCT: + ItemList += ["FaserSiHitCollection#*"] + + if ConfigFlags.Detector.EnableEcal: + ItemList += ["CaloHitCollection#*"] + + if ConfigFlags.Detector.EnableVeto: + ItemList += ["ScintHitCollection#VetoHits"] + + if ConfigFlags.Detector.EnableTrigger: + ItemList += ["ScintHitCollection#TriggerHits"] + + if ConfigFlags.Detector.EnablePreshower: + ItemList += ["ScintHitCollection#PreshowerHits"] + + # TimingAlg + # ItemList += ["RecoTimingObj#EVNTtoHITS_timings"] + + acc = OutputStreamCfg(ConfigFlags,"HITS", ItemList=ItemList, disableEventTag=True) + + # Make stream aware of aborted events + OutputStreamHITS = acc.getEventAlgo("OutputStreamHITS") + OutputStreamHITS.AcceptAlgs += ["G4FaserAlg"] + + # G4Atlas.flat.configuration.py#0333 onwards + # FIXME unifyset now fails + #PoolAttributes = ["TREE_BRANCH_OFFSETTAB_LEN = '100'"] + #PoolAttributes += ["DatabaseName = '" + ConfigFlags.Output.HITSFileName + "'; ContainerName = 'TTree=CollectionTree'; TREE_AUTO_FLUSH = '1'"] + #acc.addService(CompFactory.AthenaPoolCnvSvc(PoolAttributes=PoolAttributes)) + + return acc - result.addEventAlgo(G4FaserAlg(name, **kwargs)) - return result +def G4FaserAlgCfg(ConfigFlags, name="G4FaserAlg", **kwargs): + """Return ComponentAccumulator configured for Faser G4 simulation, with output""" + acc = G4FaserAlgBasicCfg(ConfigFlags, **kwargs) + acc.merge(G4FaserAlgOutputCfg(ConfigFlags)) + return acc diff --git a/Simulation/G4Faser/G4FaserAlg/src/G4FaserAlg.cxx b/Simulation/G4Faser/G4FaserAlg/src/G4FaserAlg.cxx index 50cbcec1aff8dca123e64e2a4c4effb9dde42061..3ce528b032fd0ce76494e114623aa753dbc0345c 100644 --- a/Simulation/G4Faser/G4FaserAlg/src/G4FaserAlg.cxx +++ b/Simulation/G4Faser/G4FaserAlg/src/G4FaserAlg.cxx @@ -123,7 +123,7 @@ void G4FaserAlg::initializeOnce() std::unique_ptr<G4AtlasUserWorkerThreadInitialization> workerInit = std::make_unique<G4AtlasUserWorkerThreadInitialization>(); workerInit->SetDetGeoSvc( m_detGeoSvc.typeAndName() ); - workerInit->SetSDMasterTool( m_senDetTool.typeAndName() ); + // workerInit->SetSDMasterTool( m_senDetTool.typeAndName() ); workerInit->SetFastSimMasterTool( m_fastSimTool.typeAndName() ); runMgr->SetUserInitialization( workerInit.release() ); std::unique_ptr<G4AtlasActionInitialization> actionInitialization = @@ -140,7 +140,6 @@ void G4FaserAlg::initializeOnce() runMgr->SetRecordFlux( m_recordFlux, std::make_unique<G4FaserFluxRecorder>() ); runMgr->SetLogLevel( int(msg().level()) ); // Synch log levels runMgr->SetDetGeoSvc( m_detGeoSvc.typeAndName() ); - runMgr->SetSDMasterTool(m_senDetTool.typeAndName() ); runMgr->SetFastSimMasterTool(m_fastSimTool.typeAndName() ); runMgr->SetPhysListSvc(m_physListSvc.typeAndName() ); std::unique_ptr<G4AtlasActionInitialization> actionInitialization = @@ -190,7 +189,7 @@ void G4FaserAlg::initializeOnce() rm->RunInitialization(); } - ATH_MSG_INFO( "retireving the Detector Geometry Service" ); + ATH_MSG_INFO( "retrieving the Detector Geometry Service" ); if(m_detGeoSvc.retrieve().isFailure()) { throw std::runtime_error("Could not initialize ATLAS DetectorGeometrySvc!"); } diff --git a/Simulation/G4Faser/G4FaserAlg/test/G4FaserAlgConfigNew_Test.py b/Simulation/G4Faser/G4FaserAlg/test/G4FaserAlgConfigNew_Test.py new file mode 100644 index 0000000000000000000000000000000000000000..709797ae28bec863f565eba2aa662d8bcefc0e2e --- /dev/null +++ b/Simulation/G4Faser/G4FaserAlg/test/G4FaserAlgConfigNew_Test.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python +"""Run tests on G4FaserAlgConfigNew + +Copyright (C) 2002-2021 CERN for the benefit of the ATLAS and FASER collaborations +""" + +if __name__ == '__main__': + + import time + a = time.time() +# +# Set up logging and config behaviour +# + from AthenaCommon.Logging import log + from AthenaCommon.Constants import DEBUG + from AthenaCommon.Configurable import Configurable + log.setLevel(DEBUG) + Configurable.configurableRun3Behavior = 1 +# +# Import and set config flags +# + from CalypsoConfiguration.AllConfigFlags import ConfigFlags + ConfigFlags.Exec.MaxEvents = 4 # can be overridden from command line with --maxEvt=<number> + ConfigFlags.Exec.SkipEvents = 0 # can be overridden from command line with --skipEvt=<number> + from AthenaConfiguration.Enums import ProductionStep + ConfigFlags.Common.ProductionStep = ProductionStep.Simulation +# +# All these must be specified to avoid auto-configuration +# + ConfigFlags.Input.RunNumber = [12345] #Isn't updating - todo: investigate + ConfigFlags.Input.OverrideRunNumber = True + ConfigFlags.Input.LumiBlockNumber = [1] + ConfigFlags.Input.isMC = True +# +# Output file name +# + ConfigFlags.Output.HITSFileName = "my.HITS.pool.root" # can be overridden from command line with Output.HITSFileName=<name> +# +# Sim ConfigFlags +# + ConfigFlags.Sim.Layout = "FASER" + ConfigFlags.Sim.PhysicsList = "FTFP_BERT" + ConfigFlags.Sim.ReleaseGeoModel = False + ConfigFlags.Sim.IncludeParentsInG4Event = True # Controls whether BeamTruthEvent is written to output HITS file + ConfigFlags.addFlag("Sim.Gun",{"Generator" : "SingleParticle"}) # Property bag for particle gun keyword:argument pairs + + ConfigFlags.GeoModel.FaserVersion = "FASERNU-02" # Geometry set-up + ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-02" # Conditions set-up + ConfigFlags.addFlag("Input.InitialTimeStamp", 0) # To avoid autoconfig + ConfigFlags.GeoModel.Align.Dynamic = False +# +# Override flags above from command line +# + import sys + ConfigFlags.fillFromArgs(sys.argv[1:]) +# +# By being a little clever, we can steer the geometry setup from the command line using GeoModel.FaserVersion +# +# Start with minimal configuration for Testbeam +# + detectors = ['Veto', 'Preshower', 'FaserSCT', 'Ecal'] + if ConfigFlags.GeoModel.FaserVersion.count("TB") == 0 : + detectors += ['Trigger', 'Dipole'] + if ConfigFlags.GeoModel.FaserVersion.count("FASERNU") > 0 : + detectors += ['Emulsion'] +# +# Setup detector flags +# + from CalypsoConfiguration.DetectorConfigFlags import setupDetectorsFromList + setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True) +# +# Finalize flags +# + ConfigFlags.lock() +# +# Initialize a new component accumulator +# + from CalypsoConfiguration.MainServicesConfig import MainServicesCfg + cfg = MainServicesCfg(ConfigFlags) +# +# Check whether a real input file was specified +# + if ConfigFlags.Input.Files and ConfigFlags.Input.Files != ["_CALYPSO_GENERIC_INPUTFILE_NAME_"] : + print("Input.Files = ",ConfigFlags.Input.Files) +# +# If so, set up to read it +# + from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg + cfg.merge(PoolReadCfg(ConfigFlags)) +# +# If not, configure the particle gun as requested, or using defaults +# + else : +# +# Particle gun generators - the generator, energy, angle, particle type, position, etc can be modified by passing keyword arguments +# + from FaserParticleGun.FaserParticleGunConfig import FaserParticleGunCfg + cfg.merge(FaserParticleGunCfg(ConfigFlags)) + from McEventSelector.McEventSelectorConfig import McEventSelectorCfg + cfg.merge(McEventSelectorCfg(ConfigFlags)) +# +# Output file +# + from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg + cfg.merge(PoolWriteCfg(ConfigFlags)) +# +# Add the G4FaserAlg +# + from G4FaserAlg.G4FaserAlgConfigNew import G4FaserAlgCfg + cfg.merge(G4FaserAlgCfg(ConfigFlags)) +# +# Dump config +# + from AthenaConfiguration.ComponentFactory import CompFactory + cfg.addEventAlgo(CompFactory.JobOptsDumperAlg(FileName="G4FaserTestConfig.txt")) + cfg.getService("StoreGateSvc").Dump = True + cfg.getService("ConditionStore").Dump = True + cfg.printConfig(withDetails=True, summariseProps = False) # gags on ParticleGun if summariseProps = True? + + ConfigFlags.dump() + f = open("test.pkl","wb") + cfg.store(f) + f.close() +# +# Execute and finish +# + sc = cfg.run() + + b = time.time() + log.info("Run G4FaserAlg in " + str(b-a) + " seconds") +# +# Success should be 0 +# + sys.exit(not sc.isSuccess()) + diff --git a/Simulation/G4Faser/G4FaserAlg/test/runEcal.py b/Simulation/G4Faser/G4FaserAlg/test/runEcal.py deleted file mode 100755 index eaef5c20150c9ffc1b0e2a59d6b8004a7dbf0310..0000000000000000000000000000000000000000 --- a/Simulation/G4Faser/G4FaserAlg/test/runEcal.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env python -if __name__ == "__main__": - import os - import sys - import GaudiPython - import ParticleGun as PG - from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator - from AthenaConfiguration.ComponentFactory import CompFactory - from AthenaCommon.AppMgr import * - from AthenaCommon.Logging import log, logging - from AthenaCommon.SystemOfUnits import TeV - from AthenaCommon.PhysicalConstants import pi - from AthenaCommon.Constants import VERBOSE, INFO - from AthenaCommon.Configurable import Configurable - from CalypsoConfiguration.AllConfigFlags import ConfigFlags - from CalypsoConfiguration.MainServicesConfig import MainServicesCfg - from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg - from McEventSelector.McEventSelectorConfig import McEventSelectorCfg - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg - from G4FaserAlg.G4FaserAlgConfigNew import G4FaserAlgCfg - from G4FaserServices.G4FaserServicesConfigNew import G4GeometryNotifierSvcCfg -# -# Set up logging and new style config -# - log.setLevel(VERBOSE) - Configurable.configurableRun3Behavior = True -# -# Input settings (Generator file) -# -# from AthenaConfiguration.TestDefaults import defaultTestFiles -# ConfigFlags.Input.Files = defaultTestFiles.EVNT -# -# Alternatively, these must ALL be explicitly set to run without an input file -# (if missing, it will try to read metadata from a non-existent file and crash) -# - ConfigFlags.Input.Files = [""] - ConfigFlags.Input.isMC = True - ConfigFlags.Input.RunNumber = 12345 - ConfigFlags.Input.Collections = [""] - ConfigFlags.Input.ProjectName = "mc19" - ConfigFlags.Common.isOnline = False - ConfigFlags.Beam.Type = "collisions" - ConfigFlags.Beam.Energy = 7*TeV # Informational, does not affect simulation - ConfigFlags.GeoModel.FaserVersion = "FASER-01" # Always needed - ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-01" # Always needed; must match FaserVersion -# Workaround for bug/missing flag; unimportant otherwise - ConfigFlags.addFlag("Input.InitialTimeStamp", 0) -# Workaround to avoid problematic ISF code - ConfigFlags.GeoModel.Layout = "Development" -# -# Output settings -# - ConfigFlags.Output.HITSFileName = "ecalNone.1k.HITS.pool.root" - ConfigFlags.GeoModel.GeoExportFile = "faserGeo.db" # Optional dump of geometry for browsing in vp1light -# -# Geometry-related settings -# Do not change! -# - detectors = ['Veto', 'Trigger', 'Preshower', 'FaserSCT', 'Dipole', 'Ecal'] - from CalypsoConfiguration.DetectorConfigFlags import setupDetectorsFromList - setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True) - ConfigFlags.GeoModel.Align.Dynamic = False - ConfigFlags.Sim.ReleaseGeoModel = False -# -# All flags should be set before calling lock -# - ConfigFlags.lock() -# -# Construct ComponentAccumulator -# - acc = MainServicesCfg(ConfigFlags) -# -# Particle Gun generator (comment out to read generator file) -# Raw energies (without units given) are interpreted as MeV -# - pg = PG.ParticleGun() - pg.McEventKey = "GEN_EVENT" - pg.randomSeed = 1234567 - pg.sampler.pid = 11 - pg.sampler.mom = PG.EThetaMPhiSampler(energy=1*TeV, theta=[0, pi/200], phi=[0, 2*pi], mass=0.511) - pg.sampler.pos = PG.PosSampler(x=[-5.0, 5.0], y=[-5.0, 5.0], z=2730.0, t=0.0) - acc.addEventAlgo(pg, "AthBeginSeq") # to run *before* G4 -# -# Only one of these two should be used in a given job -# (MCEventSelectorCfg for generating events with no input file, -# PoolReadCfg when reading generator data from an input file) -# - acc.merge(McEventSelectorCfg(ConfigFlags)) - # acc.merge(PoolReadCfg(ConfigFlags)) -# -# Output stream configuration -# - acc.merge(OutputStreamCfg(ConfigFlags, - "HITS", - ["EventInfo#*", - "McEventCollection#TruthEvent", - "McEventCollection#GEN_EVENT", - "ScintHitCollection#*", - "FaserSiHitCollection#*", - "CaloHitCollection#*" - ], disableEventTag=True)) - acc.getEventAlgo("OutputStreamHITS").AcceptAlgs = ["G4FaserAlg"] # optional - acc.getEventAlgo("OutputStreamHITS").WritingTool.ProcessingTag = "StreamHITS" # required -# -# Here is the configuration of the Geant4 pieces -# - acc.merge(FaserGeometryCfg(ConfigFlags)) - acc.merge(G4FaserAlgCfg(ConfigFlags)) - acc.addService(G4GeometryNotifierSvcCfg(ConfigFlags, ActivateLVNotifier=True)) -# -# Verbosity -# -# ConfigFlags.dump() -# logging.getLogger('forcomps').setLevel(VERBOSE) -# acc.foreach_component("*").OutputLevel = VERBOSE -# acc.foreach_component("*ClassID*").OutputLevel = INFO -# acc.getService("StoreGateSvc").Dump=True -# acc.getService("ConditionStore").Dump=True -# acc.printConfig() - f=open('FaserG4AppCfg_EVNT.pkl','wb') - acc.store(f) - f.close() -# -# Execute and finish -# - sys.exit(int(acc.run(maxEvents=1000).isFailure())) diff --git a/Simulation/G4Faser/G4FaserAlg/test/runG4.py b/Simulation/G4Faser/G4FaserAlg/test/runG4.py deleted file mode 100644 index 9538edac50589c38fbfc3a54bb0f512359232861..0000000000000000000000000000000000000000 --- a/Simulation/G4Faser/G4FaserAlg/test/runG4.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env python -if __name__ == "__main__": - import os - import sys - import GaudiPython - import ParticleGun as PG - from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator - from AthenaConfiguration.ComponentFactory import CompFactory - from AthenaCommon.AppMgr import * - from AthenaCommon.Logging import log, logging - from AthenaCommon.SystemOfUnits import TeV - from AthenaCommon.PhysicalConstants import pi - from AthenaCommon.Constants import VERBOSE, INFO - from AthenaCommon.Configurable import Configurable - from CalypsoConfiguration.AllConfigFlags import ConfigFlags - from CalypsoConfiguration.MainServicesConfig import MainServicesCfg - from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg - from McEventSelector.McEventSelectorConfig import McEventSelectorCfg - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg - from G4FaserAlg.G4FaserAlgConfigNew import G4FaserAlgCfg - from G4FaserServices.G4FaserServicesConfigNew import G4GeometryNotifierSvcCfg -# -# Set up logging and new style config -# - log.setLevel(VERBOSE) - Configurable.configurableRun3Behavior = True -# -# Input settings (Generator file) -# -# from AthenaConfiguration.TestDefaults import defaultTestFiles -# ConfigFlags.Input.Files = defaultTestFiles.EVNT -# -# Alternatively, these must ALL be explicitly set to run without an input file -# (if missing, it will try to read metadata from a non-existent file and crash) -# - ConfigFlags.Input.Files = [""] - ConfigFlags.Input.isMC = True - ConfigFlags.Input.RunNumber = 12345 - ConfigFlags.Input.Collections = [""] - ConfigFlags.Input.ProjectName = "mc19" - ConfigFlags.Common.isOnline = False - ConfigFlags.Beam.Type = "collisions" - ConfigFlags.Beam.Energy = 7*TeV # Informational, does not affect simulation - ConfigFlags.GeoModel.FaserVersion = "FASER-01" # Always needed - ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-01" # Always needed; must match FaserVersion -# Workaround for bug/missing flag; unimportant otherwise - ConfigFlags.addFlag("Input.InitialTimeStamp", 0) -# Workaround to avoid problematic ISF code - ConfigFlags.GeoModel.Layout = "Development" -# -# Output settings -# - ConfigFlags.Output.HITSFileName = "my.HITS.pool.root" - ConfigFlags.GeoModel.GeoExportFile = "faserGeo.db" # Optional dump of geometry for browsing in vp1light -# -# Geometry-related settings -# Do not change! -# - detectors = ['Veto', 'Trigger', 'Preshower', 'FaserSCT', 'Dipole', 'Ecal'] - from CalypsoConfiguration.DetectorConfigFlags import setupDetectorsFromList - setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True) - ConfigFlags.GeoModel.Align.Dynamic = False - ConfigFlags.Sim.ReleaseGeoModel = False -# -# Physics list -# - ConfigFlags.Sim.PhysicsList = "FTFP_BERT" -# -# All flags should be set before calling lock -# - ConfigFlags.lock() -# -# Construct ComponentAccumulator -# - acc = MainServicesCfg(ConfigFlags) -# -# Particle Gun generator (comment out to read generator file) -# Raw energies (without units given) are interpreted as MeV -# - pg = PG.ParticleGun() - pg.McEventKey = "GEN_EVENT" - pg.randomSeed = 123456 - pg.sampler.pid = -13 - pg.sampler.mom = PG.EThetaMPhiSampler(energy=1*TeV, theta=[0, pi/20], phi=[0, 2*pi], mass=105.71) - pg.sampler.pos = PG.PosSampler(x=[-5, 5], y=[-5, 5], z=-2100.0, t=0.0) - acc.addEventAlgo(pg, "AthBeginSeq") # to run *before* G4 -# -# Only one of these two should be used in a given job -# (MCEventSelectorCfg for generating events with no input file, -# PoolReadCfg when reading generator data from an input file) -# - acc.merge(McEventSelectorCfg(ConfigFlags)) - # acc.merge(PoolReadCfg(ConfigFlags)) -# -# Output stream configuration -# - acc.merge(OutputStreamCfg(ConfigFlags, - "HITS", - ["EventInfo#*", - "McEventCollection#TruthEvent", - "McEventCollection#GEN_EVENT", - "ScintHitCollection#*", - "FaserSiHitCollection#*", - "CaloHitCollection#*" - ], disableEventTag=True)) - acc.getEventAlgo("OutputStreamHITS").AcceptAlgs = ["G4FaserAlg"] # optional - acc.getEventAlgo("OutputStreamHITS").WritingTool.ProcessingTag = "StreamHITS" # required -# -# Here is the configuration of the Geant4 pieces -# - acc.merge(FaserGeometryCfg(ConfigFlags)) - acc.merge(G4FaserAlgCfg(ConfigFlags)) - acc.addService(G4GeometryNotifierSvcCfg(ConfigFlags, ActivateLVNotifier=True)) -# -# Verbosity -# -# ConfigFlags.dump() -# logging.getLogger('forcomps').setLevel(VERBOSE) -# acc.foreach_component("*").OutputLevel = VERBOSE -# acc.foreach_component("*ClassID*").OutputLevel = INFO -# acc.getService("StoreGateSvc").Dump=True -# acc.getService("ConditionStore").Dump=True -# acc.printConfig() - f=open('FaserG4AppCfg_EVNT.pkl','wb') - acc.store(f) - f.close() -# -# Execute and finish -# - sys.exit(int(acc.run(maxEvents=500).isFailure())) diff --git a/Simulation/G4Faser/G4FaserAlg/test/runG4Cosmics.py b/Simulation/G4Faser/G4FaserAlg/test/runG4Cosmics.py deleted file mode 100644 index 56618f6cebcdac90c40570797e1c17953653200e..0000000000000000000000000000000000000000 --- a/Simulation/G4Faser/G4FaserAlg/test/runG4Cosmics.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python -if __name__ == "__main__": - import os - import sys - import GaudiPython - import ParticleGun as PG - from FaserCosmicGenerator import CosmicSampler - from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator - from AthenaConfiguration.ComponentFactory import CompFactory - from AthenaCommon.AppMgr import * - from AthenaCommon.Logging import log, logging - from AthenaCommon.SystemOfUnits import TeV - from AthenaCommon.PhysicalConstants import pi - from AthenaCommon.Constants import VERBOSE, INFO - from AthenaCommon.Configurable import Configurable - from CalypsoConfiguration.AllConfigFlags import ConfigFlags - from CalypsoConfiguration.MainServicesConfig import MainServicesCfg - from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg - from McEventSelector.McEventSelectorConfig import McEventSelectorCfg - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg - from G4FaserAlg.G4FaserAlgConfigNew import G4FaserAlgCfg - from G4FaserServices.G4FaserServicesConfigNew import G4GeometryNotifierSvcCfg -# -# Set up logging and new style config -# - log.setLevel(VERBOSE) - Configurable.configurableRun3Behavior = True -# -# Input settings (Generator file) -# -# from AthenaConfiguration.TestDefaults import defaultTestFiles -# ConfigFlags.Input.Files = defaultTestFiles.EVNT -# -# Alternatively, these must ALL be explicitly set to run without an input file -# (if missing, it will try to read metadata from a non-existent file and crash) -# - ConfigFlags.Input.Files = [""] - ConfigFlags.Input.isMC = True - ConfigFlags.Input.RunNumber = 12345 - ConfigFlags.Input.Collections = [""] - ConfigFlags.Input.ProjectName = "mc19" - ConfigFlags.Common.isOnline = False - ConfigFlags.Beam.Type = "collisions" - ConfigFlags.Beam.Energy = 7*TeV # Informational, does not affect simulation - ConfigFlags.GeoModel.FaserVersion = "FASER-01" # Always needed - ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-01" # Always needed; must match FaserVersion -# Workaround for bug/missing flag; unimportant otherwise - ConfigFlags.addFlag("Input.InitialTimeStamp", 0) -# Workaround to avoid problematic ISF code - ConfigFlags.GeoModel.Layout = "Development" -# -# Output settings -# - ConfigFlags.Output.HITSFileName = "cosmics.HITS.pool.root" - ConfigFlags.GeoModel.GeoExportFile = "faserGeo.db" # Optional dump of geometry for browsing in vp1light -# -# Geometry-related settings -# Do not change! -# - detectors = ['Veto', 'Trigger', 'Preshower', 'FaserSCT', 'Dipole', 'Ecal'] - from CalypsoConfiguration.DetectorConfigFlags import setupDetectorsFromList - setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True) - ConfigFlags.GeoModel.Align.Dynamic = False - ConfigFlags.Sim.ReleaseGeoModel = False - -# -# Physics list -# - - ConfigFlags.Sim.PhysicsList = "FTFP_BERT" -# -# All flags should be set before calling lock -# - ConfigFlags.lock() -# -# Construct ComponentAccumulator -# - acc = MainServicesCfg(ConfigFlags) -# -# Particle Gun generator (comment out to read generator file) -# Raw energies (without units given) are interpreted as MeV -# - pg = PG.ParticleGun() - pg.McEventKey = "GEN_EVENT" - pg.randomSeed = 123456 - - pg.sampler = CosmicSampler() - # For just box around Ecal: - # pg.sampler = CosmicSampler(z0Mm = 3099.2, targetDzMm = 705, targetDxMm = 200, targetDyMm = 200) - acc.addEventAlgo(pg, "AthBeginSeq") # to run *before* G4 -# -# Only one of these two should be used in a given job -# (MCEventSelectorCfg for generating events with no input file, -# PoolReadCfg when reading generator data from an input file) -# - acc.merge(McEventSelectorCfg(ConfigFlags)) - # acc.merge(PoolReadCfg(ConfigFlags)) -# -# Output stream configuration -# - acc.merge(OutputStreamCfg(ConfigFlags, - "HITS", - ["EventInfo#*", - "McEventCollection#TruthEvent", - "McEventCollection#GEN_EVENT", - "ScintHitCollection#*", - "FaserSiHitCollection#*", - "CaloHitCollection#*" - ], disableEventTag=True)) - acc.getEventAlgo("OutputStreamHITS").AcceptAlgs = ["G4FaserAlg"] # optional - acc.getEventAlgo("OutputStreamHITS").WritingTool.ProcessingTag = "StreamHITS" # required -# -# Here is the configuration of the Geant4 pieces -# - acc.merge(FaserGeometryCfg(ConfigFlags)) - acc.merge(G4FaserAlgCfg(ConfigFlags)) - acc.addService(G4GeometryNotifierSvcCfg(ConfigFlags, ActivateLVNotifier=True)) -# -# Verbosity -# -# ConfigFlags.dump() -# logging.getLogger('forcomps').setLevel(VERBOSE) -# acc.foreach_component("*").OutputLevel = VERBOSE -# acc.foreach_component("*ClassID*").OutputLevel = INFO -# acc.getService("StoreGateSvc").Dump=True -# acc.getService("ConditionStore").Dump=True -# acc.printConfig() - f=open('FaserG4AppCfg_EVNT.pkl','wb') - acc.store(f) - f.close() -# -# Execute and finish -# - sys.exit(int(acc.run(maxEvents=50000).isFailure())) diff --git a/Simulation/G4Faser/G4FaserAlg/test/runG4DecayInFlight.py b/Simulation/G4Faser/G4FaserAlg/test/runG4DecayInFlight.py deleted file mode 100644 index 8110c6eeaaec03ef1ea21569f1d1bcd94b8fa0d9..0000000000000000000000000000000000000000 --- a/Simulation/G4Faser/G4FaserAlg/test/runG4DecayInFlight.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python -if __name__ == "__main__": - import os - import sys - import GaudiPython - import ParticleGun as PG - from DIFGenerator import DIFSampler - from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator - from AthenaConfiguration.ComponentFactory import CompFactory - from AthenaCommon.AppMgr import * - from AthenaCommon.Logging import log, logging - from AthenaCommon.SystemOfUnits import TeV - from AthenaCommon.PhysicalConstants import pi - from AthenaCommon.Constants import VERBOSE, INFO - from AthenaCommon.Configurable import Configurable - from CalypsoConfiguration.AllConfigFlags import ConfigFlags - from CalypsoConfiguration.MainServicesConfig import MainServicesCfg - from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg - from McEventSelector.McEventSelectorConfig import McEventSelectorCfg - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg - from G4FaserAlg.G4FaserAlgConfigNew import G4FaserAlgCfg - from G4FaserServices.G4FaserServicesConfigNew import G4GeometryNotifierSvcCfg -# -# Set up logging and new style config -# - log.setLevel(VERBOSE) - Configurable.configurableRun3Behavior = True -# -# Input settings (Generator file) -# -# from AthenaConfiguration.TestDefaults import defaultTestFiles -# ConfigFlags.Input.Files = defaultTestFiles.EVNT -# -# Alternatively, these must ALL be explicitly set to run without an input file -# (if missing, it will try to read metadata from a non-existent file and crash) -# - ConfigFlags.Input.Files = [""] - ConfigFlags.Input.isMC = True - ConfigFlags.Input.RunNumber = 12345 - ConfigFlags.Input.Collections = [""] - ConfigFlags.Input.ProjectName = "mc19" - ConfigFlags.Common.isOnline = False - ConfigFlags.Beam.Type = "collisions" - ConfigFlags.Beam.Energy = 7*TeV # Informational, does not affect simulation - ConfigFlags.GeoModel.FaserVersion = "FASER-01" # Always needed - ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-01" # Always needed; must match FaserVersion -# Workaround for bug/missing flag; unimportant otherwise - ConfigFlags.addFlag("Input.InitialTimeStamp", 0) -# Workaround to avoid problematic ISF code - ConfigFlags.GeoModel.Layout = "Development" -# -# Output settings -# - ConfigFlags.Output.HITSFileName = "DecayInFlight.HITS.pool.root" - ConfigFlags.GeoModel.GeoExportFile = "faserGeo.db" # Optional dump of geometry for browsing in vp1light -# -# Geometry-related settings -# Do not change! -# - detectors = ['Veto', 'Trigger', 'Preshower', 'FaserSCT', 'Dipole', 'Ecal'] - from CalypsoConfiguration.DetectorConfigFlags import setupDetectorsFromList - setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True) - ConfigFlags.GeoModel.Align.Dynamic = False - ConfigFlags.Sim.ReleaseGeoModel = False - -# -# Physics list -# - - ConfigFlags.Sim.PhysicsList = "FTFP_BERT" -# -# All flags should be set before calling lock -# - ConfigFlags.lock() -# -# Construct ComponentAccumulator -# - acc = MainServicesCfg(ConfigFlags) -# -# Particle Gun generator (comment out to read generator file) -# Raw energies (without units given) are interpreted as MeV -# - pg = PG.ParticleGun() - pg.McEventKey = "GEN_EVENT" - pg.randomSeed = 123456 - pg.sampler = DIFSampler() -# Next line sets the range of mother particle energies to [0.1 TeV, 0.2 TeV] (default is 1 TeV) -# pg.sampler.mother_sampler.mom.energy = [0.1*TeV, 0.2*TeV] -# Next line sets the range of cylindrical radii to [90 mm, 100 mm] (default is [0, 100 mm]) -# pg.sampler.mother_sampler.pos.rsq = [90**2, 100**2] -# Next line changes the range of z vertex positions to [-1000 mm, -500 mm] (default is [-1500 mm, 0]) -# pg.sampler.mother_sampler.pos.z = [-1000, -500] - acc.addEventAlgo(pg, "AthBeginSeq") # to run *before* G4 -# -# Only one of these two should be used in a given job -# (MCEventSelectorCfg for generating events with no input file, -# PoolReadCfg when reading generator data from an input file) -# - acc.merge(McEventSelectorCfg(ConfigFlags)) - # acc.merge(PoolReadCfg(ConfigFlags)) -# -# Output stream configuration -# - acc.merge(OutputStreamCfg(ConfigFlags, - "HITS", - ["EventInfo#*", - "McEventCollection#TruthEvent", - "McEventCollection#GEN_EVENT", - "ScintHitCollection#*", - "FaserSiHitCollection#*", - "CaloHitCollection#*" - ], disableEventTag=True)) - acc.getEventAlgo("OutputStreamHITS").AcceptAlgs = ["G4FaserAlg"] # optional - acc.getEventAlgo("OutputStreamHITS").WritingTool.ProcessingTag = "StreamHITS" # required -# -# Here is the configuration of the Geant4 pieces -# - acc.merge(FaserGeometryCfg(ConfigFlags)) - acc.merge(G4FaserAlgCfg(ConfigFlags)) - acc.addService(G4GeometryNotifierSvcCfg(ConfigFlags, ActivateLVNotifier=True)) -# -# Verbosity -# -# ConfigFlags.dump() -# logging.getLogger('forcomps').setLevel(VERBOSE) -# acc.foreach_component("*").OutputLevel = VERBOSE -# acc.foreach_component("*ClassID*").OutputLevel = INFO -# acc.getService("StoreGateSvc").Dump=True -# acc.getService("ConditionStore").Dump=True -# acc.printConfig() - f=open('FaserG4AppCfg_EVNT.pkl','wb') - acc.store(f) - f.close() -# -# Execute and finish -# - sys.exit(int(acc.run(maxEvents=500).isFailure())) diff --git a/Simulation/G4Faser/G4FaserAlg/test/runG4FaserNu.py b/Simulation/G4Faser/G4FaserAlg/test/runG4FaserNu.py deleted file mode 100644 index 486b628c43b2e6dc5f37dbfefe39cd8a239b46f2..0000000000000000000000000000000000000000 --- a/Simulation/G4Faser/G4FaserAlg/test/runG4FaserNu.py +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env python -if __name__ == "__main__": - import os - import sys - import GaudiPython - import ParticleGun as PG - from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator - from AthenaConfiguration.ComponentFactory import CompFactory - from AthenaCommon.AppMgr import * - from AthenaCommon.Logging import log, logging - from AthenaCommon.SystemOfUnits import TeV - from AthenaCommon.PhysicalConstants import pi - from AthenaCommon.Constants import VERBOSE, INFO - from AthenaCommon.Configurable import Configurable - from CalypsoConfiguration.AllConfigFlags import ConfigFlags - from CalypsoConfiguration.MainServicesConfig import MainServicesCfg - from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg - from McEventSelector.McEventSelectorConfig import McEventSelectorCfg - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg - from G4FaserAlg.G4FaserAlgConfigNew import G4FaserAlgCfg - from G4FaserServices.G4FaserServicesConfigNew import G4GeometryNotifierSvcCfg -# -# Set up logging and new style config -# - log.setLevel(VERBOSE) - Configurable.configurableRun3Behavior = True -# -# Input settings (Generator file) -# -# from AthenaConfiguration.TestDefaults import defaultTestFiles -# ConfigFlags.Input.Files = defaultTestFiles.EVNT -# -# Alternatively, these must ALL be explicitly set to run without an input file -# (if missing, it will try to read metadata from a non-existent file and crash) -# - ConfigFlags.Input.Files = [""] - ConfigFlags.Input.isMC = True - ConfigFlags.Input.RunNumber = 12345 - ConfigFlags.Input.Collections = [""] - ConfigFlags.Input.ProjectName = "mc19" - ConfigFlags.Common.isOnline = False - ConfigFlags.Beam.Type = "collisions" - ConfigFlags.Beam.Energy = 7*TeV # Informational, does not affect simulation - ConfigFlags.GeoModel.FaserVersion = "FASERNU-02" # Always needed - ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-02" # Always needed; must match FaserVersion -# Workaround for bug/missing flag; unimportant otherwise - ConfigFlags.addFlag("Input.InitialTimeStamp", 0) -# Workaround to avoid problematic ISF code - ConfigFlags.GeoModel.Layout = "Development" -# -# Output settings -# - ConfigFlags.Output.HITSFileName = "myFaserNu.HITS.pool.root" - ConfigFlags.GeoModel.GeoExportFile = "faserGeo.db" # Optional dump of geometry for browsing in vp1light -# -# Geometry-related settings -# Do not change! -# - detectors = ['Emulsion', 'Veto', 'Trigger', 'Preshower', 'FaserSCT', 'Dipole', 'Ecal'] - from CalypsoConfiguration.DetectorConfigFlags import setupDetectorsFromList - setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True) - ConfigFlags.GeoModel.Align.Dynamic = False - ConfigFlags.Sim.ReleaseGeoModel = False -# -# Physics list -# - ConfigFlags.Sim.PhysicsList = "FTFP_BERT" -# -# All flags should be set before calling lock -# - ConfigFlags.lock() -# -# Construct ComponentAccumulator -# - acc = MainServicesCfg(ConfigFlags) -# -# Particle Gun generator (comment out to read generator file) -# Raw energies (without units given) are interpreted as MeV -# - pg = PG.ParticleGun() - pg.McEventKey = "GEN_EVENT" - pg.randomSeed = 123456 - pg.sampler.pid = -13 - pg.sampler.mom = PG.EThetaMPhiSampler(energy=1*TeV, theta=[0, pi/20], phi=[0, 2*pi], mass=105.71) - pg.sampler.pos = PG.PosSampler(x=[-5, 5], y=[-5, 5], z=-3750.0, t=0.0) - acc.addEventAlgo(pg, "AthBeginSeq") # to run *before* G4 -# -# Only one of these two should be used in a given job -# (MCEventSelectorCfg for generating events with no input file, -# PoolReadCfg when reading generator data from an input file) -# - acc.merge(McEventSelectorCfg(ConfigFlags)) - # acc.merge(PoolReadCfg(ConfigFlags)) -# -# Output stream configuration -# - acc.merge(OutputStreamCfg(ConfigFlags, - "HITS", - ["EventInfo#*", - "McEventCollection#TruthEvent", - "McEventCollection#GEN_EVENT", - "NeutrinoHitCollection#*", - "ScintHitCollection#*", - "FaserSiHitCollection#*", - "CaloHitCollection#*" - ], disableEventTag=True)) - acc.getEventAlgo("OutputStreamHITS").AcceptAlgs = ["G4FaserAlg"] # optional - acc.getEventAlgo("OutputStreamHITS").WritingTool.ProcessingTag = "StreamHITS" # required -# -# Here is the configuration of the Geant4 pieces -# - acc.merge(FaserGeometryCfg(ConfigFlags)) - acc.merge(G4FaserAlgCfg(ConfigFlags)) - acc.addService(G4GeometryNotifierSvcCfg(ConfigFlags, ActivateLVNotifier=True)) -# -# Verbosity -# -# ConfigFlags.dump() -# logging.getLogger('forcomps').setLevel(VERBOSE) -# acc.foreach_component("*").OutputLevel = VERBOSE -# acc.foreach_component("*ClassID*").OutputLevel = INFO -# acc.getService("StoreGateSvc").Dump=True -# acc.getService("ConditionStore").Dump=True -# acc.printConfig() - f=open('FaserG4AppCfg_EVNT.pkl','wb') - acc.store(f) - f.close() -# -# Execute and finish -# - sys.exit(int(acc.run(maxEvents=50).isFailure())) diff --git a/Simulation/G4Faser/G4FaserAlg/test/runGeantinoScan.py b/Simulation/G4Faser/G4FaserAlg/test/runGeantinoScan.py index 99c94f3cd0b4a528bf67abf855162dee9b27970f..7e0a93719a520de7bb819fe270f8666a00c42f5c 100644 --- a/Simulation/G4Faser/G4FaserAlg/test/runGeantinoScan.py +++ b/Simulation/G4Faser/G4FaserAlg/test/runGeantinoScan.py @@ -76,7 +76,7 @@ if __name__ == "__main__": # Raw energies (without units given) are interpreted as MeV # pg = PG.ParticleGun() - pg.McEventKey = "GEN_EVENT" + pg.McEventKey = "BeamTruthEvent" pg.randomSeed = 123456 pg.sampler.pid = 999 pg.sampler.mom = PG.EThetaMPhiSampler(energy=1*TeV, theta=[0, pi/20], phi=[0, 2*pi]) @@ -96,7 +96,7 @@ if __name__ == "__main__": "HITS", ["EventInfo#*", "McEventCollection#TruthEvent", - "McEventCollection#GEN_EVENT", + "McEventCollection#BeamTruthEvent", "Trk::MaterialStepCollection#*", "ScintHitCollection#*", "FaserSiHitCollection#*" diff --git a/Simulation/G4Faser/G4FaserAlg/test/runGen.py b/Simulation/G4Faser/G4FaserAlg/test/runGen.py index 216688162a91f3ed561ef60566ea5d0c58ce6e28..e255b49ce3d866c457b691725bd9c15755a081b5 100755 --- a/Simulation/G4Faser/G4FaserAlg/test/runGen.py +++ b/Simulation/G4Faser/G4FaserAlg/test/runGen.py @@ -75,7 +75,7 @@ if __name__ == "__main__": # Raw energies (without units given) are interpreted as MeV # pg = PG.ParticleGun() - pg.McEventKey = "GEN_EVENT" + pg.McEventKey = "BeamTruthEvent" pg.randomSeed = 123456 pg.sampler.pid = -13 pg.sampler.mom = PG.EThetaMPhiSampler(energy=1*TeV, theta=[0, pi/20], phi=[0, 2*pi], mass=105.71) @@ -95,7 +95,7 @@ if __name__ == "__main__": "HITS", ["EventInfo#*", "McEventCollection#TruthEvent", - "McEventCollection#GEN_EVENT", + "McEventCollection#BeamTruthEvent", "ScintHitCollection#*", "FaserSiHitCollection#*" ], disableEventTag=True)) diff --git a/Simulation/G4Faser/G4FaserServices/python/G4FaserFieldServices.py b/Simulation/G4Faser/G4FaserServices/python/G4FaserFieldServices.py index 9e502c2769e286af0da4e433fd3982a2f99ddfed..cb4f0bcfdb0aedfd41c7493269bc5f540839bc64 100644 --- a/Simulation/G4Faser/G4FaserServices/python/G4FaserFieldServices.py +++ b/Simulation/G4Faser/G4FaserServices/python/G4FaserFieldServices.py @@ -39,166 +39,3 @@ def ConstantFieldSvcCfg(ConfigFlags,name="ConstantField", **kwargs): return result -# def ForwardFieldSvcCfg(ConfigFlags, name="ForwardField", **kwargs): -# result = ComponentAccumulator() - -# #setup the field and add the magneticfield service -# acc = MagneticFieldSvcCfg(ConfigFlags) -# result.merge(acc) - -# #FIXME Once it exists this version should use the new MagField Service defined in ForwardRegionMgField -# kwargs.setdefault("MagneticFieldSvc", result.getService("AtlasFieldSvc")) -# #kwargs.setdefault("FieldOn", True) - -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result - -# def Q1FwdG4FieldSvcCfg(ConfigFlags, name='Q1FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() - -# result.addService( MagField__ForwardRegionFieldSvc("Q1", -# Magnet = 0, # FIXME find a better way to do this. -# MQXA_DataFile = "MQXA_NOMINAL.dat")) - -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q1")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q2FwdG4FieldSvcCfg(ConfigFlags, name='Q2FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() - -# result.addService( MagField__ForwardRegionFieldSvc("Q2", -# Magnet = 1, # FIXME find a better way to do this. -# MQXA_DataFile = "MQXA_NOMINAL.dat")) -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q2")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q3FwdG4FieldSvcCfg(ConfigFlags, name='Q3FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() - -# result.addService( MagField__ForwardRegionFieldSvc("Q3", -# Magnet = 2, # FIXME find a better way to do this. -# MQXA_DataFile = "MQXA_NOMINAL.dat")) -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q3")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def D1FwdG4FieldSvcCfg(ConfigFlags, name='D1FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("D1", -# Magnet = 3))# FIXME find a better way to do this. - -# kwargs.setdefault("MagneticFieldSvc", result.getService("D1")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def D2FwdG4FieldSvcCfg(ConfigFlags, name='D2FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() - -# result.addService( MagField__ForwardRegionFieldSvc("D2", -# Magnet = 4))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("D2")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q4FwdG4FieldSvcCfg(ConfigFlags, name='Q4FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q4", -# Magnet = 5))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q4")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q5FwdG4FieldSvcCfg(ConfigFlags, name='Q5FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q5", -# Magnet = 6))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q5")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q6FwdG4FieldSvcCfg(ConfigFlags, name='Q6FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q6", -# Magnet = 7))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q6")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q7FwdG4FieldSvcCfg(ConfigFlags, name='Q7FwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q7", -# Magnet = 8))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q7")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q1HKickFwdG4FieldSvcCfg(ConfigFlags, name='Q1HKickFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q1HKick", -# Magnet = 9))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q1HKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q1VKickFwdG4FieldSvcCfg(ConfigFlags, name='Q1VKickFwdG4FieldSvc', **kwargs): #note is lower case "v" in ForwardRegionMgFieldConfig.py -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q1VKick", -# Magnet = 10))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q1VKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q2HKickFwdG4FieldSvcCfg(ConfigFlags, name='Q2HKickFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q2HKick", -# Magnet = 11))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q2HKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q2VKickFwdG4FieldSvcCfg(ConfigFlags, name='Q2VKickFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q2VKick", -# Magnet = 12))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q2VKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q3HKickFwdG4FieldSvcCfg(ConfigFlags, name='Q3HKickFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q3HKick", -# Magnet = 13))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q3HKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q3VKickFwdG4FieldSvcCfg(ConfigFlags, name='Q3VKickFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q3VKick", -# Magnet = 14))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q3VKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q4VKickAFwdG4FieldSvcCfg(ConfigFlags, name='Q4VKickAFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q4VKickA", -# Magnet = 15))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q4VKickA")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q4HKickFwdG4FieldSvcCfg(ConfigFlags, name='Q4HKickFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q4HKick", -# Magnet = 16))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q4HKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q4VKickBFwdG4FieldSvcCfg(ConfigFlags, name='Q4VKickBFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q4VKickB", -# Magnet = 17))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q4VKickB")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q5HKickFwdG4FieldSvcCfg(ConfigFlags, name='Q5HKickFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q5HKick", -# Magnet = 18))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q5HKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result -# def Q6VKickFwdG4FieldSvcCfg(ConfigFlags, name='Q6VKickFwdG4FieldSvc', **kwargs): -# result = ComponentAccumulator() -# result.addService( MagField__ForwardRegionFieldSvc("Q6VKick", -# Magnet = 19))# FIXME find a better way to do this. -# kwargs.setdefault("MagneticFieldSvc", result.getService("Q6VKick")) -# result.addService(StandardFieldSvc(name, **kwargs)) -# return result diff --git a/Simulation/G4Faser/G4FaserServices/python/G4FaserServicesConfigNew.py b/Simulation/G4Faser/G4FaserServices/python/G4FaserServicesConfigNew.py index 21357a02dc4298dc734f0dcbbc70d38f8b52b45b..839a4fda883d0f8e39f04f4efdc7a632918a6176 100644 --- a/Simulation/G4Faser/G4FaserServices/python/G4FaserServicesConfigNew.py +++ b/Simulation/G4Faser/G4FaserServices/python/G4FaserServicesConfigNew.py @@ -1,116 +1,21 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration from __future__ import print_function from AthenaConfiguration.ComponentFactory import CompFactory from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator DetectorGeometrySvc, G4AtlasSvc, G4GeometryNotifierSvc, PhysicsListSvc=CompFactory.getComps("DetectorGeometrySvc","G4AtlasSvc","G4GeometryNotifierSvc","PhysicsListSvc",) -# -# Physics region tools -# -from G4FaserTools.G4PhysicsRegionConfigNew import NeutrinoPhysicsRegionToolCfg, ScintillatorPhysicsRegionToolCfg, TrackerPhysicsRegionToolCfg, EcalPhysicsRegionToolCfg -# -# Geometry tools -# -from G4FaserTools.G4GeometryToolConfig import MaterialDescriptionToolCfg, G4AtlasDetectorConstructionToolCfg, FASEREnvelopeCfg -# -# Magnetic field tools - start simple -# -from G4FaserTools.G4FieldConfigNew import FASERFieldManagerToolCfg, EmulsionFieldManagerToolCfg, VetoFieldManagerToolCfg, TriggerFieldManagerToolCfg, PreshowerFieldManagerToolCfg -# -# Future field managers (?) -# -# from G4FaserTools.G4FieldConfigNew import UpstreamDipoleFieldManagerToolCfg, CentralDipoleFieldManagerToolCfg, DownstreamDipleFieldManagerToolCfg, FaserCaloFieldManagerToolCfg -from G4FaserTools.G4FieldConfigNew import TrackerFieldManagerToolCfg, DipoleFieldManagerToolCfg, EcalFieldManagerToolCfg -# -# -# -def getFASER_RegionCreatorList(ConfigFlags): - regionCreatorList = [] - - # from G4AtlasApps.SimFlags import simFlags - # Settings to widen the region of study - not yet supported by FASER - # if ConfigFlags.Beam.Type == 'cosmics' or ConfigFlags.Sim.CavernBG != 'Signal': - # regionCreatorList += [SX1PhysicsRegionToolCfg(ConfigFlags), BedrockPhysicsRegionToolCfg(ConfigFlags), CavernShaftsConcretePhysicsRegionToolCfg(ConfigFlags)] - - if ConfigFlags.Detector.EnableNeutrino: - regionCreatorList += [NeutrinoPhysicsRegionToolCfg(ConfigFlags)] - - if ConfigFlags.Detector.EnableScintillator: - regionCreatorList += [ScintillatorPhysicsRegionToolCfg(ConfigFlags)] - - if ConfigFlags.Detector.EnableTracker: - regionCreatorList += [TrackerPhysicsRegionToolCfg(ConfigFlags)] - - if ConfigFlags.Detector.EnableEcal: - regionCreatorList += [EcalPhysicsRegionToolCfg(ConfigFlags)] - - return regionCreatorList - -######################################################################### -def FASER_FieldMgrListCfg(ConfigFlags): - result = ComponentAccumulator() - fieldMgrList = [] - - acc = FASERFieldManagerToolCfg(ConfigFlags) - tool = result.popToolsAndMerge(acc) - fieldMgrList += [tool] - - if ConfigFlags.Detector.GeometryDipole: - acc = DipoleFieldManagerToolCfg(ConfigFlags) - tool = result.popToolsAndMerge(acc) - fieldMgrList += [tool] - if ConfigFlags.Detector.GeometryEmulsion: - acc = EmulsionFieldManagerToolCfg(ConfigFlags) - tool = result.popToolsAndMerge(acc) - fieldMgrList += [tool] - if ConfigFlags.Detector.GeometryVeto: - acc = VetoFieldManagerToolCfg(ConfigFlags) - tool = result.popToolsAndMerge(acc) - fieldMgrList += [tool] - if ConfigFlags.Detector.GeometryTrigger: - acc = TriggerFieldManagerToolCfg(ConfigFlags) - tool = result.popToolsAndMerge(acc) - fieldMgrList += [tool] - if ConfigFlags.Detector.GeometryPreshower: - acc = PreshowerFieldManagerToolCfg(ConfigFlags) - tool = result.popToolsAndMerge(acc) - fieldMgrList += [tool] - if ConfigFlags.Detector.GeometryTracker: - acc = TrackerFieldManagerToolCfg(ConfigFlags) - tool = result.popToolsAndMerge(acc) - fieldMgrList += [tool] - if ConfigFlags.Detector.GeometryEcal: - acc = EcalFieldManagerToolCfg(ConfigFlags) - tool = result.popToolsAndMerge(acc) - fieldMgrList += [tool] - - result.setPrivateTools(fieldMgrList) - return result - -def getGeometryConfigurationTools(ConfigFlags): - geoConfigToolList = [] - # The methods for these tools should be defined in the - # package containing each tool, so G4FaserTools in this case - geoConfigToolList += [MaterialDescriptionToolCfg(ConfigFlags)] - return geoConfigToolList - +from G4FaserTools.G4GeometryToolConfig import G4AtlasDetectorConstructionToolCfg def DetectorGeometrySvcCfg(ConfigFlags, name="DetectorGeometrySvc", **kwargs): result = ComponentAccumulator() - kwargs.setdefault("DetectorConstruction", G4AtlasDetectorConstructionToolCfg(ConfigFlags)) - kwargs.setdefault("GeometryConfigurationTools", getGeometryConfigurationTools(ConfigFlags)) - - accGeo, toolGeo = FASEREnvelopeCfg(ConfigFlags) - kwargs.setdefault("World", toolGeo) - result.merge(accGeo) - kwargs.setdefault("RegionCreators", getFASER_RegionCreatorList(ConfigFlags)) - acc = FASER_FieldMgrListCfg(ConfigFlags) - fieldMgrList = result.popToolsAndMerge(acc) - kwargs.setdefault("FieldManagers", fieldMgrList) + detConstTool = result.popToolsAndMerge(G4AtlasDetectorConstructionToolCfg(ConfigFlags)) + result.addPublicTool(detConstTool) + kwargs.setdefault("DetectorConstruction", result.getPublicTool(detConstTool.name)) result.addService(DetectorGeometrySvc(name, **kwargs)) return result + def G4AtlasSvcCfg(ConfigFlags, name="G4AtlasSvc", **kwargs): if ConfigFlags.Concurrency.NumThreads > 0: is_hive = True @@ -126,6 +31,7 @@ def G4GeometryNotifierSvcCfg(ConfigFlags, name="G4GeometryNotifierSvc", **kwargs kwargs.setdefault("ActivatePVNotifier", False) return G4GeometryNotifierSvc(name, **kwargs) + def PhysicsListSvcCfg(ConfigFlags, name="PhysicsListSvc", **kwargs): result = ComponentAccumulator() G4StepLimitationTool = CompFactory.G4StepLimitationTool @@ -138,13 +44,19 @@ def PhysicsListSvcCfg(ConfigFlags, name="PhysicsListSvc", **kwargs): if 'PhysicsList' in kwargs: if kwargs['PhysicsList'].endswith('_EMV') or kwargs['PhysicsList'].endswith('_EMX'): raise RuntimeError( 'PhysicsList not allowed: '+kwargs['PhysicsList'] ) - kwargs.setdefault("GeneralCut", 1.) - if ConfigFlags.Sim.NeutronTimeCut > 0.: - kwargs.setdefault("NeutronTimeCut", ConfigFlags.Sim.NeutronTimeCut) - - if ConfigFlags.Sim.NeutronEnergyCut > 0.: - kwargs.setdefault("NeutronEnergyCut", ConfigFlags.Sim.NeutronEnergyCut) + kwargs.setdefault("GeneralCut", 1.) + kwargs.setdefault("NeutronTimeCut", ConfigFlags.Sim.NeutronTimeCut) + kwargs.setdefault("NeutronEnergyCut", ConfigFlags.Sim.NeutronEnergyCut) kwargs.setdefault("ApplyEMCuts", ConfigFlags.Sim.ApplyEMCuts) + ## from AthenaCommon.SystemOfUnits import eV, TeV + ## kwargs.setdefault("EMMaxEnergy" , 7*TeV) + ## kwargs.setdefault("EMMinEnergy" , 100*eV) + """ --- ATLASSIM-3967 --- + these two options are replaced by SetNumberOfBinsPerDecade + which now controls both values. + """ + ## kwargs.setdefault("EMDEDXBinning" , 77) + ## kwargs.setdefault("EMLambdaBinning" , 77) result.addService(PhysicsListSvc(name, **kwargs)) return result diff --git a/Simulation/G4Faser/G4FaserTools/python/G4FaserToolsConfigNew.py b/Simulation/G4Faser/G4FaserTools/python/G4FaserToolsConfigNew.py index 6f3d50a2b91d255fa6ad1af6b9e73ad61ddb12ab..3520b26d0df3e3bc948c8b69cedf4de6cc5aecb6 100644 --- a/Simulation/G4Faser/G4FaserTools/python/G4FaserToolsConfigNew.py +++ b/Simulation/G4Faser/G4FaserTools/python/G4FaserToolsConfigNew.py @@ -6,6 +6,20 @@ from AthenaConfiguration.ComponentFactory import CompFactory from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaCommon import CfgMgr SensitiveDetectorMasterTool=CompFactory.SensitiveDetectorMasterTool +FastSimulationMasterTool=CompFactory.FastSimulationMasterTool + +def generateFastSimulationListCfg(ConfigFlags): + result = ComponentAccumulator() + FastSimulationList = [] + result.setPrivateTools(FastSimulationList) + return result + +def FastSimulationMasterToolCfg(ConfigFlags, **kwargs): + result = ComponentAccumulator() + FastSimulationList = result.popToolsAndMerge(generateFastSimulationListCfg(ConfigFlags)) + kwargs.setdefault("FastSimulations", FastSimulationList) + result.setPrivateTools(FastSimulationMasterTool(name="FastSimulationMasterTool", **kwargs)) + return result from EmulsionG4_SD.EmulsionG4_SDToolConfig import EmulsionSensorSDCfg from VetoG4_SD.VetoG4_SDToolConfig import VetoSensorSDCfg @@ -72,12 +86,6 @@ def generateCaloSensitiveDetectorList(ConfigFlags): return result, SensitiveDetectorList #List of tools here now! (CALL IT TOOL LIST?) -# def generateEnvelopeSensitiveDetectorList(ConfigFlags): -# SensitiveDetectorList=[] -# if ConfigFlags.Beam.Type == 'cosmics' and not ConfigFlags.Sim.ReadTR: -# SensitiveDetectorList+=['CosmicRecord'] -# return SensitiveDetectorList - def generateSensitiveDetectorList(ConfigFlags): result = ComponentAccumulator() SensitiveDetectorList=[] @@ -108,7 +116,7 @@ def SensitiveDetectorMasterToolCfg(ConfigFlags, name="SensitiveDetectorMasterToo accSensitiveDetector = generateSensitiveDetectorList(ConfigFlags) kwargs.setdefault("SensitiveDetectors", result.popToolsAndMerge(accSensitiveDetector)) #list of tools - result.addPublicTool(SensitiveDetectorMasterTool(name, **kwargs)) #note -this is still a public tool + result.setPrivateTools(SensitiveDetectorMasterTool(name, **kwargs)) #note -this is still a public tool return result def getEmptySensitiveDetectorMasterTool(name="EmptySensitiveDetectorMasterTool", **kwargs): diff --git a/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py b/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py index 85b372fa30ee6bdb1b3b5015b7901d5db8792fe6..992cfbe4fe506841adbbaa052540dc50168f1155 100644 --- a/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py +++ b/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py @@ -3,11 +3,15 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory -GeoDetectorTool=CompFactory.GeoDetectorTool +from AthenaCommon import Logging -BoxEnvelope,MaterialDescriptionTool,G4AtlasDetectorConstructionTool=CompFactory.getComps("BoxEnvelope","MaterialDescriptionTool","G4AtlasDetectorConstructionTool",) +#the physics region tools +from G4FaserTools.G4PhysicsRegionConfigNew import NeutrinoPhysicsRegionToolCfg, TrackerPhysicsRegionToolCfg, ScintillatorPhysicsRegionToolCfg, EcalPhysicsRegionToolCfg -from AthenaCommon.SystemOfUnits import mm +#the field config tools +from G4FaserTools.G4FieldConfigNew import FASERFieldManagerToolCfg, EmulsionFieldManagerToolCfg, VetoFieldManagerToolCfg, TriggerFieldManagerToolCfg, PreshowerFieldManagerToolCfg, TrackerFieldManagerToolCfg, DipoleFieldManagerToolCfg, EcalFieldManagerToolCfg + +GeoDetectorTool=CompFactory.GeoDetectorTool from EmulsionGeoModel.EmulsionGeoModelConfig import EmulsionGeometryCfg from VetoGeoModel.VetoGeoModelConfig import VetoGeometryCfg from TriggerGeoModel.TriggerGeoModelConfig import TriggerGeometryCfg @@ -16,123 +20,249 @@ from FaserSCT_GeoModel.FaserSCT_GeoModelConfig import FaserSCT_GeometryCfg from DipoleGeoModel.DipoleGeoModelConfig import DipoleGeometryCfg from EcalGeoModel.EcalGeoModelConfig import EcalGeometryCfg +BoxEnvelope, MaterialDescriptionTool, SmartlessnessTool, G4AtlasDetectorConstructionTool = CompFactory.getComps("BoxEnvelope", "MaterialDescriptionTool", "SmartlessnessTool", "G4AtlasDetectorConstructionTool",) + +from AthenaCommon.SystemOfUnits import mm + #ToDo - finish migrating this (dnoel) #Todo - just return component accumulator #to still migrate: getCavernWorld, getCavernInfraGeoDetectorTool #from ForwardRegionProperties.ForwardRegionPropertiesToolConfig import ForwardRegionPropertiesCfg +#put it here to avoid circular import? +G4GeometryNotifierSvc=CompFactory.G4GeometryNotifierSvc +def G4GeometryNotifierSvcCfg(ConfigFlags, name="G4GeometryNotifierSvc", **kwargs): + kwargs.setdefault("ActivateLVNotifier", True) + kwargs.setdefault("ActivatePVNotifier", False) + return G4GeometryNotifierSvc(name, **kwargs) + def EmulsionGeoDetectorToolCfg(ConfigFlags, name='Emulsion', **kwargs): #set up geometry result=EmulsionGeometryCfg(ConfigFlags) kwargs.setdefault("DetectorName", "Emulsion") - return result, GeoDetectorTool(name, **kwargs) + #add the GeometryNotifierSvc + result.addService(G4GeometryNotifierSvcCfg(ConfigFlags)) + kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc")) + result.setPrivateTools(GeoDetectorTool(name, **kwargs)) + return result def VetoGeoDetectorToolCfg(ConfigFlags, name='Veto', **kwargs): #set up geometry result=VetoGeometryCfg(ConfigFlags) kwargs.setdefault("DetectorName", "Veto") - return result, GeoDetectorTool(name, **kwargs) + #add the GeometryNotifierSvc + result.addService(G4GeometryNotifierSvcCfg(ConfigFlags)) + kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc")) + result.setPrivateTools(GeoDetectorTool(name, **kwargs)) + return result def TriggerGeoDetectorToolCfg(ConfigFlags, name='Trigger', **kwargs): #set up geometry result=TriggerGeometryCfg(ConfigFlags) kwargs.setdefault("DetectorName", "Trigger") - return result, GeoDetectorTool(name, **kwargs) + #add the GeometryNotifierSvc + result.addService(G4GeometryNotifierSvcCfg(ConfigFlags)) + kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc")) + result.setPrivateTools(GeoDetectorTool(name, **kwargs)) + return result def PreshowerGeoDetectorToolCfg(ConfigFlags, name='Preshower', **kwargs): #set up geometry result=PreshowerGeometryCfg(ConfigFlags) kwargs.setdefault("DetectorName", "Preshower") - return result, GeoDetectorTool(name, **kwargs) + #add the GeometryNotifierSvc + result.addService(G4GeometryNotifierSvcCfg(ConfigFlags)) + kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc")) + result.setPrivateTools(GeoDetectorTool(name, **kwargs)) + return result def SCTGeoDetectorToolCfg(ConfigFlags, name='SCT', **kwargs): #set up geometry result=FaserSCT_GeometryCfg(ConfigFlags) kwargs.setdefault("DetectorName", "SCT") - return result, GeoDetectorTool(name, **kwargs) + #add the GeometryNotifierSvc + result.addService(G4GeometryNotifierSvcCfg(ConfigFlags)) + kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc")) + result.setPrivateTools(GeoDetectorTool(name, **kwargs)) + return result def DipoleGeoDetectorToolCfg(ConfigFlags, name='Dipole', **kwargs): #set up geometry result=DipoleGeometryCfg(ConfigFlags) kwargs.setdefault("DetectorName", "Dipole") - return result, GeoDetectorTool(name, **kwargs) + #add the GeometryNotifierSvc + result.addService(G4GeometryNotifierSvcCfg(ConfigFlags)) + kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc")) + result.setPrivateTools(GeoDetectorTool(name, **kwargs)) + return result def EcalGeoDetectorToolCfg(ConfigFlags, name='Ecal', **kwargs): #set up geometry result=EcalGeometryCfg(ConfigFlags) kwargs.setdefault("DetectorName", "Ecal") - return result, GeoDetectorTool(name, **kwargs) + #add the GeometryNotifierSvc + result.addService(G4GeometryNotifierSvcCfg(ConfigFlags)) + kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc")) + result.setPrivateTools(GeoDetectorTool(name, **kwargs)) + return result def generateSubDetectorList(ConfigFlags): result = ComponentAccumulator() SubDetectorList=[] if ConfigFlags.Detector.GeometryEmulsion: - accEmulsion, toolEmulsion = EmulsionGeoDetectorToolCfg(ConfigFlags) + toolEmulsion = result.popToolsAndMerge(EmulsionGeoDetectorToolCfg(ConfigFlags)) SubDetectorList += [ toolEmulsion ] - result.merge(accEmulsion) if ConfigFlags.Detector.GeometryVeto: - accVeto, toolVeto = VetoGeoDetectorToolCfg(ConfigFlags) + toolVeto = result.popToolsAndMerge(VetoGeoDetectorToolCfg(ConfigFlags)) SubDetectorList += [ toolVeto ] - result.merge(accVeto) if ConfigFlags.Detector.GeometryTrigger: - accTrigger, toolTrigger = TriggerGeoDetectorToolCfg(ConfigFlags) + toolTrigger = result.popToolsAndMerge(TriggerGeoDetectorToolCfg(ConfigFlags)) SubDetectorList += [ toolTrigger ] - result.merge(accTrigger) if ConfigFlags.Detector.GeometryPreshower: - accPreshower, toolPreshower = PreshowerGeoDetectorToolCfg(ConfigFlags) + toolPreshower = result.popToolsAndMerge(PreshowerGeoDetectorToolCfg(ConfigFlags)) SubDetectorList += [ toolPreshower ] - result.merge(accPreshower) if ConfigFlags.Detector.GeometryFaserSCT: - accSCT, toolSCT = SCTGeoDetectorToolCfg(ConfigFlags) + toolSCT = result.popToolsAndMerge(SCTGeoDetectorToolCfg(ConfigFlags)) SubDetectorList += [ toolSCT ] - result.merge(accSCT) if ConfigFlags.Detector.GeometryDipole: - accDipole, toolDipole = DipoleGeoDetectorToolCfg(ConfigFlags) + toolDipole = result.popToolsAndMerge(DipoleGeoDetectorToolCfg(ConfigFlags)) SubDetectorList += [ toolDipole ] - result.merge(accDipole) if ConfigFlags.Detector.GeometryEcal: - accEcal, toolEcal = EcalGeoDetectorToolCfg(ConfigFlags) + toolEcal = result.popToolsAndMerge(EcalGeoDetectorToolCfg(ConfigFlags)) SubDetectorList += [ toolEcal ] - result.merge(accEcal) - - return result, SubDetectorList + result.setPrivateTools(SubDetectorList) + return result def FASEREnvelopeCfg(ConfigFlags, name="Faser", **kwargs): result = ComponentAccumulator() - kwargs.setdefault("DetectorName", "Faser") - accSubDetectors, SubDetectorList = generateSubDetectorList(ConfigFlags) - result.merge(accSubDetectors) - kwargs.setdefault("OffsetX", 0.0 * mm) kwargs.setdefault("OffsetY", 0.0 * mm) kwargs.setdefault("OffsetZ", 0.0 * mm) - # kwargs.setdefault("OffsetX", 0.0 * mm) - # kwargs.setdefault("OffsetY", 0.0 * mm) - # kwargs.setdefault("OffsetZ", -1650.0 * mm) - - # kwargs.setdefault("dX", 16.0 * mm) - # kwargs.setdefault("dY", 16.0 * mm) - # kwargs.setdefault("dZ", 33.0 * mm) kwargs.setdefault("dX", 600.0 * mm) kwargs.setdefault("dY", 600.0 * mm) kwargs.setdefault("dZ", 4000.0 * mm) + kwargs.setdefault("DetectorName", "Faser") + SubDetectorList = result.popToolsAndMerge(generateSubDetectorList(ConfigFlags)) kwargs.setdefault("SubDetectors", SubDetectorList) + result.setPrivateTools(BoxEnvelope(name, **kwargs)) + return result - return result, BoxEnvelope(name, **kwargs) +def MaterialDescriptionToolCfg(ConfigFlags, name="MaterialDescriptionTool", **kwargs): + ## kwargs.setdefault("SomeProperty", aValue) + result = ComponentAccumulator() + result.setPrivateTools(MaterialDescriptionTool(name, **kwargs)) + return result -def G4AtlasDetectorConstructionToolCfg(ConfigFlags, name="G4FaserDetectorConstructionTool", **kwargs): - return G4AtlasDetectorConstructionTool(name, **kwargs) -def MaterialDescriptionToolCfg(ConfigFlags, name="MaterialDescriptionTool", **kwargs): +def SmartlessnessToolCfg(ConfigFlags, name="SmartlessnessTool", **kwargs): ## kwargs.setdefault("SomeProperty", aValue) - return MaterialDescriptionTool(name, **kwargs) + result = ComponentAccumulator() + result.setPrivateTools(SmartlessnessTool(name, **kwargs)) + return result + +def getFASER_RegionCreatorList(ConfigFlags): + regionCreatorList = [] + + if ConfigFlags.Detector.GeometryNeutrino: + regionCreatorList += [NeutrinoPhysicsRegionToolCfg(ConfigFlags)] + + if ConfigFlags.Detector.GeometryTracker: + regionCreatorList += [TrackerPhysicsRegionToolCfg(ConfigFlags)] + + if ConfigFlags.Detector.GeometryScintillator: + regionCreatorList += [ScintillatorPhysicsRegionToolCfg(ConfigFlags)] + + if ConfigFlags.Detector.GeometryFaserCalo: + regionCreatorList += [EcalPhysicsRegionToolCfg(ConfigFlags)] + + return regionCreatorList + +def FASER_FieldMgrListCfg(ConfigFlags): + result = ComponentAccumulator() + fieldMgrList = [] + + acc = FASERFieldManagerToolCfg(ConfigFlags) + tool = result.popToolsAndMerge(acc) + fieldMgrList += [tool] + + if ConfigFlags.Detector.GeometryEmulsion: + acc = EmulsionFieldManagerToolCfg(ConfigFlags) + tool = result.popToolsAndMerge(acc) + fieldMgrList += [tool] + + if ConfigFlags.Detector.GeometryVeto: + acc = VetoFieldManagerToolCfg(ConfigFlags) + tool = result.popToolsAndMerge(acc) + fieldMgrList += [tool] + + if ConfigFlags.Detector.GeometryTrigger: + acc = TriggerFieldManagerToolCfg(ConfigFlags) + tool = result.popToolsAndMerge(acc) + fieldMgrList += [tool] + + if ConfigFlags.Detector.GeometryPreshower: + acc = PreshowerFieldManagerToolCfg(ConfigFlags) + tool = result.popToolsAndMerge(acc) + fieldMgrList += [tool] + + if ConfigFlags.Detector.GeometryTracker: + acc = TrackerFieldManagerToolCfg(ConfigFlags) + tool = result.popToolsAndMerge(acc) + fieldMgrList += [tool] + + if ConfigFlags.Detector.GeometryDipole: + acc = DipoleFieldManagerToolCfg(ConfigFlags) + tool = result.popToolsAndMerge(acc) + fieldMgrList += [tool] + + if ConfigFlags.Detector.GeometryEcal: + acc = EcalFieldManagerToolCfg(ConfigFlags) + tool = result.popToolsAndMerge(acc) + fieldMgrList += [tool] + + result.setPrivateTools(fieldMgrList) + return result + +def getGeometryConfigurationTools(ConfigFlags): + geoConfigToolList = [] + # The methods for these tools should be defined in the + # package containing each tool, so G4FaserTools in this case + result =ComponentAccumulator() + geoConfigToolList += [result.popToolsAndMerge(MaterialDescriptionToolCfg(ConfigFlags))] + geoConfigToolList += [result.popToolsAndMerge(SmartlessnessToolCfg(ConfigFlags))] + return result, geoConfigToolList + + +def G4AtlasDetectorConstructionToolCfg(ConfigFlags, name="G4FaserDetectorConstructionTool", **kwargs): + result = ComponentAccumulator() + + ## For now just have the same geometry configurations tools loaded for ATLAS and TestBeam + geoConfAcc, listOfGeoConfTools = getGeometryConfigurationTools(ConfigFlags) + result.merge(geoConfAcc) + kwargs.setdefault("GeometryConfigurationTools", listOfGeoConfTools) + + # Getting this tool by name works, but not if you use getSensitiveDetectorMasterTool() + kwargs.setdefault('SenDetMasterTool', "SensitiveDetectorMasterTool" ) + + toolGeo = result.popToolsAndMerge(FASEREnvelopeCfg(ConfigFlags)) + kwargs.setdefault("World", toolGeo) + kwargs.setdefault("RegionCreators", getFASER_RegionCreatorList(ConfigFlags)) + #if hasattr(simFlags, 'MagneticField') and simFlags.MagneticField.statusOn: + if True: + acc = FASER_FieldMgrListCfg(ConfigFlags) + fieldMgrList = result.popToolsAndMerge(acc) + kwargs.setdefault("FieldManagers", fieldMgrList) + + result.setPrivateTools(G4AtlasDetectorConstructionTool(name, **kwargs)) + return result + diff --git a/Simulation/G4Faser/G4FaserTools/python/G4PhysicsRegionConfigNew.py b/Simulation/G4Faser/G4FaserTools/python/G4PhysicsRegionConfigNew.py index c910e2b8003df305b801f437257b0b44cbf937ec..040853dc2f46d08f0a92843d8b2f0dfef945ef11 100644 --- a/Simulation/G4Faser/G4FaserTools/python/G4PhysicsRegionConfigNew.py +++ b/Simulation/G4Faser/G4FaserTools/python/G4PhysicsRegionConfigNew.py @@ -2,65 +2,6 @@ from AthenaConfiguration.ComponentFactory import CompFactory RegionCreator=CompFactory.RegionCreator -# Beampipe Regions -# def BeampipeFwdCutPhysicsRegionToolCfg(ConfigFlags, name='BeampipeFwdCutPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'BeampipeFwdCut') -# volumeList = ['BeamPipe::SectionF47', 'BeamPipe::SectionF48', 'BeamPipe::SectionF61'] -# kwargs.setdefault("VolumeList", volumeList) -# from G4AtlasApps.SimFlags import simFlags - -# #if simFlags.BeamPipeSimMode() == "FastSim": -# if True: -# kwargs.setdefault("ElectronCut", 10.) -# kwargs.setdefault("PositronCut", 10.) -# kwargs.setdefault("GammaCut", 10.) -# print('Adding fast sim model to the beampipe!') -# else: -# assert simFlags.BeamPipeCut.statusOn -# if simFlags.BeamPipeCut() < 1: -# msg = "Setting the forward beam pipe range cuts to %e mm " % simFlags.BeamPipeCut() -# msg += "-- cut is < 1 mm, I hope you know what you're doing!" -# print(msg) -# if simFlags.BeamPipeSimMode() == "EGammaRangeCuts": -# kwargs.setdefault("ElectronCut", simFlags.BeamPipeCut()) -# kwargs.setdefault("PositronCut", simFlags.BeamPipeCut()) -# kwargs.setdefault("GammaCut", simFlags.BeamPipeCut()) -# elif simFlags.BeamPipeSimMode() == "EGammaPRangeCuts": -# kwargs.setdefault("ElectronCut", simFlags.BeamPipeCut()) -# kwargs.setdefault("PositronCut", simFlags.BeamPipeCut()) -# kwargs.setdefault("GammaCut", simFlags.BeamPipeCut()) -# kwargs.setdefault("ProtonCut", simFlags.BeamPipeCut()) -# return RegionCreator(name, **kwargs) - -# def FWDBeamLinePhysicsRegionToolCfg(ConfigFlags, name='FWDBeamLinePhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'FWDBeamLine') -# volumeList = ['BeamPipe::SectionF46'] -# kwargs.setdefault("VolumeList", volumeList) -# return RegionCreator(name, **kwargs) - -# # Forward Regions -# def FwdRegionPhysicsRegionToolCfg(ConfigFlags, name='FwdRegionPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'FwdRegion') -# volumeList = ['FwdRegion::ForwardRegionGeoModel'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 200.) -# kwargs.setdefault("PositronCut", 200.) -# kwargs.setdefault("GammaCut", 200.) -# return RegionCreator(name, **kwargs) - -# # Inner Detector Regions -# def PixelPhysicsRegionToolCfg(ConfigFlags, name='PixelPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'Pixel') -# volumeList = ['Pixel::siLog', 'Pixel::siBLayLog'] -# from AtlasGeoModel.CommonGMJobProperties import CommonGeometryFlags as commonGeoFlags -# from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags as geoFlags -# if (ConfigFlags.GeoModel.Run in ["RUN2", "RUN3"]) or (commonGeoFlags.Run()=="UNDEFINED" and geoFlags.isIBL()): -# volumeList += ['Pixel::dbmDiamondLog'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 0.05) -# kwargs.setdefault("PositronCut", 0.05) -# kwargs.setdefault("GammaCut", 0.05) -# return RegionCreator(name, **kwargs) # Values identical to ATLAS SCT @@ -104,232 +45,3 @@ def EcalPhysicsRegionToolCfg(ConfigFlags, name='EcalPhysicsRegionTool', **kwargs kwargs.setdefault("PositronCut", rangeEMB) kwargs.setdefault("GammaCut", rangeEMB) return RegionCreator(name, **kwargs) - -# def SCTPhysicsRegionToolCfg(ConfigFlags, name='SCTPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'SCT') -# volumeList = ['SCT::BRLSensor', 'SCT::BRLSensorSS', 'SCT::BRLSensorMS', -# 'SCT::ECSensor0', 'SCT::ECSensor1', 'SCT::ECSensor2', -# 'SCT::ECSensor3', 'SCT::ECSensor4', 'SCT::ECSensor5'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 0.05) -# kwargs.setdefault("PositronCut", 0.05) -# kwargs.setdefault("GammaCut", 0.05) -# return RegionCreator(name, **kwargs) - -# def TRTPhysicsRegionToolCfg(ConfigFlags, name='TRTPhysicsRegionTool', **kwargs): -# #rangeCut = simFlags.TRTRangeCut._Value() -# rangeCut = 30.0 -# kwargs.setdefault("RegionName", 'TRT') -# volumeList = ['TRT::Gas', 'TRT::GasMA'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", rangeCut) -# kwargs.setdefault("PositronCut", rangeCut) -# # The photon range cut is meant to stay small -# kwargs.setdefault("GammaCut", 0.05) -# return RegionCreator(name, **kwargs) - -# def TRT_ArPhysicsRegionToolCfg(ConfigFlags, name='TRT_ArPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'TRT_Ar') -# volumeList = ['TRT::Gas_Ar', 'TRT::GasMA_Ar'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 30.0) -# kwargs.setdefault("PositronCut", 30.0) -# kwargs.setdefault("GammaCut", 0.05) -# return RegionCreator(name, **kwargs) - -# def TRT_KrPhysicsRegionToolCfg(ConfigFlags, name='TRT_KrPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'TRT_Kr') -# volumeList = ['TRT::Gas_Kr', 'TRT::GasMA_Kr'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 15.0) -# kwargs.setdefault("PositronCut", 15.0) -# kwargs.setdefault("GammaCut", 0.05) -# return RegionCreator(name, **kwargs) - -# # Calo Regions -# def EMBPhysicsRegionToolCfg(ConfigFlags, name='EMBPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'EMB') -# volumeList = ['LArMgr::LAr::EMB::STAC'] -# kwargs.setdefault("VolumeList", volumeList) -# rangeEMB = 0.03 -# from G4AtlasApps.SimFlags import simFlags -# if '_EMV' not in simFlags.PhysicsList() and '_EMX' not in simFlags.PhysicsList(): -# rangeEMB = 0.1 -# kwargs.setdefault("ElectronCut", rangeEMB) -# kwargs.setdefault("PositronCut", rangeEMB) -# kwargs.setdefault("GammaCut", rangeEMB) -# return RegionCreator(name, **kwargs) - -# def EMECPhysicsRegionToolCfg(ConfigFlags, name='EMECPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'EMEC') -# volumeList = ['LArMgr::LAr::EMEC::Mother'] -# kwargs.setdefault("VolumeList", volumeList) -# rangeEMEC = 0.03 -# from G4AtlasApps.SimFlags import simFlags -# if '_EMV' not in simFlags.PhysicsList() and '_EMX' not in simFlags.PhysicsList(): -# rangeEMEC = 0.1 -# kwargs.setdefault("ElectronCut", rangeEMEC) -# kwargs.setdefault("PositronCut", rangeEMEC) -# kwargs.setdefault("GammaCut", rangeEMEC) -# return RegionCreator(name, **kwargs) - -# def HECPhysicsRegionToolCfg(ConfigFlags, name='HECPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'HEC') -# volumeList = ['LArMgr::LAr::HEC::LiquidArgon'] -# kwargs.setdefault("VolumeList", volumeList) -# rangeHEC = 0.03 -# from G4AtlasApps.SimFlags import simFlags -# if '_EMV' not in simFlags.PhysicsList() and '_EMX' not in simFlags.PhysicsList(): -# rangeHEC = 1.0 -# kwargs.setdefault("ElectronCut", rangeHEC) -# kwargs.setdefault("PositronCut", rangeHEC) -# kwargs.setdefault("GammaCut", rangeHEC) -# return RegionCreator(name, **kwargs) - -# def FCALPhysicsRegionToolCfg(ConfigFlags, name='FCALPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'FCAL') -# volumeList = ['LArMgr::LAr::FCAL::LiquidArgonC'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 0.03) -# kwargs.setdefault("PositronCut", 0.03) -# kwargs.setdefault("GammaCut", 0.03) -# return RegionCreator(name, **kwargs) - -# def EMECParaPhysicsRegionToolCfg(ConfigFlags, name='EMECParaPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'EMECPara') -# volumeList = ['LArMgr::LAr::EMEC::Pos::InnerWheel', 'LArMgr::LAr::EMEC::Pos::OuterWheel', -# 'LArMgr::LAr::EMEC::Neg::InnerWheel', 'LArMgr::LAr::EMEC::Neg::OuterWheel'] -# kwargs.setdefault("VolumeList", volumeList) -# rangeEMEC = 0.03 -# from G4AtlasApps.SimFlags import simFlags -# if '_EMV' not in simFlags.PhysicsList() and '_EMX' not in simFlags.PhysicsList(): -# rangeEMEC = 0.1 -# kwargs.setdefault("ElectronCut", rangeEMEC) -# kwargs.setdefault("PositronCut", rangeEMEC) -# kwargs.setdefault("GammaCut", rangeEMEC) -# return RegionCreator(name, **kwargs) - -# def FCALParaPhysicsRegionToolCfg(ConfigFlags, name='FCALParaPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'FCALPara') -# volumeList = ['LArMgr::LAr::FCAL::Module1::Absorber'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 0.03) -# kwargs.setdefault("PositronCut", 0.03) -# kwargs.setdefault("GammaCut", 0.03) -# return RegionCreator(name, **kwargs) - -# def FCAL2ParaPhysicsRegionToolCfg(ConfigFlags, name='FCAL2ParaPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'FCAL2Para') -# volumeList = ['LArMgr::LAr::FCAL::Module2::Absorber', 'LArMgr::LAr::FCAL::Module3::Absorber'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 0.03) -# kwargs.setdefault("PositronCut", 0.03) -# kwargs.setdefault("GammaCut", 0.03) -# return RegionCreator(name, **kwargs) - -# def PreSampLArPhysicsRegionToolCfg(ConfigFlags, name='PreSampLArPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'PreSampLAr') -# volumeList = ['LArMgr::LAr::Endcap::Presampler::LiquidArgon'] -# kwargs.setdefault("VolumeList", volumeList) -# return RegionCreator(name, **kwargs) - -# def DeadMaterialPhysicsRegionToolCfg(ConfigFlags, name='DeadMaterialPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'DeadMaterial') -# volumeList = [] -# sectionList = range(16,49) # does not include 49 -# sectionList += [ 51, 52, 53, 54 ] -# for section in sectionList: -# volumeList += ['BeamPipe::SectionF'+str(section)] -# volumeList += ['LArMgr::LAr::Endcap::Cryostat::Cylinder', -# 'LArMgr::LAr::Endcap::Cryostat::Cylinder::Mixed', -# 'LArMgr::LAr::Endcap::Cryostat::Cone::Mixed', -# 'LArMgr::LAr::Endcap::Cryostat::Cone', -# 'DiskShieldingPlugs', 'ToroidShieldingInnerPlugs', -# 'ForwardShieldingMainCylinder'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 1.0) -# kwargs.setdefault("PositronCut", 1.0) -# kwargs.setdefault("GammaCut", 1.0) -# return RegionCreator(name, **kwargs) - -# #Muon Regions -# def DriftWallPhysicsRegionToolCfg(ConfigFlags, name='DriftWallPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'DriftWall') -# volumeList = ['Muon::MDTDriftWall'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 0.05) -# kwargs.setdefault("PositronCut", 0.05) -# return RegionCreator(name, **kwargs) - -# def DriftWall1PhysicsRegionToolCfg(ConfigFlags, name='DriftWall1PhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'DriftWall1') -# volumeList = ['Muon::Endplug'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 1.0) -# kwargs.setdefault("PositronCut", 1.0) -# return RegionCreator(name, **kwargs) - -# def DriftWall2PhysicsRegionToolCfg(ConfigFlags, name='DriftWall2PhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'DriftWall2') -# volumeList = ['Muon::SensitiveGas'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 1.0) -# kwargs.setdefault("PositronCut", 1.0) -# return RegionCreator(name, **kwargs) - -# def MuonSystemFastPhysicsRegionToolCfg(ConfigFlags, name='MuonSystemFastPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'MuonSystemFastRegion') -# volumeList = [] -# if ConfigFlags.Sim.CavernBG == 'World': -# volumeList += ['BeamPipe::BeamPipe', 'IDET::IDET'] -# volumeList = ['Muon::MuonSys'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 1.0) -# kwargs.setdefault("PositronCut", 1.0) -# return RegionCreator(name, **kwargs) - -# def MuonPhysicsRegionToolCfg(ConfigFlags, name="MuonPhysicsRegionTool", **kwargs): -# kwargs.setdefault("RegionName", 'MuonSys') -# volumeList = ['Muon::MuonSys'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 0.1) -# kwargs.setdefault("PositronCut", 0.1) -# kwargs.setdefault("GammaCut", 0.1) -# return RegionCreator(name, **kwargs) - -# # Cavern Regions -# def SX1PhysicsRegionToolCfg(ConfigFlags, name='SX1PhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'SX1') -# volumeList = ['CavernInfra::SX1Air'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 2000.) -# kwargs.setdefault("PositronCut", 2000.) -# kwargs.setdefault("GammaCut", 2000.) -# return RegionCreator(name, **kwargs) - -# def BedrockPhysicsRegionToolCfg(ConfigFlags, name='BedrockPhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'BEDROCK') -# volumeList = ['CavernInfra::BEDROCK'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 1000000.) -# kwargs.setdefault("PositronCut", 1000000.) -# kwargs.setdefault("GammaCut", 1000000.) -# return RegionCreator(name, **kwargs) - -# def CavernShaftsConcretePhysicsRegionToolCfg(ConfigFlags, name='CavernShaftsConcretePhysicsRegionTool', **kwargs): -# kwargs.setdefault("RegionName", 'CAV_SHAFTS_CONC') -# volumeList = ['CavernInfra::CAV_SHAFTS_CONC'] -# kwargs.setdefault("VolumeList", volumeList) -# kwargs.setdefault("ElectronCut", 150.) -# kwargs.setdefault("PositronCut", 150.) -# kwargs.setdefault("GammaCut", 150.) -# return RegionCreator(name, **kwargs) - -##def getCavernShaftsAirPhysicsRegionTool(name='CavernShaftsAirPhysicsRegionTool', **kwargs): -## kwargs.setdefault("RegionName", 'CAV_SHAFTS_AIR') -## volumeList = ['CavernInfra::CAV_SHAFTS_AIR'] -## kwargs.setdefault("VolumeList", volumeList) -## kwargs.setdefault("ElectronCut", 2000.) -## kwargs.setdefault("PositronCut", 2000.) -## kwargs.setdefault("GammaCut", 2000.) -## return CfgMgr.RegionCreator(name, **kwargs) diff --git a/Simulation/ISF/ISF_Core/FaserISF_Services/python/FaserISF_ServicesConfigNew.py b/Simulation/ISF/ISF_Core/FaserISF_Services/python/FaserISF_ServicesConfigNew.py index 6f7478c462fb631db72596e8d3ee9d0a220e3418..7260d59fc1e6df1b327196817f8a44c865d72a16 100644 --- a/Simulation/ISF/ISF_Core/FaserISF_Services/python/FaserISF_ServicesConfigNew.py +++ b/Simulation/ISF/ISF_Core/FaserISF_Services/python/FaserISF_ServicesConfigNew.py @@ -10,30 +10,10 @@ from AthenaConfiguration.ComponentFactory import CompFactory from BarcodeServices.BarcodeServicesConfigNew import MC15aPlusBarcodeSvcCfg from ISF_HepMC_Tools.ISF_HepMC_ToolsConfigNew import ParticleFinalStateFilterCfg, GenParticleInteractingFilterCfg -#from FaserISF_HepMC_Tools.FaserISF_HepMC_ToolsConfigNew import FaserParticlePositionFilterCfg, FaserParticleGenericFilterCfg from FaserISF_HepMC_Tools.FaserISF_HepMC_ToolsConfigNew import FaserTruthStrategyCfg, FaserDipoleTruthStrategyCfg -# from ISF_HepMC_Tools.ISF_HepMC_ToolsConfigNew import TruthStrategyGroupID_MC15Cfg, TruthStrategyGroupCaloMuBremCfg, TruthStrategyGroupCaloDecay_MC15Cfg, TruthStrategyGroupIDHadInt_MC15Cfg, ParticleFinalStateFilterCfg, ParticlePositionFilterDynamicCfg, EtaPhiFilterCfg, GenParticleInteractingFilterCfg -# from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg - - ISF__FaserTruthSvc, ISF__FaserGeoIDSvc, ISF__FaserInputConverter = CompFactory.getComps("ISF::FaserTruthSvc","ISF::FaserGeoIDSvc","ISF::FaserInputConverter") -#Functions yet to be migrated: -#getParticleBrokerSvcNoOrdering, getParticleBrokerSvc, getAFIIParticleBrokerSvc, getAFIIEnvelopeDefSvc, getAFIIGeoIDSvc -#getLongLivedInputConverter, getValidationTruthService, getMC12BeamPipeTruthStrategies, getMC12IDTruthStrategies -#getMC12CaloTruthStrategies, getMC12MSTruthStrategies, getMC12TruthService, getTruthService, getMC12LLPTruthService, getMC12PlusTruthService, getMC15IDTruthStrategies -#getMC15CaloTruthStrategies - - -def FaserGeoIDSvcCfg(ConfigFlags, name="ISF_FaserGeoIDSvc", **kwargs): - result = ComponentAccumulator() - - result.addService(ISF__FaserGeoIDSvc(name, **kwargs)) - - return result - - def GenParticleFiltersToolCfg(ConfigFlags): result = ComponentAccumulator() @@ -110,39 +90,3 @@ def FaserTruthServiceCfg(ConfigFlags, name="FaserISF_TruthService", **kwargs): result.addService(ISF__FaserTruthSvc(name, **kwargs)) return result - - -# def MC15TruthServiceCfg(ConfigFlags, name="ISF_MC15TruthService", **kwargs): -# result = ComponentAccumulator() -# # importing Reflex dictionary to access AtlasDetDescr::AtlasRegion enum -# import ROOT, cppyy -# cppyy.loadDictionary('AtlasDetDescrDict') -# AtlasRegion = ROOT.AtlasDetDescr - -# acc1 = TruthStrategyGroupID_MC15Cfg(ConfigFlags) -# acc2 = TruthStrategyGroupIDHadInt_MC15Cfg(ConfigFlags) -# acc3 = TruthStrategyGroupCaloMuBremCfg(ConfigFlags) -# acc4 = TruthStrategyGroupCaloDecay_MC15Cfg(ConfigFlags) - -# kwargs.setdefault('TruthStrategies', [result.popToolsAndMerge(acc1), -# result.popToolsAndMerge(acc2), -# result.popToolsAndMerge(acc3), #FIXME this should be ISF_MCTruthStrategyGroupCaloMuBrem_MC15!! -# result.popToolsAndMerge(acc4)]) - - -# kwargs.setdefault('IgnoreUndefinedBarcodes', False) -# kwargs.setdefault('PassWholeVertices', False) # new for MC15 - can write out partial vertices. -# kwargs.setdefault('ForceEndVtxInRegions', [AtlasRegion.fAtlasID]) -# accTruthService = GenericTruthServiceCfg(ConfigFlags, name, **kwargs) -# result.merge(accTruthService) -# return result - - -# def MC15aPlusTruthServiceCfg(ConfigFlags, name="ISF_MC15aPlusTruthService", **kwargs): -# # importing Reflex dictionary to access AtlasDetDescr::AtlasRegion enum -# import ROOT, cppyy -# cppyy.loadDictionary('AtlasDetDescrDict') -# AtlasRegion = ROOT.AtlasDetDescr -# kwargs.setdefault('ForceEndVtxInRegions', [AtlasRegion.fAtlasID]) -# result = MC15TruthServiceCfg(ConfigFlags, name, **kwargs) -# return result diff --git a/Simulation/ISF/ISF_Core/FaserISF_Services/python/FaserISF_ServicesCoreConfigNew.py b/Simulation/ISF/ISF_Core/FaserISF_Services/python/FaserISF_ServicesCoreConfigNew.py new file mode 100644 index 0000000000000000000000000000000000000000..569a51177d8144a328ffce9415bd6a7f5773b97f --- /dev/null +++ b/Simulation/ISF/ISF_Core/FaserISF_Services/python/FaserISF_ServicesCoreConfigNew.py @@ -0,0 +1,9 @@ +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator +from AthenaConfiguration.ComponentFactory import CompFactory + +def FaserGeoIDSvcCfg(ConfigFlags, name="ISF_FaserGeoIDSvc", **kwargs): + result = ComponentAccumulator() + + result.addService(CompFactory.ISF.FaserGeoIDSvc(name, **kwargs)) + + return result diff --git a/Simulation/ISF/ISF_Geant4/FaserISF_Geant4Event/src/FaserISFG4GeoHelper.cxx b/Simulation/ISF/ISF_Geant4/FaserISF_Geant4Event/src/FaserISFG4GeoHelper.cxx index 5dd4fa5d5b746700b47f384b058d2ae9af7955c3..6697607742a1a4cb0cdebf08aa138ba1fca4ba6c 100644 --- a/Simulation/ISF/ISF_Geant4/FaserISF_Geant4Event/src/FaserISFG4GeoHelper.cxx +++ b/Simulation/ISF/ISF_Geant4/FaserISF_Geant4Event/src/FaserISFG4GeoHelper.cxx @@ -139,7 +139,7 @@ bool iGeant4::FaserISFG4GeoHelper::checkVolumeDepth(G4LogicalVolume* lv, int vol } // Check of volume name // Going through the volume depth - for (int i=0; i<lv->GetNoDaughters(); ++i) { + for (size_t i=0; i<lv->GetNoDaughters(); ++i) { Cavern = Cavern || checkVolumeDepth( lv->GetDaughter(i)->GetLogicalVolume() , volLevel , depth+1 ); } if (depth==0 && !Cavern && volLevel>1) { diff --git a/Simulation/README.md b/Simulation/README.md index 350d7ab9beb3eb94d7683c94d210d2e11d1fa90c..4b9556c73de0e240dc4c14d3d407712fc24ed20a 100644 --- a/Simulation/README.md +++ b/Simulation/README.md @@ -1,15 +1,14 @@ To generate Calypso MC data from an installation (run) directory: -1) edit the G4FaserAlg/test/runG4.py file to setup the job +1) edit the G4FaserAlg/test/G4FaserAlgConfigNew_Test.py file to setup the job ....the default generator is particle-gun; it can also read EVNT files but note that the Veto is far away from (0,0,0) where most ATLAS generators put things by default +....there are examples of single-particle (muon or electron), cosmic-rays and decay-in-flight. The parameters of each can be changed by passing keyword arguments ....read the comments carefully as a few other things have to be changed in the job options to switch between internal generator and generator data-file +....the geometry can be changed on the command line, using the GeoModel.FaserVersion flag and IOVDb.GlobalTag flags. See the tests in the CMakeLists.txt file for examples 2) source ./setup.sh -3) runG4.py +3) G4FaserAlgConfigNew_Test.py (setup.sh will put the script in your path) -To generate events with the emulsion detector, use - -3a) runG4FaserNu.py diff --git a/Tracker/TrackerDetDescr/DipoleGeoModel/src/DipoleTool.cxx b/Tracker/TrackerDetDescr/DipoleGeoModel/src/DipoleTool.cxx index 535c63ef409ada5cac9b9ca7a49982d802c1afde..138deee6639c1248aae0dc2cb02fa946b0fa233a 100644 --- a/Tracker/TrackerDetDescr/DipoleGeoModel/src/DipoleTool.cxx +++ b/Tracker/TrackerDetDescr/DipoleGeoModel/src/DipoleTool.cxx @@ -83,7 +83,6 @@ StatusCode DipoleTool::create() } std::string versionTag = m_rdbAccessSvc->getChildTag("Dipole", versionKey.tag(), versionKey.node(), "FASERDD"); - msg(MSG::INFO) << "Dipole Package Version: " << PACKAGE_VERSION << endmsg; if(msgLvl(MSG::DEBUG)) msg() << "versionTag=" << versionTag <<" %%%"<< endmsg; // If versionTag is NULL then don't build. diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/FaserSCT_DetectorTool.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/FaserSCT_DetectorTool.cxx index 91958660cb9e1a8d697e7a59f6825f0539df7a14..456afc4ee1b9199a3ec62aac9a03b82a8b705d8d 100644 --- a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/FaserSCT_DetectorTool.cxx +++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/FaserSCT_DetectorTool.cxx @@ -63,7 +63,7 @@ FaserSCT_DetectorTool::create() ATH_CHECK(m_rdbAccessSvc.retrieve()); // Print the SCT version tag: std::string sctVersionTag{m_rdbAccessSvc->getChildTag("SCT", versionKey.tag(), versionKey.node(),"FASERDD")}; - ATH_MSG_INFO("SCT Version: " << sctVersionTag << " Package Version: " << PACKAGE_VERSION); + ATH_MSG_INFO("SCT Version: " << sctVersionTag); // Check if version is empty. If so, then the SCT cannot be built. This may or may not be intentional. We // just issue an INFO message. if (sctVersionTag.empty()) { @@ -163,7 +163,7 @@ FaserSCT_DetectorTool::clear() StatusCode FaserSCT_DetectorTool::registerCallback ATLAS_NOT_THREAD_SAFE () { - StatusCode sc{StatusCode::FAILURE, true}; + StatusCode sc{StatusCode::FAILURE}; if (m_alignable.value()) { if (m_useDynamicAlignFolders.value()) { ATH_MSG_FATAL("Dynamic alignment not supported."); diff --git a/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictInterface_TB00.xml b/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictInterface_TB00.xml new file mode 100644 index 0000000000000000000000000000000000000000..a75ccee6cfc5b0cbf46511c7ffa7ade10440b437 --- /dev/null +++ b/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictInterface_TB00.xml @@ -0,0 +1,50 @@ +<IdDictionary name="Tracker" version="FaserNu"> + + <field name="part"> + <label name="SCT" value="1" /> + </field> + +<!-- This file includes the Interface detector --> + <field name="station" > + <label name="Interface" value="0" /> + </field> + + <field name="layer" > + <label name="Upstream" value="0" /> + <label name="Central" value="1" /> + <label name="Downstream" value="2" /> + </field> + + <field name="phi_module"> + <label name="Bottom" value="0" /> + <label name="LowerMiddle" value="1" /> + <label name="UpperMiddle" value="2" /> + <label name="Top" value="3" /> + </field> + + <field name="eta_module"> + <!-- facing downstream (hence "starboard" and "port") + x must increase right to left for a right-handed + coordinate system --> + <!-- numbers straddle zero for consistency with ATLAS --> + <label name="Starboard" value="-1" /> + <label name="Port" value="+1" /> + </field> + + <field name="side"> + <!-- The "upper" side is the side with the pigtail --> + <label name="Upper" value="0" /> + <label name="Lower" value="1" /> + </field> + + <region> + <range field="part" value="SCT" /> + <range field="station" values="Interface" /> + <range field="layer" values="Upstream Central Downstream" /> + <range field="phi_module" values="Bottom LowerMiddle UpperMiddle Top" wraparound="FALSE" /> + <range field="eta_module" values="Starboard Port" wraparound="FALSE" /> + <range field="side" values="Upper Lower" /> + <range field="strip" minvalue="0" maxvalue="767" /> + </region> + +</IdDictionary> \ No newline at end of file diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.h index ebb1b3151a2f4e96652b2b2598e66ccf8ffe1ba3..89fa0e161a3f73b06d54c5630dd7ac763b41bc69 100644 --- a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.h +++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.h @@ -162,10 +162,10 @@ namespace TrackerDD { //@{ /// identifier of this detector element (inline) - Identifier identify() const; + virtual Identifier identify() const override final; /// identifier hash (inline) - IdentifierHash identifyHash() const; + virtual IdentifierHash identifyHash() const override final; /// Returns the id helper (inline) const FaserDetectorID* getIdHelper() const; @@ -201,20 +201,38 @@ namespace TrackerDD { /// @name Transformation/Orientation // /////////////////////////////////////////////////////////////////// + /** + * Element Surface + */ + Trk::Surface& surface(); + virtual const Trk::Surface& surface() const override final; + /** + * TrkDetElementBase interface (inline) + */ + virtual const Trk::Surface& surface(const Identifier&) const override final; //@{ // Position /// Local (simulation/hit frame) to global transform virtual const GeoTrf::Transform3D& transformHit() const; /// Local (reconstruction frame) to global transform - const Amg::Transform3D& transform() const; + virtual const Amg::Transform3D& transform() const override final; + /** + * TrkDetElementBase interface (inline) + */ + virtual const Amg::Transform3D& transform(const Identifier&) const override final; + /// Default Local (reconstruction frame) to global transform /// ie with no misalignment. const HepGeom::Transform3D defTransformCLHEP() const; const Amg::Transform3D defTransform() const; /// Center in global coordinates - const Amg::Vector3D& center() const; - + virtual const Amg::Vector3D& center() const override final; + /** + * TrkDetElementBase interface (inline) + */ + virtual const Amg::Vector3D& center(const Identifier&) const override final; + const HepGeom::Transform3D& transformCLHEP() const; /// Simulation/Hit local frame to reconstruction local frame. 2D. @@ -254,8 +272,14 @@ namespace TrackerDD { /// In direction of increasing z in the barrel and increasing r in the endcap. const Amg::Vector3D& etaAxis() const; const HepGeom::Vector3D<double>& etaAxisCLHEP() const; - /// Get reconstruction local normal axes in global frame. Choosen to give right-handed coordinate frame. - const Amg::Vector3D& normal() const; + /** + * Get reconstruction local normal axes in global frame. Choosen to give right-handed coordinate frame. + */ + virtual const Amg::Vector3D& normal() const override final; + /** + * TrkDetElementBase interface (inline) + */ + virtual const Amg::Vector3D& normal(const Identifier&) const override final; /// transform a hit local position into a global position (inline): HepGeom::Point3D<double> globalPositionHit(const HepGeom::Point3D<double>& simulationLocalPos) const; @@ -298,8 +322,8 @@ namespace TrackerDD { double sinStereoLocal(const HepGeom::Point3D<double>& globalPos) const; /// Element Surface - virtual Trk::Surface& surface(); - virtual const Trk::Surface& surface() const; + // virtual Trk::Surface& surface(); + // virtual const Trk::Surface& surface() const; //@} @@ -396,7 +420,11 @@ namespace TrackerDD { TrackerDD::CarrierType carrierType() const; // carrier type for readout. ie holes for SCT // and electrons for pixels. - virtual const Trk::SurfaceBounds& bounds() const; + virtual const Trk::SurfaceBounds& bounds() const override final; + /** + * TrkDetElementBase interface (inline) + */ + virtual const Trk::SurfaceBounds& bounds(const Identifier&) const override final; // Pitch // @@ -527,11 +555,11 @@ namespace TrackerDD { // /////////////////////////////////////////////////////////////////// //{@ - virtual const Amg::Transform3D& transform(const Identifier&) const; - virtual const Trk::Surface& surface(const Identifier&) const; - virtual const Amg::Vector3D& center(const Identifier&) const; - virtual const Amg::Vector3D& normal(const Identifier&) const; - virtual const Trk::SurfaceBounds& bounds(const Identifier&) const; + // virtual const Amg::Transform3D& transform(const Identifier&) const; + // virtual const Trk::Surface& surface(const Identifier&) const; + // virtual const Amg::Vector3D& center(const Identifier&) const; + // virtual const Amg::Vector3D& normal(const Identifier&) const; + // virtual const Trk::SurfaceBounds& bounds(const Identifier&) const; //@} ////////////////////////////////////////////////////////////////////////////////////// @@ -553,7 +581,11 @@ namespace TrackerDD { //@} const SiCommonItems* getCommonItems() const; - + + /** TrkDetElementBase interface detectorType + */ + virtual Trk::DetectorElemType detectorType() const override final; + /////////////////////////////////////////////////////////////////// // Private methods: /////////////////////////////////////////////////////////////////// diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.icc b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.icc index 5936a08d41b3bb58c0da56e42bcea1de5542dbad..33bd220bf0f135f9180b28f6e99c256bddb37e3f 100644 --- a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.icc +++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.icc @@ -11,7 +11,11 @@ namespace TrackerDD { /////////////////////////////////////////////////////////////////// // Inline methods: /////////////////////////////////////////////////////////////////// - + + inline Trk::DetectorElemType SiDetectorElement::detectorType() const{ + return Trk::DetectorElemType::Silicon; + } + inline Identifier SiDetectorElement::identify() const { return m_id; diff --git a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfig.py b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfig.py index efeba22b22474a433802cec7a2560523e6058f5f..3d9ec7a072ce801067ae843341e5ca9b8f84ce40 100644 --- a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfig.py +++ b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfig.py @@ -126,9 +126,7 @@ def getFaserSCT_FrontEnd(name="FaserSCT_FrontEnd", **kwargs): kwargs.setdefault("SCT_ReadCalibChipDataTool", sct_ReadCalibChipDataToolSetup.getTool()) # DataCompressionMode: 1 is level mode x1x (default), 2 is edge mode 01x, 3 is expanded any hit xxx from AthenaCommon.BeamFlags import jobproperties - if digitizationFlags.PileUpPremixing: - kwargs.setdefault("DataCompressionMode", 3) - elif globalflags.isOverlay() and globalflags.DataSource == 'geant4': + if globalflags.isOverlay() and globalflags.DataSource == 'geant4': kwargs.setdefault("DataCompressionMode", 2) elif (jobproperties.Beam.bunchSpacing() <= 50): kwargs.setdefault("DataCompressionMode", 1) @@ -201,13 +199,8 @@ def commonFaserSCT_DigitizationConfig(name,**kwargs): def FaserSCT_DigitizationTool(name="FaserSCT_DigitizationTool", **kwargs): from Digitization.DigitizationFlags import digitizationFlags - if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi(): - from OverlayCommonAlgs.OverlayFlags import overlayFlags - kwargs.setdefault("OutputObjectName", overlayFlags.bkgPrefix() + "SCT_RDOs") - kwargs.setdefault("OutputSDOName", overlayFlags.bkgPrefix() + "SCT_SDO_Map") - else: - kwargs.setdefault("OutputObjectName", "SCT_RDOs") - kwargs.setdefault("OutputSDOName", "SCT_SDO_Map") + kwargs.setdefault("OutputObjectName", "SCT_RDOs") + kwargs.setdefault("OutputSDOName", "SCT_SDO_Map") # kwargs.setdefault("HardScatterSplittingMode", 0) return commonFaserSCT_DigitizationConfig(name,**kwargs) diff --git a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py index 95d6b690ce2a9579c10d9c8e60f3daa614dc4e8b..a4bd9fb2c54f97e9983106eb6743c00bb772e585 100644 --- a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py +++ b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py @@ -58,12 +58,8 @@ def FaserSCT_DigitizationCommonCfg(flags, name="FaserSCT_DigitizationToolCommon" def FaserSCT_DigitizationToolCfg(flags, name="FaserSCT_DigitizationTool", **kwargs): """Return ComponentAccumulator with configured FaserSCT digitization tool""" - if flags.Digitization.PileUpPremixing: - kwargs.setdefault("OutputObjectName", flags.Overlay.BkgPrefix + "SCT_RDOs") - kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "SCT_SDO_Map") - else: - kwargs.setdefault("OutputObjectName", "SCT_RDOs") - kwargs.setdefault("OutputSDOName", "SCT_SDO_Map") + kwargs.setdefault("OutputObjectName", "SCT_RDOs") + kwargs.setdefault("OutputSDOName", "SCT_SDO_Map") #kwargs.setdefault("HardScatterSplittingMode", 0) return FaserSCT_DigitizationCommonCfg(flags, name, **kwargs) @@ -194,9 +190,7 @@ def FaserSCT_FrontEndCfg(flags, name="FaserSCT_FrontEnd", **kwargs): acc = FaserSCT_ReadCalibChipDataCfg(flags) kwargs.setdefault("SCT_ReadCalibChipDataTool", acc.popPrivateTools()) # DataCompressionMode: 1 is level mode x1x (default), 2 is edge mode 01x, 3 is expanded any hit xxx - if flags.Digitization.PileUpPremixing: - kwargs.setdefault("DataCompressionMode", 3) - elif False and flags.Input.isMC: # obsolete(?) Overlay flag + if False and flags.Input.isMC: # obsolete(?) Overlay flag kwargs.setdefault("DataCompressionMode", 2) elif flags.Beam.BunchSpacing <= 50: kwargs.setdefault("DataCompressionMode", 1) diff --git a/Tracker/TrackerEventCnv/TrackerByteStream/src/TrackerDataDecoderTool.cxx b/Tracker/TrackerEventCnv/TrackerByteStream/src/TrackerDataDecoderTool.cxx index 0d13d65defb7e2d468c289b29a94e07486e6531e..e3c2b07fddfdc0305326f11a27def61644e1b6d0 100644 --- a/Tracker/TrackerEventCnv/TrackerByteStream/src/TrackerDataDecoderTool.cxx +++ b/Tracker/TrackerEventCnv/TrackerByteStream/src/TrackerDataDecoderTool.cxx @@ -45,6 +45,9 @@ TrackerDataDecoderTool::initialize() ATH_CHECK(detStore()->retrieve(m_sctID, "FaserSCT_ID")); + auto first_wafer = m_sctID->wafer_begin(); + m_trb0Station = m_sctID->station(*first_wafer); + m_sctContext = m_sctID->wafer_context(); m_phiReversed.resize(m_sctID->wafer_hash_max(), false); @@ -113,8 +116,8 @@ TrackerDataDecoderTool::convert(const DAQFormats::EventFull* re, if ((frag->source_id()&0xFFFF0000) != DAQFormats::SourceIDs::TrackerSourceID) continue; ATH_MSG_DEBUG("Fragment:\n" << *frag); uint32_t trb = frag->source_id() & 0x0000FFFF; - // FIXME: will need to be updated for interface detector - int station = 1 + trb / TrackerDataFragment::PLANES_PER_STATION; + // FIXME: 1 by default; needs to be 0 for IFT + int station = m_trb0Station + trb / TrackerDataFragment::PLANES_PER_STATION; int plane = trb % TrackerDataFragment::PLANES_PER_STATION; // Exceptions are a no-no in Athena/Calypso, so catch any thrown by faser-common @@ -241,7 +244,7 @@ TrackerDataDecoderTool::convert(const DAQFormats::EventFull* re, } } } - catch (const TrackerDataException& exc) + catch (const TrackerData::TrackerDataException& exc) { ATH_MSG_ERROR("TrackerDataException: " << exc.what()); continue; @@ -301,7 +304,7 @@ TrackerDataDecoderTool::convert(const DAQFormats::EventFull* re, // // Do the conversion here using whatever it takes // // try { // // rdo->setData( fragment ); - // //} catch ( TrackerDataException& e ) { + // //} catch ( TrackerData::TrackerDataException& e ) { // // ATH_MSG_INFO("TrackerDataDecoderTool:\n" // // <<e.what() // // << "\nTracker data not filled!\n"); diff --git a/Tracker/TrackerEventCnv/TrackerByteStream/src/TrackerDataDecoderTool.h b/Tracker/TrackerEventCnv/TrackerByteStream/src/TrackerDataDecoderTool.h index 401c0ec5cb4fa857433e565383aef49a4072617b..1d9507c2b6d8ca77467e2685d26ff9d459f83b9f 100644 --- a/Tracker/TrackerEventCnv/TrackerByteStream/src/TrackerDataDecoderTool.h +++ b/Tracker/TrackerEventCnv/TrackerByteStream/src/TrackerDataDecoderTool.h @@ -41,6 +41,8 @@ private: "ModuleMap", {7, 2, 5, 0, 3, 6, 1, 4}, "Mapping from online to offline module numbers" }; + + Gaudi::Property<uint32_t> m_trb0Station { this, "Trb0StationNumber", 1, "Station number for TRB #0" }; }; #endif /* TRACKERBYTESTREAM_TRACKERDATADECODERTOOL_H */ diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/TrackerPrepRawData/FaserSCT_ClusterCnv_p3.cxx b/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/TrackerPrepRawData/FaserSCT_ClusterCnv_p3.cxx index 038542e50285a76e1a41fb77156b465bd96b4bb9..22879d7c4979c1254d49d6fc296a58b2ff2cccd6 100644 --- a/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/TrackerPrepRawData/FaserSCT_ClusterCnv_p3.cxx +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/TrackerPrepRawData/FaserSCT_ClusterCnv_p3.cxx @@ -49,11 +49,11 @@ FaserSCT_ClusterCnv_p3::createSCT_Cluster (const Tracker::FaserSCT_Cluster_p3* p m_swCnv.persToTrans(&persObj->m_width, &sw, log); // Error matrix - auto cmat = std::make_unique<Amg::MatrixX>(2,2); - (*cmat)(0,0) = static_cast<double>(persObj->m_mat00); - (*cmat)(1,0) = static_cast<double>(persObj->m_mat01); - (*cmat)(0,1) = static_cast<double>(persObj->m_mat01); - (*cmat)(1,1) = static_cast<double>(persObj->m_mat11); + auto cmat = Amg::MatrixX(2,2); + (cmat)(0,0) = static_cast<double>(persObj->m_mat00); + (cmat)(1,0) = static_cast<double>(persObj->m_mat01); + (cmat)(0,1) = static_cast<double>(persObj->m_mat01); + (cmat)(1,1) = static_cast<double>(persObj->m_mat11); Tracker::FaserSCT_Cluster clus (clusId, localPos, diff --git a/Tracker/TrackerRecAlgs/TrackCounts/test/TrackCountsDbg.py b/Tracker/TrackerRecAlgs/TrackCounts/test/TrackCountsDbg.py index bb49fa23f6acc2e6e1340b22009720da2f61a8e8..558aac087cdfcdec292ed113b92a803aacba2369 100644 --- a/Tracker/TrackerRecAlgs/TrackCounts/test/TrackCountsDbg.py +++ b/Tracker/TrackerRecAlgs/TrackCounts/test/TrackCountsDbg.py @@ -12,7 +12,7 @@ from CalypsoConfiguration.AllConfigFlags import ConfigFlags from CalypsoConfiguration.MainServicesConfig import MainServicesCfg from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg from FaserByteStreamCnvSvc.FaserByteStreamCnvSvcConfig import FaserByteStreamCnvSvcCfg -from ScintRecAlgs.ScintRecAlgsConfig import WaveformReconstructionCfg +from WaveRecAlgs.WaveRecAlgsConfig import WaveformReconstructionCfg from TrackerPrepRawDataFormation.TrackerPrepRawDataFormationConfig import FaserSCT_ClusterizationCfg from TrackerClusterFit.TrackerClusterFitConfig import ClusterFitAlgCfg from TrackCounts.TrackCountsConfig import TrackCountsAlgCfg @@ -53,7 +53,7 @@ itemList = [ "xAOD::EventInfo#*", "FaserSCT_RDO_Container#*", "xAOD::FaserTriggerData#*", "xAOD::FaserTriggerDataAux#*", - "ScintWaveformContainer#*", + "RawWaveformContainer#*", "TrackCollection#*", "xAOD::WaveformHitContainer#*", "xAOD::WaveformHitAuxContainer#*", diff --git a/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.cxx b/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.cxx index ab88bf504ec140e847eaed5e39eee664943ad164..c9dda96331919df6f3ab97d9d3bcd85c62849360 100644 --- a/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.cxx +++ b/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.cxx @@ -99,6 +99,29 @@ StatusCode ClusterFitAlg::execute(const EventContext& ctx) const FaserSCT_ClusterContainer::const_iterator clusterCollections {clusterContainer->begin()}; FaserSCT_ClusterContainer::const_iterator clusterCollectionsEnd {clusterContainer->end()}; + + // Make a first pass and count clusters + // Only if cluster limit is set to non-zero value + if (m_clusterLimit > 0) { + unsigned int n_clusters(0); + for (; clusterCollections != clusterCollectionsEnd; ++clusterCollections) + { + const Tracker::FaserSCT_ClusterCollection* cl{*clusterCollections}; + n_clusters += cl->size(); + } + + // Give up if too many clusters found + if (n_clusters > m_clusterLimit) { + m_numberOfSkippedEvents++; + ATH_MSG_WARNING("Skipping event with " << n_clusters << " clusters!"); + ATH_CHECK(trackContainer.record(std::move(outputTracks))); + return StatusCode::SUCCESS; + } + + // Reset begin pointer and tabulate cluster info by wafer + clusterCollections = clusterContainer->begin(); + } + for (; clusterCollections != clusterCollectionsEnd; ++clusterCollections) { ++m_numberOfClusterCollection; @@ -352,11 +375,11 @@ StatusCode ClusterFitAlg::finalize() ATH_MSG_INFO("ClusterFitAlg::finalize()"); ATH_MSG_INFO( m_numberOfEvents << " events processed" ); ATH_MSG_INFO( m_numberOfTriggeredEvents << " triggered events processed" ); + ATH_MSG_INFO( m_numberOfSkippedEvents << " events skipped for too many clusters" ); ATH_MSG_INFO( m_numberOfClusterCollection<< " cluster collections processed" ); ATH_MSG_INFO( m_numberOfCluster<< " cluster processed" ); ATH_MSG_INFO( m_numberOfFits << " fits performed" ); - return StatusCode::SUCCESS; } @@ -378,12 +401,13 @@ ClusterFitAlg::AddTrack(std::unique_ptr<TrackCollection>& tracks, s->push_back( GetState(fitResult, fitCovariance, nullptr, station) ); for (const clusterInfo* cInfo : fitClusters) - { - s->push_back( GetState(fitResult, fitCovariance, cInfo->cluster, station) ); - } + { + s->push_back( GetState(fitResult, fitCovariance, cInfo->cluster, station) ); + } // Create and store track - tracks->push_back(new Trk::Track(i, s , q)); + std::unique_ptr<DataVector<const Trk::TrackStateOnSurface>> sink(s); + tracks->push_back(new Trk::Track(i, std::move(*sink) , q)); return StatusCode::SUCCESS; } @@ -422,7 +446,7 @@ ClusterFitAlg::GetState( const Eigen::Matrix< double, 4, 1 >& fitResult, fitCluster->localCovariance(), m_idHelper->wafer_hash(fitCluster->detectorElement()->identify())}; } - std::unique_ptr<Trk::TrackParameters> p { new Trk::CurvilinearParameters { pos, phi, theta, qoverp, covPar5.release() } }; + std::unique_ptr<Trk::TrackParameters> p { new Trk::CurvilinearParameters { pos, phi, theta, qoverp, *(covPar5.release()) } }; return new Trk::TrackStateOnSurface { rot, p.release() }; } diff --git a/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.h b/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.h index 54868f69ebbfabce756163e0c7180e00e794747f..e36f458c2b389a27fa4bcdde477dfbd3214f436d 100644 --- a/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.h +++ b/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.h @@ -69,7 +69,6 @@ class ClusterFitAlg : public AthReentrantAlgorithm, AthHistogramming //@} const ServiceHandle<ITHistSvc>& histSvc() const; - private: /** @name Disallow default instantiation, copy, assignment */ //@{ @@ -192,6 +191,11 @@ class ClusterFitAlg : public AthReentrantAlgorithm, AthHistogramming DoubleArrayProperty m_zCenter { this, "ZCenter", { -1452.2925, 47.7075 , 1237.7075, 2427.7075 }, "Global z position at which to reconstruct track parameters"}; UnsignedIntegerProperty m_triggerMask { this, "TriggerMask", 0x0, "Trigger mask to analyze (0 = pass all)" }; + + // Add property to skip reconstruction if cluster multiplicity is too large + // Set to 0 for no limit + UnsignedIntegerProperty m_clusterLimit { this, "ClusterLimit", 200, "Limit on cluster multiplicity to run algorithm" }; + /// a handle on the Hist/TTree registration service ServiceHandle<ITHistSvc> m_histSvc; @@ -209,6 +213,7 @@ class ClusterFitAlg : public AthReentrantAlgorithm, AthHistogramming mutable std::atomic<int> m_numberOfClusterCollection{0}; mutable std::atomic<int> m_numberOfCluster{0}; mutable std::atomic<int> m_numberOfFits{0}; + mutable std::atomic<int> m_numberOfSkippedEvents{0}; }; // For the THistSvc diff --git a/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TestBeamClusterFitDbg.py b/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TestBeamClusterFitDbg.py new file mode 100755 index 0000000000000000000000000000000000000000..294e066edfd45ccea5dc75a8291e5ad0fd88d969 --- /dev/null +++ b/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TestBeamClusterFitDbg.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python +"""Test various ComponentAccumulator Digitization configuration modules + +Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +""" +import sys +from AthenaCommon.Logging import log, logging +from AthenaCommon.Constants import DEBUG, VERBOSE, INFO +from AthenaCommon.Configurable import Configurable +from CalypsoConfiguration.AllConfigFlags import ConfigFlags +from AthenaConfiguration.TestDefaults import defaultTestFiles +from CalypsoConfiguration.MainServicesConfig import MainServicesCfg +from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg +from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg +from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg +#from Digitization.DigitizationParametersConfig import writeDigitizationMetadata +from WaveRecAlgs.WaveRecAlgsConfig import WaveformReconstructionCfg +from TrackerPrepRawDataFormation.TrackerPrepRawDataFormationConfig import FaserSCT_ClusterizationCfg +from TrackerClusterFit.TrackerClusterFitConfig import ClusterFitAlgCfg +from TrackerSpacePointFormation.TrackerSpacePointFormationConfig import TrackerSpacePointFinderCfg +#from MCTruthSimAlgs.RecoTimingConfig import MergeRecoTimingObjCfg + +# Set up logging and new style config +log.setLevel(DEBUG) +Configurable.configurableRun3Behavior = True + +# Configure +ConfigFlags.Input.Files = [ + 'tb.raw', + #'/eos/project-f/faser-commissioning/TI12Data/Run-001332/Faser-Physics-001332-00000.raw', + #'/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00000.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00001.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00002.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00003.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00004.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00005.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00006.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00007.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00008.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00009.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00010.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00011.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00012.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00013.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00014.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00015.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00016.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00017.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00018.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00019.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00020.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00021.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00022.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00023.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00024.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00025.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00026.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00027.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00028.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00029.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00030.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00031.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00032.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00033.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00034.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00035.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00036.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00037.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00038.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00039.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00040.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00041.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00042.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00043.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00044.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00045.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00046.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00047.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00048.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00049.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00050.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00051.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00052.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00053.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00054.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00055.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00056.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00057.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00058.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00059.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00060.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00061.raw', + # '/eos/project-f/faser-commissioning/winter2020CosmicsStand/Run-000608/Faser-Physics-000608-00062.raw' +] +#ConfigFlags.Output.ESDFileName = "run608.ESD.pool.root" +#ConfigFlags.Output.ESDFileName = "run001332.ESD.pool.root" +ConfigFlags.Output.ESDFileName = "tb.ESD.pool.root" +ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-02" # Always needed; must match FaserVersion +ConfigFlags.IOVDb.DatabaseInstance = "OFLP200" # Use MC conditions for now +ConfigFlags.Input.ProjectName = "data21" # Needed to bypass autoconfig +ConfigFlags.Input.isMC = False # Needed to bypass autoconfig +ConfigFlags.GeoModel.FaserVersion = "FASER-TB00" # FASER geometry +ConfigFlags.Common.isOnline = False +ConfigFlags.GeoModel.Align.Dynamic = False +ConfigFlags.Beam.NumberOfCollisions = 0. + +ConfigFlags.Detector.GeometryFaserSCT = True + +ConfigFlags.lock() + +# Core components +acc = MainServicesCfg(ConfigFlags) +#acc.merge(PoolReadCfg(ConfigFlags)) +acc.merge(PoolWriteCfg(ConfigFlags)) + +#acc.merge(writeDigitizationMetadata(ConfigFlags)) + +from FaserByteStreamCnvSvc.FaserByteStreamCnvSvcConfig import FaserByteStreamCnvSvcCfg +acc.merge(FaserByteStreamCnvSvcCfg(ConfigFlags)) +acc.merge(WaveformReconstructionCfg(ConfigFlags)) +acc.merge(FaserSCT_ClusterizationCfg(ConfigFlags, DataObjectName="SCT_EDGEMODE_RDOs")) +acc.merge(ClusterFitAlgCfg(ConfigFlags)) +acc.merge(TrackerSpacePointFinderCfg(ConfigFlags)) +#acc.getEventAlgo("Tracker::ClusterFitAlg").OutputLevel = DEBUG + +from AthenaConfiguration.ComponentFactory import CompFactory +decoderTool = CompFactory.RawWaveformDecoderTool(name = "RawWaveformDecoderTool", + CaloChannels = [0, 1, 2, 3, 4, 5], + PreshowerChannels = [6, 7], + TriggerChannels = [8, 9], + VetoChannels=[]) +acc.addPublicTool(decoderTool) + +# explicitly save RDO information +from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg +itemList = [ "xAOD::EventInfo#*", + "xAOD::EventAuxInfo#*", + "FaserSCT_RDO_Container#*", + "xAOD::FaserTriggerData#*", + "xAOD::FaserTriggerDataAux#*", + "RawWaveformContainer#*", + "TrackCollection#*", + "xAOD::WaveformHitContainer#*", + "xAOD::WaveformHitAuxContainer#*", + "xAOD::WaveformClock#*", + "xAOD::WaveformClockAuxInfo#*", + ] +acc.merge(OutputStreamCfg(ConfigFlags, "ESD", itemList)) +acc.getEventAlgo("OutputStreamESD").AcceptAlgs = ["Tracker::ClusterFitAlg"] +# Timing +#acc.merge(MergeRecoTimingObjCfg(ConfigFlags)) + +# Dump config +# logging.getLogger('forcomps').setLevel(VERBOSE) +# acc.foreach_component("*").OutputLevel = VERBOSE +# acc.foreach_component("*ClassID*").OutputLevel = INFO +# acc.getCondAlgo("FaserSCT_AlignCondAlg").OutputLevel = VERBOSE +# acc.getCondAlgo("FaserSCT_DetectorElementCondAlg").OutputLevel = VERBOSE +# acc.getService("StoreGateSvc").Dump = True +# acc.getService("ConditionStore").Dump = True +# acc.printConfig(withDetails=True) +# ConfigFlags.dump() + +# Execute and finish +sc = acc.run(maxEvents=1000) + +# Success should be 0 +sys.exit(not sc.isSuccess()) diff --git a/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TrackerClusterFitDbg.py b/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TrackerClusterFitDbg.py index 308b5ff3015435a4671d7410f5b97fae54be7dd5..8df7e38a3c75cc163b4fe3f5b68ee6c23d49bb11 100644 --- a/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TrackerClusterFitDbg.py +++ b/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TrackerClusterFitDbg.py @@ -14,7 +14,7 @@ from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg #from Digitization.DigitizationParametersConfig import writeDigitizationMetadata -from ScintRecAlgs.ScintRecAlgsConfig import WaveformReconstructionCfg +from WaveRecAlgs.WaveRecAlgsConfig import WaveformReconstructionCfg from TrackerPrepRawDataFormation.TrackerPrepRawDataFormationConfig import FaserSCT_ClusterizationCfg from TrackerClusterFit.TrackerClusterFitConfig import ClusterFitAlgCfg from TrackerSpacePointFormation.TrackerSpacePointFormationConfig import TrackerSpacePointFinderCfg @@ -128,7 +128,7 @@ itemList = [ "xAOD::EventInfo#*", "FaserSCT_RDO_Container#*", "xAOD::FaserTriggerData#*", "xAOD::FaserTriggerDataAux#*", - "ScintWaveformContainer#*", + "RawWaveformContainer#*", "TrackCollection#*", "xAOD::WaveformHitContainer#*", "xAOD::WaveformHitAuxContainer#*", @@ -155,4 +155,4 @@ acc.getEventAlgo("OutputStreamESD").AcceptAlgs = ["Tracker::ClusterFitAlg"] sc = acc.run(maxEvents=-1) # Success should be 0 -sys.exit(not sc.isSuccess()) \ No newline at end of file +sys.exit(not sc.isSuccess()) diff --git a/Tracker/TrackerRecAlgs/TrackerSeedFinder/src/TrackerSeedFinder.cxx b/Tracker/TrackerRecAlgs/TrackerSeedFinder/src/TrackerSeedFinder.cxx index f8aef6daed4a6d9af723ccd7ef7c4fc573c28c6c..53ffec6a238914461c8780138a4f36704c36f49c 100755 --- a/Tracker/TrackerRecAlgs/TrackerSeedFinder/src/TrackerSeedFinder.cxx +++ b/Tracker/TrackerRecAlgs/TrackerSeedFinder/src/TrackerSeedFinder.cxx @@ -138,7 +138,7 @@ namespace Tracker CHECK(m_thistSvc->regHist("/TrackerSeedFinder/sp/sp_dx_intercept_after",m_hist_dx_intercept_after)); CHECK(m_thistSvc->regHist("/TrackerSeedFinder/sp/sp_line",m_hist_line)); - ATH_MSG_INFO( "TrackerSeedFinder::initialized for package version " << PACKAGE_VERSION ); + ATH_MSG_INFO( "TrackerSeedFinder::initialized" ); return StatusCode::SUCCESS; } diff --git a/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/src/StatisticsAlg.cxx b/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/src/StatisticsAlg.cxx index bf8b17d4fc16103c45cb0256bd3d7c644a3afc9e..5589297e584762c57a6450790c2a6d65a170a50e 100755 --- a/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/src/StatisticsAlg.cxx +++ b/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/src/StatisticsAlg.cxx @@ -114,7 +114,7 @@ StatusCode StatisticsAlg::initialize() CHECK(m_thistSvc->regHist("/StatisticsAlg/sp/sp_x_y_plane6",m_hist_x_y_plane6)); CHECK(m_thistSvc->regHist("/StatisticsAlg/sp/sp_x_y_plane7",m_hist_x_y_plane7)); CHECK(m_thistSvc->regHist("/StatisticsAlg/sp/sp_x_y_plane8",m_hist_x_y_plane8)); - ATH_MSG_INFO( "StatisticsAlg::initialized for package version " << PACKAGE_VERSION ); + ATH_MSG_INFO( "StatisticsAlg::initialized" ); return StatusCode::SUCCESS; } diff --git a/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/src/TrackerSpacePointFinder.cxx b/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/src/TrackerSpacePointFinder.cxx index 5c9940aeaa3cef28e0631d9d6a6480c54f473b57..62f63d8db08a27d9c04a347347954e07e4ee8968 100755 --- a/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/src/TrackerSpacePointFinder.cxx +++ b/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/src/TrackerSpacePointFinder.cxx @@ -95,7 +95,7 @@ StatusCode TrackerSpacePointFinder::initialize() if (!m_monTool.empty()) CHECK(m_monTool.retrieve()); - ATH_MSG_INFO( "Initialized for package version " << PACKAGE_VERSION ); + ATH_MSG_INFO( "Initialized" ); return StatusCode::SUCCESS; } diff --git a/Tracker/TrackerRecAlgs/TruthSeededTrackFinder/src/TruthSeededTrackFinder.cxx b/Tracker/TrackerRecAlgs/TruthSeededTrackFinder/src/TruthSeededTrackFinder.cxx index 90228db2ef2cf233968ae6a481df1e64858b5214..1094424fb0cbd11f0a9618aedbd2813bfca4ded8 100755 --- a/Tracker/TrackerRecAlgs/TruthSeededTrackFinder/src/TruthSeededTrackFinder.cxx +++ b/Tracker/TrackerRecAlgs/TruthSeededTrackFinder/src/TruthSeededTrackFinder.cxx @@ -180,7 +180,7 @@ namespace Tracker CHECK(m_thistSvc->regHist("/TruthTrackSeeds/sp/InitReso_py",m_hist_InitReso_py)); CHECK(m_thistSvc->regHist("/TruthTrackSeeds/sp/InitReso_pz",m_hist_InitReso_pz)); //!!!!!!!!!!!!!!!!!!!! - ATH_MSG_INFO( "TruthTrackSeeds::initialized for package version " << PACKAGE_VERSION ); + ATH_MSG_INFO( "TruthTrackSeeds::initialized" ); return StatusCode::SUCCESS; } diff --git a/Tracker/TrackerRecAlgs/TruthSeededTrackFinder/src/TruthSeededTrackFinder.h b/Tracker/TrackerRecAlgs/TruthSeededTrackFinder/src/TruthSeededTrackFinder.h index 1e91539955a063585de8b823a30a5d28081acee4..bb09dfc937b252c2e4af9e4d8dd8e5e49e24358d 100755 --- a/Tracker/TrackerRecAlgs/TruthSeededTrackFinder/src/TruthSeededTrackFinder.h +++ b/Tracker/TrackerRecAlgs/TruthSeededTrackFinder/src/TruthSeededTrackFinder.h @@ -69,7 +69,7 @@ class TruthSeededTrackFinder:public AthReentrantAlgorithm { SG::ReadCondHandleKey<TrackerDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"}; - SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "GEN_EVENT" }; + SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "BeamTruthEvent" }; SG::ReadHandleKey<FaserSiHitCollection> m_faserSiHitKey { this, "FaserSiHitCollection", "SCT_Hits" }; SG::ReadHandleKey<FaserSCT_RDO_Container> m_faserRdoKey { this, "FaserSCT_RDO_Container", "SCT_RDOs"}; SG::ReadHandleKey<TrackerSimDataCollection> m_sctMap {this, "TrackerSimDataCollection", "SCT_SDO_Map"}; diff --git a/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/FaserSCT_Cluster.h b/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/FaserSCT_Cluster.h index 109d093c41099fee1a164c9dc38580fb9e2d292d..71412ba7aaa7bb44c863b1fb75ff92b50233bd13 100755 --- a/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/FaserSCT_Cluster.h +++ b/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/FaserSCT_Cluster.h @@ -44,18 +44,16 @@ class FaserSCT_Cluster : public TrackerCluster { const std::vector<Identifier>& rdoList, const FaserSiWidth& width, const TrackerDD::SiDetectorElement* detEl, - const Amg::MatrixX* locErrMat + const Amg::MatrixX& locErrMat ); // For use by tp converter. - FaserSCT_Cluster( - const Identifier& RDOId, - const Amg::Vector2D& locpos, - std::vector<Identifier>&& rdoList, - const FaserSiWidth& width, - const TrackerDD::SiDetectorElement* detEl, - std::unique_ptr<const Amg::MatrixX> locErrMat - ); + FaserSCT_Cluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + std::vector<Identifier>&& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl, + Amg::MatrixX&& locErrMat); /** dump information about the PRD object. */ virtual MsgStream& dump( MsgStream& stream) const; diff --git a/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/TrackerCluster.h b/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/TrackerCluster.h index 75f3a09f89b70743cd00a5fe620d27ef99866607..79e3bf3031f8c08f34aca8dfd946b15219c850e1 100755 --- a/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/TrackerCluster.h +++ b/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/TrackerCluster.h @@ -19,7 +19,6 @@ // Base class #include "TrkPrepRawData/PrepRawData.h" -#include "CxxUtils/CachedUniquePtr.h" #include "Identifier/Identifier.h" #include "TrackerPrepRawData/FaserSiWidth.h" #include "TrackerReadoutGeometry/SiDetectorElement.h" // cant be forward declared @@ -51,34 +50,63 @@ namespace Tracker public: /** Public, Copy, operator=, constructor*/ - TrackerCluster(); - TrackerCluster(const TrackerCluster &); - TrackerCluster(TrackerCluster &&); - TrackerCluster &operator=(const TrackerCluster &); - TrackerCluster &operator=(TrackerCluster &&); + TrackerCluster() = default; + TrackerCluster(const TrackerCluster &) = default; + TrackerCluster(TrackerCluster &&) = default; + TrackerCluster &operator=(const TrackerCluster &) = default; + TrackerCluster &operator=(TrackerCluster &&) = default; - /** Only constructor for TrackerCluster. - Last datamember might not be always filled and will be 0 by default. - The others including SiDetectorElement have to be given! - */ - - TrackerCluster( - const Identifier& RDOId, - const Amg::Vector2D& locpos, + /** + * Constructor with parameters using ref or omitting Amg::MatrixX. + * If omitted we have any empty one. + */ + TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, const std::vector<Identifier>& rdoList, const FaserSiWidth& width, const TrackerDD::SiDetectorElement* detEl, - const Amg::MatrixX* locErrMat = 0 - ); + const Amg::MatrixX& locErrMat); - TrackerCluster( - const Identifier& RDOId, - const Amg::Vector2D& locpos, + TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const std::vector<Identifier>& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl); + + TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const Amg::Vector3D& globpos, + const std::vector<Identifier>& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl, + const Amg::MatrixX& locErrMat); + + TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const Amg::Vector3D& globpos, + const std::vector<Identifier>& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl); + + /** + * Constructor with parameters using r-value reference of Amg::MatrixX. + * All parameters have to be given! + */ + TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, std::vector<Identifier>&& rdoList, const FaserSiWidth& width, const TrackerDD::SiDetectorElement* detEl, - std::unique_ptr<const Amg::MatrixX> locErrMat - ); + Amg::MatrixX&& locErrMat); + + TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const Amg::Vector3D& globpos, + std::vector<Identifier>&& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl, + Amg::MatrixX&& locErrMat); + // Destructor: virtual ~TrackerCluster(); @@ -95,20 +123,25 @@ namespace Tracker /** return the detector element corresponding to this PRD The pointer will be zero if the det el is not defined (i.e. it was not passed in by the ctor)*/ - virtual const TrackerDD::SiDetectorElement* detectorElement() const override; + virtual const TrackerDD::SiDetectorElement* detectorElement() const override final; /** Interface method checking the type*/ - virtual bool type(Trk::PrepRawDataType::Type type) const final; + virtual bool type(Trk::PrepRawDataType type) const override final; /** dump information about the SiCluster*/ virtual MsgStream& dump( MsgStream& stream) const override; /** dump information about the SiCluster*/ virtual std::ostream& dump( std::ostream& stream) const override; + /// Set the m_detEl and calculate globalPostion + //used by TPCnv converters + void setDetectorElement(const TrackerDD::SiDetectorElement* detEl); + private: + Amg::Vector3D m_globalPosition = Amg::Vector3D::Zero(); + /// col, row, and width in mm FaserSiWidth m_width; //col, row, and width in mm - CxxUtils::CachedUniquePtr<const Amg::Vector3D> m_globalPosition; - const TrackerDD::SiDetectorElement* m_detEl; + const TrackerDD::SiDetectorElement* m_detEl = nullptr; // Identifier m_clusId; // /**see derived classes for definition of meaning of LocalPosition*/ @@ -128,32 +161,6 @@ namespace Tracker MsgStream& operator << (MsgStream& stream, const TrackerCluster& prd); std::ostream& operator << (std::ostream& stream, const TrackerCluster& prd); - /////////////////////////////////////////////////////////////////// - // Inline methods: - /////////////////////////////////////////////////////////////////// - - // return width: - inline const FaserSiWidth& TrackerCluster::width() const - { - return m_width; - } - // return globalPosition: - inline const Amg::Vector3D& TrackerCluster::globalPosition() const - { - if (not m_globalPosition) { - m_globalPosition.set(std::unique_ptr<const Amg::Vector3D>(m_detEl->surface(identify()).localToGlobal(localPosition()))); - } - return *m_globalPosition; - } - - inline const TrackerDD::SiDetectorElement* TrackerCluster::detectorElement() const - { - return m_detEl; - } - - inline bool TrackerCluster::type(Trk::PrepRawDataType::Type type) const - { - return type == Trk::PrepRawDataType::SiCluster; - } } +#include "TrackerCluster.icc" #endif // TRACKERPREPRAWDATA_TRACKERCLUSTER_H diff --git a/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/TrackerCluster.icc b/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/TrackerCluster.icc new file mode 100644 index 0000000000000000000000000000000000000000..cf9a189464cfdb759ec9eb1441c84317c1750eac --- /dev/null +++ b/Tracker/TrackerRecEvent/TrackerPrepRawData/TrackerPrepRawData/TrackerCluster.icc @@ -0,0 +1,36 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +namespace Tracker +{ + // return width: + inline const FaserSiWidth& TrackerCluster::width() const + { + return m_width; + } + // return globalPosition: + inline const Amg::Vector3D& TrackerCluster::globalPosition() const + { + return m_globalPosition; + } + + inline const TrackerDD::SiDetectorElement* TrackerCluster::detectorElement() const + { + return m_detEl; + } + + inline bool TrackerCluster::type(Trk::PrepRawDataType type) const + { + return type == Trk::PrepRawDataType::SiCluster; + } + inline void + TrackerCluster::setDetectorElement(const TrackerDD::SiDetectorElement* detEl) + { + m_detEl = detEl; + if (m_detEl) { + m_globalPosition = + m_detEl->surface(identify()).localToGlobal(localPosition()); + } + } +} \ No newline at end of file diff --git a/Tracker/TrackerRecEvent/TrackerPrepRawData/src/FaserSCT_Cluster.cxx b/Tracker/TrackerRecEvent/TrackerPrepRawData/src/FaserSCT_Cluster.cxx index 7c4b9f474e9166376c117be1b83d1386c69e4b60..8675b0129c7b9c5f7b68eb158f7e51dddd107faf 100755 --- a/Tracker/TrackerRecEvent/TrackerPrepRawData/src/FaserSCT_Cluster.cxx +++ b/Tracker/TrackerRecEvent/TrackerPrepRawData/src/FaserSCT_Cluster.cxx @@ -21,25 +21,27 @@ FaserSCT_Cluster::FaserSCT_Cluster( const std::vector<Identifier>& rdoList, const FaserSiWidth& width, const TrackerDD::SiDetectorElement* detEl, - const Amg::MatrixX* locErrMat + const Amg::MatrixX& locErrMat ) : TrackerCluster(RDOId, locpos, rdoList, width, detEl, locErrMat) { m_hitsInThirdTimeBin=0; } -FaserSCT_Cluster::FaserSCT_Cluster( - const Identifier& RDOId, - const Amg::Vector2D& locpos, - std::vector<Identifier>&& rdoList, - const FaserSiWidth& width, - const TrackerDD::SiDetectorElement* detEl, - std::unique_ptr<const Amg::MatrixX> locErrMat - ) : TrackerCluster(RDOId, locpos, - std::move(rdoList), width, detEl, - std::move(locErrMat)), - m_hitsInThirdTimeBin(0) -{ -} +FaserSCT_Cluster::FaserSCT_Cluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + std::vector<Identifier>&& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl, + Amg::MatrixX&& locErrMat) + : TrackerCluster(RDOId, + locpos, + std::move(rdoList), + width, + detEl, + std::move(locErrMat)) + , m_hitsInThirdTimeBin(0) +{} + // Default constructor: FaserSCT_Cluster::FaserSCT_Cluster():TrackerCluster() diff --git a/Tracker/TrackerRecEvent/TrackerPrepRawData/src/TrackerCluster.cxx b/Tracker/TrackerRecEvent/TrackerPrepRawData/src/TrackerCluster.cxx index a590bf8d1bf31edec0023b52847096eecbca52ce..6a9d9adf9a7f64e91caa7504e83bb6f5a6243c48 100755 --- a/Tracker/TrackerRecEvent/TrackerPrepRawData/src/TrackerCluster.cxx +++ b/Tracker/TrackerRecEvent/TrackerPrepRawData/src/TrackerCluster.cxx @@ -16,96 +16,105 @@ namespace Tracker { // Constructor for EF: -TrackerCluster::TrackerCluster( - const Identifier &RDOId, - const Amg::Vector2D& locpos, - const std::vector<Identifier>& rdoList, - const FaserSiWidth& width, - const TrackerDD::SiDetectorElement* detEl, - const Amg::MatrixX* locErrMat - ) : - PrepRawData(RDOId, locpos, rdoList, locErrMat), //call base class constructor - m_width(width), - m_globalPosition{}, - m_detEl(detEl) {} - - TrackerCluster::TrackerCluster( - const Identifier &RDOId, - const Amg::Vector2D& locpos, - std::vector<Identifier>&& rdoList, - const FaserSiWidth& width, - const TrackerDD::SiDetectorElement* detEl, - std::unique_ptr<const Amg::MatrixX> locErrMat - ) : - PrepRawData(RDOId, locpos, - std::move(rdoList), - std::move(locErrMat)), //call base class constructor - m_width(width), - m_globalPosition{}, - m_detEl(detEl) {} +TrackerCluster::TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const std::vector<Identifier>& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl, + const Amg::MatrixX& locErrMat) + : // call base class constructor + PrepRawData(RDOId, locpos, rdoList, locErrMat) + , m_width(width) + , m_detEl(detEl) +{ + if (m_detEl) { + m_globalPosition = + m_detEl->surface(identify()).localToGlobal(localPosition()); + } +} - // Destructor: -TrackerCluster::~TrackerCluster() +// Constructor for EF: +TrackerCluster::TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const std::vector<Identifier>& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl) + : // call base class constructor + PrepRawData(RDOId, locpos, rdoList, {}) + , m_width(width) + , m_detEl(detEl) { - // do not delete m_detEl since owned by DetectorStore + if (m_detEl) { + m_globalPosition = + m_detEl->surface(identify()).localToGlobal(localPosition()); + } } -// Default constructor: -TrackerCluster::TrackerCluster(): - m_globalPosition{}, - m_detEl(0) +TrackerCluster::TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const Amg::Vector3D& globpos, + const std::vector<Identifier>& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl, + const Amg::MatrixX& locErrMat) + : // call base class constructor + PrepRawData(RDOId, locpos, rdoList, locErrMat) + , m_globalPosition(globpos) + , m_width(width) + , m_detEl(detEl) {} -//copy constructor: -TrackerCluster::TrackerCluster(const TrackerCluster& RIO): - PrepRawData( RIO ), - m_width( RIO.m_width ), - m_globalPosition{}, - m_detEl( RIO.m_detEl ) +TrackerCluster::TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const Amg::Vector3D& globpos, + const std::vector<Identifier>& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl) + : // call base class constructor + PrepRawData(RDOId, locpos, rdoList,{}) + , m_globalPosition(globpos) + , m_width(width) + , m_detEl(detEl) +{} +TrackerCluster::TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + std::vector<Identifier>&& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl, + Amg::MatrixX&& locErrMat) + : // call base class constructor + PrepRawData(RDOId, locpos, std::move(rdoList), std::move(locErrMat)) + , m_width(width) + , m_detEl(detEl) { - // copy only if it exists - if (RIO.m_globalPosition) { - m_globalPosition.set(std::make_unique<Amg::Vector3D>(*RIO.m_globalPosition)); + if (m_detEl) { + m_globalPosition = + m_detEl->surface(identify()).localToGlobal(localPosition()); } } -//move constructor: -TrackerCluster::TrackerCluster(TrackerCluster&& RIO): - PrepRawData( std::move(RIO) ), - m_width( std::move(RIO.m_width) ), - m_globalPosition( std::move(RIO.m_globalPosition) ), - m_detEl( RIO.m_detEl ) +TrackerCluster::TrackerCluster(const Identifier& RDOId, + const Amg::Vector2D& locpos, + const Amg::Vector3D& globpos, + std::vector<Identifier>&& rdoList, + const FaserSiWidth& width, + const TrackerDD::SiDetectorElement* detEl, + Amg::MatrixX&& locErrMat) + : // call base class constructor + PrepRawData(RDOId, locpos, std::move(rdoList), std::move(locErrMat)) + , m_globalPosition(globpos) + , m_width(width) + , m_detEl(detEl) +{} + + // Destructor: +TrackerCluster::~TrackerCluster() { + // do not delete m_detEl since owned by DetectorStore } -//assignment operator -TrackerCluster& TrackerCluster::operator=(const TrackerCluster& RIO){ - if (&RIO !=this) { - Trk::PrepRawData::operator= (RIO); - m_width = RIO.m_width; - if (RIO.m_globalPosition) { - m_globalPosition.set(std::make_unique<Amg::Vector3D>(*RIO.m_globalPosition)); - } else if (m_globalPosition) { - m_globalPosition.release().reset(); - } - m_detEl = RIO.m_detEl ; - } - return *this; -} - -//move operator -TrackerCluster& TrackerCluster::operator=(TrackerCluster&& RIO){ - if (&RIO !=this) { - Trk::PrepRawData::operator= (std::move(RIO)); - m_width = RIO.m_width; - m_globalPosition = std::move(RIO.m_globalPosition); - m_detEl = RIO.m_detEl ; - } - return *this; -} - MsgStream& TrackerCluster::dump( MsgStream& stream) const { stream << "TrackerCluster object"<<std::endl; diff --git a/Tracker/TrackerRecEvent/TrackerRIO_OnTrack/src/FaserSCT_ClusterOnTrack.cxx b/Tracker/TrackerRecEvent/TrackerRIO_OnTrack/src/FaserSCT_ClusterOnTrack.cxx index 7964343741c0dadc9818b4792a8d17e56fe04d33..5567e5cf9ab507ce8e7f076917055adef219e8e8 100644 --- a/Tracker/TrackerRecEvent/TrackerRIO_OnTrack/src/FaserSCT_ClusterOnTrack.cxx +++ b/Tracker/TrackerRecEvent/TrackerRIO_OnTrack/src/FaserSCT_ClusterOnTrack.cxx @@ -29,7 +29,7 @@ Tracker::FaserSCT_ClusterOnTrack::FaserSCT_ClusterOnTrack(const Tracker::FaserSC // Set global position Amg::Vector2D lpos(localParameters().get(Trk::locX), m_positionAlongStrip); - m_globalPosition = detectorElement()->surface(identify()).localToGlobalPos(lpos); + m_globalPosition = detectorElement()->surface(identify()).localToGlobal(lpos); } // Constructor with parameters @@ -45,8 +45,9 @@ Tracker::FaserSCT_ClusterOnTrack::FaserSCT_ClusterOnTrack(const Tracker::FaserSC m_rio.setElement(RIO); //constructing local position provided a global one - std::unique_ptr<const Amg::Vector2D> - lpos{detectorElement()->surface( identify() ).positionOnSurface(globalPosition)}; + std::optional<Amg::Vector2D> lpos{ + detectorElement()->surface(identify()).positionOnSurface(globalPosition) + }; //storing the position along the strip if available m_positionAlongStrip = (lpos) ? (*lpos)[Trk::locY]:0.; @@ -94,7 +95,7 @@ void Tracker::FaserSCT_ClusterOnTrack::setValues(const Trk::TrkDetElementBase* d Amg::Vector2D lpos(localParameters().get(Trk::locX), m_positionAlongStrip); m_globalPosition = - detectorElement()->surface(identify()).localToGlobalPos(lpos); + detectorElement()->surface(identify()).localToGlobal(lpos); } } diff --git a/Tracker/TrackerRecEvent/TrackerSpacePoint/TrackerSpacePoint/FaserSCT_SpacePoint.h b/Tracker/TrackerRecEvent/TrackerSpacePoint/TrackerSpacePoint/FaserSCT_SpacePoint.h index 8a6b7aceb2b233388699f0b7d11f7e874599de44..28c5cc2663b61019656504e176ff273779bb4820 100755 --- a/Tracker/TrackerRecEvent/TrackerSpacePoint/TrackerSpacePoint/FaserSCT_SpacePoint.h +++ b/Tracker/TrackerRecEvent/TrackerSpacePoint/TrackerSpacePoint/FaserSCT_SpacePoint.h @@ -46,23 +46,9 @@ namespace Tracker * on the surface associated to the FIRST member of the PRD-pair clusList. */ //@{ - FaserSCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, - const Amg::Vector3D* position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) ; - - FaserSCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, - const Amg::Vector3D* position, - const Amg::MatrixX* loccov,//assumes ownership of loccov - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) ; - FaserSCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, const Amg::Vector3D& position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) ; - - FaserSCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, - const Amg::Vector3D& position, - const Amg::MatrixX& loccov,//assumes ownership of loccov - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) ; + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusList) ; //@} /** Copy Constructor */ @@ -91,7 +77,7 @@ namespace Tracker /** common method used in constructors. */ void setup(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, const Amg::Vector3D& position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList); + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>&clusList); }; /////////////////////////////////////////////////////////////////// diff --git a/Tracker/TrackerRecEvent/TrackerSpacePoint/src/FaserSCT_SpacePoint.cxx b/Tracker/TrackerRecEvent/TrackerSpacePoint/src/FaserSCT_SpacePoint.cxx index ca62c4ab52f916db61d3c8676495b0b1990cb2e0..68554d010e724fbe59f5c07cbfbb2c02b64d97f9 100755 --- a/Tracker/TrackerRecEvent/TrackerSpacePoint/src/FaserSCT_SpacePoint.cxx +++ b/Tracker/TrackerRecEvent/TrackerSpacePoint/src/FaserSCT_SpacePoint.cxx @@ -20,37 +20,9 @@ namespace Tracker //------------------------------------------------------------- - FaserSCT_SpacePoint::FaserSCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, - const Amg::Vector3D* position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) - : - Trk::SpacePoint() - { - setup(elementIdList,*position,clusList); - setupLocalCovarianceSCT(); - setupGlobalFromLocalCovariance(); - delete position; - } - - //------------------------------------------------------------- - - FaserSCT_SpacePoint::FaserSCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, - const Amg::Vector3D* position, - const Amg::MatrixX* loccov, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) - : - Trk::SpacePoint() - { - Trk::MeasurementBase::m_localCovariance = *loccov; - setup(elementIdList,*position,clusList); - setupGlobalFromLocalCovariance(); - delete loccov; - delete position; - } - FaserSCT_SpacePoint::FaserSCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, const Amg::Vector3D& position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusList) : Trk::SpacePoint() { @@ -59,38 +31,23 @@ namespace Tracker setupGlobalFromLocalCovariance(); } - //------------------------------------------------------------- - - FaserSCT_SpacePoint::FaserSCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, - const Amg::Vector3D& position, - const Amg::MatrixX& loccov, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) - : - Trk::SpacePoint() - { - Trk::MeasurementBase::m_localCovariance = loccov; - setup(elementIdList,position,clusList); - setupGlobalFromLocalCovariance(); - } - - //------------------------------------------------------------- void FaserSCT_SpacePoint::setup(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, const Amg::Vector3D& position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusList) { - m_clusList.first = clusList->first; - m_clusList.second = clusList->second; + m_clusList = clusList; m_position = position ; m_elemIdList.first = elementIdList.first ; m_elemIdList.second = elementIdList.second ; - assert( (clusList->first!=0) && (clusList->second!=0) ); + assert( (clusList.first!=0) && (clusList.second!=0) ); assert(clusList->first->detectorElement()) ; - const Amg::Vector2D* locpos = (clusList->first->detectorElement()->surface().globalToLocal(position)) ; + std::optional<Amg::Vector2D> locpos{ + clusList.first->detectorElement()->surface().globalToLocal(position) + }; assert(locpos); Trk::MeasurementBase::m_localParams = Trk::LocalParameters(*locpos ) ; - delete locpos ; } diff --git a/Tracker/TrackerRecTools/FaserSiClusterizationTool/src/FaserSCT_ClusteringTool.cxx b/Tracker/TrackerRecTools/FaserSiClusterizationTool/src/FaserSCT_ClusteringTool.cxx index dece2904daf8acc0ac4ac9e2d71c681713df8353..2963d98dfdb966c92bf9541052bfe9d0e256b654 100644 --- a/Tracker/TrackerRecTools/FaserSiClusterizationTool/src/FaserSCT_ClusteringTool.cxx +++ b/Tracker/TrackerRecTools/FaserSiClusterizationTool/src/FaserSCT_ClusteringTool.cxx @@ -435,7 +435,7 @@ namespace Tracker const Tracker::FaserSiWidth siWidth(Amg::Vector2D(nStrips, 1), Amg::Vector2D(clusterDim.width, stripLength)); Tracker::FaserSCT_Cluster* cluster = (m_clusterMaker) ? (m_clusterMaker->sctCluster(clusterId, localPos, stripGroup, siWidth, element, m_errorStrategy)) - : (new Tracker::FaserSCT_Cluster(clusterId, localPos, stripGroup, siWidth, element, 0)); + : (new Tracker::FaserSCT_Cluster(clusterId, localPos, stripGroup, siWidth, element, {})); cluster->setHashAndIndex(clusterCollection->identifyHash(), clusterCollection->size()); if (tbinIter != tbinGroups.end()) { cluster->setHitsInThirdTimeBin(*tbinIter); @@ -666,8 +666,8 @@ namespace Tracker V[3] = sn2*v0+cs2*v1; } - Amg::MatrixX* errorMatrix(new Amg::MatrixX(2,2)); - *errorMatrix<<V[0],V[1],V[2],V[3]; + auto errorMatrix = Amg::MatrixX(2,2); + errorMatrix<<V[0],V[1],V[2],V[3]; Tracker::FaserSiWidth siWidth{Amg::Vector2D(dnStrips,1.), Amg::Vector2D(width,stripL)}; diff --git a/Tracker/TrackerRecTools/FaserSiClusterizationTool/src/TrackerClusterMakerTool.cxx b/Tracker/TrackerRecTools/FaserSiClusterizationTool/src/TrackerClusterMakerTool.cxx index 2313a1584a00f63827cbfd9183c5fbf9acd29feb..9b853f514ed2b561219528707a9d15d14d2600b8 100644 --- a/Tracker/TrackerRecTools/FaserSiClusterizationTool/src/TrackerClusterMakerTool.cxx +++ b/Tracker/TrackerRecTools/FaserSiClusterizationTool/src/TrackerClusterMakerTool.cxx @@ -92,8 +92,8 @@ Tracker::FaserSCT_Cluster* TrackerClusterMakerTool::sctCluster( const Amg::Vector2D& colRow = width.colRow();// made ref to avoid // unnecessary copy EJWM - Amg::MatrixX* errorMatrix = new Amg::MatrixX(2,2); - errorMatrix->setIdentity(); + auto errorMatrix = Amg::MatrixX(2,2); + errorMatrix.setIdentity(); // switches are more readable **OPT** // actually they're slower as well (so I'm told) so perhaps @@ -101,37 +101,37 @@ Tracker::FaserSCT_Cluster* TrackerClusterMakerTool::sctCluster( switch (errorStrategy){ case 0: - errorMatrix->fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH); - errorMatrix->fillSymmetric(1,1,square(width.z())*ONE_TWELFTH); + errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH); + errorMatrix.fillSymmetric(1,1,square(width.z())*ONE_TWELFTH); break; case 1: // mat(1,1) = pow(width.phiR()/colRow.x(),2)/12; // single strip - resolution close to pitch/sqrt(12) // two-strip hits: better resolution, approx. 40% lower if(colRow.x() == 1){ - errorMatrix->fillSymmetric(0,0,square(1.05*width.phiR())*ONE_TWELFTH); + errorMatrix.fillSymmetric(0,0,square(1.05*width.phiR())*ONE_TWELFTH); } else if(colRow.x() == 2){ - errorMatrix->fillSymmetric(0,0,square(0.27*width.phiR())*ONE_TWELFTH); + errorMatrix.fillSymmetric(0,0,square(0.27*width.phiR())*ONE_TWELFTH); } else{ - errorMatrix->fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH); + errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH); } - errorMatrix->fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH); + errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH); break; default: // single strip - resolution close to pitch/sqrt(12) // two-strip hits: better resolution, approx. 40% lower if(colRow.x() == 1){ - errorMatrix->fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH); + errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH); } else if(colRow.x() == 2){ - errorMatrix->fillSymmetric(0,0,square(0.27*width.phiR())*ONE_TWELFTH); + errorMatrix.fillSymmetric(0,0,square(0.27*width.phiR())*ONE_TWELFTH); } else{ - errorMatrix->fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH); + errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH); } - errorMatrix->fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH); + errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH); break; } diff --git a/Tracker/TrackerRecTools/FaserSiSpacePointTool/src/TrackerSpacePointMakerTool.cxx b/Tracker/TrackerRecTools/FaserSiSpacePointTool/src/TrackerSpacePointMakerTool.cxx index a26a3c3460a48b131de633dbfe3b3e09f177f39d..d04d721c7a748433d02087fc9ac981e46eeb205d 100644 --- a/Tracker/TrackerRecTools/FaserSiSpacePointTool/src/TrackerSpacePointMakerTool.cxx +++ b/Tracker/TrackerRecTools/FaserSiSpacePointTool/src/TrackerSpacePointMakerTool.cxx @@ -183,10 +183,9 @@ Trk::SpacePoint* TrackerSpacePointMakerTool::makeSCT_SpacePoint(const Tracker::T } if (ok) { ATH_MSG_VERBOSE( "SpacePoint generated at: ( " << point.x() << " , " << point.y() << " , " << point.z() << " ) " ); - const std::pair<IdentifierHash,IdentifierHash> elementIdList( element1->identifyHash() , element2->identifyHash() ); - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* - clusList = new std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>(&cluster1, &cluster2); - return new FaserSCT_SpacePoint(elementIdList, new Amg::Vector3D(point), clusList); + std::pair<IdentifierHash,IdentifierHash> elementIdList( element1->identifyHash() , element2->identifyHash() ); + std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*> clusList {&cluster1, &cluster2 }; + return new FaserSCT_SpacePoint(elementIdList, point, clusList); } return nullptr; @@ -531,9 +530,8 @@ void TrackerSpacePointMakerTool::makeSCT_SpacePoints(const double stripLengthGap ATH_MSG_VERBOSE("SpacePoint generated at: ( " << point.x() << " , " << point.y() << " , " << point.z() << " ) "); const std::pair<IdentifierHash, IdentifierHash> elementIdList(ent->m_element0->identifyHash(), ent->m_element1->identifyHash()); - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* - clusList = new std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>((*I).cluster(), (*J).cluster()); - ent->m_tmpSpacePoints.push_back(new FaserSCT_SpacePoint(elementIdList, new Amg::Vector3D(point), clusList)); + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*> clusList {(*I).cluster(), (*J).cluster()}; + ent->m_tmpSpacePoints.push_back(new FaserSCT_SpacePoint(elementIdList, point, clusList)); } } } diff --git a/Tracking/Acts/ActsInterop/ActsInterop/Logger.h b/Tracking/Acts/ActsInterop/ActsInterop/Logger.h index cf0b4a4f9af8ab364220d680882d3a01d9e9bfb2..e76b7d0e3136b4b0e1f9d08da56f196090d65d8e 100644 --- a/Tracking/Acts/ActsInterop/ActsInterop/Logger.h +++ b/Tracking/Acts/ActsInterop/ActsInterop/Logger.h @@ -20,7 +20,7 @@ public: ActsAthenaPrintPolicy(std::shared_ptr<MsgStream> msg) : m_msg(msg) {} void - flush(const Acts::Logging::Level& lvl, const std::ostringstream& input); + flush(const Acts::Logging::Level& lvl, const std::string& input); private: std::shared_ptr<MsgStream> m_msg; diff --git a/Tracking/Acts/ActsInterop/src/Logger.cxx b/Tracking/Acts/ActsInterop/src/Logger.cxx index e40f9e47943baee1e5a33f7b34d535008661285e..aec48aee54814c60cbb69cb0bfd1759dcb3689cb 100644 --- a/Tracking/Acts/ActsInterop/src/Logger.cxx +++ b/Tracking/Acts/ActsInterop/src/Logger.cxx @@ -29,10 +29,10 @@ namespace { } void -ActsAthenaPrintPolicy::flush(const Acts::Logging::Level& lvl, const std::ostringstream& input) +ActsAthenaPrintPolicy::flush(const Acts::Logging::Level& lvl, const std::string& input) { MSG::Level athLevel = athLevelVector[lvl]; - (*m_msg) << athLevel << input.str() << endmsg; + (*m_msg) << athLevel << input << endmsg; } diff --git a/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FASERMagneticFieldWrapper.h b/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FASERMagneticFieldWrapper.h index bd1c217f6ce986bf181421c57f549a30e2e8db52..091cc8c2734df9a7eb787bf702f6773d805ed1bb 100644 --- a/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FASERMagneticFieldWrapper.h +++ b/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FASERMagneticFieldWrapper.h @@ -12,56 +12,76 @@ #include "Acts/Definitions/Algebra.hpp" #include "Acts/Definitions/Units.hpp" #include "Acts/MagneticField/MagneticFieldContext.hpp" +#include "Acts/MagneticField/MagneticFieldProvider.hpp" -class FASERMagneticFieldWrapper -{ - +class FASERMagneticFieldWrapper final : public Acts::MagneticFieldProvider { public: struct Cache { Cache(const Acts::MagneticFieldContext mctx) { - const auto faserField = mctx.get<const FaserFieldCacheCondObj*>(); + const auto* faserField = mctx.get<const FaserFieldCacheCondObj*>(); faserField->getInitializedCache(fieldCache); } MagField::FaserFieldCache fieldCache; }; - FASERMagneticFieldWrapper() = default; - Acts::Vector3 - getField(const Acts::Vector3& pos, Cache& cache) const - { - double pos0[]{pos.x(), pos.y(), pos.z()}; - double bfield0[]{0., 0., 0.}; - cache.fieldCache.getField(pos0, bfield0); - Acts::Vector3 bfield(bfield0[0], bfield0[1], bfield0[2]); - bfield *= m_bFieldUnit; // kT -> T; + MagneticFieldProvider::Cache + makeCache(const Acts::MagneticFieldContext& mctx) const override { + return Acts::MagneticFieldProvider::Cache::make<Cache>(mctx); + } - return bfield; - } + Acts::Result<Acts::Vector3> + getField(const Acts::Vector3& position, Acts::MagneticFieldProvider::Cache& gcache) const override { + Cache& cache = gcache.get<Cache>(); + double posXYZ[3]; + posXYZ[0] = position.x(); + posXYZ[1] = position.y(); + posXYZ[2] = position.z(); + double BField[3]; - Acts::Vector3 - getFieldGradient(const Acts::Vector3& position, Acts::ActsMatrix<3, 3>& gradient, Cache& cache) const - { - double position0[]{position.x(), position.y(), position.z()}; - double bfield0[]{0., 0., 0.}; - double grad[9]; - cache.fieldCache.getField(position0, bfield0, grad); - Acts::Vector3 bfield(bfield0[0], bfield0[1], bfield0[2]); - Acts::ActsMatrix<3, 3> tempGrad; - tempGrad << grad[0], grad[1], grad[2], grad[3], grad[4], grad[5], grad[6], grad[7], grad[8]; - gradient = tempGrad; - - bfield *= m_bFieldUnit; // kT -> T; - gradient *= m_bFieldUnit; - - return bfield; - } + cache.fieldCache.getField(posXYZ, BField); + + // Magnetic field + Acts::Vector3 bfield{BField[0],BField[1],BField[2]}; + + bfield *= m_bFieldUnit; // kT -> T; + + return Acts::Result<Acts::Vector3>::success(bfield); + } + + Acts::Result<Acts::Vector3> + getFieldGradient(const Acts::Vector3& position, + Acts::ActsMatrix<3, 3>& gradient, + Acts::MagneticFieldProvider::Cache& gcache) const override + { + Cache& cache = gcache.get<Cache>(); + double posXYZ[3]; + posXYZ[0] = position.x(); + posXYZ[1] = position.y(); + posXYZ[2] = position.z(); + double BField[3]; + double grad[9]; + + cache.fieldCache.getField(posXYZ, BField, grad); + + // Magnetic field + Acts::Vector3 bfield{BField[0], BField[1],BField[2]}; + Acts::ActsMatrix<3, 3> tempGrad; + tempGrad << grad[0], grad[1], grad[2], grad[3], grad[4], grad[5], grad[6], grad[7], grad[8]; + gradient = tempGrad; + + + bfield *= m_bFieldUnit; // kT -> T; + gradient *= m_bFieldUnit; + + return Acts::Result<Acts::Vector3>::success(bfield); + } private: diff --git a/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FaserActsExtrapolationTool.h b/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FaserActsExtrapolationTool.h index ee765dd235b4d139d336edabb21a1605169fc483..2f1d2e8aa2affce99cc187eca841aa085204021a 100644 --- a/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FaserActsExtrapolationTool.h +++ b/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FaserActsExtrapolationTool.h @@ -11,6 +11,8 @@ #include "GaudiKernel/ServiceHandle.h" #include "Gaudi/Property.h" #include "GaudiKernel/EventContext.h" +#include "TrkEventPrimitives/ParticleHypothesis.h" +#include "TrkEventPrimitives/PdgToParticleHypothesis.h" // Need to include this early; otherwise, we run into errors with // ReferenceWrapperAnyCompat in clang builds due the is_constructable @@ -27,7 +29,6 @@ #include "FaserActsGeometry/FASERMagneticFieldWrapper.h" // ACTS -#include "Acts/Propagator/EigenStepper.hpp" #include "Acts/Propagator/detail/SteppingLogger.hpp" #include "Acts/Propagator/Navigator.hpp" #include "Acts/Propagator/StandardAborters.hpp" @@ -111,11 +112,8 @@ public: getMagneticFieldContext(const EventContext& ctx) const override; - private: - std::unique_ptr<ActsExtrapolationDetail::VariantPropagator> m_varProp; - std::unique_ptr<const Acts::Logger> m_logger{nullptr}; // Read handle for conditions object to get the field cache @@ -127,16 +125,14 @@ private: Gaudi::Property<std::vector<double>> m_constantFieldVector{this, "ConstantFieldVector", {0, 0, 0}}; Gaudi::Property<double> m_ptLoopers{this, "PtLoopers", 300, "PT loop protection threshold. Will be converted to Acts MeV unit"}; - Gaudi::Property<double> m_maxStepSize{this, "MaxStepSize", 10, "Max step size in Acts m unit"}; + Gaudi::Property<double> m_maxStep{this, "MaxSteps", 4000, "Max number of steps"}; // Material inteaction option Gaudi::Property<bool> m_interactionMultiScatering{this, "InteractionMultiScatering", false, "Whether to consider multiple scattering in the interactor"}; Gaudi::Property<bool> m_interactionEloss{this, "InteractionEloss", false, "Whether to consider energy loss in the interactor"}; Gaudi::Property<bool> m_interactionRecord{this, "InteractionRecord", false, "Whether to record all material interactions"}; - }; - #endif diff --git a/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FaserActsMaterialJsonWriterTool.h b/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FaserActsMaterialJsonWriterTool.h index e3959e307137f5b49633a48f753b57d9d308e554..c29a42c5c2ccf21db1c4c86a4c8fb4defd82a2b9 100644 --- a/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FaserActsMaterialJsonWriterTool.h +++ b/Tracking/Acts/FaserActsGeometry/FaserActsGeometry/FaserActsMaterialJsonWriterTool.h @@ -15,9 +15,7 @@ #include "FaserActsGeometryInterfaces/IFaserActsMaterialJsonWriterTool.h" // ACTS -#include "Acts/Geometry/TrackingGeometry.hpp" -#include "Acts/Plugins/Json/JsonGeometryConverter.hpp" -#include "FaserActsGeometry/FaserActsJsonGeometryConverter.h" +#include "Acts/Plugins/Json/MaterialMapJsonConverter.hpp" namespace Acts { class TrackingGeometry; @@ -36,7 +34,7 @@ public: virtual void - write(const Acts::FaserActsJsonGeometryConverter::DetectorMaterialMaps& detMaterial) const override; + write(const Acts::MaterialMapJsonConverter::DetectorMaterialMaps& detMaterial) const override; virtual void @@ -45,7 +43,7 @@ public: private: -Acts::FaserActsJsonGeometryConverter::Config m_cfg; +Acts::MaterialMapJsonConverter::Config m_cfg; Gaudi::Property<std::string> m_filePath{this, "OutputFile", "material-maps.json", "Output json file for the Material Map"}; Gaudi::Property<bool> m_processSensitives{this, "processSensitives", true, "Write sensitive surface to the json file"}; @@ -54,7 +52,7 @@ Acts::FaserActsJsonGeometryConverter::Config m_cfg; Gaudi::Property<bool> m_processBoundaries{this, "processBoundaries", true, "Write boundary surface to the json file"}; Gaudi::Property<bool> m_processVolumes{this, "processVolumes", true, "Write volume to the json file"}; Gaudi::Property<bool> m_processDenseVolumes{this, "processDenseVolumes", false, "Write dense volume to the json file"}; - Gaudi::Property<bool> m_processnonmaterial{this, "processnonmaterial", false, "Add proto material to all surfaces and volumes"}; + Gaudi::Property<bool> m_processNonMaterial{this, "processnonmaterial", false, "Add proto material to all surfaces and volumes"}; }; #endif diff --git a/Tracking/Acts/FaserActsGeometry/python/ActsGeometryConfig.py b/Tracking/Acts/FaserActsGeometry/python/ActsGeometryConfig.py index 84bfe224aad7f984ffa7ca1f712a2db5525e7427..a1c3c9f1f239befaaa4c10542706cacfdd18e4dd 100644 --- a/Tracking/Acts/FaserActsGeometry/python/ActsGeometryConfig.py +++ b/Tracking/Acts/FaserActsGeometry/python/ActsGeometryConfig.py @@ -5,7 +5,7 @@ FaserActsWriteTrackingGeometry,FaserActsTrackingGeometrySvc,FaserActsTrackingGeo -def ActsTrackingGeometrySvcCfg(configFlags, name = "ActsTrackingGeometrySvc" ) : +def ActsTrackingGeometrySvcCfg(configFlags, name = "ActsTrackingGeometrySvc" , **kwargs) : result = ComponentAccumulator() actsTrackingGeometrySvc = FaserActsTrackingGeometrySvc(name = "FaserActsTrackingGeometrySvc", **kwargs) diff --git a/Tracking/Acts/FaserActsGeometry/python/FaserActsExtrapolationConfig.py b/Tracking/Acts/FaserActsGeometry/python/FaserActsExtrapolationConfig.py index 574f7f82273d076fd6b236488d9a443a17890b68..8720049d249df0064baddab4a91edea401ea2ae1 100644 --- a/Tracking/Acts/FaserActsGeometry/python/FaserActsExtrapolationConfig.py +++ b/Tracking/Acts/FaserActsGeometry/python/FaserActsExtrapolationConfig.py @@ -3,7 +3,7 @@ Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration """ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory -from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg +# from FaserGeoModel.FaserGeoModelConfig import FaserGeometryCfg from FaserSCT_GeoModel.FaserSCT_GeoModelConfig import FaserSCT_GeometryCfg from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg diff --git a/Tracking/Acts/FaserActsGeometry/python/FaserActsMaterialMapping_jobOptions.py b/Tracking/Acts/FaserActsGeometry/python/FaserActsMaterialMapping_jobOptions.py index 23270e4e9eeec0f6ddac95645749d3de1bf714c0..feb3b04d2f978297bfcbea4229d0ff35862d5aee 100644 --- a/Tracking/Acts/FaserActsGeometry/python/FaserActsMaterialMapping_jobOptions.py +++ b/Tracking/Acts/FaserActsGeometry/python/FaserActsMaterialMapping_jobOptions.py @@ -1,3 +1,5 @@ +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS and FASER collaborations + ############################################################### # # Map material from a Geantino scan onto the surfaces and diff --git a/Tracking/Acts/FaserActsGeometry/src/FaserActsExtrapolationTool.cxx b/Tracking/Acts/FaserActsGeometry/src/FaserActsExtrapolationTool.cxx index db23d5c7c3ea32ae9504c7e83738625da5e3c9ab..e84a69c6a3fe54ee30ecb046a0606a1e264da5e5 100644 --- a/Tracking/Acts/FaserActsGeometry/src/FaserActsExtrapolationTool.cxx +++ b/Tracking/Acts/FaserActsGeometry/src/FaserActsExtrapolationTool.cxx @@ -33,8 +33,8 @@ namespace ActsExtrapolationDetail { using VariantPropagatorBase = boost::variant< - Acts::Propagator<Acts::EigenStepper<FASERMagneticFieldWrapper>, Acts::Navigator>, - Acts::Propagator<Acts::EigenStepper<Acts::ConstantBField>, Acts::Navigator> + Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator>, + Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator> >; class VariantPropagator : public VariantPropagatorBase @@ -77,27 +77,33 @@ FaserActsExtrapolationTool::initialize() std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry = m_trackingGeometryTool->trackingGeometry(); - Acts::Navigator navigator(trackingGeometry); + Acts::Navigator navigator( Acts::Navigator::Config{ trackingGeometry } ); if (m_fieldMode == "FASER") { ATH_MSG_INFO("Using FASER magnetic field service"); - using BField_t = FASERMagneticFieldWrapper; ATH_CHECK( m_fieldCondObjInputKey.initialize() ); - BField_t bField; - auto stepper = Acts::EigenStepper<BField_t>(std::move(bField)); + auto bField = std::make_shared<FASERMagneticFieldWrapper>(); + auto stepper = Acts::EigenStepper<>(std::move(bField)); auto propagator = Acts::Propagator<decltype(stepper), Acts::Navigator>(std::move(stepper), std::move(navigator)); m_varProp = std::make_unique<VariantPropagator>(propagator); } else if (m_fieldMode == "Constant") { - std::vector<double> constantFieldVector = m_constantFieldVector; - double Bx = constantFieldVector.at(0); - double By = constantFieldVector.at(1); - double Bz = constantFieldVector.at(2); - ATH_MSG_INFO("Using constant magnetic field: (Bx, By, Bz) = (" << Bx << ", " << By << ", " << Bz << ")"); - using BField_t = Acts::ConstantBField; - BField_t bField(Bx, By, Bz); - auto stepper = Acts::EigenStepper<BField_t>(std::move(bField)); + if (m_constantFieldVector.value().size() != 3) + { + ATH_MSG_ERROR("Incorrect field vector size. Using empty field."); + return StatusCode::FAILURE; + } + + Acts::Vector3 constantFieldVector = Acts::Vector3(m_constantFieldVector[0], + m_constantFieldVector[1], + m_constantFieldVector[2]); + + ATH_MSG_INFO("Using constant magnetic field: (Bx, By, Bz) = (" << m_constantFieldVector[0] << ", " + << m_constantFieldVector[1] << ", " + << m_constantFieldVector[2] << ")"); + auto bField = std::make_shared<Acts::ConstantBField>(constantFieldVector); + auto stepper = Acts::EigenStepper<>(std::move(bField)); auto propagator = Acts::Propagator<decltype(stepper), Acts::Navigator>(std::move(stepper), std::move(navigator)); m_varProp = std::make_unique<VariantPropagator>(propagator); @@ -138,6 +144,7 @@ FaserActsExtrapolationTool::propagationSteps(const EventContext& ctx, < m_ptLoopers * 1_MeV); options.maxStepSize = m_maxStepSize * 1_m; + options.maxSteps = m_maxStep; options.direction = navDir; auto& mInteractor = options.actionList.get<Acts::MaterialInteractor>(); @@ -150,7 +157,7 @@ FaserActsExtrapolationTool::propagationSteps(const EventContext& ctx, auto res = boost::apply_visitor([&](const auto& propagator) -> ResultType { auto result = propagator.propagate(startParameters, options); if (!result.ok()) { - return result.error(); + return result.error(); } auto& propRes = *result; @@ -160,17 +167,19 @@ FaserActsExtrapolationTool::propagationSteps(const EventContext& ctx, output.second = std::move(materialResult); // try to force return value optimization, not sure this is necessary return std::move(output); - }, *m_varProp); + }, *m_varProp); if (!res.ok()) { - ATH_MSG_ERROR("Got error during propagation:" << res.error() << " " << res.error().message() - << ". Returning empty step vector."); + ATH_MSG_ERROR("Got error during propagation: " + << res.error() << " " << res.error().message() + << ". Returning empty step vector."); return {}; } + output = std::move(*res); ATH_MSG_VERBOSE("Collected " << output.first.size() << " steps"); - if (output.first.size() == 0) { - ATH_MSG_WARNING("ZERO steps returned by stepper, that is not typically a good sign"); + if(output.first.size() == 0) { + ATH_MSG_WARNING("ZERO steps returned by stepper, that is not typically a good sign"); } ATH_MSG_VERBOSE(name() << "::" << __FUNCTION__ << " end"); @@ -207,6 +216,7 @@ FaserActsExtrapolationTool::propagate(const EventContext& ctx, = (Acts::VectorHelpers::perp(startParameters.momentum()) < m_ptLoopers * 1_MeV); options.maxStepSize = m_maxStepSize * 1_m; + options.maxSteps = m_maxStep; options.direction = navDir; auto& mInteractor = options.actionList.get<Acts::MaterialInteractor>(); @@ -256,6 +266,7 @@ FaserActsExtrapolationTool::propagationSteps(const EventContext& ctx, = (Acts::VectorHelpers::perp(startParameters.momentum()) < m_ptLoopers * 1_MeV); options.maxStepSize = m_maxStepSize * 1_m; + options.maxSteps = m_maxStep; options.direction = navDir; auto& mInteractor = options.actionList.get<Acts::MaterialInteractor>(); @@ -284,6 +295,7 @@ FaserActsExtrapolationTool::propagationSteps(const EventContext& ctx, << ". Returning empty step vector."); return {}; } + output = std::move(*res); ATH_MSG_VERBOSE("Collected " << output.first.size() << " steps"); if (output.first.size() == 0) { @@ -307,7 +319,6 @@ FaserActsExtrapolationTool::propagate(const EventContext& ctx, Acts::MagneticFieldContext mctx = getMagneticFieldContext(ctx); const FaserActsGeometryContext& gctx - //= m_trackingGeometryTool->getGeometryContext(ctx); = m_trackingGeometryTool->getGeometryContext(ctx); auto anygctx = gctx.context(); @@ -324,6 +335,7 @@ FaserActsExtrapolationTool::propagate(const EventContext& ctx, = (Acts::VectorHelpers::perp(startParameters.momentum()) < m_ptLoopers * 1_MeV); options.maxStepSize = m_maxStepSize * 1_m; + options.maxSteps = m_maxStep; options.direction = navDir; auto& mInteractor = options.actionList.get<Acts::MaterialInteractor>(); @@ -355,4 +367,3 @@ Acts::MagneticFieldContext FaserActsExtrapolationTool::getMagneticFieldContext(c return Acts::MagneticFieldContext(fieldCondObj); } - diff --git a/Tracking/Acts/FaserActsGeometry/src/FaserActsMaterialJsonWriterTool.cxx b/Tracking/Acts/FaserActsGeometry/src/FaserActsMaterialJsonWriterTool.cxx index fe033f8eba019c77761c8edb6f8e89501f31bd89..feeb6f7a79425845048565d73f47f044dad45ccf 100644 --- a/Tracking/Acts/FaserActsGeometry/src/FaserActsMaterialJsonWriterTool.cxx +++ b/Tracking/Acts/FaserActsGeometry/src/FaserActsMaterialJsonWriterTool.cxx @@ -34,16 +34,16 @@ FaserActsMaterialJsonWriterTool::initialize() m_cfg.processBoundaries = m_processBoundaries; m_cfg.processVolumes = m_processVolumes; m_cfg.processDenseVolumes = m_processDenseVolumes; - m_cfg.processnonmaterial = m_processnonmaterial; + m_cfg.processNonMaterial = m_processNonMaterial; return StatusCode::SUCCESS; } void -FaserActsMaterialJsonWriterTool::write(const Acts::FaserActsJsonGeometryConverter::DetectorMaterialMaps& detMaterial) const +FaserActsMaterialJsonWriterTool::write(const Acts::MaterialMapJsonConverter::DetectorMaterialMaps& detMaterial) const { // Evoke the converter - Acts::FaserActsJsonGeometryConverter jmConverter(m_cfg); + Acts::MaterialMapJsonConverter jmConverter(m_cfg); auto jout = jmConverter.materialMapsToJson(detMaterial); // And write the file std::ofstream ofj(m_filePath); @@ -54,7 +54,7 @@ void FaserActsMaterialJsonWriterTool::write(const Acts::TrackingGeometry& tGeometry) const { // Evoke the converter - Acts::FaserActsJsonGeometryConverter jmConverter(m_cfg); + Acts::MaterialMapJsonConverter jmConverter(m_cfg); auto jout = jmConverter.trackingGeometryToJson(tGeometry); // And write the file std::ofstream ofj(m_filePath); diff --git a/Tracking/Acts/FaserActsGeometry/src/FaserActsSurfaceMappingTool.cxx b/Tracking/Acts/FaserActsGeometry/src/FaserActsSurfaceMappingTool.cxx index 4920fb5ce678da084cedcb555b4a5e83044bc87c..ac647013bd177fb74ec5eaa1d26ae74935b3cfb1 100644 --- a/Tracking/Acts/FaserActsGeometry/src/FaserActsSurfaceMappingTool.cxx +++ b/Tracking/Acts/FaserActsGeometry/src/FaserActsSurfaceMappingTool.cxx @@ -38,7 +38,7 @@ FaserActsSurfaceMappingTool::initialize() m_trackingGeometry = m_trackingGeometryTool->trackingGeometry(); - Acts::Navigator navigator(m_trackingGeometry); + Acts::Navigator navigator( Acts::Navigator::Config{ m_trackingGeometry } ); // Make stepper and propagator SlStepper stepper; StraightLinePropagator propagator = StraightLinePropagator(std::move(stepper), std::move(navigator)); diff --git a/Tracking/Acts/FaserActsGeometry/src/FaserActsVolumeMappingTool.cxx b/Tracking/Acts/FaserActsGeometry/src/FaserActsVolumeMappingTool.cxx index 2c863aa2efa9ce40479422db938221d9b813ff78..796ad74e4878cd72e6eae62cfea7333b94bcdc11 100644 --- a/Tracking/Acts/FaserActsGeometry/src/FaserActsVolumeMappingTool.cxx +++ b/Tracking/Acts/FaserActsGeometry/src/FaserActsVolumeMappingTool.cxx @@ -40,7 +40,7 @@ FaserActsVolumeMappingTool::initialize() m_trackingGeometry = m_trackingGeometryTool->trackingGeometry(); - Acts::Navigator navigator(m_trackingGeometry); + Acts::Navigator navigator( Acts::Navigator::Config{ m_trackingGeometry } ); // Make stepper and propagator SlStepper stepper; StraightLinePropagator propagator = StraightLinePropagator(std::move(stepper), std::move(navigator)); diff --git a/Tracking/Acts/FaserActsGeometry/test/FaserActsWriteTrackingGeometry.py b/Tracking/Acts/FaserActsGeometry/test/FaserActsWriteTrackingGeometry.py index 899134b324e2975bb78e33361b6ea974a5aa68f7..61f1e62490ee5d50a9f4d20f0e23a4d5dc55646a 100644 --- a/Tracking/Acts/FaserActsGeometry/test/FaserActsWriteTrackingGeometry.py +++ b/Tracking/Acts/FaserActsGeometry/test/FaserActsWriteTrackingGeometry.py @@ -44,7 +44,7 @@ acc.merge(FaserActsWriteTrackingGeometryCfg(ConfigFlags)) #oStream = acc.getEventAlgo("OutputStreamRDO") #oStream.ItemList += ["EventInfo#*", # "McEventCollection#TruthEvent", -# "McEventCollection#GEN_EVENT" +# "McEventCollection#BeamTruthEvent" # ] # Timing diff --git a/Tracking/Acts/FaserActsGeometryInterfaces/FaserActsGeometryInterfaces/IFaserActsExtrapolationTool.h b/Tracking/Acts/FaserActsGeometryInterfaces/FaserActsGeometryInterfaces/IFaserActsExtrapolationTool.h index 89ec77aa9598f49ac0660379862921ba7ca48901..05b16956611affd2a69a1301693db36a9be3aa12 100644 --- a/Tracking/Acts/FaserActsGeometryInterfaces/FaserActsGeometryInterfaces/IFaserActsExtrapolationTool.h +++ b/Tracking/Acts/FaserActsGeometryInterfaces/FaserActsGeometryInterfaces/IFaserActsExtrapolationTool.h @@ -9,6 +9,7 @@ #include "GaudiKernel/IInterface.h" #include "GaudiKernel/IAlgTool.h" #include "GaudiKernel/EventContext.h" +#include "TrkEventPrimitives/ParticleHypothesis.h" #include "Acts/Propagator/detail/SteppingLogger.hpp" #include "Acts/EventData/TrackParameters.hpp" @@ -72,7 +73,6 @@ class IFaserActsExtrapolationTool : virtual public IAlgTool { virtual Acts::MagneticFieldContext getMagneticFieldContext(const EventContext& ctx) const = 0; - }; #endif diff --git a/Tracking/Acts/FaserActsGeometryInterfaces/FaserActsGeometryInterfaces/IFaserActsMaterialJsonWriterTool.h b/Tracking/Acts/FaserActsGeometryInterfaces/FaserActsGeometryInterfaces/IFaserActsMaterialJsonWriterTool.h index 7fe13c593aaee7207a8da54909ee1e21eba09564..940cad83644a311bf30b5977c87a37ce17200678 100644 --- a/Tracking/Acts/FaserActsGeometryInterfaces/FaserActsGeometryInterfaces/IFaserActsMaterialJsonWriterTool.h +++ b/Tracking/Acts/FaserActsGeometryInterfaces/FaserActsGeometryInterfaces/IFaserActsMaterialJsonWriterTool.h @@ -9,9 +9,7 @@ #include "GaudiKernel/IInterface.h" #include "GaudiKernel/IAlgTool.h" -#include "Acts/Geometry/TrackingGeometry.hpp" -#include "Acts/Plugins/Json/JsonGeometryConverter.hpp" -#include "FaserActsGeometry/FaserActsJsonGeometryConverter.h" +#include "Acts/Plugins/Json/MaterialMapJsonConverter.hpp" namespace Acts { class TrackingGeometry; @@ -24,7 +22,7 @@ public: virtual void - write(const Acts::FaserActsJsonGeometryConverter::DetectorMaterialMaps& detMaterial) const = 0; + write(const Acts::MaterialMapJsonConverter::DetectorMaterialMaps& detMaterial) const = 0; virtual void diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/CombinatorialKalmanFilterAlg.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/CombinatorialKalmanFilterAlg.h index 47edb716ae6c45f0d19cb7ec942bcec12b355c63..3d147019b115c7d7f6818bb06c7aef1c65c6bfec 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/CombinatorialKalmanFilterAlg.h +++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/CombinatorialKalmanFilterAlg.h @@ -22,7 +22,7 @@ class CombinatorialKalmanFilterAlg : public AthReentrantAlgorithm { StatusCode finalize() override; using TrackFinderOptions = - Acts::CombinatorialKalmanFilterOptions<MeasurementCalibrator, Acts::MeasurementSelector>; + Acts::CombinatorialKalmanFilterOptions<IndexSourceLinkAccessor, MeasurementCalibrator, Acts::MeasurementSelector>; using TrackFinderResult = std::vector< Acts::Result<Acts::CombinatorialKalmanFilterResult<IndexSourceLink>>>; using TrackFinderFunction = std::function<TrackFinderResult( diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/FaserActsGeometryContainers.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/FaserActsGeometryContainers.h index a8e93a2cf9b588de4899271505c68dc46ac35873..2f049c7d6429d5d40c6656bb43240950ea19261a 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/FaserActsGeometryContainers.h +++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/FaserActsGeometryContainers.h @@ -87,3 +87,34 @@ boost::container::flat_multiset<T, detail::CompareGeometryId>; template <typename T> using GeometryIdMultimap = GeometryIdMultiset<std::pair<Acts::GeometryIdentifier, T>>; + +/// The accessor for the GeometryIdMultiset container +/// +/// It wraps up a few lookup methods to be used in the Combinatorial Kalman +/// Filter +template <typename T> +struct GeometryIdMultisetAccessor { + using Container = GeometryIdMultiset<T>; + using Key = Acts::GeometryIdentifier; + using Value = typename GeometryIdMultiset<T>::value_type; + using Iterator = typename GeometryIdMultiset<T>::const_iterator; + + // pointer to the container + const Container* container = nullptr; + + // count the number of elements with requested geoId + size_t count(const Acts::GeometryIdentifier& geoId) const { + assert(container != nullptr); + return container->count(geoId); + } + + // get the range of elements with requested geoId + std::pair<Iterator, Iterator> range( + const Acts::GeometryIdentifier& geoId) const { + assert(container != nullptr); + return container->equal_range(geoId); + } + + // get the element using the iterator + const Value& at(const Iterator& it) const { return *it; } +}; diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/FaserActsKalmanFilterAlg.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/FaserActsKalmanFilterAlg.h index 033f0ebc836ca6d81dfb6d23f64db1501f146e64..fd7801c9eef4aa76b4f71215996983cc1a9efd5e 100755 --- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/FaserActsKalmanFilterAlg.h +++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/FaserActsKalmanFilterAlg.h @@ -87,6 +87,8 @@ public: const Acts::KalmanFitterOptions<MeasurementCalibrator, Acts::VoidOutlierFinder>&, const std::vector<const Acts::Surface*>&)>; + using BoundVector = Acts::ActsVector<6>; + // Create the fitter function implementation. static FitterFunction makeFitterFunction( @@ -116,7 +118,7 @@ private: SG::ReadHandleKey<SpacePointForSeedCollection> m_seed_spcollectionKey{this, "FaserSpacePointsSeedsName", "SpacePointForSeedCollection", "SpacePointForSeedCollection"}; - SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "GEN_EVENT" }; + SG::ReadHandleKey<McEventCollection> m_mcEventKey { this, "McEventCollection", "BeamTruthEvent" }; SG::ReadHandleKey<TrackerSimDataCollection> m_sctMap {this, "TrackerSimDataCollection", "SCT_SDO_Map"}; const TrackerDD::SCT_DetectorManager* m_detManager{nullptr}; diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/IndexSourceLink.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/IndexSourceLink.h index 9cb2706cc83256198e12936c62a293e7737002a4..99d101519030fca1d4fd7904bc7549b22a39a6c2 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/IndexSourceLink.h +++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/IndexSourceLink.h @@ -70,3 +70,8 @@ private: /// Since the source links provide a `.geometryId()` accessor, they can be /// stored in an ordered geometry container. using IndexSourceLinkContainer = GeometryIdMultiset<IndexSourceLink>; +/// Accessor for the above source link container +/// +/// It wraps up a few lookup methods to be used in the Combinatorial Kalman +/// Filter +using IndexSourceLinkAccessor = GeometryIdMultisetAccessor<IndexSourceLink>; diff --git a/Tracking/Acts/FaserActsKalmanFilter/python/CombinatorialKalmanFilterConfig.py b/Tracking/Acts/FaserActsKalmanFilter/python/CombinatorialKalmanFilterConfig.py index 0953ea66a7e6e95ccf68af1517c183a04075bdcc..b4bef9af0883abd8219a5d908e3c39603674da55 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/python/CombinatorialKalmanFilterConfig.py +++ b/Tracking/Acts/FaserActsKalmanFilter/python/CombinatorialKalmanFilterConfig.py @@ -1,3 +1,5 @@ +# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS and FASER collaborations + from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg diff --git a/Tracking/Acts/FaserActsKalmanFilter/python/FaserActsKalmanFilterConfig.py b/Tracking/Acts/FaserActsKalmanFilter/python/FaserActsKalmanFilterConfig.py index 0a955d80a50c7fcb5de8878841404565cd870f1b..6d6167c051b868d6032355e5bfd58d2a0f8296bd 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/python/FaserActsKalmanFilterConfig.py +++ b/Tracking/Acts/FaserActsKalmanFilter/python/FaserActsKalmanFilterConfig.py @@ -1,3 +1,5 @@ +# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS and FASER collaborations + from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CombinatorialKalmbanFilterAlg.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CombinatorialKalmbanFilterAlg.cxx index fa80a3f686e13e0eadfc2ca9f61f66ac4e9a88f0..564760f72f7e5a502d4e21f9474a1f00c9e52221 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/CombinatorialKalmbanFilterAlg.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/CombinatorialKalmbanFilterAlg.cxx @@ -107,12 +107,12 @@ StatusCode CombinatorialKalmanFilterAlg::execute(const EventContext& ctx) const {Acts::GeometryIdentifier(), {chi2Max, nMax}}, }; std::unique_ptr<const Acts::Logger> logger - = Acts::getDefaultLogger("CombinatorialKalmanFilter", Acts::Logging::INFO); + = Acts::getDefaultLogger("CombinatorialKalmanFilter", Acts::Logging::VERBOSE); // Set the CombinatorialKalmanFilter options CombinatorialKalmanFilterAlg::TrackFinderOptions options( geoContext, magFieldContext, calibContext, - MeasurementCalibrator(measurements), + IndexSourceLinkAccessor(), MeasurementCalibrator(measurements), Acts::MeasurementSelector(measurementSelectorCfg), Acts::LoggerWrapper{*logger}, pOptions, &(*pSurface)); @@ -135,7 +135,7 @@ StatusCode CombinatorialKalmanFilterAlg::execute(const EventContext& ctx) const const auto& trackFindingOutput = result.value(); // Create a Trajectories result struct trajectories.emplace_back(std::move(trackFindingOutput.fittedStates), - std::move(trackFindingOutput.trackTips), + std::move(trackFindingOutput.lastMeasurementIndices), std::move(trackFindingOutput.fittedParameters)); } else { ATH_MSG_WARNING("Track finding failed for seed " << iseed << " with error" diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.cxx index fe85f076d47e0a87c95faa8a538c9d26700560ae..9d11c2f800b559ebb694765e7286cea85d62ee8d 100755 --- a/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.cxx @@ -83,8 +83,8 @@ using Fitter = Acts::KalmanFitter<Propagator, Updater, Smoother>; namespace ActsExtrapolationDetail { using VariantPropagatorBase = boost::variant< - Acts::Propagator<Acts::EigenStepper<FASERMagneticFieldWrapper>, Acts::DirectNavigator>, - Acts::Propagator<Acts::EigenStepper<Acts::ConstantBField>, Acts::DirectNavigator> + Acts::Propagator<Acts::EigenStepper<>, Acts::DirectNavigator>, + Acts::Propagator<Acts::EigenStepper<>, Acts::DirectNavigator> >; class VariantPropagator : public VariantPropagatorBase @@ -455,7 +455,16 @@ StatusCode FaserActsKalmanFilterAlg::execute() const Acts::Vector4 truthPosTime (pPos.x(), pPos.y(), pPos.z(), time); const Acts::Vector3 truthMomentum_dir = pMom.normalized(); double truthMomentum_abs = pMom.norm(); - Acts::BoundTrackParameters startParameters(initSurface, geoctx, truthPosTime, truthMomentum_dir, truthMomentum_abs, charge, std::nullopt); + + BoundVector params = BoundVector::Zero(); + params[Acts::eBoundLoc0] = pPos.x(); + params[Acts::eBoundLoc1] = pPos.y(); + params[Acts::eBoundPhi] = Acts::VectorHelpers::phi(pMom.normalized()); + params[Acts::eBoundTheta] = Acts::VectorHelpers::theta(pMom.normalized()); + params[Acts::eBoundQOverP] = charge/p; + params[Acts::eBoundTime] = time; + + Acts::BoundTrackParameters startParameters(initSurface, params, charge, std::nullopt); auto truthParam = m_extrapolationTool->propagate(Gaudi::Hive::currentContext(), startParameters, *pSurface); std::cout << "truth pos on 1st layer: " << truthParam->position(geoctx) << std::endl; std::cout << "truth mom on 1st layer: " << truthParam->momentum() << std::endl; @@ -495,32 +504,39 @@ StatusCode FaserActsKalmanFilterAlg::execute() // navigator.resolveMaterial = true; // navigator.resolveSensitive = true; - ActsExtrapolationDetail::VariantPropagator* varProp {nullptr}; + std::unique_ptr<ActsExtrapolationDetail::VariantPropagator> varProp; if (m_fieldMode == "FASER") { ATH_MSG_INFO("Using FASER magnetic field service"); - using BField_t = FASERMagneticFieldWrapper; - BField_t bField; - auto stepper = Acts::EigenStepper<BField_t>(std::move(bField)); + ATH_CHECK( m_fieldCondObjInputKey.initialize() ); + auto bField = std::make_shared<FASERMagneticFieldWrapper>(); + auto stepper = Acts::EigenStepper<>(std::move(bField)); auto propagator = Acts::Propagator<decltype(stepper), Acts::DirectNavigator>(std::move(stepper), std::move(navigator)); - varProp = new VariantPropagator(propagator); + varProp = std::make_unique<VariantPropagator>(propagator); } else if (m_fieldMode == "Constant") { - std::vector<double> constantFieldVector = m_constantFieldVector; - double Bx = constantFieldVector.at(0); - double By = constantFieldVector.at(1); - double Bz = constantFieldVector.at(2); - ATH_MSG_INFO("Using constant magnetic field: (Bx, By, Bz) = (" << Bx << ", " << By << ", " << Bz << ")"); - using BField_t = Acts::ConstantBField; - BField_t bField(Bx, By, Bz); - auto stepper = Acts::EigenStepper<BField_t>(std::move(bField)); + if (m_constantFieldVector.value().size() != 3) + { + ATH_MSG_ERROR("Incorrect field vector size. Using empty field."); + return StatusCode::FAILURE; + } + + Acts::Vector3 constantFieldVector = Acts::Vector3(m_constantFieldVector[0], + m_constantFieldVector[1], + m_constantFieldVector[2]); + + ATH_MSG_INFO("Using constant magnetic field: (Bx, By, Bz) = (" << m_constantFieldVector[0] << ", " + << m_constantFieldVector[1] << ", " + << m_constantFieldVector[2] << ")"); + auto bField = std::make_shared<Acts::ConstantBField>(constantFieldVector); + auto stepper = Acts::EigenStepper<>(std::move(bField)); auto propagator = Acts::Propagator<decltype(stepper), Acts::DirectNavigator>(std::move(stepper), std::move(navigator)); - varProp = new VariantPropagator(propagator); + varProp = std::make_unique<VariantPropagator>(propagator); } - auto fit = makeFitterFunction(varProp); + auto fit = makeFitterFunction(varProp.get()); auto result = fit(sourceLinks, InitTrackParam, kfOptions, surfSequence); ATH_MSG_VERBOSE("Size of sourceLinks: " << sourceLinks.size()); @@ -533,7 +549,7 @@ StatusCode FaserActsKalmanFilterAlg::execute() // The track entry indices container. One element here. std::vector<size_t> trackTips; trackTips.reserve(1); - trackTips.emplace_back(fitOutput.trackTip); + trackTips.emplace_back(fitOutput.lastMeasurementIndex); // The fitted parameters container. One element (at most) here. IndexedParams indexedParams; @@ -544,7 +560,7 @@ StatusCode FaserActsKalmanFilterAlg::execute() ATH_MSG_VERBOSE(" position: " << params.position(geoctx).transpose()); ATH_MSG_VERBOSE(" momentum: " << params.momentum().transpose()); // Push the fitted parameters to the container - indexedParams.emplace(fitOutput.trackTip, std::move(params)); + indexedParams.emplace(fitOutput.lastMeasurementIndex, std::move(params)); } else { ATH_MSG_DEBUG("No fitted paramemeters for track " << itrack); } diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TrackFindingAlgorithmFunction.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/TrackFindingAlgorithmFunction.cxx index be8182a882751bad2ba815bab90cbb496775b286..954906a0f4263c6e17f17143b23d4639c5d1107a 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TrackFindingAlgorithmFunction.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TrackFindingAlgorithmFunction.cxx @@ -17,13 +17,13 @@ using Updater = Acts::GainMatrixUpdater; using Smoother = Acts::GainMatrixSmoother; -using Stepper = Acts::EigenStepper<FASERMagneticFieldWrapper>; +using Stepper = Acts::EigenStepper<>; using Propagator = Acts::Propagator<Stepper, Acts::Navigator>; namespace ActsExtrapolationDetail { using VariantPropagatorBase = boost::variant< - Acts::Propagator<Acts::EigenStepper<FASERMagneticFieldWrapper>, Acts::Navigator>, - Acts::Propagator<Acts::EigenStepper<Acts::ConstantBField>, Acts::Navigator> + Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator>, + Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator> >; class VariantPropagator : public VariantPropagatorBase @@ -60,31 +60,31 @@ CombinatorialKalmanFilterAlg::makeTrackFinderFunction( const std::string fieldMode = "FASER"; const std::vector<double> constantFieldVector = {0., 0., 0.55}; - Acts::Navigator navigator(trackingGeometry); - navigator.resolvePassive = false; - navigator.resolveMaterial = true; - navigator.resolveSensitive = true; + Acts::Navigator::Config cfg{trackingGeometry}; + cfg.resolvePassive = false; + cfg.resolveMaterial = true; + cfg.resolveSensitive = true; + Acts::Navigator navigator( cfg ); - ActsExtrapolationDetail::VariantPropagator* varProp {nullptr}; + std::unique_ptr<ActsExtrapolationDetail::VariantPropagator> varProp; if (fieldMode == "FASER") { - using BField_t = FASERMagneticFieldWrapper; - BField_t bField; - auto stepper = Acts::EigenStepper<BField_t>(std::move(bField)); - auto propagator = Acts::Propagator<decltype(stepper), Acts::Navigator>(std::move(stepper), std::move(navigator)); - varProp = new VariantPropagator(propagator); + auto bField = std::make_shared<FASERMagneticFieldWrapper>(); + auto stepper = Acts::EigenStepper<>(std::move(bField)); + auto propagator = Acts::Propagator<decltype(stepper), Acts::Navigator>(std::move(stepper), + std::move(navigator)); + varProp = std::make_unique<VariantPropagator>(propagator); } else if (fieldMode == "Constant") { - std::vector<double> constantFieldVector = constantFieldVector; - double Bx = constantFieldVector.at(0); - double By = constantFieldVector.at(1); - double Bz = constantFieldVector.at(2); - using BField_t = Acts::ConstantBField; - BField_t bField(Bx, By, Bz); - auto stepper = Acts::EigenStepper<BField_t>(std::move(bField)); + Acts::Vector3 constantFieldVector = Acts::Vector3(constantFieldVector[0], + constantFieldVector[1], + constantFieldVector[2]); + + auto bField = std::make_shared<Acts::ConstantBField>(constantFieldVector); + auto stepper = Acts::EigenStepper<>(std::move(bField)); auto propagator = Acts::Propagator<decltype(stepper), Acts::Navigator>(std::move(stepper), - std::move(navigator)); - varProp = new VariantPropagator(propagator); + std::move(navigator)); + varProp = std::make_unique<VariantPropagator>(propagator); } return boost::apply_visitor([&](const auto& propagator) -> TrackFinderFunction { diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TruthBasedInitialParameterTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/TruthBasedInitialParameterTool.cxx index f5b850d8a05877b9d7d48db65faadbff7cfac519..85b1036e415fb3f28f9f6b8ee37679afb60304bd 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TruthBasedInitialParameterTool.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TruthBasedInitialParameterTool.cxx @@ -51,6 +51,8 @@ Acts::CurvilinearTrackParameters TruthBasedInitialParameterTool::getInitialParam } } + std::cout << "?? px = " << momentum.x() << " py = " << momentum.y() << " pz = " << momentum.z() << std::endl; + Acts::Vector3 truthVertex = {vertex.x(), vertex.y(), vertex.z()}; // in mm Acts::Vector3 truthMomentum = {momentum.x() / 1000, momentum.y() / 1000, momentum.z() / 1000}; // in GeV m_simWriterTool->writeout(truthVertex, truthMomentum); diff --git a/Tracking/TrkEventCnv/TrkEventCnvTools/TrkEventCnvTools/DetElementSurface.h b/Tracking/TrkEventCnv/TrkEventCnvTools/TrkEventCnvTools/DetElementSurface.h index 3f734e18539c905ba35dd824b3f61c18dfb0b42d..d8da8531253883eb19265ff95b798a3db1164f34 100644 --- a/Tracking/TrkEventCnv/TrkEventCnvTools/TrkEventCnvTools/DetElementSurface.h +++ b/Tracking/TrkEventCnv/TrkEventCnvTools/TrkEventCnvTools/DetElementSurface.h @@ -47,7 +47,7 @@ class DetElementSurface : public Surface std::ostream & dump (std::ostream &sl) const { return sl;}; const Identifier associatedDetectorElementIdentifier() const {return m_id;} bool isFree() {return true;}// To avoid memory leaks - Surface::SurfaceType type() const {return Surface::Other;} + SurfaceType type() const {return SurfaceType::Other;} void localToGlobal(const Amg::Vector2D&, const Amg::Vector3D&, Amg::Vector3D&) const {} bool globalToLocal(const Amg::Vector3D&, const Amg::Vector3D&, Amg::Vector2D&) const {return false;} std::string name() const { return "Trk::DetElementSurface";} @@ -58,7 +58,7 @@ class DetElementSurface : public Surface double, double, double, - AmgSymMatrix(5) *) const + std::optional<AmgSymMatrix(5)> = std::nullopt) const { return nullptr; } @@ -66,7 +66,7 @@ class DetElementSurface : public Surface createUniqueTrackParameters(const Amg::Vector3D&, const Amg::Vector3D&, double, - AmgSymMatrix(5) *) const + std::optional<AmgSymMatrix(5)> = std::nullopt) const { return nullptr; } @@ -77,7 +77,7 @@ class DetElementSurface : public Surface double, double, double, - AmgSymMatrix(5) *) const + std::optional<AmgSymMatrix(5)> = std::nullopt) const { return nullptr; } @@ -85,7 +85,7 @@ class DetElementSurface : public Surface createUniqueNeutralParameters(const Amg::Vector3D&, const Amg::Vector3D&, double, - AmgSymMatrix(5) *) const + std::optional<AmgSymMatrix(5)> = std::nullopt) const { return nullptr; } @@ -99,7 +99,7 @@ class DetElementSurface : public Surface virtual Trk::DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D&, const Amg::Vector3D&, bool) const {return 0;} - virtual bool isOnSurface(const Amg::Vector3D&, Trk::BoundaryCheck, double, double) const {return false;} + virtual bool isOnSurface(const Amg::Vector3D&, const Trk::BoundaryCheck&, double, double) const {return false;} private: Identifier m_id; diff --git a/Tracking/TrkEventCnv/TrkEventCnvTools/python/TrkEventCnvToolsConfig.py b/Tracking/TrkEventCnv/TrkEventCnvTools/python/TrkEventCnvToolsConfig.py index 272de9158e9e65da5bbbfe6aa911abaa6c424ed3..6a30a71bd796ec8f56834aeccd258eb235dd4de6 100644 --- a/Tracking/TrkEventCnv/TrkEventCnvTools/python/TrkEventCnvToolsConfig.py +++ b/Tracking/TrkEventCnv/TrkEventCnvTools/python/TrkEventCnvToolsConfig.py @@ -3,7 +3,7 @@ # default configuration of TrkEventCnvTools # example of a configuration in class deriving from a Configurable -from AthenaCommon.DetFlags import DetFlags +# from AthenaCommon.DetFlags import DetFlags from AthenaCommon.AppMgr import ToolSvc # from RecExConfig import RecFlags as rec diff --git a/Scintillator/ScintEventCnv/ScintByteStream/CMakeLists.txt b/Waveform/WaveEventCnv/WaveByteStream/CMakeLists.txt similarity index 62% rename from Scintillator/ScintEventCnv/ScintByteStream/CMakeLists.txt rename to Waveform/WaveEventCnv/WaveByteStream/CMakeLists.txt index 12e96ba4668e019d30250f621de356f6f6421b29..6fc3d0b95846b2e395cccbbe6938336def278e4e 100644 --- a/Scintillator/ScintEventCnv/ScintByteStream/CMakeLists.txt +++ b/Waveform/WaveEventCnv/WaveByteStream/CMakeLists.txt @@ -1,19 +1,19 @@ # Copyright (C) 2020 CERN for the benefit of the FASER collaboration # Declare the package name: -atlas_subdir( ScintByteStream ) +atlas_subdir( WaveByteStream ) # Component(s) in the package: -#atlas_add_library( ScintByteStreamLib -# ScintByteStream/*.h -# PUBLIC_HEADERS ScintByteStream +#atlas_add_library( WaveByteStreamLib +# WaveByteStream/*.h +# PUBLIC_HEADERS WaveByteStream # LINK_LIBRARIES StoreGateLib # ) -atlas_add_component( ScintByteStream +atlas_add_component( WaveByteStream src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaKernel GaudiKernel FaserByteStreamCnvSvcBaseLib FaserEventStorageLib ScintRawEvent + LINK_LIBRARIES AthenaKernel GaudiKernel FaserByteStreamCnvSvcBaseLib FaserEventStorageLib WaveRawEvent PRIVATE_LINK_LIBRARIES AthenaBaseComps ) atlas_install_python_modules( python/*.py ) diff --git a/Waveform/WaveEventCnv/WaveByteStream/python/WaveByteStreamConfig.py b/Waveform/WaveEventCnv/WaveByteStream/python/WaveByteStreamConfig.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Waveform/WaveEventCnv/WaveByteStream/python/__init__.py b/Waveform/WaveEventCnv/WaveByteStream/python/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6b7e2cabe367eac4e426b6ec278063c6db58f25b --- /dev/null +++ b/Waveform/WaveEventCnv/WaveByteStream/python/__init__.py @@ -0,0 +1 @@ +#WaveByteStream diff --git a/Scintillator/ScintEventCnv/ScintByteStream/src/ScintWaveformDecoderTool.cxx b/Waveform/WaveEventCnv/WaveByteStream/src/RawWaveformDecoderTool.cxx similarity index 76% rename from Scintillator/ScintEventCnv/ScintByteStream/src/ScintWaveformDecoderTool.cxx rename to Waveform/WaveEventCnv/WaveByteStream/src/RawWaveformDecoderTool.cxx index 85a353a09cdab3ecdf23fc8e8ecedad51e345ad9..2081244c434b40e789bf268284a7b56b13a89929 100644 --- a/Scintillator/ScintEventCnv/ScintByteStream/src/ScintWaveformDecoderTool.cxx +++ b/Waveform/WaveEventCnv/WaveByteStream/src/RawWaveformDecoderTool.cxx @@ -2,23 +2,23 @@ Copyright (C) 2020 CERN for the benefit of the FASER collaboration */ -#include "ScintWaveformDecoderTool.h" +#include "RawWaveformDecoderTool.h" #include "AthenaBaseComps/AthAlgTool.h" -#include "ScintRawEvent/ScintWaveform.h" +#include "WaveRawEvent/RawWaveform.h" #include "EventFormats/DigitizerDataFragment.hpp" -static const InterfaceID IID_IScintWaveformDecoderTool("ScintWaveformDecoderTool", 1, 0); +static const InterfaceID IID_IRawWaveformDecoderTool("RawWaveformDecoderTool", 1, 0); -const InterfaceID& ScintWaveformDecoderTool::interfaceID() { - return IID_IScintWaveformDecoderTool; +const InterfaceID& RawWaveformDecoderTool::interfaceID() { + return IID_IRawWaveformDecoderTool; } -ScintWaveformDecoderTool::ScintWaveformDecoderTool(const std::string& type, +RawWaveformDecoderTool::RawWaveformDecoderTool(const std::string& type, const std::string& name,const IInterface* parent) : AthAlgTool(type, name, parent) { - declareInterface<ScintWaveformDecoderTool>(this); + declareInterface<RawWaveformDecoderTool>(this); declareProperty("CaloChannels", m_caloChannels); m_caloChannels.push_back(0); @@ -50,30 +50,30 @@ ScintWaveformDecoderTool::ScintWaveformDecoderTool(const std::string& type, } -ScintWaveformDecoderTool::~ScintWaveformDecoderTool() +RawWaveformDecoderTool::~RawWaveformDecoderTool() { } StatusCode -ScintWaveformDecoderTool::initialize() +RawWaveformDecoderTool::initialize() { - ATH_MSG_DEBUG("ScintWaveformDecoderTool::initialize()"); + ATH_MSG_DEBUG("RawWaveformDecoderTool::initialize()"); return StatusCode::SUCCESS; } StatusCode -ScintWaveformDecoderTool::finalize() +RawWaveformDecoderTool::finalize() { - ATH_MSG_DEBUG("ScintWaveformDecoderTool::finalize()"); + ATH_MSG_DEBUG("RawWaveformDecoderTool::finalize()"); return StatusCode::SUCCESS; } StatusCode -ScintWaveformDecoderTool::convert(const DAQFormats::EventFull* re, - ScintWaveformContainer* container, +RawWaveformDecoderTool::convert(const DAQFormats::EventFull* re, + RawWaveformContainer* container, const std::string key) { - ATH_MSG_DEBUG("ScintWaveformDecoderTool::convert("+key+")"); + ATH_MSG_DEBUG("RawWaveformDecoderTool::convert("+key+")"); if (!re) { ATH_MSG_ERROR("EventFull passed to convert() is null!"); @@ -81,7 +81,7 @@ ScintWaveformDecoderTool::convert(const DAQFormats::EventFull* re, } if (!container) { - ATH_MSG_ERROR("ScintWaveformContainer passed to convert() is null!"); + ATH_MSG_ERROR("RawWaveformContainer passed to convert() is null!"); return StatusCode::FAILURE; } @@ -139,12 +139,12 @@ ScintWaveformDecoderTool::convert(const DAQFormats::EventFull* re, continue; } - ScintWaveform* wfm = new ScintWaveform(); + RawWaveform* wfm = new RawWaveform(); try { wfm->setWaveform( channel, digitizer->channel_adc_counts( channel ) ); - } catch ( DigitizerDataException& e ) { - ATH_MSG_WARNING("ScintWaveformDecoderTool:\n" + } catch ( DigitizerData::DigitizerDataException& e ) { + ATH_MSG_WARNING("RawWaveformDecoderTool:\n" <<e.what() << "\nChannel " << channel @@ -154,8 +154,8 @@ ScintWaveformDecoderTool::convert(const DAQFormats::EventFull* re, try { wfm->setHeader( digitizer ); - } catch ( DigitizerDataException& e ) { - ATH_MSG_WARNING("ScintWaveformDecoderTool:\n" + } catch ( DigitizerData::DigitizerDataException& e ) { + ATH_MSG_WARNING("RawWaveformDecoderTool:\n" << e.what() << "\nCorrupted Digitizer data!\n" << *frag); @@ -174,7 +174,7 @@ ScintWaveformDecoderTool::convert(const DAQFormats::EventFull* re, // Don't spring a leak delete digitizer; - ATH_MSG_DEBUG( "ScintWaveformDecoderTool created container " << key + ATH_MSG_DEBUG( "RawWaveformDecoderTool created container " << key << " with size=" << container->size()); return StatusCode::SUCCESS; } diff --git a/Scintillator/ScintEventCnv/ScintByteStream/src/ScintWaveformDecoderTool.h b/Waveform/WaveEventCnv/WaveByteStream/src/RawWaveformDecoderTool.h similarity index 62% rename from Scintillator/ScintEventCnv/ScintByteStream/src/ScintWaveformDecoderTool.h rename to Waveform/WaveEventCnv/WaveByteStream/src/RawWaveformDecoderTool.h index a5e7bd98261d1e25809953f3ecfdfb33ae139ba3..252698c5fb975370945883d112a72c21ef7798a2 100644 --- a/Scintillator/ScintEventCnv/ScintByteStream/src/ScintWaveformDecoderTool.h +++ b/Waveform/WaveEventCnv/WaveByteStream/src/RawWaveformDecoderTool.h @@ -4,31 +4,31 @@ Copyright (C) 2020 CERN for the benefit of the FASER collaboration */ -#ifndef SCINTBYTESTREAM_FASERTRIGGERDECODERTOOL_H -#define SCINTBYTESTREAM_FASERTRIGGERDECODERTOOL_H +#ifndef WAVEBYTESTREAM_RAWWAVEFORMDECODERTOOL_H +#define WAVEBYTESTREAM_RAWWAVEFORMDECODERTOOL_H #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ToolHandle.h" #include "EventFormats/DAQFormats.hpp" -#include "ScintRawEvent/ScintWaveformContainer.h" +#include "WaveRawEvent/RawWaveformContainer.h" // This class provides conversion between bytestream and Waveform objects -class ScintWaveformDecoderTool : public AthAlgTool { +class RawWaveformDecoderTool : public AthAlgTool { public: - ScintWaveformDecoderTool(const std::string& type, const std::string& name, + RawWaveformDecoderTool(const std::string& type, const std::string& name, const IInterface* parent); - virtual ~ScintWaveformDecoderTool(); + virtual ~RawWaveformDecoderTool(); static const InterfaceID& interfaceID(); virtual StatusCode initialize(); virtual StatusCode finalize(); - StatusCode convert(const DAQFormats::EventFull* re, ScintWaveformContainer* wfm, std::string key); + StatusCode convert(const DAQFormats::EventFull* re, RawWaveformContainer* wfm, std::string key); private: // List of channels to include in each container @@ -42,5 +42,5 @@ private: }; -#endif /* SCINTBYTESTREAM_FASERTRIGGERDECODERTOOL_H */ +#endif /* WAVEBYTESTREAM_FASERTRIGGERDECODERTOOL_H */ diff --git a/Scintillator/ScintEventCnv/ScintByteStream/src/ScintByteStreamCnv.cxx b/Waveform/WaveEventCnv/WaveByteStream/src/WaveByteStreamCnv.cxx similarity index 61% rename from Scintillator/ScintEventCnv/ScintByteStream/src/ScintByteStreamCnv.cxx rename to Waveform/WaveEventCnv/WaveByteStream/src/WaveByteStreamCnv.cxx index ff588cdd9e2d67c29779f5043d2a8e3db701d456..189d94c5fcc2bc966135fdda74f2e23e5a5b2a50 100644 --- a/Scintillator/ScintEventCnv/ScintByteStream/src/ScintByteStreamCnv.cxx +++ b/Waveform/WaveEventCnv/WaveByteStream/src/WaveByteStreamCnv.cxx @@ -2,12 +2,12 @@ Copyright (C) 2020 CERN for the benefit of the FASER collaboration */ -#include "ScintByteStreamCnv.h" -#include "ScintWaveformDecoderTool.h" +#include "WaveByteStreamCnv.h" +#include "RawWaveformDecoderTool.h" #include "FaserByteStreamCnvSvcBase/IFaserROBDataProviderSvc.h" -#include "ScintRawEvent/ScintWaveform.h" -#include "ScintRawEvent/ScintWaveformContainer.h" +#include "WaveRawEvent/RawWaveform.h" +#include "WaveRawEvent/RawWaveformContainer.h" #include "EventFormats/DAQFormats.hpp" #include "AthenaKernel/errorcheck.h" @@ -21,26 +21,26 @@ using DAQFormats::EventFull; -ScintByteStreamCnv::ScintByteStreamCnv(ISvcLocator* svcloc) +WaveByteStreamCnv::WaveByteStreamCnv(ISvcLocator* svcloc) : Converter(storageType(), classID(), svcloc) - , AthMessaging(svcloc != nullptr ? msgSvc() : nullptr, "ScintByteStreamCnv") - , m_name("ScintByteStreamCnv") - , m_tool("ScintWaveformDecoderTool") + , AthMessaging(svcloc != nullptr ? msgSvc() : nullptr, "WaveByteStreamCnv") + , m_name("WaveByteStreamCnv") + , m_tool("RawWaveformDecoderTool") , m_rdpSvc("FaserROBDataProviderSvc", m_name) { ATH_MSG_DEBUG(m_name+"::initialize() called"); } -ScintByteStreamCnv::~ScintByteStreamCnv() { +WaveByteStreamCnv::~WaveByteStreamCnv() { } -const CLID& ScintByteStreamCnv::classID() +const CLID& WaveByteStreamCnv::classID() { // Change to our data object - return ClassID_traits<ScintWaveformContainer>::ID(); + return ClassID_traits<RawWaveformContainer>::ID(); } -StatusCode ScintByteStreamCnv::initialize() +StatusCode WaveByteStreamCnv::initialize() { ATH_MSG_DEBUG(m_name+"::initialize() called"); @@ -51,22 +51,22 @@ StatusCode ScintByteStreamCnv::initialize() return StatusCode::SUCCESS; } -StatusCode ScintByteStreamCnv::finalize() +StatusCode WaveByteStreamCnv::finalize() { - ATH_MSG_DEBUG("ScintByteStreamCnv::Finalize"); + ATH_MSG_DEBUG("WaveByteStreamCnv::Finalize"); CHECK(Converter::finalize()); return StatusCode::SUCCESS; } -StatusCode ScintByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) +StatusCode WaveByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) { - ATH_MSG_DEBUG("ScintByteStreamCnv::createObj() called"); + ATH_MSG_DEBUG("WaveByteStreamCnv::createObj() called"); // Check that we can access raw data if (!m_rdpSvc) { - ATH_MSG_ERROR("ScintByteStreamCnv::createObj() - ROBDataProviderSvc not loaded!"); + ATH_MSG_ERROR("WaveByteStreamCnv::createObj() - ROBDataProviderSvc not loaded!"); return StatusCode::FAILURE; } @@ -86,9 +86,9 @@ StatusCode ScintByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pOb // Get key used in the StoreGateSvc::retrieve function const std::string key = *(pRE_Addr->par()); - ATH_MSG_DEBUG("ScintByteStreamCnv - creating objects "+key); + ATH_MSG_DEBUG("WaveByteStreamCnv - creating objects "+key); - ScintWaveformContainer* wfmCont = new ScintWaveformContainer; + RawWaveformContainer* wfmCont = new RawWaveformContainer; // Convert selected channels @@ -96,7 +96,7 @@ StatusCode ScintByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pOb pObj = SG::asStorable(wfmCont); - ATH_MSG_DEBUG(" New xAOD::ScintWaveformData created"); + ATH_MSG_DEBUG(" New xAOD::RawWaveformData created"); return StatusCode::SUCCESS; } diff --git a/Scintillator/ScintEventCnv/ScintByteStream/src/ScintByteStreamCnv.h b/Waveform/WaveEventCnv/WaveByteStream/src/WaveByteStreamCnv.h similarity index 72% rename from Scintillator/ScintEventCnv/ScintByteStream/src/ScintByteStreamCnv.h rename to Waveform/WaveEventCnv/WaveByteStream/src/WaveByteStreamCnv.h index 4b296547ff9064568ff9b8a1843781c4e0a0a52a..043ebef563e383143955f0312e684b716ac61839 100644 --- a/Scintillator/ScintEventCnv/ScintByteStream/src/ScintByteStreamCnv.h +++ b/Waveform/WaveEventCnv/WaveByteStream/src/WaveByteStreamCnv.h @@ -4,8 +4,8 @@ Copyright (C) 2020 CERN for the benefit of the ATLAS collaboration */ -#ifndef SCINTBYTESTREAM_SCINTBYTESTREAMCNV_H -#define SCINTBYTESTREAM_SCINTBYTESTREAMCNV_H +#ifndef WAVEBYTESTREAM_WAVEBYTESTREAMCNV_H +#define WAVEBYTESTREAM_WAVEBYTESTREAMCNV_H #include "GaudiKernel/ClassID.h" #include "GaudiKernel/Converter.h" @@ -15,17 +15,17 @@ #include "AthenaBaseComps/AthMessaging.h" #include "FaserByteStreamCnvSvcBase/FaserByteStreamAddress.h" -class ScintWaveformDecoderTool; +class RawWaveformDecoderTool; class IFaserROBDataProviderSvc; // Abstract factory to create the converter template <class TYPE> class CnvFactory; -class ScintByteStreamCnv: public Converter, public AthMessaging { +class WaveByteStreamCnv: public Converter, public AthMessaging { public: - ScintByteStreamCnv(ISvcLocator* svcloc); - virtual ~ScintByteStreamCnv(); + WaveByteStreamCnv(ISvcLocator* svcloc); + virtual ~WaveByteStreamCnv(); virtual StatusCode initialize() override; virtual StatusCode finalize() override; @@ -38,11 +38,11 @@ public: private: std::string m_name; - ToolHandle<ScintWaveformDecoderTool> m_tool; + ToolHandle<RawWaveformDecoderTool> m_tool; ServiceHandle<IFaserROBDataProviderSvc> m_rdpSvc; }; -#endif /* SCINTBYTESTREAM_SCINTBYTESTREAMCNV_H */ +#endif /* WAVEBYTESTREAM_WAVEBYTESTREAMCNV_H */ diff --git a/Waveform/WaveEventCnv/WaveByteStream/src/components/WaveByteStream_entries.cxx b/Waveform/WaveEventCnv/WaveByteStream/src/components/WaveByteStream_entries.cxx new file mode 100644 index 0000000000000000000000000000000000000000..388644f68bc610861112d45689d1b158cbf31257 --- /dev/null +++ b/Waveform/WaveEventCnv/WaveByteStream/src/components/WaveByteStream_entries.cxx @@ -0,0 +1,6 @@ +#include "../RawWaveformDecoderTool.h" +#include "../WaveByteStreamCnv.h" + +DECLARE_COMPONENT( RawWaveformDecoderTool ) + +DECLARE_CONVERTER( WaveByteStreamCnv ) diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/CMakeLists.txt b/Waveform/WaveEventCnv/WaveEventAthenaPool/CMakeLists.txt similarity index 51% rename from Scintillator/ScintEventCnv/ScintEventAthenaPool/CMakeLists.txt rename to Waveform/WaveEventCnv/WaveEventAthenaPool/CMakeLists.txt index b68ac1d6083e5a7a3599ad45ffcf30731e14ac97..864bc5da67d738edd0ec9e9d6a89ee83156c9fad 100644 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/CMakeLists.txt +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/CMakeLists.txt @@ -1,28 +1,28 @@ # $Id: CMakeLists.txt 749562 2016-05-25 04:45:43Z krasznaa $ ################################################################################ -# Package: ScintEventAthenaPool +# Package: WaveEventAthenaPool ################################################################################ # Declare the package name: -atlas_subdir( ScintEventAthenaPool ) +atlas_subdir( WaveEventAthenaPool ) # Component(s) in the package: -atlas_add_poolcnv_library( ScintEventAthenaPoolPoolCnv - ScintEventAthenaPool/*.h src/*.h src/*.cxx - FILES ScintRawEvent/ScintWaveform.h - ScintRawEvent/ScintWaveformContainer.h +atlas_add_poolcnv_library( WaveEventAthenaPoolPoolCnv + WaveEventAthenaPool/*.h src/*.h src/*.cxx + FILES WaveRawEvent/RawWaveform.h + WaveRawEvent/RawWaveformContainer.h LINK_LIBRARIES Identifier GeneratorObjectsTPCnv AthAllocators AthContainers AthenaBaseComps AthenaKernel SGTools StoreGateLib AthenaPoolCnvSvcLib - AthenaPoolUtilities AtlasSealCLHEP GaudiKernel ScintRawEvent + AthenaPoolUtilities AtlasSealCLHEP GaudiKernel WaveRawEvent ) -atlas_add_dictionary( ScintEventAthenaPoolCnvDict - ScintEventAthenaPool/ScintEventAthenaPoolCnvDict.h - ScintEventAthenaPool/selection.xml +atlas_add_dictionary( WaveEventAthenaPoolCnvDict + WaveEventAthenaPool/WaveEventAthenaPoolCnvDict.h + WaveEventAthenaPool/selection.xml LINK_LIBRARIES Identifier GeneratorObjectsTPCnv ) # Install files from the package: -atlas_install_headers( ScintEventAthenaPool ) +atlas_install_headers( WaveEventAthenaPool ) diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintWaveformContainer_p0.h b/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/RawWaveformContainer_p0.h similarity index 56% rename from Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintWaveformContainer_p0.h rename to Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/RawWaveformContainer_p0.h index 1c7b327d1dd4b642e89a8a3b640766e969c956b8..c36eb219ea450ea216ea9de49a61862da4949416 100644 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintWaveformContainer_p0.h +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/RawWaveformContainer_p0.h @@ -2,18 +2,18 @@ Copyright (C) 2020 CERN for the benefit of the FASER collaboration */ -#ifndef SCINTWAVEFORMCONTAINER_P0_H -#define SCINTWAVEFORMCONTAINER_P0_H +#ifndef RAWWAVEFORMCONTAINER_P0_H +#define RAWWAVEFORMCONTAINER_P0_H -// Persistent represenation of a ScintWaveformContainer. +// Persistent represenation of a RawWaveformContainer. #include <vector> -#include "ScintEventAthenaPool/ScintWaveform_p0.h" +#include "WaveEventAthenaPool/RawWaveform_p0.h" -class ScintWaveformContainer_p0 { +class RawWaveformContainer_p0 { public: - ScintWaveformContainer_p0(); - friend class ScintWaveformContainerCnv_p0; + RawWaveformContainer_p0(); + friend class RawWaveformContainerCnv_p0; private: bool m_board_fail_flag; unsigned int m_board_id; @@ -22,11 +22,11 @@ class ScintWaveformContainer_p0 { unsigned int m_event_counter; unsigned int m_trigger_time_tag; unsigned int m_samples; - std::vector<ScintWaveform_p0> m_waveforms; + std::vector<RawWaveform_p0> m_waveforms; }; inline -ScintWaveformContainer_p0::ScintWaveformContainer_p0() : m_board_fail_flag(0), +RawWaveformContainer_p0::RawWaveformContainer_p0() : m_board_fail_flag(0), m_board_id(0), m_pattern_trig_options(0), m_channel_mask(0), diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintWaveform_p0.h b/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/RawWaveform_p0.h similarity index 76% rename from Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintWaveform_p0.h rename to Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/RawWaveform_p0.h index e91c8811f07753ca4330aa9d7a30a617f7dc5f86..e4721fefeec5ef7be0f945bca38a790c81151ae6 100644 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/ScintEventAthenaPool/ScintWaveform_p0.h +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/RawWaveform_p0.h @@ -2,19 +2,19 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -#ifndef SCINTWAVEFORM_P0_H -#define SCINTWAVEFORM_P0_H +#ifndef RAWWAVEFORM_P0_H +#define RAWWAVEFORM_P0_H #include <vector> #include <iostream> #include <iomanip> -class ScintWaveform_p0 { +class RawWaveform_p0 { public: - ScintWaveform_p0(); + RawWaveform_p0(); // List of Cnv classes that convert this into Rdo objects - friend class ScintWaveformCnv_p0; + friend class RawWaveformCnv_p0; private: unsigned int m_ID; @@ -30,13 +30,13 @@ class ScintWaveform_p0 { }; inline -ScintWaveform_p0::ScintWaveform_p0() : m_channel(0) { +RawWaveform_p0::RawWaveform_p0() : m_channel(0) { m_adc_counts.clear(); } // Stream operator for debugging //std::ostream -//&operator<<(std::ostream &out, const ScintWaveform_p0 &wfm) { +//&operator<<(std::ostream &out, const RawWaveform_p0 &wfm) { // return wfm.print(out); //} diff --git a/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/WaveEventAthenaPoolCnvDict.h b/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/WaveEventAthenaPoolCnvDict.h new file mode 100644 index 0000000000000000000000000000000000000000..a7b792abeb146de4de60cccd799b184287a3adb1 --- /dev/null +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/WaveEventAthenaPoolCnvDict.h @@ -0,0 +1,11 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef WAVEEVENTATHENAPOOLCNVDICT_H +#define WAVEEVENTATHENAPOOLCNVDICT_H + +#include "WaveEventAthenaPool/RawWaveform_p0.h" +#include "WaveEventAthenaPool/RawWaveformContainer_p0.h" + +#endif diff --git a/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/selection.xml b/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/selection.xml new file mode 100644 index 0000000000000000000000000000000000000000..617ca7864363ae6dd9789869f165a03a1ce407de --- /dev/null +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/WaveEventAthenaPool/selection.xml @@ -0,0 +1,4 @@ +<lcgdict> + <class name="RawWaveform_p0" /> + <class name="RawWaveformContainer_p0" id="344d904d-6338-41f1-94ee-ea609ea4ae44" /> +</lcgdict> diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformCnv_p0.cxx b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformCnv_p0.cxx similarity index 61% rename from Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformCnv_p0.cxx rename to Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformCnv_p0.cxx index 477849763c6bd19b5ce9cbf82b36c14b9f7303d7..d298c0ff390393b6b8822bcc43167eee7c89ee9d 100644 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformCnv_p0.cxx +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformCnv_p0.cxx @@ -2,13 +2,13 @@ Copyright (C) 2020 CERN for the benefit of the FASER collaboration */ -#include "ScintWaveformCnv_p0.h" +#include "RawWaveformCnv_p0.h" void -ScintWaveformCnv_p0::persToTrans(const ScintWaveform_p0* persObj, ScintWaveform* transObj, MsgStream& /*log*/) { +RawWaveformCnv_p0::persToTrans(const RawWaveform_p0* persObj, RawWaveform* transObj, MsgStream& /*log*/) { // Just fill available data here - // Rest of it patched up in ScintWaveformContainerCnv_p0 + // Rest of it patched up in RawWaveformContainerCnv_p0 transObj->setIdentifier(persObj->m_ID); transObj->setChannel(persObj->m_channel); transObj->setCounts(persObj->m_adc_counts); @@ -16,9 +16,9 @@ ScintWaveformCnv_p0::persToTrans(const ScintWaveform_p0* persObj, ScintWaveform* } void -ScintWaveformCnv_p0::transToPers(const ScintWaveform* transObj, ScintWaveform_p0* persObj, MsgStream& /*log*/) { +RawWaveformCnv_p0::transToPers(const RawWaveform* transObj, RawWaveform_p0* persObj, MsgStream& /*log*/) { - // log << MSG::DEBUG << "ScintWaveformCnv_p0::transToPers called" << endmsg; + // log << MSG::DEBUG << "RawWaveformCnv_p0::transToPers called" << endmsg; // log << MSG::DEBUG << "Transient waveform:" << endmsg; // log << MSG::DEBUG << (*transObj) << endmsg; // log << MSG::DEBUG << "Persistent waveform (before):" << endmsg; @@ -31,6 +31,6 @@ ScintWaveformCnv_p0::transToPers(const ScintWaveform* transObj, ScintWaveform_p0 // log << MSG::DEBUG << "Persistent waveform (after):" << endmsg; // persObj->print(); - // log << MSG::DEBUG << "ScintWaveformCnv_p0::transToPers done" << endmsg; + // log << MSG::DEBUG << "RawWaveformCnv_p0::transToPers done" << endmsg; } diff --git a/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformCnv_p0.h b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformCnv_p0.h new file mode 100644 index 0000000000000000000000000000000000000000..1bd08daa51511e65f8314004311c09d5652187f0 --- /dev/null +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformCnv_p0.h @@ -0,0 +1,27 @@ +/* + Copyright (C) 2020 CERN for the benefit of the FASER collaboration +*/ + +#ifndef WAVEWAVEFORMCNV_P0_H +#define WAVEWAVEFORMCNV_P0_H + +#include "WaveRawEvent/RawWaveform.h" +#include "WaveEventAthenaPool/RawWaveform_p0.h" + +#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" + +class RawWaveformCnv_p0 : public T_AthenaPoolTPCnvBase<RawWaveform, RawWaveform_p0> { + public: + RawWaveformCnv_p0() {}; + + virtual void persToTrans(const RawWaveform_p0* persObj, + RawWaveform* transObj, + MsgStream& log); + + virtual void transToPers(const RawWaveform* transObj, + RawWaveform_p0* persObj, + MsgStream& log); + private: +}; + +#endif diff --git a/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv.cxx b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv.cxx new file mode 100644 index 0000000000000000000000000000000000000000..dfdf19da8959f8df755d8a7d61d07d5029a3cca9 --- /dev/null +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv.cxx @@ -0,0 +1,42 @@ +/* + Copyright (C) 2020 CERN for the benefit of the FASER collaboration +*/ + +#include "RawWaveformContainerCnv.h" + +RawWaveformContainer_PERS* +RawWaveformContainerCnv::createPersistent (RawWaveformContainer* transCont) { + ATH_MSG_DEBUG("RawWaveformContainerCnv::createPersistent()"); + + RawWaveformContainerCnv_PERS converter; + + RawWaveformContainer_PERS* persObj(nullptr); + persObj = converter.createPersistent( transCont, msg() ); + return persObj; +} + +RawWaveformContainer* +RawWaveformContainerCnv::createTransient() { + ATH_MSG_DEBUG("RawWaveformContainerCnv::createTransient()"); + + static const pool::Guid p0_guid("344d904d-6338-41f1-94ee-ea609ea4ae44"); + RawWaveformContainer* trans(0); + + // Check for GUID of each persistent type + if ( compareClassGuid(p0_guid) ) { + std::unique_ptr< RawWaveformContainer_p0 > col_vect( poolReadObject< RawWaveformContainer_p0 >() ); + + RawWaveformContainerCnv_p0 converter_p0; + trans = converter_p0.createTransient( col_vect.get(), msg() ); + + } else { + + // Didn't find a known type + throw std::runtime_error("Unsupported persistent version of RawWaveformContainer"); + } + + return trans; + +} + + diff --git a/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv.h b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv.h new file mode 100644 index 0000000000000000000000000000000000000000..1430d855790eca09ea7600f9446e3b77a59f7a0e --- /dev/null +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv.h @@ -0,0 +1,33 @@ +/* + Copyright 2020 CERN for the benefit of the FASER collaboration +*/ + +#ifndef WAVEWAVEFORMCONTAINERCNV_H +#define WAVEWAVEFORMCONTAINERCNV_H + +#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h" + +#include "RawWaveformContainerCnv_p0.h" + +#include "WaveRawEvent/RawWaveformContainer.h" +#include "WaveEventAthenaPool/RawWaveformContainer_p0.h" + +// The latest persistent representation +typedef RawWaveformContainer_p0 RawWaveformContainer_PERS; +typedef RawWaveformContainerCnv_p0 RawWaveformContainerCnv_PERS; + +typedef T_AthenaPoolCustomCnv< RawWaveformContainer, RawWaveformContainer_PERS > RawWaveformContainerCnvBase; + +class RawWaveformContainerCnv : public RawWaveformContainerCnvBase { + friend class CnvFactory<RawWaveformContainerCnv>; + + public: + RawWaveformContainerCnv (ISvcLocator* svcloc) : RawWaveformContainerCnvBase(svcloc) {} + + protected: + virtual RawWaveformContainer_PERS* createPersistent (RawWaveformContainer* transCont); + virtual RawWaveformContainer* createTransient (); + +}; + +#endif diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv_p0.cxx b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv_p0.cxx similarity index 61% rename from Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv_p0.cxx rename to Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv_p0.cxx index 9db3a1255fa8e91865bb09757ca04d91810a02a5..cadd7f52108f92a8ff482a8ab0e174ac023c25c8 100644 --- a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainerCnv_p0.cxx +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv_p0.cxx @@ -2,23 +2,23 @@ Copyright (C) 2020 CERN for the benefit of the FASER collaboration */ -#include "ScintWaveformContainerCnv_p0.h" -#include "ScintWaveformCnv_p0.h" +#include "RawWaveformContainerCnv_p0.h" +#include "RawWaveformCnv_p0.h" void -ScintWaveformContainerCnv_p0::persToTrans(const ScintWaveformContainer_p0* persCont, ScintWaveformContainer* transCont, MsgStream& log) { +RawWaveformContainerCnv_p0::persToTrans(const RawWaveformContainer_p0* persCont, RawWaveformContainer* transCont, MsgStream& log) { - log << MSG::DEBUG << "ScintWaveformContainerCnv_p0::persToTrans called" << endmsg; + log << MSG::DEBUG << "RawWaveformContainerCnv_p0::persToTrans called" << endmsg; - ScintWaveformCnv_p0 waveformCnv; + RawWaveformCnv_p0 waveformCnv; // Clear this, transient container is DataVector, which stores pointers // Create them below and push back to fill transCont->clear(); for (unsigned int index = 0; index < persCont->m_waveforms.size(); ++index) { - std::unique_ptr<ScintWaveform> data = std::make_unique<ScintWaveform>(); - const ScintWaveform_p0* pdata = &persCont->m_waveforms.at(index); + std::unique_ptr<RawWaveform> data = std::make_unique<RawWaveform>(); + const RawWaveform_p0* pdata = &persCont->m_waveforms.at(index); waveformCnv.persToTrans(pdata, data.get(), log); // Fill other values held by container in persistent class @@ -35,24 +35,24 @@ ScintWaveformContainerCnv_p0::persToTrans(const ScintWaveformContainer_p0* persC } void -ScintWaveformContainerCnv_p0::transToPers(const ScintWaveformContainer* transCont,ScintWaveformContainer_p0* persCont, MsgStream& log) { +RawWaveformContainerCnv_p0::transToPers(const RawWaveformContainer* transCont,RawWaveformContainer_p0* persCont, MsgStream& log) { log << MSG::ALWAYS << "transCont = " << transCont << " / persCont = " << persCont << endmsg; - log << MSG::ALWAYS << "ScintWaveformContainerCnv_p0::transToPers preparing " << transCont->size() << " waveforms" << endmsg; + log << MSG::ALWAYS << "RawWaveformContainerCnv_p0::transToPers preparing " << transCont->size() << " waveforms" << endmsg; // If trans container is empty, nothing else to do if (!transCont->size()) { - log << MSG::DEBUG << "ScintWaveformContainerCnv_p0::transToPers found empty container, exiting!" << endmsg; + log << MSG::DEBUG << "RawWaveformContainerCnv_p0::transToPers found empty container, exiting!" << endmsg; return; } - ScintWaveformCnv_p0 waveformCnv; + RawWaveformCnv_p0 waveformCnv; - typedef ScintWaveformContainer TRANS; + typedef RawWaveformContainer TRANS; TRANS::const_iterator it_Cont = transCont->begin(); TRANS::const_iterator it_ContEnd = transCont->end(); // Fill common information - const ScintWaveform* transObj = (*it_Cont); + const RawWaveform* transObj = (*it_Cont); persCont->m_board_fail_flag = transObj->board_fail_flag(); persCont->m_board_id = transObj->board_id(); persCont->m_pattern_trig_options = transObj->pattern_trig_options(); @@ -67,11 +67,11 @@ ScintWaveformContainerCnv_p0::transToPers(const ScintWaveformContainer* transCon for (int index=0; it_Cont != it_ContEnd; it_Cont++, index++) { // Add new collection log << MSG::DEBUG << "Converting waveform " << index << endmsg; - const ScintWaveform* data = (*it_Cont); - ScintWaveform_p0* pdata = &(persCont->m_waveforms.at(index)); + const RawWaveform* data = (*it_Cont); + RawWaveform_p0* pdata = &(persCont->m_waveforms.at(index)); waveformCnv.transToPers(data, pdata, log); } - log << MSG::DEBUG << "ScintWaveformContainerCnv_p0::transToPers finished" << endmsg; + log << MSG::DEBUG << "RawWaveformContainerCnv_p0::transToPers finished" << endmsg; } diff --git a/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv_p0.h b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv_p0.h new file mode 100644 index 0000000000000000000000000000000000000000..efd8607b1bdfb9fc4b50000a8fa5adc7b65ebbab --- /dev/null +++ b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainerCnv_p0.h @@ -0,0 +1,28 @@ +/* + Copyright 2020 CERN for the benefit of the FASER collaboration +*/ + +#ifndef WAVEWAVEFORMCONTAINERCNV_P0_H +#define WAVEWAVEFORMCONTAINERCNV_P0_H + +#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" + +#include "WaveRawEvent/RawWaveformContainer.h" +#include "WaveEventAthenaPool/RawWaveformContainer_p0.h" + +class RawWaveformContainerCnv_p0 : public T_AthenaPoolTPCnvBase<RawWaveformContainer, RawWaveformContainer_p0> { + + public: + RawWaveformContainerCnv_p0() {}; + + virtual void persToTrans(const RawWaveformContainer_p0* persCont, + RawWaveformContainer* transCont, + MsgStream& log); + + virtual void transToPers(const RawWaveformContainer* transCont, + RawWaveformContainer_p0* persCont, + MsgStream& log); + +}; + +#endif diff --git a/Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainer_p0.cxx b/Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainer_p0.cxx similarity index 100% rename from Scintillator/ScintEventCnv/ScintEventAthenaPool/src/ScintWaveformContainer_p0.cxx rename to Waveform/WaveEventCnv/WaveEventAthenaPool/src/RawWaveformContainer_p0.cxx diff --git a/Scintillator/ScintRawEvent/CMakeLists.txt b/Waveform/WaveRawEvent/CMakeLists.txt similarity index 71% rename from Scintillator/ScintRawEvent/CMakeLists.txt rename to Waveform/WaveRawEvent/CMakeLists.txt index 4f97a2a9a31d33c4f2f29820ebad893d84d1020b..48473bf8813e27d85bd73a1c915ad16f34eabbc0 100644 --- a/Scintillator/ScintRawEvent/CMakeLists.txt +++ b/Waveform/WaveRawEvent/CMakeLists.txt @@ -1,27 +1,27 @@ ################################################################################ -# Package: ScintRawEvent +# Package: WaveRawEvent ################################################################################ # Declare the package name: -atlas_subdir( ScintRawEvent ) +atlas_subdir( WaveRawEvent ) # External dependencies: find_package( CLHEP ) find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) # Component(s) in the package: -atlas_add_library( ScintRawEvent +atlas_add_library( WaveRawEvent src/*.cxx - PUBLIC_HEADERS ScintRawEvent + PUBLIC_HEADERS WaveRawEvent INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} DEFINITIONS ${CLHEP_DEFINITIONS} LINK_LIBRARIES ${CLHEP_LIBRARIES} AthAllocators AthenaKernel CxxUtils StoreGateLib SGtests PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ScintIdentifier EventFormats ) -atlas_add_dictionary( ScintRawEventDict - ScintRawEvent/ScintRawEventDict.h - ScintRawEvent/selection.xml +atlas_add_dictionary( WaveRawEventDict + WaveRawEvent/WaveRawEventDict.h + WaveRawEvent/selection.xml INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthAllocators CxxUtils StoreGateLib ScintIdentifier ScintRawEvent ) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthAllocators CxxUtils StoreGateLib ScintIdentifier WaveRawEvent ) diff --git a/Scintillator/ScintRawEvent/ScintRawEvent/ScintWaveform.h b/Waveform/WaveRawEvent/WaveRawEvent/RawWaveform.h similarity index 73% rename from Scintillator/ScintRawEvent/ScintRawEvent/ScintWaveform.h rename to Waveform/WaveRawEvent/WaveRawEvent/RawWaveform.h index c7598d4464abe81f202a30b1534962370f591262..6ea6d9037afe587ebe21d52eb9280b23e7a397c8 100644 --- a/Scintillator/ScintRawEvent/ScintRawEvent/ScintWaveform.h +++ b/Waveform/WaveRawEvent/WaveRawEvent/RawWaveform.h @@ -3,15 +3,15 @@ */ /////////////////////////////////////////////////////////////////// -// ScintWaveform.h -// Header file for class ScintWaveform +// RawWaveform.h +// Header file for class RawWaveform /////////////////////////////////////////////////////////////////// // Class for the raw waveform data for all scintillator detectors // This is a direct conversion of the DigitizerDataFragment data /////////////////////////////////////////////////////////////////// -#ifndef SCINTRAWEVENT_SCINTWAVEFORM_H -#define SCINTRAWEVENT_SCINTWAVEFORM_H +#ifndef WAVERAWEVENT_RAWWAVEFORM_H +#define WAVERAWEVENT_RAWWAVEFORM_H #include <bitset> #include <vector> @@ -23,7 +23,7 @@ class DigitizerDataFragment; -class ScintWaveform { +class RawWaveform { /////////////////////////////////////////////////////////////////// // Public methods: @@ -31,17 +31,17 @@ class ScintWaveform { public: // Default constructor - ScintWaveform(); + RawWaveform(); // Destructor: - virtual ~ScintWaveform(); + virtual ~RawWaveform(); //move assignment defaulted - ScintWaveform & operator = (ScintWaveform &&) = default; + RawWaveform & operator = (RawWaveform &&) = default; //assignment defaulted - ScintWaveform & operator = (const ScintWaveform &) = default; + RawWaveform & operator = (const RawWaveform &) = default; //copy c'tor defaulted - ScintWaveform(const ScintWaveform &) = default; + RawWaveform(const RawWaveform &) = default; /////////////////////////////////////////////////////////////////// // Const methods: @@ -65,7 +65,7 @@ public: // some print-out: void print() const; - bool operator < (const ScintWaveform& rhs) const + bool operator < (const RawWaveform& rhs) const {return m_ID < rhs.m_ID;} // Set functions @@ -108,38 +108,38 @@ private: /////////////////////////////////////////////////////////////////// inline unsigned int -ScintWaveform::channel() const { return m_channel; } +RawWaveform::channel() const { return m_channel; } inline unsigned int -ScintWaveform::board_id() const { return m_board_id; } +RawWaveform::board_id() const { return m_board_id; } inline bool -ScintWaveform::board_fail_flag() const { return m_board_fail_flag; } +RawWaveform::board_fail_flag() const { return m_board_fail_flag; } inline unsigned int -ScintWaveform::pattern_trig_options() const { return m_pattern_trig_options; } +RawWaveform::pattern_trig_options() const { return m_pattern_trig_options; } inline unsigned int -ScintWaveform::channel_mask() const { return m_channel_mask; } +RawWaveform::channel_mask() const { return m_channel_mask; } inline unsigned int -ScintWaveform::event_counter() const { return m_event_counter; } +RawWaveform::event_counter() const { return m_event_counter; } inline unsigned int -ScintWaveform::trigger_time_tag() const { return m_trigger_time_tag; } +RawWaveform::trigger_time_tag() const { return m_trigger_time_tag; } inline unsigned int -ScintWaveform::n_samples() const { return m_samples; } +RawWaveform::n_samples() const { return m_samples; } inline const std::vector<unsigned int>& -ScintWaveform::adc_counts() const { return m_adc_counts; } +RawWaveform::adc_counts() const { return m_adc_counts; } inline unsigned int -ScintWaveform::identify() const { return m_ID; } +RawWaveform::identify() const { return m_ID; } std::ostream -&operator<<(std::ostream &out, const ScintWaveform &wfm); +&operator<<(std::ostream &out, const RawWaveform &wfm); -CLASS_DEF( ScintWaveform, 193792541, 1 ) +CLASS_DEF( RawWaveform, 17563068, 1 ) -#endif // SCINTRAWEVENT_SCINTWAVEFORM_H +#endif // WAVERAWEVENT_RAWWAVEFORM_H diff --git a/Waveform/WaveRawEvent/WaveRawEvent/RawWaveformContainer.h b/Waveform/WaveRawEvent/WaveRawEvent/RawWaveformContainer.h new file mode 100644 index 0000000000000000000000000000000000000000..ad502ea1477fbbdb7f0a35da42ee719939b71160 --- /dev/null +++ b/Waveform/WaveRawEvent/WaveRawEvent/RawWaveformContainer.h @@ -0,0 +1,24 @@ +/* + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef WAVERAWEVENT_RAWWAVEFORMCONTAINER_H +#define WAVERAWEVENT_RAWWAVEFORMCONTAINER_H + +#include "WaveRawEvent/RawWaveform.h" +#include "AthContainers/DataVector.h" +#include "AthenaKernel/CLASS_DEF.h" + +// Make this a class in case we need to add some functions +class RawWaveformContainer : public DataVector<RawWaveform> { + public: + void print() const; +}; + +std::ostream +&operator<<(std::ostream &out, const RawWaveformContainer &container); + +CLASS_DEF(RawWaveformContainer, 1275584332, 1 ) +SG_BASE(RawWaveformContainer, DataVector<RawWaveform>); + +#endif // WAVERAWEVENT_RAWWAVEFORMCONTAINER_H diff --git a/Waveform/WaveRawEvent/WaveRawEvent/WaveRawEventDict.h b/Waveform/WaveRawEvent/WaveRawEvent/WaveRawEventDict.h new file mode 100644 index 0000000000000000000000000000000000000000..e8f14a9c06bde840297449568bd76638f2e04a98 --- /dev/null +++ b/Waveform/WaveRawEvent/WaveRawEvent/WaveRawEventDict.h @@ -0,0 +1,10 @@ +/* + Copyright (C) 2020 CERN for the benefit of the FASER collaboration +*/ + +#ifndef WAVERAWEVENT_WAVERAWEVENTDICT_H +#define WAVERAWEVENT_WAVERAWEVENTDICT_H + +#include "WaveRawEvent/RawWaveformContainer.h" + +#endif diff --git a/Waveform/WaveRawEvent/WaveRawEvent/selection.xml b/Waveform/WaveRawEvent/WaveRawEvent/selection.xml new file mode 100644 index 0000000000000000000000000000000000000000..9429780d48a1f43cb3914a50e5dba08e3e127c10 --- /dev/null +++ b/Waveform/WaveRawEvent/WaveRawEvent/selection.xml @@ -0,0 +1,7 @@ +<lcgdict> + <class name="RawWaveformContainer" id="f40fd51f-b70e-4cc8-971d-b6ab5c751a86" /> + <class name="DataVector<RawWaveform>" id="e4b393bd-e9b8-458a-8691-b0ebbfd6999c" /> + <class name="std::vector<RawWaveform*>" /> + <class name="std::vector<const RawWaveform*>" /> + <class name="RawWaveform" /> +</lcgdict> diff --git a/Scintillator/ScintRawEvent/src/ScintWaveform.cxx b/Waveform/WaveRawEvent/src/RawWaveform.cxx similarity index 85% rename from Scintillator/ScintRawEvent/src/ScintWaveform.cxx rename to Waveform/WaveRawEvent/src/RawWaveform.cxx index bc9f5eb912e4bd7cd75fefda9b4a829699f92578..13700a735c3653867a7e7ab5df8037e3566664ae 100644 --- a/Scintillator/ScintRawEvent/src/ScintWaveform.cxx +++ b/Waveform/WaveRawEvent/src/RawWaveform.cxx @@ -2,12 +2,12 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -#include "ScintRawEvent/ScintWaveform.h" +#include "WaveRawEvent/RawWaveform.h" #include "EventFormats/DigitizerDataFragment.hpp" // Default consdtructor // -ScintWaveform::ScintWaveform( ) : +RawWaveform::RawWaveform( ) : m_board_id(0), m_board_fail_flag(1), m_pattern_trig_options(0), @@ -22,15 +22,15 @@ ScintWaveform::ScintWaveform( ) : } -ScintWaveform::~ScintWaveform() {} +RawWaveform::~RawWaveform() {} void -ScintWaveform::setIdentifier(unsigned int id) { +RawWaveform::setIdentifier(unsigned int id) { m_ID = id; } void -ScintWaveform::setHeader(const DigitizerDataFragment* frag) { +RawWaveform::setHeader(const DigitizerDataFragment* frag) { m_board_id = frag->board_id(); m_pattern_trig_options = frag->pattern_trig_options(); m_channel_mask = frag->channel_mask(); @@ -40,7 +40,7 @@ ScintWaveform::setHeader(const DigitizerDataFragment* frag) { } void -ScintWaveform::setWaveform(unsigned int channel, const std::vector<uint16_t> waveform) { +RawWaveform::setWaveform(unsigned int channel, const std::vector<uint16_t> waveform) { m_channel = channel; // Make sure the vector is empty first @@ -51,7 +51,7 @@ ScintWaveform::setWaveform(unsigned int channel, const std::vector<uint16_t> wav } std::ostream -&operator<<(std::ostream &out, const ScintWaveform &wfm) { +&operator<<(std::ostream &out, const RawWaveform &wfm) { out << "Waveform data channel:" << std::dec << wfm.channel() << std::endl; out << std::setw(30) << " board_id: "<<std::setfill(' ')<<std::setw(32)<<std::dec<<wfm.board_id()<<std::setfill(' ')<<std::endl; out << std::setw(30) << " board_fail_flag: "<<std::setfill(' ')<<std::setw(32)<<std::dec<<wfm.board_fail_flag()<<std::setfill(' ')<<std::endl; diff --git a/Scintillator/ScintRawEvent/src/ScintWaveformContainer.cxx b/Waveform/WaveRawEvent/src/RawWaveformContainer.cxx similarity index 62% rename from Scintillator/ScintRawEvent/src/ScintWaveformContainer.cxx rename to Waveform/WaveRawEvent/src/RawWaveformContainer.cxx index 2a71ab8101ffafdb20cef5d7f5a28031d3d77543..b1a0da82d2608fe4d618a0d6ae46fc88a8a6a8f7 100644 --- a/Scintillator/ScintRawEvent/src/ScintWaveformContainer.cxx +++ b/Waveform/WaveRawEvent/src/RawWaveformContainer.cxx @@ -1,13 +1,13 @@ -#include "ScintRawEvent/ScintWaveformContainer.h" +#include "WaveRawEvent/RawWaveformContainer.h" void -ScintWaveformContainer::print() const { +RawWaveformContainer::print() const { std::cout << "Waveform container with size=" << this->size() << std::endl; for(auto wfm: *this) std::cout << *wfm; } std::ostream -&operator<<(std::ostream &out, const ScintWaveformContainer& cont) { +&operator<<(std::ostream &out, const RawWaveformContainer& cont) { out << "Waveform container with size=" << cont.size() << std::endl; for(auto wfm: cont) out << *wfm; return out; diff --git a/Scintillator/ScintRecAlgs/CMakeLists.txt b/Waveform/WaveRecAlgs/CMakeLists.txt similarity index 74% rename from Scintillator/ScintRecAlgs/CMakeLists.txt rename to Waveform/WaveRecAlgs/CMakeLists.txt index 7ad1776170385a4f2203030dbac8fc5f7f5f43ab..c72671bf705ace3ad1935034564982a3b60a94a2 100644 --- a/Scintillator/ScintRecAlgs/CMakeLists.txt +++ b/Waveform/WaveRecAlgs/CMakeLists.txt @@ -1,15 +1,15 @@ ################################################################################ -# Package: ScintRecAlgs +# Package: WaveRecAlgs ################################################################################ # Declare the package name: -atlas_subdir( ScintRecAlgs ) +atlas_subdir( WaveRecAlgs ) # Component(s) in the package: -atlas_add_component( ScintRecAlgs +atlas_add_component( WaveRecAlgs src/*.cxx src/*.h src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps StoreGateLib ScintRawEvent xAODFaserWaveform ScintRecToolsLib ) + LINK_LIBRARIES AthenaBaseComps StoreGateLib WaveRawEvent xAODFaserWaveform WaveRecToolsLib ) atlas_install_python_modules( python/*.py ) diff --git a/Scintillator/ScintRecAlgs/python/ScintRecAlgsConfig.py b/Waveform/WaveRecAlgs/python/WaveRecAlgsConfig.py similarity index 95% rename from Scintillator/ScintRecAlgs/python/ScintRecAlgsConfig.py rename to Waveform/WaveRecAlgs/python/WaveRecAlgsConfig.py index f96dbcaf2f7ba283437116bfad0cd244af8220c6..0c2d5ffc6c5d7cfff88cc74cf8d4b35f5f635ef8 100644 --- a/Scintillator/ScintRecAlgs/python/ScintRecAlgsConfig.py +++ b/Waveform/WaveRecAlgs/python/WaveRecAlgsConfig.py @@ -32,7 +32,7 @@ def WaveformClockRecCfg(flags, name="ClockRecAlg", **kwargs): # tool.CheckResult = True kwargs.setdefault("ClockReconstructionTool", tool) - recoAlg = CompFactory.ScintClockRecAlg(name, **kwargs) + recoAlg = CompFactory.WaveClockRecAlg(name, **kwargs) recoAlg.ClockReconstructionTool = tool acc.addEventAlgo(recoAlg) @@ -49,7 +49,7 @@ def WaveformHitRecCfg(flags, name="WaveformRecAlg", source="", **kwargs): kwargs.setdefault("WaveformHitContainerKey", source+"WaveformHits") kwargs.setdefault("WaveformReconstructionTool", tool) - recoAlg = CompFactory.ScintWaveformRecAlg(name, **kwargs) + recoAlg = CompFactory.RawWaveformRecAlg(name, **kwargs) recoAlg.WaveformReconstructionTool = tool acc.addEventAlgo(recoAlg) diff --git a/Scintillator/ScintRecAlgs/src/ScintWaveformRecAlg.cxx b/Waveform/WaveRecAlgs/src/RawWaveformRecAlg.cxx similarity index 84% rename from Scintillator/ScintRecAlgs/src/ScintWaveformRecAlg.cxx rename to Waveform/WaveRecAlgs/src/RawWaveformRecAlg.cxx index c4e04b2e62e84df576de0a1d6769a28a149ed5a1..3c6da1c0eb5a365f469dba9acd0b2027c433c2f4 100644 --- a/Scintillator/ScintRecAlgs/src/ScintWaveformRecAlg.cxx +++ b/Waveform/WaveRecAlgs/src/RawWaveformRecAlg.cxx @@ -1,13 +1,13 @@ -#include "ScintWaveformRecAlg.h" +#include "RawWaveformRecAlg.h" -ScintWaveformRecAlg::ScintWaveformRecAlg(const std::string& name, +RawWaveformRecAlg::RawWaveformRecAlg(const std::string& name, ISvcLocator* pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator) { } StatusCode -ScintWaveformRecAlg::initialize() { +RawWaveformRecAlg::initialize() { ATH_MSG_INFO(name() << "::initalize()" ); // Initalize tools @@ -26,24 +26,24 @@ ScintWaveformRecAlg::initialize() { } StatusCode -ScintWaveformRecAlg::finalize() { +RawWaveformRecAlg::finalize() { ATH_MSG_INFO(name() << "::finalize()"); return StatusCode::SUCCESS; } StatusCode -ScintWaveformRecAlg::execute(const EventContext& ctx) const { +RawWaveformRecAlg::execute(const EventContext& ctx) const { ATH_MSG_DEBUG("Executing"); ATH_MSG_DEBUG("Run: " << ctx.eventID().run_number() << " Event: " << ctx.eventID().event_number()); // Find the input waveform container - SG::ReadHandle<ScintWaveformContainer> waveformHandle(m_waveformContainerKey, ctx); + SG::ReadHandle<RawWaveformContainer> waveformHandle(m_waveformContainerKey, ctx); ATH_CHECK( waveformHandle.isValid() ); - ATH_MSG_DEBUG("Found ReadHandle for ScintWaveformContainer " << m_waveformContainerKey); + ATH_MSG_DEBUG("Found ReadHandle for RawWaveformContainer " << m_waveformContainerKey); if (waveformHandle->size() == 0) { ATH_MSG_DEBUG("Waveform container found with zero length!"); diff --git a/Scintillator/ScintRecAlgs/src/ScintWaveformRecAlg.h b/Waveform/WaveRecAlgs/src/RawWaveformRecAlg.h similarity index 70% rename from Scintillator/ScintRecAlgs/src/ScintWaveformRecAlg.h rename to Waveform/WaveRecAlgs/src/RawWaveformRecAlg.h index 7d43e97523bdba7ddc8749dddc40108dafa29f35..a7120b83598b7b32476f86f1b890014452bf70f4 100644 --- a/Scintillator/ScintRecAlgs/src/ScintWaveformRecAlg.h +++ b/Waveform/WaveRecAlgs/src/RawWaveformRecAlg.h @@ -1,11 +1,11 @@ -#ifndef SCINTRECALGS_SCINTWAVEFORMRECALG_H -#define SCINTRECALGS_SCINTWAVEFORMRECALG_H +#ifndef WAVERECALGS_RAWWAVEFORMRECALG_H +#define WAVERECALGS_RAWWAVEFORMRECALG_H // Base class #include "AthenaBaseComps/AthReentrantAlgorithm.h" // Data classes -#include "ScintRawEvent/ScintWaveformContainer.h" +#include "WaveRawEvent/RawWaveformContainer.h" #include "xAODFaserWaveform/WaveformClock.h" #include "xAODFaserWaveform/WaveformClockAuxInfo.h" @@ -15,7 +15,7 @@ #include "xAODFaserWaveform/WaveformHitAuxContainer.h" // Tool classes -#include "ScintRecTools/IWaveformReconstructionTool.h" +#include "WaveRecTools/IWaveformReconstructionTool.h" // Handles #include "StoreGate/ReadHandleKey.h" @@ -28,12 +28,12 @@ // STL #include <string> -class ScintWaveformRecAlg : public AthReentrantAlgorithm { +class RawWaveformRecAlg : public AthReentrantAlgorithm { public: // Constructor - ScintWaveformRecAlg(const std::string& name, ISvcLocator* pSvcLocator); - virtual ~ScintWaveformRecAlg() = default; + RawWaveformRecAlg(const std::string& name, ISvcLocator* pSvcLocator); + virtual ~RawWaveformRecAlg() = default; /** @name Usual algorithm methods */ //@{ @@ -46,9 +46,9 @@ class ScintWaveformRecAlg : public AthReentrantAlgorithm { /** @name Disallow default instantiation, copy, assignment */ //@{ - ScintWaveformRecAlg() = delete; - ScintWaveformRecAlg(const ScintWaveformRecAlg&) = delete; - ScintWaveformRecAlg &operator=(const ScintWaveformRecAlg&) = delete; + RawWaveformRecAlg() = delete; + RawWaveformRecAlg(const RawWaveformRecAlg&) = delete; + RawWaveformRecAlg &operator=(const RawWaveformRecAlg&) = delete; //@} /** @@ -61,7 +61,7 @@ class ScintWaveformRecAlg : public AthReentrantAlgorithm { * @name Input raw waveform data using SG::ReadHandleKey */ //@{ - SG::ReadHandleKey<ScintWaveformContainer> m_waveformContainerKey + SG::ReadHandleKey<RawWaveformContainer> m_waveformContainerKey {this, "WaveformContainerKey", ""}; //@} @@ -83,4 +83,4 @@ class ScintWaveformRecAlg : public AthReentrantAlgorithm { }; -#endif // SCINTRECALGS_SCINTWAVEFORMRECALG_H +#endif // WAVERECALGS_RAWWAVEFORMRECALG_H diff --git a/Scintillator/ScintRecAlgs/src/ScintClockRecAlg.cxx b/Waveform/WaveRecAlgs/src/WaveClockRecAlg.cxx similarity index 89% rename from Scintillator/ScintRecAlgs/src/ScintClockRecAlg.cxx rename to Waveform/WaveRecAlgs/src/WaveClockRecAlg.cxx index 11ccfa9640a912e74bb7b8ecbb639adbd3ca2a98..36891e70dd09cf8180753711209c526da90e04e4 100644 --- a/Scintillator/ScintRecAlgs/src/ScintClockRecAlg.cxx +++ b/Waveform/WaveRecAlgs/src/WaveClockRecAlg.cxx @@ -1,12 +1,12 @@ -#include "ScintClockRecAlg.h" +#include "WaveClockRecAlg.h" -ScintClockRecAlg::ScintClockRecAlg(const std::string& name, +WaveClockRecAlg::WaveClockRecAlg(const std::string& name, ISvcLocator* pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator) { } StatusCode -ScintClockRecAlg::initialize() { +WaveClockRecAlg::initialize() { ATH_MSG_INFO(name() << "::initalize()" ); // Initalize tools @@ -22,21 +22,21 @@ ScintClockRecAlg::initialize() { } StatusCode -ScintClockRecAlg::finalize() { +WaveClockRecAlg::finalize() { ATH_MSG_INFO(name() << "::finalize()"); return StatusCode::SUCCESS; } StatusCode -ScintClockRecAlg::execute(const EventContext& ctx) const { +WaveClockRecAlg::execute(const EventContext& ctx) const { ATH_MSG_DEBUG("Executing"); ATH_MSG_DEBUG("Run: " << ctx.eventID().run_number() << " Event: " << ctx.eventID().event_number()); // Find the input waveform container - SG::ReadHandle<ScintWaveformContainer> waveformHandle(m_waveformContainerKey, ctx); + SG::ReadHandle<RawWaveformContainer> waveformHandle(m_waveformContainerKey, ctx); ATH_CHECK( waveformHandle.isValid() ); ATH_MSG_DEBUG("Found ReadHandle for Waveforms"); diff --git a/Scintillator/ScintRecAlgs/src/ScintClockRecAlg.h b/Waveform/WaveRecAlgs/src/WaveClockRecAlg.h similarity index 63% rename from Scintillator/ScintRecAlgs/src/ScintClockRecAlg.h rename to Waveform/WaveRecAlgs/src/WaveClockRecAlg.h index 3fde8295da9b5ca4cdecf68bceae205df2a7ef8a..e6e61cfd29e219200c64bfcdb1752be0055e983a 100644 --- a/Scintillator/ScintRecAlgs/src/ScintClockRecAlg.h +++ b/Waveform/WaveRecAlgs/src/WaveClockRecAlg.h @@ -1,17 +1,17 @@ -#ifndef SCINTRECALGS_SCINTCLOCKRECALG_H -#define SCINTRECALGS_SCINTCLOCKRECALG_H +#ifndef WAVERECALGS_WAVECLOCKRECALG_H +#define WAVERECALGS_WAVECLOCKRECALG_H // Base class #include "AthenaBaseComps/AthReentrantAlgorithm.h" // Input data -#include "ScintRawEvent/ScintWaveformContainer.h" +#include "WaveRawEvent/RawWaveformContainer.h" // Output data -// #include "ScintRecEvent/WaveformClock.h" +// #include "WaveRecEvent/WaveformClock.h" #include "xAODFaserWaveform/WaveformClock.h" #include "xAODFaserWaveform/WaveformClockAuxInfo.h" -#include "ScintRecTools/IClockReconstructionTool.h" +#include "WaveRecTools/IClockReconstructionTool.h" #include "StoreGate/ReadHandleKey.h" @@ -22,12 +22,12 @@ // STL #include <string> -class ScintClockRecAlg : public AthReentrantAlgorithm { +class WaveClockRecAlg : public AthReentrantAlgorithm { public: // Constructor - ScintClockRecAlg(const std::string& name, ISvcLocator* pSvcLocator); - virtual ~ScintClockRecAlg() = default; + WaveClockRecAlg(const std::string& name, ISvcLocator* pSvcLocator); + virtual ~WaveClockRecAlg() = default; /** @name Usual algorithm methods */ //@{ @@ -40,9 +40,9 @@ class ScintClockRecAlg : public AthReentrantAlgorithm { /** @name Disallow default instantiation, copy, assignment */ //@{ - ScintClockRecAlg() = delete; - ScintClockRecAlg(const ScintClockRecAlg&) = delete; - ScintClockRecAlg &operator=(const ScintClockRecAlg&) = delete; + WaveClockRecAlg() = delete; + WaveClockRecAlg(const WaveClockRecAlg&) = delete; + WaveClockRecAlg &operator=(const WaveClockRecAlg&) = delete; //@} /** @@ -55,7 +55,7 @@ class ScintClockRecAlg : public AthReentrantAlgorithm { * @name Input data using SG::ReadHandleKey */ //@{ - SG::ReadHandleKey<ScintWaveformContainer> m_waveformContainerKey + SG::ReadHandleKey<RawWaveformContainer> m_waveformContainerKey {this, "WaveformContainerKey", "ClockWaveforms"}; //@} @@ -69,4 +69,4 @@ class ScintClockRecAlg : public AthReentrantAlgorithm { }; -#endif // SCINTRECALGS_SCINTCLOCKRECALG_H +#endif // WAVERECALGS_WAVECLOCKRECALG_H diff --git a/Waveform/WaveRecAlgs/src/components/WaveRecAlgs_entries.cxx b/Waveform/WaveRecAlgs/src/components/WaveRecAlgs_entries.cxx new file mode 100644 index 0000000000000000000000000000000000000000..21f97520a8e2da1093b5b4f929143cff32fd83a9 --- /dev/null +++ b/Waveform/WaveRecAlgs/src/components/WaveRecAlgs_entries.cxx @@ -0,0 +1,5 @@ +#include "../RawWaveformRecAlg.h" +#include "../WaveClockRecAlg.h" + +DECLARE_COMPONENT( RawWaveformRecAlg ) +DECLARE_COMPONENT( WaveClockRecAlg ) diff --git a/Scintillator/ScintRecTools/CMakeLists.txt b/Waveform/WaveRecTools/CMakeLists.txt similarity index 65% rename from Scintillator/ScintRecTools/CMakeLists.txt rename to Waveform/WaveRecTools/CMakeLists.txt index a128a73845fdfdfea13d2c43e6085d2f5e99b2d1..d8f3e6f053232477a1b1501a26e3a88efe9272c1 100644 --- a/Scintillator/ScintRecTools/CMakeLists.txt +++ b/Waveform/WaveRecTools/CMakeLists.txt @@ -1,25 +1,25 @@ ################################################################################ -# Package: ScintRecTools +# Package: WaveRecTools ################################################################################ # Declare the package name: -atlas_subdir( ScintRecTools ) +atlas_subdir( WaveRecTools ) # External dependencies: find_package( ROOT ) # Component(s) in the package: -atlas_add_library( ScintRecToolsLib - ScintRecTools/*.h src/*.cxx src/*.h - PUBLIC_HEADERS ScintRecTools +atlas_add_library( WaveRecToolsLib + WaveRecTools/*.h src/*.cxx src/*.h + PUBLIC_HEADERS WaveRecTools PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES AthenaBaseComps AthenaKernel GeoPrimitives ScintRawEvent xAODFaserWaveform + LINK_LIBRARIES AthenaBaseComps AthenaKernel GeoPrimitives WaveRawEvent xAODFaserWaveform PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ) -atlas_add_component( ScintRecTools +atlas_add_component( WaveRecTools src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel ScintRecToolsLib ) + LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel WaveRecToolsLib ) diff --git a/Scintillator/ScintRecTools/ScintRecTools/IClockReconstructionTool.h b/Waveform/WaveRecTools/WaveRecTools/IClockReconstructionTool.h similarity index 80% rename from Scintillator/ScintRecTools/ScintRecTools/IClockReconstructionTool.h rename to Waveform/WaveRecTools/WaveRecTools/IClockReconstructionTool.h index 46712a75ca41eceabf1331fd2ae1412d9f7f429b..d9b158c8e67b026234acee51c4b3ede6d6843fd2 100644 --- a/Scintillator/ScintRecTools/ScintRecTools/IClockReconstructionTool.h +++ b/Waveform/WaveRecTools/WaveRecTools/IClockReconstructionTool.h @@ -9,8 +9,8 @@ */ -#ifndef SCINTRECTOOLS_ICLOCKRECONSTRUCTIONTOOL_H -#define SCINTRECTOOLS_ICLOCKRECONSTRUCTIONTOOL_H +#ifndef WAVERECTOOLS_ICLOCKRECONSTRUCTIONTOOL_H +#define WAVERECTOOLS_ICLOCKRECONSTRUCTIONTOOL_H // Base class #include "GaudiKernel/IAlgTool.h" @@ -18,7 +18,7 @@ #include "xAODFaserWaveform/WaveformClock.h" -class ScintWaveform; +class RawWaveform; ///Interface for Clock reco algorithms class IClockReconstructionTool : virtual public IAlgTool @@ -31,7 +31,7 @@ class IClockReconstructionTool : virtual public IAlgTool virtual ~IClockReconstructionTool() = default; // Reconstruct all peaks in a raw waveform - virtual StatusCode reconstruct(const ScintWaveform& wave, + virtual StatusCode reconstruct(const RawWaveform& wave, xAOD::WaveformClock* clockdata) const = 0; }; diff --git a/Scintillator/ScintRecTools/ScintRecTools/IWaveformReconstructionTool.h b/Waveform/WaveRecTools/WaveRecTools/IWaveformReconstructionTool.h similarity index 81% rename from Scintillator/ScintRecTools/ScintRecTools/IWaveformReconstructionTool.h rename to Waveform/WaveRecTools/WaveRecTools/IWaveformReconstructionTool.h index 00218de1cf251e239be6cd5e066e02721154be61..e985cb1d66b81e0bddbee05e682798fdb0f61be8 100644 --- a/Scintillator/ScintRecTools/ScintRecTools/IWaveformReconstructionTool.h +++ b/Waveform/WaveRecTools/WaveRecTools/IWaveformReconstructionTool.h @@ -9,8 +9,8 @@ */ -#ifndef SCINTRECTOOLS_IWAVEFORMRECONSTRUCTIONTOOL_H -#define SCINTRECTOOLS_IWAVEFORMRECONSTRUCTIONTOOL_H +#ifndef WAVERECTOOLS_IWAVEFORMRECONSTRUCTIONTOOL_H +#define WAVERECTOOLS_IWAVEFORMRECONSTRUCTIONTOOL_H // Base class #include "GaudiKernel/IAlgTool.h" @@ -19,7 +19,7 @@ #include "xAODFaserWaveform/WaveformHitContainer.h" #include "xAODFaserWaveform/WaveformClock.h" -class ScintWaveform; +class RawWaveform; ///Interface for Waveform reco algorithms class IWaveformReconstructionTool : virtual public IAlgTool @@ -32,7 +32,7 @@ class IWaveformReconstructionTool : virtual public IAlgTool virtual ~IWaveformReconstructionTool() = default; // Reconstruct all peaks in a raw waveform - virtual StatusCode reconstruct(const ScintWaveform& wave, + virtual StatusCode reconstruct(const RawWaveform& wave, const xAOD::WaveformClock* clock, xAOD::WaveformHitContainer* container) const = 0; diff --git a/Scintillator/ScintRecTools/src/ClockReconstructionTool.cxx b/Waveform/WaveRecTools/src/ClockReconstructionTool.cxx similarity index 97% rename from Scintillator/ScintRecTools/src/ClockReconstructionTool.cxx rename to Waveform/WaveRecTools/src/ClockReconstructionTool.cxx index c4d1bf68f99a32d9e940c38de62bae9986e7464e..aaae0861b6fab59b7144afedb72797ad9da91f86 100644 --- a/Scintillator/ScintRecTools/src/ClockReconstructionTool.cxx +++ b/Waveform/WaveRecTools/src/ClockReconstructionTool.cxx @@ -30,7 +30,7 @@ ClockReconstructionTool::initialize() { // Reconstruction step StatusCode -ClockReconstructionTool::reconstruct(const ScintWaveform& raw_wave, +ClockReconstructionTool::reconstruct(const RawWaveform& raw_wave, xAOD::WaveformClock* clockdata) const { ATH_MSG_DEBUG("Clock reconstruct called "); @@ -150,7 +150,7 @@ ClockReconstructionTool::reconstruct(const ScintWaveform& raw_wave, } void -ClockReconstructionTool::checkResult(const ScintWaveform& raw_wave, +ClockReconstructionTool::checkResult(const RawWaveform& raw_wave, xAOD::WaveformClock* clockdata) const { // Go through each element in raw_wave and make sure time in clockdata matches diff --git a/Scintillator/ScintRecTools/src/ClockReconstructionTool.h b/Waveform/WaveRecTools/src/ClockReconstructionTool.h similarity index 79% rename from Scintillator/ScintRecTools/src/ClockReconstructionTool.h rename to Waveform/WaveRecTools/src/ClockReconstructionTool.h index 056d1a4e9e52b1a7ee6963a45b45c5872a46db99..ea7ec2ec7e2a28e49d587f9a7f072678ee4bdbc5 100644 --- a/Scintillator/ScintRecTools/src/ClockReconstructionTool.h +++ b/Waveform/WaveRecTools/src/ClockReconstructionTool.h @@ -6,14 +6,14 @@ * Header file for ClockReconstructionTool.h * */ -#ifndef SCINTRECTOOLS_CLOCKRECONSTRUCTIONTOOL_H -#define SCINTRECTOOLS_CLOCKRECONSTRUCTIONTOOL_H +#ifndef WAVERECTOOLS_CLOCKRECONSTRUCTIONTOOL_H +#define WAVERECTOOLS_CLOCKRECONSTRUCTIONTOOL_H //Athena #include "AthenaBaseComps/AthAlgTool.h" -#include "ScintRecTools/IClockReconstructionTool.h" +#include "WaveRecTools/IClockReconstructionTool.h" -#include "ScintRawEvent/ScintWaveform.h" +#include "WaveRawEvent/RawWaveform.h" #include "xAODFaserWaveform/WaveformClock.h" //Gaudi @@ -34,7 +34,7 @@ class ClockReconstructionTool: public extends<AthAlgTool, IClockReconstructionTo StatusCode initialize(); /// Reconstruct hits from clock - virtual StatusCode reconstruct(const ScintWaveform& wave, + virtual StatusCode reconstruct(const RawWaveform& wave, xAOD::WaveformClock* clockdata) const; private: @@ -48,7 +48,7 @@ class ClockReconstructionTool: public extends<AthAlgTool, IClockReconstructionTo /// Check reconstructed clock against waveform BooleanProperty m_checkResult{this, "CheckResult", false}; - void checkResult(const ScintWaveform& raw_wave, + void checkResult(const RawWaveform& raw_wave, xAOD::WaveformClock* clockdata) const; // Limits to print warnings @@ -58,4 +58,4 @@ class ClockReconstructionTool: public extends<AthAlgTool, IClockReconstructionTo }; -#endif // SCINTRECTOOLS_CLOCKRECONSTRUCTIONTOOL_H +#endif // WAVERECTOOLS_CLOCKRECONSTRUCTIONTOOL_H diff --git a/Scintillator/ScintRecTools/src/WaveformBaselineData.cxx b/Waveform/WaveRecTools/src/WaveformBaselineData.cxx similarity index 100% rename from Scintillator/ScintRecTools/src/WaveformBaselineData.cxx rename to Waveform/WaveRecTools/src/WaveformBaselineData.cxx diff --git a/Scintillator/ScintRecTools/src/WaveformBaselineData.h b/Waveform/WaveRecTools/src/WaveformBaselineData.h similarity index 93% rename from Scintillator/ScintRecTools/src/WaveformBaselineData.h rename to Waveform/WaveRecTools/src/WaveformBaselineData.h index 13144a4f92da45982a32a7b25053d075a2a8bb2b..218fe37af9b3401c91f7d3cf24a8feb6815db8f9 100644 --- a/Scintillator/ScintRecTools/src/WaveformBaselineData.h +++ b/Waveform/WaveRecTools/src/WaveformBaselineData.h @@ -10,8 +10,8 @@ /////////////////////////////////////////////////////////////////// // Version 1.0 2/21/2021 Eric Torrence /////////////////////////////////////////////////////////////////// -#ifndef SCINTRECTOOLS_WAVEFORMBASELINEDATA_H -#define SCINTRECTOOLS_WAVEFORMBASELINEDATA_H +#ifndef WAVERECTOOLS_WAVEFORMBASELINEDATA_H +#define WAVERECTOOLS_WAVEFORMBASELINEDATA_H #include <iostream> @@ -72,4 +72,4 @@ WaveformBaselineData::clone() const { return new WaveformBaselineData(*this); } -#endif // SCINTRECTOOLS_WAVEFORMBASELINEDATA_H +#endif // WAVERECTOOLS_WAVEFORMBASELINEDATA_H diff --git a/Scintillator/ScintRecTools/src/WaveformFitResult.cxx b/Waveform/WaveRecTools/src/WaveformFitResult.cxx similarity index 100% rename from Scintillator/ScintRecTools/src/WaveformFitResult.cxx rename to Waveform/WaveRecTools/src/WaveformFitResult.cxx diff --git a/Scintillator/ScintRecTools/src/WaveformFitResult.h b/Waveform/WaveRecTools/src/WaveformFitResult.h similarity index 93% rename from Scintillator/ScintRecTools/src/WaveformFitResult.h rename to Waveform/WaveRecTools/src/WaveformFitResult.h index 92ecf0fc6e69d1b481ffdbc84b0959be2049fd6a..8b33e6378cbae072ad7774d7130cf862b423337e 100644 --- a/Scintillator/ScintRecTools/src/WaveformFitResult.h +++ b/Waveform/WaveRecTools/src/WaveformFitResult.h @@ -10,8 +10,8 @@ /////////////////////////////////////////////////////////////////// // Version 1.0 2/21/2021 Eric Torrence /////////////////////////////////////////////////////////////////// -#ifndef SCINTRECTOOLS_WAVEFORMFITRESULT_H -#define SCINTRECTOOLS_WAVEFORMFITRESULT_H +#ifndef WAVERECTOOLS_WAVEFORMFITRESULT_H +#define WAVERECTOOLS_WAVEFORMFITRESULT_H #include <iostream> @@ -70,4 +70,4 @@ std::ostream // Inline methods: /////////////////////////////////////////////////////////////////// -#endif // SCINTRECTOOLS_WAVEFORMFITRESULT_H +#endif // WAVERECTOOLS_WAVEFORMFITRESULT_H diff --git a/Scintillator/ScintRecTools/src/WaveformReconstructionTool.cxx b/Waveform/WaveRecTools/src/WaveformReconstructionTool.cxx similarity index 98% rename from Scintillator/ScintRecTools/src/WaveformReconstructionTool.cxx rename to Waveform/WaveRecTools/src/WaveformReconstructionTool.cxx index e774f918de2e836faee2fa583258fcfbda1f0da2..934f20803d18a1786ace8dedf18062203db8ba56 100644 --- a/Scintillator/ScintRecTools/src/WaveformReconstructionTool.cxx +++ b/Waveform/WaveRecTools/src/WaveformReconstructionTool.cxx @@ -43,7 +43,7 @@ WaveformReconstructionTool::initialize() { // Reconstruction step StatusCode -WaveformReconstructionTool::reconstruct(const ScintWaveform& raw_wave, +WaveformReconstructionTool::reconstruct(const RawWaveform& raw_wave, const xAOD::WaveformClock* clock, xAOD::WaveformHitContainer* container) const { @@ -291,7 +291,7 @@ WaveformReconstructionTool::findOverflow(const WaveformBaselineData& base, } WaveformBaselineData& -WaveformReconstructionTool::findSimpleBaseline(const ScintWaveform& raw_wave) const { +WaveformReconstructionTool::findSimpleBaseline(const RawWaveform& raw_wave) const { ATH_MSG_DEBUG( "findSimpleBaseline called" ); //ATH_MSG_DEBUG( raw_wave ); @@ -332,7 +332,7 @@ WaveformReconstructionTool::findSimpleBaseline(const ScintWaveform& raw_wave) co } WaveformBaselineData& -WaveformReconstructionTool::findAdvancedBaseline(const ScintWaveform& raw_wave) const { +WaveformReconstructionTool::findAdvancedBaseline(const RawWaveform& raw_wave) const { ATH_MSG_DEBUG( "findAdvancedBaseline called" ); diff --git a/Scintillator/ScintRecTools/src/WaveformReconstructionTool.h b/Waveform/WaveRecTools/src/WaveformReconstructionTool.h similarity index 88% rename from Scintillator/ScintRecTools/src/WaveformReconstructionTool.h rename to Waveform/WaveRecTools/src/WaveformReconstructionTool.h index e8b2abf937c0b2934b6521b0786d0832240ffad3..1bb0f20d4d2901468fa9982fd7bbed26c9c2d73b 100644 --- a/Scintillator/ScintRecTools/src/WaveformReconstructionTool.h +++ b/Waveform/WaveRecTools/src/WaveformReconstructionTool.h @@ -6,14 +6,14 @@ * Header file for WaveformReconstructionTool.h * */ -#ifndef SCINTRECTOOLS_WAVEFORMRECONSTRUCTIONTOOL_H -#define SCINTRECTOOLS_WAVEFORMRECONSTRUCTIONTOOL_H +#ifndef WAVERECTOOLS_WAVEFORMRECONSTRUCTIONTOOL_H +#define WAVERECTOOLS_WAVEFORMRECONSTRUCTIONTOOL_H //Athena #include "AthenaBaseComps/AthAlgTool.h" -#include "ScintRecTools/IWaveformReconstructionTool.h" +#include "WaveRecTools/IWaveformReconstructionTool.h" -#include "ScintRawEvent/ScintWaveform.h" +#include "WaveRawEvent/RawWaveform.h" #include "WaveformBaselineData.h" #include "WaveformFitResult.h" @@ -37,7 +37,7 @@ class WaveformReconstructionTool: public extends<AthAlgTool, IWaveformReconstruc /// Reconstruct hits from waveform - virtual StatusCode reconstruct(const ScintWaveform& wave, + virtual StatusCode reconstruct(const RawWaveform& wave, const xAOD::WaveformClock* clock, xAOD::WaveformHitContainer* container) const; @@ -83,8 +83,8 @@ class WaveformReconstructionTool: public extends<AthAlgTool, IWaveformReconstruc FloatProperty m_timingPeakFraction{this, "TimingPeakFraction", 0.45}; // Baseline algorithms - WaveformBaselineData& findSimpleBaseline(const ScintWaveform& wave) const; - WaveformBaselineData& findAdvancedBaseline(const ScintWaveform& wave) const; + WaveformBaselineData& findSimpleBaseline(const RawWaveform& wave) const; + WaveformBaselineData& findAdvancedBaseline(const RawWaveform& wave) const; // Find peak in wave, return windowed region in windowed_time and windowed_wave // Windowed region is removed from original vectors @@ -114,4 +114,4 @@ class WaveformReconstructionTool: public extends<AthAlgTool, IWaveformReconstruc }; -#endif // SCINTRECTOOLS_WAVEFORMRECONSTRUCTIONTOOL_H +#endif // WAVERECTOOLS_WAVEFORMRECONSTRUCTIONTOOL_H diff --git a/Scintillator/ScintRecTools/src/components/ScintRecTools_entries.cxx b/Waveform/WaveRecTools/src/components/WaveRecTools_entries.cxx similarity index 100% rename from Scintillator/ScintRecTools/src/components/ScintRecTools_entries.cxx rename to Waveform/WaveRecTools/src/components/WaveRecTools_entries.cxx diff --git a/faser-common b/faser-common index a6aa04b50328ec496cb8e6910dfc5f77185b1445..89ce6a07128eb2ebc367b6b68f29c9c88220e3e6 160000 --- a/faser-common +++ b/faser-common @@ -1 +1 @@ -Subproject commit a6aa04b50328ec496cb8e6910dfc5f77185b1445 +Subproject commit 89ce6a07128eb2ebc367b6b68f29c9c88220e3e6 diff --git a/graphics/VTI12/README.md b/graphics/VTI12/README.md index 4cf72c22b151a243e072963d4f0b34835130f7ce..d6e0311a08559002da6f750fb31e984be5a42564 100644 --- a/graphics/VTI12/README.md +++ b/graphics/VTI12/README.md @@ -8,8 +8,8 @@ To run on Calypso MC data (from an installation (run) directory): Note that VP1PLUGINPATH can be ninja-changed by asetup, and if it does not include the Calypso installation library folder, nothing will work. Also note that it must be an ABSOLUTE (not relative) path! -You can also give the -detdescr="FASER-01" (baseline detector), -detdescr="FASER-02" (baseline + IFT) or -detdescr="FASERNU-02" (baseline + IFT + emulsion) to specify the geometry. +You can also give the -detdescr="FASER-01" (baseline detector), -detdescr="FASER-02" (baseline + IFT), -detdescr="FASERNU-02" (baseline + IFT + emulsion) or -detdescr="FASER-TB00" (2021 Test-beam) to specify the geometry. -You also need either -globcond="OFLCOND-FASER-01" (baseline) or -globcond="OFLCOND-FASER-02" (IFT with or without emulsion) flags to specify the conditions. +You also need either -globcond="OFLCOND-FASER-01" (baseline) or -globcond="OFLCOND-FASER-02" (IFT with or without emulsion, or Test-beam) flags to specify the conditions. The event display has no way to determine the right values for these settings (it defaults to FASER-01 and OFLCOND-FASER-01). \ No newline at end of file diff --git a/graphics/VTI12/VTI12Algs/share/vti12 b/graphics/VTI12/VTI12Algs/share/vti12 index 803466b4e18a0e5c2de706db1e774f717c11c7fa..ee3cf7c0f5f1afd20895c475e6a42f7f7d7d9caa 100644 --- a/graphics/VTI12/VTI12Algs/share/vti12 +++ b/graphics/VTI12/VTI12Algs/share/vti12 @@ -715,7 +715,7 @@ if [ "x$FLAG_HELP" != "x0" ]; then echo " (default mode when running over data files)" echo echo " -fatras : Use Fatras (in single-track-simulation mode if no input file with generated event)" - echo " -fatraskey=KEY : Optionally override truth key used by Fatras (typical values are GEN_EVENT or TruthEvent)" + echo " -fatraskey=KEY : Optionally override truth key used by Fatras (typical values are BeamTruthEvent or TruthEvent)" echo echo " -eventsrc=DIR : Directory to take single event files from (do not specify input files in this case)." echo " To get files from a web server (i.e. live events), put instead the url to the file" diff --git a/graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx b/graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx index f86ddf08faf1fead9da2cfc4964a92514a57c5ed..f3f4dbe1b6de67bd31b732b0a5bf1b292c45018b 100644 --- a/graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx +++ b/graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx @@ -251,7 +251,7 @@ VP1MainWindow::VP1MainWindow(VP1ExecutionScheduler*sched,VP1AvailEvents * ae,QWi // connect(pushButton_quicksetup_trackingstudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); // connect(pushButton_quicksetup_calostudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); connect(pushButton_quicksetup_geometrystudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); - connect(pushButton_quicksetup_analysisstudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); + connect(pushButton_quicksetup_waveformstudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); //Default application font: m_defaultfont = QApplication::font(); @@ -284,7 +284,7 @@ VP1MainWindow::VP1MainWindow(VP1ExecutionScheduler*sched,VP1AvailEvents * ae,QWi // connect(action_quicklaunch_Tracking_studies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); // connect(action_quicklaunch_Calo_studies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); connect(action_quicklaunch_Geometry_studies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); - connect(action_quicklaunch_analysisstudies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); + connect(action_quicklaunch_waveformstudies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); connect(action_quicklaunch_Storegate_browser,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); connect(action_quicklaunch_faser,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); // connect(action_quicklaunch_trackcalo_commis,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); @@ -1747,7 +1747,7 @@ void VP1MainWindow::quickSetupTriggered() plugfile="libVP13DCocktailPlugin.so"; channelname="TrackCalo"; tabname = "Track/Calo"; - } */else if (sender()==pushButton_quicksetup_analysisstudies||sender()==action_quicklaunch_analysisstudies) { + } */else if (sender()==pushButton_quicksetup_waveformstudies||sender()==action_quicklaunch_waveformstudies) { //Open AOD file selection dialog for VP1Light #ifdef BUILDVP1LIGHT @@ -1761,9 +1761,9 @@ void VP1MainWindow::quickSetupTriggered() pushButton_eventselect->setEnabled(true); #endif // BUILDVP1LIGHT - plugfile="libVP1AODPlugin.so"; - channelname="AOD"; - tabname = "Analysis"; + plugfile="libVTI12WaveformPlugin.so"; + channelname="Waveform"; + tabname = "Waveforms"; } else { addToMessageBox("quickSetupTriggered() Error: Unknown sender"); return; diff --git a/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui b/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui index 6a0b7eef4a03747b6838a76330c7b3edc03e59e3..e23575d74bba2348b6c69f2b80883a9125227d60 100644 --- a/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui +++ b/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui @@ -608,12 +608,12 @@ p, li { white-space: pre-wrap; } </widget> </item> <item row="2" column="0" colspan="3"> - <widget class="QPushButton" name="pushButton_quicksetup_analysisstudies"> + <widget class="QPushButton" name="pushButton_quicksetup_waveformstudies"> <property name="toolTip"> - <string><html><head/><body><p>Launch the Analysis Object (AOD) plugin within a new tab.</p></body></html></string> + <string><html><head/><body><p>Launch the VP1Waveform plugin within a new tab.</p></body></html></string> </property> <property name="text"> - <string>Unused</string> + <string>Waveform studies</string> </property> </widget> </item> @@ -764,7 +764,7 @@ p, li { white-space: pre-wrap; } <addaction name="action_quicklaunch_Calo_studies"/> --> <addaction name="action_quicklaunch_Geometry_studies"/> <!-- <addaction name="action_quicklaunch_trackcalo_commis"/> --> - <addaction name="action_quicklaunch_analysisstudies"/> + <addaction name="action_quicklaunch_waveformstudies"/> <addaction name="action_quicklaunch_Storegate_browser"/> <addaction name="separator"/> <addaction name="action_exit_VP1"/> @@ -880,9 +880,9 @@ p, li { white-space: pre-wrap; } <string>Open additional settings</string> </property> </action> - <action name="action_quicklaunch_analysisstudies"> + <action name="action_quicklaunch_waveformstudies"> <property name="text"> - <string>A&nalysis Studies</string> + <string>&Waveform Studies</string> </property> </action> </widget> diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/CMakeLists.txt b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..2cf1077d7b27e87550349271d7a5ee6d2237cec9 --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/CMakeLists.txt @@ -0,0 +1,19 @@ +################################################################################ +# Package: VTI12WaveformPlugin +################################################################################ + +# Declare the package name: +atlas_subdir( VTI12WaveformPlugin ) + +# External dependencies: +find_package( Qt5 COMPONENTS Core Gui Widgets ) + +# Generate MOC files automatically: +set( CMAKE_AUTOMOC TRUE ) + +# Build the library. +atlas_add_library( VTI12WaveformPlugin + VTI12WaveformPlugin/*.h src/*.cxx src/*.qrc + PUBLIC_HEADERS VTI12WaveformPlugin + LINK_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets + PRIVATE_LINK_LIBRARIES VP1Base VTI12WaveformSystems ) diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformChannel.h b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformChannel.h new file mode 100755 index 0000000000000000000000000000000000000000..b764e096df8aa3e1aceb462e3939534713b6b691 --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformChannel.h @@ -0,0 +1,32 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +///////////////////////////////////////////////////////////// +// // +// Header file for class VP1GeometryChannel // +// // +// Author: Thomas Kittelmann <Thomas.Kittelmann@cern.ch> // +// // +// Initial version: May 2007 // +// // +///////////////////////////////////////////////////////////// + +#ifndef VP1GEOMETRYCHANNEL_H +#define VP1GEOMETRYCHANNEL_H + +#include "VP1Base/IVP12DStandardChannelWidget.h" + +class VP1WaveformChannel : public IVP12DStandardChannelWidget { + + Q_OBJECT + +public: + + VP1WaveformChannel(); + void init(); + virtual ~VP1WaveformChannel(){} + +}; + +#endif diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..77bc35b8f4374618287a617cf4dd18a6431429e3 --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h @@ -0,0 +1,25 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ +//Autogenerated VP1 Factory Code Header File (Fri Aug 19 13:36:52 CEST 2016) + +#ifndef VP1WaveformPlugin_VP1AutoFactory_H +#define VP1WaveformPlugin_VP1AutoFactory_H + +#include <QObject> +#include <QStringList> + +#include "VP1Base/IVP1ChannelWidgetFactory.h" + +class VP1WaveformPlugin_VP1AutoFactory : public QObject, public IVP1ChannelWidgetFactory +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "VP1WaveformPlugin" ) + Q_INTERFACES(IVP1ChannelWidgetFactory) + +public: + virtual QStringList channelWidgetsProvided() const; + virtual IVP1ChannelWidget * getChannelWidget(const QString & channelwidget); +}; + +#endif diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformChannel.cxx b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformChannel.cxx new file mode 100755 index 0000000000000000000000000000000000000000..de7dda032b9eeaee1087a3e57c4015ccd615a429 --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformChannel.cxx @@ -0,0 +1,34 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +///////////////////////////////////////////////////////////// +// // +// Implementation of class VP1WaveformChannel // +// // +// Author: Dave Casper <dcasper@uci.edu> // +// // +// Initial version: August 2021 // +// // +///////////////////////////////////////////////////////////// + +#include "VTI12WaveformPlugin/VP1WaveformChannel.h" +#include "VTI12WaveformSystems/VP1WaveformSystem.h" +#include "VTI12WaveformSystems/VP1WaveformHitSystem.h" +#include "VP1Base/VP1QtUtils.h" + +VP1WaveformChannel::VP1WaveformChannel() + : IVP12DStandardChannelWidget(VP1CHANNELNAMEINPLUGIN(VP1WaveformChannel,"Waveform"), + "This channel shows the FASER waveform data.", + "dcasper@uci.edu") +{ +} + +void VP1WaveformChannel::init() +{ + addSystem(new VP1WaveformSystem); + addSystem(new VP1WaveformHitSystem); + // addSystem(new VP1GeometrySystem); + // if (VP1QtUtils::environmentVariableIsOn("VP1_SECOND_GEOMSYS")) + // addSystem(new VP1GeometrySystem(VP1GeoFlags::None,"AltGeo"),IVP13DStandardChannelWidget::StartDisabled); +} diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformPlugin_VP1AutoFactory.cxx b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformPlugin_VP1AutoFactory.cxx new file mode 100644 index 0000000000000000000000000000000000000000..7bd05df24f18c8415cdec79123915e2910453eb2 --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformPlugin_VP1AutoFactory.cxx @@ -0,0 +1,24 @@ +/* + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +*/ +//Autogenerated VP1 Factory Code Implementation File (Fri Aug 19 13:36:52 CEST 2016) + +#include <QtPlugin> +#include "VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h" +#include "VTI12WaveformPlugin/VP1WaveformChannel.h" + +QStringList VP1WaveformPlugin_VP1AutoFactory::channelWidgetsProvided() const +{ + return QStringList() + << "Waveform" + ; +} + +IVP1ChannelWidget * VP1WaveformPlugin_VP1AutoFactory::getChannelWidget(const QString & channelwidget) +{ + if (channelwidget == "Waveform") + return new VP1WaveformChannel(); + + return 0; +} + diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VisAttributes.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VisAttributes.cxx index e1df8c9ac21df05d3728942d5bdf0b4f07bbc816..82825c71806f9cddaef0e065a30086fffae4e270 100644 --- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VisAttributes.cxx +++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VisAttributes.cxx @@ -160,23 +160,7 @@ DetVisAttributes::DetVisAttributes() { material->specularColor.setValue(.915152, .915152, .915152); material->shininess.setValue(0.642424); add("Veto",material); - } - - { - SoMaterial *material = new SoMaterial; - material->ambientColor.setValue(0, .157811, .187004); - material->diffuseColor.setValue(.40, .631244, .748016); - material->specularColor.setValue(.915152, .915152, .915152); - material->shininess.setValue(0.642424); add("Trigger",material); - } - - { - SoMaterial *material = new SoMaterial; - material->ambientColor.setValue(0, .157811, .187004); - material->diffuseColor.setValue(1, .8, .7); - material->specularColor.setValue(.915152, .915152, .915152); - material->shininess.setValue(0.642424); add("Preshower",material); } @@ -283,14 +267,14 @@ DetVisAttributes::DetVisAttributes() { material->shininess.setValue(1.0); add("SCT",material); } - { + { SoMaterial *material = new SoMaterial; - material->ambientColor.setValue(0, .157811, .187004); - material->diffuseColor.setValue(1, .5, .5); + material->ambientColor.setValue(23, 170, 62); + material->diffuseColor.setValue(24, 145, 175); material->specularColor.setValue(.915152, .915152, .915152); - material->shininess.setValue(0.3); + material->shininess.setValue(0.5); add("Dipole",material); - } + } // { // SoMaterial *material = new SoMaterial; @@ -507,6 +491,15 @@ MatVisAttributes::MatVisAttributes() { add("Stainless",m); add("_dd_Materials_Ecal_EcalSteel",m); } + { + SoMaterial *material = new SoMaterial; + material->ambientColor.setValue(0.09, 0.67, 0.24); + material->diffuseColor.setValue(0.1, 0.57, 0.69); + material->specularColor.setValue(.915152, .915152, .915152); + material->shininess.setValue(0.4); + add("Nd2Fe14B",material); + } + { // Liquid Argon SoMaterial *m = new SoMaterial; diff --git a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/AscObj_TSOS.cxx b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/AscObj_TSOS.cxx index 7e96708b11b6bad45ecf793de1683e2ec828cebc..2c767c0c206fc6acd18301e993a075c1252fa9ff 100644 --- a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/AscObj_TSOS.cxx +++ b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/AscObj_TSOS.cxx @@ -196,8 +196,8 @@ const Trk::MeasurementBase * AscObj_TSOS::measurement() const SoTranslation* AscObj_TSOS::getZTranslationTube( const Trk::Surface * theSurface, const double& maxTrans ) const { - const Amg::Vector3D* origo = theSurface->localToGlobal(Amg::Vector2D(0,0)); - const Amg::Vector3D* unitz = theSurface->localToGlobal(Amg::Vector2D(0,1)); + const Amg::Vector3D origo = theSurface->localToGlobal(Amg::Vector2D(0,0)); + const Amg::Vector3D unitz = theSurface->localToGlobal(Amg::Vector2D(0,1)); std::vector< Amg::Vector3D > * points = trackHandle()->hackGetPointsPropagated();//FIXME @@ -208,7 +208,7 @@ SoTranslation* AscObj_TSOS::getZTranslationTube( const Trk::Surface * theSurface for ( size_t i = 0; i<points->size(); i++) { double s; - double dist = VP1LinAlgUtils::distPointLine2( (*points)[i], *origo, *unitz, s ); + double dist = VP1LinAlgUtils::distPointLine2( (*points)[i], origo, unitz, s ); if (dist < min) { min = dist; @@ -226,16 +226,16 @@ SoTranslation* AscObj_TSOS::getZTranslationTube( const Trk::Surface * theSurface double sp,tp,sm,tm; if (imin+1 < points->size() && imin >= 1) { - VP1LinAlgUtils::distLineLineParam((*points).at(imin),(*points).at(imin+1),*origo,*unitz,tp,sp); - VP1LinAlgUtils::distLineLineParam((*points).at(imin-1),(*points).at(imin),*origo,*unitz,tm,sm); + VP1LinAlgUtils::distLineLineParam((*points).at(imin),(*points).at(imin+1),origo,unitz,tp,sp); + VP1LinAlgUtils::distLineLineParam((*points).at(imin-1),(*points).at(imin),origo,unitz,tm,sm); smin = fabs(tm - 0.5) < fabs(tp - 0.5) ? sm : sp; } else if (imin+1 >= points->size() && imin >= 1 ) { - VP1LinAlgUtils::distLineLineParam((*points).at(imin-1),(*points).at(imin),*origo,*unitz,tm,sm); + VP1LinAlgUtils::distLineLineParam((*points).at(imin-1),(*points).at(imin),origo,unitz,tm,sm); smin = sm; } else { - VP1LinAlgUtils::distLineLineParam((*points).at(imin),(*points).at(imin+1),*origo,*unitz,tp,sp); + VP1LinAlgUtils::distLineLineParam((*points).at(imin),(*points).at(imin+1),origo,unitz,tp,sp); smin = sp; } } else { @@ -389,13 +389,12 @@ void AscObj_TSOS::addErrors(const Trk::Surface& theSurface, const AmgSymMatrix(5 // Shift from Surface centre to correct position if (applyLocalTrans) { SoTranslation * theTransform = new SoTranslation; - const Amg::Vector2D* locPosTmp = surface()->globalToLocal(p1); + std::optional<Amg::Vector2D> locPosTmp = surface()->globalToLocal(p1); if (locPosTmp) { theTransform->translation.setValue(locPosTmp->x(),locPosTmp->y(),0.0); // std::cout<<"applyLocalTrans & Offset=("<<locPosTmp->x()<<","<<locPosTmp->y()<<std::endl; errSimple->addChild(theTransform); errDetailed->addChild(theTransform); - delete locPosTmp; } else { VP1Msg::message("AscObj_TSOS::addErrors - failed to get tmp position"); } diff --git a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/SimHitHandle_TrackRecord.cxx b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/SimHitHandle_TrackRecord.cxx index 816c08f3ebdc3c3571a0cc549a16d921c6f5ce49..4cc6d5e0f292ed8e122f8ae20dc1facf91279bcf 100644 --- a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/SimHitHandle_TrackRecord.cxx +++ b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/SimHitHandle_TrackRecord.cxx @@ -43,7 +43,7 @@ Trk::TrackParameters * SimHitHandle_TrackRecord::createTrackParameters() const Amg::Transform3D transf = Amg::CLHEPTranslate3DToEigen(HepGeom::Translate3D(m_trkrecord->GetPosition().x(),m_trkrecord->GetPosition().y(),m_trkrecord->GetPosition().z())); //Surface: const Trk::PlaneSurface * surf - = new Trk::PlaneSurface( &transf ); + = new Trk::PlaneSurface( transf ); //Fixme: surface and transform ever DELETED?? //Fixme: Don't do this in every simhit!!: diff --git a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackHandle_TruthTrack.cxx b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackHandle_TruthTrack.cxx index 1d003ab384abc7102e77de3121bc77c906614079..d800a49d65814f78553a2a77622fae7cebf8cbf3 100644 --- a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackHandle_TruthTrack.cxx +++ b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackHandle_TruthTrack.cxx @@ -80,7 +80,7 @@ public: Amg::Vector3D pos(v->point3d().x(),v->point3d().y(),v->point3d().z()); Amg::Translation3D amgtranslation(pos.x(),pos.y(),pos.z()); - Amg::Transform3D* amgTransf = new Amg::Transform3D(amgtranslation * Amg::RotationMatrix3D::Identity()); + Amg::Transform3D amgTransf { amgtranslation * Amg::RotationMatrix3D::Identity() }; return new Trk::AtaPlane(pos,mom,charge, *(new Trk::PlaneSurface(amgTransf))); } @@ -116,7 +116,10 @@ public: } Trk::TrackInfo ti(Trk::TrackInfo::Unknown,theclass->extrapolationParticleHypothesis()); - trkTrack = new Trk::Track(ti,trackStateOnSurfaces/*track assumes ownership*/,0/*fitquality*/); + std::unique_ptr<DataVector<const Trk::TrackStateOnSurface>> sink(trackStateOnSurfaces); + trkTrack = new Trk::Track(ti, + std::move(*sink), + nullptr /*fitquality*/); // if (VP1Msg::verbose()) // VP1Msg::messageVerbose("TrackHandle_TruthTrack created track with " diff --git a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackPropagationHelper.cxx b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackPropagationHelper.cxx index 60a4efb144bf327cb35d9e27890a5a6513256a6b..f5545c729ec9007f9f2823ec2f5e968ceac35b17 100644 --- a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackPropagationHelper.cxx +++ b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackPropagationHelper.cxx @@ -367,7 +367,7 @@ const Trk::TrackParameters * TrackPropagationHelper::Imp::extrapolateToNewPar( T Trk::CurvilinearUVT uvt(prevpars->momentum().unit()); - Amg::Transform3D* t = new Amg::Transform3D(uvt.curvU(),uvt.curvV(),uvt.curvT(), prevpars->position()+(prevpars->momentum().unit()*dist)); + Amg::Transform3D t {uvt.curvU(),uvt.curvV(),uvt.curvT(), prevpars->position()+(prevpars->momentum().unit()*dist)}; Trk::PlaneSurface surf(t); diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/CMakeLists.txt b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..aadf22c61fbe3a4e823241d06a5f537dee4f857f --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/CMakeLists.txt @@ -0,0 +1,24 @@ +################################################################################ +# Package: VTI12WaveformSystems +################################################################################ + +# Declare the package name: +atlas_subdir( VTI12WaveformSystems ) + +# External dependencies: +find_package( Coin3D ) +find_package( Qt5 COMPONENTS Core Gui Widgets Charts ) + +# Generate UI files automatically: +set( CMAKE_AUTOUIC TRUE ) +# Generate MOC files automatically: +set( CMAKE_AUTOMOC TRUE ) + +# Component(s) in the package: +atlas_add_library( VTI12WaveformSystems VTI12WaveformSystems/*.h src/*.cxx + PUBLIC_HEADERS VTI12WaveformSystems + INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS} ${QT5_INCLUDE_DIRS} + LINK_LIBRARIES ${COIN3D_LIBRARIES} GeoPrimitives VP1Base VTI12Utils WaveRawEvent xAODFaserWaveform + Qt5::Core Qt5::Gui Qt5::Charts + PRIVATE_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} + PRIVATE_LINK_LIBRARIES GaudiKernel VP1HEPVis ) diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformHitSystem.h b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformHitSystem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa0831b3f579c8c052fd3d38639da1a491888d7c --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformHitSystem.h @@ -0,0 +1,59 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef VP1WAVEFORMHITSYSTEM_H +#define VP1WAVEFORMHITSYSTEM_H + +///////////////////////////////////////////////////////////////////////// +// // +// Header file for class VP1WaveformHitSystem // +// // +// Author: Dave Casper <dcasper@uci.edu> // +// // +// Initial version: August 2021 // +// // +///////////////////////////////////////////////////////////////////////// + +#include "VP1Base/IVP12DSystemSimple.h" +#include <QColor>//Fixme obsolete + +class VP1WaveformHitSystem : public IVP12DSystemSimple { + + Q_OBJECT + +public: + + /////////////////// + // Constructor // + /////////////////// + + VP1WaveformHitSystem(); + + ////////////////////////////////////////// + // Reimplementations from base class: // + ////////////////////////////////////////// + + virtual ~VP1WaveformHitSystem(); + void buildPermanentItemCollection(StoreGateSvc* detstore, VP1GraphicsItemCollection *root); + void buildEventItemCollection(StoreGateSvc*, VP1GraphicsItemCollection *root); + void systemuncreate(); + QWidget * buildController(); + QByteArray saveState(); + void restoreFromState(QByteArray ba); + +public slots: + + void updateVetoElements(bool); + void updateTriggerElements(bool); + void updatePreshowerElements(bool); + void updateCalorimeterElements(bool); + // void updateClockElements(bool); + void updateTestElements(bool); + +private: + class Imp; + Imp * m_d; +}; + +#endif diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h new file mode 100644 index 0000000000000000000000000000000000000000..d17e3b60f5e58fc5709064be6c77215c21d7a5b4 --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h @@ -0,0 +1,59 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef VP1WAVEFORMSYSTEM_H +#define VP1WAVEFORMSYSTEM_H + +///////////////////////////////////////////////////////////////////////// +// // +// Header file for class VP1WaveformSystem // +// // +// Author: Dave Casper <dcasper@uci.edu> // +// // +// Initial version: August 2021 // +// // +///////////////////////////////////////////////////////////////////////// + +#include "VP1Base/IVP12DSystemSimple.h" +#include <QColor>//Fixme obsolete + +class VP1WaveformSystem : public IVP12DSystemSimple { + + Q_OBJECT + +public: + + /////////////////// + // Constructor // + /////////////////// + + VP1WaveformSystem(); + + ////////////////////////////////////////// + // Reimplementations from base class: // + ////////////////////////////////////////// + + virtual ~VP1WaveformSystem(); + void buildPermanentItemCollection(StoreGateSvc* detstore, VP1GraphicsItemCollection *root); + void buildEventItemCollection(StoreGateSvc*, VP1GraphicsItemCollection *root); + void systemuncreate(); + QWidget * buildController(); + QByteArray saveState(); + void restoreFromState(QByteArray ba); + +public slots: + + void updateVetoElements(bool); + void updateTriggerElements(bool); + void updatePreshowerElements(bool); + void updateCalorimeterElements(bool); + void updateClockElements(bool); + void updateTestElements(bool); + +private: + class Imp; + Imp * m_d; +}; + +#endif diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h new file mode 100644 index 0000000000000000000000000000000000000000..ebb3c4c34ca693d245a300b2f47813ce738b4597 --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h @@ -0,0 +1,77 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + + +//////////////////////////////////////////////////////////////// +// // +// Header file for class WaveformSysController // +// // +// Description: Waveform system controller. // +// // +// Author: Dave Casper (dcasper@uci.edu) // +// Initial version: August 2021 // +// // +//////////////////////////////////////////////////////////////// + +#ifndef WAVEFORMSYSCONTROLLER_H +#define WAVEFORMSYSCONTROLLER_H + +#include "VP1Base/VP1Controller.h" +#include <Inventor/C/errors/debugerror.h> +#include <Inventor/SbColor4f.h> +class SoMaterial; + +class WaveformSysController : public VP1Controller { + + Q_OBJECT + +public: + + WaveformSysController(IVP1System * sys); + virtual ~WaveformSysController(); + + void actualRestoreSettings(VP1Deserialise&); + int currentSettingsVersion() const; + void actualSaveSettings(VP1Serialise&) const; + + /////////////////////////////////// + // Access Methods for settings // + /////////////////////////////////// + + bool vetoEnabled() const; + bool triggerEnabled() const; + bool preshowerEnabled() const; + bool calorimeterEnabled() const; + bool clockEnabled() const; + bool testEnabled() const; + + + /////////////////////////////////////// + // Signals for changes in settings // + /////////////////////////////////////// +signals: + void vetoEnabledChanged(bool); + void triggerEnabledChanged(bool); + void preshowerEnabledChanged(bool); + void calorimeterEnabledChanged(bool); + void clockEnabledChanged(bool); + void testEnabledChanged(bool); + +private: + + class Imp; + Imp * m_d; + +private slots: + void possibleChange_vetoEnabled(); + void possibleChange_triggerEnabled(); + void possibleChange_preshowerEnabled(); + void possibleChange_calorimeterEnabled(); + void possibleChange_clockEnabled(); + void possibleChange_testEnabled(); + +}; + + +#endif diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformHitSystem.cxx b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformHitSystem.cxx new file mode 100644 index 0000000000000000000000000000000000000000..7d0c07c942414273964ffed851b27b745cca2756 --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformHitSystem.cxx @@ -0,0 +1,402 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + + +///////////////////////////////////////////////////////////////////////// +// // +// Implementation of class VP1WaveformHitSystem // +// // +// Author: Dave Casper <dcasper@uci.edu> // +// // +// Initial version: August 2021 // +// // +///////////////////////////////////////////////////////////////////////// + +#include "VTI12WaveformSystems/VP1WaveformHitSystem.h" +#include "VTI12WaveformSystems/WaveformSysController.h" + +#include "VP1Base/VP1GraphicsItemCollection.h" +#include "VP1Base/VP1Serialise.h" +#include "VP1Base/VP1Deserialise.h" +#include "VP1Base/VP1Msg.h" + +#include "StoreGate/StoreGateSvc.h" + +#include "xAODFaserWaveform/WaveformHitContainer.h" +#include "xAODFaserWaveform/WaveformHit.h" + +#include <Inventor/nodes/SoSeparator.h> +#include <Inventor/nodes/SoPickStyle.h> +#include <Inventor/nodes/SoComplexity.h> +#include <Inventor/SbVec3f.h> + +#include <QtCharts> +#include <QtWidgets> +#include <QGraphicsEllipseItem> + +using namespace QtCharts; + +#include <map> + +class VP1WaveformHitSystem::Imp { +public: + Imp(VP1WaveformHitSystem*tc) : theclass(tc), + controller(0) {} + VP1WaveformHitSystem *theclass; + WaveformSysController * controller; + std::vector<QChart*> vetoCharts; + std::vector<QChart*> triggerCharts; + std::vector<QChart*> preshowerCharts; + std::vector<QChart*> calorimeterCharts; + // std::vector<QChart*> clockCharts; + std::vector<QChart*> testCharts; + std::vector<QChart*> visibleCharts; + void fillFit(const std::vector<float>& time, std::vector<float>& fit, float peak, float mean, float width, float alpha, float n); + QChart* createChart(const std::vector<float>& time, const std::vector<float>& data, const std::vector<float>& spline, QGraphicsItem* parent = nullptr, const QString& title = "Default title"); + void createCharts(StoreGateSvc* sg, VP1GraphicsItemCollection* items, bool visible, std::vector<QChart*>& list, const std::string& collectionName); + void getVisible(const std::vector<QChart*>& list); + void getVisible(); + void layoutCharts(); + +}; + +//_____________________________________________________________________________________ +VP1WaveformHitSystem::VP1WaveformHitSystem() + : IVP12DSystemSimple("Waveform Hits", + "System displaying reconstructed waveform data", + "dcasper@uci.edu"), m_d(new Imp(this)) +{ +} + + +//_____________________________________________________________________________________ +VP1WaveformHitSystem::~VP1WaveformHitSystem() +{ + delete m_d; +} + +//_____________________________________________________________________________________ +QWidget * VP1WaveformHitSystem::buildController() +{ + m_d->controller = new WaveformSysController(this); + + connect(m_d->controller,SIGNAL(vetoEnabledChanged(bool)),this,SLOT(updateVetoElements(bool))); + connect(m_d->controller,SIGNAL(triggerEnabledChanged(bool)),this,SLOT(updateTriggerElements(bool))); + connect(m_d->controller,SIGNAL(preshowerEnabledChanged(bool)),this,SLOT(updatePreshowerElements(bool))); + connect(m_d->controller,SIGNAL(calorimeterEnabledChanged(bool)),this,SLOT(updateCalorimeterElements(bool))); + // connect(m_d->controller,SIGNAL(clockEnabledChanged(bool)),this,SLOT(updateClockElements(bool))); + connect(m_d->controller,SIGNAL(testEnabledChanged(bool)),this,SLOT(updateTestElements(bool))); + + return m_d->controller; +} + +//_____________________________________________________________________________________ +void VP1WaveformHitSystem::buildEventItemCollection(StoreGateSvc* sg, VP1GraphicsItemCollection* root) +{ + if(VP1Msg::verbose() || true){ + messageVerbose("buildEventItemCollection"); + } + + m_d->vetoCharts.clear(); + m_d->triggerCharts.clear(); + m_d->preshowerCharts.clear(); + m_d->calorimeterCharts.clear(); + // m_d->clockCharts.clear(); + m_d->testCharts.clear(); +// m_d->nCharts = 0; + + m_d->createCharts(sg, root, m_d->controller->vetoEnabled(), m_d->vetoCharts, "VetoWaveformHits"); + m_d->createCharts(sg, root, m_d->controller->triggerEnabled(), m_d->triggerCharts, "TriggerWaveformHits"); + m_d->createCharts(sg, root, m_d->controller->preshowerEnabled(), m_d->preshowerCharts, "PreshowerWaveformHits"); + m_d->createCharts(sg, root, m_d->controller->calorimeterEnabled(), m_d->calorimeterCharts, "CaloWaveformHits"); + // m_d->createCharts(sg, root, m_d->controller->clockEnabled(), m_d->clockCharts, "ClockWaveforms"); + m_d->createCharts(sg, root, m_d->controller->testEnabled(), m_d->testCharts, "TestWaveformHits"); + + m_d->layoutCharts(); +} + +void VP1WaveformHitSystem::Imp::createCharts(StoreGateSvc* sg, + VP1GraphicsItemCollection* items, + bool visible, + std::vector<QChart*>& list, + const std::string& collectionName) +{ + const xAOD::WaveformHitContainer* p_container {nullptr}; + if(sg->retrieve(p_container, collectionName)==StatusCode::SUCCESS) + { + for(xAOD::WaveformHitContainer::const_iterator i_wf=p_container->begin(); i_wf!=p_container->end(); ++i_wf) + { + const xAOD::WaveformHit* hit = (*i_wf); + if (hit->time_vector().size() > 0 && hit->wave_vector().size() == hit->time_vector().size()) + { + QString title { collectionName.c_str() }; + title.append(" ").append(QString::number(hit->channel())); + + std::vector<float> cb; + if (!hit->status_bit(xAOD::WaveformStatus::CBFIT_FAILED) && hit->width() > 0 && hit->alpha() != 0 && hit->nval() != 0) + { + fillFit(hit->time_vector(), cb, hit->peak(), hit->mean(), hit->width(), hit->alpha(), hit->nval()); + } + QChart* chart = createChart((*i_wf)->time_vector(), (*i_wf)->wave_vector(), cb, nullptr, title); + + QFont fitFont; + fitFont.setPixelSize(18); + + QGraphicsTextItem* meanText = new QGraphicsTextItem("Mean: " + QString::number(hit->mean(),'f',1), chart); + meanText->setFont(fitFont); + meanText->setDefaultTextColor(QRgb(0xb157fd)); + meanText->setPos(290, 75); + + QGraphicsTextItem* peakText = new QGraphicsTextItem("Peak: " + QString::number(hit->peak(),'f',1), chart); + peakText->setFont(fitFont); + peakText->setDefaultTextColor(QRgb(0xb157fd)); + peakText->setPos(290, 100); + + QGraphicsTextItem* intText = new QGraphicsTextItem("Integral: " + QString::number(hit->integral(),'f',1), chart); + intText->setFont(fitFont); + intText->setDefaultTextColor(QRgb(0xb157fd)); + intText->setPos(290, 125); + + + chart->setVisible(visible); + list.push_back(chart); + items->addItem(chart, true, true); + } + } + } + else + { + QString errorMsg {"Unable to retrieve "}; + theclass->message(errorMsg.append(collectionName.c_str())); + } +} + +void VP1WaveformHitSystem::Imp::fillFit(const std::vector<float>& time, + std::vector<float>& fit, + float peak, + float mean, + float width, + float alpha, + float nval) +{ + for (size_t i = 0; i < time.size(); i++) + { + float z = (time[i] - mean)/width; + if (alpha < 0) z = -z; + if (z > -fabs(alpha)) + { + fit.push_back(peak * std::exp(-z*z/2)); + } + else + { + fit.push_back(peak * std::pow((nval/fabs(alpha))/(((nval/fabs(alpha)-fabs(alpha)) - z)), nval) * std::exp(-alpha*alpha/2)); + } + } +} + +QChart* VP1WaveformHitSystem::Imp::createChart(const std::vector<float>& times, + const std::vector<float>& data, + const std::vector<float>& spline, + QGraphicsItem* parent, const QString& title) +{ + + QChart* chart = new QChart(parent); + QLineSeries *series = new QLineSeries(); + // unsigned int maxEntry = 0; + for (size_t i = 0; i < data.size(); i++) + { + // maxEntry = std::max(maxEntry, data[i]); + series->append(times[i], data[i]); + } + + QPen pen(QRgb(0xfdb157)); + pen.setWidth(1); + series->setPen(pen); + chart->addSeries(series); + + if (spline.size() == times.size()) + { + QSplineSeries* fit = new QSplineSeries(); + for (size_t i = 0; i < spline.size(); i++) + { + fit->append(times[i], spline[i]); + } + QPen fitPen(QRgb(0xb157fd)); + fitPen.setWidth(2); + fit->setPen(fitPen); + chart->addSeries(fit); + } + + chart->legend()->hide(); + + chart->createDefaultAxes(); + + QFont font; + font.setPixelSize(24); + chart->setTitleFont(font); + chart->setTitleBrush(QBrush(Qt::blue)); + chart->setTitle(title); + // QValueAxis* axisX = new QValueAxis(); + QAbstractAxis* axisX = chart->axes(Qt::Horizontal)[0]; + QFont labelsFont; + labelsFont.setPixelSize(8); + QPen axisPen(QRgb(0xd18952)); + axisPen.setWidth(2); + // axisX->setRange(times[0]-2.0, times[times.size()-1]+2.0); + // axisX->setTickCount(13); + axisX->setLabelsFont(labelsFont); + axisX->setLinePen(axisPen); + // chart->addAxis(axisX, Qt::AlignBottom); + // series->attachAxis(axisX); + // QValueAxis* axisY = new QValueAxis(); + QAbstractAxis* axisY = chart->axes(Qt::Vertical)[0]; + // axisY->setRange(-256, 0x4000); + // axisY->setTickCount(17); + axisY->setLabelsFont(labelsFont); + axisY->setLinePen(axisPen); + // chart->addAxis(axisY, Qt::AlignLeft); + // series->attachAxis(axisY); + + return chart; +} + +void VP1WaveformHitSystem::Imp::getVisible() +{ + visibleCharts.clear(); + getVisible(vetoCharts); + getVisible(triggerCharts); + getVisible(preshowerCharts); + getVisible(calorimeterCharts); + // getVisible(clockCharts); + getVisible(testCharts); +} + +void VP1WaveformHitSystem::Imp::getVisible(const std::vector<QChart*>& list) +{ + for (QChart* c : list) + { + if (c != nullptr && c->isVisible()) + { + visibleCharts.push_back(c); + } + } +} + +void VP1WaveformHitSystem::Imp::layoutCharts() +{ + getVisible(); + unsigned int nVisible = visibleCharts.size(); + if (nVisible == 0) return; + // unsigned int nRows = (nVisible - 1)/5 + 1; + for (unsigned int i = 0; i < nVisible; i++) + { + qreal x = i%6 * 550.0; + // qreal y = ( (i/5) - nRows ) * 550.0; + qreal y = ( i/6 ) * 550.0 + 550.0*2; + visibleCharts[i]->setGeometry(x, y, 500.0, 500.0); + } +} + +//_____________________________________________________________________________________ +void VP1WaveformHitSystem::buildPermanentItemCollection(StoreGateSvc* /*detstore*/, VP1GraphicsItemCollection* /*root*/) +{ + if(VP1Msg::verbose() || true){ + messageVerbose("buildPermanentItemCollection"); + } + +} + +//_____________________________________________________________________________________ +void VP1WaveformHitSystem::systemuncreate() +{ + m_d->controller=0; +} + + +//_____________________________________________________________________________________ +QByteArray VP1WaveformHitSystem::saveState() { + + if (m_d->controller == nullptr) buildController(); + + VP1Serialise serialise(0/*version*/,this); + serialise.save(IVP12DSystemSimple::saveState()); + serialise.save(m_d->controller->saveSettings()); + serialise.disableUnsavedChecks();//We do the testing in the controller + return serialise.result(); +} + +//_____________________________________________________________________________________ +void VP1WaveformHitSystem::restoreFromState(QByteArray ba) { + + VP1Deserialise state(ba,this); + if (state.version() != 0) { + message("Warning: State data in .vp1 file is in wrong format - ignoring!"); + state.disableUnrestoredChecks();//We do the testing in the controller + return; + } +// if (state.version() > 0 &&state.version()<=3) { +// message("Warning: State data in .vp1 file is in obsolete format - ignoring!"); +// state.disableUnrestoredChecks();//We do the testing in the controller +// return; +// } + if (m_d->controller == nullptr) buildController(); + + IVP12DSystemSimple::restoreFromState(state.restoreByteArray()); + m_d->controller->restoreSettings(state.restoreByteArray()); + state.disableUnrestoredChecks();//We do the testing in the controller +} + +void VP1WaveformHitSystem::updateVetoElements(bool enabled) +{ + for (QChart* c : m_d->vetoCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +void VP1WaveformHitSystem::updateTriggerElements(bool enabled) +{ + for (QChart* c : m_d->triggerCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +void VP1WaveformHitSystem::updatePreshowerElements(bool enabled) +{ + for (QChart* c : m_d->preshowerCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +void VP1WaveformHitSystem::updateCalorimeterElements(bool enabled) +{ + for (QChart* c : m_d->calorimeterCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +// void VP1WaveformHitSystem::updateClockElements(bool enabled) +// { +// for (QChart* c : m_d->clockCharts) +// { +// c->setVisible(enabled); +// } +// m_d->layoutCharts(); +// } + +void VP1WaveformHitSystem::updateTestElements(bool enabled) +{ + for (QChart* c : m_d->testCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx new file mode 100644 index 0000000000000000000000000000000000000000..ffe6bd00acecfd6f3fe611c01b24a1f2ea6afd1a --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx @@ -0,0 +1,332 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + + +///////////////////////////////////////////////////////////////////////// +// // +// Implementation of class VP1WaveformSystem // +// // +// Author: Dave Casper <dcasper@uci.edu> // +// // +// Initial version: August 2021 // +// // +///////////////////////////////////////////////////////////////////////// + +#include "VTI12WaveformSystems/VP1WaveformSystem.h" +#include "VTI12WaveformSystems/WaveformSysController.h" + +#include "VP1Base/VP1GraphicsItemCollection.h" +#include "VP1Base/VP1Serialise.h" +#include "VP1Base/VP1Deserialise.h" +#include "VP1Base/VP1Msg.h" + +#include "StoreGate/StoreGateSvc.h" + +#include "WaveRawEvent/RawWaveformContainer.h" + +#include <Inventor/nodes/SoSeparator.h> +#include <Inventor/nodes/SoPickStyle.h> +#include <Inventor/nodes/SoComplexity.h> +#include <Inventor/SbVec3f.h> + +#include <QtCharts> +#include <QtWidgets> +#include <QGraphicsEllipseItem> + +using namespace QtCharts; + +#include <map> + +class VP1WaveformSystem::Imp { +public: + Imp(VP1WaveformSystem*tc) : theclass(tc), + controller(0) {} + VP1WaveformSystem *theclass; + WaveformSysController * controller; + std::vector<QChart*> vetoCharts; + std::vector<QChart*> triggerCharts; + std::vector<QChart*> preshowerCharts; + std::vector<QChart*> calorimeterCharts; + std::vector<QChart*> clockCharts; + std::vector<QChart*> testCharts; + std::vector<QChart*> visibleCharts; + QChart* createChart(const std::vector<unsigned int>& data, QGraphicsItem* parent = nullptr, const QString& title = "Default title"); + void createCharts(StoreGateSvc* sg, VP1GraphicsItemCollection* items, bool visible, std::vector<QChart*>& list, const std::string& collectionName); + void getVisible(const std::vector<QChart*>& list); + void getVisible(); + void layoutCharts(); + +}; + +//_____________________________________________________________________________________ +VP1WaveformSystem::VP1WaveformSystem() + : IVP12DSystemSimple("Raw Waveforms", + "System displaying raw waveform data", + "dcasper@uci.edu"), m_d(new Imp(this)) +{ +} + + +//_____________________________________________________________________________________ +VP1WaveformSystem::~VP1WaveformSystem() +{ + delete m_d; +} + +//_____________________________________________________________________________________ +QWidget * VP1WaveformSystem::buildController() +{ + m_d->controller = new WaveformSysController(this); + + connect(m_d->controller,SIGNAL(vetoEnabledChanged(bool)),this,SLOT(updateVetoElements(bool))); + connect(m_d->controller,SIGNAL(triggerEnabledChanged(bool)),this,SLOT(updateTriggerElements(bool))); + connect(m_d->controller,SIGNAL(preshowerEnabledChanged(bool)),this,SLOT(updatePreshowerElements(bool))); + connect(m_d->controller,SIGNAL(calorimeterEnabledChanged(bool)),this,SLOT(updateCalorimeterElements(bool))); + connect(m_d->controller,SIGNAL(clockEnabledChanged(bool)),this,SLOT(updateClockElements(bool))); + connect(m_d->controller,SIGNAL(testEnabledChanged(bool)),this,SLOT(updateTestElements(bool))); + + return m_d->controller; +} + +//_____________________________________________________________________________________ +void VP1WaveformSystem::buildEventItemCollection(StoreGateSvc* sg, VP1GraphicsItemCollection* root) +{ + if(VP1Msg::verbose() || true){ + messageVerbose("buildEventItemCollection"); + } + + m_d->vetoCharts.clear(); + m_d->triggerCharts.clear(); + m_d->preshowerCharts.clear(); + m_d->calorimeterCharts.clear(); + m_d->clockCharts.clear(); + m_d->testCharts.clear(); +// m_d->nCharts = 0; + + m_d->createCharts(sg, root, m_d->controller->vetoEnabled(), m_d->vetoCharts, "VetoWaveforms"); + m_d->createCharts(sg, root, m_d->controller->triggerEnabled(), m_d->triggerCharts, "TriggerWaveforms"); + m_d->createCharts(sg, root, m_d->controller->preshowerEnabled(), m_d->preshowerCharts, "PreshowerWaveforms"); + m_d->createCharts(sg, root, m_d->controller->calorimeterEnabled(), m_d->calorimeterCharts, "CaloWaveforms"); + m_d->createCharts(sg, root, m_d->controller->clockEnabled(), m_d->clockCharts, "ClockWaveforms"); + m_d->createCharts(sg, root, m_d->controller->testEnabled(), m_d->testCharts, "TestWaveforms"); + + m_d->layoutCharts(); +} + +void VP1WaveformSystem::Imp::createCharts(StoreGateSvc* sg, + VP1GraphicsItemCollection* items, + bool visible, + std::vector<QChart*>& list, + const std::string& collectionName) +{ + typedef DataVector<RawWaveform>::const_iterator RawWaveformConstIterator; + + const RawWaveformContainer* p_container {nullptr}; + if(sg->retrieve(p_container, collectionName)==StatusCode::SUCCESS) + { + for(RawWaveformConstIterator i_wf=p_container->begin(); i_wf!=p_container->end(); ++i_wf) + { + if ((*i_wf)->n_samples() > 0) + { + QString title { collectionName.c_str() }; + title.append(" ").append(QString::number((*i_wf)->channel())); + QChart* chart = createChart((*i_wf)->adc_counts(), nullptr, title); + chart->setVisible(visible); + list.push_back(chart); + items->addItem(chart, true, true); + } + } + } + else + { + QString errorMsg {"Unable to retrieve "}; + theclass->message(errorMsg.append(collectionName.c_str())); + } +} + +QChart* VP1WaveformSystem::Imp::createChart(const std::vector<unsigned int>& data, QGraphicsItem* parent, const QString& title) +{ + + QChart* chart = new QChart(parent); + QLineSeries *series = new QLineSeries(); + unsigned int maxEntry = 0; + for (size_t i = 0; i < data.size(); i++) + { + maxEntry = std::max(maxEntry, data[i]); + series->append(i, data[i]); + } + + QPen pen(QRgb(0xfdb157)); + pen.setWidth(1); + series->setPen(pen); + chart->legend()->hide(); + chart->addSeries(series); + + QFont font; + font.setPixelSize(24); + chart->setTitleFont(font); + chart->setTitleBrush(QBrush(Qt::blue)); + chart->setTitle(title); + QValueAxis* axisX = new QValueAxis(); + QFont labelsFont; + labelsFont.setPixelSize(8); + QPen axisPen(QRgb(0xd18952)); + axisPen.setWidth(2); + axisX->setRange(0, data.size()); + axisX->setTickCount(13); + axisX->setLabelsFont(labelsFont); + axisX->setLinePen(axisPen); + chart->addAxis(axisX, Qt::AlignBottom); + series->attachAxis(axisX); + QValueAxis* axisY = new QValueAxis(); + axisY->setRange(0, 0x4000); + axisY->setTickCount(9); + axisY->setLabelsFont(labelsFont); + axisY->setLinePen(axisPen); + chart->addAxis(axisY, Qt::AlignLeft); + series->attachAxis(axisY); + + return chart; +} + +void VP1WaveformSystem::Imp::getVisible() +{ + visibleCharts.clear(); + getVisible(vetoCharts); + getVisible(triggerCharts); + getVisible(preshowerCharts); + getVisible(calorimeterCharts); + getVisible(clockCharts); + getVisible(testCharts); +} + +void VP1WaveformSystem::Imp::getVisible(const std::vector<QChart*>& list) +{ + for (QChart* c : list) + { + if (c != nullptr && c->isVisible()) + { + visibleCharts.push_back(c); + } + } +} + +void VP1WaveformSystem::Imp::layoutCharts() +{ + getVisible(); + unsigned int nVisible = visibleCharts.size(); + std::cout << "Laying out " << nVisible << " raw hits" << std::endl; + if (nVisible == 0) return; + // unsigned int nRows = (nVisible - 1)/5 + 1; + for (unsigned int i = 0; i < nVisible; i++) + { + qreal x = i%6 * 550.0; + // qreal y = ( (i/5) - nRows ) * 550.0; + qreal y = ( i/6 ) * 550.0; + visibleCharts[i]->setGeometry(x, y, 500.0, 500.0); + } +} + +//_____________________________________________________________________________________ +void VP1WaveformSystem::buildPermanentItemCollection(StoreGateSvc* /*detstore*/, VP1GraphicsItemCollection* /*root*/) +{ + if(VP1Msg::verbose() || true){ + messageVerbose("buildPermanentItemCollection"); + } + +} + +//_____________________________________________________________________________________ +void VP1WaveformSystem::systemuncreate() +{ + m_d->controller=0; +} + + +//_____________________________________________________________________________________ +QByteArray VP1WaveformSystem::saveState() { + + if (m_d->controller == nullptr) buildController(); + + VP1Serialise serialise(0/*version*/,this); + serialise.save(IVP12DSystemSimple::saveState()); + serialise.save(m_d->controller->saveSettings()); + serialise.disableUnsavedChecks();//We do the testing in the controller + return serialise.result(); +} + +//_____________________________________________________________________________________ +void VP1WaveformSystem::restoreFromState(QByteArray ba) { + + VP1Deserialise state(ba,this); + if (state.version() != 0) { + message("Warning: State data in .vp1 file is in wrong format - ignoring!"); + state.disableUnrestoredChecks();//We do the testing in the controller + return; + } +// if (state.version() > 0 &&state.version()<=3) { +// message("Warning: State data in .vp1 file is in obsolete format - ignoring!"); +// state.disableUnrestoredChecks();//We do the testing in the controller +// return; +// } + if (m_d->controller == nullptr) buildController(); + + IVP12DSystemSimple::restoreFromState(state.restoreByteArray()); + m_d->controller->restoreSettings(state.restoreByteArray()); + state.disableUnrestoredChecks();//We do the testing in the controller +} + +void VP1WaveformSystem::updateVetoElements(bool enabled) +{ + for (QChart* c : m_d->vetoCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +void VP1WaveformSystem::updateTriggerElements(bool enabled) +{ + for (QChart* c : m_d->triggerCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +void VP1WaveformSystem::updatePreshowerElements(bool enabled) +{ + for (QChart* c : m_d->preshowerCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +void VP1WaveformSystem::updateCalorimeterElements(bool enabled) +{ + for (QChart* c : m_d->calorimeterCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +void VP1WaveformSystem::updateClockElements(bool enabled) +{ + for (QChart* c : m_d->clockCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} + +void VP1WaveformSystem::updateTestElements(bool enabled) +{ + for (QChart* c : m_d->testCharts) + { + c->setVisible(enabled); + } + m_d->layoutCharts(); +} diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx new file mode 100644 index 0000000000000000000000000000000000000000..765ce0d4d702245b2c2733f4003824b21a150ba2 --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx @@ -0,0 +1,164 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + + +//////////////////////////////////////////////////////////////// +// // +// Implementation of class WaveformSysController // +// // +// Author: Dave Casper (dcasper@uci.edu) // +// Initial version: August 2021 // +// // +//////////////////////////////////////////////////////////////// + +#define VP1IMPVARNAME m_d + +#include "VTI12WaveformSystems/WaveformSysController.h" +#include "ui_waveformcontrollerform.h" + +#include "VP1Base/VP1Serialise.h" +#include "VP1Base/VP1Deserialise.h" + +// System of units +#ifdef BUILDVP1LIGHT + #include "GeoModelKernel/Units.h" + #define SYSTEM_OF_UNITS GeoModelKernelUnits // --> 'GeoModelKernelUnits::cm' +#else + #include "GaudiKernel/SystemOfUnits.h" + #define SYSTEM_OF_UNITS Gaudi::Units // --> 'Gaudi::Units::cm' +#endif + +#include <cmath> + +//____________________________________________________________________ +class WaveformSysController::Imp { +public: + WaveformSysController * theclass; + Ui::VP1WaveformControllerForm ui; + + static SbColor4f color4f(const QColor& col, int transp_int) { + return SbColor4f(std::max<float>(0.0f,std::min<float>(1.0f,col.redF())), + std::max<float>(0.0f,std::min<float>(1.0f,col.greenF())), + std::max<float>(0.0f,std::min<float>(1.0f,col.blueF())), + std::max<float>(0.0f,std::min<float>(1.0f,1.0-transp_int/100.0))); + } + + bool last_vetoEnabled; + bool last_triggerEnabled; + bool last_preshowerEnabled; + bool last_calorimeterEnabled; + bool last_clockEnabled; + bool last_testEnabled; +}; + +//____________________________________________________________________ +WaveformSysController::WaveformSysController(IVP1System * sys) + : VP1Controller(sys,"WaveformSysController"), m_d(new Imp) +{ + m_d->theclass = this; + m_d->ui.setupUi(this); + + addUpdateSlot(SLOT(possibleChange_vetoEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_vetoEnabled); + + addUpdateSlot(SLOT(possibleChange_triggerEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_triggerEnabled); + + addUpdateSlot(SLOT(possibleChange_preshowerEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_preshowerEnabled); + + addUpdateSlot(SLOT(possibleChange_calorimeterEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_calorimeterEnabled); + + addUpdateSlot(SLOT(possibleChange_clockEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_clockEnabled); + + addUpdateSlot(SLOT(possibleChange_testEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_testEnabled); + + initLastVars(); +} + +//____________________________________________________________________ +WaveformSysController::~WaveformSysController() +{ + delete m_d; +} + +bool WaveformSysController::vetoEnabled() const +{ + return m_d->ui.checkBox_vetoEnabled->isChecked(); +} + +bool WaveformSysController::triggerEnabled() const +{ + return m_d->ui.checkBox_triggerEnabled->isChecked(); +} + +bool WaveformSysController::preshowerEnabled() const +{ + return m_d->ui.checkBox_preshowerEnabled->isChecked(); +} + +bool WaveformSysController::calorimeterEnabled() const +{ + return m_d->ui.checkBox_calorimeterEnabled->isChecked(); +} + +bool WaveformSysController::clockEnabled() const +{ + return m_d->ui.checkBox_clockEnabled->isChecked(); +} + +bool WaveformSysController::testEnabled() const +{ + return m_d->ui.checkBox_testEnabled->isChecked(); +} + +int WaveformSysController::currentSettingsVersion() const +{ + return 0; +} + +//____________________________________________________________________ +void WaveformSysController::actualSaveSettings(VP1Serialise&s) const +{ + + s.save(m_d->ui.checkBox_vetoEnabled); + s.save(m_d->ui.checkBox_triggerEnabled); + s.save(m_d->ui.checkBox_preshowerEnabled); + s.save(m_d->ui.checkBox_calorimeterEnabled); + s.save(m_d->ui.checkBox_clockEnabled); + s.save(m_d->ui.checkBox_testEnabled); + +} + +//____________________________________________________________________ +void WaveformSysController::actualRestoreSettings(VP1Deserialise& s) +{ + if (s.version() != 0) { + message("Warning: State data in .vp1 file has unsupported version ("+str(s.version())+")"); + return; + } + + s.restore(m_d->ui.checkBox_vetoEnabled); + s.restore(m_d->ui.checkBox_triggerEnabled); + s.restore(m_d->ui.checkBox_preshowerEnabled); + s.restore(m_d->ui.checkBox_calorimeterEnabled); + s.restore(m_d->ui.checkBox_clockEnabled); + s.restore(m_d->ui.checkBox_testEnabled); + +} + +/////////////////////////////////////////////////////////////////////////// +// Test for possible changes in values and emit signals as appropriate: +// (possibleChange_XXX() slots code provided by macros) +#define VP1CONTROLLERCLASSNAME WaveformSysController +#include "VP1Base/VP1ControllerMacros.h" +POSSIBLECHANGE_IMP(vetoEnabled) +POSSIBLECHANGE_IMP(triggerEnabled) +POSSIBLECHANGE_IMP(preshowerEnabled) +POSSIBLECHANGE_IMP(calorimeterEnabled) +POSSIBLECHANGE_IMP(clockEnabled) +POSSIBLECHANGE_IMP(testEnabled) diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui new file mode 100644 index 0000000000000000000000000000000000000000..cb854170cb4351c4f61e0672cd51cf6853af6fe2 --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>VP1WaveformControllerForm</class> + <widget class="QWidget" name="VP1WaveformControllerForm"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>267</width> + <height>182</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout"> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <property name="spacing"> + <number>0</number> + </property> + <item row="0" column="0"> + <layout class="QGridLayout"> + <property name="horizontalSpacing"> + <number>2</number> + </property> + <property name="verticalSpacing"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="QCheckBox" name="checkBox_vetoEnabled"> + <property name="text"> + <string>Veto</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="checkBox_triggerEnabled"> + <property name="text"> + <string>Trigger</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QCheckBox" name="checkBox_preshowerEnabled"> + <property name="text"> + <string>Preshower</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QCheckBox" name="checkBox_calorimeterEnabled"> + <property name="text"> + <string>Calorimeter</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QCheckBox" name="checkBox_clockEnabled"> + <property name="text"> + <string>Clock</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QCheckBox" name="checkBox_testEnabled"> + <property name="text"> + <string>Test</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item row="0" column="1"> + <spacer> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>1</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <spacer> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>1</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/graphics/VTI12/VTI12Utils/src/HitToSodeNode.cxx b/graphics/VTI12/VTI12Utils/src/HitToSodeNode.cxx index 9bb096aa783f217b1dcdb1f0c2cd18c0d4509fb6..6aaef646fe42edd3c232cfd690121eafb39d04ce 100644 --- a/graphics/VTI12/VTI12Utils/src/HitToSodeNode.cxx +++ b/graphics/VTI12/VTI12Utils/src/HitToSodeNode.cxx @@ -129,7 +129,7 @@ void HitToSoNode::buildStripShapes(const Trk::RIO_OnTrack& rio, SoSeparator*&sha double stripLength =100.0, stripWidth = 10.0, stripThickness=1.0; - const Amg::Vector2D* localposROT=0; + std::optional<Amg::Vector2D> localposROT=std::nullopt; Amg::Vector2D* localposStrip=0; Identifier id=rio.identify(); fillValues(id, rio.detectorElement(), stripLength, stripWidth, stripThickness, localposStrip); @@ -144,7 +144,7 @@ void HitToSoNode::buildStripShapes(const Trk::RIO_OnTrack& rio, SoSeparator*&sha if( !localposROT ) { - localposROT = new Amg::Vector2D; + localposROT = Amg::Vector2D{}; VP1Msg::message("Warning: Local hit position was NULL"); } @@ -181,7 +181,6 @@ void HitToSoNode::buildStripShapes(const Trk::RIO_OnTrack& rio, SoSeparator*&sha shape_detailed->addChild(localtrans1); delete localposStrip; - delete localposROT; } void HitToSoNode::fillValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness, Amg::Vector2D*& localposStrip){ diff --git a/version.txt b/version.txt index e5078b479cf7c53b9a657a8440d822748ade1826..cdbc15874e55b47fb45012cbf75daefe3196299b 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -22.0.31 +22.0.40