source: Sophya/trunk/ArchTOIPipe/Kernel/fitsringrdr.cc@ 2386

Last change on this file since 2386 was 2370, checked in by aubourg, 22 years ago

small fix

File size: 4.3 KB
Line 
1// Eric Aubourg
2// Christophe Magneville
3// Reza Ansari
4// $Id: fitsringrdr.cc,v 1.6 2003-04-24 13:29:38 aubourg Exp $
5
6#include "fitsringrdr.h"
7#include "toimanager.h"
8#include <sched.h>
9
10extern void fits_lock();
11extern void fits_unlock();
12
13FITSRingReader::FITSRingReader(string fn,int buff_sz) {
14 fname = fn;
15 allfn.push_back(fn);
16 cout<<"FITSRingReader::FITSRingReader"<<endl;
17 cout<<"FITSTOIReader::inited "<<inited<<" bsz="<<Buff_Sz<<endl;
18 name = "rdr";
19 fptr = NULL;
20 totnscount = 0;
21}
22
23FITSRingReader::~FITSRingReader() {
24}
25
26
27void FITSRingReader::setBufferSize(int buffsz)
28{
29 Buff_Sz = (buffsz>0) ? buffsz: 1024;
30 return;
31}
32
33/*
34void FITSRingReader::setNRings(long n) {
35 nRings = n;
36 }*/
37
38void FITSRingReader::openFile(string fn) {
39 cout << "(((((((((((((((((((((((((((((((((((((((((((" << endl;
40
41 fits_lock();
42 if (fptr) {
43 fits_close_file(fptr,&fstatus);
44 fptr = NULL;
45 }
46 fname = fn;
47 cout << "FITSRingReader::open FileName=" << fname << endl;
48 fstatus = 0;
49 // Open file
50 fits_open_file(&fptr,fname.c_str(),READONLY,&fstatus);
51 if (fstatus != 0) {
52 fits_report_error(stderr, fstatus);
53 fits_unlock();
54 throw IOExc("FITSRingReader::openFile() fitsio error");
55 }
56
57 // Go to first extension, which should be a BINTABLE
58
59 int simple, bitpix, naxis;
60 long naxes;
61 long pcount, gcount;
62 int extend;
63 fits_read_imghdr(fptr, 1, &simple, &bitpix,
64 &naxis, &naxes, &pcount, &gcount, &extend, &fstatus);
65
66 fits_movabs_hdu(fptr, 2, NULL, &fstatus);
67
68 fits_get_num_rows(fptr,&nSamples,&fstatus);
69
70 cout << "FITSRingReader nSamples = " << nSamples << endl;
71
72 fits_unlock();
73}
74
75void FITSRingReader::init() {
76
77 declareOutput("signal");
78 openFile(fname);
79}
80
81int FITSRingReader::calcMinOut() {
82 chkinit();
83 TOIManager* mgr = TOIManager::getManager();
84 int firstReq = mgr->getRequestedBegin();
85 return snBegin > firstReq ? snBegin : firstReq;
86}
87
88int FITSRingReader::calcMaxOut() {
89 chkinit();
90 TOIManager* mgr = TOIManager::getManager();
91 int lastReq = mgr->getRequestedEnd();
92 return snEnd < lastReq ? snEnd : lastReq;
93}
94
95
96// ajout vf 31/07/2002
97bool FITSRingReader::checkSampleLimits(long& min, long& max, int pass)
98{
99 bool sample_ok=true;
100 chkinit();
101 return TOIProcessor::checkSampleLimits(min, max, pass);
102}
103
104void FITSRingReader::calcSampleLimits(long& min, long& max)
105{
106 chkinit();
107 cout << "calc " << name << " in " << min << " - " << max << " ; " << snBegin << " - " << snEnd << endl;
108
109 min=min<snMin?snMin:min;
110 max=max>snMax?snMax:max;
111 snBegin=snMin;
112 snEnd=snMax;
113 cout << "calc " << name << " out " << min << " - " << max << " ; " << snBegin << " - " << snEnd << endl;
114 //cout << "fitstoirdr : limites temporaires calculees : " << snBegin << " , " << snEnd << endl;
115
116}
117// fin ajout vf
118
119
120
121void FITSRingReader::run() {
122 cout << "!!!!!!! RING " << endl;
123
124 fits_lock();
125 fits_movabs_hdu(fptr, 1, NULL, &fstatus);
126 char commt[200];
127 fits_read_key(fptr, TLONG, "NCIRCLES", &nRings, commt, &fstatus);
128 fits_unlock();
129
130 char xname[100],buf[100];
131 double theta,phi;
132 int anyNul;
133
134 for (int ring = 0; ring<nRings; ring++) {
135 sprintf(xname, "CRing_%d", ring);
136
137 fits_lock();
138 fits_movabs_hdu(fptr, ring+2, NULL, &fstatus);
139 strcpy(buf, "RINGDATA");
140 fits_read_key(fptr, TSTRING, "PDMTYPE", &buf, commt, &fstatus);
141 fits_read_key(fptr, TDOUBLE, "CIRTHETA", &theta, commt, &fstatus);
142 fits_read_key(fptr, TDOUBLE, "CIRPHI", &phi, commt, &fstatus);
143 fits_read_key(fptr, TDOUBLE, "CIRAPER", &aperture, commt, &fstatus);
144 fits_read_key(fptr, TLONG, "NSAMPLES", &nSamples, commt, &fstatus);
145 fits_unlock();
146 wontNeedBefore(ring*(nSamples+2));
147 cout << "!!!!!!! RING " << ring << endl;
148
149 double data;
150 fits_lock();
151 putData(0, ring*(nSamples+2)+0,theta);
152 putData(0, ring*(nSamples+2)+1,phi);
153 fits_unlock();
154 for (int i=0; i<nSamples; i++) {
155 fits_lock();
156 fits_read_col_dbl(fptr,1,i+1,1,1,0,&data,&anyNul,&fstatus);
157 putData(0, ring*(nSamples+2)+2+i,data);
158 fits_unlock();
159 }
160 }
161
162 fits_lock();
163 fits_report_error(stderr, fstatus);
164 fits_close_file(fptr,&fstatus);
165 fits_unlock();
166}
167
168
169// affichage des limites
170void FITSRingReader::printLimits()
171{
172 cout << "fitsringrdr " << name <<" : limites calculees : " << snBegin << " , " << snEnd << endl;
173}
174
Note: See TracBrowser for help on using the repository browser.