// c++ standard library #include #include #include #include #include // JPP #include "Jeep/JParser.hh" #include "km3net-dataformat/online/JDAQ.hh" #include "km3net-dataformat/online/JDAQTimeslice.hh" #include "JDAQ/JDAQEventIO.hh" #include "JDAQ/JDAQTriggeredHitIO.hh" #include "JDAQ/JDAQTimesliceIO.hh" #include "JDAQ/JDAQSummarysliceIO.hh" #include "JROOT/JManager.hh" #include "JSupport/JMultipleFileScanner.hh" #include "JSupport/JSupport.hh" #include "JDetector/JDetector.hh" #include "JDetector/JDetectorToolkit.hh" #include "JDetector/JModuleRouter.hh" #include "JTrigger/JSuperFrame2D.hh" #include "JTrigger/JHitR0.hh" #include "JTrigger/JHitL0.hh" #include "JTrigger/JHitToolkit.hh" #include "JTrigger/JTriggerParameters.hh" #include "JTrigger/JTimesliceRouter.hh" // root #include "TH1D.h" #include "TH2D.h" // namespaces using namespace std; using namespace KM3NETDAQ ; // for JDAQTimeSlice using namespace JSUPPORT; // for JFileScanner using namespace JLANG; // for JMultipleFileScanner using namespace JDETECTOR ; using namespace JPP ; int main(int argc , char** argv){ JMultipleFileScanner inputFiles; string detectorFile; JDetector detector; string outFile; double frequency; int PMTSelector; int Stagger; try { JParser<> zap; zap['f'] = make_field(inputFiles ); zap['a'] = make_field(detectorFile ); zap['o'] = make_field(outFile ); //outfile zap['H'] = make_field(frequency ); //flashing frequency in kHz zap['P'] = make_field(PMTSelector ) = 0; //Select a PMT to analyze zap['S'] = make_field(Stagger ) = 3520; //Currently this is the stagger offset used zap(argc,argv); } catch(const exception &error) { ERROR(error.what() << endl); } load(detectorFile, detector); JModuleRouter moduleRouter(detector); JTriggerParameters triggerParameters; int pulse_period = 1e9/(frequency*1e3); //pulse period in ns and frequency in kHz JManager < string, TH2F >* Pulses; //time on x-axis and ToT on y axis Pulses = new JManager < string, TH2F > ( new TH2F("%", "", Stagger, -0.5, Stagger-0.5, 256, -0.5, 255.5) ); while( inputFiles.hasNext() ) { JDAQTimesliceL0 slice = *(inputFiles.next()); JTimesliceRouter timesliceRouter(triggerParameters.numberOfBins); timesliceRouter.configure(slice); for(JDetector::iterator module = detector.begin(); module != detector.end(); ++module){ int String = module->getString(); int Floor = module->getFloor(); if(timesliceRouter.hasSuperFrame( module->getID() )){ JDAQSuperFrame SuperFrame = timesliceRouter.getSuperFrame( module->getID() ); for(JDAQSuperFrame::const_iterator hit = SuperFrame.begin(); hit != SuperFrame.end(); ++hit){ int PMT = static_cast(hit->getPMT()); if(PMT == PMTSelector){ double raw_time = hit->getT(); double time = raw_time - pulse_period * int(raw_time/pulse_period) - Stagger*(Floor - 1); double ToT = hit->getToT(); (*Pulses)[ MAKE_STRING( "S"+to_string(String)+"F"+to_string(Floor) ).c_str() ]->Fill(time,ToT); } } } } } cout << " Writing histograms to output" << endl; TFile output(outFile.c_str() , "recreate") ; Pulses -> Write(output); }