Changeset 3800 for trunk/MagicSoft/Mars/mraw/MRawFileRead.cc
- Timestamp:
- 04/22/04 19:40:02 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/mraw/MRawFileRead.cc
r3568 r3800 24 24 25 25 ////////////////////////////////////////////////////////////////////////////// 26 // // 27 // MRawFileRead // 28 // // 29 // This tasks reads the raw binary file like specified in the TDAS??? // 30 // and writes the data in the corresponding containers which are // 31 // either retrieved from the parameter list or created and added. // 32 // // 33 // Input Containers: // 34 // -/- // 35 // // 36 // Output Containers: // 37 // MRawRunHeader, MRawEvtHeader, MRawEvtData, MRawCrateArray, MRawEvtTime // 38 // // 26 // 27 // MRawFileRead 28 // 29 // This tasks reads the raw binary file like specified in the TDAS??? 30 // and writes the data in the corresponding containers which are 31 // either retrieved from the parameter list or created and added. 32 // 33 // Use SetInterleave() if you don't want to read all events, eg 34 // SetInterleave(5) reads only each 5th event. 35 // 36 // Input Containers: 37 // -/- 38 // 39 // Output Containers: 40 // MRawRunHeader, MRawEvtHeader, MRawEvtData, MRawCrateArray, MRawEvtTime 41 // 39 42 ////////////////////////////////////////////////////////////////////////////// 40 43 #include "MRawFileRead.h" … … 43 46 #include <fstream> 44 47 48 #include <TSystem.h> 49 45 50 #include "MLog.h" 46 51 #include "MLogManip.h" … … 48 53 #include "MTime.h" 49 54 #include "MParList.h" 55 50 56 #include "MRawRunHeader.h" 51 57 #include "MRawEvtHeader.h" … … 95 101 // 96 102 MRawFileRead::MRawFileRead(const char *fname, const char *name, const char *title) 97 : fFileName (fname), fIn(NULL)103 : fFileNames(NULL), fNumFile(0), fIn(NULL), fParList(NULL), fInterleave(1) 98 104 { 99 105 fName = name ? name : "MRawFileRead"; 100 106 fTitle = title ? title : "Read task to read DAQ binary files"; 101 107 102 fIn = new ifstream; 108 fFileNames = new TList; 109 fFileNames->SetOwner(); 110 111 AddFile(fname); 103 112 } 104 113 … … 109 118 MRawFileRead::~MRawFileRead() 110 119 { 111 delete fIn; 120 delete fFileNames; 121 if (fIn) 122 delete fIn; 123 } 124 125 // -------------------------------------------------------------------------- 126 // 127 // Add a new file to a list of files to be processed, Returns the number 128 // of files added. (We can enhance this with a existance chack and 129 // wildcard support) 130 // 131 Int_t MRawFileRead::AddFile(const char *fname) 132 { 133 TNamed *name = new TNamed(fname, ""); 134 fFileNames->AddLast(name); 135 return 1; 136 137 } 138 139 // -------------------------------------------------------------------------- 140 // 141 // This opens the next file in the list and deletes its name from the list. 142 // 143 Bool_t MRawFileRead::OpenNextFile() 144 { 145 // 146 // open the input stream and check if it is really open (file exists?) 147 // 148 if (fIn) 149 delete fIn; 150 fIn = NULL; 151 152 // 153 // Check for the existance of a next file to read 154 // 155 TObject *file = fFileNames->At(fNumFile); 156 if (!file) 157 return kFALSE; 158 159 // 160 // open the file which is the first one in the chain 161 // 162 const char *name = file->GetName(); 163 164 const char *expname = gSystem->ExpandPathName(name); 165 fIn = new ifstream(expname); 166 167 const Bool_t noexist = !(*fIn); 168 if (noexist) 169 { 170 *fLog << err << "Cannot open file " << expname << ": "; 171 *fLog << strerror(errno) << endl; 172 } 173 else 174 *fLog << inf << "Open file: '" << name << "'" << endl; 175 176 delete [] expname; 177 178 if (noexist) 179 return kFALSE; 180 181 fNumFile++; 182 183 // 184 // Read RUN HEADER (see specification) from input stream 185 // 186 if (!fRawRunHeader->ReadEvt(*fIn)) 187 return kFALSE; 188 189 if (!(*fIn)) 190 { 191 *fLog << err << "Error: Accessing file '" << name << "'" << endl; 192 return kFALSE; 193 } 194 195 // 196 // Print Run Header 197 // 198 fRawRunHeader->Print(); 199 *fRawEvtTime = fRawRunHeader->GetRunStart(); 200 201 fNumEvents += fRawRunHeader->GetNumEvents(); 202 203 // 204 // Give the run header information to the 'sub-classes' 205 // Run header must be valid! 206 // 207 fRawEvtHeader->Init(fRawRunHeader, fRawEvtTime); 208 fRawEvtData ->Init(fRawRunHeader, fRawCrateArray); 209 210 // 211 // Search for MTaskList 212 // 213 MTask *tlist = (MTask*)fParList->FindObject("MTaskList"); 214 if (!tlist) 215 { 216 *fLog << err << dbginf << "MTaskList not found... abort." << endl; 217 return kFALSE; 218 } 219 220 // 221 // A new file has been opened and new headers have been read. 222 // --> ReInit tasklist 223 // 224 return tlist->ReInit(fParList); 225 } 226 227 // -------------------------------------------------------------------------- 228 // 229 // Return file name of current file. 230 // 231 const TString MRawFileRead::GetFileName() const 232 { 233 const TObject *file = fFileNames->At(fNumFile-1); 234 return file ? file->GetName() : ""; 235 } 236 237 // -------------------------------------------------------------------------- 238 // 239 // Restart with the first file 240 // 241 Bool_t MRawFileRead::Rewind() 242 { 243 fNumFile=0; 244 fNumEvents=0; 245 return OpenNextFile(); 112 246 } 113 247 … … 130 264 Int_t MRawFileRead::PreProcess(MParList *pList) 131 265 { 266 fParList = pList; 267 132 268 // 133 269 // open the input stream … … 135 271 // successfull 136 272 // 137 fIn->open(fFileName);138 if (!(*fIn))139 {140 *fLog << err << "Cannot open file " << fFileName << ": ";141 *fLog << strerror(errno) << endl;142 return kFALSE;143 }144 145 273 if (!MRawRead::PreProcess(pList)) 146 274 return kFALSE; 147 275 148 276 // 149 // Read RUN HEADER (see specification) from input stream 150 // 151 if (!fRawRunHeader->ReadEvt(*fIn)) 152 return kFALSE; 153 154 if (!(*fIn)) 155 { 156 *fLog << err << "Error: Accessing file '" << fFileName << "'" << endl; 157 return kFALSE; 158 } 159 //if (fRawRunHeader->GetMagicNumber()!=kMagicNumber) 160 // return kFALSE; 161 162 fRawRunHeader->Print(); 163 164 *fRawEvtTime = fRawRunHeader->GetRunStart(); 165 166 // 167 // Give the run header information to the 'sub-classes' 168 // Run header must be valid! 169 // 170 fRawEvtHeader->Init(fRawRunHeader, fRawEvtTime); 171 fRawEvtData ->Init(fRawRunHeader, fRawCrateArray); 277 // Now open next (first) file 278 // 279 if (!Rewind()) 280 return kFALSE; 172 281 173 282 return kTRUE; … … 184 293 Int_t MRawFileRead::Process() 185 294 { 186 return ReadEvent(*fIn); 295 while (1) 296 { 297 // 298 // skip events if requested 299 // 300 if (fInterleave>1 && GetNumExecutions()%fInterleave>0 && fIn->peek()!=EOF) 301 { 302 SkipEvent(*fIn); 303 return kCONTINUE; 304 } 305 306 // 307 // Read a single event from file 308 // 309 const Bool_t rc = ReadEvent(*fIn); 310 if (rc!=kFALSE) 311 return rc; 312 313 // 314 // If an event could not be read from file try to open new file 315 // 316 if (!OpenNextFile()) 317 return kFALSE; 318 } 319 return kTRUE; 187 320 } 188 321 … … 195 328 Int_t MRawFileRead::PostProcess() 196 329 { 197 fIn->close();198 199 330 // 200 331 // Sanity check for the number of events 201 332 // 202 if (f RawRunHeader->GetNumEvents()==GetNumExecutions()-1 || GetNumExecutions()==0)333 if (fNumEvents==GetNumExecutions()-1 || GetNumExecutions()==0) 203 334 return kTRUE; 204 335 205 336 *fLog << warn << dec; 206 337 *fLog << "Warning - number of read events (" << GetNumExecutions()-1; 207 *fLog << ") doesn't match number in run header (";208 *fLog << f RawRunHeader->GetNumEvents()<< ")." << endl;338 *fLog << ") doesn't match number in run header(s) ("; 339 *fLog << fNumEvents << ")." << endl; 209 340 210 341 return kTRUE;
Note:
See TracChangeset
for help on using the changeset viewer.