00001 #ifndef PSCALIB_CSPADCALIBPARS_H
00002 #define PSCALIB_CSPADCALIBPARS_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <iostream>
00015 #include <string>
00016 #include <vector>
00017 #include <map>
00018 #include <fstream>
00019
00020
00021
00022
00023 #include "psddl_psana/cspad.ddl.h"
00024 #include "pdsdata/xtc/Src.hh"
00025
00026 #include "pdscalibdata/CalibParsCenterV1.h"
00027 #include "pdscalibdata/CalibParsCenterCorrV1.h"
00028 #include "pdscalibdata/CalibParsMargGapShiftV1.h"
00029 #include "pdscalibdata/CalibParsOffsetV1.h"
00030 #include "pdscalibdata/CalibParsOffsetCorrV1.h"
00031 #include "pdscalibdata/CalibParsRotationV1.h"
00032 #include "pdscalibdata/CalibParsTiltV1.h"
00033 #include "pdscalibdata/CalibParsQuadRotationV1.h"
00034 #include "pdscalibdata/CalibParsQuadTiltV1.h"
00035 #include "pdscalibdata/CsPadBeamVectorV1.h"
00036 #include "pdscalibdata/CsPadBeamIntersectV1.h"
00037 #include "pdscalibdata/CsPadCenterGlobalV1.h"
00038 #include "pdscalibdata/CsPadRotationGlobalV1.h"
00039
00040
00041
00042 namespace PSCalib {
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 class CSPadCalibPars {
00120 public:
00121
00122
00123
00124
00125
00126 CSPadCalibPars ( bool isTestMode = false ) ;
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136 CSPadCalibPars ( const std::string& calibDir,
00137 const std::string& typeGroupName,
00138 const std::string& source,
00139 const unsigned long& runNumber,
00140 const unsigned& print_bits=0 ) ;
00141
00142
00143
00144
00145
00146
00147
00148
00149 CSPadCalibPars ( const std::string& calibDir,
00150 const std::string& typeGroupName,
00151 const Pds::Src& src,
00152 const unsigned long& runNumber,
00153 const unsigned& print_bits=0 ) ;
00154
00155
00156 virtual ~CSPadCalibPars () ;
00157
00158
00159
00160
00161
00162
00163
00164
00165 void printCalibParsStatus ();
00166
00167
00168 void printCalibPars ();
00169
00170
00171 void printInputPars ();
00172
00173
00174
00175
00176 double getCenterX(size_t quad, size_t sect){ return m_center -> getCenterX(quad,sect); };
00177
00178
00179 double getCenterY(size_t quad, size_t sect){ return m_center -> getCenterY(quad,sect); };
00180
00181
00182 double getCenterZ(size_t quad, size_t sect){ return m_center -> getCenterZ(quad,sect); };
00183
00184
00185
00186
00187 double getCenterCorrX(size_t quad, size_t sect){ return m_center_corr -> getCenterCorrX(quad,sect); };
00188
00189
00190 double getCenterCorrY(size_t quad, size_t sect){ return m_center_corr -> getCenterCorrY(quad,sect); };
00191
00192
00193 double getCenterCorrZ(size_t quad, size_t sect){ return m_center_corr -> getCenterCorrZ(quad,sect); };
00194
00195
00196
00197
00198 double getQuadMargX () { return m_marg_gap_shift -> getQuadMargX (); };
00199
00200
00201 double getQuadMargY () { return m_marg_gap_shift -> getQuadMargY (); };
00202
00203
00204 double getQuadMargZ () { return m_marg_gap_shift -> getQuadMargZ (); };
00205
00206
00207
00208
00209 double getMargX () { return m_marg_gap_shift -> getMargX (); };
00210
00211
00212 double getMargY () { return m_marg_gap_shift -> getMargY (); };
00213
00214
00215 double getMargZ () { return m_marg_gap_shift -> getMargZ (); };
00216
00217
00218
00219
00220 double getGapX () { return m_marg_gap_shift -> getGapX (); };
00221
00222
00223 double getGapY () { return m_marg_gap_shift -> getGapY (); };
00224
00225
00226 double getGapZ () { return m_marg_gap_shift -> getGapZ (); };
00227
00228
00229
00230
00231 double getShiftX() { return m_marg_gap_shift -> getShiftX(); };
00232
00233
00234 double getShiftY() { return m_marg_gap_shift -> getShiftY(); };
00235
00236
00237 double getShiftZ() { return m_marg_gap_shift -> getShiftZ(); };
00238
00239
00240
00241
00242 double getOffsetX(size_t quad) { return m_offset -> getOffsetX(quad); };
00243
00244
00245 double getOffsetY(size_t quad) { return m_offset -> getOffsetY(quad); };
00246
00247
00248 double getOffsetZ(size_t quad) { return m_offset -> getOffsetZ(quad); };
00249
00250
00251
00252
00253 double getOffsetCorrX(size_t quad) { return m_offset_corr -> getOffsetCorrX(quad); };
00254
00255
00256 double getOffsetCorrY(size_t quad) { return m_offset_corr -> getOffsetCorrY(quad); };
00257
00258
00259 double getOffsetCorrZ(size_t quad) { return m_offset_corr -> getOffsetCorrZ(quad); };
00260
00261
00262
00263
00264 double getRotation(size_t quad, size_t sect) { return m_rotation -> getRotation(quad,sect); };
00265
00266
00267 double getTilt (size_t quad, size_t sect) { return m_tilt -> getTilt (quad,sect); };
00268
00269
00270
00271
00272 double getQuadRotation(size_t quad) { return m_quad_rotation -> getQuadRotation(quad); };
00273
00274
00275 double getQuadTilt (size_t quad) { return m_quad_tilt -> getQuadTilt (quad); };
00276
00277
00278
00279
00280 double* getBeamVector () { return m_beam_vector -> getVector(); };
00281
00282
00283 double getBeamVector (size_t i) { return m_beam_vector -> getVectorEl(i); };
00284
00285
00286
00287
00288 double* getBeamIntersect() { return m_beam_intersect -> getVector(); };
00289
00290
00291 double getBeamIntersect(size_t i) { return m_beam_intersect -> getVectorEl(i); };
00292
00293
00294
00295
00296 static double getRowSize_um() { return 109.92; }
00297
00298
00299 static double getColSize_um() { return 109.92; }
00300
00301
00302 static double getGapRowSize_um(){ return 274.80; }
00303
00304
00305 static double getGapSize_um() { return 2*getGapRowSize_um() - getRowSize_um(); }
00306
00307
00308 static double getOrtSize_um() { return 500.00; }
00309
00310
00311 static double getRowUmToPix() { return 1./getRowSize_um(); }
00312
00313
00314 static double getColUmToPix() { return 1./getColSize_um(); }
00315
00316
00317 static double getOrtUmToPix() { return 1.; }
00318
00319
00320 double getCenterGlobalX(size_t quad, size_t sect){ return m_center_global -> getCenterX(quad,sect); };
00321
00322
00323 double getCenterGlobalY(size_t quad, size_t sect){ return m_center_global -> getCenterY(quad,sect); };
00324
00325
00326 double getCenterGlobalZ(size_t quad, size_t sect){ return m_center_global -> getCenterZ(quad,sect); };
00327
00328
00329 double getRotationGlobal(size_t quad, size_t sect) { return m_rotation_global -> getRotation(quad,sect); };
00330
00331
00332 int getCalibTypeStatus(const std::string& type) { return m_calibtype_status[type]; };
00333
00334
00335 protected:
00336
00337
00338 void fillCalibNameVector ();
00339
00340
00341 void getCalibFileName ();
00342
00343
00344 void loadCalibPars ();
00345
00346
00347 void openCalibFile ();
00348
00349
00350 void closeCalibFile ();
00351
00352
00353 void readCalibPars ();
00354
00355
00356 void fillCalibParsV1 ();
00357
00358
00359 void fillDefaultCalibParsV1();
00360
00361
00362 void fatalMissingFileName ();
00363
00364
00365 void msgUseDefault ();
00366
00367
00368 private:
00369
00370
00371 CSPadCalibPars ( const CSPadCalibPars& ) ;
00372
00373 CSPadCalibPars operator = ( const CSPadCalibPars& ) ;
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383 std::string m_calibdir;
00384 std::string m_calibfilename;
00385
00386
00387
00388 std::string m_calibDir;
00389 std::string m_typeGroupName;
00390 std::string m_source;
00391 Pds::Src m_src;
00392 std::string m_dataType;
00393 unsigned long m_runNumber;
00394
00395 std::vector<std::string> v_calibname;
00396 std::vector<double> v_parameters;
00397
00398 std::map<std::string, int> m_calibtype_status;
00399
00400 std::string m_cur_calibname;
00401 std::string m_fname;
00402
00403 bool m_isTestMode;
00404 unsigned m_print_bits;
00405
00406
00407
00408
00409 std::ifstream m_file;
00410
00411 pdscalibdata::CalibParsCenterV1 *m_center;
00412 pdscalibdata::CalibParsCenterCorrV1 *m_center_corr;
00413 pdscalibdata::CalibParsMargGapShiftV1 *m_marg_gap_shift;
00414 pdscalibdata::CalibParsOffsetV1 *m_offset;
00415 pdscalibdata::CalibParsOffsetCorrV1 *m_offset_corr;
00416 pdscalibdata::CalibParsRotationV1 *m_rotation;
00417 pdscalibdata::CalibParsTiltV1 *m_tilt;
00418 pdscalibdata::CalibParsQuadRotationV1 *m_quad_rotation;
00419 pdscalibdata::CalibParsQuadTiltV1 *m_quad_tilt;
00420 pdscalibdata::CsPadBeamVectorV1 *m_beam_vector;
00421 pdscalibdata::CsPadBeamIntersectV1 *m_beam_intersect;
00422 pdscalibdata::CsPadCenterGlobalV1 *m_center_global;
00423 pdscalibdata::CsPadRotationGlobalV1 *m_rotation_global;
00424
00425 };
00426
00427 }
00428
00429 #endif // PSCALIB_CSPADCALIBPARS_H