diff --git a/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilderFromHit.h b/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilderFromHit.h index 1c2c238c180a34e3a3e506eead28d04324bce74d..e0b653a6ac19c0c514eedaf4f90e162a0d8e36b0 100644 --- a/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilderFromHit.h +++ b/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilderFromHit.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef TILERECUTILS_TILECELLBUILDERFROMHIT_H @@ -74,41 +74,38 @@ class IAtRndmGenSvc; @brief This class creates Cells from RawChannels and stores them in a container */ -class TileCellBuilderFromHit: public AthAlgTool, virtual public ICaloCellMakerTool { +class TileCellBuilderFromHit + : public extends<AthAlgTool, ICaloCellMakerTool> +{ public: TileCellBuilderFromHit(const std::string& type, const std::string& name, const IInterface* parent); //!< Contructor virtual ~TileCellBuilderFromHit(); //!< Destructor - virtual StatusCode initialize(); //!< initialize mehtod + virtual StatusCode initialize() override; - virtual StatusCode finalize(); //!< finalize method + virtual StatusCode finalize() override; - virtual StatusCode process(CaloCellContainer* theCellContainer); // method to process all raw channels and store them in container - - template<class ITERATOR, class COLLECTION> - void build(const ITERATOR & begin, const ITERATOR & end, COLLECTION * coll); //!< method to process raw channels from a given vector and store them in collection - - /** method to check if channels are good or bad. Puts zero if both channels are bad - or recovers from single-channel failure. It returns true if cell was changed, false otherwise - */ - bool maskBadChannel(TileCell* pCell); - bool maskBadChannels(TileCell* pCell, bool single_PMT_C10, bool Ecell); + /// method to process all raw channels and store them in container + virtual StatusCode process(CaloCellContainer* theCellContainer) override; //AlgTool InterfaceID static const InterfaceID& interfaceID(); //static const InterfaceID& interfaceID() { return ICaloCellMakerTool; }; private: + /// status of every drawer + typedef TileDrawerEvtStatus TileDrawerEvtStatusArray[5][64]; - // properties // properties SG::ReadHandleKey<TileHitContainer> m_hitContainerKey{this, "TileHitContainer", "TileHitCnt", "Input Tile hit container key"}; - SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfo", - "EventInfo", "Input Event info key"}; + SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfo", + "EventInfo", + "EventInfo key"}; + SG::WriteHandleKey<TileCellContainer> m_MBTSContainerKey{this, "MBTSContainer", "MBTSContainer", @@ -152,31 +149,47 @@ class TileCellBuilderFromHit: public AthAlgTool, virtual public ICaloCellMakerTo const TileDetDescrManager* m_tileMgr; //!< Pointer to TileDetDescrManager const MbtsDetDescrManager* m_mbtsMgr; //!< Pointer to MbtsDetDescrManager - std::vector<TileCell*> m_allCells; //!< vector to of pointers to TielCells - std::vector<TileCell*> m_MBTSVec; //!< vector to of pointers to MBTS cells - std::vector<TileCell*> m_E4prVec; //!< vector to of pointers to E4' cells - std::unique_ptr<TileCellContainer> m_MBTSCells; //!< Pointer to MBTS cell container - std::unique_ptr<TileCellContainer> m_E4prCells; //!< Pointer to E4' cell container - TileFragHash::TYPE m_RChType; //!< Type of TileRawChannels (Fit, OF2, etc.) //unsigned int m_bsflags; //!< other flags stored in TileRawChannelContainer - TileDrawerEvtStatus m_drawerEvtStatus[5][64]; //!< status of every drawer in every event - TileDrawerRunStatus m_drawerRunStatus[5][64]; //!< overall status of drawer in whole run - int m_eventErrorCounter[4]; //!< number of events with no errors(0), warnings(1), error(2), total(3) + // These were accumulated, but never actually used. + // They also spoil reentrancy, so leave them commented-out for now. + // If this information is needed in the future, these can be changed + // to use atomics. + ///TileDrawerRunStatus m_drawerRunStatus[5][64]; //!< overall status of drawer in whole run + //int m_eventErrorCounter[4]; //!< number of events with no errors(0), warnings(1), error(2), total(3) std::vector<CaloAffectedRegionInfo> m_affectedRegionInfo_global; std::vector<CaloAffectedRegionInfo> m_affectedRegionInfo_current_run; + //!< method to process raw channels from a given vector and store them in collection + template<class ITERATOR, class COLLECTION> + void build(TileDrawerEvtStatusArray& drawerEvtStatus, + const ITERATOR & begin, + const ITERATOR & end, + COLLECTION * coll, + TileCellContainer* MBTSCells, + TileCellContainer* E4prCells) const; + + + /** method to check if channels are good or bad. Puts zero if both channels are bad + or recovers from single-channel failure. It returns true if cell was changed, false otherwise + */ + bool maskBadChannel (TileDrawerEvtStatusArray& drawerEvtStatus, + TileCell* pCell) const; + bool maskBadChannels (TileDrawerEvtStatusArray& drawerEvtStatus, + TileCell* pCell, bool single_PMT_C10, bool Ecell) const; + void correctCell(TileCell* pCell, int correction, int pmt, int gain, float ener, float time, - unsigned char iqual, unsigned char qbit); //!< Compute calibrated energy, time, etc. for TileCell and adjust it. + unsigned char iqual, unsigned char qbit) const; //!< Compute calibrated energy, time, etc. for TileCell and adjust it. - unsigned char iquality(float qual) {//!< method to compute the cell quality + unsigned char iquality(float qual) const {//!< method to compute the cell quality return std::min(255, abs((int) qual)); } // keep quality within 8 bits make it "unsigned char" - unsigned char qbits(int ros, int drawer, bool count_over, bool good_time, bool good_ener, - bool overflow, bool underflow, bool good_overflowfit); //!< method to compute the cell quality bits + unsigned char qbits(TileDrawerEvtStatusArray& drawerEvtStatus, + int ros, int drawer, bool count_over, bool good_time, bool good_ener, + bool overflow, bool underflow, bool good_overflowfit) const; //!< method to compute the cell quality bits int m_RUN2; int m_E1_TOWER; diff --git a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.py b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.py index ec8476d086edd9939ac28aabba0591ee7ec84bd4..86f1227a3c06575bf46f77e4b9388289f2433151 100644 --- a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.py +++ b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.py @@ -429,6 +429,9 @@ ToolSvc += maketool ('tool1', bct1) ToolSvc += maketool ('tool2', bct2, maskBadChannels = True) ToolSvc += maketool ('tool3', bct1, noise = 0.1) +from xAODEventInfoCnv.xAODEventInfoCnvConf import xAODMaker__EventInfoCnvAlg +topSequence += xAODMaker__EventInfoCnvAlg (DoBeginRun = False) + testalg1 = TestAlg ('testalg1') topSequence += testalg1 diff --git a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref index 0ebec00bd14222552dc1c5f4f6d49efbe95fd7ca..3dc63ae8fc878ea6a966bd824f22a50c337d6286 100644 --- a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref +++ b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref @@ -1,14 +1,14 @@ -Mon Dec 17 02:35:03 CET 2018 +Mon Jan 14 15:46:49 EST 2019 Preloading tcmalloc_minimal.so Py:Athena INFO including file "AthenaCommon/Preparation.py" -Py:Athena INFO using release [AthenaWorkDir-22.0.1] [x86_64-slc6-gcc62-dbg] [atlas-work3/d6d3116653c] -- built on [2018-12-16T1848] +Py:Athena INFO using release [WorkDir-22.0.1] [x86_64-slc6-gcc8-opt] [master-mt/7f37c8e33ff] -- built on [2019-01-11T2041] Py:Athena INFO including file "AthenaCommon/Atlas.UnixStandardJob.py" Py:Athena INFO executing ROOT6Setup Py:Athena INFO including file "AthenaCommon/Execution.py" Py:Athena INFO including file "TileRecUtils/TileCellBuilderFromHit_test.py" -[?1034hSetGeometryVersion.py obtained major release version 22 +SetGeometryVersion.py obtained major release version 22 Py:Athena INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py" -Py:ConfigurableDb INFO Read module info for 5459 configurables from 51 genConfDb files +Py:ConfigurableDb INFO Read module info for 5435 configurables from 52 genConfDb files Py:ConfigurableDb INFO No duplicates have been found: that's good ! EventInfoMgtInit: Got release version Athena-22.0.1 Py:IOVDbSvc.CondDB INFO Setting up conditions DB access to instance OFLP200 @@ -28,7 +28,7 @@ ApplicationMgr INFO Updating Gaudi::PluginService::SetDebug(level) to leve ApplicationMgr SUCCESS ==================================================================================================================================== Welcome to ApplicationMgr (GaudiCoreSvc v30r5) - running on lxplus073.cern.ch on Mon Dec 17 02:35:26 2018 + running on spar0101.usatlas.bnl.gov on Mon Jan 14 15:47:18 2019 ==================================================================================================================================== ApplicationMgr INFO Successfully loaded modules : AthenaServices ApplicationMgr INFO Application Manager Configured successfully @@ -36,7 +36,7 @@ ApplicationMgr INFO Updating Gaudi::PluginService::SetDebug(level) to leve StatusCodeSvc INFO initialize AthDictLoaderSvc INFO in initialize... AthDictLoaderSvc INFO acquired Dso-registry -ClassIDSvc INFO getRegistryEntries: read 6864 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 7343 CLIDRegistry entries for module ALL CoreDumpSvc INFO install f-a-t-a-l handler... (flag = -1) CoreDumpSvc INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) MetaDataSvc INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00 @@ -44,9 +44,9 @@ AthenaPoolCnvSvc INFO Initializing AthenaPoolCnvSvc - package version Athena PoolSvc INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok] PoolSvc INFO Set connectionsvc retry/timeout/IDLE timeout to 'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled PoolSvc INFO Frontier compression level set to 5 -DBReplicaSvc INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data -DBReplicaSvc INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config -DBReplicaSvc INFO Total of 10 servers found for host lxplus073.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ] +DBReplicaSvc INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data +DBReplicaSvc INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config +DBReplicaSvc INFO Total of 1 servers found for host spar0101.usatlas.bnl.gov [ATLF ] PoolSvc INFO Successfully setup replica sorting algorithm PoolSvc INFO Setting up APR FileCatalog and Streams PoolSvc WARNING Unable to locate catalog for prfile:poolcond/PoolCat_oflcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables @@ -83,7 +83,7 @@ IOVDbSvc INFO Added taginfo remove for /TILE/OFL02/STATUS/ADC IOVDbSvc INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY IOVDbSvc INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC IOVDbSvc INFO Added taginfo remove for /LAR/LArCellPositionShift -ClassIDSvc INFO getRegistryEntries: read 1919 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 1595 CLIDRegistry entries for module ALL ClassIDSvc INFO getRegistryEntries: read 17 CLIDRegistry entries for module ALL DetDescrCnvSvc INFO initializing DetDescrCnvSvc INFO Found DetectorStore service @@ -137,7 +137,7 @@ BarrelConstruction INFO Use sagging in geometry ? 0 multi-layered version of absorbers activated, mlabs == 1 ================================================ EventPersistenc... INFO Added successfully Conversion service:DetDescrCnvSvc -ClassIDSvc INFO getRegistryEntries: read 2398 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 2389 CLIDRegistry entries for module ALL CaloIDHelper_ID... INFO in createObj: creating a TileTBID helper object in the detector store IdDictDetDescrCnv INFO in initialize IdDictDetDescrCnv INFO in createObj: creating a IdDictManager object in the detector store @@ -176,7 +176,7 @@ TileDddbManager INFO n_tileSwitches = 1 ClassIDSvc INFO getRegistryEntries: read 213 CLIDRegistry entries for module ALL CaloIDHelper_ID... INFO in createObj: creating a TileID helper object in the detector store AtlasDetectorID INFO initialize_from_dictionary - OK -TileNeighbour INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/TileNeighbour_reduced.txt +TileNeighbour INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileNeighbour_reduced.txt TileHWIDDetDesc... INFO in createObj: creating a TileHWID helper object in the detector store TileHWID INFO initialize_from_dictionary AtlasDetectorID INFO initialize_from_dictionary - OK @@ -188,9 +188,9 @@ CaloIDHelper_ID... INFO in createObj: creating a LArHEC_ID helper object in th AtlasDetectorID INFO initialize_from_dictionary - OK CaloIDHelper_ID... INFO in createObj: creating a LArFCAL_ID helper object in the detector store AtlasDetectorID INFO initialize_from_dictionary - OK -LArFCAL_Base_ID INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCal2DNeighbors-April2011.txt -LArFCAL_Base_ID INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCal3DNeighborsNext-April2011.txt -LArFCAL_Base_ID INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCal3DNeighborsPrev-April2011.txt +LArFCAL_Base_ID INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCal2DNeighbors-April2011.txt +LArFCAL_Base_ID INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt +LArFCAL_Base_ID INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt CaloIDHelper_ID... INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store AtlasDetectorID INFO initialize_from_dictionary - OK LArMiniFCAL_ID INFO initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID. @@ -217,11 +217,11 @@ TileInfoLoader INFO Sampling fraction for E2 cells 1/107 TileInfoLoader INFO Sampling fraction for E3 cells 1/97 TileInfoLoader INFO Sampling fraction for E4 cells 1/75 TileInfoLoader INFO Sampling fraction for E4' cells 1/75 -TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulsehi_physics.dat -TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulselo_physics.dat -TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulse_adder_tower_physics.dat -TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulse_adder_muonRcv_physics.dat -TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulse_adder_muon_physics.dat +TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulsehi_physics.dat +TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulselo_physics.dat +TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulse_adder_tower_physics.dat +TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulse_adder_muonRcv_physics.dat +TileInfoLoader INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulse_adder_muon_physics.dat CaloIDHelper_ID... INFO in createObj: creating a CaloLVL1_ID helper object in the detector store CaloLVL1_ID INFO initialize_from_dictionary AtlasDetectorID INFO initialize_from_dictionary - OK @@ -276,9 +276,17 @@ TileSampleNoise... INFO Creating TileCondProxyCool(TileSampleNoiseCondAlg.Tile TileTimingCondA... INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY" tilecellbuilder... INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status tilecellbuilder... INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status +ClassIDSvc INFO getRegistryEntries: read 504 CLIDRegistry entries for module ALL +xAODMaker::Even... INFO Initializing - Package version: xAODEventInfoCnv-00-00-00 +xAODMaker::Even... INFO Initializing - Package version: xAODEventInfoCnv-00-00-00 +xAODMaker::Even...WARNING Beam conditions service not available +xAODMaker::Even...WARNING Will not fill beam spot information into xAOD::EventInfo +xAODMaker::Even... INFO Luminosity information not available +xAODMaker::Even... INFO Will take information from the EventInfo object +ClassIDSvc INFO getRegistryEntries: read 319 CLIDRegistry entries for module ALL PyComponentMgr INFO Initializing PyComponentMgr... testalg1 INFO Initializing testalg1... -ClassIDSvc INFO getRegistryEntries: read 5265 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 4849 CLIDRegistry entries for module ALL ToolSvc.tool1 INFO Storing MBTS cells in MBTSContainer ToolSvc.tool1 INFO Noise Sigma 0 MeV is selected! AtRndmGenSvc INFO Initializing AtRndmGenSvc - package version RngComps-00-00-00 @@ -287,7 +295,6 @@ AtRndmGenSvc INFO will be reseeded for every event AtRndmGenSvc WARNING INITIALISING Tile_DigitsMaker stream with DEFAULT seeds 3591 2309736 ToolSvc.tool1 INFO max time thr 25 ns ToolSvc.tool1 INFO min time thr -25 ns -ToolSvc.tool1 INFO size of temp vector set to 5184 ToolSvc.tool1 INFO taking hits from 'TileHitCnt' ToolSvc.tool1 INFO Storing E4' cells in E4prContainer ToolSvc.tool1 INFO TileCellBuilderFromHit initialization completed @@ -296,7 +303,6 @@ ToolSvc.tool2 INFO Storing MBTS cells in MBTSContainer ToolSvc.tool2 INFO Noise Sigma 0 MeV is selected! ToolSvc.tool2 INFO max time thr 25 ns ToolSvc.tool2 INFO min time thr -25 ns -ToolSvc.tool2 INFO size of temp vector set to 5184 ToolSvc.tool2 INFO taking hits from 'TileHitCnt' ToolSvc.tool2 INFO Storing E4' cells in E4prContainer ToolSvc.tool2 INFO TileCellBuilderFromHit initialization completed @@ -304,7 +310,6 @@ ToolSvc.tool3 INFO Storing MBTS cells in MBTSContainer ToolSvc.tool3 INFO Noise Sigma 0.1 MeV is selected! ToolSvc.tool3 INFO max time thr 25 ns ToolSvc.tool3 INFO min time thr -25 ns -ToolSvc.tool3 INFO size of temp vector set to 5184 ToolSvc.tool3 INFO taking hits from 'TileHitCnt' ToolSvc.tool3 INFO Storing E4' cells in E4prContainer ToolSvc.tool3 INFO TileCellBuilderFromHit initialization completed @@ -349,18 +354,19 @@ CaloIDHelper_ID... INFO in createObj: creating a LArHEC_SuperCell_ID helper ob AtlasDetectorID INFO initialize_from_dictionary - OK CaloIDHelper_ID... INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store AtlasDetectorID INFO initialize_from_dictionary - OK -LArFCAL_Base_ID INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCalSuperCells2DNeighborsNew-April2014.txt -LArFCAL_Base_ID INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCalSuperCells3DNeighborsNextNew-April2014.txt -LArFCAL_Base_ID INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt +LArFCAL_Base_ID INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt +LArFCAL_Base_ID INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt +LArFCAL_Base_ID INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt CaloIDHelper_ID... INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store AtlasDetectorID INFO initialize_from_dictionary - OK -TileNeighbour INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/TileSuperCellNeighbour.txt +TileNeighbour INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileSuperCellNeighbour.txt AtlasDetectorID INFO initialize_from_dictionary - OK CaloIdMgrDetDes... INFO Finished CaloIdMgrDetDes... INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A Domain[ROOT_All] INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond08/cond08_mc.000003.gen.COND/cond08_mc.000003.gen.COND._0064.pool.root RootDatabase.open INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond08/cond08_mc.000003.gen.COND/cond08_mc.000003.gen.COND._0064.pool.root File version:52200 +xAODMaker::Even...WARNING Algorithm::BeginRun is deprecated. Use Start instead AthenaEventLoopMgr INFO ===>>> start processing event #1, run #1 0 events processed so far <<<=== IOVDbSvc INFO Opening COOL connection for COOLOFL_TILE/OFLP200 IOVDbFolder INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibCes-SIM-06 for folder /TILE/OFL02/CALIB/CES @@ -383,8 +389,8 @@ TileBadChannels... INFO TileBchStatus::isNoisy() is defined by: Large HF noise TileBadChannels... INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; No PMT connected; No HV; Channel masked for LV1 (unspecified); LV1 channel no gain; LV1 channel noisy; Channel disabled for LV1; TileBadChannels... INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; TileBadChannels... INFO No drawer trips probabilities found in DB -tilecellbuilder... INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/TileNoBad.oflBch" -tilecellbuilder... INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/TileNoBad.oflBch" +tilecellbuilder... INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileNoBad.oflBch" +tilecellbuilder... INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileNoBad.oflBch" tilecellbuilder... INFO No TileBchStatus::isBad() definition found in DB, using defaults tilecellbuilder... INFO No TileBchStatus::isNoisy() definition found in DB, using defaults tilecellbuilder... INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults @@ -394,8 +400,8 @@ tilecellbuilder... INFO TileBchStatus::isNoisy() is defined by: Large HF noise tilecellbuilder... INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; No PMT connected; No HV; Channel masked for LV1 (unspecified); LV1 channel no gain; LV1 channel noisy; Channel disabled for LV1; tilecellbuilder... INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; tilecellbuilder... INFO No drawer trips probabilities found in DB -tilecellbuilder... INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/TileNoBad.oflBch" -tilecellbuilder... INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/afs/cern.ch/work/s/ssnyder/builds/atlas-work3/build-x86_64-slc6-gcc62-dbg/TileCalorimeter/TileRecUtils/unitTestRun/tilecellbuilder_bct2.bch" +tilecellbuilder... INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileNoBad.oflBch" +tilecellbuilder... INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/gpfs/mnt/atlasgpfs01/usatlas/data/snyder/atlas-master-mt/build-x86_64-slc6-gcc8-opt/TileCalorimeter/TileRecUtils/unitTestRun/tilecellbuilder_bct2.bch" tilecellbuilder... INFO No TileBchStatus::isBad() definition found in DB, using defaults tilecellbuilder... INFO No TileBchStatus::isNoisy() definition found in DB, using defaults tilecellbuilder... INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults @@ -406,12 +412,6 @@ tilecellbuilder... INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; N tilecellbuilder... INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; tilecellbuilder... INFO No drawer trips probabilities found in DB ClassIDSvc INFO getRegistryEntries: read 650 CLIDRegistry entries for module ALL -IncrementalExecutor::executeFunction: symbol '_ZNK7TileHitcvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEv' unresolved while linking function '__cxx_global_var_initcling_module_5164_'! -You are probably missing the definition of TileHit::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >() const -Maybe you need to load the corresponding shared library? -IncrementalExecutor::executeFunction: symbol '_ZNK7TileHitcvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEv' unresolved while linking function '__cxx_global_var_initcling_module_5179_'! -You are probably missing the definition of TileHit::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >() const -Maybe you need to load the corresponding shared library? ClassIDSvc INFO getRegistryEntries: read 194 CLIDRegistry entries for module ALL ClassIDSvc INFO getRegistryEntries: read 8 CLIDRegistry entries for module ALL AtRndmGenSvc INFO Stream = Tile_DigitsMaker, Seed1 = 288581169, Seed2 = 758068585 @@ -437,23 +437,23 @@ IncidentProcAlg2 INFO Finalize AtRndmGenSvc INFO FINALISING PyComponentMgr INFO Finalizing PyComponentMgr... IdDictDetDescrCnv INFO in finalize -IOVDbFolder INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 (( 3.13 ))s -IOVDbFolder INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 (( 1.60 ))s -IOVDbFolder INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 (( 1.00 ))s -IOVDbFolder INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 (( 1.00 ))s -IOVDbFolder INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 (( 0.99 ))s -IOVDbFolder INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 (( 0.94 ))s -IOVDbFolder INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 (( 0.97 ))s -IOVDbFolder INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 (( 0.78 ))s -IOVDbFolder INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 (( 1.62 ))s -IOVDbFolder INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 (( 0.55 ))s -IOVDbFolder INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 (( 0.58 ))s -IOVDbFolder INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 (( 0.07 ))s -IOVDbFolder INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 (( 1.08 ))s -IOVDbSvc INFO bytes in (( 14.30 ))s +IOVDbFolder INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 (( 1.84 ))s +IOVDbFolder INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 (( 2.10 ))s +IOVDbFolder INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 (( 1.83 ))s +IOVDbFolder INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 (( 1.83 ))s +IOVDbFolder INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 (( 1.48 ))s +IOVDbFolder INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 (( 1.65 ))s +IOVDbFolder INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 (( 1.65 ))s +IOVDbFolder INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 (( 1.65 ))s +IOVDbFolder INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 (( 2.60 ))s +IOVDbFolder INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 (( 1.48 ))s +IOVDbFolder INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 (( 1.65 ))s +IOVDbFolder INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 (( 0.09 ))s +IOVDbFolder INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 (( 1.11 ))s +IOVDbSvc INFO bytes in (( 20.96 ))s IOVDbSvc INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: (( 0.00 ))s -IOVDbSvc INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: (( 4.21 ))s -IOVDbSvc INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: (( 10.10 ))s +IOVDbSvc INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: (( 2.95 ))s +IOVDbSvc INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: (( 18.01 ))s TileInfoLoader INFO TileInfoLoader::finalize() AthDictLoaderSvc INFO in finalize... ToolSvc INFO Removing all tools created by ToolSvc @@ -463,9 +463,9 @@ ToolSvc.tool1 INFO Finalizing *****Chrono***** INFO **************************************************************************************************** *****Chrono***** INFO The Final CPU consumption ( Chrono ) Table (ordered) *****Chrono***** INFO **************************************************************************************************** -cObjR_ALL INFO Time User : Tot= 0.86 [s] Ave/Min/Max= 0.43(+- 0.41)/ 0.02/ 0.84 [s] #= 2 -cObj_ALL INFO Time User : Tot= 1.11 [s] Ave/Min/Max=0.0854(+-0.251)/ 0/ 0.94 [s] #= 13 -ChronoStatSvc INFO Time User : Tot= 66.1 [s] #= 1 +cObjR_ALL INFO Time User : Tot= 0.55 [s] Ave/Min/Max=0.275(+-0.265)/ 0.01/ 0.54 [s] #= 2 +cObj_ALL INFO Time User : Tot= 0.66 [s] Ave/Min/Max=0.0508(+-0.152)/ 0/ 0.57 [s] #= 13 +ChronoStatSvc INFO Time User : Tot= 43.7 [s] #= 1 *****Chrono***** INFO **************************************************************************************************** ChronoStatSvc.f... INFO Service finalized successfully ApplicationMgr INFO Application Manager Finalized successfully diff --git a/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx b/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx index 2d7978825a8b247484520048bfcc369bf79fcd9e..7562651a66d917a82d8481c98d09260af301d427 100644 --- a/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx +++ b/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx @@ -70,7 +70,7 @@ const InterfaceID& TileCellBuilderFromHit::interfaceID( ) { //Constructor TileCellBuilderFromHit::TileCellBuilderFromHit(const std::string& type, const std::string& name, const IInterface* parent) - : AthAlgTool(type, name, parent) + : base_class(type, name, parent) , m_infoName("TileInfo") , m_eneForTimeCut(35. * MeV) // keep time only for cells above 70 MeV (more than 35 MeV in at least one PMT to be precise) , m_eneForTimeCutMBTS(0.03675) // the same cut for MBTS, but in pC, corresponds to 3 ADC counts or 35 MeV @@ -91,12 +91,10 @@ TileCellBuilderFromHit::TileCellBuilderFromHit(const std::string& type, const st , m_mbtsMgr(0) , m_RChType(TileFragHash::Default) { - declareInterface<ICaloCellMakerTool>( this ); declareInterface<TileCellBuilderFromHit>( this ); - memset(m_drawerEvtStatus, 0, sizeof(m_drawerEvtStatus)); - memset(m_drawerRunStatus, 0, sizeof(m_drawerRunStatus)); - memset(m_eventErrorCounter, 0, sizeof(m_eventErrorCounter)); + //memset(m_drawerRunStatus, 0, sizeof(m_drawerRunStatus)); + //memset(m_eventErrorCounter, 0, sizeof(m_eventErrorCounter)); // never set energy to zero, but set it to some small number // this will help TopoCluster to assign proper weight to the cell if needed @@ -143,12 +141,10 @@ StatusCode TileCellBuilderFromHit::initialize() { // retrieve MBTS and Tile detector manager, TileID helper and TileIfno from det store if (m_MBTSContainerKey.key().empty()) { m_mbtsMgr = nullptr; - m_MBTSVec.resize(0); } else { ATH_CHECK( m_MBTSContainerKey.initialize() ); ATH_MSG_INFO( "Storing MBTS cells in " << m_MBTSContainerKey.key() ); - m_MBTSVec.resize(NCELLMBTS); if (detStore()->retrieve(m_mbtsMgr).isFailure()) { ATH_MSG_WARNING( "Unable to retrieve MbtsDetDescrManager from DetectorStore" ); @@ -186,11 +182,8 @@ StatusCode TileCellBuilderFromHit::initialize() { ATH_MSG_INFO( "max time thr " << m_maxTime << " ns" ); ATH_MSG_INFO( "min time thr " << m_minTime << " ns" ); - // prepare empty vector for all cell pointers - m_allCells.resize(m_tileID->cell_hash_max(), 0); - m_E1_TOWER = (m_allCells.size() < 10000) ? 10 : 40; + m_E1_TOWER = (m_tileID->cell_hash_max() < 10000) ? 10 : 40; - ATH_MSG_INFO( "size of temp vector set to " << m_allCells.size() ); ATH_MSG_INFO( "taking hits from '" << m_hitContainerKey.key() << "'" ); m_cabling = TileCablingService::getInstance(); @@ -199,10 +192,8 @@ StatusCode TileCellBuilderFromHit::initialize() { if (m_RUN2 && !m_E4prContainerKey.key().empty()) { ATH_CHECK( m_E4prContainerKey.initialize() ); ATH_MSG_INFO( "Storing E4' cells in " << m_E4prContainerKey.key() ); - m_E4prVec.resize(NCELLE4PR); } else { m_E4prContainerKey = ""; // no E4' container for RUN1 - m_E4prVec.resize(0); } @@ -219,14 +210,15 @@ StatusCode TileCellBuilderFromHit::finalize() { } StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) { + const EventContext& ctx = Gaudi::Hive::currentContext(); //** //* Get TileHits //** - memset(m_drawerEvtStatus, 0, sizeof(m_drawerEvtStatus)); + TileDrawerEvtStatusArray drawerEvtStatus; - SG::ReadHandle<TileHitContainer> hitContainer(m_hitContainerKey); + SG::ReadHandle<TileHitContainer> hitContainer(m_hitContainerKey, ctx); if (!hitContainer.isValid()) { @@ -237,12 +229,14 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) ATH_MSG_DEBUG( "Container " << m_hitContainerKey.key() << " with TileHits found "); + std::unique_ptr<TileCellContainer> MBTSCells; if (!m_MBTSContainerKey.key().empty()) { - m_MBTSCells = std::make_unique<TileCellContainer>(SG::VIEW_ELEMENTS); + MBTSCells = std::make_unique<TileCellContainer>(SG::VIEW_ELEMENTS); } + std::unique_ptr<TileCellContainer> E4prCells; if (!m_E4prContainerKey.key().empty()) { - m_E4prCells = std::make_unique<TileCellContainer>(SG::VIEW_ELEMENTS); + E4prCells = std::make_unique<TileCellContainer>(SG::VIEW_ELEMENTS); } SelectAllObject<TileHitContainer> selAll(hitContainer.cptr()); @@ -251,17 +245,18 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) if (begin != end) { ATH_MSG_DEBUG( " Calling build() method for hits from " << m_hitContainerKey.key() ); - build(begin, end, theCellContainer); + build (drawerEvtStatus, begin, end, theCellContainer, + MBTSCells.get(), E4prCells.get()); } if (!m_MBTSContainerKey.key().empty()) { - SG::WriteHandle<TileCellContainer> MBTSContainer(m_MBTSContainerKey); - ATH_CHECK( MBTSContainer.record(std::move(m_MBTSCells)) ); + SG::WriteHandle<TileCellContainer> MBTSContainer(m_MBTSContainerKey, ctx); + ATH_CHECK( MBTSContainer.record(std::move(MBTSCells)) ); } if (!m_E4prContainerKey.key().empty()) { - SG::WriteHandle<TileCellContainer> E4prContainer(m_E4prContainerKey); - ATH_CHECK( E4prContainer.record(std::move(m_E4prCells)) ); + SG::WriteHandle<TileCellContainer> E4prContainer(m_E4prContainerKey, ctx); + ATH_CHECK( E4prContainer.record(std::move(E4prCells)) ); } CaloCell_ID::SUBCALO caloNum = CaloCell_ID::TILE; @@ -293,8 +288,8 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) int drConsecNum = 0; for (int p = 1; p < 5; ++p) { - TileDrawerEvtStatus * evt = m_drawerEvtStatus[p]; - TileDrawerRunStatus * run = m_drawerRunStatus[p]; + TileDrawerEvtStatus * evt = drawerEvtStatus[p]; + //TileDrawerRunStatus * run = m_drawerRunStatus[p]; int drAbsent = 0; int drMasked = 0; int drConsec = 0; @@ -307,11 +302,11 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) if (evt[d].nChannels == 0) { ++drConsec; ++drAbsent; - ++(run[d].drawerAbsent); + //++(run[d].drawerAbsent); } else if (evt[d].nMaskedChannels >= evt[d].nChannels) { ++drConsec; ++drMasked; - ++(run[d].drawerMasked); + //++(run[d].drawerMasked); } else { if (drConsec > drConsecMax) { drConsecMax = drConsec; @@ -321,9 +316,9 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) } } drConsec = 0; - if (evt[d].nMaskedChannels > 0) { - ++(run[d].channelsMasked); - } + //if (evt[d].nMaskedChannels > 0) { + // ++(run[d].channelsMasked); + //} if (evt[d].nBadQuality) ++hasBadQ; if (evt[d].nOverflow) ++hasOver; if (evt[d].nUnderflow) ++hasUnder; @@ -383,11 +378,11 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) std::cout<<"partition flag 0x0"<<std::hex<<flag<<std::dec<<" error "<<error<<std::endl; #endif - ++m_eventErrorCounter[error]; // error index is 0 or 1 or 2 here - ++m_eventErrorCounter[3]; // count separately total number of events + //++m_eventErrorCounter[error]; // error index is 0 or 1 or 2 here + //++m_eventErrorCounter[3]; // count separately total number of events // retrieve EventInfo - SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey); + SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey, ctx); if (eventInfo.isValid()) { @@ -406,6 +401,9 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) } } + else { + ATH_MSG_WARNING( " cannot retrieve EventInfo, will not set Tile information " ); + } // Execution completed. ATH_MSG_DEBUG( "TileCellBuilderFromHit execution completed." ); @@ -415,7 +413,7 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) //************************************************************************ void TileCellBuilderFromHit::correctCell(TileCell* pCell, int correction, int pmt, int gain - , float ener, float time, unsigned char iqual, unsigned char qbit) { + , float ener, float time, unsigned char iqual, unsigned char qbit) const { //************************************************************************ // Merge two pmts in one cell if needed @@ -436,14 +434,15 @@ void TileCellBuilderFromHit::correctCell(TileCell* pCell, int correction, int pm } } -unsigned char TileCellBuilderFromHit::qbits(int ros, int drawer, bool count_over - , bool good_time, bool good_ener, bool overflow, bool underflow, bool overfit) { +unsigned char TileCellBuilderFromHit::qbits(TileDrawerEvtStatusArray& drawerEvtStatus, + int ros, int drawer, bool count_over + , bool good_time, bool good_ener, bool overflow, bool underflow, bool overfit) const { - ++m_drawerEvtStatus[ros][drawer].nChannels; + ++drawerEvtStatus[ros][drawer].nChannels; // new feature in rel 17.2.7 - count underflows and overflows if (count_over) { - if (overflow) ++m_drawerEvtStatus[ros][drawer].nOverflow; - if (underflow) ++m_drawerEvtStatus[ros][drawer].nUnderflow; + if (overflow) ++drawerEvtStatus[ros][drawer].nOverflow; + if (underflow) ++drawerEvtStatus[ros][drawer].nUnderflow; } #ifdef ALLOW_DEBUG_COUT if (overflow) std::cout << "channel with overflow " << ((count_over)?"":"MBTS") << std::endl; @@ -459,7 +458,7 @@ unsigned char TileCellBuilderFromHit::qbits(int ros, int drawer, bool count_over if (good_ener) { qbit |= TileCell::MASK_AMPL; if (count_over) { - ++m_drawerEvtStatus[ros][drawer].nSomeSignal; + ++drawerEvtStatus[ros][drawer].nSomeSignal; } } @@ -467,8 +466,10 @@ unsigned char TileCellBuilderFromHit::qbits(int ros, int drawer, bool count_over } // masking for MBTS with single channel -bool TileCellBuilderFromHit::maskBadChannel(TileCell* pCell) { - +bool +TileCellBuilderFromHit::maskBadChannel (TileDrawerEvtStatusArray& drawerEvtStatus, + TileCell* pCell) const +{ Identifier cell_id = pCell->ID(); HWIdentifier channel_id = m_cabling->s2h_channel_id(cell_id); @@ -483,7 +484,7 @@ bool TileCellBuilderFromHit::maskBadChannel(TileCell* pCell) { // check quality first bool bad = ((int) pCell->qual1() > m_qualityCut); if (bad) { - ++m_drawerEvtStatus[ros][drawer].nBadQuality; + ++drawerEvtStatus[ros][drawer].nBadQuality; } else { // check bad status in DB @@ -493,7 +494,7 @@ bool TileCellBuilderFromHit::maskBadChannel(TileCell* pCell) { if (bad) { // only one channel in this cell and it is bad - ++m_drawerEvtStatus[ros][drawer].nMaskedChannels; + ++drawerEvtStatus[ros][drawer].nMaskedChannels; //pCell->setEnergy(m_zeroEnergy,0.0,TileID::LOWGAIN,CaloGain::INVALIDGAIN); // reset energy completely, indicate problem putting low gain //pCell->setTime(0.0); // reset time completely @@ -520,7 +521,9 @@ bool TileCellBuilderFromHit::maskBadChannel(TileCell* pCell) { } // masking for normal cells -bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C10, bool Ecell) { +bool +TileCellBuilderFromHit::maskBadChannels (TileDrawerEvtStatusArray& drawerEvtStatus, + TileCell* pCell, bool single_PMT_C10, bool Ecell) const { const CaloDetDescrElement* caloDDE = pCell->caloDDE(); @@ -540,7 +543,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1 // check quality first bool bad1 = ((int) pCell->qual1() > m_qualityCut); if (bad1) { - ++m_drawerEvtStatus[ros1][drawer1].nBadQuality; + ++drawerEvtStatus[ros1][drawer1].nBadQuality; } else { // check bad status in DB @@ -553,7 +556,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1 if (bad1) { // only one channel in this cell and it is bad - ++m_drawerEvtStatus[ros1][drawer1].nMaskedChannels; + ++drawerEvtStatus[ros1][drawer1].nMaskedChannels; if (gain1 == CaloGain::INVALIDGAIN) { pCell->setEnergy(m_zeroEnergy, 0.0, TileID::LOWGAIN, CaloGain::INVALIDGAIN); // reset energy completely, indicate problem putting low gain @@ -587,7 +590,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1 // check quality first bool bad2 = ((int) pCell->qual2() > m_qualityCut); if (bad2) { - ++m_drawerEvtStatus[ros2][drawer2].nBadQuality; + ++drawerEvtStatus[ros2][drawer2].nBadQuality; } else { // check bad status in DB @@ -623,7 +626,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1 pCell->setEnergy(pCell->ene2()/2., pCell->ene2()/2., gain2, gain2); //bad1 = bad2; bad1 = true; - --m_drawerEvtStatus[ros1][drawer1].nMaskedChannels; // since it's fake masking, decrease counter by 1 in advance + --drawerEvtStatus[ros1][drawer1].nMaskedChannels; // since it's fake masking, decrease counter by 1 in advance } } else { if (m_RUN2 || !chStatus2.isBad()) { @@ -636,14 +639,14 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1 pCell->setEnergy(pCell->ene1()/2., pCell->ene1()/2., gain1, gain1); //bad2 = bad1; bad2 = true; - --m_drawerEvtStatus[ros2][drawer2].nMaskedChannels; // since it's fake masking, decrease counter by 1 in advance + --drawerEvtStatus[ros2][drawer2].nMaskedChannels; // since it's fake masking, decrease counter by 1 in advance } } } if (bad1 && bad2) { // both channels are bad - ++m_drawerEvtStatus[ros1][drawer1].nMaskedChannels; - ++m_drawerEvtStatus[ros2][drawer2].nMaskedChannels; + ++drawerEvtStatus[ros1][drawer1].nMaskedChannels; + ++drawerEvtStatus[ros2][drawer2].nMaskedChannels; if (gain1 == CaloGain::INVALIDGAIN || gain2 == CaloGain::INVALIDGAIN) { if (gain1 == CaloGain::INVALIDGAIN) gain1 = 0; // this is TileID::LOWGAIN; - commented out to make Coverity happy @@ -660,7 +663,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1 } else if (bad1 && !bad2) { // first channel is bad - ++m_drawerEvtStatus[ros1][drawer1].nMaskedChannels; + ++drawerEvtStatus[ros1][drawer1].nMaskedChannels; float ene2 = pCell->ene2(); pCell->setEnergy(ene2, ene2, gain2, gain2); // use energy/gain from second pmt for both pmts @@ -683,7 +686,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1 } else if (!bad1 && bad2) { // second channel is bad - ++m_drawerEvtStatus[ros2][drawer2].nMaskedChannels; + ++drawerEvtStatus[ros2][drawer2].nMaskedChannels; float ene1 = pCell->ene1(); pCell->setEnergy(ene1, ene1, gain1, gain1); // use energy/gain from first pmt for both pmts @@ -733,9 +736,13 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1 template<class ITERATOR, class COLLECTION> -void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, COLLECTION * coll) { - +void TileCellBuilderFromHit::build(TileDrawerEvtStatusArray& drawerEvtStatus, + const ITERATOR & begin, const ITERATOR & end, COLLECTION * coll, + TileCellContainer* MBTSCells, + TileCellContainer* E4prCells) const +{ // disable checks for TileID and remember previous state + // FIXME: const violation; MT problem. bool do_checks = m_tileID->do_checks(); m_tileID->set_do_checks(false); bool do_checks_tb = m_tileID->do_checks(); @@ -767,6 +774,16 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, bool overfit = false; float ener_min = (m_useNoiseTool) ? 1.0E-30F : 0.0; + std::vector<TileCell*> allCells (m_tileID->cell_hash_max(), nullptr); + std::vector<TileCell*> MBTSVec; //!< vector to of pointers to MBTS cells + if (MBTSCells) { + MBTSVec.resize (NCELLMBTS); + } + std::vector<TileCell*> E4prVec; //!< vector to of pointers to E4' cells + if (E4prCells) { + E4prVec.resize (NCELLE4PR); + } + for (ITERATOR hitItr = begin; hitItr != end; ++hitItr) { const TileHit* pHit = (*hitItr); @@ -857,13 +874,14 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, if (E4pr) { // E4' cells - if (m_E4prCells) { // do something with them only if contaier existst + if (E4prCells) { // do something with them only if contaier existst ++nE4pr; eE4prTot += ener; unsigned char iqual = iquality(qual); // for E4' cell qbit use only non_zero_time flag and check that energy is above standatd energy threshold in MeV - unsigned char qbit = qbits(ros, drawer, true, non_zero_time, (fabs(ener) > m_eneForTimeCut) + unsigned char qbit = qbits(drawerEvtStatus, + ros, drawer, true, non_zero_time, (fabs(ener) > m_eneForTimeCut) , overflow, underflow, overfit); CaloGain::CaloGain cgain = (gain == TileID::HIGHGAIN) ? CaloGain::TILEONEHIGH @@ -890,16 +908,16 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, << " qbit = 0x" << MSG::hex << (int) qbit << MSG::dec << endmsg; } - if (m_E4prVec[index]) { + if (E4prVec[index]) { msg(MSG::WARNING) << " double E4' cell_id=" << m_tileTBID->to_string(cell_id) << " ignoring previous value" << endmsg; } - m_E4prVec[index] = pCell; + E4prVec[index] = pCell; } } else if (MBTS) { // MBTS cells - if (m_MBTSCells) { // do something with them only if contaier existst + if (MBTSCells) { // do something with them only if contaier existst ++nMBTS; // convert energy to pCb @@ -910,7 +928,8 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, eMBTSTot += ener; unsigned char iqual = iquality(qual); // for MBTS qbit use AND of good_time and non_zero_time and check that energy is above MBTS energy threshold in pC - unsigned char qbit = qbits(ros, drawer, false, (good_time && non_zero_time) + unsigned char qbit = qbits(drawerEvtStatus, + ros, drawer, false, (good_time && non_zero_time) , (fabs(ener) > m_eneForTimeCutMBTS), overflow, underflow, overfit); CaloGain::CaloGain cgain = (gain == TileID::HIGHGAIN) ? CaloGain::TILEONEHIGH @@ -937,11 +956,11 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, << " qbit = 0x" << MSG::hex << (int) qbit << MSG::dec << endmsg; } - if (m_MBTSVec[index]) { + if (MBTSVec[index]) { msg(MSG::WARNING) << " double MBTS cell_id=" << m_tileTBID->to_string(cell_id) << " ignoring previous value" << endmsg; } - m_MBTSVec[index] = pCell; + MBTSVec[index] = pCell; } } else { @@ -949,7 +968,8 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, unsigned char iqual = iquality(qual); // for normal cell qbit use only non_zero_time flag and check that energy is above standard energy threshold in MeV - unsigned char qbit = qbits(ros, drawer, true, non_zero_time, (fabs(ener) > m_eneForTimeCut) + unsigned char qbit = qbits(drawerEvtStatus, + ros, drawer, true, non_zero_time, (fabs(ener) > m_eneForTimeCut) , overflow, underflow, overfit); if (E1_CELL && m_RUN2) { @@ -960,7 +980,7 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, int index2 = m_tileID->cell_hash(cell_id2); TileCell* pCell2 = NEWTILECELL(); ++nCell; - m_allCells[index2] = pCell2; + allCells[index2] = pCell2; const CaloDetDescrElement* dde2 = m_tileMgr->get_cell_element(index2); pCell2->set(dde2, cell_id2); pCell2->setEnergy_nonvirt(0.0, 0.0, CaloGain::INVALIDGAIN, CaloGain::INVALIDGAIN); @@ -973,13 +993,13 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, } } - TileCell* pCell = m_allCells[index]; + TileCell* pCell = allCells[index]; if (pCell) { ++nTwo; correctCell(pCell, 2, pmt, gain, ener, time, iqual, qbit); // correct & merge 2 PMTs in one cell } else { ++nCell; - m_allCells[index] = pCell = NEWTILECELL(); + allCells[index] = pCell = NEWTILECELL(); const CaloDetDescrElement* dde = m_tileMgr->get_cell_element(index); pCell->set(dde, cell_id); pCell->setEnergy_nonvirt(0, 0, CaloGain::INVALIDGAIN, CaloGain::INVALIDGAIN); @@ -1010,9 +1030,9 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, //** // Now store all TileCells //** - for (unsigned int index = 0; index < m_allCells.size(); ++index) { + for (unsigned int index = 0; index < allCells.size(); ++index) { - TileCell * pCell = m_allCells[index]; + TileCell * pCell = allCells[index]; const CaloDetDescrElement* dde = m_tileMgr->get_cell_element(index); if(!dde) { @@ -1038,7 +1058,7 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, ++nCell; if (!single_PMT) ++nTwo; - m_allCells[index] = pCell = NEWTILECELL(); + allCells[index] = pCell = NEWTILECELL(); pCell->set(dde, cell_id); pCell->setEnergy_nonvirt(ener_min, 0.0, TileID::HIGHGAIN, (Ecell)?3:TileID::HIGHGAIN); // reset energy completely @@ -1053,7 +1073,7 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, if (pCell) { // cell exists if (m_maskBadChannels) - if (maskBadChannels(pCell,single_PMT_C10,Ecell)) + if (maskBadChannels (drawerEvtStatus, pCell,single_PMT_C10,Ecell)) ATH_MSG_VERBOSE ( "cell with id=" << m_tileID->to_string(pCell->ID(), -2) << " bad channels masked, new energy=" << pCell->energy() ); @@ -1108,26 +1128,26 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, } } coll->push_back(pCell); // store cell in container - m_allCells[index] = 0; // clear pointer for next event + allCells[index] = 0; // clear pointer for next event } } - if (m_MBTSCells) { + if (MBTSCells) { for (int side = 0; side < NSIDE; ++side) { for (int phi = 0; phi < NPHI; ++phi) { for (int eta = 0; eta < NETA; ++eta) { int index=mbts_index(side,phi,eta); - TileCell * pCell = m_MBTSVec[index]; + TileCell * pCell = MBTSVec[index]; bool merged_MBTS = ( eta == 1 && (phi&1) == 1 && m_RUN2); // in RUN2 every second outer MBTS does not exist if (!pCell && !merged_MBTS) { ++nMBTS; - m_MBTSVec[index] = pCell = NEWTILECELL(); + MBTSVec[index] = pCell = NEWTILECELL(); Identifier cell_id = m_tileTBID->channel_id((side > 0) ? 1 : -1, phi, eta); pCell->set((m_mbtsMgr) ? m_mbtsMgr->get_element(cell_id) : NULL, cell_id); @@ -1138,29 +1158,29 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, } if (pCell) { - if (m_maskBadChannels && maskBadChannel(pCell)) + if (m_maskBadChannels && maskBadChannel (drawerEvtStatus, pCell)) ATH_MSG_VERBOSE ( "MBTS cell with id=" << m_tileTBID->to_string(pCell->ID()) << " bad channel masked, new energy=" << pCell->energy() ); - m_MBTSCells->push_back(pCell); // store cell in container - m_MBTSVec[index] = 0; // clear pointer for next event + MBTSCells->push_back(pCell); // store cell in container + MBTSVec[index] = 0; // clear pointer for next event } } } } } - if (m_E4prCells) { + if (E4prCells) { for (int phi = 0; phi < E4NPHI; ++phi) { int index = e4pr_index(phi); - TileCell * pCell = m_E4prVec[index]; + TileCell * pCell = E4prVec[index]; if (!pCell) { ++nE4pr; - m_E4prVec[index] = pCell = NEWTILECELL(); + E4prVec[index] = pCell = NEWTILECELL(); pCell->set(NULL, m_tileTBID->channel_id(E4SIDE, phi, E4ETA)); pCell->setEnergy_nonvirt(0.0, 0.0, CaloGain::TILEONEHIGH, CaloGain::INVALIDGAIN); // reset energy completely @@ -1170,12 +1190,12 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, } if (pCell) { - if (m_maskBadChannels && maskBadChannel(pCell)) + if (m_maskBadChannels && maskBadChannel (drawerEvtStatus, pCell)) ATH_MSG_VERBOSE ( "E4pr cell with id=" << m_tileTBID->to_string(pCell->ID()) << " bad channel masked, new energy=" << pCell->energy() ); - m_E4prCells->push_back(pCell); // store cell in container - m_E4prVec[index] = 0; // clear pointer for next event + E4prCells->push_back(pCell); // store cell in container + E4prVec[index] = 0; // clear pointer for next event } } } @@ -1188,10 +1208,10 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, << " nFake=" << nFake << " eneTot=" << eCellTot; - if (m_MBTSCells) + if (MBTSCells) msg(MSG::DEBUG) << " nMBTS=" << nMBTS << " eMBTS=" << eMBTSTot; - if (m_E4prCells) + if (E4prCells) msg(MSG::DEBUG) << " nE4pr=" << nE4pr << " eE4pr=" << eE4prTot;