LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
phot::PhotonLibraryPropagation Class Reference

Fast simulation of propagating the photons created from SimEnergyDeposits. More...

Inheritance diagram for phot::PhotonLibraryPropagation:
art::EDProducer art::detail::Producer art::detail::LegacyModule art::Modifier art::ModuleBase art::ProductRegistryHelper

Public Types

using ModuleType = EDProducer
 
template<typename UserConfig , typename KeysToIgnore = void>
using Table = Modifier::Table< UserConfig, KeysToIgnore >
 

Public Member Functions

 PhotonLibraryPropagation (fhicl::ParameterSet const &)
 
 PhotonLibraryPropagation (PhotonLibraryPropagation const &)=delete
 
 PhotonLibraryPropagation (PhotonLibraryPropagation &&)=delete
 
PhotonLibraryPropagationoperator= (PhotonLibraryPropagation const &)=delete
 
PhotonLibraryPropagationoperator= (PhotonLibraryPropagation &&)=delete
 
void doBeginJob (SharedResources const &resources)
 
void doEndJob ()
 
void doRespondToOpenInputFile (FileBlock const &fb)
 
void doRespondToCloseInputFile (FileBlock const &fb)
 
void doRespondToOpenOutputFiles (FileBlock const &fb)
 
void doRespondToCloseOutputFiles (FileBlock const &fb)
 
bool doBeginRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doEndRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doBeginSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEndSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEvent (EventPrincipal &ep, ModuleContext const &mc, std::atomic< std::size_t > &counts_run, std::atomic< std::size_t > &counts_passed, std::atomic< std::size_t > &counts_failed)
 
void fillProductDescriptions ()
 
void registerProducts (ProductDescriptions &productsToRegister)
 
ModuleDescription const & moduleDescription () const
 
void setModuleDescription (ModuleDescription const &)
 
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables () const
 
void sortConsumables (std::string const &current_process_name)
 
std::unique_ptr< Worker > makeWorker (WorkerParams const &wp)
 
template<typename T , BranchType BT>
ViewToken< T > consumesView (InputTag const &tag)
 
template<typename T , BranchType BT>
ViewToken< T > mayConsumeView (InputTag const &tag)
 

Protected Member Functions

ConsumesCollector & consumesCollector ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 

Private Member Functions

void produce (art::Event &) override
 

Private Attributes

double fRiseTimeFast
 
double fRiseTimeSlow
 
bool fDoSlowComponent
 
vector< art::InputTagfEDepTags
 
larg4::ISCalcSeparate fISAlg
 
CLHEP::HepRandomEngine & fPhotonEngine
 
CLHEP::HepRandomEngine & fScintTimeEngine
 

Detailed Description

Fast simulation of propagating the photons created from SimEnergyDeposits.

This module does a fast simulation of propagating the photons created from SimEnergyDeposits, which is the Geant4 output after each step, to each of the optical detectors. This simulation is done using the PhotonLibrary, which stores the visibilities of each optical channel with respect to each optical voxel in the TPC volume, to avoid propagating single photons using Geant4. At the end of this module a collection of the propagated photons either as sim::SimPhotonsLite or as sim::SimPhotons is placed into the art event.

Keep in mind that at this stage the LArG4 main module is not capable of running the full optical simulation, because the necessary code has not yet been written.

In the future when the PhotonLibrary has the propagation time included, it could be possible to enhance sim::SimPhotons and sim::SimPhotonsLite to contain the propagation time. At this point the time recorded for the photon is the creation time of the photon.

The steps this module takes are:

  • to take sim::SimEnergyDeposits produced by larg4Main,
  • use Ionisation and Scintillation to calculate the amount of scintillated photons,
  • use the PhotonLibrary (visibilities) to determine the amount of visible photons at each optical channel,
    • visible photons = the amount of scintillated photons calculated times the visibility at the middle of the Geant4 step for a given optical channel.
  • and if sim::SimPhotonsLite produced:
    • since a sim::SimPhotonsLite only keeps a set of times with the number of photons produced at each time for a given OpChannel number:
      • for each time (as an integer in [ns]) photons are produced along the Geant4 step (taking into account the rise time and decay time of the fast and slow components of the scintillation process),
      • count the amount of photons emitted at that time.

the total amount of visible photons produced during the current Geant4 step equals the sum of counts for each time.

  • the total amount of visible photons produced during the current Geant4 step is determined by throwing a random number from a Poisson distribution with a mean of the amount of visible photons calculated above.

and if sim::SimPhotons produced:

  • since a sim::SimPhotons keeps a collection of photons (sim::OnePhoton) for a given OpChannel number:
    • each single photon produced by this algorithm is just a copy containing the same information about:
      • energy (set to a constant value = 9.7e-6, which is equivalent to a wavelength of 128 nm, it should actually be 126.6 nm!!),
      • initial position,
      • time (as an integer in [ns]) the photon is produced along the Geant4 Step (taking into account the rise time and decay time of the fast and slow components of the scintillation process),
    • the total amount of photon copies produced during the current Geant4 step is determined by throwing a random number from a Poisson distribution with a mean of the amount of visible photons calculated above.

This module should only be run for the fast optical simulation even though it can create sim::SimPhotonsLite and sim::SimPhotons as data products. If there is need to create sim::SimPhotons, there are some considerations you must be aware of. Since the amount of sim::SimPhotons produced even at low energies and in small geometries quickly exceeds the memory capacity of the job, right now it is actually impossible to produce sim::SimPhotons for any realistic geometry. A possible way around the problem is to implement a scaling of the produced sim::SimPhotons, to only produce a fraction of them.

Definition at line 141 of file PhotonLibraryPropagation_module.cc.

Member Typedef Documentation

Definition at line 17 of file EDProducer.h.

template<typename UserConfig , typename KeysToIgnore = void>
using art::detail::Producer::Table = Modifier::Table<UserConfig, KeysToIgnore>
inherited

Definition at line 26 of file Producer.h.

Constructor & Destructor Documentation

phot::PhotonLibraryPropagation::PhotonLibraryPropagation ( fhicl::ParameterSet const &  p)
explicit

Definition at line 161 of file PhotonLibraryPropagation_module.cc.

References art::detail::EngineCreator::createEngine(), fDoSlowComponent, fEDepTags, fPhotonEngine, fRiseTimeFast, fRiseTimeSlow, and fScintTimeEngine.

162  : art::EDProducer{p}
163  , fRiseTimeFast{p.get<double>("RiseTimeFast", 0.0)}
164  , fRiseTimeSlow{p.get<double>("RiseTimeSlow", 0.0)}
165  , fDoSlowComponent{p.get<bool>("DoSlowComponent")}
166  , fEDepTags{p.get<vector<art::InputTag>>("EDepModuleLabels")}
167  , fPhotonEngine(art::ServiceHandle<rndm::NuRandomService>()->registerAndSeedEngine(
168  createEngine(0, "HepJamesRandom", "photon"),
169  "HepJamesRandom",
170  "photon",
171  p,
172  "SeedPhoton"))
174  createEngine(0, "HepJamesRandom", "scinttime"),
175  "HepJamesRandom",
176  "scinttime",
177  p,
178  "SeedScintTime"))
179  {
180  if (art::ServiceHandle<sim::LArG4Parameters const> {} -> UseLitePhotons()) {
181  produces<vector<sim::SimPhotonsLite>>();
182  }
183  else {
184  produces<vector<sim::SimPhotons>>();
185  }
186  }
base_engine_t & createEngine(seed_t seed)
phot::PhotonLibraryPropagation::PhotonLibraryPropagation ( PhotonLibraryPropagation const &  )
delete
phot::PhotonLibraryPropagation::PhotonLibraryPropagation ( PhotonLibraryPropagation &&  )
delete

Member Function Documentation

template<typename T , BranchType BT>
ProductToken< T > art::ModuleBase::consumes ( InputTag const &  tag)
protectedinherited

Definition at line 61 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumes().

62  {
63  return collector_.consumes<T, BT>(tag);
64  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ProductToken< T > consumes(InputTag const &)
ConsumesCollector & art::ModuleBase::consumesCollector ( )
protectedinherited

Definition at line 57 of file ModuleBase.cc.

References art::ModuleBase::collector_.

58  {
59  return collector_;
60  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename T , BranchType BT>
void art::ModuleBase::consumesMany ( )
protectedinherited

Definition at line 75 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumesMany().

76  {
77  collector_.consumesMany<T, BT>();
78  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::ModuleBase::consumesView ( InputTag const &  )
protectedinherited
template<typename T , BranchType BT>
ViewToken<T> art::ModuleBase::consumesView ( InputTag const &  tag)
inherited

Definition at line 68 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumesView().

69  {
70  return collector_.consumesView<T, BT>(tag);
71  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ViewToken< Element > consumesView(InputTag const &)
void art::detail::Producer::doBeginJob ( SharedResources const &  resources)
inherited

Definition at line 22 of file Producer.cc.

References art::detail::Producer::beginJobWithFrame(), and art::detail::Producer::setupQueues().

23  {
24  setupQueues(resources);
25  ProcessingFrame const frame{ScheduleID{}};
26  beginJobWithFrame(frame);
27  }
virtual void setupQueues(SharedResources const &)=0
virtual void beginJobWithFrame(ProcessingFrame const &)=0
bool art::detail::Producer::doBeginRun ( RunPrincipal rp,
ModuleContext const &  mc 
)
inherited

Definition at line 65 of file Producer.cc.

References art::detail::Producer::beginRunWithFrame(), art::RangeSet::forRun(), art::RunPrincipal::makeRun(), r, art::RunPrincipal::runID(), and art::ModuleContext::scheduleID().

66  {
67  auto r = rp.makeRun(mc, RangeSet::forRun(rp.runID()));
68  ProcessingFrame const frame{mc.scheduleID()};
69  beginRunWithFrame(r, frame);
70  r.commitProducts();
71  return true;
72  }
TRandom r
Definition: spectrum.C:23
virtual void beginRunWithFrame(Run &, ProcessingFrame const &)=0
static RangeSet forRun(RunID)
Definition: RangeSet.cc:51
bool art::detail::Producer::doBeginSubRun ( SubRunPrincipal srp,
ModuleContext const &  mc 
)
inherited

Definition at line 85 of file Producer.cc.

References art::detail::Producer::beginSubRunWithFrame(), art::RangeSet::forSubRun(), art::SubRunPrincipal::makeSubRun(), art::ModuleContext::scheduleID(), and art::SubRunPrincipal::subRunID().

86  {
87  auto sr = srp.makeSubRun(mc, RangeSet::forSubRun(srp.subRunID()));
88  ProcessingFrame const frame{mc.scheduleID()};
89  beginSubRunWithFrame(sr, frame);
90  sr.commitProducts();
91  return true;
92  }
virtual void beginSubRunWithFrame(SubRun &, ProcessingFrame const &)=0
static RangeSet forSubRun(SubRunID)
Definition: RangeSet.cc:57
void art::detail::Producer::doEndJob ( )
inherited

Definition at line 30 of file Producer.cc.

References art::detail::Producer::endJobWithFrame().

31  {
32  ProcessingFrame const frame{ScheduleID{}};
33  endJobWithFrame(frame);
34  }
virtual void endJobWithFrame(ProcessingFrame const &)=0
bool art::detail::Producer::doEndRun ( RunPrincipal rp,
ModuleContext const &  mc 
)
inherited

Definition at line 75 of file Producer.cc.

References art::detail::Producer::endRunWithFrame(), art::RunPrincipal::makeRun(), r, art::ModuleContext::scheduleID(), and art::Principal::seenRanges().

76  {
77  auto r = rp.makeRun(mc, rp.seenRanges());
78  ProcessingFrame const frame{mc.scheduleID()};
79  endRunWithFrame(r, frame);
80  r.commitProducts();
81  return true;
82  }
TRandom r
Definition: spectrum.C:23
virtual void endRunWithFrame(Run &, ProcessingFrame const &)=0
bool art::detail::Producer::doEndSubRun ( SubRunPrincipal srp,
ModuleContext const &  mc 
)
inherited

Definition at line 95 of file Producer.cc.

References art::detail::Producer::endSubRunWithFrame(), art::SubRunPrincipal::makeSubRun(), art::ModuleContext::scheduleID(), and art::Principal::seenRanges().

96  {
97  auto sr = srp.makeSubRun(mc, srp.seenRanges());
98  ProcessingFrame const frame{mc.scheduleID()};
99  endSubRunWithFrame(sr, frame);
100  sr.commitProducts();
101  return true;
102  }
virtual void endSubRunWithFrame(SubRun &, ProcessingFrame const &)=0
bool art::detail::Producer::doEvent ( EventPrincipal ep,
ModuleContext const &  mc,
std::atomic< std::size_t > &  counts_run,
std::atomic< std::size_t > &  counts_passed,
std::atomic< std::size_t > &  counts_failed 
)
inherited

Definition at line 105 of file Producer.cc.

References art::detail::Producer::checkPutProducts_, e, art::EventPrincipal::makeEvent(), art::detail::Producer::produceWithFrame(), and art::ModuleContext::scheduleID().

110  {
111  auto e = ep.makeEvent(mc);
112  ++counts_run;
113  ProcessingFrame const frame{mc.scheduleID()};
114  produceWithFrame(e, frame);
115  e.commitProducts(checkPutProducts_, &expectedProducts<InEvent>());
116  ++counts_passed;
117  return true;
118  }
bool const checkPutProducts_
Definition: Producer.h:70
Float_t e
Definition: plot.C:35
virtual void produceWithFrame(Event &, ProcessingFrame const &)=0
void art::detail::Producer::doRespondToCloseInputFile ( FileBlock const &  fb)
inherited

Definition at line 44 of file Producer.cc.

References art::detail::Producer::respondToCloseInputFileWithFrame().

45  {
46  ProcessingFrame const frame{ScheduleID{}};
48  }
virtual void respondToCloseInputFileWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::detail::Producer::doRespondToCloseOutputFiles ( FileBlock const &  fb)
inherited

Definition at line 58 of file Producer.cc.

References art::detail::Producer::respondToCloseOutputFilesWithFrame().

59  {
60  ProcessingFrame const frame{ScheduleID{}};
62  }
virtual void respondToCloseOutputFilesWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::detail::Producer::doRespondToOpenInputFile ( FileBlock const &  fb)
inherited

Definition at line 37 of file Producer.cc.

References art::detail::Producer::respondToOpenInputFileWithFrame().

38  {
39  ProcessingFrame const frame{ScheduleID{}};
41  }
virtual void respondToOpenInputFileWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::detail::Producer::doRespondToOpenOutputFiles ( FileBlock const &  fb)
inherited

Definition at line 51 of file Producer.cc.

References art::detail::Producer::respondToOpenOutputFilesWithFrame().

52  {
53  ProcessingFrame const frame{ScheduleID{}};
55  }
virtual void respondToOpenOutputFilesWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::Modifier::fillProductDescriptions ( )
inherited

Definition at line 10 of file Modifier.cc.

References art::ProductRegistryHelper::fillDescriptions(), and art::ModuleBase::moduleDescription().

11  {
13  }
void fillDescriptions(ModuleDescription const &md)
ModuleDescription const & moduleDescription() const
Definition: ModuleBase.cc:13
std::array< std::vector< ProductInfo >, NumBranchTypes > const & art::ModuleBase::getConsumables ( ) const
inherited

Definition at line 43 of file ModuleBase.cc.

References art::ModuleBase::collector_, and art::ConsumesCollector::getConsumables().

44  {
45  return collector_.getConsumables();
46  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables() const
std::unique_ptr< Worker > art::ModuleBase::makeWorker ( WorkerParams const &  wp)
inherited

Definition at line 37 of file ModuleBase.cc.

References art::ModuleBase::doMakeWorker(), and art::NumBranchTypes.

38  {
39  return doMakeWorker(wp);
40  }
virtual std::unique_ptr< Worker > doMakeWorker(WorkerParams const &wp)=0
template<typename T , BranchType BT>
ProductToken< T > art::ModuleBase::mayConsume ( InputTag const &  tag)
protectedinherited

Definition at line 82 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsume().

83  {
84  return collector_.mayConsume<T, BT>(tag);
85  }
ProductToken< T > mayConsume(InputTag const &)
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename T , BranchType BT>
void art::ModuleBase::mayConsumeMany ( )
protectedinherited

Definition at line 96 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsumeMany().

97  {
98  collector_.mayConsumeMany<T, BT>();
99  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::ModuleBase::mayConsumeView ( InputTag const &  )
protectedinherited
template<typename T , BranchType BT>
ViewToken<T> art::ModuleBase::mayConsumeView ( InputTag const &  tag)
inherited

Definition at line 89 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsumeView().

90  {
91  return collector_.mayConsumeView<T, BT>(tag);
92  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ViewToken< Element > mayConsumeView(InputTag const &)
ModuleDescription const & art::ModuleBase::moduleDescription ( ) const
inherited

Definition at line 13 of file ModuleBase.cc.

References art::errors::LogicError.

Referenced by art::OutputModule::doRespondToOpenInputFile(), art::OutputModule::doWriteEvent(), art::Modifier::fillProductDescriptions(), art::OutputModule::makePlugins_(), art::OutputWorker::OutputWorker(), reco::shower::LArPandoraModularShowerCreation::produce(), art::Modifier::registerProducts(), and art::OutputModule::registerProducts().

14  {
15  if (md_.has_value()) {
16  return *md_;
17  }
18 
20  "There was an error while calling moduleDescription().\n"}
21  << "The moduleDescription() base-class member function cannot be called\n"
22  "during module construction. To determine which module is "
23  "responsible\n"
24  "for calling it, find the '<module type>:<module "
25  "label>@Construction'\n"
26  "tag in the message prefix above. Please contact artists@fnal.gov\n"
27  "for guidance.\n";
28  }
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
std::optional< ModuleDescription > md_
Definition: ModuleBase.h:55
PhotonLibraryPropagation& phot::PhotonLibraryPropagation::operator= ( PhotonLibraryPropagation const &  )
delete
PhotonLibraryPropagation& phot::PhotonLibraryPropagation::operator= ( PhotonLibraryPropagation &&  )
delete
void phot::PhotonLibraryPropagation::produce ( art::Event e)
overrideprivatevirtual

Implements art::EDProducer.

Definition at line 188 of file PhotonLibraryPropagation_module.cc.

References larg4::ISCalcSeparate::CalcIonAndScint(), DEFINE_ART_MODULE, util::end(), sim::SimEnergyDeposit::End(), sim::OnePhoton::Energy, fDoSlowComponent, fEDepTags, fISAlg, fPhotonEngine, fRiseTimeFast, fRiseTimeSlow, fScintTimeEngine, art::ProductRetriever::getValidHandle(), sim::OnePhoton::InitialPosition, sim::SimEnergyDeposit::MidPoint(), n, art::Event::put(), detinfo::LArProperties::ScintFastTimeConst(), detinfo::LArProperties::ScintSlowTimeConst(), sim::OnePhoton::SetInSD, sim::SimEnergyDeposit::T0(), sim::OnePhoton::Time, and sim::LArG4Parameters::UseLitePhotons().

189  {
192  auto const* larp = lar::providerFrom<detinfo::LArPropertiesService>();
193  auto const detProp = art::ServiceHandle<detinfo::DetectorPropertiesService const>()->DataFor(e);
194  CLHEP::RandPoissonQ randpoisphot{fPhotonEngine};
195  CLHEP::RandFlat randflatscinttime{fScintTimeEngine};
196  auto const nOpChannels = pvs->NOpChannels();
197  unique_ptr<vector<sim::SimPhotons>> photCol{new vector<sim::SimPhotons>{}};
198  auto& photonCollection{*photCol};
199  photonCollection.resize(nOpChannels);
200  unique_ptr<vector<sim::SimPhotonsLite>> photLiteCol{new vector<sim::SimPhotonsLite>{}};
201  auto& photonLiteCollection{*photLiteCol};
202  photonLiteCollection.resize(nOpChannels);
203  for (unsigned int i = 0; i < nOpChannels; ++i) {
204  photonLiteCollection[i].OpChannel = i;
205  photonCollection[i].SetChannel(i);
206  }
207  vector<vector<sim::SimEnergyDeposit> const*> edep_vecs;
208  for (auto label : fEDepTags) {
209  auto const& edep_handle = e.getValidHandle<vector<sim::SimEnergyDeposit>>(label);
210  edep_vecs.push_back(edep_handle);
211  }
212  for (auto const& edeps : edep_vecs) { //loop over modules
213  for (auto const& edep : *edeps) { //loop over energy deposits: one per step
214  //int count_onePhot =0; // unused
215  auto const& p = edep.MidPoint();
216  auto const& Visibilities = pvs->GetAllVisibilities(p);
217  if (!Visibilities) {
218  throw cet::exception("PhotonLibraryPropagation")
219  << "There is no entry in the PhotonLibrary for this position in space. "
220  "Position: "
221  << edep.MidPoint();
222  }
223  auto const isCalcData = fISAlg.CalcIonAndScint(detProp, edep);
224  //total amount of scintillation photons
225  double nphot = static_cast<int>(isCalcData.numPhotons);
226  //amount of scintillated photons created via the fast scintillation process
227  double nphot_fast = static_cast<int>(GetScintYield(edep, *larp) * nphot);
228  //amount of scintillated photons created via the slow scintillation process
229  double nphot_slow = nphot - nphot_fast;
230  for (unsigned int channel = 0; channel < nOpChannels; ++channel) {
231  auto visibleFraction = Visibilities[channel];
232  if (visibleFraction == 0.0) {
233  // Voxel is not visible at this optical channel, skip doing anything for this channel.
234  continue;
235  }
236  if (lgp->UseLitePhotons()) {
237  if (nphot_fast > 0) {
238  //throwing a random number from a poisson distribution with a mean of the amount of photons visible at this channel
239  auto n = static_cast<int>(randpoisphot.fire(nphot_fast * visibleFraction));
240  for (long i = 0; i < n; ++i) {
241  //calculates the time at which the photon was produced
242  auto time = static_cast<int>(edep.T0() + GetScintTime(fRiseTimeFast,
243  larp->ScintFastTimeConst(),
244  randflatscinttime));
245  ++photonLiteCollection[channel].DetectedPhotons[time];
246  }
247  }
248  if ((nphot_slow > 0) && fDoSlowComponent) {
249  //throwing a random number from a poisson distribution with a mean of the amount of photons visible at this channel
250  auto n = randpoisphot.fire(nphot_slow * visibleFraction);
251  for (long i = 0; i < n; ++i) {
252  //calculates the time at which the photon was produced
253  auto time = static_cast<int>(edep.T0() + GetScintTime(fRiseTimeSlow,
254  larp->ScintSlowTimeConst(),
255  randflatscinttime));
256  ++photonLiteCollection[channel].DetectedPhotons[time];
257  }
258  }
259  }
260  else {
261  sim::OnePhoton photon;
262  photon.SetInSD = false;
263  photon.InitialPosition = edep.End();
264  photon.Energy = 9.7e-6;
265  if (nphot_fast > 0) {
266  //throwing a random number from a poisson distribution with a mean of the amount of photons visible at this channel
267  auto n = randpoisphot.fire(nphot_fast * visibleFraction);
268  if (n > 0) {
269  //calculates the time at which the photon was produced
270  photon.Time =
271  edep.T0() +
272  GetScintTime(fRiseTimeFast, larp->ScintFastTimeConst(), randflatscinttime);
273  // add n copies of sim::OnePhoton photon to the photon collection for a given OpChannel
274  photonCollection[channel].insert(photonCollection[channel].end(), n, photon);
275  }
276  }
277  if ((nphot_slow > 0) && fDoSlowComponent) {
278  //throwing a random number from a poisson distribution with a mean of the amount of photons visible at this channel
279  auto n = randpoisphot.fire(nphot_slow * visibleFraction);
280  if (n > 0) {
281  //calculates the time at which the photon was produced
282  photon.Time =
283  edep.T0() +
284  GetScintTime(fRiseTimeSlow, larp->ScintSlowTimeConst(), randflatscinttime);
285  // add n copies of sim::OnePhoton photon to the photon collection for a given OpChannel
286  photonCollection[channel].insert(photonCollection[channel].end(), n, photon);
287  }
288  }
289  }
290  }
291  }
292  }
293  if (lgp->UseLitePhotons()) {
294  // put the photon collection of LitePhotons into the art event
295  e.put(move(photLiteCol));
296  }
297  else {
298  //put the photon collection of SimPhotons into the art event
299  e.put(move(photCol));
300  }
301  }
All information of a photon entering the sensitive optical detector volume.
Definition: SimPhotons.h:60
ISCalcData CalcIonAndScint(detinfo::DetectorPropertiesData const &detProp, sim::SimEnergyDeposit const &edep) override
geo::Point_t InitialPosition
Scintillation position in world coordinates [cm].
Definition: SimPhotons.h:63
PutHandle< PROD > put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
Definition: Event.h:77
decltype(auto) constexpr end(T &&obj)
ADL-aware version of std::end.
Definition: StdUtils.h:77
Double_t edep
Definition: macro.C:13
ValidHandle< PROD > getValidHandle(InputTag const &tag) const
bool SetInSD
Whether the photon reaches the sensitive detector.
Definition: SimPhotons.h:84
Char_t n[5]
float Energy
Scintillation photon energy [GeV].
Definition: SimPhotons.h:78
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
bool UseLitePhotons() const
void art::Modifier::registerProducts ( ProductDescriptions productsToRegister)
inherited

Definition at line 16 of file Modifier.cc.

References art::ModuleBase::moduleDescription(), and art::ProductRegistryHelper::registerProducts().

17  {
18  ProductRegistryHelper::registerProducts(productsToRegister,
20  }
void registerProducts(ProductDescriptions &productsToRegister, ModuleDescription const &md)
ModuleDescription const & moduleDescription() const
Definition: ModuleBase.cc:13
void art::ModuleBase::setModuleDescription ( ModuleDescription const &  md)
inherited

Definition at line 31 of file ModuleBase.cc.

References art::ModuleBase::md_.

32  {
33  md_ = md;
34  }
std::optional< ModuleDescription > md_
Definition: ModuleBase.h:55
void art::ModuleBase::sortConsumables ( std::string const &  current_process_name)
inherited

Definition at line 49 of file ModuleBase.cc.

References art::ModuleBase::collector_, and art::ConsumesCollector::sortConsumables().

50  {
51  // Now that we know we have seen all the consumes declarations,
52  // sort the results for fast lookup later.
53  collector_.sortConsumables(current_process_name);
54  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
void sortConsumables(std::string const &current_process_name)

Member Data Documentation

bool phot::PhotonLibraryPropagation::fDoSlowComponent
private

Definition at line 145 of file PhotonLibraryPropagation_module.cc.

Referenced by PhotonLibraryPropagation(), and produce().

vector<art::InputTag> phot::PhotonLibraryPropagation::fEDepTags
private

Definition at line 146 of file PhotonLibraryPropagation_module.cc.

Referenced by PhotonLibraryPropagation(), and produce().

larg4::ISCalcSeparate phot::PhotonLibraryPropagation::fISAlg
private

Definition at line 147 of file PhotonLibraryPropagation_module.cc.

Referenced by produce().

CLHEP::HepRandomEngine& phot::PhotonLibraryPropagation::fPhotonEngine
private

Definition at line 148 of file PhotonLibraryPropagation_module.cc.

Referenced by PhotonLibraryPropagation(), and produce().

double phot::PhotonLibraryPropagation::fRiseTimeFast
private

Definition at line 143 of file PhotonLibraryPropagation_module.cc.

Referenced by PhotonLibraryPropagation(), and produce().

double phot::PhotonLibraryPropagation::fRiseTimeSlow
private

Definition at line 144 of file PhotonLibraryPropagation_module.cc.

Referenced by PhotonLibraryPropagation(), and produce().

CLHEP::HepRandomEngine& phot::PhotonLibraryPropagation::fScintTimeEngine
private

Definition at line 149 of file PhotonLibraryPropagation_module.cc.

Referenced by PhotonLibraryPropagation(), and produce().


The documentation for this class was generated from the following file: