Skip to content
Snippets Groups Projects
Commit 6c374fb9 authored by Vakhtang Tsulaia's avatar Vakhtang Tsulaia
Browse files

Merge branch 'BCM_DigitizationMTRNG' into 'master'

Switch BCM_DigitizationTool to use IAthRNGSvc

See merge request !20286
parents 8c5e14a2 37258f93
No related branches found
No related tags found
9 merge requests!58791DataQualityConfigurations: Modify L1Calo config for web display,!46784MuonCondInterface: Enable thread-safety checking.,!46776Updated LArMonitoring config file for WD to match new files produced using MT,!45405updated ART test cron job,!42417Draft: DIRE and VINCIA Base Fragments for Pythia 8.3,!28528Revert 63f845ae,!27054Atr20369 210,!26342Monopole: Handle fractionally charged particles,!20286Switch BCM_DigitizationTool to use IAthRNGSvc
......@@ -29,10 +29,10 @@ atlas_add_component( BCM_Digitization
LINK_LIBRARIES ${CLHEP_LIBRARIES} GaudiKernel AthenaBaseComps AthenaKernel PileUpToolsLib xAODEventInfo GeneratorObjects InDetBCM_RawData InDetSimData InDetSimEvent )
atlas_add_test( BCM_DigitizationConfigNew_test
SCRIPT python/BCM_DigitizationConfigNew_test.py
SCRIPT test/BCM_DigitizationConfigNew_test.py
PROPERTIES TIMEOUT 300 )
# Install files from the package:
atlas_install_python_modules( python/*.py )
atlas_install_joboptions( share/*.py )
atlas_install_joboptions( share/*.py test/*.py )
......@@ -29,9 +29,6 @@ def BCM_DigitizationTool(name="BCM_DigitizationTool",**kwargs):
kwargs.setdefault("MIPDeposit", 0.33) # BCM with diamond
#kwargs.setdefault("MIPDeposit", 0.25) # BCM with graphite
kwargs.setdefault("RndmSvc", digitizationFlags.rndmSvc() )
digitizationFlags.rndmSeedList.addSeed("BCM_Digitization", 49261510, 105132394)
if digitizationFlags.doXingByXingPileUp():
kwargs.setdefault("FirstXing", BCM_FirstXing() )
kwargs.setdefault("LastXing", BCM_LastXing() )
......
......@@ -21,7 +21,7 @@ def BCM_DigitizationToolCfg(configFlags, name="BCM_DigitizationTool", **kwargs):
Engine = configFlags.Random.Engine
acc.merge(RNG(Engine))
# Build the argument dict
kwargs.setdefault("RndmSvc", AthEngines[Engine])
kwargs.setdefault("RndmSvc", "AthRNGSvc")
kwargs.setdefault("HitCollName", "BCMHits")
if configFlags.Digitization.DoInnerDetectorNoise:
kwargs.setdefault("ModNoise", [90.82] * 8)
......
......@@ -5,8 +5,12 @@
#include "BCM_DigitizationTool.h"
#include "AthenaKernel/errorcheck.h"
#include "AthenaKernel/IAtRndmGenSvc.h"
#include "AthenaKernel/RNGWrapper.h"
// CLHEP includes
#include "CLHEP/Random/RandomEngine.h"
#include "CLHEP/Random/RandGaussZiggurat.h"
#include "GeneratorObjects/HepMcParticleLink.h"
#include "InDetBCM_RawData/BCM_RawData.h"
#include "InDetBCM_RawData/BCM_RDO_Collection.h"
......@@ -23,19 +27,15 @@
//----------------------------------------------------------------------
BCM_DigitizationTool::BCM_DigitizationTool(const std::string &type, const std::string &name, const IInterface *parent) :
PileUpToolBase(type,name,parent),
m_rndmEngine(NULL),
m_mipDeposit(0.0f),
m_effPrmDistance(0.0f),
m_effPrmSharpness(0.0f),
m_timeDelay(0.0f),
m_rdoContainer(NULL),
m_simDataCollMap(NULL),
m_rndmEngineName("BCM_Digitization"),
m_mergeSvc(NULL), //("PileUpMergeSvc",name),
m_atRndmGenSvc("AtRndmGenSvc",name)
m_mergeSvc(NULL) //("PileUpMergeSvc",name)
{
//declareProperty("PileupMergeSvc", m_mergeSvc, "Pileup merging service");
declareProperty("RndmSvc", m_atRndmGenSvc, "Random number service used in BCM digitization");
declareProperty("HitCollName", m_hitCollName="BCMHits", "Input simulation hits collection name");
declareProperty("ModNoise", m_modNoise, "RMS noise averaged over modules");
declareProperty("ModSignal", m_modSignal, "Average MIP signal in modules");
......@@ -54,12 +54,7 @@ StatusCode BCM_DigitizationTool::initialize()
ATH_MSG_VERBOSE ( "initialize()");
// get random service
CHECK(m_atRndmGenSvc.retrieve());
m_rndmEngine = m_atRndmGenSvc->GetEngine(m_rndmEngineName) ;
if (m_rndmEngine==0) {
ATH_MSG_ERROR ( "Could not find RndmEngine : " << m_rndmEngineName );
return StatusCode::FAILURE ;
}
ATH_CHECK(m_rndmGenSvc.retrieve());
return StatusCode::SUCCESS;
}
......@@ -101,19 +96,19 @@ StatusCode BCM_DigitizationTool::createOutputContainers()
//----------------------------------------------------------------------
void BCM_DigitizationTool::processSiHit(const SiHit &currentHit, double eventTime, unsigned int evtIndex)
{
int moduleNo = currentHit.getLayerDisk();
float enerDep = computeEnergy(currentHit.energyLoss(), currentHit.localStartPosition(), currentHit.localEndPosition());
float hitTime = currentHit.meanTime() + eventTime + m_timeDelay;
const int moduleNo = currentHit.getLayerDisk();
const float enerDep = computeEnergy(currentHit.energyLoss(), currentHit.localStartPosition(), currentHit.localEndPosition());
const float hitTime = currentHit.meanTime() + eventTime + m_timeDelay;
// Fill vectors with hit info
m_enerVect[moduleNo].push_back(enerDep);
m_timeVect[moduleNo].push_back(hitTime);
// Create new deposit and add to vector
InDetSimData::Deposit deposit(HepMcParticleLink(currentHit.trackNumber(), evtIndex),currentHit.energyLoss());
int barcode = deposit.first.barcode();
HepMcParticleLink particleLink(currentHit.trackNumber(), evtIndex);
const int barcode = particleLink.barcode();
if (barcode == 0 || barcode == 10001){
return;
}
m_depositVect[moduleNo].push_back(deposit);
m_depositVect[moduleNo].emplace_back(particleLink,currentHit.energyLoss());
return;
}
......@@ -122,11 +117,15 @@ void BCM_DigitizationTool::processSiHit(const SiHit &currentHit, double eventTim
//----------------------------------------------------------------------
void BCM_DigitizationTool::createRDOsAndSDOs()
{
// Set the RNG to use for this event.
ATHRNG::RNGWrapper* rngWrapper = m_rndmGenSvc->getEngine(this);
rngWrapper->setSeed( name(), Gaudi::Hive::currentContext() );
// Digitize hit info and create RDO for each module
for (int iMod=0; iMod<8; ++iMod) {
if (m_depositVect[iMod].size()) m_simDataCollMap->insert(std::make_pair(Identifier(iMod), InDetSimData(m_depositVect[iMod])));
std::vector<float> analog = createAnalog(iMod,m_enerVect[iMod],m_timeVect[iMod]);
addNoise(iMod,analog);
addNoise(iMod,analog, *rngWrapper);
for (int iGain=0; iGain<2; ++iGain) {
std::bitset<64> digital = applyThreshold(iGain*8+iMod,analog);
int p1x,p1w,p2x,p2w;
......@@ -300,9 +299,9 @@ std::vector<float> BCM_DigitizationTool::createAnalog(int iMod, std::vector<floa
//----------------------------------------------------------------------
// AddNoise method:
//----------------------------------------------------------------------
void BCM_DigitizationTool::addNoise(int iMod, std::vector<float> &analog)
void BCM_DigitizationTool::addNoise(int iMod, std::vector<float> &analog, CLHEP::HepRandomEngine* randomEngine)
{
for (unsigned int iBin=0; iBin<analog.size(); ++iBin) analog[iBin]+=CLHEP::RandGaussZiggurat::shoot(m_rndmEngine,0.,m_modNoise[iMod]);
for (unsigned int iBin=0; iBin<analog.size(); ++iBin) analog[iBin]+=CLHEP::RandGaussZiggurat::shoot(randomEngine,0.,m_modNoise[iMod]);
}
//----------------------------------------------------------------------
......
......@@ -6,7 +6,7 @@
#define BCM_DIGITIZATION_BCM_DIGITIZATIONTOOL_H
#include "PileUpTools/PileUpToolBase.h"
#include "AthenaKernel/IAtRndmGenSvc.h"
#include "AthenaKernel/IAthRNGSvc.h"
#include "GaudiKernel/ServiceHandle.h"
......@@ -62,7 +62,7 @@ class BCM_DigitizationTool : public PileUpToolBase {
std::vector<float> createAnalog(int mod, std::vector<float> enerVect, std::vector<float> timeVect);
/** Add noise to analog waveform */
void addNoise(int mod, std::vector<float> &analog);
void addNoise(int mod, std::vector<float> &analog, CLHEP::HepRandomEngine *randomEngine);
/** Do ToT digitization */
std::bitset<64> applyThreshold(int chan, std::vector<float> analog);
......@@ -76,7 +76,6 @@ class BCM_DigitizationTool : public PileUpToolBase {
/** Create raw data object and put it in the container */
void fillRDO(unsigned int chan, int p1x, int p1w, int p2x, int p2w);
CLHEP::HepRandomEngine *m_rndmEngine; //!< Random number engine used
// Digitization parameters
std::string m_hitCollName; //!< Input simulation hit collection name
std::vector<float> m_modNoise; //!< RMS Gaussian noise
......@@ -91,9 +90,8 @@ class BCM_DigitizationTool : public PileUpToolBase {
BCM_RDO_Container* m_rdoContainer; //!< Output RDO container
InDetSimDataCollection* m_simDataCollMap; //!< Output SDO map
std::string m_rndmEngineName; //!< Name of random engine
PileUpMergeSvc* m_mergeSvc; //!< Handle for pileup merging service
ServiceHandle<IAtRndmGenSvc> m_atRndmGenSvc; //!< Handle for random number service
ServiceHandle<IAthRNGSvc> m_rndmGenSvc{this, "RndmSvc", "AthRNGSvc", ""}; //!< Random number service
// Vectors to store G4 hit information
std::vector<float> m_enerVect[8]; //!< G4 hit energies, weighted
......
......@@ -11,28 +11,30 @@ from AthenaConfiguration.AllConfigFlags import ConfigFlags
from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg
from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
from BCM_DigitizationConfigFlags import createBCMCfgFlags
from BCM_DigitizationConfigNew import BCM_DigitizationCfg
from BCM_Digitization.BCM_DigitizationConfigFlags import createBCMCfgFlags
from BCM_Digitization.BCM_DigitizationConfigNew import BCM_DigitizationCfg
from TrigUpgradeTest.InDetConfig import InDetGMConfig # FIXME This module would ideally be located somewhere else
# Set up logging and new style config
log.setLevel(DEBUG)
Configurable.configurableRun3Behavior = True
# Provide input
dataDir = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art"
inputDir = os.environ.get("ATLAS_REFERENCE_DATA", dataDir)
fileDir = "/SimCoreTests/e_E50_eta34_49.EVNT.pool.root"
fileDir = "/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1"
ConfigFlags.Input.Files = [inputDir + fileDir]
# Specify output
ConfigFlags.Output.HITFileName = "myHITS.pool.root"
ConfigFlags.Output.RDOFileName = "myRDO.pool.root"
ConfigFlags.lock()
# Construct ComponentAccumulator
cfg = MainServicesSerialCfg()
cfg.merge(PoolReadCfg(ConfigFlags))
cfg.merge(InDetGMConfig(ConfigFlags)) # FIXME This sets up the whole ID geometry would be nicer just to set up min required for BCM
# Use BCM tools
BCMflags = createBCMCfgFlags()
acc = BCM_DigitizationCfg(BCMflags)
cfg.merge(acc)
# Add configuration to write HITS pool file
outConfig = OutputStreamCfg(ConfigFlags, "HITS",
outConfig = OutputStreamCfg(ConfigFlags, "RDO",
ItemList=["InDetSimDataCollection#*", "BCM_RDO_Container#*"])
cfg.merge(outConfig)
cfg.getService("StoreGateSvc").Dump=True
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment