Changeset 3800 for trunk/MagicSoft/Mars
- Timestamp:
- 04/22/04 19:40:02 (21 years ago)
- Location:
- trunk/MagicSoft/Mars
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/Changelog
r3799 r3800 25 25 26 26 27 27 28 2004/04/22: Thomas Bretz 28 29 29 30 * mhist/MHCamera.[h,cc]: 30 31 - implemented SetUsed 32 33 * merpp.cc: 34 - added "-ff" and interleave mode - both not execcively tested yet 35 36 * mhbase/MFillH.cc: 37 - added a missing 'endl' 38 39 * mraw/MRawCrateData.[h,cc], mraw/MRawEvtData.[h,cc], 40 mraw/MRawEvtHeader.[h,cc] 41 - added SkipEvt (the number of skipped bytes is untested) 42 43 * mraw/MRawEvtHeader.[h,cc] 44 - return kCONTINUE if time is invalid 45 46 * mraw/MRawFileRead.[h,cc]: 47 - implemented AddFile feature - first draft! 48 - added feature to skip events 49 50 * mraw/MRawFileWrite.h: 51 - changed default compression level corresponding to merpp to 2 52 53 * mraw/MRawRead.[h,cc]: 54 - added fForceMode flag to be able to suppress event errors 31 55 32 56 -
trunk/MagicSoft/Mars/merpp.cc
r3487 r3800 72 72 gLog << " -a, --no-colors Do not use Ansii color codes" << endl; 73 73 gLog << " -f Force overwrite of an existing file" << endl; 74 gLog << " -ff Force merpp to ignore broken events <raw data only>" << endl; 75 gLog << " --interleave=# Process only each i-th event [default=1] <raw data only>" << endl; 74 76 gLog << " --sql=mysql://user:password@url Insert run into database <raw data only>" << endl; 75 77 gLog << " --start=yyyy-mm-dd/hh:mm:ss.mmm Start event time for merpping report files" << endl; … … 117 119 gLog.SetNoColors(); 118 120 119 const Int_t kComprlvl = arg.HasOption("-c") ? arg.GetIntAndRemove("-c") : 1;121 const Int_t kComprlvl = arg.HasOption("-c") ? arg.GetIntAndRemove("-c") : 2; 120 122 Bool_t kUpdate = arg.HasOnlyAndRemove("--update") || arg.HasOnlyAndRemove("-u"); 123 const Bool_t kInterleave = arg.HasOption("--interleave=") ? arg.GetIntAndRemove("--interleave=") : 1; 121 124 const Bool_t kForce = arg.HasOnlyAndRemove("-f"); 125 const Bool_t kForceProc = arg.HasOnlyAndRemove("-ff"); 122 126 123 127 gLog.SetDebugLevel(arg.HasOption("-v") ? arg.GetIntAndRemove("-v") : 2); … … 307 311 { 308 312 read = new MRawFileRead(kNamein); 313 static_cast<MRawFileRead*>(read)->SetInterleave(kInterleave); 314 static_cast<MRawFileRead*>(read)->SetForceMode(kForceProc); 309 315 write = new MRawFileWrite(kNameout, option, "Magic root-file", kComprlvl); 310 316 } -
trunk/MagicSoft/Mars/mhbase/MFillH.cc
r3790 r3800 461 461 *fLog << (TestBit(kCanSkip) ? warn : err); 462 462 *fLog << (TestBit(kCanSkip) ? "WARNING" : "ERROR"); 463 *fLog << " Calling SetupFill for " << fH->GetDescriptor() << "...";464 *fLog << (TestBit(kCanSkip) ? "skipped." : "aborting.") ;463 *fLog << " - Calling SetupFill for " << fH->GetDescriptor() << "..."; 464 *fLog << (TestBit(kCanSkip) ? "skipped." : "aborting.") << endl; 465 465 466 466 return TestBit(kCanSkip) ? kSKIP : kFALSE; -
trunk/MagicSoft/Mars/mraw/MRawCrateData.cc
r3183 r3800 63 63 } 64 64 65 void MRawCrateData::SkipEvt(istream &fin, UShort_t ver) 66 { 67 fin.seekg(ver>1?11:10); 68 } 69 65 70 // -------------------------------------------------------------------------- 66 71 // -
trunk/MagicSoft/Mars/mraw/MRawCrateData.h
r2645 r3800 29 29 30 30 void ReadEvt(istream& fin, UShort_t ver); 31 void SkipEvt(istream& fin, UShort_t ver); 31 32 32 33 ClassDef(MRawCrateData, 2) //Container to store the Raw CRATE DATA -
trunk/MagicSoft/Mars/mraw/MRawEvtData.cc
r3183 r3800 523 523 } 524 524 525 // -------------------------------------------------------------------------- 526 // 527 // Make sure, that you skip the whole event. This function only skips a part 528 // of the event - see MRawRead::SkipEvent 529 // 530 void MRawEvtData::SkipEvt(istream &fin) 531 { 532 const UShort_t nlo = fRunHeader->GetNumSamplesLoGain(); 533 const UShort_t nhi = fRunHeader->GetNumSamplesHiGain(); 534 const UShort_t npic = fRunHeader->GetNumPixInCrate(); 535 536 fin.seekg((nhi+nlo)*npic, ios::cur); 537 } 538 525 539 Bool_t MRawEvtData::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const 526 540 { -
trunk/MagicSoft/Mars/mraw/MRawEvtData.h
r2958 r3800 71 71 72 72 void ReadEvt(istream &fin); 73 void SkipEvt(istream &fin); 73 74 74 75 Bool_t GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type=0) const; -
trunk/MagicSoft/Mars/mraw/MRawEvtHeader.cc
r3497 r3800 310 310 if (!DecodeTime(abstime)) 311 311 { 312 *fLog << err << "ERROR- Event time in event header invalid... abort." << endl;313 return k FALSE;312 *fLog << warn << "WARNING - Event time in event header invalid... abort." << endl; 313 return kCONTINUE; 314 314 } 315 315 … … 331 331 332 332 return !fin.eof(); 333 } 334 335 void MRawEvtHeader::SkipEvt(istream &fin, UShort_t ver) 336 { 337 fin.seekg(36+fPixLoGainOn->GetSize(), ios::cur); 333 338 } 334 339 -
trunk/MagicSoft/Mars/mraw/MRawEvtHeader.h
r3483 r3800 66 66 67 67 int ReadEvt(istream& fin, UShort_t ver); 68 void SkipEvt(istream& fin, UShort_t ver); 68 69 69 70 ClassDef(MRawEvtHeader, 1) // Parameter Conatiner for raw EVENT HEADER -
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; -
trunk/MagicSoft/Mars/mraw/MRawFileRead.h
r3328 r3800 6 6 #endif 7 7 8 class TList; 9 class MTaskList; 10 8 11 class MRawFileRead : public MRawRead 9 12 { 10 13 private: 11 TString fFileName; 12 ifstream *fIn; //! buffered input stream (file to read from) 14 TList *fFileNames; // list of file names 15 UInt_t fNumFile; //! number of next file 16 UInt_t fNumEvents; //! input stream (file to read from) 17 18 ifstream *fIn; //! input stream (file to read from) 19 20 MParList *fParList; //! tasklist to call ReInit from 21 22 UInt_t fInterleave; 23 24 Bool_t OpenNextFile(); 13 25 14 26 Int_t PreProcess(MParList *pList); … … 20 32 ~MRawFileRead(); 21 33 22 const TString &GetFileName() const { return fFileName; } 34 void SetInterleave(UInt_t i) { fInterleave = i; } 35 36 const TString GetFileName() const; 37 38 Int_t AddFile(const char *fname); 39 Bool_t Rewind(); 23 40 24 41 ClassDef(MRawFileRead, 0) // Task to read the raw data binary file -
trunk/MagicSoft/Mars/mraw/MRawFileWrite.h
r2556 r3800 37 37 const Option_t *opt="RECREATE", 38 38 const char *ftitle="Untitled", 39 const Int_t comp= 1,39 const Int_t comp=2, 40 40 const char *name=NULL, const char *title=NULL); 41 41 ~MRawFileWrite(); -
trunk/MagicSoft/Mars/mraw/MRawRead.cc
r3183 r3800 66 66 // 67 67 MRawRead::MRawRead(const char *name, const char *title) 68 : fForceMode(kFALSE) 68 69 { 69 70 fName = name ? name : "MRawRead"; … … 161 162 162 163 // 163 // 164 // Read in the next EVENT HEADER (see specification), 164 165 // if there is no next event anymore stop eventloop 165 166 // 166 if (!fRawEvtHeader->ReadEvt(fin, ver)) 167 return kFALSE; 167 const Bool_t rc = fRawEvtHeader->ReadEvt(fin, ver); 168 if (rc==kCONTINUE && fForceMode==kFALSE) 169 { 170 *fLog << err << "Problem found reading the event header... abort." << endl; 171 return kFALSE; 172 } 168 173 169 174 // … … 203 208 CreateFakeTime(); 204 209 205 // FIXME: For all other runs we should enhance the precision206 // of the time-stamp by using the FADCClockTick210 if (rc==kCONTINUE && fForceMode==kTRUE) 211 return kCONTINUE; 207 212 208 213 return kTRUE; 209 214 } 215 216 void MRawRead::SkipEvent(istream &fin) 217 { 218 // 219 // Get file format version 220 // 221 const UShort_t ver = fRawRunHeader->GetFormatVersion(); 222 fRawEvtHeader->SkipEvt(fin, ver); 223 224 const UShort_t nc = fRawRunHeader->GetNumCrates(); 225 for (int i=0; i<nc; i++) 226 { 227 fRawCrateArray->GetEntry(i)->SkipEvt(fin, ver); 228 fRawEvtData->SkipEvt(fin); 229 } 230 } -
trunk/MagicSoft/Mars/mraw/MRawRead.h
r2728 r3800 22 22 MTime *fRawEvtTime; // raw evt time information container to fill from file 23 23 24 Bool_t fForceMode; // Force mode skipping defect events 25 24 26 void CreateFakeTime() const; 25 27 26 28 Bool_t ReadEvent(istream &fin); 29 void SkipEvent(istream &fin); 27 30 Int_t PreProcess(MParList *pList); 28 31 … … 33 36 MRawRead(const char *name=NULL, const char *title=NULL); 34 37 38 void SetForceMode(Bool_t b=kTRUE) { fForceMode = b; } 39 35 40 ClassDef(MRawRead, 0) // Task to read the raw data binary file 36 41 };
Note:
See TracChangeset
for help on using the changeset viewer.