5 #include "GaudiKernel/StatusCode.h"
19 charAddress(
auto &
v){
20 return reinterpret_cast<char *
>(&
v);
53 , m_pathbin(
v.m_pathbin)
54 , m_pathtxt(
v.m_pathtxt)
69 throw std::range_error(
"AlVec Assignment: size does not match!" );
90 if (
this==&
v)
return *
this;
93 throw std::range_error(
"AlVec Assignment: size does not match!" );
104 throw std::range_error(
"operator+: vectors size does not match!" );
120 throw std::range_error(
"operator+=: vectors size does not match!" );
133 throw std::range_error(
"operator-: vectors size does not match!" );
149 throw std::range_error(
"operator+=: vectors size does not match!" );
163 throw std::range_error(
"scalar product: vectors size does not match!" );
176 throw std::range_error(
"Left hand vector-matrix multiplication: size does not match!" );
181 for (
int i=0;
i<
m.ncol();
i++) {
190 throw std::range_error(
"Left hand vector-matrix multiplication: size does not match!" );
227 if ( Nnew>=0 && Nnew !=
m_size ) {
248 if(start<m_size && index>=0){
280 throw std::range_error(
"Vector of indices larger than matrix size." );
285 for (
int i=0;
i<
n-1;
i++)
286 for (
int j=
i+1; j<
n; j++)
294 for (
int i=0;
i<
n;
i++) {
297 throw std::out_of_range(
"AlVec::RemoveElements: Index goes beyond matrix " );
323 std::map<int,unsigned long long> moduleIndexMap,
float version)
325 std::ofstream outvec;
332 return StatusCode::FAILURE;
333 outvec.write(charAddress(io_size),
sizeof (io_size));
334 outvec.write(charAddress(
scale),
sizeof (
scale));
340 return StatusCode::FAILURE;
341 outvec.setf(std::ios::fixed);
342 outvec.setf(std::ios::showpoint);
344 outvec <<
"DoF: " << std::setw(6) <<
m_size << std::endl;
345 outvec <<
"scale: " << std::setw(18) <<
scale << std::endl;
346 outvec <<
"AlVec version: " << std::setw(6) <<
version << std::endl;
354 itcod=moduleIndexMap.find(
i/6);
355 if (itcod != moduleIndexMap.end()) {
356 ielem = (itcod->second);
362 outvec.write(charAddress((ielem)),
sizeof (ielem));
363 outvec.write(charAddress((velem)),
sizeof (velem));
366 outvec << std::setw(20) << ielem << std::setw(18) << velem << std::endl;
369 return StatusCode::SUCCESS;
374 std::map<int,unsigned long long> moduleIndexMap,
float version)
376 std::ofstream outvec;
405 if (
sc!=StatusCode::SUCCESS)
return StatusCode::FAILURE;
412 itcod=moduleIndexMap.find(
i);
413 if (itcod != moduleIndexMap.end())
414 ielem = (itcod->second);
419 outvec.write(charAddress((ielem)),
sizeof (ielem));
420 outvec.write(charAddress((velem)),
sizeof (velem));
423 outvec << std::setw(20) << ielem << std::setw(18) << velem << std::endl;
426 return StatusCode::SUCCESS;
431 std::map<int,std::string> moduleNameMap,
float version)
433 std::ofstream outvec;
436 if (
sc!=StatusCode::SUCCESS)
return StatusCode::FAILURE;
443 itcod=moduleNameMap.find(
i);
444 if (itcod != moduleNameMap.end()) {
445 elem = (itcod->second);
451 std::cout<<
"can't write module name in binary output!"<<std::endl;
452 return StatusCode::FAILURE;
455 outvec << std::setw(20) << elem << std::setw(18) << velem << std::endl;
458 return StatusCode::SUCCESS;
463 float version, std::ofstream& outvec)
470 return StatusCode::FAILURE;
471 outvec.write(charAddress(io_size),
sizeof (io_size));
472 outvec.write(charAddress(
scale),
sizeof (
scale));
479 return StatusCode::FAILURE;
480 outvec.setf(std::ios::fixed);
481 outvec.setf(std::ios::showpoint);
483 outvec <<
"DoF: " << std::setw(6) <<
m_size << std::endl;
484 outvec <<
"scale: " << std::setw(18) <<
scale << std::endl;
485 outvec <<
"AlVec version: " << std::setw(6) <<
version << std::endl;
487 return StatusCode::SUCCESS;
492 std::map<int,unsigned long long> &modmap,
float &
version)
494 bool StdUnits =
true;
497 return StatusCode::FAILURE;
503 return StatusCode::FAILURE;
507 invec.read(charAddress(vsiz),
sizeof (vsiz));
511 invec.read(charAddress(
scale),
sizeof(
scale));
524 invec.read(charAddress(ielem),
sizeof (ielem));
527 invec.read(charAddress(velem),
sizeof (velem));
535 return StatusCode::SUCCESS;
540 std::ifstream invec((
filename).c_str(), std::ios::binary);
542 return StatusCode::FAILURE;
545 invec.read(charAddress(vsiz),
sizeof (vsiz));
549 invec.read(charAddress(
scale),
sizeof (
scale));
563 return StatusCode::SUCCESS;
568 std::map<int,unsigned long long> &modmap,
float &
version)
571 bool StdUnits =
true;
574 return StatusCode::FAILURE;
579 return StatusCode::FAILURE;
582 invec.read(charAddress(vsiz),
sizeof (vsiz));
587 invec.read(charAddress(
scale),
sizeof (
scale));
601 invec.read(charAddress(ielem),
sizeof (ielem));
604 invec.read(charAddress(velem),
sizeof (velem));
612 return StatusCode::SUCCESS;
617 std::map<int,unsigned long long> &modmap,
float &
version)
621 return StatusCode::FAILURE;
624 invec.read(charAddress(vsiz),
sizeof (vsiz));
628 invec.read(charAddress(
scale),
sizeof (
scale));
639 invec.read(charAddress(ielem),
sizeof (ielem));
642 invec.read(charAddress(velem),
sizeof (velem));
650 return StatusCode::SUCCESS;
655 std::ifstream eigenvec(
filename.c_str(), std::ios::binary);
657 return StatusCode::FAILURE;
660 eigenvec.read(charAddress(vsiz),
sizeof (vsiz));
665 eigenvec.read(charAddress(velem),
sizeof (velem));
671 return StatusCode::SUCCESS;
677 std::ofstream outvec;
684 return StatusCode::FAILURE;
686 outvec.write(charAddress(io_size),
sizeof (io_size));
692 return StatusCode::FAILURE;
694 outvec.setf(std::ios::fixed);
695 outvec.setf(std::ios::showpoint);
697 outvec <<
"AlVec::DoF: " << std::setw(6) <<
m_size << std::endl;
709 outvec.write(charAddress((velem)),
sizeof (velem));
711 outvec << std::setw(10) <<
i << std::setw(18) << velem << std::endl;
714 return StatusCode::SUCCESS;