1 | // ArchTOIPipe (C) CEA/DAPNIA/SPP IN2P3/LAL
|
---|
2 | // Eric Aubourg
|
---|
3 | // Cecile Renault
|
---|
4 | // Christophe Magneville
|
---|
5 | // Reza Ansari
|
---|
6 | // $Id: fitsringwtr.cc,v 1.2 2003-02-11 14:26:40 cecile Exp $
|
---|
7 |
|
---|
8 | #include "fitsringwtr.h"
|
---|
9 | #include "toimanager.h"
|
---|
10 |
|
---|
11 | extern void fits_lock();
|
---|
12 | extern void fits_unlock();
|
---|
13 |
|
---|
14 | FITSRingWriter::FITSRingWriter(string fn) {
|
---|
15 | fname = fn;
|
---|
16 | fstatus = 0;
|
---|
17 | // Open file
|
---|
18 | remove(fname.c_str());
|
---|
19 | fits_lock();
|
---|
20 | fits_create_file(&fptr,fname.c_str(),&fstatus);
|
---|
21 | fits_unlock();
|
---|
22 | name = "ringwriter";
|
---|
23 | cout << "FITSRINGWriter:: FileName=" << name << endl;
|
---|
24 | }
|
---|
25 |
|
---|
26 | FITSRingWriter::~FITSRingWriter() {
|
---|
27 | }
|
---|
28 |
|
---|
29 | void FITSRingWriter::setNSamples(long n) {
|
---|
30 | nSamples = n;
|
---|
31 | }
|
---|
32 |
|
---|
33 | void FITSRingWriter::setNRings(long n) {
|
---|
34 | nRings = n;
|
---|
35 | }
|
---|
36 |
|
---|
37 | void FITSRingWriter::setAperture(double a) {
|
---|
38 | aperture = a;
|
---|
39 | }
|
---|
40 |
|
---|
41 | void FITSRingWriter::init() {
|
---|
42 | declareInput("CircTheta");
|
---|
43 | declareInput("CircPhi");
|
---|
44 | declareInput("signal");
|
---|
45 | }
|
---|
46 |
|
---|
47 | void FITSRingWriter::run() {
|
---|
48 | //int snb = getMinIn(); ON IGNORE ICI
|
---|
49 | //int sne = getMaxIn(); ON IGNORE ICI
|
---|
50 |
|
---|
51 | char buf[100];
|
---|
52 |
|
---|
53 | fits_lock();
|
---|
54 | fits_write_date(fptr, &fstatus);
|
---|
55 | fits_create_img(fptr,BYTE_IMG,0,NULL,&fstatus);
|
---|
56 | fits_write_comment(fptr,"ArchTOIPipe FITSRingWriter",&fstatus);
|
---|
57 | strcpy(buf, "RINGSET");
|
---|
58 | fits_write_key(fptr, TSTRING, "PDMTYPE", &buf, "Planck Data Model Type", &fstatus);
|
---|
59 | fits_write_key(fptr, TLONG, "NCIRCLES", &nRings, "Number of rings", &fstatus);
|
---|
60 | fits_unlock();
|
---|
61 |
|
---|
62 | for (int ring = 0; ring<nRings; ring++) {
|
---|
63 | char* ttype = "DATA";
|
---|
64 | char* tform = "1D";
|
---|
65 | char xname[100];
|
---|
66 | sprintf(xname, "CRING_%d", ring);
|
---|
67 |
|
---|
68 | fits_lock();
|
---|
69 | fits_create_tbl(fptr,BINARY_TBL,nSamples,1,&ttype,&tform,NULL,xname,&fstatus);
|
---|
70 | strcpy(buf, "RINGDATA");
|
---|
71 | fits_write_key(fptr, TSTRING, "PDMTYPE", &buf, "Planck Data Model Type", &fstatus);
|
---|
72 | double theta = getData(0, ring);//*nSamples);
|
---|
73 | fits_write_key(fptr, TDOUBLE, "CIRTHETA", &theta, "Theta angle in radians", &fstatus);
|
---|
74 | double phi = getData(1, ring);//*nSamples);
|
---|
75 | wontNeedBefore(ring);//*nSamples);
|
---|
76 | fits_write_key(fptr, TDOUBLE, "CIRPHI", &phi, "Phi angle in radians", &fstatus);
|
---|
77 | fits_write_key(fptr, TDOUBLE, "CIRAPER", &aperture, "Aperture angle in radians", &fstatus);
|
---|
78 | fits_write_key(fptr, TLONG, "NSAMPLES", &nSamples, "Number of samples on the circle", &fstatus);
|
---|
79 | fits_unlock();
|
---|
80 |
|
---|
81 | for (int i=0; i<nSamples; i++) {
|
---|
82 | double data = getData(2, ring*nSamples+i);
|
---|
83 | wontNeedBefore(ring*nSamples+i);
|
---|
84 | fits_lock();
|
---|
85 | fits_write_col(fptr, TDOUBLE, 1,i,1,1, &data, &fstatus);
|
---|
86 | fits_unlock();
|
---|
87 | }
|
---|
88 |
|
---|
89 | fits_lock();
|
---|
90 | fits_close_file(fptr, &fstatus);
|
---|
91 | fits_report_error(stderr, fstatus);
|
---|
92 | fits_unlock();
|
---|
93 | }
|
---|
94 |
|
---|
95 | }
|
---|