// ------------------------------------------------------------------------- // ----- PndBinaryGenerator source file ----- // ----- Created 30/10/08 by Oscar Reinecke ----- // ------------------------------------------------------------------------- #include "PndBinaryGenerator.h" #include "CbmPrimaryGenerator.h" #include #include using std::cout; using std::endl; using std::max; // ----- Default constructor ------------------------------------------ PndBinaryGenerator::PndBinaryGenerator() {} // ------------------------------------------------------------------------ // ----- Standard constructor ----------------------------------------- PndBinaryGenerator::PndBinaryGenerator(const char* fileName, unsigned int firstEntry) { fFileName = fileName; cout << "-I PndBinaryGenerator: Opening input file " << fileName << endl; if ((fInputFile = fopen(fFileName,"r"))==NULL) // fInputFile = new ifstream(fFileName); // if ( ! fInputFile->is_open() ) Fatal("PndBinaryGenerator","Cannot open input file."); while (firstEntry-->0) { fread(&HEAD, sizeof(HEAD), 1, fInputFile); fseek(fInputFile, HEAD.nparticles*sizeof(ENTRY), SEEK_CUR); } // fPDG=TDatabasePDG::Instance(); } // ------------------------------------------------------------------------ // ----- Destructor --------------------------------------------------- PndBinaryGenerator::~PndBinaryGenerator() { CloseInput(); } // ------------------------------------------------------------------------ // ----- Public method ReadEvent -------------------------------------- Bool_t PndBinaryGenerator::ReadEvent(CbmPrimaryGenerator* primGen) { // Check for input file if (!fInputFile) { // if ( ! fInputFile->is_open() ) { cout << "-E PndBinaryGenerator: Input file not open!" << endl; return kFALSE; } if (fread(&HEAD, sizeof(HEAD), 1, fInputFile)==1) { while (HEAD.nparticles-->0) if (fread(&ENTRY, sizeof(ENTRY), 1, fInputFile)==1) // apparently EvtGen uses mm instead of cm primGen->AddTrack(ENTRY.pdgId, ENTRY.px, ENTRY.py, ENTRY.pz, ENTRY.rx*0.1, ENTRY.ry*0.1, ENTRY.rz*0.1); } else { cout << "-I PndBinaryGenerator: End of input file reached " << endl; CloseInput(); return kFALSE; } // If end of input file is reached : close it and abort run if ( feof(fInputFile) ) { cout << "-I PndBinaryGenerator: End of input file reached " << endl; CloseInput(); return kFALSE; } return kTRUE; } // ------------------------------------------------------------------------ // ----- Private method CloseInput ------------------------------------ void PndBinaryGenerator::CloseInput() { if ( fInputFile ) { //if ( fInputFile->is_open() ) { { cout << "-I PndBinaryGenerator: Closing input file " << fFileName << endl; // fInputFile->close(); fclose(fInputFile); } delete fInputFile; fInputFile = NULL; } } // ------------------------------------------------------------------------ ClassImp(PndBinaryGenerator)