SourceXtractorPlusPlus
0.8
Please provide a description of the project.
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
SEFramework
src
lib
FITS
FitsFileManager.cpp
Go to the documentation of this file.
1
/*
2
* FitsFileManager.cpp
3
*
4
* Created on: Sep 19, 2019
5
* Author: mschefer
6
*/
7
8
#include <iostream>
9
#include <assert.h>
10
11
#include "
ElementsKernel/Exception.h
"
12
13
#include "
SEFramework/FITS/FitsFileManager.h
"
14
15
namespace
SourceXtractor {
16
17
std::shared_ptr<FitsFileManager>
FitsFileManager::s_instance
;
18
19
FitsFileManager::FitsFileManager
() : m_max_open_files(500) {
20
}
21
22
FitsFileManager::~FitsFileManager
() {
23
closeAllFiles
();
24
}
25
26
void
FitsFileManager::closeAllFiles
() {
27
for
(
auto
& file :
m_fits_files
) {
28
if
(file.second.m_is_file_opened) {
29
closeFitsFile
(file.second.m_file_pointer);
30
file.second.m_is_file_opened =
false
;
31
file.second.m_file_pointer =
nullptr
;
32
}
33
}
34
}
35
36
37
fitsfile*
FitsFileManager::getFitsFile
(
const
std::string
&
filename
,
bool
writeable) {
38
if
(
m_fits_files
.find(filename) ==
m_fits_files
.end()) {
39
FitsInfo
info;
40
info.
m_is_file_opened
=
false
;
41
info.
m_file_pointer
=
nullptr
;
42
info.
m_is_writeable
= writeable;
43
m_fits_files
[
filename
] = info;
44
}
45
46
FitsInfo
& info =
m_fits_files
[
filename
];
47
if
(!info.
m_is_file_opened
) {
48
info.
m_is_writeable
= info.
m_is_writeable
|| writeable;
49
info.
m_file_pointer
=
openFitsFile
(filename, info.
m_is_writeable
);
50
info.
m_is_file_opened
=
true
;
51
m_open_files
.push_front(filename);
52
53
closeExtraFiles
();
54
}
55
56
if
(writeable && !info.
m_is_writeable
) {
57
closeFitsFile
(info.
m_file_pointer
);
58
info.
m_file_pointer
=
openFitsFile
(filename,
true
);
59
info.
m_is_writeable
=
true
;
60
}
61
62
return
info.
m_file_pointer
;
63
}
64
65
void
FitsFileManager::closeExtraFiles
() {
66
while
(
m_open_files
.size() >
m_max_open_files
) {
67
auto
& file_to_close =
m_fits_files
[
m_open_files
.back()];
68
closeFitsFile
(file_to_close.m_file_pointer);
69
file_to_close.m_is_file_opened =
false
;
70
file_to_close.m_file_pointer =
nullptr
;
71
m_open_files
.pop_back();
72
}
73
}
74
75
76
fitsfile*
FitsFileManager::openFitsFile
(
const
std::string
&
filename
,
bool
writeable)
const
{
77
int
status = 0;
78
fitsfile* fptr =
nullptr
;
79
80
fits_open_file(&fptr, filename.
c_str
(), writeable ? READWRITE : READONLY, &status);
81
if
(status != 0) {
82
throw
Elements::Exception
() <<
"Can't open FITS file: "
<<
filename
;
83
}
84
assert(fptr !=
nullptr
);
85
86
return
fptr;
87
}
88
89
void
FitsFileManager::closeFitsFile
(fitsfile* fptr)
const
{
90
int
status = 0;
91
fits_close_file(fptr, &status);
92
}
93
94
}
std::shared_ptr
SourceXtractor::FitsFileManager::m_fits_files
std::unordered_map< std::string, FitsInfo > m_fits_files
Definition:
FitsFileManager.h:49
SourceXtractor::FitsFileManager::FitsInfo
Definition:
FitsFileManager.h:43
FitsFileManager.h
SourceXtractor::FitsFileManager::m_max_open_files
unsigned int m_max_open_files
Definition:
FitsFileManager.h:51
SourceXtractor::FitsFileManager::closeFitsFile
void closeFitsFile(fitsfile *fptr) const
Definition:
FitsFileManager.cpp:89
SourceXtractor::FitsFileManager::s_instance
static std::shared_ptr< FitsFileManager > s_instance
Definition:
FitsFileManager.h:54
std::string
STL class.
conf.filename
string filename
Definition:
conf.py:63
SourceXtractor::FitsFileManager::FitsInfo::m_file_pointer
fitsfile * m_file_pointer
Definition:
FitsFileManager.h:44
SourceXtractor::FitsFileManager::m_open_files
std::list< std::string > m_open_files
Definition:
FitsFileManager.h:52
SourceXtractor::FitsFileManager::FitsFileManager
FitsFileManager()
Definition:
FitsFileManager.cpp:19
SourceXtractor::FitsFileManager::getFitsFile
fitsfile * getFitsFile(const std::string &filename, bool writeable=false)
Definition:
FitsFileManager.cpp:37
SourceXtractor::FitsFileManager::closeExtraFiles
void closeExtraFiles()
Definition:
FitsFileManager.cpp:65
SourceXtractor::FitsFileManager::~FitsFileManager
virtual ~FitsFileManager()
Definition:
FitsFileManager.cpp:22
Elements::Exception
SourceXtractor::FitsFileManager::FitsInfo::m_is_writeable
bool m_is_writeable
Definition:
FitsFileManager.h:46
std::string::c_str
T c_str(T...args)
SourceXtractor::FitsFileManager::openFitsFile
fitsfile * openFitsFile(const std::string &filename, bool writeable) const
Definition:
FitsFileManager.cpp:76
Exception.h
SourceXtractor::FitsFileManager::closeAllFiles
void closeAllFiles()
Definition:
FitsFileManager.cpp:26
SourceXtractor::FitsFileManager::FitsInfo::m_is_file_opened
bool m_is_file_opened
Definition:
FitsFileManager.h:45
Generated by
1.8.5