Commit 8c00096a authored by Whitney Armstrong's avatar Whitney Armstrong
Browse files

Merge branch 'hcal_digi' into 'master'

Added HadronicCalDigi

See merge request !2
parents c39ee7e5 c74ae432
......@@ -12,18 +12,18 @@ stages:
compile:
stage: build
tags:
- sodium
- silicon
before_script:
- pwd && ls -lrth
script:
- export homedir=$(pwd) && pwd && cd /tmp && git clone --depth=1 https://eicweb.phy.anl.gov/EIC/NPDet.git && mkdir build && cd build && cmake ../NPDet/. && make -j20 install
- cd /tmp && git clone --depth=1 https://eicweb.phy.anl.gov/EIC/eicd.git && mkdir eicd_build && cd eicd_build && cmake ../eicd/. && make -j20 install
- cd $homedir && ls -lrth && mkdir build && cd build && cmake .. && make -j 20
- cd $homedir && ls -lrth && mkdir build && cd build && cmake .. && make -j10
run_example:
stage: run
tags:
- sodium
- silicon
script:
- ./build/run gaudirun.py Examples/options/hello_world.py
......@@ -31,6 +31,6 @@ run_example2:
image: eicweb.phy.anl.gov:4567/eic/npdet/npdet:latest
stage: run
tags:
- sodium
- silicon
script:
- ./build/run gaudirun.py JugBase/tests/options/simple_reader.py
#include <algorithm>
#include "GaudiAlg/Transformer.h"
#include "GaudiAlg/Producer.h"
#include "GaudiAlg/GaudiTool.h"
#include "GaudiKernel/RndmGenerators.h"
#include "Gaudi/Property.h"
// FCCSW
#include "JugBase/DataHandle.h"
// Event Model related classes
#include "eicd/RawCalorimeterHitCollection.h"
#include "eicd/RawCalorimeterHitData.h"
#include "dd4pod/CalorimeterHitCollection.h"
namespace Jug {
namespace Digi {
/** Hadronic Calorimeter Digitization.
*
* \f$ \sigma/E = a/\sqrt{E} \oplus b \f$
*
* \param a stochastic term (0.5 is 50%)
* \param b constant term (0.05 is 5%)
*
* Resolution terms are added in quadrature.
* When digitizing they are assumed to be independent random variables and are sampled as such.
*
*
*/
class HadronicCalDigi : public GaudiAlgorithm {
public:
Gaudi::Property<double> m_energyResolution_a{this, "energyResolution_a", 0.5 /*50 percent*/};
Gaudi::Property<double> m_energyResolution_b{this, "energyResolution_b", 0.05 /* 5 percent*/};
Rndm::Numbers m_gaussDist_a;
Rndm::Numbers m_gaussDist_b;
DataHandle<dd4pod::CalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
this};
DataHandle<eic::RawCalorimeterHitCollection> m_outputHitCollection{"outputHitCollection",
Gaudi::DataHandle::Writer, this};
public:
HadronicCalDigi(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
declareProperty("inputHitCollection", m_inputHitCollection, "");
declareProperty("outputHitCollection", m_outputHitCollection, "");
}
StatusCode initialize() override {
IRndmGenSvc* randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
StatusCode sc = m_gaussDist_a.initialize(randSvc, Rndm::Gauss(0.0, m_energyResolution_a.value() ));
if (!sc.isSuccess()) {
return StatusCode::FAILURE;
}
sc = m_gaussDist_b.initialize(randSvc, Rndm::Gauss(0.0, m_energyResolution_b.value()));
if (!sc.isSuccess()) {
return StatusCode::FAILURE;
}
if (GaudiAlgorithm::initialize().isFailure())
return StatusCode::FAILURE;
// f_counter = m_starting_value.value();
return StatusCode::SUCCESS;
}
StatusCode execute() override {
// input collection
const dd4pod::CalorimeterHitCollection* simhits = m_inputHitCollection.get();
// Create output collections
auto rawhits = m_outputHitCollection.createAndPut();
eic::RawCalorimeterHitCollection* rawHitCollection = new eic::RawCalorimeterHitCollection();
for (const auto& ahit : *simhits) {
// std::cout << ahit << "\n";
double sqrtE = std::sqrt(ahit.energyDeposit()) ;
double aterm = m_gaussDist_a()*sqrtE;
double bterm = ahit.energyDeposit()*m_gaussDist_b();
// here 1000 is arbitrary scale factor
eic::RawCalorimeterHit rawhit((long long)ahit.cellID(), (long long)ahit.cellID(),
(long long)(ahit.energyDeposit() +aterm + bterm) * 1000, 0);
rawhits->push_back(rawhit);
}
return StatusCode::SUCCESS;
}
};
DECLARE_COMPONENT(HadronicCalDigi)
} // namespace Digi
} // namespace Jug
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment