lsst.meas.extensions.psfex
g33ac35c1f1+3ed39e24e0
Toggle main menu visibility
Loading...
Searching...
No Matches
src
psfexAdaptors.cc
Go to the documentation of this file.
1
#include "boost/format.hpp"
2
#include "
lsst/pex/exceptions.h
"
3
#include "lsst/meas/extensions/psfex/Field.hh"
4
5
extern
"C"
{
6
#include "globals.h"
7
#include "context.h"
8
#include "prefs.h"
9
#include "sample.h"
10
11
/************************************************************************************************************/
12
13
setstruct *
14
load_samples
(
char
**filenames,
int
catindex,
int
ncat,
int
ext,
15
int
next, contextstruct *context)
16
{
17
/*
18
* The C version of this is called two ways:
19
* catindex == 0, ncat == ncat Read all catalogues
20
* catindex == c, ncat == 1 Read only catalogue c
21
*/
22
setstruct *completeSet =
reinterpret_cast<
setstruct *
>
(filenames[catindex + 0]);
23
/*
24
* Make a new set, which may be a subset of the completeSet
25
*/
26
setstruct *set = init_set(context);
27
set->fwhm = completeSet->fwhm;
28
for
(
int
i = 0; i != completeSet->vigdim; ++i) {
29
set->vigsize[i] = completeSet->vigsize[i];
30
}
31
for
(
int
i = 0; i != completeSet->ncontext; ++i) {
32
strcpy(set->contextname[i], completeSet->contextname[i]);
33
set->contextoffset[i] = completeSet->contextoffset[i];
34
set->contextscale[i] = completeSet->contextscale[i];
35
}
36
/*
37
* Count how many samples we'll be including
38
*/
39
int
nsample_keep = 0;
40
for
(
int
i = 0; i != ncat; ++i) {
41
setstruct *s =
reinterpret_cast<
setstruct *
>
(filenames[catindex + i]);
42
for
(
int
j = 0; j != completeSet->nsample; ++j) {
43
samplestruct
const
*samp = s->sample[j];
44
if
(ext == ALL_EXTENSIONS || ext == samp->extindex) {
45
++nsample_keep;
46
}
47
}
48
}
49
50
set->samples_owner = 0;
51
malloc_samples(set, nsample_keep);
52
for
(
int
i = 0; i != ncat; ++i) {
53
setstruct *s =
reinterpret_cast<
setstruct *
>
(filenames[catindex + i]);
54
for
(
int
j = 0; j != completeSet->nsample; ++j) {
55
samplestruct *samp = s->sample[j];
56
if
(ext == ALL_EXTENSIONS || ext == samp->extindex) {
57
set->sample[set->nsample++] = samp;
58
}
59
}
60
}
61
62
return
set;
63
}
64
65
}
66
67
/************************************************************************************************************/
68
69
namespace
lsst
{
namespace
meas
{
namespace
extensions
{
namespace
psfex
{
70
71
void
72
makeit
(
std::vector
<
std::shared_ptr<Field>
> &fields_,
73
std::vector
<
std::shared_ptr<Set>
>
const
& sets
74
)
75
{
76
if
(sets.size() > MAXFILE) {
77
throw
LSST_EXCEPT
(
lsst::pex::exceptions::LengthError
,
78
(boost::format(
"Too many sets: %d"
) % sets.size()).str());
79
}
80
81
std::vector<fieldstruct *>
fields(fields_.size());
82
for
(
unsigned
int
i = 0; i != fields.
size
(); ++i) {
83
fields[i] = fields_[i]->impl;
84
}
85
/*
86
* We are going to scribble on prefs.incat_name to replace the array of (char*) with
87
* an array of data
88
*/
89
91
struct
ScribbleRaii {
92
int
const
ncat;
// Original number
93
std::vector<char *>
incat_name;
// Original data
94
size_t
const
setsSize;
// New size
95
ScribbleRaii(
std::vector
<
std::shared_ptr<Set>
>
const
& sets) :
96
ncat(prefs.ncat), incat_name(ncat), setsSize(sets.size())
97
{
98
for
(
int
i = 0; i != prefs.ncat; ++i) {
99
incat_name[i] = prefs.incat_name[i];
100
}
101
for
(
unsigned
int
i = 0; i != sets.size(); ++i) {
102
prefs.incat_name[i] =
reinterpret_cast<
char
*
>
(sets[i]->impl);
103
}
104
prefs.ncat = setsSize;
105
}
106
~ScribbleRaii() {
107
for
(
int
i = 0; i != prefs.ncat; ++i) {
108
prefs.incat_name[i] = incat_name[i];
109
}
110
for
(
size_t
i = prefs.ncat; i < setsSize; ++i) {
111
prefs.incat_name[i] = NULL;
112
}
113
prefs.ncat = ncat;
114
}
115
};
116
117
118
contextstruct *context = NULL, *fullcontext = NULL;
119
{
120
ScribbleRaii scribble(sets);
121
makeit_body(&fields[0], &context, &fullcontext,
false
);
122
}
123
124
if
(context->npc) {
125
context_end(fullcontext);
126
}
127
context_end(context);
128
}
129
130
}}}}
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
lsst::pex::exceptions::LengthError
exceptions.h
lsst::meas::extensions::psfex
Definition
PsfexPsf.h:32
lsst::meas::extensions::psfex::makeit
void makeit(std::vector< std::shared_ptr< Field > > &fields_, std::vector< std::shared_ptr< Set > > const &sets)
Definition
psfexAdaptors.cc:72
lsst::meas::extensions
Definition
PsfexPsf.h:32
lsst::meas
lsst
load_samples
setstruct * load_samples(char **filenames, int catindex, int ncat, int ext, int next, contextstruct *context)
Definition
psfexAdaptors.cc:14
std::shared_ptr
std::vector::size
T size(T... args)
std::vector
Generated on
for lsst.meas.extensions.psfex by
1.17.0