psana_examples/src/DumpTimepix.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: DumpTimepix.cpp 5355 2013-02-05 22:07:12Z salnikov@SLAC.STANFORD.EDU $
00004 //
00005 // Description:
00006 //      Class DumpTimepix...
00007 //
00008 // Author List:
00009 //      Andy Salnikov
00010 //
00011 //------------------------------------------------------------------------
00012 
00013 //-----------------------
00014 // This Class's Header --
00015 //-----------------------
00016 #include "psana_examples/DumpTimepix.h"
00017 
00018 //-----------------
00019 // C/C++ Headers --
00020 //-----------------
00021 
00022 //-------------------------------
00023 // Collaborating Class Headers --
00024 //-------------------------------
00025 #include "MsgLogger/MsgLogger.h"
00026 // to work with detector data include corresponding 
00027 // header from psddl_psana package
00028 #include "psddl_psana/timepix.ddl.h"
00029 
00030 //-----------------------------------------------------------------------
00031 // Local Macros, Typedefs, Structures, Unions and Forward Declarations --
00032 //-----------------------------------------------------------------------
00033 
00034 // This declares this class as psana module
00035 using namespace psana_examples;
00036 PSANA_MODULE_FACTORY(DumpTimepix)
00037 
00038 //              ----------------------------------------
00039 //              -- Public Function Member Definitions --
00040 //              ----------------------------------------
00041 
00042 namespace psana_examples {
00043 
00044 //----------------
00045 // Constructors --
00046 //----------------
00047 DumpTimepix::DumpTimepix (const std::string& name)
00048   : Module(name)
00049   , m_src()
00050 {
00051   // get the values from configuration or use defaults
00052   m_src = configSrc("source", "DetInfo(:Timepix)");
00053 }
00054 
00055 //--------------
00056 // Destructor --
00057 //--------------
00058 DumpTimepix::~DumpTimepix ()
00059 {
00060 }
00061 
00062 /// Method which is called at the beginning of the calibration cycle
00063 void 
00064 DumpTimepix::beginCalibCycle(Event& evt, Env& env)
00065 {
00066   MsgLog(name(), trace, "in beginCalibCycle()");
00067 
00068   shared_ptr<Psana::Timepix::ConfigV1> config1 = env.configStore().get(m_src);
00069   if (config1) {
00070 
00071     WithMsgLog(name(), info, str) {
00072       str << "Timepix::ConfigV1:";
00073 
00074       str << "\n  readoutSpeed = " << int(config1->readoutSpeed());
00075       str << "\n  triggerMode = " << int(config1->triggerMode());
00076       str << "\n  shutterTimeout = " << config1->shutterTimeout();
00077       str << "\n  dac0Ikrum = " << config1->dac0Ikrum();
00078       str << "\n  dac0Disc = " << config1->dac0Disc();
00079       str << "\n  dac0Preamp = " << config1->dac0Preamp();
00080       str << "\n  dac0BufAnalogA = " << config1->dac0BufAnalogA();
00081       str << "\n  dac0BufAnalogB = " << config1->dac0BufAnalogB();
00082       str << "\n  dac0Hist = " << config1->dac0Hist();
00083       str << "\n  dac0ThlFine = " << config1->dac0ThlFine();
00084       str << "\n  dac0ThlCourse = " << config1->dac0ThlCourse();
00085       str << "\n  dac0Vcas = " << config1->dac0Vcas();
00086       str << "\n  dac0Fbk = " << config1->dac0Fbk();
00087       str << "\n  dac0Gnd = " << config1->dac0Gnd();
00088       str << "\n  dac0Ths = " << config1->dac0Ths();
00089       str << "\n  dac0BiasLvds = " << config1->dac0BiasLvds();
00090       str << "\n  dac0RefLvds = " << config1->dac0RefLvds();
00091       str << "\n  dac1Ikrum = " << config1->dac1Ikrum();
00092       str << "\n  dac1Disc = " << config1->dac1Disc();
00093       str << "\n  dac1Preamp = " << config1->dac1Preamp();
00094       str << "\n  dac1BufAnalogA = " << config1->dac1BufAnalogA();
00095       str << "\n  dac1BufAnalogB = " << config1->dac1BufAnalogB();
00096       str << "\n  dac1Hist = " << config1->dac1Hist();
00097       str << "\n  dac1ThlFine = " << config1->dac1ThlFine();
00098       str << "\n  dac1ThlCourse = " << config1->dac1ThlCourse();
00099       str << "\n  dac1Vcas = " << config1->dac1Vcas();
00100       str << "\n  dac1Fbk = " << config1->dac1Fbk();
00101       str << "\n  dac1Gnd = " << config1->dac1Gnd();
00102       str << "\n  dac1Ths = " << config1->dac1Ths();
00103       str << "\n  dac1BiasLvds = " << config1->dac1BiasLvds();
00104       str << "\n  dac1RefLvds = " << config1->dac1RefLvds();
00105       str << "\n  dac2Ikrum = " << config1->dac2Ikrum();
00106       str << "\n  dac2Disc = " << config1->dac2Disc();
00107       str << "\n  dac2Preamp = " << config1->dac2Preamp();
00108       str << "\n  dac2BufAnalogA = " << config1->dac2BufAnalogA();
00109       str << "\n  dac2BufAnalogB = " << config1->dac2BufAnalogB();
00110       str << "\n  dac2Hist = " << config1->dac2Hist();
00111       str << "\n  dac2ThlFine = " << config1->dac2ThlFine();
00112       str << "\n  dac2ThlCourse = " << config1->dac2ThlCourse();
00113       str << "\n  dac2Vcas = " << config1->dac2Vcas();
00114       str << "\n  dac2Fbk = " << config1->dac2Fbk();
00115       str << "\n  dac2Gnd = " << config1->dac2Gnd();
00116       str << "\n  dac2Ths = " << config1->dac2Ths();
00117       str << "\n  dac2BiasLvds = " << config1->dac2BiasLvds();
00118       str << "\n  dac2RefLvds = " << config1->dac2RefLvds();
00119       str << "\n  dac3Ikrum = " << config1->dac3Ikrum();
00120       str << "\n  dac3Disc = " << config1->dac3Disc();
00121       str << "\n  dac3Preamp = " << config1->dac3Preamp();
00122       str << "\n  dac3BufAnalogA = " << config1->dac3BufAnalogA();
00123       str << "\n  dac3BufAnalogB = " << config1->dac3BufAnalogB();
00124       str << "\n  dac3Hist = " << config1->dac3Hist();
00125       str << "\n  dac3ThlFine = " << config1->dac3ThlFine();
00126       str << "\n  dac3ThlCourse = " << config1->dac3ThlCourse();
00127       str << "\n  dac3Vcas = " << config1->dac3Vcas();
00128       str << "\n  dac3Fbk = " << config1->dac3Fbk();
00129       str << "\n  dac3Gnd = " << config1->dac3Gnd();
00130       str << "\n  dac3Ths = " << config1->dac3Ths();
00131       str << "\n  dac3BiasLvds = " << config1->dac3BiasLvds();
00132       str << "\n  dac3RefLvds = " << config1->dac3RefLvds();
00133     }
00134 
00135   }
00136 
00137   shared_ptr<Psana::Timepix::ConfigV2> config2 = env.configStore().get(m_src);
00138   if (config2) {
00139 
00140     WithMsgLog(name(), info, str) {
00141       str << "Timepix::ConfigV2:";
00142 
00143       str << "\n  readoutSpeed = " << int(config2->readoutSpeed());
00144       str << "\n  triggerMode = " << int(config2->triggerMode());
00145       str << "\n  timepixSpeed = " << config2->timepixSpeed();
00146       str << "\n  dac0Ikrum = " << config2->dac0Ikrum();
00147       str << "\n  dac0Disc = " << config2->dac0Disc();
00148       str << "\n  dac0Preamp = " << config2->dac0Preamp();
00149       str << "\n  dac0BufAnalogA = " << config2->dac0BufAnalogA();
00150       str << "\n  dac0BufAnalogB = " << config2->dac0BufAnalogB();
00151       str << "\n  dac0Hist = " << config2->dac0Hist();
00152       str << "\n  dac0ThlFine = " << config2->dac0ThlFine();
00153       str << "\n  dac0ThlCourse = " << config2->dac0ThlCourse();
00154       str << "\n  dac0Vcas = " << config2->dac0Vcas();
00155       str << "\n  dac0Fbk = " << config2->dac0Fbk();
00156       str << "\n  dac0Gnd = " << config2->dac0Gnd();
00157       str << "\n  dac0Ths = " << config2->dac0Ths();
00158       str << "\n  dac0BiasLvds = " << config2->dac0BiasLvds();
00159       str << "\n  dac0RefLvds = " << config2->dac0RefLvds();
00160       str << "\n  dac1Ikrum = " << config2->dac1Ikrum();
00161       str << "\n  dac1Disc = " << config2->dac1Disc();
00162       str << "\n  dac1Preamp = " << config2->dac1Preamp();
00163       str << "\n  dac1BufAnalogA = " << config2->dac1BufAnalogA();
00164       str << "\n  dac1BufAnalogB = " << config2->dac1BufAnalogB();
00165       str << "\n  dac1Hist = " << config2->dac1Hist();
00166       str << "\n  dac1ThlFine = " << config2->dac1ThlFine();
00167       str << "\n  dac1ThlCourse = " << config2->dac1ThlCourse();
00168       str << "\n  dac1Vcas = " << config2->dac1Vcas();
00169       str << "\n  dac1Fbk = " << config2->dac1Fbk();
00170       str << "\n  dac1Gnd = " << config2->dac1Gnd();
00171       str << "\n  dac1Ths = " << config2->dac1Ths();
00172       str << "\n  dac1BiasLvds = " << config2->dac1BiasLvds();
00173       str << "\n  dac1RefLvds = " << config2->dac1RefLvds();
00174       str << "\n  dac2Ikrum = " << config2->dac2Ikrum();
00175       str << "\n  dac2Disc = " << config2->dac2Disc();
00176       str << "\n  dac2Preamp = " << config2->dac2Preamp();
00177       str << "\n  dac2BufAnalogA = " << config2->dac2BufAnalogA();
00178       str << "\n  dac2BufAnalogB = " << config2->dac2BufAnalogB();
00179       str << "\n  dac2Hist = " << config2->dac2Hist();
00180       str << "\n  dac2ThlFine = " << config2->dac2ThlFine();
00181       str << "\n  dac2ThlCourse = " << config2->dac2ThlCourse();
00182       str << "\n  dac2Vcas = " << config2->dac2Vcas();
00183       str << "\n  dac2Fbk = " << config2->dac2Fbk();
00184       str << "\n  dac2Gnd = " << config2->dac2Gnd();
00185       str << "\n  dac2Ths = " << config2->dac2Ths();
00186       str << "\n  dac2BiasLvds = " << config2->dac2BiasLvds();
00187       str << "\n  dac2RefLvds = " << config2->dac2RefLvds();
00188       str << "\n  dac3Ikrum = " << config2->dac3Ikrum();
00189       str << "\n  dac3Disc = " << config2->dac3Disc();
00190       str << "\n  dac3Preamp = " << config2->dac3Preamp();
00191       str << "\n  dac3BufAnalogA = " << config2->dac3BufAnalogA();
00192       str << "\n  dac3BufAnalogB = " << config2->dac3BufAnalogB();
00193       str << "\n  dac3Hist = " << config2->dac3Hist();
00194       str << "\n  dac3ThlFine = " << config2->dac3ThlFine();
00195       str << "\n  dac3ThlCourse = " << config2->dac3ThlCourse();
00196       str << "\n  dac3Vcas = " << config2->dac3Vcas();
00197       str << "\n  dac3Fbk = " << config2->dac3Fbk();
00198       str << "\n  dac3Gnd = " << config2->dac3Gnd();
00199       str << "\n  dac3Ths = " << config2->dac3Ths();
00200       str << "\n  dac3BiasLvds = " << config2->dac3BiasLvds();
00201       str << "\n  dac3RefLvds = " << config2->dac3RefLvds();
00202       str << "\n  chipCount = " << config2->chipCount();
00203       str << "\n  driverVersion = " << config2->driverVersion();
00204       str << "\n  firmwareVersion = " << config2->firmwareVersion();
00205       str << "\n  pixelThreshSize = " << config2->pixelThreshSize();
00206       str << "\n  pixelThresh = " << config2->pixelThresh();
00207       str << "\n  chip names = " << config2->chip0Name() << " " << config2->chip1Name() << " " << config2->chip2Name() << " " << config2->chip3Name();
00208       str << "\n  chip IDs   = " << config2->chip0ID() << " " << config2->chip1ID() << " " << config2->chip2ID() << " " << config2->chip3ID();
00209 
00210     }
00211 
00212   }
00213 
00214   shared_ptr<Psana::Timepix::ConfigV3> config3 = env.configStore().get(m_src);
00215   if (config3) {
00216 
00217     WithMsgLog(name(), info, str) {
00218       str << "Timepix::ConfigV3:";
00219 
00220       str << "\n  readoutSpeed = " << int(config3->readoutSpeed());
00221       str << "\n  timepixMode = " << int(config3->timepixMode());
00222       str << "\n  timepixSpeed = " << config3->timepixSpeed();
00223       str << "\n  dac0Ikrum = " << config3->dac0Ikrum();
00224       str << "\n  dac0Disc = " << config3->dac0Disc();
00225       str << "\n  dac0Preamp = " << config3->dac0Preamp();
00226       str << "\n  dac0BufAnalogA = " << config3->dac0BufAnalogA();
00227       str << "\n  dac0BufAnalogB = " << config3->dac0BufAnalogB();
00228       str << "\n  dac0Hist = " << config3->dac0Hist();
00229       str << "\n  dac0ThlFine = " << config3->dac0ThlFine();
00230       str << "\n  dac0ThlCourse = " << config3->dac0ThlCourse();
00231       str << "\n  dac0Vcas = " << config3->dac0Vcas();
00232       str << "\n  dac0Fbk = " << config3->dac0Fbk();
00233       str << "\n  dac0Gnd = " << config3->dac0Gnd();
00234       str << "\n  dac0Ths = " << config3->dac0Ths();
00235       str << "\n  dac0BiasLvds = " << config3->dac0BiasLvds();
00236       str << "\n  dac0RefLvds = " << config3->dac0RefLvds();
00237       str << "\n  dac1Ikrum = " << config3->dac1Ikrum();
00238       str << "\n  dac1Disc = " << config3->dac1Disc();
00239       str << "\n  dac1Preamp = " << config3->dac1Preamp();
00240       str << "\n  dac1BufAnalogA = " << config3->dac1BufAnalogA();
00241       str << "\n  dac1BufAnalogB = " << config3->dac1BufAnalogB();
00242       str << "\n  dac1Hist = " << config3->dac1Hist();
00243       str << "\n  dac1ThlFine = " << config3->dac1ThlFine();
00244       str << "\n  dac1ThlCourse = " << config3->dac1ThlCourse();
00245       str << "\n  dac1Vcas = " << config3->dac1Vcas();
00246       str << "\n  dac1Fbk = " << config3->dac1Fbk();
00247       str << "\n  dac1Gnd = " << config3->dac1Gnd();
00248       str << "\n  dac1Ths = " << config3->dac1Ths();
00249       str << "\n  dac1BiasLvds = " << config3->dac1BiasLvds();
00250       str << "\n  dac1RefLvds = " << config3->dac1RefLvds();
00251       str << "\n  dac2Ikrum = " << config3->dac2Ikrum();
00252       str << "\n  dac2Disc = " << config3->dac2Disc();
00253       str << "\n  dac2Preamp = " << config3->dac2Preamp();
00254       str << "\n  dac2BufAnalogA = " << config3->dac2BufAnalogA();
00255       str << "\n  dac2BufAnalogB = " << config3->dac2BufAnalogB();
00256       str << "\n  dac2Hist = " << config3->dac2Hist();
00257       str << "\n  dac2ThlFine = " << config3->dac2ThlFine();
00258       str << "\n  dac2ThlCourse = " << config3->dac2ThlCourse();
00259       str << "\n  dac2Vcas = " << config3->dac2Vcas();
00260       str << "\n  dac2Fbk = " << config3->dac2Fbk();
00261       str << "\n  dac2Gnd = " << config3->dac2Gnd();
00262       str << "\n  dac2Ths = " << config3->dac2Ths();
00263       str << "\n  dac2BiasLvds = " << config3->dac2BiasLvds();
00264       str << "\n  dac2RefLvds = " << config3->dac2RefLvds();
00265       str << "\n  dac3Ikrum = " << config3->dac3Ikrum();
00266       str << "\n  dac3Disc = " << config3->dac3Disc();
00267       str << "\n  dac3Preamp = " << config3->dac3Preamp();
00268       str << "\n  dac3BufAnalogA = " << config3->dac3BufAnalogA();
00269       str << "\n  dac3BufAnalogB = " << config3->dac3BufAnalogB();
00270       str << "\n  dac3Hist = " << config3->dac3Hist();
00271       str << "\n  dac3ThlFine = " << config3->dac3ThlFine();
00272       str << "\n  dac3ThlCourse = " << config3->dac3ThlCourse();
00273       str << "\n  dac3Vcas = " << config3->dac3Vcas();
00274       str << "\n  dac3Fbk = " << config3->dac3Fbk();
00275       str << "\n  dac3Gnd = " << config3->dac3Gnd();
00276       str << "\n  dac3Ths = " << config3->dac3Ths();
00277       str << "\n  dac3BiasLvds = " << config3->dac3BiasLvds();
00278       str << "\n  dac3RefLvds = " << config3->dac3RefLvds();
00279       str << "\n  dacBias = " << int(config3->dacBias());
00280       str << "\n  flags = " << int(config3->flags());
00281       str << "\n  chipCount = " << config3->chipCount();
00282       str << "\n  driverVersion = " << config3->driverVersion();
00283       str << "\n  firmwareVersion = " << config3->firmwareVersion();
00284       str << "\n  pixelThreshSize = " << config3->pixelThreshSize();
00285       str << "\n  pixelThresh = " << config3->pixelThresh();
00286       str << "\n  chip names = " << config3->chip0Name() << " " << config3->chip1Name() << " " << config3->chip2Name() << " " << config3->chip3Name();
00287       str << "\n  chip IDs   = " << config3->chip0ID() << " " << config3->chip1ID() << " " << config3->chip2ID() << " " << config3->chip3ID();
00288 
00289     }
00290 
00291   }
00292 }
00293 
00294 /// Method which is called with event data, this is the only required 
00295 /// method, all other methods are optional
00296 void 
00297 DumpTimepix::event(Event& evt, Env& env)
00298 {
00299 
00300   // ==============================================================
00301   //  Psana transparently replaces Timepix::DataV1 objects with
00302   //  Timepix::DataV2, so the code for Timepix::DataV1 is not likely
00303   //  to be executed at all.
00304   // ==============================================================
00305   shared_ptr<Psana::Timepix::DataV1> data1 = evt.get(m_src);
00306   if (data1) {
00307     WithMsgLog(name(), info, str) {
00308       str << "Timepix::DataV1:";
00309 
00310       str << "\n  timestamp = " << data1->timestamp();
00311       str << "\n  frameCounter = " << data1->frameCounter();
00312       str << "\n  lostRows = " << data1->lostRows();
00313       str << "\n  data = " << data1->data();
00314     }
00315   }
00316 
00317   shared_ptr<Psana::Timepix::DataV2> data2 = evt.get(m_src);
00318   if (data2) {
00319     WithMsgLog(name(), info, str) {
00320       str << "Timepix::DataV2:";
00321 
00322       str << "\n  timestamp = " << data2->timestamp();
00323       str << "\n  frameCounter = " << data2->frameCounter();
00324       str << "\n  lostRows = " << data2->lostRows();
00325       str << "\n  data = " << data2->data();
00326     }
00327   }
00328 }
00329   
00330 
00331 } // namespace psana_examples

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7