Jpp 20.0.0-195-g190c9e876
the software that should make you happy
Loading...
Searching...
No Matches
JMuonPath.cc
Go to the documentation of this file.
1
2#include <string>
3#include <iostream>
4#include <iomanip>
5#include <vector>
6#include <algorithm>
7
12
13#include "JDAQ/JDAQEventIO.hh"
16
20
21#include "JTrigger/JHit.hh"
22#include "JTrigger/JFrame.hh"
24#include "JTrigger/JHitL0.hh"
25#include "JTrigger/JBuildL0.hh"
27
31#include "JSupport/JSupport.hh"
32#include "JSupport/JMeta.hh"
33
34#include "JFit/JPMTW0.hh"
35#include "JFit/JLine3Z.hh"
36#include "JFit/JGandalf.hh"
38#include "JFit/JFitToolkit.hh"
39#include "JFit/JModel.hh"
40
44
48
49#include "JPhysics/JPDFTable.hh"
51
52#include "Jeep/JParser.hh"
53#include "Jeep/JMessage.hh"
54
55
56/**
57 * \file
58 *
59 * Program to perform JFIT::JRegressor<JLine3Z,JGandalf> fit with I/O of JFIT::JEvt data.
60 * \author mdejong
61 */
62int main(int argc, char **argv)
63{
64 using namespace std;
65 using namespace JPP;
66 using namespace KM3NETDAQ;
67
68 typedef JParallelFileScanner< JTypeList<JDAQEvent, JEvt> > JParallelFileScanner_t;
69 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
71
72 JParallelFileScanner_t inputFile;
74 JLimit_t& numberOfEvents = inputFile.getLimit();
75 string detectorFile;
76 string pdfFile;
77 double roadWidth_m;
78 double QE;
79 double R_Hz;
80 size_t numberOfPrefits;
81 double TTS_ns;
82 double E_GeV;
83 int debug;
84
85 try {
86
87 JParser<> zap("Program to perform fit of muon path to data.");
88
89 zap['f'] = make_field(inputFile);
90 zap['o'] = make_field(outputFile) = "path.root";
91 zap['a'] = make_field(detectorFile);
92 zap['n'] = make_field(numberOfEvents) = JLimit::max();
93 zap['F'] = make_field(pdfFile);
94 zap['R'] = make_field(roadWidth_m) = numeric_limits<double>::max();
95 zap['Q'] = make_field(QE) = 1.0;
96 zap['B'] = make_field(R_Hz) = 6.0e3;
97 zap['N'] = make_field(numberOfPrefits) = 1;
98 zap['T'] = make_field(TTS_ns);
99 zap['E'] = make_field(E_GeV) = 1.0e3;
100 zap['d'] = make_field(debug) = 1;
101
102 zap(argc, argv);
103 }
104 catch(const exception& error) {
105 FATAL(error.what() << endl);
106 }
107
108
110
111 try {
112 load(detectorFile, detector);
113 }
114 catch(const JException& error) {
115 FATAL(error);
116 }
117
118 const JModuleRouter router(detector);
119
120
121 typedef vector<JHitL0> JDataL0_t;
122 const JBuildL0<JHitL0> buildL0;
123
124
126
127 const JTimeRange T_ns(-50.0, +50.0);
128
129 JRegressor_t::debug = debug;
130 JRegressor_t::Vmax_npe = 10.0; // npe
131 JRegressor_t::MAXIMUM_ITERATIONS = 10000;
132
133 JRegressor_t fit(pdfFile, T_ns, TTS_ns);
134
135 fit.transform(JRegressor_t::transformer_type::getDefaultTransformer()); // get rid of R-dependent weight function
136
137 fit.estimator.reset(new JMEstimatorLorentzian());
138
139 fit.parameters.resize(4);
140
141 fit.parameters[0] = JLine3Z::pX();
142 fit.parameters[1] = JLine3Z::pY();
143 fit.parameters[2] = JLine3Z::pDX();
144 fit.parameters[3] = JLine3Z::pDY();
145
146 if (fit.getRmax() < roadWidth_m) {
147
148 roadWidth_m = fit.getRmax();
149
150 WARNING("Set road width to [m] " << roadWidth_m << endl);
151 }
152
153 const double Rmax_m = 100.0; // hit selection [m]
154 const double Tmax_ns = 10.0; // hit selection [ns]
155
156
157 outputFile.open();
158
159 outputFile.put(JMeta(argc, argv));
160
161 while (inputFile.hasNext()) {
162
163 STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
164
165 multi_pointer_type ps = inputFile.next();
166
167 const JDAQEvent* tev = ps;
168 const JEvt* in = ps;
169
170 JEvt cp = *in;
171 JEvt out;
172
173 cp.select(numberOfPrefits, qualitySorter);
174
175
176 JDataL0_t dataL0;
177
178 buildL0(*tev, router, true, back_inserter(dataL0));
179
180
181 for (JEvt::const_iterator track = cp.begin(); track != cp.end(); ++track) {
182
183 const JRotation3D R (getDirection(*track));
184 const JLine1Z tz(getPosition (*track).rotate(R), track->getT());
185 const JModel<JLine1Z> match(tz, roadWidth_m, T_ns);
186
187 // hit selection based on start value
188
190
192
193 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
194
195 JHitW0 hit(*i, 0, QE, R_Hz);
196
197 hit.rotate(R);
198
199 if (match(hit)) {
200
201 top.insert(hit.getPMTIdentifier());
202
203 const double t1 = hit.getT() - tz.getT(hit);
204
205 if (tz.getDistance(hit) <= Rmax_m && t1 >= -Tmax_ns && t1 <= +Tmax_ns) {
206 Z.include(hit.getZ() - tz.getDistance(hit) / getTanThetaC());
207 }
208 }
209 }
210
211
212 vector<JPMTW0> buffer;
213
214 for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
215
216 JPosition3D pos(module->getPosition());
217
218 pos.rotate(R);
219
220 if (tz.getDistance(pos) <= roadWidth_m && Z(pos.getZ() - tz.getDistance(pos) / getTanThetaC())) {
221
222 for (unsigned int i = 0; i != module->size(); ++i) {
223
224 const JDAQPMTIdentifier id(module->getID(), i);
225
226 JPMT pmt(module->getPMT(i));
227
228 pmt.rotate(R);
229
230 buffer.push_back(JPMTW0(pmt, QE, R_Hz, top.count(id)));
231 }
232 }
233 }
234
235
236 const int NDF = buffer.size() - fit.parameters.size();
237
238 if (NDF >= 0) {
239
240 // set fit parameters
241
242 if (track->getE() > 0.1)
243 fit.E_GeV = track->getE();
244 else
245 fit.E_GeV = E_GeV;
246
247 const double chi2 = fit(JLine3Z(tz), buffer.begin(), buffer.end());
248
249 JTrack3D tb(fit.value);
250
251 tb.rotate_back(R);
252
253 out.push_back(getFit(JMUONPATH, tb, getQuality(chi2), NDF));
254
255 out.rbegin()->setW(track->getW());
256 }
257 }
258
259 // apply default sorter
260
261 sort(out.begin(), out.end(), qualitySorter);
262
263 outputFile.put(out);
264 }
265 STATUS(endl);
266
268
269 io >> outputFile;
270
271 outputFile.close();
272}
string outputFile
Data structure for detector geometry and calibration.
Recording of objects on file according a format that follows from the file name extension.
Auxiliary methods to evaluate Poisson probabilities and chi2.
Various implementations of functional maps.
Basic data structure for L0 hit.
Data regression method for JFIT::JLine3Z.
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define STATUS(A)
Definition JMessage.hh:63
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:74
#define WARNING(A)
Definition JMessage.hh:65
ROOT I/O of application specific meta data.
Direct access to module in detector data structure.
int main(int argc, char **argv)
Definition JMuonPath.cc:62
Auxiliary methods for PDF calculations.
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Physics constants.
Scanning of objects from a single file according a format that follows from the extension of each fil...
ROOT TTree parameter settings of various packages.
Basic data structure for time and time over threshold information of hit.
Detector data structure.
Definition JDetector.hh:96
Router for direct addressing of module data in detector data structure.
Data structure for PMT geometry, calibration and status.
Definition JPMT.hh:49
Data structure for fit of straight line paralel to z-axis.
Definition JLine1Z.hh:29
static parameter_type pY()
Definition JLine1Z.hh:181
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Definition JLine1Z.hh:114
static parameter_type pX()
Definition JLine1Z.hh:180
double getDistance(const JVector3D &pos) const
Get distance.
Definition JLine1Z.hh:102
Data structure for fit of straight line in positive z-direction.
Definition JLine3Z.hh:40
static parameter_type pDY()
Definition JLine3Z.hh:320
static parameter_type pDX()
Definition JLine3Z.hh:319
JAxis3D & rotate_back(const JRotation3D &R)
Rotate back axis.
Definition JAxis3D.hh:240
JAxis3D & rotate(const JRotation3D &R)
Rotate axis.
Definition JAxis3D.hh:225
Data structure for position in three dimensions.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
double getZ() const
Get z position.
Definition JVector3D.hh:115
General exception.
Definition JException.hh:24
Utility class to parse command line options.
Definition JParser.hh:1698
Auxiliary class for a hit with background rate value.
Definition JHitW0.hh:25
double getT() const
Get calibrated time of hit.
Definition JHitW0.hh:62
Object writing to file.
General purpose class for parallel reading of objects from a single file or multiple files.
Object reading from a list of files.
static JRange< T, JComparator_t > DEFAULT_RANGE()
Default range.
Definition JRange.hh:555
range_type & include(argument_type x)
Include given value to range.
Definition JRange.hh:397
Template L0 hit builder.
Definition JBuildL0.hh:38
const JDAQPMTIdentifier & getPMTIdentifier() const
Get PMT identifier.
JDirection3D getDirection(const Vec &dir)
Get direction.
JPosition3D getPosition(const Vec &pos)
Get position.
double getQuality(const double chi2, const int NDF)
Get quality of fit.
JFit getFit(const int id, const JMODEL::JString &string)
Get fit parameters of string.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
JFIT::JRegressor< JFIT::JLine3Z, JFIT::JGandalf > JRegressor_t
Definition JPerth.cc:156
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
Detector file.
Definition JHead.hh:227
Acoustic event fit.
Model for fit to acoustics data.
Lorentzian M-estimator.
Auxiliary class for handling PMT geometry, rate and response.
Definition JPMTW0.hh:24
Template definition of a data regressor of given model.
Definition JRegressor.hh:70
Type list.
Definition JTypeList.hh:23
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
const JLimit & getLimit() const
Get limit.
Definition JLimit.hh:84
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128
Auxiliary class for ROOT I/O of application specific meta data.
Definition JMeta.hh:72