LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
evgen::PhotonGen Class Reference
Inheritance diagram for evgen::PhotonGen:
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

 PhotonGen (fhicl::ParameterSet const &pset)
 
void produce (art::Event &evt)
 
void beginRun (art::Run &run)
 
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 Sample (simb::MCTruth &truth)
 

Private Attributes

bool fFillTree
 
TTree * fPhotonGen
 
TLorentzVector fShotPos
 
TLorentzVector fShotMom
 
Int_t fEvID
 
bool fScan
 
double fPx
 
double fPy
 
double fPz
 
int fPosDist
 
int fTDist
 
int fPDist
 
double fX
 
double fY
 
double fZ
 
double fT
 
double fSigmaT
 
double fP
 
double fSigmaP
 
int fN
 
CLHEP::HepRandomEngine & fEngine
 
double fXmin
 
double fXmax
 
double fYmin
 
double fYmax
 
double fZmin
 
double fZmax
 

Static Private Attributes

static const int kUNIF = 0
 
static const int kGAUS = 1
 

Detailed Description

Definition at line 52 of file PhotonGen_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

evgen::PhotonGen::PhotonGen ( fhicl::ParameterSet const &  pset)
explicit

Definition at line 105 of file PhotonGen_module.cc.

References geo::CryostatGeo::Boundaries(), art::detail::EngineCreator::createEngine(), geo::GeometryCore::Cryostat(), fEngine, fEvID, fFillTree, fN, fP, fPDist, fPhotonGen, fPosDist, fPx, fPy, fPz, fScan, fShotMom, fShotPos, fSigmaP, fSigmaT, fT, fTDist, fXmax, fXmin, fYmax, fYmin, fZmax, and fZmin.

106  : art::EDProducer{pset}
107  , fFillTree{pset.get<bool>("FillTree")}
108  , fScan{pset.get<bool>("Scan")}
109  , fPosDist{pset.get<int>("PosDist")}
110  , fTDist{pset.get<int>("TDist")}
111  , fPDist{pset.get<int>("PDist")}
112  , fT{pset.get<double>("T0")}
113  , fSigmaT{pset.get<double>("SigmaT")}
114  , fP{pset.get<double>("P")}
115  , fSigmaP{pset.get<double>("SigmaP")}
116  , fN{pset.get<int>("N")}
117 
118  , fEngine(art::ServiceHandle<rndm::NuRandomService>()->registerAndSeedEngine(createEngine(0),
119  pset,
120  "Seed"))
121  {
122  produces<sumdata::RunData, art::InRun>();
123  produces<std::vector<simb::MCTruth>>();
124 
125  if (fFillTree) {
127  fPhotonGen = tfs->make<TTree>("PhGen", "PhGen");
128  fPhotonGen->Branch("X", &(fShotPos[0]), "X/D");
129  fPhotonGen->Branch("Y", &(fShotPos[1]), "Y/D");
130  fPhotonGen->Branch("Z", &(fShotPos[2]), "Z/D");
131  fPhotonGen->Branch("T", &(fShotPos[3]), "T/D");
132  fPhotonGen->Branch("PX", &(fShotMom[0]), "PX/D");
133  fPhotonGen->Branch("PY", &(fShotMom[1]), "PY/D");
134  fPhotonGen->Branch("PZ", &(fShotMom[2]), "PZ/D");
135  fPhotonGen->Branch("PT", &(fShotMom[3]), "PT/D");
136  fPhotonGen->Branch("EventID", &fEvID, "EventID/I");
137  }
138 
139  if (fScan) {
140  fPx = pset.get<double>("X");
141  fPy = pset.get<double>("Y");
142  fPz = pset.get<double>("Z");
143  std::cout << "Will generate photons from 3 points." << std::endl;
144  }
145 
146  if (auto boundaries = pset.get_if_present<fhicl::ParameterSet>("boundaries")) {
147  fXmin = boundaries->get<double>("Xmin");
148  fXmax = boundaries->get<double>("Xmax");
149  fYmin = boundaries->get<double>("Ymin");
150  fYmax = boundaries->get<double>("Ymax");
151  fZmin = boundaries->get<double>("Zmin");
152  fZmax = boundaries->get<double>("Zmax");
153 
154  //Boundaries set by user---
155  std::cout << "\n\nPhoton Emission Region (user-defined) [cm]:" << std::endl;
156  std::cout << "Xmin: " << fXmin << " Xmax: " << fXmax << " Ymin: " << fYmin
157  << " Ymax: " << fYmax << " Zmin: " << fZmin << " Zmax: " << fZmax << "\n\n"
158  << std::endl;
159  }
160  else {
162  auto const CryoBounds = geo->Cryostat().Boundaries();
163  fXmin = CryoBounds.MinX();
164  fXmax = CryoBounds.MaxX();
165  fYmin = CryoBounds.MinY();
166  fYmax = CryoBounds.MaxY();
167  fZmin = CryoBounds.MinZ();
168  fZmax = CryoBounds.MaxZ();
169  //Initial default boundaries---
170  std::cout << "\n\nPhoton Emission Region (default Cryo Boundaries) [cm]:" << std::endl;
171  std::cout << "Xmin: " << fXmin << " Xmax: " << fXmax << " Ymin: " << fYmin
172  << " Ymax: " << fYmax << " Zmin: " << fZmin << " Zmax: " << fZmax << "\n\n"
173  << std::endl;
174  }
175  }
base_engine_t & createEngine(seed_t seed)
TLorentzVector fShotMom
CLHEP::HepRandomEngine & fEngine
TLorentzVector fShotPos
CryostatGeo const & Cryostat(CryostatID const &cryoid=details::cryostat_zero) const
Returns the specified cryostat.
BoxBoundedGeo const & Boundaries() const
Returns boundaries of the cryostat (in centimetres).
Definition: CryostatGeo.h:113
ROOT libraries.

Member Function Documentation

void evgen::PhotonGen::beginRun ( art::Run run)
virtual

Reimplemented from art::EDProducer.

Definition at line 178 of file PhotonGen_module.cc.

References geo::GeometryCore::Cryostat(), geo::GeometryCore::DetectorName(), art::fullRun(), geo::CryostatGeo::NOpDet(), and art::Run::put().

179  {
180  std::cout << "\n\nBegin Job\n\n" << std::endl;
181 
183  std::cout << "Number of optical detector: " << int(geo1->Cryostat().NOpDet()) << std::endl;
184 
185  run.put(std::make_unique<sumdata::RunData>(geo1->DetectorName()), art::fullRun());
186  }
constexpr auto fullRun()
PutHandle< PROD > put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
Definition: Run.h:121
CryostatGeo const & Cryostat(CryostatID const &cryoid=details::cryostat_zero) const
Returns the specified cryostat.
unsigned int NOpDet() const
Number of optical detectors in this TPC.
Definition: CryostatGeo.h:317
std::string const & DetectorName() const
Returns a string with the name of the detector, as configured.
Definition: GeometryCore.h:140
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
void evgen::PhotonGen::produce ( art::Event evt)
virtual

Implements art::EDProducer.

Definition at line 189 of file PhotonGen_module.cc.

References fPy, fPz, fScan, fX, fXmax, fXmin, fY, fYmax, fYmin, fZ, fZmax, fZmin, simb::kSingleParticle, art::Event::put(), art::detail::EngineCreator::rng(), Sample(), and simb::MCTruth::SetOrigin().

190  {
191  std::mt19937 rng;
192  rng.seed(std::random_device()());
193  std::uniform_real_distribution<double> distX(fXmin, fXmax);
194  std::uniform_real_distribution<double> distY(fYmin, fYmax);
195  std::uniform_real_distribution<double> distZ(fZmin, fZmax);
196  std::uniform_real_distribution<double> width(-2.0, 2.0); //scan width---
197 
198  std::unique_ptr<std::vector<simb::MCTruth>> truthcol(new std::vector<simb::MCTruth>);
199  simb::MCTruth truth;
201 
202  if (fScan) {
203  fX = distX(rng);
204  fY = fPy + width(rng);
205  fZ = fPz + width(rng);
206  Sample(truth);
207  }
208  else {
209  fX = distX(rng);
210  fY = distY(rng);
211  fZ = distZ(rng);
212 
213  Sample(truth);
214  }
215 
216  truthcol->push_back(truth);
217  evt.put(std::move(truthcol));
218  }
void SetOrigin(simb::Origin_t origin)
Definition: MCTruth.h:82
void Sample(simb::MCTruth &truth)
PutHandle< PROD > put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
Definition: Event.h:77
single particles thrown at the detector
Definition: MCTruth.h:26
Event generator information.
Definition: MCTruth.h:32
static ServiceHandle< RandomNumberGenerator > & rng()
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 evgen::PhotonGen::Sample ( simb::MCTruth truth)
private

Definition at line 220 of file PhotonGen_module.cc.

References simb::MCTruth::Add(), simb::MCParticle::AddTrajectoryPoint(), DEFINE_ART_MODULE, fEngine, fFillTree, fN, fP, fPDist, fPhotonGen, fShotMom, fShotPos, fSigmaP, fSigmaT, fT, fTDist, fX, fY, fZ, and kGAUS.

Referenced by produce().

221  {
222  std::cout << "\n\nPhotons Shooting at the Position: " << fX << " " << fY << " " << fZ << "\n\n"
223  << std::endl;
224 
225  CLHEP::RandFlat flat(fEngine);
226  CLHEP::RandGaussQ gauss(fEngine);
227 
228  for (int j = 0; j != fN; ++j) {
229  TVector3 pos;
230  pos[0] = fX;
231  pos[1] = fY;
232  pos[2] = fZ;
233 
234  double time;
235  if (fTDist == kGAUS) { time = gauss.fire(fT, fSigmaT); }
236  else {
237  time = fT + fSigmaT * (2.0 * flat.fire() - 1.0);
238  }
239  fShotPos = TLorentzVector(pos[0], pos[1], pos[2], time);
240 
241  //momentum (supplied in eV, convert to GeV)
242  double p = fP;
243  if (fPDist == kGAUS) { p = gauss.fire(fP, fSigmaP); }
244  else {
245  p = fP + fSigmaP * (2.0 * flat.fire() - 1.0);
246  }
247  p /= 1000000000.;
248 
249  //angles
250  double costh = 2 * flat.fire() - 1;
251  double sinth = std::sqrt(1 - costh * costh);
252  double phi = 2 * M_PI * flat.fire();
253 
254  //momentum 4-vector
255  fShotMom = TLorentzVector(p * sinth * cos(phi), p * sinth * sin(phi), p * costh, p);
256 
257  int trackid =
258  -1 *
259  (j + 1); // set track id to negative as these are all primary particles and have id <= 0
260  int PDG = 0; // optical photons have PDG 0
261  simb::MCParticle particle(trackid, PDG, "primary");
262  particle.AddTrajectoryPoint(fShotPos, fShotMom);
263 
264  if (fFillTree) { fPhotonGen->Fill(); }
265 
266  mct.Add(particle);
267  }
268  }
TLorentzVector fShotMom
CLHEP::HepRandomEngine & fEngine
TLorentzVector fShotPos
static const int kGAUS
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

CLHEP::HepRandomEngine& evgen::PhotonGen::fEngine
private

Definition at line 93 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

Int_t evgen::PhotonGen::fEvID
private

Definition at line 70 of file PhotonGen_module.cc.

Referenced by PhotonGen().

bool evgen::PhotonGen::fFillTree
private

Definition at line 66 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

int evgen::PhotonGen::fN
private

Definition at line 91 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

double evgen::PhotonGen::fP
private

Definition at line 87 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

int evgen::PhotonGen::fPDist
private

Definition at line 81 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

TTree* evgen::PhotonGen::fPhotonGen
private

Definition at line 67 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

int evgen::PhotonGen::fPosDist
private

Definition at line 79 of file PhotonGen_module.cc.

Referenced by PhotonGen().

double evgen::PhotonGen::fPx
private

Definition at line 74 of file PhotonGen_module.cc.

Referenced by PhotonGen().

double evgen::PhotonGen::fPy
private

Definition at line 75 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

double evgen::PhotonGen::fPz
private

Definition at line 76 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

bool evgen::PhotonGen::fScan
private

Definition at line 73 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

TLorentzVector evgen::PhotonGen::fShotMom
private

Definition at line 69 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

TLorentzVector evgen::PhotonGen::fShotPos
private

Definition at line 68 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

double evgen::PhotonGen::fSigmaP
private

Definition at line 88 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

double evgen::PhotonGen::fSigmaT
private

Definition at line 86 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

double evgen::PhotonGen::fT
private

Definition at line 85 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

int evgen::PhotonGen::fTDist
private

Definition at line 80 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and Sample().

double evgen::PhotonGen::fX
private

Definition at line 82 of file PhotonGen_module.cc.

Referenced by produce(), and Sample().

double evgen::PhotonGen::fXmax
private

Definition at line 97 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

double evgen::PhotonGen::fXmin
private

Definition at line 96 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

double evgen::PhotonGen::fY
private

Definition at line 83 of file PhotonGen_module.cc.

Referenced by produce(), and Sample().

double evgen::PhotonGen::fYmax
private

Definition at line 99 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

double evgen::PhotonGen::fYmin
private

Definition at line 98 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

double evgen::PhotonGen::fZ
private

Definition at line 84 of file PhotonGen_module.cc.

Referenced by produce(), and Sample().

double evgen::PhotonGen::fZmax
private

Definition at line 101 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

double evgen::PhotonGen::fZmin
private

Definition at line 100 of file PhotonGen_module.cc.

Referenced by PhotonGen(), and produce().

const int evgen::PhotonGen::kGAUS = 1
staticprivate

Definition at line 63 of file PhotonGen_module.cc.

Referenced by Sample().

const int evgen::PhotonGen::kUNIF = 0
staticprivate

Definition at line 62 of file PhotonGen_module.cc.


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