LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
evgen::TextFileGen Class Reference
Inheritance diagram for evgen::TextFileGen:
art::EDProducer art::ProducerBase art::Consumer art::EngineCreator art::ProductRegistryHelper

Public Types

using ModuleType = EDProducer
 
using WorkerType = WorkerT< EDProducer >
 
template<typename UserConfig , typename KeysToIgnore = void>
using Table = ProducerBase::Table< UserConfig, KeysToIgnore >
 

Public Member Functions

 TextFileGen (fhicl::ParameterSet const &p)
 
virtual ~TextFileGen ()
 
void produce (art::Event &e) override
 
void beginJob () override
 
void beginRun (art::Run &run) override
 
void reconfigure (fhicl::ParameterSet const &p)
 
template<typename PROD , BranchType B = InEvent>
ProductID getProductID (std::string const &instanceName={}) const
 
template<typename PROD , BranchType B>
ProductID getProductID (ModuleDescription const &moduleDescription, std::string const &instanceName) const
 
bool modifiesEvent () const
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ProductToken< T > consumes (InputTag const &it)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ViewToken< T > consumesView (InputTag const &it)
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ProductToken< T > mayConsume (InputTag const &it)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ViewToken< T > mayConsumeView (InputTag const &it)
 
base_engine_tcreateEngine (seed_t seed)
 
base_engine_tcreateEngine (seed_t seed, std::string const &kind_of_engine_to_make)
 
base_engine_tcreateEngine (seed_t seed, std::string const &kind_of_engine_to_make, label_t const &engine_label)
 
seed_t get_seed_value (fhicl::ParameterSet const &pset, char const key[]="seed", seed_t const implicit_seed=-1)
 

Static Public Member Functions

static cet::exempt_ptr< Consumernon_module_context ()
 

Protected Member Functions

CurrentProcessingContext const * currentContext () const
 
void validateConsumedProduct (BranchType const bt, ProductInfo const &pi)
 
void prepareForJob (fhicl::ParameterSet const &pset)
 
void showMissingConsumes () const
 

Private Attributes

std::ifstream * fInputFile
 
std::string fInputFileName
 Name of text file containing events to simulate. More...
 
double fMoveY
 Project particles to a new y plane. More...
 

Detailed Description

This module assumes that the input file has the hepevt format for each event to be simulated. See

http://cepa.fnal.gov/psm/simulation/mcgen/lund/pythia_manual/pythia6.3/pythia6301/node39.html

for details on the format. In brief each event contains at least two lines. The first line contains two entries, the event number (which is ignored in ART/LArSoft) and the number of particles in the event. Each following line containes 15 entries to describe each particle. The entries are:

  1. status code (should be set to 1 for any particle to be tracked, others won't be tracked)
  2. the pdg code for the particle
  3. the entry of the first mother for this particle in the event, 0 means no mother
  4. the entry of the second mother for this particle in the event, 0 means no mother
  5. the entry of the first daughter for this particle in the event, 0 means no daughter
  6. the entry of the second daughter for this particle in the event, 0 means no daughter
  7. x component of the particle momentum
  8. y component of the particle momentum
  9. z component of the particle momentum
  10. energy of the particle
  11. mass of the particle
  12. x position of the particle initial position
  13. y position of the particle initial position
  14. z position of the particle initial position
  15. time of the particle production

For example, if you want to simulate a single muon with a 5 GeV energy moving only in the z direction, the entry would be

0 1
1 13 0 0 0 0 0. 0. 1.0 5.0011 0.105 1.0 1.0 1.0 0.0

There are some assumptions that go into using this format that may not be obvious. The first is that only particles with status code = 1 are tracked in the LArSoft/Geant4 combination making the mother daughter relations somewhat irrelevant. That also means that you should let Geant4 handle any decays.

The units in LArSoft are cm for distances and ns for time. The use of TLorentzVector below does not imply space and time have the same units (do not use TLorentzVector::Boost()).

Definition at line 79 of file TextFileGen_module.cc.

Member Typedef Documentation

using art::EDProducer::ModuleType = EDProducer
inherited

Definition at line 34 of file EDProducer.h.

template<typename UserConfig , typename KeysToIgnore = void>
using art::EDProducer::Table = ProducerBase::Table<UserConfig, KeysToIgnore>
inherited

Definition at line 43 of file EDProducer.h.

using art::EDProducer::WorkerType = WorkerT<EDProducer>
inherited

Definition at line 35 of file EDProducer.h.

Constructor & Destructor Documentation

evgen::TextFileGen::TextFileGen ( fhicl::ParameterSet const &  p)
explicit

Definition at line 97 of file TextFileGen_module.cc.

References reconfigure().

98  : fInputFile(0)
99 {
100  this->reconfigure(p);
101 
102  produces< std::vector<simb::MCTruth> >();
103  produces< sumdata::RunData, art::InRun >();
104 }
std::ifstream * fInputFile
void reconfigure(fhicl::ParameterSet const &p)
evgen::TextFileGen::~TextFileGen ( )
virtual

Definition at line 107 of file TextFileGen_module.cc.

108 {
109 }

Member Function Documentation

void evgen::TextFileGen::beginJob ( )
overridevirtual

Reimplemented from art::EDProducer.

Definition at line 112 of file TextFileGen_module.cc.

References fInputFile, and fInputFileName.

113 {
114  fInputFile = new std::ifstream(fInputFileName.c_str());
115 
116  // check that the file is a good one
117  if( !fInputFile->good() )
118  throw cet::exception("TextFileGen") << "input text file "
119  << fInputFileName
120  << " cannot be read.\n";
121 
122  return;
123 }
std::string fInputFileName
Name of text file containing events to simulate.
std::ifstream * fInputFile
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
void evgen::TextFileGen::beginRun ( art::Run run)
overridevirtual

Reimplemented from art::EDProducer.

Definition at line 126 of file TextFileGen_module.cc.

References geo::GeometryCore::DetectorName(), and art::Run::put().

127 {
128 
129  // grab the geometry object to see what geometry we are using
131  std::unique_ptr<sumdata::RunData> runcol(new sumdata::RunData(geo->DetectorName()));
132 
133  run.put(std::move(runcol));
134 
135  return;
136  }
art::ProductID put(std::unique_ptr< PROD > &&)
Definition: Run.h:148
std::string DetectorName() const
Returns a string with the name of the detector, as configured.
Namespace collecting geometry-related classes utilities.
template<typename T , BranchType = InEvent>
ProductToken<T> art::Consumer::consumes ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ProductToken<T> art::Consumer::consumes ( InputTag const &  it)
inherited

Definition at line 147 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

148 {
149  if (!moduleContext_)
150  return ProductToken<T>::invalid();
151 
152  consumables_[BT].emplace_back(ConsumableType::Product,
153  TypeID{typeid(T)},
154  it.label(),
155  it.instance(),
156  it.process());
157  return ProductToken<T>{it};
158 }
static ProductToken< T > invalid()
Definition: ProductToken.h:47
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename T , art::BranchType BT>
void art::Consumer::consumesMany ( )
inherited

Definition at line 162 of file Consumer.h.

163 {
164  if (!moduleContext_)
165  return;
166 
167  consumables_[BT].emplace_back(ConsumableType::Many, TypeID{typeid(T)});
168 }
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::Consumer::consumesView ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ViewToken<T> art::Consumer::consumesView ( InputTag const &  it)
inherited

Definition at line 172 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

173 {
174  if (!moduleContext_)
175  return ViewToken<T>::invalid();
176 
177  consumables_[BT].emplace_back(ConsumableType::ViewElement,
178  TypeID{typeid(T)},
179  it.label(),
180  it.instance(),
181  it.process());
182  return ViewToken<T>{it};
183 }
static ViewToken< Element > invalid()
Definition: ProductToken.h:75
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
EngineCreator::base_engine_t & EngineCreator::createEngine ( seed_t  seed,
std::string const &  kind_of_engine_to_make 
)
inherited

Definition at line 32 of file EngineCreator.cc.

References art::EngineCreator::rng().

34 {
35  return rng()->createEngine(
36  placeholder_schedule_id(), seed, kind_of_engine_to_make);
37 }
long seed
Definition: chem4.cc:68
static art::ServiceHandle< art::RandomNumberGenerator > & rng()
EngineCreator::base_engine_t & EngineCreator::createEngine ( seed_t  seed,
std::string const &  kind_of_engine_to_make,
label_t const &  engine_label 
)
inherited

Definition at line 40 of file EngineCreator.cc.

References art::EngineCreator::rng().

43 {
44  return rng()->createEngine(
45  placeholder_schedule_id(), seed, kind_of_engine_to_make, engine_label);
46 }
long seed
Definition: chem4.cc:68
static art::ServiceHandle< art::RandomNumberGenerator > & rng()
CurrentProcessingContext const * art::EDProducer::currentContext ( ) const
protectedinherited

Definition at line 120 of file EDProducer.cc.

References art::EDProducer::current_context_.

121  {
122  return current_context_.get();
123  }
CPC_exempt_ptr current_context_
Definition: EDProducer.h:116
EngineCreator::seed_t EngineCreator::get_seed_value ( fhicl::ParameterSet const &  pset,
char const  key[] = "seed",
seed_t const  implicit_seed = -1 
)
inherited

Definition at line 49 of file EngineCreator.cc.

References fhicl::ParameterSet::get().

Referenced by art::MixFilter< T >::initEngine_().

52 {
53  auto const& explicit_seeds = pset.get<std::vector<int>>(key, {});
54  return explicit_seeds.empty() ? implicit_seed : explicit_seeds.front();
55 }
template<typename PROD , BranchType B>
ProductID art::EDProducer::getProductID ( std::string const &  instanceName = {}) const
inlineinherited

Definition at line 123 of file EDProducer.h.

References art::EDProducer::moduleDescription_.

124  {
125  return ProducerBase::getProductID<PROD, B>(moduleDescription_,
126  instanceName);
127  }
ModuleDescription moduleDescription_
Definition: EDProducer.h:115
template<typename PROD , BranchType B>
ProductID art::ProducerBase::getProductID ( ModuleDescription const &  moduleDescription,
std::string const &  instanceName 
) const
inherited

Definition at line 56 of file ProducerBase.h.

References B, and art::ModuleDescription::moduleLabel().

Referenced by art::ProducerBase::modifiesEvent().

58  {
59  auto const& pd =
60  get_ProductDescription<PROD>(B, md.moduleLabel(), instanceName);
61  return pd.productID();
62  }
Int_t B
Definition: plot.C:25
template<typename T , BranchType = InEvent>
ProductToken<T> art::Consumer::mayConsume ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ProductToken<T> art::Consumer::mayConsume ( InputTag const &  it)
inherited

Definition at line 190 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

191 {
192  if (!moduleContext_)
193  return ProductToken<T>::invalid();
194 
195  consumables_[BT].emplace_back(ConsumableType::Product,
196  TypeID{typeid(T)},
197  it.label(),
198  it.instance(),
199  it.process());
200  return ProductToken<T>{it};
201 }
static ProductToken< T > invalid()
Definition: ProductToken.h:47
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename T , art::BranchType BT>
void art::Consumer::mayConsumeMany ( )
inherited

Definition at line 205 of file Consumer.h.

206 {
207  if (!moduleContext_)
208  return;
209 
210  consumables_[BT].emplace_back(ConsumableType::Many, TypeID{typeid(T)});
211 }
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::Consumer::mayConsumeView ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ViewToken<T> art::Consumer::mayConsumeView ( InputTag const &  it)
inherited

Definition at line 215 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

216 {
217  if (!moduleContext_)
218  return ViewToken<T>::invalid();
219 
220  consumables_[BT].emplace_back(ConsumableType::ViewElement,
221  TypeID{typeid(T)},
222  it.label(),
223  it.instance(),
224  it.process());
225  return ViewToken<T>{it};
226 }
static ViewToken< Element > invalid()
Definition: ProductToken.h:75
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
bool art::ProducerBase::modifiesEvent ( ) const
inlineinherited

Definition at line 40 of file ProducerBase.h.

References art::ProducerBase::getProductID().

41  {
42  return true;
43  }
void art::Consumer::prepareForJob ( fhicl::ParameterSet const &  pset)
protectedinherited

Definition at line 89 of file Consumer.cc.

References fhicl::ParameterSet::get_if_present().

Referenced by art::EDProducer::doBeginJob(), art::EDFilter::doBeginJob(), and art::EDAnalyzer::doBeginJob().

90 {
91  if (!moduleContext_)
92  return;
93 
94  pset.get_if_present("errorOnMissingConsumes", requireConsumes_);
95  for (auto& consumablesPerBranch : consumables_) {
96  cet::sort_all(consumablesPerBranch);
97  }
98 }
bool requireConsumes_
Definition: Consumer.h:137
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
void evgen::TextFileGen::produce ( art::Event e)
overridevirtual

Implements art::EDProducer.

Definition at line 139 of file TextFileGen_module.cc.

References simb::MCTruth::Add(), simb::MCParticle::AddTrajectoryPoint(), energy, fInputFile, fInputFileName, fMoveY, part, and art::Event::put().

140 {
141  // check that the file is still good
142  if( !fInputFile->good() )
143  throw cet::exception("TextFileGen") << "input text file "
144  << fInputFileName
145  << " cannot be read in produce().\n";
146 
147 
148  std::unique_ptr< std::vector<simb::MCTruth> > truthcol(new std::vector<simb::MCTruth>);
149  simb::MCTruth truth;
150 
151  // declare the variables for reading in the event record
152  int event = 0;
153  unsigned short nParticles = 0;
154  int status = 0;
155  int pdg = 0;
156  int firstMother = 0;
157  int secondMother = 0;
158  int firstDaughter = 0;
159  int secondDaughter = 0;
160  double xMomentum = 0.;
161  double yMomentum = 0.;
162  double zMomentum = 0.;
163  double energy = 0.;
164  double mass = 0.;
165  double xPosition = 0.;
166  double yPosition = 0.;
167  double zPosition = 0.;
168  double time = 0.;
169 
170  // read in line to get event number and number of particles
171  std::string oneLine;
172  std::getline(*fInputFile, oneLine);
173  std::istringstream inputLine;
174  inputLine.str(oneLine);
175 
176  inputLine >> event >> nParticles;
177 
178  // now read in all the lines for the particles
179  // in this interaction. only particles with
180  // status = 1 get tracked in Geant4.
181  for(unsigned short i = 0; i < nParticles; ++i){
182  std::getline(*fInputFile, oneLine);
183  inputLine.clear();
184  inputLine.str(oneLine);
185 
186  inputLine >> status >> pdg
187  >> firstMother >> secondMother >> firstDaughter >> secondDaughter
188  >> xMomentum >> yMomentum >> zMomentum >> energy >> mass
189  >> xPosition >> yPosition >> zPosition >> time;
190 
191  //Project the particle to a new y plane
192  if (fMoveY>-1e8){
193  double totmom = sqrt(pow(xMomentum,2)+pow(yMomentum,2)+pow(zMomentum,2));
194  double kx = xMomentum/totmom;
195  double ky = yMomentum/totmom;
196  double kz = zMomentum/totmom;
197  if (ky){
198  double l = (fMoveY-yPosition)/ky;
199  xPosition += kx*l;
200  yPosition += ky*l;
201  zPosition += kz*l;
202  }
203  }
204 
205  TLorentzVector pos(xPosition, yPosition, zPosition, time);
206  TLorentzVector mom(xMomentum, yMomentum, zMomentum, energy);
207 
208  simb::MCParticle part(i, pdg, "primary", firstMother, mass, status);
209  part.AddTrajectoryPoint(pos, mom);
210 
211  truth.Add(part);
212  }
213 
214  truthcol->push_back(truth);
215 
216  e.put(std::move(truthcol));
217 
218  return;
219 }
void Add(simb::MCParticle &part)
Definition: MCTruth.h:77
ProductID put(std::unique_ptr< PROD > &&product)
Definition: Event.h:102
std::string fInputFileName
Name of text file containing events to simulate.
std::ifstream * fInputFile
TString part[npart]
Definition: Style.C:32
double energy
Definition: plottest35.C:25
Event generator information.
Definition: MCTruth.h:30
double fMoveY
Project particles to a new y plane.
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
void evgen::TextFileGen::reconfigure ( fhicl::ParameterSet const &  p)

Definition at line 222 of file TextFileGen_module.cc.

References DEFINE_ART_MODULE, fInputFileName, fMoveY, and fhicl::ParameterSet::get().

Referenced by TextFileGen().

223 {
224  fInputFileName = p.get<std::string>("InputFileName");
225  fMoveY = p.get<double>("MoveY", -1e9);
226  if (fMoveY>-1e8){
227  mf::LogWarning("TextFileGen")<<"Particles will be moved to a new plane y = "<<fMoveY<<" cm.\n";
228  }
229  return;
230 }
std::string fInputFileName
Name of text file containing events to simulate.
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
double fMoveY
Project particles to a new y plane.
void art::Consumer::showMissingConsumes ( ) const
protectedinherited

Definition at line 125 of file Consumer.cc.

Referenced by art::EDProducer::doEndJob(), art::EDFilter::doEndJob(), art::EDAnalyzer::doEndJob(), and art::RootOutput::endJob().

126 {
127  if (!moduleContext_)
128  return;
129 
130  // If none of the branches have missing consumes statements, exit early.
131  if (std::all_of(cbegin(missingConsumes_),
132  cend(missingConsumes_),
133  [](auto const& perBranch) { return perBranch.empty(); }))
134  return;
135 
136  constexpr cet::HorizontalRule rule{60};
137  mf::LogPrint log{"MTdiagnostics"};
138  log << '\n'
139  << rule('=') << '\n'
140  << "The following consumes (or mayConsume) statements are missing from\n"
141  << module_context(moduleDescription_) << '\n'
142  << rule('-') << '\n';
143 
144  cet::for_all_with_index(
145  missingConsumes_, [&log](std::size_t const i, auto const& perBranch) {
146  for (auto const& pi : perBranch) {
147  log << " "
148  << assemble_consumes_statement(static_cast<BranchType>(i), pi)
149  << '\n';
150  }
151  });
152  log << rule('=');
153 }
cet::exempt_ptr< ModuleDescription const > moduleDescription_
Definition: Consumer.h:140
constexpr T pi()
Returns the constant pi (up to 35 decimal digits of precision)
bool moduleContext_
Definition: Consumer.h:136
ConsumableProductSets missingConsumes_
Definition: Consumer.h:139
void art::Consumer::validateConsumedProduct ( BranchType const  bt,
ProductInfo const &  pi 
)
protectedinherited

Definition at line 101 of file Consumer.cc.

References art::errors::ProductRegistrationFailure.

103 {
104  // Early exits if consumes tracking has been disabled or if the
105  // consumed product is an allowed consumable.
106  if (!moduleContext_)
107  return;
108 
109  if (cet::binary_search_all(consumables_[bt], pi))
110  return;
111 
112  if (requireConsumes_) {
114  "Consumer: an error occurred during validation of a "
115  "retrieved product\n\n")
116  << "The following consumes (or mayConsume) statement is missing from\n"
117  << module_context(moduleDescription_) << ":\n\n"
118  << " " << assemble_consumes_statement(bt, pi) << "\n\n";
119  }
120 
121  missingConsumes_[bt].insert(pi);
122 }
cet::exempt_ptr< ModuleDescription const > moduleDescription_
Definition: Consumer.h:140
bool requireConsumes_
Definition: Consumer.h:137
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
constexpr T pi()
Returns the constant pi (up to 35 decimal digits of precision)
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
ConsumableProductSets missingConsumes_
Definition: Consumer.h:139

Member Data Documentation

std::ifstream* evgen::TextFileGen::fInputFile
private

Definition at line 91 of file TextFileGen_module.cc.

Referenced by beginJob(), and produce().

std::string evgen::TextFileGen::fInputFileName
private

Name of text file containing events to simulate.

Definition at line 92 of file TextFileGen_module.cc.

Referenced by beginJob(), produce(), and reconfigure().

double evgen::TextFileGen::fMoveY
private

Project particles to a new y plane.

Definition at line 93 of file TextFileGen_module.cc.

Referenced by produce(), and reconfigure().


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