![]() |
EventMixer 1.0
An event mixer for mixing events generated by PIBIDS.
|
00001 #include "FileEventStream.hh" 00002 00003 FileEventStream::FileEventStream(char * filename, int nTubes) 00004 :NumberOfTubes(nTubes) 00005 { 00006 myFileStream = fopen(filename,"r"); 00007 if(myFileStream==NULL) 00008 { 00009 fprintf (stderr,"Could not open input file %s, exiting.", filename); 00010 exit(1); 00011 } 00012 fileEmpty = false; 00013 fscanf(myFileStream,"%d",&upcomingEventID); //Read in the first event number, to make the event processing work. 00014 } 00015 00016 FileEventStream::~FileEventStream() 00017 { 00018 fclose(myFileStream); 00019 } 00020 00021 Event * FileEventStream::getNextEvent() 00022 { 00023 Event * nextEvent = new Event(); 00024 if(fileEmpty) 00025 return NULL; 00026 nextEvent->eventno = upcomingEventID; 00027 int currentHitPtr=0; 00028 do 00029 { 00030 if(nextEvent->eventno!=upcomingEventID) //New event, abort! 00031 { 00032 return nextEvent; 00033 } 00034 00035 nextEvent->hit.push_back(new EventHit(NumberOfTubes)); 00036 00037 nextEvent->hit.back()->eventno = upcomingEventID; 00038 00039 fscanf(myFileStream, "%d %d", &nextEvent->hit.back()->Z, &nextEvent->hit.back()->A); 00040 00041 fscanf(myFileStream, "%le", &nextEvent->hit.back()->time); 00042 00043 fscanf(myFileStream,"%e %e %e %e", &nextEvent->hit.back()->UFSP, &nextEvent->hit.back()->LFSP, &nextEvent->hit.back()->BSP, &nextEvent->hit.back()->Ge); 00044 00045 for(int j = 0; j<NumberOfTubes; j++) 00046 { 00047 fscanf(myFileStream,"%e",&nextEvent->hit.back()->DET[j]); 00048 } 00049 ++currentHitPtr; 00050 if(feof(myFileStream) || fscanf(myFileStream, "%d",&upcomingEventID)<1 ) 00051 { 00052 fileEmpty = true; 00053 return nextEvent; 00054 } 00055 } while(upcomingEventID==nextEvent->eventno); 00056 00057 return nextEvent; 00058 } 00059 00060 bool FileEventStream::hasMoreEvents() 00061 { 00062 return !fileEmpty; 00063 }