/* ======================================================================== *\ ! ! * ! * This file is part of MARS, the MAGIC Analysis and Reconstruction ! * Software. It is distributed to you in the hope that it can be a useful ! * and timesaving tool in analysing Data of imaging Cerenkov telescopes. ! * It is distributed WITHOUT ANY WARRANTY. ! * ! * Permission to use, copy, modify and distribute this software and its ! * documentation for any purpose is hereby granted without fee, ! * provided that the above copyright notice appear in all copies and ! * that both that copyright notice and this permission notice appear ! * in supporting documentation. It is provided "as is" without express ! * or implied warranty. ! * ! ! ! Author(s): Thomas Bretz, 11/2003 ! ! Copyright: MAGIC Software Development, 2000-2003 ! ! \* ======================================================================== */ ////////////////////////////////////////////////////////////////////////////// // // This macro demonstrates how to read a central control report file. // (rootification, see merpp, too) // // In a second eventloop it gives an example on how to read such a root file. // ////////////////////////////////////////////////////////////////////////////// void readrep(const char *fname="CC_2003_11_04_23_53_18.rep") { // // Read a report file and write containers into a root file // MParList plist; MTaskList tlist; plist.AddToList(&tlist); MReportFileRead read(fname); tlist.AddToList(&read); read.AddToList("DAQ"); read.AddToList("Drive"); read.AddToList("Camera"); read.AddToList("Trigger"); MWriteRootFile write("test.root"); write.AddContainer("MReportCamera", "Camera"); write.AddContainer("MTimeCamera", "Camera"); write.AddContainer("MCameraAUX", "Camera"); write.AddContainer("MCameraCalibration", "Camera"); write.AddContainer("MCameraCooling", "Camera"); write.AddContainer("MCameraHV", "Camera"); write.AddContainer("MCameraLV", "Camera"); write.AddContainer("MCameraLids", "Camera"); write.AddContainer("MReportTrigger", "Trigger"); write.AddContainer("MTimeTrigger", "Trigger"); write.AddContainer("MReportDrive", "Drive"); write.AddContainer("MTimeDrive", "Drive"); tlist.AddToList(&write); MEvtLoop evtloop; evtloop.SetParList(&plist); if (!evtloop.Eventloop()) return; tlist.PrintStatistics(); // ---------------------------------------------------------------- // // Read a report file and write containers into a root file // MTaskList tlist2; plist.Replace(&tlist2); // Create a tasklist to process the read events from the Camera tree MTaskList list1("ProcessCamera"); MPrint print1("MTimeCamera"); list1.AddToList(&print1); // Create a tasklist to process the read events from the Drive tree MTaskList list2("ProcessDrive"); MPrint print2("MTimeDrive"); list2.AddToList(&print2); // Tell the reader to read the trees Drive, Trigger and Camera MReadReports read; read.AddTree("Drive"); read.AddTree("Trigger"); read.AddTree("Camera"); //read.AddTree("Events", "MTime."); // for later use! // Now (not earlier!) set the file to read! read.AddFile("test.root"); // First read the events tlist.AddToList(&read); // Process the events from the Camera tree with the task list list1 tlist.AddToList(&list1, "Camera"); // Process the events from the Camera tree with the task list list2 tlist.AddToList(&list2, "Drive"); // The task lists list1 and list2 are only executed (according to // their stream id - the second argument of AddToList) if a // corresponding event was read and MReadReports has set the stream // id accoringly. MReadReports always sets the stream id to the name // of the tree from which the event was read MEvtLoop evtloop; evtloop.SetParList(&plist); // // Execute the eventloop which should print the time-stamps of the subsystem // events from Drive and Camera in the correct order... // if (!evtloop.Eventloop()) return; tlist.PrintStatistics(); }