5#include "GaudiKernel/StatusCode.h"
19 charAddress(
auto & v){
20 return reinterpret_cast<char *
>(&
v);
69 throw std::range_error(
"AlVec Assignment: size does not match!" );
73 double* q =
v.m_ptr_data +
m_size;
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!" );
110 double* q =
v.m_ptr_data +
m_size;
111 double*
r = b.m_ptr_data +
m_size;
120 throw std::range_error(
"operator+=: vectors size does not match!" );
124 double* q =
v.m_ptr_data +
m_size;
133 throw std::range_error(
"operator-: vectors size does not match!" );
139 double* q =
v.m_ptr_data +
m_size;
140 double*
r = b.m_ptr_data +
m_size;
149 throw std::range_error(
"operator+=: vectors size does not match!" );
153 double* q =
v.m_ptr_data +
m_size;
163 throw std::range_error(
"scalar product: vectors size does not match!" );
167 double* q =
v.m_ptr_data +
m_size;
176 throw std::range_error(
"Left hand vector-matrix multiplication: size does not match!" );
181 for (
int i=0;i<m.ncol();i++) {
182 for (
int j=0;j<
m_size;j++) *(b.m_ptr_data+i) += *(
m_ptr_data+j)*m.elemc(j, i);
190 throw std::range_error(
"Left hand vector-matrix multiplication: size does not match!" );
195 for (
int i=0;i<
m_size;i++) {
196 for (
int j=0;j<
m_size;j++) *(b.m_ptr_data+i) += *(
m_ptr_data+j)*m.elemc(j, i);
227 if ( Nnew>=0 && Nnew !=
m_size ) {
246 const int start = shift*
index;
248 if(start<m_size && index>=0){
249 for(
int row=start; row<
m_size; row++) {
268 if (counter==5-control) { counter=0; shift++; }
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 " );
322StatusCode
AlVec::Write(
const std::string &filename,
bool binary,
double scale,
323 std::map<int,unsigned long long> moduleIndexMap,
float version)
325 std::ofstream outvec;
330 outvec.open((
m_pathbin+filename).c_str(), std::ios::binary);
332 return StatusCode::FAILURE;
333 outvec.write(charAddress(io_size),
sizeof (io_size));
334 outvec.write(charAddress(scale),
sizeof (scale));
335 outvec.write(charAddress(version),
sizeof (version));
338 outvec.open((
m_pathtxt+filename).c_str());
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;
351 std::map<int,unsigned long long>::iterator itcod;
353 for(
int i=0; i<
m_size; i++) {
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;
409 std::map<int,unsigned long long>::iterator itcod;
411 for(
int i=0; i<
m_size; i++) {
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;
440 std::map<int,std::string>::iterator itcod;
442 for(
int i=0; i<
m_size; i++) {
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)
468 outvec.open((
m_pathbin+filename).c_str(), std::ios::binary);
470 return StatusCode::FAILURE;
471 outvec.write(charAddress(io_size),
sizeof (io_size));
472 outvec.write(charAddress(scale),
sizeof (scale));
473 outvec.write(charAddress(version),
sizeof (version));
477 outvec.open((
m_pathtxt+filename).c_str());
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;
500 std::ifstream invec((
m_pathbin+filename).c_str(), std::ios::binary);
503 return StatusCode::FAILURE;
507 invec.read(charAddress(vsiz),
sizeof (vsiz));
511 invec.read(charAddress(scale),
sizeof(scale));
515 invec.read(charAddress(version),
sizeof (version));
523 for(
int i=0; i<
m_size; i++) {
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));
552 invec.read(charAddress(version),
sizeof (version));
554 StdUnits = version>=2.0;
563 return StatusCode::SUCCESS;
568 std::map<int,unsigned long long> &modmap,
float &version)
571 bool StdUnits =
true;
574 return StatusCode::FAILURE;
577 std::ifstream invec((
m_pathbin+filename).c_str(), std::ios::binary);
579 return StatusCode::FAILURE;
582 invec.read(charAddress(vsiz),
sizeof (vsiz));
587 invec.read(charAddress(scale),
sizeof (scale));
592 invec.read(charAddress(version),
sizeof (version));
600 for(
int i=0; i<
m_size; i++) {
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)
619 std::ifstream invec((
m_pathbin+filename).c_str(), std::ios::binary);
621 return StatusCode::FAILURE;
624 invec.read(charAddress(vsiz),
sizeof (vsiz));
628 invec.read(charAddress(scale),
sizeof (scale));
631 invec.read(charAddress(version),
sizeof (version));
638 for(
int i=0; i<
m_size; i++) {
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));
664 for(
int i=0; i<
m_size; i++) {
665 eigenvec.read(charAddress(velem),
sizeof (velem));
671 return StatusCode::SUCCESS;
677 std::ofstream outvec;
681 outvec.open((
m_pathbin+filename).c_str(), std::ios::binary);
684 return StatusCode::FAILURE;
686 outvec.write(charAddress(io_size),
sizeof (io_size));
689 outvec.open((
m_pathtxt+filename).c_str());
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;
704 for(
int i=0; i<
m_size; i++) {
709 outvec.write(charAddress((velem)),
sizeof (velem));
711 outvec << std::setw(10) << i << std::setw(18) << velem << std::endl;
714 return StatusCode::SUCCESS;
contains the implementation of the methods of class AlMat, for handling general NxM matrices
contains the base implementation for handling symmertic matrices
void SetPathBin(const std::string &)
AlVec & operator+=(const AlVec &)
AlVec & operator*=(const double &)
AlVec operator+(const AlVec &) const
int RemoveElements(std::vector< int >)
StatusCode ReadPartial(const std::string &, double &, std::map< int, unsigned long long > &, float &)
StatusCode WriteEigenvalueVec(const std::string &, bool)
AlVec & operator-=(const AlVec &)
StatusCode Read(const std::string &, double &, std::map< int, unsigned long long > &, float &)
void SetPathTxt(const std::string &)
AlVec & operator=(const AlVec &v)
StatusCode WritePartial(const std::string &, bool, double, std::map< int, unsigned long long >, float)
void RemoveAlignPar(int, int)
StatusCode ReadProjected(const std::string &, double &, std::map< int, unsigned long long > &, float &)
StatusCode ReadScalaPack(const std::string &)
AlVec operator-(const AlVec &) const
StatusCode InitializeOutputVector(const std::string &, bool, double, float, std::ofstream &)
static StatusCode CheckVecVersion(const std::string &, bool &)
double operator*(const AlVec &) const
StatusCode Write(const std::string &, bool, double, std::map< int, unsigned long long >, float)
Ensure that the ATLAS eigen extensions are properly loaded.
std::pair< long int, long int > indices