diff --git a/ForwardDetectors/ZDC/ZDC_SimuDigitization/ZDC_SimuDigitization/ZDC_PileUpTool.h b/ForwardDetectors/ZDC/ZDC_SimuDigitization/ZDC_SimuDigitization/ZDC_PileUpTool.h index 7f866ce82a04cb92683f8879485e6f5faa8ee4e4..54f37e31541883ce7d82f5afb4f7b56ade171471 100644 --- a/ForwardDetectors/ZDC/ZDC_SimuDigitization/ZDC_SimuDigitization/ZDC_PileUpTool.h +++ b/ForwardDetectors/ZDC/ZDC_SimuDigitization/ZDC_SimuDigitization/ZDC_PileUpTool.h @@ -106,7 +106,8 @@ public: Gaudi::Property<bool > m_LTQuadStepFilt {this, "LTQuadStepFilt" , false , "Use LT Quad Step Filter waveform for ZDC channels" }; Gaudi::Property<bool > m_delayChannels {this, "delayChannels" , false , "Include delayed channels in the output" }; Gaudi::Property<bool > m_doRPD {this, "doRPD" , false , "Include RPD channels in the output" }; - + Gaudi::Property<bool > m_doBRAN {this, "doBRAN" , false , "Include BRAN channels in the output" }; + }; #endif diff --git a/ForwardDetectors/ZDC/ZDC_SimuDigitization/src/ZDC_PileUpTool.cxx b/ForwardDetectors/ZDC/ZDC_SimuDigitization/src/ZDC_PileUpTool.cxx index a08f524007f90afc8d81fd5cf6ae378cc1a533fb..d2e45099a64c62eaf7e758cff795310311c6e7cd 100644 --- a/ForwardDetectors/ZDC/ZDC_SimuDigitization/src/ZDC_PileUpTool.cxx +++ b/ForwardDetectors/ZDC/ZDC_SimuDigitization/src/ZDC_PileUpTool.cxx @@ -69,6 +69,7 @@ void ZDC_PileUpTool::initializePbPb2015(){ m_delayChannels = true; m_LTQuadStepFilt = true; m_doRPD = false; + m_doBRAN = false; m_zdct0 = 28; m_qsfRiseTime = 0.5; m_qsfFallTime = 11; @@ -83,6 +84,7 @@ void ZDC_PileUpTool::initializeLHCf2022(){ m_delayChannels = false; m_LTQuadStepFilt = false; m_doRPD = false; + m_doBRAN = false; m_zdct0 = 28; m_rpdt0 = 28; m_zdcRiseTime = 1; @@ -98,14 +100,15 @@ void ZDC_PileUpTool::initializePbPb2023(){ m_delayChannels = false; m_LTQuadStepFilt = false; m_doRPD = true; - m_zdct0 = 28; - m_rpdt0 = 28; - m_zdcRiseTime = 1; - m_zdcFallTime = 5.5; - m_rpdRiseTime = 0.9; - m_rpdFallTime = 20; + m_doBRAN = true; + m_zdct0 = 31.2; + m_rpdt0 = 27.9; + m_zdcRiseTime = 1.1; + m_zdcFallTime = 4.5; + m_rpdRiseTime = 0.8; + m_rpdFallTime = 8.4; m_zdcAdcPerPhoton = 0.000498; - m_rpdAdcPerPhoton = 1.0; + m_rpdAdcPerPhoton = 3.5; } StatusCode ZDC_PileUpTool::processAllSubEvents(const EventContext& ctx){ @@ -266,33 +269,43 @@ void ZDC_PileUpTool::fillContainer(const ZDC_SimFiberHit_Collection* ZDC_SimFibe } void ZDC_PileUpTool::addEmptyWaveforms(xAOD::ZdcModuleContainer *zdcModuleContainer, CLHEP::HepRandomEngine* rndEngine){ - bool zdcFound[2][4] = {{false}}; - bool rpdFound[2][16] = {{false}}; + //Initialize bools to keep track of what modules/channels we have seen + bool zdcFound[2][4] = {{false},{false}}; + bool rpdFound[2][16] = {{false},{false}}; + bool branFound[2] = {false}; for(auto module : *zdcModuleContainer){ - int side = (module->zdcSide() == -1) ? 0 : 1; + int iside = (module->zdcSide() == -1) ? 0 : 1; int mod = module->zdcModule(); if(mod < 4){ //ZDC - zdcFound[side][mod] = true; - ATH_MSG_DEBUG("ZDC_PileUpTool::addEmptyWaveforms Found ZDC side " << side << " module " << mod); - }else{ //RPD - rpdFound[side][module->zdcChannel()] = true; - ATH_MSG_DEBUG("ZDC_PileUpTool::addEmptyWaveforms Found RPD side " << side << " channel " << module->zdcChannel()); + zdcFound[iside][mod] = true; + ATH_MSG_DEBUG("ZDC_PileUpTool::addEmptyWaveforms Found ZDC side " << module->zdcSide() << " module " << mod); + }else if(mod == 4){ //RPD + rpdFound[iside][module->zdcChannel()] = true; + ATH_MSG_DEBUG("ZDC_PileUpTool::addEmptyWaveforms Found RPD side " << module->zdcSide() << " channel " << module->zdcChannel()); + }else{//BRAN + branFound[iside] = true; + ATH_MSG_DEBUG("ZDC_PileUpTool::addEmptyWaveforms Found BRAN side " << module->zdcSide() ); } } - for(int side : {0,1}){ + for(int iside : {0,1}){ + int side = (iside == 0) ? -1 : 1; for(int mod = 0; mod < 4; mod++){ - if(!zdcFound[side][mod]){ + if(!zdcFound[iside][mod]){ ATH_MSG_DEBUG("ZDC_PileUpTool::addEmptyWaveforms Creating empty waveform for ZDC side " << side << " module " << mod); createAndStoreWaveform(ZDC_SimFiberHit( m_ZdcID->channel_id(side, mod, ZdcIDType::SINGLECHANNEL, 0), 0, 0), rndEngine, zdcModuleContainer); } } for(int channel = 0; channel < 16; channel++){ - if(!rpdFound[side][channel] && m_doRPD){ + if(!rpdFound[iside][channel] && m_doRPD){ ATH_MSG_DEBUG("ZDC_PileUpTool::addEmptyWaveforms Creating empty waveform for RPD side " << side << " channel " << channel); createAndStoreWaveform(ZDC_SimFiberHit( m_ZdcID->channel_id(side, 4, ZdcIDType::MULTICHANNEL, channel), 0, 0), rndEngine, zdcModuleContainer); } } + if(!branFound[iside] && m_doBRAN){ + ATH_MSG_DEBUG("ZDC_PileUpTool::addEmptyWaveforms Creating empty waveform for BRAN side " << side ); + createAndStoreWaveform(new ZDC_SimFiberHit( m_ZdcID->channel_id(side, 5, ZdcIDType::SINGLECHANNEL, 0), 0, 0), rndEngine, zdcModuleContainer); + } } } @@ -352,6 +365,9 @@ void ZDC_PileUpTool::createAndStoreWaveform(const ZDC_SimFiberHit &hit, CLHEP::H int module = m_ZdcID->module(id); int channel = m_ZdcID->channel(id); + if(module == 4 && !m_doRPD) return; + if(module == 5 && !m_doBRAN) return; + //Here we have to switch the type of the RPD from ACTIVE to MULTICHANNEL //TODO: Either change the channel numbering in the geometry, or the analysis if(module == 4) id = m_ZdcID->channel_id(side,module,ZdcIDType::MULTICHANNEL,channel);