AlignableDataIO

PosType

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
#ifndef Alignment_CommonAlignmentAlgorithm_AlignableDataIO_H
#define Alignment_CommonAlignmentAlgorithm_AlignableDataIO_H

#include "Alignment/CommonAlignment/interface/Utilities.h"
#include "Alignment/CommonAlignmentAlgorithm/interface/AlignableData.h"

class Alignable;

/// Abstract base class for IO of alignable positions/shifts.
/// Derived concrete class must implement raw read/write methods

class AlignableDataIO {
protected:
  enum PosType { Abs, Org, Rel };

  /// Constructor
  AlignableDataIO(PosType p) : thePosType(p) {}

  /// Destructor
  virtual ~AlignableDataIO() {}

  /// Open IO handle
  virtual int open(const char* filename, int iteration, bool writemode) = 0;

  /// Close IO handle
  virtual int close(void) = 0;

  /// Write absolute positions of one Alignable
  int writeAbsPos(Alignable* ali, bool validCheck);

  /// Write absolute positions of many Alignables
  int writeAbsPos(const align::Alignables& alivec, bool validCheck);

  /// Read absolute positions of one Alignable
  AlignableAbsData readAbsPos(Alignable* ali, int& ierr);

  /// Read absolute positions of many Alignables
  AlignablePositions readAbsPos(const align::Alignables& alivec, int& ierr);

  /// Write original positions of one Alignable
  int writeOrgPos(Alignable* ali, bool validCheck);

  /// Write original positions of many Alignables
  int writeOrgPos(const align::Alignables& alivec, bool validCheck);

  /// Read original positions of one Alignable
  AlignableAbsData readOrgPos(Alignable* ali, int& ierr);

  /// Read original positions of many Alignables
  AlignablePositions readOrgPos(const align::Alignables& alivec, int& ierr);

  /// Write relative positions of one Alignable
  int writeRelPos(Alignable* ali, bool validCheck);

  /// Write relative positions of many Alignables
  int writeRelPos(const align::Alignables& alivec, bool validCheck);

  /// Read relative positions of one Alignable
  AlignableRelData readRelPos(Alignable* ali, int& ierr);

  /// Read relative positions of many Alignables
  AlignableShifts readRelPos(const align::Alignables& alivec, int& ierr);

  // 'raw' read/write methods
  // must be provided by concrete derived class

  /// Write absolute positions
  virtual int writeAbsRaw(const AlignableAbsData& ad) = 0;
  /// Read absolute positions
  virtual AlignableAbsData readAbsRaw(Alignable* ali, int& ierr) = 0;
  /// Write relative positions
  virtual int writeRelRaw(const AlignableRelData& ad) = 0;
  /// Read relative positions
  virtual AlignableRelData readRelRaw(Alignable* ali, int& ierr) = 0;

  // Data members
  PosType thePosType;  // Defines whether absolute/orig/relative pos. are used
};

#endif