00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "CSPadPixCoords/SaveImageInFile.h"
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "MsgLogger/MsgLogger.h"
00027 #include "PSEvt/EventId.h"
00028 #include "CSPadPixCoords/Image2D.h"
00029
00030
00031
00032
00033
00034 #include <iomanip>
00035 #include <sstream>
00036
00037
00038 using namespace CSPadPixCoords;
00039 PSANA_MODULE_FACTORY(SaveImageInFile)
00040
00041 using namespace std;
00042
00043
00044
00045
00046
00047 namespace CSPadPixCoords {
00048
00049
00050
00051
00052
00053 SaveImageInFile::SaveImageInFile (const std::string& name)
00054 : Module(name)
00055 , m_str_src()
00056 , m_key()
00057 , m_eventSave()
00058 , m_saveAll()
00059 , m_fname()
00060 , m_print_bits()
00061 , m_count(0)
00062 {
00063
00064 m_str_src = configStr("source", "CxiDs1.0:Cspad.0");
00065 m_key = configStr("key", "Image2D");
00066 m_eventSave = config ("eventSave", 0);
00067 m_saveAll = config ("saveAll", false);
00068 m_fname = configStr("fname", "cspad-image");
00069 m_print_bits = config ("print_bits",0);
00070 }
00071
00072
00073
00074
00075
00076 SaveImageInFile::~SaveImageInFile ()
00077 {
00078 }
00079
00080
00081
00082
00083
00084
00085 void
00086 SaveImageInFile::beginJob(Event& evt, Env& env)
00087 {
00088 if( m_print_bits & 1 ) printInputParameters();
00089 }
00090
00091
00092
00093
00094 void
00095 SaveImageInFile::beginRun(Event& evt, Env& env)
00096 {
00097 }
00098
00099
00100
00101
00102 void
00103 SaveImageInFile::beginCalibCycle(Event& evt, Env& env)
00104 {
00105 }
00106
00107
00108
00109
00110
00111 void
00112 SaveImageInFile::event(Event& evt, Env& env)
00113 {
00114
00115 ++m_count;
00116
00117 MsgLog(name(), debug, "Event: " << m_count);
00118 if (m_saveAll || m_count == m_eventSave) this -> saveImageInFile(evt);
00119 }
00120
00121
00122
00123
00124 void
00125 SaveImageInFile::endCalibCycle(Event& evt, Env& env)
00126 {
00127 }
00128
00129
00130
00131
00132 void
00133 SaveImageInFile::endRun(Event& evt, Env& env)
00134 {
00135 }
00136
00137
00138
00139
00140 void
00141 SaveImageInFile::endJob(Event& evt, Env& env)
00142 {
00143 }
00144
00145
00146
00147
00148
00149
00150 std::string
00151 SaveImageInFile::strTimeStamp(Event& evt)
00152 {
00153 shared_ptr<PSEvt::EventId> eventId = evt.get();
00154 if (eventId.get()) {
00155
00156
00157
00158
00159
00160
00161 return (eventId->time()).asStringFormat( "%Y-%m-%d-%H%M%S%f");
00162 }
00163 else
00164 return std::string("time-stamp-is-not-defined");
00165 }
00166
00167
00168
00169 std::string
00170 SaveImageInFile::strRunNumber(Event& evt)
00171 {
00172 shared_ptr<PSEvt::EventId> eventId = evt.get();
00173 if (eventId.get()) {
00174 stringstream ssRunNum; ssRunNum << "r" << setw(4) << setfill('0') << eventId->run();
00175 return ssRunNum.str();
00176 }
00177 else
00178 return std::string("run-is-not-defined");
00179 }
00180
00181
00182
00183 std::string
00184 SaveImageInFile::strEventCounter()
00185 {
00186 stringstream ssEvNum; ssEvNum << setw(6) << setfill('0') << m_count;
00187 return ssEvNum.str();
00188 }
00189
00190
00191
00192 void
00193 SaveImageInFile::saveImageInFile(Event& evt)
00194 {
00195
00196 stringstream ssEvNum; ssEvNum << setw(6) << setfill('0') << m_count;
00197 string fname = m_fname + "-" + strRunNumber(evt) + "-" + strTimeStamp(evt) + ".txt";
00198
00199
00200
00201 shared_ptr< CSPadPixCoords::Image2D<double> > img2d = evt.get(m_str_src, m_key, &m_src);
00202 if (img2d.get()) {
00203 if( m_print_bits & 2 )MsgLog(name(), info, "::saveImageInFile(...): Get image as Image2D<double> from event and save it in file");
00204 img2d -> saveImageInFile(fname,0);
00205 }
00206
00207
00208 shared_ptr< ndarray<const double,2> > img = evt.get(m_str_src, m_key, &m_src);
00209 if (img.get()) {
00210 if( m_print_bits & 2 ) MsgLog(name(), info, "::saveImageInFile(...): Get image as ndarray<double,2> from event and save it in file");
00211 CSPadPixCoords::Image2D<double> *img2d = new CSPadPixCoords::Image2D<double>(img->data(),img->shape()[0],img->shape()[1]);
00212 img2d -> saveImageInFile(fname,0);
00213 }
00214
00215
00216 shared_ptr< ndarray<const uint16_t,2> > img_u16 = evt.get(m_str_src, m_key, &m_src);
00217 if (img_u16.get()) {
00218 if( m_print_bits & 2 ) MsgLog(name(), info, "::saveImageInFile(...): Get image as ndarray<uint16_t,2> from event and save it in file");
00219 CSPadPixCoords::Image2D<uint16_t> *img2d = new CSPadPixCoords::Image2D<uint16_t>(img_u16->data(),img_u16->shape()[0],img_u16->shape()[1]);
00220 img2d -> saveImageInFile(fname,0);
00221 }
00222 }
00223
00224
00225
00226 void
00227 SaveImageInFile::printInputParameters()
00228 {
00229 WithMsgLog(name(), info, log) {
00230 log << "\nInput parameters:"
00231 << "\nsource : " << m_str_src
00232 << "\nkey : " << m_key
00233 << "\neventSave : " << m_eventSave
00234 << "\nsaveAll : " << m_saveAll
00235 << "\nfname : " << m_fname
00236 << "\nm_print_bits : " << m_print_bits;
00237 }
00238 }
00239
00240
00241
00242
00243 }