EventMixer 1.0
An event mixer for mixing events generated by PIBIDS.
FileEventStream.cc
Go to the documentation of this file.
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 }
 All Classes Files Functions Variables Defines

Back to the main page of the Precalibrated Ion Beam Identification Detector project

Created by Rikard Lundmark