From 55e5a92c7fe07240d08cb4a19b15a9472f510009 Mon Sep 17 00:00:00 2001 From: Alexandre Laurier <alexandre.laurier@cern.ch> Date: Fri, 17 Apr 2020 21:09:31 +0200 Subject: [PATCH] Manually sweep !31843 from 21.3 to master --- .../share/skeleton.FilterHit.py | 27 ++++- .../src/McEventCollectionFilter.cxx | 110 ++++++++++++++++-- .../src/McEventCollectionFilter.h | 19 ++- 3 files changed, 142 insertions(+), 14 deletions(-) diff --git a/Simulation/SimuJobTransforms/share/skeleton.FilterHit.py b/Simulation/SimuJobTransforms/share/skeleton.FilterHit.py index 9cbf7394613..b84d4eca1d7 100644 --- a/Simulation/SimuJobTransforms/share/skeleton.FilterHit.py +++ b/Simulation/SimuJobTransforms/share/skeleton.FilterHit.py @@ -173,13 +173,20 @@ else: # "CaloCalibrationHitContainer#TileCalibHitInactiveCell", # "CaloCalibrationHitContainer#TileCalibHitDeadMaterial" ] #CSC -Stream1.ItemList+=["CSCSimHitCollection#CSC_Hits"] +if DetFlags.detdescr.CSC_on(): + Stream1.ItemList+=["CSCSimHitCollection#CSC_Hits"] #MDT Stream1.ItemList+=["MDTSimHitCollection#MDT_Hits"] #RPC Stream1.ItemList+=["RPCSimHitCollection#RPC_Hits"] #TGC Stream1.ItemList+=["TGCSimHitCollection#TGC_Hits"] +#STGC +if DetFlags.detdescr.sTGC_on(): + Stream1.ItemList+=["sTGCSimHitCollection#sTGCSensitiveDetector"] +#MM +if DetFlags.detdescr.Micromegas_on(): + Stream1.ItemList+=["MMSimHitCollection#MicromegasSensitiveDetector"] #-------------------------------------------------------------- @@ -229,6 +236,8 @@ if hasattr(runArgs,'TruthReductionScheme'): AddressRemappingSvc.addInputRename("MDTSimHitCollection","MDT_Hits","MDT_HitsOLD") AddressRemappingSvc.addInputRename("RPCSimHitCollection","RPC_Hits","RPC_HitsOLD") AddressRemappingSvc.addInputRename("TGCSimHitCollection","TGC_Hits","TGC_HitsOLD") + AddressRemappingSvc.addInputRename("sTGCSimHitCollection","sTGCSensitiveDetector","sTGCSensitiveDetectorOLD") + AddressRemappingSvc.addInputRename("MMSimHitCollection","MicromegasSensitiveDetector","MicromegasSensitiveDetectorOLD") except: pass @@ -244,6 +253,22 @@ if hasattr(runArgs,'TruthReductionScheme'): McEventCollectionFilter.UseTRTHits = False except: filterHitLog.error('Trying to run on upgrade samples (no TRT) with an old tag of McEventCollectionFilter - job will fail.') + if not DetFlags.detdescr.CSC_on(): + try: + McEventCollectionFilter.UseCSCHits = False + except: + filterHitLog.error('Trying to run on upgrade samples (no CSC) with an old tag of McEventCollectionFilter - job will fail.') + ## For RUN3 geometries, turn on the NSW technologies. + if DetFlags.detdescr.sTGC_on(): + try: + McEventCollectionFilter.UseSTGCHits = True + except: + filterHitLog.error('Failed to add sTGC Hits to McEventCollectionFilter - job will fail.') + if DetFlags.detdescr.Micromegas_on(): + try: + McEventCollectionFilter.UseMMHits = True + except: + filterHitLog.error('Failed to add Micromega Hits to McEventCollectionFilter - job will fail.') topSequence += McEventCollectionFilter diff --git a/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.cxx b/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.cxx index a347b359273..a95a9c93d6c 100644 --- a/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.cxx +++ b/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.cxx @@ -13,6 +13,8 @@ #include "InDetSimEvent/SiHit.h" #include "MuonSimEvent/TGCSimHit.h" #include "MuonSimEvent/CSCSimHit.h" +#include "MuonSimEvent/sTGCSimHit.h" +#include "MuonSimEvent/MMSimHit.h" // CLHEP #include "CLHEP/Vector/LorentzVector.h" #include "CLHEP/Units/SystemOfUnits.h" @@ -28,22 +30,29 @@ McEventCollectionFilter::McEventCollectionFilter(const std::string& name, ISvcLo , m_inputPixelHits("StoreGateSvc+PixelHitsOLD") , m_inputSCTHits("StoreGateSvc+SCT_HitsOLD") , m_inputTRTHits("StoreGateSvc+TRTUncompressedHitsOLD") - , m_inputCSCHits("StoreGateSvc+CSCHitsOLD") - , m_inputMDTHits("StoreGateSvc+MDTHitsOLD") - , m_inputRPCHits("StoreGateSvc+RPCHitsOLD") - , m_inputTGCHits("StoreGateSvc+TGCHitsOLD") + , m_inputCSCHits("StoreGateSvc+CSC_HitsOLD") + , m_inputMDTHits("StoreGateSvc+MDT_HitsOLD") + , m_inputRPCHits("StoreGateSvc+RPC_HitsOLD") + , m_inputTGCHits("StoreGateSvc+TGC_HitsOLD") + , m_inputSTGCHits("StoreGateSvc+sTGCSensitiveDetectorOLD") + , m_inputMMHits("StoreGateSvc+MicromegasSensitiveDetectorOLD") , m_outputTruthCollection("StoreGateSvc+TruthEvent") , m_outputBCMHits("StoreGateSvc+BCMHits") , m_outputPixelHits("StoreGateSvc+PixelHits") , m_outputSCTHits("StoreGateSvc+SCT_Hits") , m_outputTRTHits("StoreGateSvc+TRTUncompressedHits") - , m_outputCSCHits("StoreGateSvc+CSCHits") - , m_outputMDTHits("StoreGateSvc+MDTHits") - , m_outputRPCHits("StoreGateSvc+RPCHits") - , m_outputTGCHits("StoreGateSvc+TGCHits") + , m_outputCSCHits("StoreGateSvc+CSC_Hits") + , m_outputMDTHits("StoreGateSvc+MDT_Hits") + , m_outputRPCHits("StoreGateSvc+RPC_Hits") + , m_outputTGCHits("StoreGateSvc+TGC_Hits") + , m_outputSTGCHits("StoreGateSvc+sTGCSensitiveDetector") + , m_outputMMHits("StoreGateSvc+MicromegasSensitiveDetector") , m_IsKeepTRTElect(false) , m_PileupPartPDGID(999) //Geantino , m_UseTRTHits(true) + , m_UseCSCHits(true) // On unless RUN3 symmetric layout + , m_UseSTGCHits(false) // Off unless RUN3 layout + , m_UseMMHits(false) // Off unless RUN3 layout , m_RefBarcode(0) { declareProperty("TruthInput" , m_inputTruthCollection); @@ -64,9 +73,16 @@ McEventCollectionFilter::McEventCollectionFilter(const std::string& name, ISvcLo declareProperty("RPCHitsOutput" , m_outputRPCHits); declareProperty("TGCHitsInput" , m_inputTGCHits); declareProperty("TGCHitsOutput" , m_outputTGCHits); + declareProperty("sTGCHitsInput" , m_inputSTGCHits); + declareProperty("sTGCHitsOutput" , m_outputSTGCHits); + declareProperty("MMHitsInput" , m_inputMMHits); + declareProperty("MMHitsOutput" , m_outputMMHits); declareProperty("IsKeepTRTElect" , m_IsKeepTRTElect); declareProperty("PileupPartPDGID" , m_PileupPartPDGID); declareProperty("UseTRTHits" , m_UseTRTHits); + declareProperty("UseCSCHits" , m_UseCSCHits); + declareProperty("UseSTGCHits" , m_UseSTGCHits); + declareProperty("UseMMHits" , m_UseMMHits); } @@ -110,7 +126,9 @@ StatusCode McEventCollectionFilter::execute(){ ATH_CHECK( MDTHitsTruthRelink() ); //.......to relink all CSC hits to the new particle - ATH_CHECK( CSCHitsTruthRelink() ); + if(m_UseCSCHits) { + ATH_CHECK( CSCHitsTruthRelink() ); + } //.......to relink all RPC hits to the new particle ATH_CHECK( RPCHitsTruthRelink() ); @@ -118,6 +136,16 @@ StatusCode McEventCollectionFilter::execute(){ //.......to relink all TGC hits to the new particle ATH_CHECK( TGCHitsTruthRelink() ); + //.......to relink all sTGC hits to the new particle + if(m_UseSTGCHits) { + ATH_CHECK( STGC_HitsTruthRelink() ); + } + + //.......to relink all MM hits to the new particle + if(m_UseMMHits) { + ATH_CHECK( MM_HitsTruthRelink() ); + } + ATH_MSG_DEBUG( "succeded McEventCollectionFilter ..... " ); return StatusCode::SUCCESS; @@ -473,6 +501,70 @@ StatusCode McEventCollectionFilter::TGCHitsTruthRelink(){ return StatusCode::SUCCESS; } +//-------------------------------------------------------- +StatusCode McEventCollectionFilter::STGC_HitsTruthRelink(){ + //-------------------------------------------------------- + //.......to relink all sTGC hits to the new particle + //-------------------------------------------------------- + if(!m_inputSTGCHits.isValid()) + { + ATH_MSG_ERROR( "Could not find sTGCSimHitCollection"); + return StatusCode::FAILURE; + } + ATH_MSG_DEBUG( "Found sTGCSimHitCollection"); + + if (!m_outputSTGCHits.isValid()) m_outputSTGCHits = std::make_unique<sTGCSimHitCollection>(); + for(sTGCSimHitConstIterator i=m_inputSTGCHits->begin();i!=m_inputSTGCHits->end();++i){ + const HepMcParticleLink oldLink = (*i).particleLink(); + int curBarcode=0; + if(oldLink.barcode()!=0) curBarcode=m_RefBarcode; + HepMcParticleLink partLink(curBarcode, oldLink.eventIndex(), oldLink.getEventCollection()); + + int id = (*i).sTGCId(); + double time = (*i).globalTime(); + Amg::Vector3D pos = (*i).globalPosition(); + int pdgID = (*i).particleEncoding(); + Amg::Vector3D dir = (*i).globalDirection(); + double enDeposit = (*i).depositEnergy(); + + m_outputSTGCHits->Emplace(id,time,pos,pdgID,dir,enDeposit,partLink); + } + + return StatusCode::SUCCESS; +} + +//-------------------------------------------------------- +StatusCode McEventCollectionFilter::MM_HitsTruthRelink(){ + //-------------------------------------------------------- + //.......to relink all MM hits to the new particle + //-------------------------------------------------------- + if(!m_inputMMHits.isValid()) + { + ATH_MSG_ERROR( "Could not find MMSimHitCollection"); + return StatusCode::FAILURE; + } + ATH_MSG_DEBUG( "Found MMSimHitCollection"); + + if (!m_outputMMHits.isValid()) m_outputMMHits = std::make_unique<MMSimHitCollection>(); + for(MMSimHitConstIterator i=m_outputMMHits->begin();i!=m_outputMMHits->end();++i){ + const HepMcParticleLink oldLink = (*i).particleLink(); + int curBarcode=0; + if(oldLink.barcode()!=0) curBarcode=m_RefBarcode; + HepMcParticleLink partLink(curBarcode, oldLink.eventIndex(), oldLink.getEventCollection()); + + int id = (*i).MMId(); + double time = (*i).globalTime(); + Amg::Vector3D pos = (*i).globalPosition(); + int pdgID = (*i).particleEncoding(); + double kinEnergy = (*i).kineticEnergy(); + Amg::Vector3D dir = (*i).globalDirection(); + double enDeposit = (*i).depositEnergy(); + + m_outputMMHits->Emplace(id,time,pos,pdgID,kinEnergy,dir,enDeposit,partLink); + } + + return StatusCode::SUCCESS; +} //-------------------------------------------------------- StatusCode McEventCollectionFilter::FindTRTElectronHits() diff --git a/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.h b/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.h index dad034f0900..a000f0f0d33 100644 --- a/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.h +++ b/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.h @@ -16,6 +16,8 @@ #include "MuonSimEvent/RPCSimHitCollection.h" #include "MuonSimEvent/TGCSimHitCollection.h" #include "MuonSimEvent/CSCSimHitCollection.h" +#include "MuonSimEvent/sTGCSimHitCollection.h" +#include "MuonSimEvent/MMSimHitCollection.h" // std library includes #include <string> @@ -42,6 +44,8 @@ private: StatusCode CSCHitsTruthRelink(); StatusCode RPCHitsTruthRelink(); StatusCode TGCHitsTruthRelink(); + StatusCode STGC_HitsTruthRelink(); + StatusCode MM_HitsTruthRelink(); SG::ReadHandle<McEventCollection> m_inputTruthCollection; SG::ReadHandle<SiHitCollection> m_inputBCMHits; @@ -52,20 +56,27 @@ private: SG::ReadHandle<MDTSimHitCollection> m_inputMDTHits; SG::ReadHandle<RPCSimHitCollection> m_inputRPCHits; SG::ReadHandle<TGCSimHitCollection> m_inputTGCHits; + SG::ReadHandle<sTGCSimHitCollection> m_inputSTGCHits; + SG::ReadHandle<MMSimHitCollection> m_inputMMHits; SG::WriteHandle<McEventCollection> m_outputTruthCollection; SG::WriteHandle<SiHitCollection> m_outputBCMHits; SG::WriteHandle<SiHitCollection> m_outputPixelHits; SG::WriteHandle<SiHitCollection> m_outputSCTHits; SG::WriteHandle<TRTUncompressedHitCollection> m_outputTRTHits; - SG::WriteHandle<CSCSimHitCollection> m_outputCSCHits; - SG::WriteHandle<MDTSimHitCollection> m_outputMDTHits; - SG::WriteHandle<RPCSimHitCollection> m_outputRPCHits; - SG::WriteHandle<TGCSimHitCollection> m_outputTGCHits; + SG::WriteHandle<CSCSimHitCollection> m_outputCSCHits; + SG::WriteHandle<MDTSimHitCollection> m_outputMDTHits; + SG::WriteHandle<RPCSimHitCollection> m_outputRPCHits; + SG::WriteHandle<TGCSimHitCollection> m_outputTGCHits; + SG::WriteHandle<sTGCSimHitCollection> m_outputSTGCHits; + SG::WriteHandle<MMSimHitCollection> m_outputMMHits; bool m_IsKeepTRTElect; int m_PileupPartPDGID; bool m_UseTRTHits; + bool m_UseCSCHits; + bool m_UseSTGCHits; + bool m_UseMMHits; //--------------------- //std::string m_HitName; int m_RefBarcode; -- GitLab