-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathProperHipsClient.h
More file actions
118 lines (98 loc) · 3.51 KB
/
ProperHipsClient.h
File metadata and controls
118 lines (98 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// ProperHipsClient.h - Using real HEALPix library for accurate pixel calculations
#ifndef PROPERHIPSCLIENT_H
#define PROPERHIPSCLIENT_H
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QTimer>
#include <QDateTime>
#include <QList>
#include <QStringList>
#include <QMap>
#include <QMutex>
// Real HEALPix includes
#include "healpix_base.h"
#include "pointing.h"
struct HipsSurveyInfo {
QString name;
QString baseUrl;
QString format;
QString description;
bool available;
int maxOrder;
QStringList regions;
};
struct SkyPosition {
double ra_deg;
double dec_deg;
QString name;
QString description;
// Convert to HEALPix pointing
pointing toPointing() const {
double theta = (90.0 - dec_deg) * M_PI / 180.0; // colatitude
double phi = ra_deg * M_PI / 180.0; // longitude
return pointing(theta, phi);
}
};
struct TileResult {
QString survey;
QString position;
bool success;
int httpStatus;
qint64 downloadTime;
qint64 fileSize;
QString url;
long long healpixPixel;
int order;
QDateTime timestamp;
};
class ProperHipsClient : public QObject {
Q_OBJECT
public:
explicit ProperHipsClient(QObject *parent = nullptr);
// Main testing interface
void testAllSurveys();
void testSurveyAtPosition(const QString& surveyName, const SkyPosition& position);
void testPixelCalculation();
// Production interface for telescope simulator
QStringList getWorkingSurveys() const;
QString getBestSurveyForPosition(const SkyPosition& position) const;
QString buildTileUrl(const QString& surveyName, const SkyPosition& position, int order = 6) const;
// Results access
QList<TileResult> getResults() const { return m_results; }
void saveResults(const QString& filename) const;
void printSummary() const;
long long calculateHealPixel(const SkyPosition& position, int order) const;
QList<long long> getNeighboringPixels(long long centerPixel, int order) const;
QMap<QString, long long> getDirectionalNeighbors(long long centerPixel, int order) const;
QList<QList<long long>> createProper3x3Grid(long long centerPixel, int order) const;
private slots:
void onReplyFinished();
signals:
void testingComplete();
private:
QNetworkAccessManager* m_networkManager;
QMap<QString, HipsSurveyInfo> m_surveys;
QList<SkyPosition> m_testPositions;
QList<TileResult> m_results;
QTimer* m_testTimer;
// Test state
int m_currentSurveyIndex;
int m_currentPositionIndex;
QDateTime m_requestStartTime;
void setupSurveys();
void setupTestPositions();
void startNextTest();
void moveToNextTest();
void finishTesting();
// HEALPix utilities
long long calculateSimplePixel(double ra_deg, double dec_deg, int order) const; // For comparison
QList<long long> calculateTileGrid(const SkyPosition& center, int order, int gridSize = 4) const;
// URL building for different survey types
QString buildDSSUrl(const SkyPosition& position, int order, const QString& survey) const;
QString build2MASSUrl(const SkyPosition& position, int order, const QString& survey) const;
QString buildRubinUrl(const SkyPosition& position, int order, const QString& survey) const;
QString buildGenericHipsUrl(const QString& baseUrl, const QString& format,
const SkyPosition& position, int order) const;
};
#endif // PROPERHIPSCLIENT_H