92     void compile(
const double       Tmax,
 
   93                  const unsigned int L1 = 2)
 
   95       std::sort(this->begin(), this->end());
 
   99       for (const_iterator i = this->begin(); i != this->end(); ) {
 
  112           buffer.insert(i->getID());
 
  114           const_iterator 
j = i;
 
  116           for (
double t1 = i->getLowerLimit(); ++
j != this->end() && 
j->getLowerLimit() - t1 < Tmax; t1 = j->getLowerLimit()) {
 
  117             buffer.insert(
j->getID());
 
  120           if (buffer.size() >= L1) {      
 
  129       this->erase(out, end());
 
  140     inline bool has(
const JTimeRange& timerange)
 const 
  142       const_iterator i = std::lower_bound(this->begin(), this->end(), timerange.
getLowerLimit());
 
  144       return i != this->end() && i->overlap(timerange);
 
  158   inline bool matchAll(
const JHitL1& first, 
const JHitL1& second)
 
  174     JHorizon(
const double ct,
 
  188     bool operator()(
const JHitL1& hit)
 const 
  192       for (JHitL1::const_iterator i = hit.begin(); i != hit.end(); ++i) {
 
  212 int main(
int argc, 
char **argv)
 
  219   JLimit_t&      numberOfEvents = inputFile.getLimit();
 
  232     JParser<> zap(
"Example program to test performance of various hit filters.");
 
  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()) {
 
  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());
 
Algorithms for hit clustering and sorting.
 
Data structure for detector geometry and calibration.
 
int main(int argc, char **argv)
 
Basic data structure for L0 hit.
 
Basic data structure for L1 hit.
 
Match operator for Cherenkov light from muon with given direction.
 
Match operator for Cherenkov light from muon in any direction.
 
Match operator for Cherenkov light from muon in any direction.
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Direct access to module in detector data structure.
 
Direct access to PMT in detector data structure.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Time-over-threshold (ToT) pulse from a PMT.
 
ROOT TTree parameter settings of various packages.
 
Basic data structure for time and time over threshold information of hit.
 
Synchronously read DAQ events and Monte Carlo events (and optionally other events).
 
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.
 
const JModule & getModule(const JObjectID &id) const
Get module parameters.
 
Router for direct addressing of PMT data in detector data structure.
 
int getParentModuleID(const JObjectID &id) const
Get parent module identifier.
 
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.
 
Auxiliary class for a time-over-threshold pulse from a PMT.
 
counter_type getCounter() const
Get counter.
 
Data structure for L1 hit.
 
3D match criterion with road width.
 
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time.
 
double getTime() const
Get DAQ/trigger time minus Monte Carlo 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.
 
static counter_type max()
Get maximum counter value.
 
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.
 
Auxiliary include file for time conversion between DAQ/trigger hit and Monte Carlo hit.