diff --git a/DDDigi/README.md b/DDDigi/README.md index 7cd4ca7cf417df5180d3e30f12571219968028f9..a0678f1969d1e5409dd21b989598d25cf32b542a 100644 --- a/DDDigi/README.md +++ b/DDDigi/README.md @@ -68,13 +68,19 @@ energy deposits of the simulation. Functionality: self explaining -- DigiAttenuate +- DigiAttenuator Deposit attenuator for energy deposits according to decay time constant. <br/> Properties: <br/> |**Property** |**Data type** |**Description** | |:--- |:--- |:--- | |`.input` | vector<string> | List of input files to be processed | + |`.attenuate_history`| boolean | Propagate the weight also to the history entries. default: true | + |`.processor_type`| string | Processor type used for single container attenuation default: `DigiAttenuator` | + |`.containers` | vector<string> | List of containers to be attenuated. | + |`.signal_decay`| string | Decay function. default: `exponential` | + |`.t0` | double | Time constant for exponential signal decay. | +  diff --git a/DDDigi/src/DigiAttenuator.cpp b/DDDigi/src/DigiAttenuator.cpp index a32ec88ff5c490ee229097c2006f511234f90a5a..ecd09d0a3f9c82634bc2bda9553a57308759047b 100644 --- a/DDDigi/src/DigiAttenuator.cpp +++ b/DDDigi/src/DigiAttenuator.cpp @@ -48,6 +48,8 @@ DigiAttenuator::attenuate(T& cont, const predicate_t& predicate) const { for( auto& dep : cont ) { if ( predicate(dep) ) { dep.second.deposit *= m_factor; + if ( !m_attenuate_history ) + continue; auto& e = dep.second.history; for( auto& h : e.hits ) h.weight *= m_factor; for( auto& h : e.particles ) h.weight *= m_factor; @@ -87,7 +89,6 @@ DigiAttenuatorSequence::DigiAttenuatorSequence(const DigiKernel& krnl, const std : DigiContainerSequenceAction(krnl, nam) { declareProperty("attenuate_history", m_attenuate_history); - declareProperty("attenuate_data", m_attenuate_data); declareProperty("processor_type", m_processor_type = "DigiAttenuator"); declareProperty("containers", m_container_attenuation); declareProperty("signal_decay", m_signal_decay = "exponential"); @@ -118,30 +119,16 @@ void DigiAttenuatorSequence::initialize() { m_signal_decay.c_str()); break; } - // First bunch of processors: Attenuate the signal - if ( m_attenuate_data ) { - std::string nam = name() + ".D." + c.first; - auto* att = createAction<DigiAttenuator>(m_processor_type, m_kernel, nam); - if ( !att ) { - except("+++ Failed to create signal attenuator: %s of type: %s", - nam.c_str(), m_processor_type.c_str()); - } - att->property("factor").set(factor); - att->property("OutputLevel").set(int(outputLevel())); - adopt_processor(att, c.first); - } - // Second bunch of processors: Attenuate the history weights accordingly - if ( m_attenuate_history ) { - std::string nam = name() + ".H." + c.first; - auto* att = createAction<DigiAttenuator>(m_processor_type, m_kernel, nam); - if ( !att ) { - except("+++ Failed to create signal attenuator: %s of type: %s", - nam.c_str(), m_processor_type.c_str()); - } - att->property("factor").set(factor); - adopt_processor(att, c.first+".hist"); - att->property("OutputLevel").set(int(outputLevel())); + // Attenuate the signal + std::string nam = name() + ".D." + c.first; + auto* att = createAction<DigiAttenuator>(m_processor_type, m_kernel, nam); + if ( !att ) { + except("+++ Failed to create signal attenuator: %s of type: %s", + nam.c_str(), m_processor_type.c_str()); } + att->property("factor").set(factor); + att->property("OutputLevel").set(int(outputLevel())); + adopt_processor(att, c.first); } this->DigiContainerSequenceAction::initialize(); }