CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
AlignableDataIO.cc
Go to the documentation of this file.
5 
6 // this class's header
8 
9 // ----------------------------------------------------------------------------
11 {
12  return readAbsRaw(ali,ierr);
13 }
14 
15 
16 // ----------------------------------------------------------------------------
18 {
19  return readAbsRaw(ali,ierr);
20 }
21 
22 
23 // ----------------------------------------------------------------------------
25 {
26  return readRelRaw(ali,ierr);
27 }
28 
29 
30 // ----------------------------------------------------------------------------
31 int AlignableDataIO::writeAbsPos(Alignable* ali, bool validCheck)
32 {
33 
34  if ( !(validCheck) || ali->alignmentParameters()->isValid() )
35  {
36  // position in global frame
37  align::PositionType pos = ali->surface().position();
38  // global rotation
40  // if a unit: store surface deformation (little kind of hack)...
41  std::vector<double> pars;
42  if (ali->alignableObjectId() == align::AlignableDetUnit) { // only detunits have them
43  std::vector<std::pair<int,SurfaceDeformation*> > result;
44  if (1 == ali->surfaceDeformationIdPairs(result)) { // might not have any...
45  pars = result[0].second->parameters();
46  }
47  }
48 
49  // write
50  return writeAbsRaw(
51  AlignableAbsData( pos,rot,
52  ali->id(),
53  ali->alignableObjectId(),
54  pars)
55  );
56  }
57 
58  return 1;
59 }
60 
61 
62 // ----------------------------------------------------------------------------
63 int AlignableDataIO::writeRelPos(Alignable* ali, bool validCheck)
64 {
65  if ( !(validCheck) || ali->alignmentParameters()->isValid() )
66  {
67  // rel. shift in global frame
68  align::GlobalVector pos = ali->displacement();
69  // rel. rotation in global frame
71  // FIXME: should add something to store changes of surface deformations...
72  std::vector<double> pars;
73  // write
74  return writeRelRaw(AlignableRelData(pos,rot,ali->id(),
75  ali->alignableObjectId(), pars));
76  }
77 
78  return 1;
79 }
80 
81 
82 // ----------------------------------------------------------------------------
83 int AlignableDataIO::writeOrgPos(Alignable* ali, bool validCheck)
84 {
85  if ( !(validCheck) || ali->alignmentParameters()->isValid() )
86  {
87  // orig position
88  align::PositionType pos = ali->globalPosition() - ali->displacement();
89  // orig rotation
91  // FIXME: should add something to store changes of surface deformations...
92  std::vector<double> pars;
93  // write
94  return writeAbsRaw(AlignableAbsData(pos,rot,ali->id(),
95  ali->alignableObjectId(), pars));
96  }
97 
98  return 1;
99 }
100 
101 
102 // ----------------------------------------------------------------------------
104  bool validCheck)
105 {
106 
107  int icount=0;
108  for( align::Alignables::const_iterator it=alivec.begin();
109  it!=alivec.end(); ++it )
110  {
111  int iret = writeAbsPos(*it,validCheck);
112  if (iret==0) icount++;
113  }
114  LogDebug("WriteAbsPos") << "all,written: " << alivec.size() <<","<< icount;
115 
116  return 0;
117 
118 }
119 
120 
121 // ----------------------------------------------------------------------------
124 {
125 
126  AlignablePositions retvec;
127  int ierr2=0;
128  ierr=0;
129  for( align::Alignables::const_iterator it=alivec.begin();
130  it!=alivec.end(); ++it )
131  {
132  AlignableAbsData ad=readAbsPos(*it, ierr2);
133  if (ierr2==0) retvec.push_back(ad);
134  }
135 
136  LogDebug("ReadAbsPos") << "all,written: " << alivec.size() <<"," << retvec.size();
137 
138  return retvec;
139 
140 }
141 
142 
143 // ----------------------------------------------------------------------------
145  bool validCheck )
146 {
147 
148  int icount=0;
149  for( align::Alignables::const_iterator it=alivec.begin();
150  it!=alivec.end(); ++it )
151  {
152  int iret=writeOrgPos(*it,validCheck);
153  if (iret==0) icount++;
154  }
155 
156  LogDebug("WriteOrgPos") << "all,written: " << alivec.size() <<"," << icount;
157  return 0;
158 
159 }
160 
161 
162 // ----------------------------------------------------------------------------
165 {
166 
167  AlignablePositions retvec;
168  int ierr2=0;
169  ierr=0;
170  for( align::Alignables::const_iterator it=alivec.begin();
171  it!=alivec.end(); ++it )
172  {
173  AlignableAbsData ad=readOrgPos(*it, ierr2);
174  if (ierr2==0) retvec.push_back(ad);
175  }
176 
177  LogDebug("ReadOrgPos") << "all,read: " << alivec.size() <<", "<< retvec.size();
178 
179  return retvec;
180 
181 }
182 
183 
184 // ----------------------------------------------------------------------------
186  bool validCheck )
187 {
188 
189  int icount=0;
190  for( align::Alignables::const_iterator it=alivec.begin();
191  it!=alivec.end(); ++it ) {
192  int iret=writeRelPos(*it,validCheck);
193  if (iret==0) icount++;
194  }
195  LogDebug("WriteRelPos") << "all,written: " << alivec.size() <<", "<< icount;
196  return 0;
197 
198 }
199 
200 
201 // ----------------------------------------------------------------------------
204 {
205 
206  AlignableShifts retvec;
207  int ierr2=0;
208  ierr=0;
209  for( align::Alignables::const_iterator it=alivec.begin();
210  it!=alivec.end(); ++it )
211  {
212  AlignableRelData ad=readRelPos(*it, ierr2);
213  if (ierr2==0) retvec.push_back(ad);
214  }
215  LogDebug("ReadRelPos") << "all,read: " << alivec.size() <<", "<< retvec.size();
216 
217  return retvec;
218 
219 }
#define LogDebug(id)
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:185
virtual int writeAbsRaw(const AlignableAbsData &ad)=0
Write absolute positions.
AlignableAbsData readAbsPos(Alignable *ali, int &ierr)
Read absolute positions of one Alignable.
AlignableAbsData readOrgPos(Alignable *ali, int &ierr)
Read original positions of one Alignable.
int writeAbsPos(Alignable *ali, bool validCheck)
Write absolute positions of one Alignable.
const GlobalVector & displacement() const
Return change of the global position since the creation of the object.
Definition: Alignable.h:140
const RotationType & globalRotation() const
Return the global orientation of the object.
Definition: Alignable.h:137
AlignableData< align::GlobalVector > AlignableRelData
relative position/rotation
Definition: AlignableData.h:49
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
std::vector< AlignableRelData > AlignableShifts
Definition: AlignableData.h:52
const RotationType & rotation() const
Return change of orientation since the creation of the object.
Definition: Alignable.h:143
virtual AlignableAbsData readAbsRaw(Alignable *ali, int &ierr)=0
Read absolute positions.
virtual int surfaceDeformationIdPairs(std::vector< std::pair< int, SurfaceDeformation * > > &) const =0
tuple result
Definition: query.py:137
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
int writeOrgPos(Alignable *ali, bool validCheck)
Write original positions of one Alignable.
int writeRelPos(Alignable *ali, bool validCheck)
Write relative positions of one Alignable.
virtual AlignableRelData readRelRaw(Alignable *ali, int &ierr)=0
Read relative positions.
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:131
AlignableRelData readRelPos(Alignable *ali, int &ierr)
Read relative positions of one Alignable.
AlignableData< align::GlobalPoint > AlignableAbsData
Absolute position/rotation.
Definition: AlignableData.h:47
std::vector< Alignable * > Alignables
Definition: Utilities.h:28
bool isValid(void) const
Get validity flag.
TkRotation transposed() const
virtual int writeRelRaw(const AlignableRelData &ad)=0
Write relative positions.
const RotationType & rotation() const
std::vector< AlignableAbsData > AlignablePositions
Definition: AlignableData.h:51
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:134
const PositionType & position() const