Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JModK40.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 #include <vector>
6 
7 #include "TROOT.h"
8 #include "TFile.h"
9 #include "TRandom3.h"
10 
13 
14 #include "JAAnet/JAAnetToolkit.hh"
15 #include "JAAnet/JHit_t.hh"
16 
17 #include "JDetector/JDetector.hh"
20 #include "JDetector/JTimeRange.hh"
21 
25 #include "JSupport/JSupport.hh"
26 #include "JSupport/JMeta.hh"
27 
28 #include "Jeep/JParser.hh"
29 #include "Jeep/JMessage.hh"
30 
31 
32 /**
33  * \file
34  *
35  * Auxiliary program to add noise to Monte Carlo event.
36  * This program will be deprecated (JTriggerEfficiency.cc should be used instead).
37  * \author mdejong
38  */
39 int main(int argc, char **argv)
40 {
41  using namespace std;
42  using namespace JPP;
43 
44  JMultipleFileScanner<Evt> inputFile;
46  JLimit_t& numberOfEvents = inputFile.getLimit();
47  string detectorFile;
48  JK40Rates rates_Hz;
49  JTimeRange period;
50  UInt_t seed;
51  int debug;
52 
53  try {
54 
55  JParser<> zap("Auxiliary program to add noise to Monte Carlo event.");
56 
57  zap['f'] = make_field(inputFile) = JPARSER::initialised();
58  zap['o'] = make_field(outputFile) = "modk40.root";
59  zap['n'] = make_field(numberOfEvents) = JLimit::max();
60  zap['a'] = make_field(detectorFile);
61  zap['T'] = make_field(period) = JTimeRange::DEFAULT_RANGE;
62  zap['B'] = make_field(rates_Hz) = JPARSER::initialised();
63  zap['S'] = make_field(seed) = 0;
64  zap['d'] = make_field(debug) = 1;
65 
66  zap['f'] = JPARSER::initialised();
67 
68  zap(argc, argv);
69  }
70  catch(const exception &error) {
71  FATAL(error.what() << endl);
72  }
73 
74 
75  gRandom->SetSeed(seed);
76 
77 
78 
80 
81  try {
82  load(detectorFile, detector);
83  }
84  catch(const JException& error) {
85  FATAL(error);
86  }
87 
88 
89  if (period == JTimeRange::DEFAULT_RANGE) {
90 
91  const double Tmax = getMaximalTime(detector);
92 
93  period = JTimeRange(-Tmax, +Tmax);
94  }
95 
96 
97  const JK40DefaultSimulator modk40(rates_Hz);
98 
99  outputFile.open();
100 
101  if (!outputFile.is_open()) {
102  FATAL("Error opening file " << outputFile << endl);
103  }
104 
105  outputFile.put(JMeta(argc, argv));
106  outputFile.put(*gRandom);
107 
108  JMultipleFileScanner<Head> io(inputFile);
109 
110  io >> outputFile;
111 
112  while (inputFile.hasNext()) {
113 
114  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
115 
116  Evt* event = inputFile.next();
117 
118  JTimeRange time_range(JTimeRange::DEFAULT_RANGE);
119 
120  vector<Hit>::iterator __end = event->mc_hits.end();
121 
122  for (vector<Hit>::iterator i = event->mc_hits.begin(); i != __end; ) {
123 
124  if (is_noise(*i)) {
125 
126  iter_swap(i, --__end);
127 
128  } else {
129 
130  time_range.include(getTime(*i));
131 
132  ++i;
133  }
134  }
135 
136  event->mc_hits.erase(__end, event->mc_hits.end());
137 
138  if (time_range.is_valid())
139  time_range.add(period);
140  else
141  time_range = period;
142 
143 
144  const int npe = 1;
145 
146  JModuleData buffer;
147 
148  for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
149 
150  buffer.reset(module->size());
151 
152  modk40.generateHits(*module, time_range, buffer);
153 
154  for (unsigned int pmt = 0; pmt != buffer.size(); ++pmt) {
155 
156  const JModuleData::value_type& frame = buffer[pmt];
157 
158  for (JModuleData::value_type::const_iterator hit = frame.begin(); hit != frame.end(); ++hit) {
159 
160  event->mc_hits.push_back(JHit_t(event->mc_hits.size() + 1,
161  module->getPMT(pmt).getID(),
163  0,
164  hit->t_ns,
165  npe));
166  }
167  }
168  }
169 
170 
171  outputFile.put(*event);
172  }
173  STATUS(endl);
174 
175  outputFile.put(*gRandom);
176  outputFile.close();
177 }
Auxiliary class to set-up Hit.
Definition: JHit_t.hh:25
Auxiliary class for ROOT I/O of application specific meta data.
Definition: JMeta.hh:70
Object writing to file.
Utility class to parse command line options.
Definition: JParser.hh:1500
void reset(size_t size)
Reset buffers.
General exception.
Definition: JException.hh:23
ROOT TTree parameter settings of various packages.
Default implementation of the simulation of K40 background.
range_type include(argument_type x)
Include given value to range.
Definition: JRange.hh:386
Data structure for PMT data corresponding to a detector module.
#define STATUS(A)
Definition: JMessage.hh:63
Detector data structure.
Definition: JDetector.hh:80
JTOOLS::JRange< double > JTimeRange
Type definition for time range (unit [ns]).
Recording of objects on file according a format that follows from the file name extension.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:66
double getTime(const Hit &hit)
Get true time of hit.
string outputFile
Data structure for detector geometry and calibration.
bool is_noise(const Hit &hit)
Verify hit origin.
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
Detector file.
Definition: JHead.hh:196
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
range_type & add(argument_type x)
Add offset.
Definition: JRange.hh:435
ROOT I/O of application specific meta data.
Definition of hit and track types and auxiliary methods for handling Monte Carlo data.
virtual void generateHits(const JModule &module, const JTimeRange &period, JModuleData &output) const
Generate hits.
int debug
debug level
Definition: JSirene.cc:63
double getMaximalTime(const double R_Hz)
Get maximal time for given rate.
General purpose messaging.
Template specialisation of JMultipleFileScanner for Monte Carlo header.
#define FATAL(A)
Definition: JMessage.hh:67
Scanning of objects from multiple files according a format that follows from the extension of each fi...
bool is_valid() const
Check validity of range.
Definition: JRange.hh:311
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
General purpose class for object reading from a list of file names.
Utility class to parse command line options.
const JLimit & getLimit() const
Get limit.
Definition: JLimit.hh:73
do set_variable DETECTOR_TXT $WORKDIR detector
Auxiliary class for K40 rates.
Definition: JK40Rates.hh:41
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition: Evt.hh:19
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
int main(int argc, char *argv[])
Definition: Main.cpp:15