/* ======================================================================== *\ ! ! * ! * 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-2004 ! ! \* ======================================================================== */ ////////////////////////////////////////////////////////////////////////////// // // MReportFileReadCC // // This is a report file reader which implements the CC header checking. // Because diffrent subsystem are writing different headers it is not // easily possible to have one Reader for all files. Because of this // you must know to which subsystem the file belongs before you can // instantiate your reader if you need the header or want to check the // header. // // If you want to restrict reading to 'single run report files' you can // call SetRunNumber(12345). In this case Checking the Header will fail // if no run information is available or the runnumber in the header // doesn't match. To request a 'all run' file use SetRunNumber(0). // To allow both file types to be read use SetRunNumber(-1) // ////////////////////////////////////////////////////////////////////////////// #include "MReportFileReadCC.h" #include #include // atoi on gcc 2.95.3 #include #include "MLog.h" #include "MLogManip.h" ClassImp(MReportFileReadCC); using namespace std; // -------------------------------------------------------------------------- // // Default constructor. It tries to open the given file and creates a // THashTable which allows faster access to the MReport* objects. // MReportFileReadCC::MReportFileReadCC(const char *fname, const char *name, const char *title) : MReportFileRead(fname, name, title), fRunNumber(-1) { fName = name ? name : "MReportFileReadCC"; fTitle = title ? title : "Read task to read Central Control report files"; } // -------------------------------------------------------------------------- // // Check whether the file header corresponds to a central control file // header and check for the existance of a correct version number. // The version number may later be used to be able to read different // file versions // Int_t MReportFileReadCC::CheckFileHeader() { Int_t line = 0; TString str; str.ReadLine(*fIn); // Read to EOF or newline if (!*fIn) return line; line++; Int_t run = -1; // whole night report file if (str==TString("[CC Report File]")) run = 0; // report file matching a single run if (!str(TRegexp("^[CC Run [0-9]+ Control File]$")).IsNull()) run = atoi(str(TRegexp(" [0-9]+")).Data()); if (run<0) { *fLog << err << "ERROR - First line doesn't match '[CC Report File]' "; *fLog << "nor '^[CC Run [0-9]+ Control File]$'" << endl; return line; } if (fRunNumber!=-1 && fRunNumber!=run) { *fLog << err << "ERROR - Requested run #" << fRunNumber << " doesn't "; *fLog << "match found run #" << run << endl; return line; } str.ReadLine(*fIn); // Read to EOF or newline if (!*fIn) return line; if (str(TRegexp("^Arehucas Version Number [0-9]+-[0-9]$")).IsNull()) { *fLog << err << "ERROR - Version '^Arehucas Version Number [0-9]+-[0-9]$' "; *fLog << "not found in second line." << endl; return line; } line++; str = str(TRegexp("[0-9]+-[0-9]")); str.Prepend("20"); str.ReplaceAll("-", ""); const Int_t ver = atoi(str.Data()); *fLog << dbg << "Report File version: <" << ver << ">" << endl; SetVersion(ver); return line; }