/* MFMParisFrame.cc Copyright Acquisition group, GANIL Caen, France */ #include #include #include #include #include #include #include using namespace std; #include "MFMParisFrame.h" //_______________________________________________________________________________ MFMParisFrame::MFMParisFrame(int unitBlock_size, int dataSource, int frameType, int revision, int frameSize, int headerSize) { /// Constructor for a PARIS frame . the header is filled with unitblock_size, data source , frame type , revision , frame, size and header size value SetPointers(); } //_______________________________________________________________________________ MFMParisFrame::MFMParisFrame() { /// Constructor for a empty PARIS frame } //_______________________________________________________________________________ MFMParisFrame::~MFMParisFrame() { /// destructor of PARIS frame } //_______________________________________________________________________________ void MFMParisFrame::SetQShort(uint16_t energy) { /// Set Energy (((MFM_paris_frame*) pHeader)->Data.QShort) = energy; } //_______________________________________________________________________________ uint16_t MFMParisFrame::GetQShort()const { /// GetEnergy uint16_t energy; energy=(((MFM_paris_frame*) pHeader)->Data.QShort); if (fLocalIsBigEndian != fFrameIsBigEndian) SwapInt16(&energy); return energy; } //_______________________________________________________________________________ void MFMParisFrame::SetQLong(uint16_t energy) { /// Set Energy (((MFM_paris_frame*) pHeader)->Data.QLong) = energy; } //_______________________________________________________________________________ uint16_t MFMParisFrame::GetQLong() const{ /// GetEnergy uint16_t energy; energy=(((MFM_paris_frame*) pHeader)->Data.QLong); if (fLocalIsBigEndian != fFrameIsBigEndian) SwapInt16(&energy); return energy; } //_______________________________________________________________________________ void MFMParisFrame::SetCfd(float cfd) { /// Set Top in frame (((MFM_paris_frame*) pHeader)->Data.Cfd) = cfd; } //_______________________________________________________________________________ float MFMParisFrame::GetCfd()const { /// computer and return Top value from frame float cfd; cfd = ((((MFM_paris_frame*) pHeader)->Data.Cfd) + random()/RAND_MAX -0.5 )/ 1000.; return cfd; } //_______________________________________________________________________________ void MFMParisFrame::FillDataWithRamdomValue(uint64_t timestamp, uint32_t eventnumber) { /// Fill all data of frame with random values to do test /// And report time stamp and event number float maxuint16 = pow(2,16); float maxuint32 = pow(2,32); float value = random(); uint16_t uivalue16 = (uint16_t) (maxuint16 * (float)(value / RAND_MAX)); uint32_t uivalue32 = (uint32_t) (maxuint32 * (float)(value / RAND_MAX)); SetQShort(uivalue16); SetQLong (uivalue16); SetCfd (uivalue32 +0.5); SetEventNumber(eventnumber); SetTimeStamp(timestamp); MFMNumExoFrame::FillDataWithRamdomValue(timestamp,eventnumber); SetFrameType (MFM_PARIS_FRAME_TYPE); } //_______________________________________________________________________________ string MFMParisFrame::GetHeaderDisplay(char* infotext)const{ std::stringstream ss; std::string display(""); ss << MFMNumExoFrame::GetHeaderDisplay(infotext); ss << std::endl; ss << " qShort = " << GetQShort() ; ss << " qLong = " << GetQLong() << " CFD = " << GetCfd() << " [ns]"; ss << std::endl; ss << " Flags = " << std::hex << ((MFM_paris_frame*) pHeader)->Data.Flags << std::dec ; ss << " PLL unlock " << ((GetPLL()) ? "true" : "false"); ss << " PUR " << ((GetPUR()) ? "true" : "false"); ss << " OVR " << ((GetOVR()) ? "true" : "false"); display = ss.str(); return display; } //_______________________________________________________________________________ bool MFMParisFrame::GetPLL()const { return ((((MFM_paris_frame*) pHeader)->Data.Flags)&0x20)>>5; } //_______________________________________________________________________________ bool MFMParisFrame::GetPUR()const{ return ((((MFM_paris_frame*) pHeader)->Data.Flags)&0x10)>>4; } //_______________________________________________________________________________ bool MFMParisFrame::GetOVR()const{ return ((((MFM_paris_frame*) pHeader)->Data.Flags)&0x8)>>3; }