diff --git a/Simulation/SimuJobTransforms/share/skeleton.FilterHit.py b/Simulation/SimuJobTransforms/share/skeleton.FilterHit.py index b6269fcd9b3b51047173f449424eb731323f5329..1201c0aee5a6a75b35bde9c6626946b002fd4fbf 100644 --- a/Simulation/SimuJobTransforms/share/skeleton.FilterHit.py +++ b/Simulation/SimuJobTransforms/share/skeleton.FilterHit.py @@ -171,13 +171,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"] Stream1.ForceRead = True @@ -228,6 +235,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","sTGCSensitiveDetectorOLD") except: pass @@ -243,6 +252,23 @@ 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.') + ## For RUN3 geometries the CSC may be removed, so should be switched off. + 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 3ec7568759d6ccdb371a132bc70476ac9fbd8cc8..c091c6082ce964ade921fbfbfd06949ede90d790 100644 --- a/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.cxx +++ b/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ ////////////////////////////////////////////////////////////////////////// @@ -18,8 +18,12 @@ #include "MuonSimEvent/RPCSimHitCollection.h" #include "MuonSimEvent/TGCSimHitCollection.h" #include "MuonSimEvent/CSCSimHitCollection.h" +#include "MuonSimEvent/sTGCSimHitCollection.h" +#include "MuonSimEvent/MMSimHitCollection.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" @@ -35,6 +39,9 @@ McEventCollectionFilter::McEventCollectionFilter(const std::string& name, ISvcLo declareProperty("McEventCollection" , m_mcEventCollection = "TruthEvent"); declareProperty("PileupPartPDGID" , m_PileupPartPDGID = 999); //Geantino declareProperty("UseTRTHits" , m_UseTRTHits = true); // + declareProperty("UseCSCHits" , m_UseCSCHits = true); // If symmetric RUN3, CSCs are turned off, otherwise default to on + declareProperty("UseSTGCHits" , m_UseSTGCHits = false); // Both NSW technologies are turned off by default. They are turned automatically if RUN3 geometry is used. + declareProperty("UseMMHits" , m_UseMMHits = false); // m_RefBarcode=0; } @@ -68,24 +75,36 @@ StatusCode McEventCollectionFilter::execute(){ ATH_CHECK( ReduceMCEventCollection() ); //.......to relink all Si hits to the new particle - ATH_CHECK( SiHistsTruthRelink() ); + ATH_CHECK( SiHitsTruthRelink() ); //.......to relink all TRT hits to the new particle if(m_UseTRTHits) { - ATH_CHECK( TRTHistsTruthRelink() ); + ATH_CHECK( TRTHitsTruthRelink() ); } //.......to relink all MDT hits to the new particle - ATH_CHECK( MDTHistsTruthRelink() ); + ATH_CHECK( MDTHitsTruthRelink() ); //.......to relink all CSC hits to the new particle - ATH_CHECK( CSCHistsTruthRelink() ); + if(m_UseCSCHits) { + ATH_CHECK( CSCHitsTruthRelink() ); + } //.......to relink all RPC hits to the new particle - ATH_CHECK( RPCHistsTruthRelink() ); + ATH_CHECK( RPCHitsTruthRelink() ); //.......to relink all TGC hits to the new particle - ATH_CHECK( TGCHistsTruthRelink() ); + 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 ..... " ); @@ -204,7 +223,7 @@ StatusCode McEventCollectionFilter::ReduceMCEventCollection(){ } //-------------------------------------------------------- -StatusCode McEventCollectionFilter::SiHistsTruthRelink(){ +StatusCode McEventCollectionFilter::SiHitsTruthRelink(){ //-------------------------------------------------------- //.......to relink all Si hits to the new particle //-------------------------------------------------------- @@ -259,7 +278,7 @@ StatusCode McEventCollectionFilter::SiHistsTruthRelink(){ } //-------------------------------------------------------- -StatusCode McEventCollectionFilter::TRTHistsTruthRelink(){ +StatusCode McEventCollectionFilter::TRTHitsTruthRelink(){ //-------------------------------------------------------- //.......to relink all TRT hits to the new particle //-------------------------------------------------------- @@ -316,7 +335,7 @@ StatusCode McEventCollectionFilter::TRTHistsTruthRelink(){ } //-------------------------------------------------------- -StatusCode McEventCollectionFilter::MDTHistsTruthRelink(){ +StatusCode McEventCollectionFilter::MDTHitsTruthRelink(){ //-------------------------------------------------------- //.......to relink all MDT hits to the new particle //-------------------------------------------------------- @@ -368,7 +387,7 @@ StatusCode McEventCollectionFilter::MDTHistsTruthRelink(){ } //-------------------------------------------------------- -StatusCode McEventCollectionFilter::CSCHistsTruthRelink(){ +StatusCode McEventCollectionFilter::CSCHitsTruthRelink(){ //-------------------------------------------------------- //.......to relink all CSC hits to the new particle //-------------------------------------------------------- @@ -417,7 +436,7 @@ StatusCode McEventCollectionFilter::CSCHistsTruthRelink(){ } //-------------------------------------------------------- -StatusCode McEventCollectionFilter::RPCHistsTruthRelink(){ +StatusCode McEventCollectionFilter::RPCHitsTruthRelink(){ //-------------------------------------------------------- //.......to relink all RPC hits to the new particle //-------------------------------------------------------- @@ -467,7 +486,7 @@ StatusCode McEventCollectionFilter::RPCHistsTruthRelink(){ } //-------------------------------------------------------- -StatusCode McEventCollectionFilter::TGCHistsTruthRelink(){ +StatusCode McEventCollectionFilter::TGCHitsTruthRelink(){ //-------------------------------------------------------- //.......to relink all TGC hits to the new particle //-------------------------------------------------------- @@ -513,6 +532,97 @@ StatusCode McEventCollectionFilter::TGCHistsTruthRelink(){ return StatusCode::SUCCESS; } +//-------------------------------------------------------- +StatusCode McEventCollectionFilter::STGC_HitsTruthRelink(){ +//-------------------------------------------------------- +//.......to relink all STGC hits to the new particle +//-------------------------------------------------------- + m_HitName="sTGCSensitiveDetector"; + const DataHandle<sTGCSimHitCollection> pSTGCHitColl; + + if(evtStore()->contains<sTGCSimHitCollection>(m_HitName)) { + ATH_CHECK( evtStore()->retrieve(pSTGCHitColl, m_HitName) ); + } else { + ATH_MSG_ERROR( "Could not find sTGCSimHitCollection containing " << m_HitName ); + return StatusCode::FAILURE; + } + + sTGCSimHitCollection* pSTGCHitC = const_cast<sTGCSimHitCollection*> (&*pSTGCHitColl); + + //.......Create new sTGCSimHitCollection + sTGCSimHitCollection* pSTGCHitCollNew = new sTGCSimHitCollection(); + + for(sTGCSimHitConstIterator i=pSTGCHitColl->begin();i!=pSTGCHitColl->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(); + + pSTGCHitCollNew->Emplace(id,time,pos,pdgID,dir,enDeposit,partLink); + + } + + //.......remove old sTGCSimHitCollection + ATH_CHECK( evtStore()->remove(pSTGCHitC) ); + + //.......write new sTGCSimHitCollection + ATH_CHECK( evtStore()->record(pSTGCHitCollNew,m_HitName) ); + return StatusCode::SUCCESS; +} + +//-------------------------------------------------------- +StatusCode McEventCollectionFilter::MM_HitsTruthRelink(){ +//-------------------------------------------------------- +//.......to relink all MM hits to the new particle +//-------------------------------------------------------- + m_HitName="MicromegasSensitiveDetector"; + const DataHandle<MMSimHitCollection> pMMHitColl; + + if(evtStore()->contains<MMSimHitCollection>(m_HitName)) { + ATH_CHECK( evtStore()->retrieve(pMMHitColl, m_HitName) ); + } else { + ATH_MSG_ERROR( "Could not find MMSimHitCollection containing " << m_HitName ); + return StatusCode::FAILURE; + } + + MMSimHitCollection* pMMHitC = const_cast<MMSimHitCollection*> (&*pMMHitColl); + + //.......Create new MMSimHitCollection + MMSimHitCollection* pMMHitCollNew = new MMSimHitCollection(); + + for(MMSimHitConstIterator i=pMMHitColl->begin();i!=pMMHitColl->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(); + + pMMHitCollNew->Emplace(id,time,pos,pdgID,kinEnergy,dir,enDeposit,partLink); + + } + + //.......remove old MMSimHitCollection + ATH_CHECK( evtStore()->remove(pMMHitC) ); + + //.......write new MMSimHitCollection + ATH_CHECK( evtStore()->record(pMMHitCollNew,m_HitName) ); + return StatusCode::SUCCESS; +} + //-------------------------------------------------------- StatusCode McEventCollectionFilter::FindTRTElectronHits(){ diff --git a/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.h b/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.h index d35b9a158c388a617adfd1362cb5390bdb51518e..b89c938e556cc4cecb73a692dc670bc5e86207a7 100644 --- a/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.h +++ b/Simulation/Tools/McEventCollectionFilter/src/McEventCollectionFilter.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef MCEVENTCOLLECTIONFILTER_H @@ -26,17 +26,22 @@ public: StatusCode ReduceMCEventCollection(); StatusCode FindTRTElectronHits(); - StatusCode SiHistsTruthRelink(); - StatusCode TRTHistsTruthRelink(); - StatusCode MDTHistsTruthRelink(); - StatusCode CSCHistsTruthRelink(); - StatusCode RPCHistsTruthRelink(); - StatusCode TGCHistsTruthRelink(); + StatusCode SiHitsTruthRelink(); + StatusCode TRTHitsTruthRelink(); + StatusCode MDTHitsTruthRelink(); + StatusCode CSCHitsTruthRelink(); + StatusCode RPCHitsTruthRelink(); + StatusCode TGCHitsTruthRelink(); + StatusCode STGC_HitsTruthRelink(); + StatusCode MM_HitsTruthRelink(); bool m_IsKeepTRTElect; std::string m_mcEventCollection; int m_PileupPartPDGID; bool m_UseTRTHits; + bool m_UseCSCHits; + bool m_UseSTGCHits; + bool m_UseMMHits; //--------------------- std::string m_HitName; int m_RefBarcode;