118 using namespace MONITORL1DT;
124 double Timewindow_ns;
128 unsigned int multiplicity;
135 JParser<> zap(
"Program to create L1 hit time difference histograms from raw data.");
137 zap[
'f'] =
make_field(inputFile,
"input file");
139 zap[
'a'] =
make_field(detectorFile,
"detector file");
140 zap[
't'] =
make_field(TmaxL1_ns,
"max time between L1 hits [ns]") = 1000.0;
141 zap[
'T'] =
make_field(Timewindow_ns,
"time window around t=0 [ns]") = 2400.0;
142 zap[
'w'] =
make_field(binwidth,
"binwidth [ns]") = 1;
143 zap[
'C'] =
make_field(selector,
"datastream selector") = getROOTClassSelection<JDAQTimesliceTypes_t>();
144 zap[
'm'] =
make_field(multiplicity,
"minimal multiplicity of the L1 hits") = 2;
145 zap[
'c'] =
make_field(correct_time,
"subtract expected arrival time from delta-t");
149 if (zap.read(argc, argv) != 0)
152 catch(
const exception &error) {
153 FATAL(error.what() << endl);
167 FATAL(
"Empty detector." << endl);
174 const double ctMin = -1;
181 const double xmin = -0.5;
182 const double xmax = nx - 0.5;
184 const double ymin = -floor(Timewindow_ns) + 0.5;
185 const double ymax = +floor(Timewindow_ns) + 0.5;
186 const int ny = (int) ((ymax - ymin) / binwidth);
191 Int_t npairs =
c.getNumberOfPairs();
195 manager =
new JManager <int, TH2D>(
new TH2D(
"h%",
"", npairs, 0.5, npairs+0.5, ny, ymin, ymax));
197 NOTICE(
"Running JMonitorL1dt: Monitoring L1 time differences and creating histograms." << endl);
198 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
200 const JModuleAddress& address = router.getAddress(module->getID());
202 STATUS(
"Booking histograms for module " << module->getID() << endl);
204 const JString title(module->getID());
207 titleString1D = title +
".1L";
208 titleString2D = title +
".2S";
211 new TH1D((titleString1D).c_str(), NULL, nx,
xmin,
xmax));
213 for (JDetector::iterator mod =
detector.begin(); mod !=
detector.end(); ++mod) {
214 zmap[address.
first].h2s->GetXaxis()->SetBinLabel(
distance(
detector.begin(), mod)+1, Form(
"%i", mod->getID()));
215 zmap[address.
first].h1l->GetXaxis()->SetBinLabel(
distance(
detector.begin(), mod)+1, Form(
"%i", mod->getID()));
226 for ( ;
in.hasNext() && counter != inputFile.getLimit(); ++counter) {
228 STATUS(
"event: " << setw(10) << counter <<
'\r');
DEBUG(endl);
236 for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
237 if (router.hasModule(super_frame->getModuleID()) && !super_frame->empty()) {
239 const JModuleAddress& address = router.getAddress(super_frame->getModuleID());
244 buildL2(*super_frame, module, back_inserter(frameL1));
246 for (JFrameL1_t::iterator L1hit = frameL1.begin(); L1hit != frameL1.end(); ++L1hit) {
247 buffer.push_back(
JElement(address.
first, L1hit->begin()->getT()));
253 if (!DOM_OK[
distance(zmap.begin(), h1)]) {
256 for (
unsigned int i = 0;
i <
detector.size(); ++
i) {
262 sort(buffer.begin(), buffer.end());
269 while (++q != buffer.end() && q->t - p->t <= Timewindow_ns ) {
275 double time_correction = (correct_time ? (dom_distance /
getSpeedOfLight()) : 0);
277 zmap[p->id].h2s->Fill(q->id, q->t - p->t - time_correction);
278 zmap[q->id].h2s->Fill(p->id, p->t - q->t + time_correction);
283 (*manager)[module_p.
getString()]->Fill(xbin, q->t - p->t - time_correction);
296 for (
int ibin = 1; ibin <= hl->GetNbinsX(); ++ibin) {
298 hl->SetBinError(ibin, 0.0000001);
Utility class to parse command line options.
Wrapper class around STL string class.
int getFloor() const
Get floor number.
Data structure for a composite optical module.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Auxiliary class to select ROOT class based on class name.
Router for direct addressing of module data in detector data structure.
Auxiliary class for multiplexing object iterators.
double getDistance(const JFirst_t &first, const JSecond_t &second)
Get distance between objects.
int first
index of module in detector data structure
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Data structure for hit time and DOM identifier.
double getFrameTime()
Get frame time duration.
int getNumberOfFloors(const JDetector &detector)
Get number of floors.
Address of module in detector data structure.
const JPosition3D & getPosition() const
Get position.
Data structure for L2 parameters.
$WORKDIR ev_configure_dqsimulator txt echo process $DQ_SIMULATOR $i $SOURCE_HOST[$index] csh c(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&($DQ_SIMULATOR\-u\$NAME\$\-H\$SERVER\$\-M\$LOGGER\$\-d $DEBUG</dev/null > &/dev/null &))'
int getString() const
Get string number.
const double getSpeedOfLight()
Get speed of light.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
General purpose class for object reading from a list of file names.
bool comparepair(const pair_type &A, const pair_type &B)
do set_variable DETECTOR_TXT $WORKDIR detector
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
#define DEBUG(A)
Message macros.