219 JLimit_t& numberOfEvents = inputFile.getLimit();
232 JParser<> zap(
"Example program to test performance of various hit filters.");
237 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
242 zap[
'c'] =
make_field(cluster) =
'A',
'B',
'C',
'D',
'E',
'F';
248 catch(
const exception &error) {
249 FATAL(error.what() << endl);
278 if (histogram == 1) {
284 for ( ;
x < 30.0;
x += 1.0)
287 for ( ;
x < 50.0;
x += 2.0)
290 for ( ;
x < 100.0;
x += 5.0)
293 for ( ;
x < 200.0;
x += 10.0)
296 he =
new TProfile(
"he", NULL, X.size() - 1, X.data());
297 hp =
new TProfile(
"hp", NULL, X.size() - 1, X.data());
301 he =
new TProfile(
"he", NULL, 28, 0.0, 7.0);
302 hp =
new TProfile(
"hp", NULL, 28, 0.0, 7.0);
305 TH1D ht1(
"ht1", NULL, 550, -50.0, +500.0);
306 TH1D ht2(
"ht2", NULL, 550, -50.0, +500.0);
307 TH1D hd1(
"hd1", NULL, 100, -1.0, +1.0);
308 TH1D hd2(
"hd2", NULL, 100, -1.0, +1.0);
309 TH1D hx1(
"hx1", NULL, 100, 0.0, +250.0);
310 TH1D hx2(
"hx2", NULL, 100, 0.0, +250.0);
311 TH1D hw1(
"hw1", NULL, 100, -0.5, +99.5);
312 TH1D hw2(
"hw2", NULL, 100, -0.5, +99.5);
323 const JHorizon horizon(0.2, 2);
335 const Evt*
event = ps;
340 const double E = neutrino.
E;
352 if (
is_muon(*track) && track->E > Emax) {
359 if (muon != event->mc_trks.end()) {
378 zmap[pmtRouter.getParentModuleID(i->pmt_id)].push_back(*i);
385 for (JMap_t::iterator i = zmap.begin(); i != zmap.end(); ) {
387 i->second.compile(Tmax_ns, 2);
389 if (i->second.empty())
395 const int L1mc = zmap.size();
405 for (JDAQTimeslice::const_iterator i = timeslice.begin(); i != timeslice.end(); ++i) {
409 buildL2(*i, moduleRouter.getModule(i->getModuleID()), back_inserter(zbuf));
413 sort(zbuf.begin(), zbuf.end(), timeSorter<JHitL1>);
415 dataL1.push_back(*zbuf.begin());
422 JDataL1_t::iterator __end = dataL1.begin();
432 __end =
clusterize(dataL1.begin(), dataL1.end(), weightSorter<JHitL1>, match3D);
436 __end =
clusterize(dataL1.begin(), dataL1.end(), match3B);
445 for (JDataL1_t::iterator i = dataL1.begin(); i != dataL1.end(); ++i)
450 for (JDataL1_t::iterator i = dataL1.begin(); i != dataL1.end(); ++i)
459 for (JDataL1_t::iterator i = dataL1.begin(); i != dataL1.end(); ++i)
462 __end = partition(dataL1.begin(), __end, horizon);
465 for (JDataL1_t::iterator i = dataL1.begin(); i != dataL1.end(); ++i)
471 __end = dataL1.end();
478 JDataL1_t::iterator __q = __end;
485 L1.insert(hit->getModuleID());
487 const double t1 = converter.getTime(hit->getT());
489 if (zmap[hit->getModuleID()].has(
JTimeRange(t1 - 0.5*Tmax_ns, t1 + 0.5*Tmax_ns))) {
491 L1ok.insert(hit->getModuleID());
497 iter_swap(hit, --__q);
502 if (L1mc != 0 && !L1.empty()) {
504 Double_t
x = numeric_limits<Double_t>::max();
511 he->Fill(
x, (Double_t) L1ok.size() / (Double_t) L1mc);
512 hp->Fill(
x, (Double_t) L1ok.size() / (Double_t) L1.size());
517 for (JDataL1_t::iterator hit = dataL1.begin(); hit != __end; ++hit) {
518 hit->transform(R, pos);
522 for (JDataL1_t::iterator hit = dataL1.begin(); hit != __end; ++hit) {
528 for (JHitL1::const_iterator i = hit->begin(); i != hit->end(); ++i) {
529 if (i->getDot(
gui) < dot)
530 dot = i->getDot(
gui);
533 const double w = (hit->rbegin()->getT() - hit->begin()->getT());
536 ht1.Fill(converter.getTime(hit->getT()) - t1);
538 hx1.Fill(hit->getX());
541 ht2.Fill(converter.getTime(hit->getT()) - t1);
543 hx2.Fill(hit->getX());
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
3D match criterion for acoustic signals.
Router for direct addressing of module data in detector data structure.
Router for direct addressing of PMT data in detector data structure.
Data structure for position in three dimensions.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
Data structure for normalised vector in three dimensions.
Utility class to parse command line options.
counter_type getCounter() const
Get counter.
3D match criterion with road width.
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time.
const Trk & get_neutrino(const Evt &evt)
Get incoming neutrino.
JDirection3D getDirection(const Vec &dir)
Get direction.
bool has_neutrino(const Evt &evt)
Test whether given event has an incoming neutrino.
JPosition3D getPosition(const Vec &pos)
Get position.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
bool is_noise(const Hit &hit)
Verify hit origin.
Vec getOffset(const JHead &header)
Get offset.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
double getCosThetaC()
Get average cosine of Cherenkov angle of water corresponding to group velocity.
const double getInverseSpeedOfLight()
Get inverse speed of light.
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity.
double getSinThetaC()
Get average sine of Cherenkov angle of water corresponding to group velocity.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
static const struct JTRIGGER::clusterize clusterize
static const struct JTRIGGER::clusterizeWeight clusterizeWeight
JMatchHelper< JHit_t > make_match(bool(*match)(const JHit_t &, const JHit_t &))
Auxiliary method to make JMatch object based on pointer to match function.
KM3NeT DAQ data structures and auxiliaries.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
General purpose class for multiple pointers.
Auxiliary class for defining the range of iterations of objects.
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
virtual bool hasNext() override
Check availability of next element.
virtual const multi_pointer_type & next() override
Get next element.
Data structure for L2 parameters.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
double E
Energy [GeV] (either MC truth or reconstructed)
The Vec class is a straightforward 3-d vector, which also works in pyroot.