#include "MbsFile.h" //paolo 28032011 #include #include #include #include #include #include using namespace std; //paolo 28032011 MbsFile::MbsFile(const char* name, Int_t* status) : fName(name), fCurrentMbsRunNo(0), fCurrentMbsEventNo(0) { OpenFile(status); } Int_t* MbsFile::OpenFile(Int_t* status) { int inputmode=1; fxInputChannel=new s_evt_channel; void* headptr=&fxInfoHeader; // some new compilers may warn if we directly dereference member *status = f_evt_get_open(inputmode,const_cast(fName.Data()),fxInputChannel, (Char_t**) headptr, 1,1); cout << "status OpenFile="<< *status<file_run); ///That didn't work - fileld file_run is empty fCurrentMbsRunNo = GetRunNumberFromFileName( fName ); } if(*status)cout << "Error opening file: " << fName.Data() << endl; return status; } MbsFile::~MbsFile() { CloseFile(); } Int_t MbsFile::CloseFile() { if(!fxInputChannel)cout << "file not opened!"<l_count; fCurrentMbsEventNo = fuEventCounter; if (status==0) { //cout << "got an event, it's nr: "<l_dlen; *setype =fxSubEvent->i_type; *sesubtype=fxSubEvent->i_subtype; *sesubcrate=fxSubEvent->h_subcrate; // PrintSubEvent(fxSubEvent,fxEventData); if (!status) { // cout << "got a subevent nr "<l_dlen<i_subtype<i_type<h_control<h_subcrate<i_procid<l_dlen << endl; cout << fxBuffer->l_evt << endl; cout << fxBuffer->h_begin << endl; cout << fxBuffer->h_end << endl; } void MbsFile::PrintEventHeader(){ cout << "This is Event header:"<filhe_dlen << endl; cout << "evt "<filhe_evt << endl; cout << "label "<filhe_label << endl; cout << "run "<filhe_run << endl; cout << "time "<filhe_time << endl; cout << "curr i "<filhe_current_i << endl; cout << "file "<filhe_file << endl; } void MbsFile::PrintFileHeader(s_filhe* FH) { cout << "This is File Header:"<filhe_dlen << endl; cout << FH->filhe_evt << endl; cout << FH->filhe_label << endl; cout << FH->filhe_run << endl; cout << FH->filhe_time << endl; cout << FH->filhe_current_i << endl; cout << FH->filhe_file << endl; } Int_t MbsFile::GetRunNumberFromFileName( TString A_string ) { /// This function extract the run number from the file name. /// The file name pattern is like the follow: /PATH/PREFIX_XXXX.lmd /// And we want extract the XXXX number int runNumber = 0; if ( A_string == NULL){ return runNumber; ///Throw exception or print warning } if ( A_string.Length() == 0){ return runNumber; ///Throw exception or print warning } string stlString( A_string.Data() ); string fileExtension = ".lmd"; int PositionOfTheFileExtensionInFileName = stlString.find( fileExtension ); if (PositionOfTheFileExtensionInFileName < 4 ){ return runNumber; } /// (pos -4, 4) because the run number should consist four digits. string strRunNumber = stlString.substr(PositionOfTheFileExtensionInFileName - 4, 4 ); if (strRunNumber != NULL ) { runNumber = atoi( strRunNumber.c_str() ); cout << "[MbsFile:] Extracted from file name " << A_string << " the run number: " << runNumber << endl; }else{ /// cout << " Warning: Couldn't extract run number from the file name" << endl; /// Throw exception or print warning } return runNumber; }