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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
#include "Alignment/CommonAlignment/interface/Alignable.h"
#include "Alignment/CommonAlignment/interface/AlignmentParameters.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "Geometry/CommonTopologies/interface/SurfaceDeformation.h"

// this class's header
#include "Alignment/CommonAlignmentAlgorithm/interface/AlignableDataIO.h"

// ----------------------------------------------------------------------------
AlignableAbsData AlignableDataIO::readAbsPos(Alignable* ali, int& ierr) { return readAbsRaw(ali, ierr); }

// ----------------------------------------------------------------------------
AlignableAbsData AlignableDataIO::readOrgPos(Alignable* ali, int& ierr) { return readAbsRaw(ali, ierr); }

// ----------------------------------------------------------------------------
AlignableRelData AlignableDataIO::readRelPos(Alignable* ali, int& ierr) { return readRelRaw(ali, ierr); }

// ----------------------------------------------------------------------------
int AlignableDataIO::writeAbsPos(Alignable* ali, bool validCheck) {
  if (!(validCheck) || ali->alignmentParameters()->isValid()) {
    // position in global frame
    align::PositionType pos = ali->surface().position();
    // global rotation
    align::RotationType rot = ali->surface().rotation();
    // if a unit: store surface deformation (little kind of hack)...
    std::vector<double> pars;
    if (ali->alignableObjectId() == align::AlignableDetUnit) {  // only detunits have them
      std::vector<std::pair<int, SurfaceDeformation*> > result;
      if (1 == ali->surfaceDeformationIdPairs(result)) {  // might not have any...
        pars = result[0].second->parameters();
      }
    }

    // write
    return writeAbsRaw(AlignableAbsData(pos, rot, ali->id(), ali->alignableObjectId(), pars));
  }

  return 1;
}

// ----------------------------------------------------------------------------
int AlignableDataIO::writeRelPos(Alignable* ali, bool validCheck) {
  if (!(validCheck) || ali->alignmentParameters()->isValid()) {
    // rel. shift in global frame
    const align::GlobalVector& pos = ali->displacement();
    // rel. rotation in global frame
    align::RotationType rot = ali->rotation();
    // FIXME: should add something to store changes of surface deformations...
    std::vector<double> pars;
    // write
    return writeRelRaw(AlignableRelData(pos, rot, ali->id(), ali->alignableObjectId(), pars));
  }

  return 1;
}

// ----------------------------------------------------------------------------
int AlignableDataIO::writeOrgPos(Alignable* ali, bool validCheck) {
  if (!(validCheck) || ali->alignmentParameters()->isValid()) {
    // orig position
    align::PositionType pos = ali->globalPosition() - ali->displacement();
    // orig rotation
    align::RotationType rot = ali->globalRotation() * ali->rotation().transposed();
    // FIXME: should add something to store changes of surface deformations...
    std::vector<double> pars;
    // write
    return writeAbsRaw(AlignableAbsData(pos, rot, ali->id(), ali->alignableObjectId(), pars));
  }

  return 1;
}

// ----------------------------------------------------------------------------
int AlignableDataIO::writeAbsPos(const align::Alignables& alivec, bool validCheck) {
  int icount = 0;
  for (align::Alignables::const_iterator it = alivec.begin(); it != alivec.end(); ++it) {
    int iret = writeAbsPos(*it, validCheck);
    if (iret == 0)
      icount++;
  }
  LogDebug("WriteAbsPos") << "all,written: " << alivec.size() << "," << icount;

  return 0;
}

// ----------------------------------------------------------------------------
AlignablePositions AlignableDataIO::readAbsPos(const align::Alignables& alivec, int& ierr) {
  AlignablePositions retvec;
  int ierr2 = 0;
  ierr = 0;
  for (align::Alignables::const_iterator it = alivec.begin(); it != alivec.end(); ++it) {
    AlignableAbsData ad = readAbsPos(*it, ierr2);
    if (ierr2 == 0)
      retvec.push_back(ad);
  }

  LogDebug("ReadAbsPos") << "all,written: " << alivec.size() << "," << retvec.size();

  return retvec;
}

// ----------------------------------------------------------------------------
int AlignableDataIO::writeOrgPos(const align::Alignables& alivec, bool validCheck) {
  int icount = 0;
  for (align::Alignables::const_iterator it = alivec.begin(); it != alivec.end(); ++it) {
    int iret = writeOrgPos(*it, validCheck);
    if (iret == 0)
      icount++;
  }

  LogDebug("WriteOrgPos") << "all,written: " << alivec.size() << "," << icount;
  return 0;
}

// ----------------------------------------------------------------------------
AlignablePositions AlignableDataIO::readOrgPos(const align::Alignables& alivec, int& ierr) {
  AlignablePositions retvec;
  int ierr2 = 0;
  ierr = 0;
  for (align::Alignables::const_iterator it = alivec.begin(); it != alivec.end(); ++it) {
    AlignableAbsData ad = readOrgPos(*it, ierr2);
    if (ierr2 == 0)
      retvec.push_back(ad);
  }

  LogDebug("ReadOrgPos") << "all,read: " << alivec.size() << ", " << retvec.size();

  return retvec;
}

// ----------------------------------------------------------------------------
int AlignableDataIO::writeRelPos(const align::Alignables& alivec, bool validCheck) {
  int icount = 0;
  for (align::Alignables::const_iterator it = alivec.begin(); it != alivec.end(); ++it) {
    int iret = writeRelPos(*it, validCheck);
    if (iret == 0)
      icount++;
  }
  LogDebug("WriteRelPos") << "all,written: " << alivec.size() << ", " << icount;
  return 0;
}

// ----------------------------------------------------------------------------
AlignableShifts AlignableDataIO::readRelPos(const align::Alignables& alivec, int& ierr) {
  AlignableShifts retvec;
  int ierr2 = 0;
  ierr = 0;
  for (align::Alignables::const_iterator it = alivec.begin(); it != alivec.end(); ++it) {
    AlignableRelData ad = readRelPos(*it, ierr2);
    if (ierr2 == 0)
      retvec.push_back(ad);
  }
  LogDebug("ReadRelPos") << "all,read: " << alivec.size() << ", " << retvec.size();

  return retvec;
}