1#ifndef __JRUNANALYZER__ 
    2#define __JRUNANALYZER__ 
   66    numberOfTimeslices       (nTimeslices),
 
   67    numberOfSummaryslices (nSummaryslices),
 
   68    numberOfEvents               (nEvents),
 
   69    analysis_level         (analysislevel)
 
 
   90    while (scanner.hasNext()) {
 
  101        if (event.hasTriggerBit(i)) {
 
  107      int counter_3dmuon = 0;
 
  109      JRange_t range(JRange_t::DEFAULT_RANGE());
 
  114        const double   t1     = 
getTime(hit->getT(), module.
getPMT(hit->getPMT()));
 
  122        if (router.
hasModule(hit->getModuleID())) {
 
  129          int String = 
module.getString();
 
  130          int Floor  = 
module.getFloor();
 
  140            if (hit -> hasTriggerBit(i)) {
 
  146          FATAL(
"JModuleRouter trying to access non existing identifier: "<< hit->getModuleID());
 
  158        if (router.
hasModule(hit->getModuleID())) {
 
  162          int String = 
module.getString();
 
  163          int Floor  = 
module.getFloor();
 
  164          int pmt    = hit->  getPMT();
 
  166          if(analysis_level == 1){
 
  177            FATAL(
"JModuleRouter trying to access non existing identifier: "<< hit->getModuleID());
 
 
  191    TH1D* h_tres = 
new TH1D(
"h_tres", 
";Time residuals [ns]; Entries", 100, -50, 150);
 
  192    TH1D* h_likelihood = 
new TH1D (
"h_likelihood", 
" ; Likelihood; Reconstructed Events ", 100, -1000, 1000);
 
  193    TH1D* h_beta0 = 
new TH1D(
"h_beta0", 
"; beta0; Reconstructed Events", 20, 0, 1);
 
  194    TH1D* h_energy = 
new TH1D (
"h_energy", 
" ; Energy [GeV]; Reconstructed Events ", 65, 0, 9);
 
  196    TH1D* h_zenith = 
new TH1D(
"h_zenith", 
"; cosZenith; Reconstructed Events", 20, -1, 1);
 
  197    TH1D* h_azimuth = 
new TH1D(
"h_azimuth", 
"; cosAzimuth; Reconstructed Events", 20, -1, 1);
 
  198    TH1D* h_radial_position = 
new TH1D (
"h_radial_position", 
"; Radial Position [m]; Reconstructed Events", 60, 0, 4.2);
 
  200    TH1D* h_z_position = 
new TH1D (
"h_z_position", 
"; Z Position [m] ; Reconstructed Events", 50, 0, 3.2);
 
  203    while (scanner.hasNext()) {
 
  212        JEvt::iterator best = evt->begin();  
 
  213        h_energy -> Fill(best->getE());
 
  214        h_likelihood -> Fill(best->getQ());
 
  215        h_z_position -> Fill(best->getZ());
 
  216        h_radial_position -> Fill(sqrt(best->getX()*best->getX() + best->getY()*best->getY()));
 
  225        buildL0(
JDAQTimeslice(*event, 
false),  router, back_inserter(dataL0));
 
  227        for (std::vector<JHitL0>::const_iterator hit = dataL0.begin(); hit != dataL0.end(); ++hit) {
 
  229          h_tres -> Fill(hit->getT() - track.
getT(hit->getPosition()));
 
  238    h_likelihood -> Write();
 
  239    h_z_position -> Write();
 
  240    h_radial_position -> Write();
 
  242    h_azimuth -> Write();
 
 
  268    while (scanner.hasNext()){
 
  272      for (JDAQSummaryslice::const_iterator frame = slice.begin() ; frame != slice.end() ; ++ frame) {
 
  274        if (router.
hasModule(frame->getModuleID())) {
 
  278          int string = 
module.getString();
 
  279          int floor  = 
module.getFloor ();
 
  295          if(analysis_level == 1){
 
  300            const double factor = 1.0e-3;   
 
  304              rate += frame->getRate(i, factor);
 
  306              h2->Fill(i , frame->getRate(i, factor));
 
  308              PMT_rate_quantiles[string][floor][i].put(frame->getRate(i, factor)); 
 
  316            DOM_rate_quantiles[string][floor].put(rate);
 
  321            const double factor = 1.0e-3;   
 
  325              rate += frame->getRate(i, factor);
 
  332            DOM_rate_quantiles[string][floor].put(rate);
 
  337          FATAL(
"JModuleRouter trying to access non existing identifier: "<< frame->getModuleID());
 
  342    for (
const auto& i1 : DOM_rate_quantiles) {
 
  343      for (
const auto& i2 : i1.second) {
 
  344        if (i2.second.getCount() > 0) {
 
  350    if (analysis_level == 1){
 
  351      for (
const auto& i1 : PMT_rate_quantiles){
 
  356        for (
const auto& i2 : i1.second) {
 
  358            if (i2.second[i3].getCount() > 0){
 
  359              h2->Fill(i3, i2.first, i2.second[i3].getMean());
 
  360              h1->Fill(i2.second[i3].getMean());
 
 
  378    std::map < int , std::map <int , JQuantile> > DOM_rate_quantiles;
 
  380    double inverseFrameTimeSec = 1. / (1.0e-9 * 
getFrameTime());
 
  382    while (scanner.hasNext()){
 
  384      T slice = *(scanner.next());
 
  386      for(
auto & frame : slice) {
 
  387        if (router.
hasModule(frame.getModuleID())) {
 
  390          double  rate   = frame.numberOfHits * inverseFrameTimeSec;
 
  391          int     string = 
module.getString();
 
  392          int     floor  = 
module.getFloor ();
 
  394          DOM_rate_quantiles[string][floor].put(rate);
 
  396          vector <int>  pmt_hit_count (NUMBER_OF_PMTS , 0) ;
 
  398          if(analysis_level == 1){
 
  404            h2 -> Fill(hit->getPMT() , hit->getToT()) ;
 
  406            pmt_hit_count[hit->getPMT()]++;
 
  419            FATAL(
"JModuleRouter trying to access non existing identifier: "<< frame.getModuleID());
 
 
  440    JTreeScanner <JDAQSummaryslice> scanner(inputFile, numberOfSummaryslices);
 
  441    if (scanner.hasNext()) {
 
 
  456    JTreeScanner <T> scanner(inputFile, numberOfTimeslices);
 
  457    if(scanner.hasNext()) {
 
 
  472    JTreeScanner <JDAQEvent> scanner(inputFile, numberOfEvents);
 
  474    if(scanner.hasNext()) {
 
 
  503    f->mkdir(
"Detector");
 
  520        for (
typename JManager < string , TH2D >::const_iterator 
j = (*i) -> begin() ; 
j != (*i) -> end() ; ++
j){
 
  522          j->second->Scale(1., 
"width");
 
 
 
Basic data structure for L0 hit.
Dynamic ROOT object management.
Direct access to module in detector data structure.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
#define MAKE_STRING(A)
Make string.
Auxiliary class to define a range between two values.
ROOT TTree parameter settings of various packages.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Router for direct addressing of module data in detector data structure.
bool hasModule(const JObjectID &id) const
Has module.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
Data structure for a composite optical module.
const JPMT & getPMT(const int index) const
Get PMT.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
JVersor3D getDirection(const JVector3D &pos) const
Get photon direction of Cherenkov light on PMT.
double getTheta() const
Get theta angle.
double getPhi() const
Get phi angle.
TimesliceHistograms h_timeslice
void initialize_trigger_histograms()
void Write_manager_table_in_key_dir(TFile &f, vector< JManager< T, V > * > table)
TriggerHistograms h_trigger
void Write_manager_in_key_dir(TFile &f, JManager< T, V > *manager)
void initialize_summary_histograms()
void initialize_timeslice_histograms()
void Write_histogram_table_to_file(TFile &f, string dirname, vector< vector< T * > > table)
SummaryHistograms h_summary
Class dedicated to the analysis of KM3NeT runs.
void iterateSummarysliceTree(JTreeScanner< JDAQSummaryslice > &scanner)
JSingleFileScanner inputFile
JRA_Histograms histograms
JRunAnalyzer(const JSingleFileScanner<> &file, const JDetector &detector, TFile *out, JLimit_t nTimeslices, JLimit_t nSummaryslices, JLimit_t nEvents, int analysislevel)
Constructor.
void iterateEventTree(JTreeScanner< JDAQEvent > &scanner)
void iterateRecoEventTree(JParallelFileScanner< JTypeList< JDAQEvent, JFIT::JEvt > > &scanner, TFile &f)
JLimit_t numberOfTimeslices
void iterateTimesliceTree(JTreeScanner< T > &scanner)
void writeToFile(TFile *f, int analysis_level)
~JRunAnalyzer()
Destructor.
JLimit_t numberOfSummaryslices
General purpose class for parallel reading of objects from a single file or multiple files.
virtual const multi_pointer_type & next() override
Get next element.
Object reading from a list of files.
virtual void rewind() override
Rewind.
virtual bool hasNext() override
Check availability of next element.
int countHighRateVeto() const
Count high-rate veto status.
int countFIFOStatus() const
Count FIFO status.
bool testDAQStatus() const
Test DAQ status of packets.
Auxiliary class for trigger mask.
bool hasTriggerBit(const unsigned int bit) const
Check trigger bit.
static const int JGANDALF_BETA0_RAD
KM3NeT Data Definitions v3.6.0 https://git.km3net.de/common/km3net-dataformat.
JTrack3E getTrack(const Trk &track)
Get track.
void setLogarithmicX(TList *list)
Make x-axis of objects in list logarithmic (e.g. after using log10()).
std::string to_string(const T &value)
Convert value to string.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const char * getTime()
Get current local time conform ISO-8601 standard.
JTriggerbit_t getTriggerBit()
Get the trigger bit.
double getFrameTime()
Get frame time duration.
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Type definition of range.
General purpose string class.
Indexing of data type in type list.
Auxiliary class for defining the range of iterations of objects.
JManager< string, TH1D > * m_mean_summary_rate_distribution
JManager< string, TH2D > * m_mean_summary_rate
TH1D * h_pmt_rate_distribution
TH2D * h_daq_status_per_dom
JManager< string, TH2D > * m_summary_rate_distribution
TH1D * h_dom_rate_distribution
vector< JManager< string, TH2D > * > m_pmt_tot_distributions
void Fill_mean_ToT_histograms()
vector< JManager< string, TH2D > * > m_pmt_rate_distributions
vector< JManager< string, TH2D > * > m_mean_ToT
vector< TH2D * > h_dom_mean_rates
vector< JManager< string, TH1D > * > m_mean_ToT_distribution
TH2D * h_Triggered_hits_3dmuon_per_module
TH2D * h_Triggered_hits_per_module
JManager< string, TH2D > * m_Snapshot_hits_per_pmt
TH1D * h_tot_distribution_snapshot_hits
TH1D * h_Trigger_bit_event
TH1D * h_pmt_distribution_snapshot_hits
TH2D * h_Snapshot_hits_per_module
TH1D * h_pmt_distribution_triggered_hits
TH1D * h_tot_distribution_triggered_hits
TH1D * h_Number_of_overlays
TH1D * h_Triggered_over_Snapshot_hits
TH1D * h_Triggered_hits_3dmuon