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