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;
}
|