/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/MdcPatRec/MdcRecoUtil/MdcRecoUtil-00-01-08/src/ComPackSignedExpFloat.cxx

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: ComPackSignedExpFloat.cxx,v 1.2 2009/12/23 02:59:56 zhangy Exp $
00004 //
00005 // Description:
00006 //      class ComPackExpFloat
00007 //
00008 // Environment:
00009 //      Software developed for the BaBar Detector at the SLAC B-Factory.
00010 //
00011 // Author List:
00012 //      Dave Brown               10/12/00
00013 //
00014 // Copyright Information:
00015 //      Copyright (C) 2000 LBNL
00016 // 
00017 // History:
00018 //      Migration for BESIII MDC
00019 //
00020 //
00021 //--------------------------------------------------------------------------
00022 
00023 //#include "BaBar/BaBar.hh"
00024 #include "MdcRecoUtil/ComPackSignedExpFloat.h"
00025 #include <assert.h>
00026 #include <math.h>
00027 using std::endl;
00028 using std::ostream;
00029 
00030 ComPackSignedExpFloat::ComPackSignedExpFloat(unsigned nbits,
00031                                              unsigned maxexponent,
00032                                              double maxval,
00033                                              bool invert,
00034                                              bool center) :
00035   ComPackBase<double>(-maxval,maxval,nbits),
00036   _packer(nbits-1,maxexponent,invert?maxval:0.0,
00037           invert?0.0:maxval, center),
00038   _signbit(1<<nbits-1),_signmask(~(1<<nbits-1))
00039 {
00040   assert(maxval>0.0);
00041 }
00042 
00043 ComPackSignedExpFloat::~ComPackSignedExpFloat()
00044 {;}
00045 
00046 ComPackBase<double>::StatusCode
00047 ComPackSignedExpFloat::pack (const double value, d_ULong & packdata) const {
00048 // first, pack the absolute value
00049   ComPackBase<double>::StatusCode retval =
00050     _packer.pack(fabs(value),packdata);
00051   if(retval != TAG_BAD){
00052     if(value>0)
00053       packdata &= _signmask;
00054     else
00055       packdata |= _signbit;
00056   }
00057   return retval;
00058 }
00059 
00060 ComPackBase<double>::StatusCode 
00061 ComPackSignedExpFloat::unpack (const d_ULong packdata, double & value) const {
00062   ComPackBase<double>::StatusCode retval =
00063     _packer.unpack(packdata,value);
00064   if (value < 0)
00065     value = 0;
00066   else if(packdata&_signbit)
00067     value *= -1.0;
00068   return retval;
00069 }
00070 
00071 void
00072 ComPackSignedExpFloat::print(ostream& os) const {
00073   os << "Signed exponential packer using exponential packer as follows:"<<endl;
00074   _packer.print(os);
00075 }
00076 
00077 
00078 
00079     
00080 
00081 

Generated on Tue Nov 29 23:13:32 2016 for BOSS_7.0.2 by  doxygen 1.4.7