Jpp 20.0.0-27-g39925593c-D
the software that should make you happy
Loading...
Searching...
No Matches
Functions
JMuonVeto.cc File Reference

Program to determine veto of muon trajectory. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <set>
#include "km3net-dataformat/offline/Head.hh"
#include "km3net-dataformat/offline/MultiHead.hh"
#include "km3net-dataformat/offline/Evt.hh"
#include "km3net-dataformat/definitions/fitparameters.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JDAQ/JDAQTimesliceIO.hh"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JModuleRouter.hh"
#include "JTrigger/JHit.hh"
#include "JTrigger/JFrame.hh"
#include "JTrigger/JTimeslice.hh"
#include "JTrigger/JHitL0.hh"
#include "JTrigger/JHitL1.hh"
#include "JTrigger/JHitR1.hh"
#include "JTrigger/JBuildL0.hh"
#include "JTrigger/JTriggerParameters.hh"
#include "JSupport/JSingleFileScanner.hh"
#include "JSupport/JParallelFileScanner.hh"
#include "JSupport/JFileRecorder.hh"
#include "JSupport/JSupport.hh"
#include "JSupport/JMeta.hh"
#include "JFit/JLine1Z.hh"
#include "JFit/JFitToolkit.hh"
#include "JFit/JTimeRange.hh"
#include "JReconstruction/JEvt.hh"
#include "JReconstruction/JEvtToolkit.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Program to determine veto of muon trajectory.

Author
mdejong

Definition in file JMuonVeto.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 53 of file JMuonVeto.cc.

54{
55 using namespace std;
56 using namespace JPP;
57 using namespace KM3NETDAQ;
58
61 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
63
64 JParallelFileScanner_t inputFile;
66 JLimit_t& numberOfEvents = inputFile.getLimit();
67 string detectorFile;
68 double roadWidth_m;
69 double R_Hz;
70 size_t numberOfPrefits;
72 bool reprocess;
73 int debug;
74
75 try {
76
77 JParser<> zap("Program to determine veto of muon trajectory.");
78
79 zap['f'] = make_field(inputFile);
80 zap['o'] = make_field(outputFile) = "veto.root";
82 zap['n'] = make_field(numberOfEvents) = JLimit::max();
83 zap['R'] = make_field(roadWidth_m) = numeric_limits<double>::max();
84 zap['B'] = make_field(R_Hz) = 6.0e3;
85 zap['N'] = make_field(numberOfPrefits) = 1;
86 zap['V'] = make_field(veto);
87 zap['r'] = make_field(reprocess);
88 zap['d'] = make_field(debug) = 1;
89
90 zap(argc, argv);
91 }
92 catch(const exception& error) {
93 FATAL(error.what() << endl);
94 }
95
96
98
99 try {
101 }
102 catch(const JException& error) {
103 FATAL(error);
104 }
105
106 const JModuleRouter router(detector);
107
110
111 double VS = 0.0; // veto [s]
112
113 for (vector<JTimeRange>::const_iterator vs = veto.begin(); vs != veto.end(); ++vs) {
114 VS += vs->getLength() * 1.0e-9;
115 }
116
117
118 outputFile.open();
119
120 outputFile.put(JMeta(argc, argv));
121
122 while (inputFile.hasNext()) {
123
124 STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
125
126 multi_pointer_type ps = inputFile.next();
127
128 const JDAQEvent* tev = ps;
129 const JEvt* in = ps;
130
131 JEvt cp = *in;
132 JEvt out;
133
134 cp.select(numberOfPrefits, qualitySorter);
135
136
137 JDataL0_t dataL0;
138
139 buildL0(*tev, router, true, back_inserter(dataL0));
140
141
142 for (JEvt::iterator track = cp.begin(); track != cp.end(); ++track) {
143
144 const JRotation3D R (getDirection(*track));
145 const JLine1Z tz(getPosition (*track).rotate(R), track->getT());
146
147 // hit selection based on start value
148
150
151 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
152
153 JHitL0 hit(*i);
154
155 hit.rotate(R);
156
157 bool is_veto = false;
158
159 if (tz.getDistance(hit) <= roadWidth_m) {
160
161 const double t1 = hit.getT() - tz.getT(hit);
162
163 for (vector<JTimeRange>::const_iterator vs = veto.begin(); vs != veto.end() && !is_veto; ++vs) {
164 is_veto = (*vs)(t1);
165 }
166 }
167
168 if (is_veto) {
169 top.insert(hit.getPMTIdentifier());
170 }
171 }
172
173
174 double npe = 0.0;
175 int count = 0;
176
177 for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
178
179 JPosition3D pos(module->getPosition());
180
181 pos.rotate(R);
182
183 if (tz.getDistance(pos) <= roadWidth_m) {
184
185 for (unsigned int i = 0; i != module->size(); ++i) {
186
187 const JDAQPMTIdentifier id(module->getID(), i);
188
189 npe += R_Hz * VS;
190 count += top.count(id);
191 }
192 }
193 }
194
195 out.push_back(JFit(*track).add(JMUONVETO));
196
197 out.rbegin()->setW(track->getW());
198 out.rbegin()->setW(JVETO_NPE, npe);
199 out.rbegin()->setW(JVETO_NUMBER_OF_HITS, count);
200 }
201
202 // apply default sorter
203
204 sort(out.begin(), out.end(), qualitySorter);
205
206 outputFile.put(out);
207 }
208 STATUS(endl);
209
211
212 io >> outputFile;
213
214 outputFile.close();
215}
string outputFile
#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:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Detector data structure.
Definition JDetector.hh:96
Router for direct addressing of module data in detector data structure.
JFit & add(const int type)
Add event to history.
Data structure for fit of straight line paralel to z-axis.
Definition JLine1Z.hh:29
Data structure for position in three dimensions.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
General exception.
Definition JException.hh:24
Template definition of a multi-dimensional oscillation probability interpolation table.
void insert(const JMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
Insert multidimensional input.
Data structure for L0 hit.
Definition JHitL0.hh:31
JDirection3D getDirection(const Vec &dir)
Get direction.
JPosition3D getPosition(const Vec &pos)
Get position.
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).
static const int JVETO_NPE
number of photo-electrons
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
static const int JVETO_NUMBER_OF_HITS
number of hits
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
Detector file.
Definition JHead.hh:227
Acoustic event fit.
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
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