Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
// Assume that file is located in /reg/d/psdm/AMO/amotut13/calib/PNCCD::CalibV1/Camp.0:pnCCD.1/pedestals/1-end.data

  #include "PSCalib/PnccdCalibPars.h"

  const std::string calib_dir   = "/reg/d/psdm/AMO/amotut13/calib";
  const std::string group = "PNCCD::CalibV1"; // or std::string()
  const std::string source = "Camp.0:pnCCD.1"; 
  unsigned long     runnum = 10;
  unsigned          print_bits = 255;

  PSCalib::PnccdCalibPars *calibpars = new PSCalib::PnccdCalibPars(calib_dir, group, source, runnum, print_bits);  

  calibpars->printCalibPars();
  calibpars->printCalibParsStatus();
  calibpars->printInputPars();

  ndarray<CalibPars::pedestals_t, 3>    peds = calibpars -> pedestals_ndarr();
  ndarray<CalibPars::common_mode_t, 1>  cmod = calibpars -> common_mode_ndarr();
  ndarray<CalibPars::pixel_status_t, 3> stat = calibpars -> pixel_status_ndarr();
  ndarray<CalibPars::pixel_gain_t, 3>   gain = calibpars -> pixel_gain_ndarr();
  ndarray<CalibPars::pixel_rms_t, 3>    gain = calibpars -> pixel_gain_ndarr();

  // OR:
  CalibPars::pedestals_t*    p_peds = calibpars -> pedestals();
  CalibPars::common_mode_t*  p_cmod = calibpars -> common_mode();
  CalibPars::pixel_status_t* p_stat = calibpars -> pixel_status();
  CalibPars::pixel_gain_t*   p_gain = calibpars -> pixel_gain();
  CalibPars::pixel_rms_t*    p_gainrms  = calibpars -> pixel_gainrms();

  const size_t ndim = ndim();
  const size_t size = size();
  const unsigned* shape = shape();
etc...

...

  • Interface is declared in the abstract base class PSCalib::CalibPars
  • Access to all detector-dependent classes is hidden in the static factory class PSCalib::CalibParsStore
Note

Factory is implemented for pnCCD only. CSPAD and CSPAD2x2 will be added soon.

Code Block
#include "PSCalib/CalibPars.h"
#include "PSCalib/CalibParsStore.h"

// Instatiation
//Here we assume that code is working inside psana module where evt and env variables are defined through input parameters of call-back methods.
//Code below instateates calibpars object using factory static method PSCalib::CalibParsStore::Create:

std::string calib_dir = env.calibDir(); // or "/reg/d/psdm/<INS>/<experiment>/calib"
std::string  group = std::string(); // or something like "PNCCD::CalibV1";
const std::string source = "Camp.0:pnCCD.1";
const std::string key = ""; // key for raw data
Pds::Src src; env.get(source, key, &src);
PSCalib::CalibPars* calibpars = PSCalib::CalibParsStore::Create(calib_dir, group, src, PSCalib::getRunNumber(evt));

// Access methods
calibpars->printCalibPars();
const PSCalib::CalibPars::pedestals_t*    peds_data = calibpars->pedestals();
const PSCalib::CalibPars::pixel_gain_t*   gain_data = calibpars->pixel_gain();
const PSCalib::CalibPars::pixel_rms_t*    rms_data  = calibpars->pixel_rms();
const PSCalib::CalibPars::pixel_status_t* stat_data = calibpars->pixel_status();
const PSCalib::CalibPars::common_mode_t*  cmod_data = calibpars->common_mode();

...

          ImgAlgos.PnccdImageProducer - get Psana::PNCCD::FullFrameV1, put  ndarray<uint16_t, 2>
          ImgAlgos.NDArrAverage             NDArrAverage            - averages ndarray<T, 2>, save in file

...

Note

For demonstration only! Just in order to confirm that we produce the same image from different objects. In real case image needs to be produced at final the final stage.

          ImgAlgos.PnccdNDArrProducer - get Psana::PNCCD::FramesV1,     put  ndarray<T, 3>
          ImgAlgos.PnccdImageProducer - get ndarray<T,3>, put  ndarray<T, 2>
          ImgAlgos.NDArrAverage             NDArrAverage            - averages ndarray<T, 2>, save in file

...

Data corrections in module ImgAlgos.NDArrCalib

Midule description: Module ImgAlgos::NDArrCalib 

List of parameters in configuration file

...

Common mode subtraction improves the width of intensity distribution.

Support of pnCCD in Calibration Manager

In dark run processing in  Calibration Manager produces pedestals and pixel_rms. Then, if thresholds on rms and averaged intensity are set correctly, the pixel_status can be also produced and deployed under the calib directory.  Calibration manager works with arrays of shape=[4,512,512]. Embedded ROI Mask Editor can be used to generate the ROI mask for pnCCD.

Get latest version of packages for psana and calibman

...