CSPadPixCoords/src/GlobalMethods.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id$
00004 //
00005 // Description:
00006 //      Class GlobalMethods...
00007 //
00008 // Author List:
00009 //      Mikhail S. Dubrovin
00010 //
00011 //------------------------------------------------------------------------
00012 
00013 //-----------------------
00014 // This Class's Header --
00015 //-----------------------
00016 #include "CSPadPixCoords/GlobalMethods.h"
00017 
00018 //-----------------
00019 // C/C++ Headers --
00020 //-----------------
00021 #include <boost/lexical_cast.hpp>
00022 
00023 //-------------------------------
00024 // Collaborating Class Headers --
00025 //-------------------------------
00026 #include <boost/shared_ptr.hpp>
00027 #include "PSEvt/EventId.h"
00028 #include "PSTime/Time.h"
00029 //#include "psana/Module.h"
00030 
00031 //-----------------------------------------------------------------------
00032 // Local Macros, Typedefs, Structures, Unions and Forward Declarations --
00033 //-----------------------------------------------------------------------
00034 
00035 using namespace std;
00036 using namespace CSPadPixCoords;
00037 
00038 //              ----------------------------------------
00039 //              -- Public Function Member Definitions --
00040 //              ----------------------------------------
00041 
00042 namespace CSPadPixCoords {
00043 
00044 //----------------
00045 // Constructors --
00046 //----------------
00047 GlobalMethods::GlobalMethods ()
00048 {
00049 }
00050 
00051 //--------------
00052 // Destructor --
00053 //--------------
00054 GlobalMethods::~GlobalMethods ()
00055 {
00056 }
00057 
00058 //--------------------
00059 
00060 std::string 
00061 stringFromUint(unsigned number, unsigned width, char fillchar)
00062 {
00063   stringstream ssNum; ssNum << setw(width) << setfill(fillchar) << number;
00064   return ssNum.str();
00065 }
00066 
00067 //--------------------
00068 
00069 std::string
00070 stringTimeStamp(PSEvt::Event& evt, std::string fmt) // fmt="%Y%m%dT%H:%M:%S%f"
00071 {
00072   boost::shared_ptr<PSEvt::EventId> eventId = evt.get();
00073   if (eventId.get()) return (eventId->time()).asStringFormat(fmt);
00074   else               return std::string("time-stamp-is-unavailable");
00075 }
00076 
00077 //--------------------
00078 
00079 double
00080 doubleTime(PSEvt::Event& evt)
00081 {
00082   boost::shared_ptr<PSEvt::EventId> eventId = evt.get();
00083   if (eventId.get()) return double(eventId->time().sec()) + 1e-9*eventId->time().nsec();
00084   else               return double(0);
00085 }
00086 
00087 //--------------------
00088 
00089 std::string  
00090 stringRunNumber(PSEvt::Event& evt, unsigned width)
00091 {
00092   boost::shared_ptr<PSEvt::EventId> eventId = evt.get();
00093   if (eventId.get()) return stringFromUint(eventId->run(), width);
00094   else               return std::string("run-is-not-defined");
00095 }
00096 
00097 //--------------------
00098 
00099 /// Returns integer run number
00100 int 
00101 getRunNumber(PSEvt::Event& evt)
00102 {
00103   boost::shared_ptr<PSEvt::EventId> eventId = evt.get();
00104   if (eventId.get()) {
00105     return eventId->run();
00106   } else {
00107     MsgLogRoot(warning, "Cannot determine run number, will use 0.");
00108     return int(0);
00109   }
00110 }
00111 
00112 //--------------------
00113 
00114 void 
00115 printTimeStamp(PSEvt::Event& evt, int counter)
00116 {
00117   boost::shared_ptr<PSEvt::EventId> eventId = evt.get();
00118   if (eventId.get()) {
00119 
00120     MsgLogRoot( info, " Run="    <<  eventId->run()
00121                    << " Event="  <<  counter 
00122                    << " Time="   <<  eventId->time() );
00123   }
00124 }
00125 
00126 //--------------------
00127 
00128 unsigned 
00129 fiducials(PSEvt::Event& evt)
00130 {
00131   boost::shared_ptr<PSEvt::EventId> eventId = evt.get();
00132   if (eventId.get()) return eventId->fiducials();
00133   else               return 0;
00134 }
00135 
00136 //--------------------
00137 
00138 unsigned 
00139 eventCounterSinceConfigure(PSEvt::Event& evt)
00140 {
00141   boost::shared_ptr<PSEvt::EventId> eventId = evt.get();
00142   if (eventId.get()) return eventId->vector();
00143   else               return 0;
00144 }
00145 
00146 //--------------------
00147 
00148 void 
00149 printSizeOfTypes()
00150 {
00151   std::cout << "Size Of Types:" 
00152             << "\nsizeof(bool    ) = " << sizeof(bool    ) << " with typeid(bool    ).name(): " << typeid(bool    ).name() 
00153             << "\nsizeof(uint8_t ) = " << sizeof(uint8_t ) << " with typeid(uint8_t ).name(): " << typeid(uint8_t ).name()  
00154             << "\nsizeof(uint16_t) = " << sizeof(uint16_t) << " with typeid(uint16_t).name(): " << typeid(uint16_t).name()  
00155             << "\nsizeof(uint32_t) = " << sizeof(uint32_t) << " with typeid(uint32_t).name(): " << typeid(uint32_t).name()  
00156             << "\nsizeof(int     ) = " << sizeof(int     ) << " with typeid(int     ).name(): " << typeid(int     ).name()  
00157             << "\nsizeof(int16_t ) = " << sizeof(int16_t ) << " with typeid(int16_t ).name(): " << typeid(int16_t ).name()  
00158             << "\nsizeof(int32_t ) = " << sizeof(int32_t ) << " with typeid(int32_t ).name(): " << typeid(int32_t ).name()  
00159             << "\nsizeof(float   ) = " << sizeof(float   ) << " with typeid(float   ).name(): " << typeid(float   ).name()  
00160             << "\nsizeof(double  ) = " << sizeof(double  ) << " with typeid(double  ).name(): " << typeid(double  ).name()  
00161             << "\n\n";
00162 }
00163 
00164 //--------------------
00165 // Define the shape or throw message that can not do that.
00166 void 
00167 defineImageShape(PSEvt::Event& evt, const PSEvt::Source& src, const std::string& key, unsigned* shape)
00168 {
00169   if ( defineImageShapeForType<double>  (evt, src, key, shape) ) return;
00170   if ( defineImageShapeForType<float>   (evt, src, key, shape) ) return;
00171   if ( defineImageShapeForType<int>     (evt, src, key, shape) ) return;
00172   if ( defineImageShapeForType<int32_t> (evt, src, key, shape) ) return;
00173   if ( defineImageShapeForType<uint32_t>(evt, src, key, shape) ) return;
00174   if ( defineImageShapeForType<uint16_t>(evt, src, key, shape) ) return;
00175   if ( defineImageShapeForType<uint8_t> (evt, src, key, shape) ) return;
00176 
00177   //static unsigned counter = 0; counter++;
00178   const std::string msg = "Image shape is tested for double, uint16_t, int, float, uint8_t and is not defined in the event(...)\nfor source:" 
00179                         + boost::lexical_cast<std::string>(src) + " key:" + key + "\nEXIT psana...";
00180   MsgLogRoot(error, msg);
00181   throw std::runtime_error("EXIT psana...");
00182 }
00183 
00184 //--------------------
00185 //--------------------
00186 } // namespace CSPadPixCoords

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7