#include <iostream>#include <fstream>#include <iomanip>#include <celutil/basictypes.h>#include <celutil/bytes.h>#include <celengine/astro.h>#include <celengine/stellarclass.h>Include dependency graph for startextdump.cpp:

Go to the source code of this file.
Functions | |
| bool | DumpOldStarDatabase (istream &in, ostream &out, ostream *hdOut, bool spherical) |
| bool | DumpStarDatabase (istream &in, ostream &out, ostream *hdOut) |
| int | main (int argc, char *argv[]) |
| bool | parseCommandLine (int argc, char *argv[]) |
| void | printStellarClass (uint16 sc, ostream &out) |
| static float | readFloat (istream &in) |
| static int16 | readShort (istream &in) |
| static uint8 | readUbyte (istream &in) |
| static uint32 | readUint (istream &in) |
| static uint16 | readUshort (istream &in) |
| void | Usage () |
Variables | |
| static string | hdFilename |
| static string | inputFilename |
| static string | outputFilename |
| static bool | useOldFormat = false |
| static bool | useSphericalCoords = false |
|
||||||||||||||||||||
|
Definition at line 147 of file startextdump.cpp. References distance(), astro::equatorialToCelestialCart(), LY_PER_PARSEC, printStellarClass(), readFloat(), readShort(), readUbyte(), readUint(), readUshort(), Point3< T >::x, Point3< T >::y, and Point3< T >::z. Referenced by main(). 00149 {
00150 uint32 nStarsInFile = readUint(in);
00151 if (!in.good())
00152 {
00153 cerr << "Error reading count of stars from database.\n";
00154 return false;
00155 }
00156
00157 out << nStarsInFile << '\n';
00158
00159 for (uint32 i = 0; i < nStarsInFile; i++)
00160 {
00161 if (!in.good())
00162 {
00163 cerr << "Error reading from star database at record " << i << endl;
00164 return false;
00165 }
00166
00167 uint32 catalogNum = readUint(in);
00168 uint32 HDCatalogNum = readUint(in);
00169 float RA = readFloat(in);
00170 float dec = readFloat(in);
00171 float parallax = readFloat(in);
00172 int16 appMag = readShort(in);
00173 uint16 stellarClass = readUshort(in);
00174 uint8 parallaxError = readUbyte(in);
00175
00176 // Compute distance based on parallax
00177 double distance = LY_PER_PARSEC / (parallax > 0.0 ? parallax / 1000.0 : 1e-6);
00178 out << catalogNum << ' ';
00179 out << setprecision(8);
00180
00181 if (spherical)
00182 {
00183 out << RA * 360.0 / 24.0 << ' ' << dec << ' ' << distance << ' ';
00184 out << setprecision(6);
00185 out << (float) appMag / 256.0f << ' ';
00186 }
00187 else
00188 {
00189 Point3d pos = astro::equatorialToCelestialCart((double) RA, (double) dec, distance);
00190 float absMag = (float) (appMag / 256.0 + 5 -
00191 5 * log10(distance / 3.26));
00192 out << (float) pos.x << ' ' <<
00193 (float) pos.y << ' ' <<
00194 (float) pos.z << ' ';
00195 out << setprecision(5);
00196 out << absMag << ' ';
00197 }
00198 printStellarClass(stellarClass, out);
00199 out << '\n';
00200
00201 // Dump HD catalog cross reference
00202 if (hdOut != NULL && HDCatalogNum != ~0)
00203 *hdOut << HDCatalogNum << ' ' << catalogNum << '\n';
00204 }
00205
00206 return true;
00207 }
|
|
||||||||||||||||
|
Definition at line 210 of file startextdump.cpp. References printStellarClass(), readFloat(), readShort(), readUint(), and readUshort(). Referenced by main(). 00211 {
00212 char header[8];
00213 in.read(header, sizeof header);
00214 if (strncmp(header, "CELSTARS", sizeof header))
00215 {
00216 cerr << "Missing header in star database.\n";
00217 return false;
00218 }
00219
00220 uint16 version = readUshort(in);
00221 if (version != 0x0100)
00222 {
00223 cerr << "Unsupported file version " << (version >> 8) << '.' <<
00224 (version & 0xff) << '\n';
00225 return false;
00226 }
00227
00228 uint32 nStarsInFile = readUint(in);
00229 if (!in.good())
00230 {
00231 cerr << "Error reading count of stars from database.\n";
00232 return false;
00233 }
00234
00235 out << nStarsInFile << '\n';
00236
00237 for (uint32 i = 0; i < nStarsInFile; i++)
00238 {
00239 if (!in.good())
00240 {
00241 cerr << "Error reading from star database at record " << i << endl;
00242 return false;
00243 }
00244
00245 uint32 catalogNum = readUint(in);
00246 float x = readFloat(in);
00247 float y = readFloat(in);
00248 float z = readFloat(in);
00249 int16 absMag = readShort(in);
00250 uint16 stellarClass = readUshort(in);
00251
00252 out << catalogNum << ' ';
00253 out << setprecision(7);
00254 out << x << ' ' << y << ' ' << z << ' ';
00255 out << setprecision(4);
00256 out << ((float) absMag / 256.0f) << ' ';
00257 printStellarClass(stellarClass, out);
00258 out << '\n';
00259 }
00260
00261 return true;
00262 }
|
|
||||||||||||
|
Definition at line 328 of file startextdump.cpp. References DumpOldStarDatabase(), DumpStarDatabase(), hdFilename, inputFilename, outputFilename, parseCommandLine(), Usage(), useOldFormat, and useSphericalCoords. 00329 {
00330 if (!parseCommandLine(argc, argv) || inputFilename.empty())
00331 {
00332 Usage();
00333 return 1;
00334 }
00335
00336 ifstream stardbFile(inputFilename.c_str(), ios::in | ios::binary);
00337 if (!stardbFile.good())
00338 {
00339 cerr << "Error opening star database file " << inputFilename << '\n';
00340 return 1;
00341 }
00342
00343 ofstream* hdOut = NULL;
00344 if (!hdFilename.empty())
00345 {
00346 hdOut = new ofstream(hdFilename.c_str(), ios::out);
00347 if (!hdOut->good())
00348 {
00349 cerr << "Error opening HD catalog output file " << hdFilename << '\n';
00350 return 1;
00351 }
00352 }
00353
00354 bool success;
00355 ostream* out = &cout;
00356 if (!outputFilename.empty())
00357 {
00358 out = new ofstream(outputFilename.c_str(), ios::out);
00359 if (!out->good())
00360 {
00361 cerr << "Error opening output file " << outputFilename << '\n';
00362 return 1;
00363 }
00364 }
00365
00366 if (useOldFormat)
00367 {
00368 success = DumpOldStarDatabase(stardbFile, *out, hdOut,
00369 useSphericalCoords);
00370 }
00371 else
00372 {
00373 success = DumpStarDatabase(stardbFile, *out, hdOut);
00374 }
00375
00376 return success ? 0 : 1;
00377 }
|
|
||||||||||||
|
Definition at line 265 of file startextdump.cpp. References hdFilename, inputFilename, outputFilename, useOldFormat, and useSphericalCoords. 00266 {
00267 int i = 1;
00268 int fileCount = 0;
00269
00270 while (i < argc)
00271 {
00272 if (argv[i][0] == '-')
00273 {
00274 if (!strcmp(argv[i], "--hd"))
00275 {
00276 if (i == argc - 1)
00277 {
00278 return false;
00279 }
00280 else
00281 {
00282 i++;
00283 hdFilename = string(argv[i]);
00284 }
00285 }
00286 else if (!strcmp(argv[i], "-o") || !strcmp(argv[i], "--old"))
00287 {
00288 useOldFormat = true;
00289 }
00290 else if (!strcmp(argv[i], "-s") || !strcmp(argv[i], "--spherical"))
00291 {
00292 useSphericalCoords = true;
00293 }
00294 else
00295 {
00296 cerr << "Unknown command line switch: " << argv[i] << '\n';
00297 return false;
00298 }
00299 i++;
00300 }
00301 else
00302 {
00303 if (fileCount == 0)
00304 {
00305 // input filename first
00306 inputFilename = string(argv[i]);
00307 fileCount++;
00308 }
00309 else if (fileCount == 1)
00310 {
00311 // output filename second
00312 outputFilename = string(argv[i]);
00313 fileCount++;
00314 }
00315 else
00316 {
00317 // more than two filenames on the command line is an error
00318 return false;
00319 }
00320 i++;
00321 }
00322 }
00323
00324 return true;
00325 }
|
|
||||||||||||
|
Definition at line 81 of file startextdump.cpp. Referenced by DumpOldStarDatabase(), and DumpStarDatabase(). 00082 {
00083 StellarClass::StarType st = (StellarClass::StarType) (sc >> 12);
00084
00085 if (st == StellarClass::WhiteDwarf)
00086 {
00087 out << "WD";
00088 }
00089 else if (st == StellarClass::NeutronStar)
00090 {
00091 out << "Q";
00092 }
00093 else if (st == StellarClass::BlackHole)
00094 {
00095 out << "X";
00096 }
00097 else if (st == StellarClass::NormalStar)
00098 {
00099 unsigned int spectralClass = (sc >> 8 & 0xf);
00100 unsigned int spectralSubclass = (sc >> 4 & 0xf);
00101 unsigned int luminosityClass = (sc & 0xf);
00102
00103 if (spectralClass == 12)
00104 {
00105 out << '?';
00106 }
00107 else
00108 {
00109 out << "OBAFGKMRSNWW?LTC"[spectralClass];
00110 out << "0123456789"[spectralSubclass];
00111 switch (luminosityClass)
00112 {
00113 case StellarClass::Lum_Ia0:
00114 out << "I-a0";
00115 break;
00116 case StellarClass::Lum_Ia:
00117 out << "I-a";
00118 break;
00119 case StellarClass::Lum_Ib:
00120 out << "I-b";
00121 break;
00122 case StellarClass::Lum_II:
00123 out << "II";
00124 break;
00125 case StellarClass::Lum_III:
00126 out << "III";
00127 break;
00128 case StellarClass::Lum_IV:
00129 out << "IV";
00130 break;
00131 case StellarClass::Lum_V:
00132 out << "V";
00133 break;
00134 case StellarClass::Lum_VI:
00135 out << "VI";
00136 break;
00137 }
00138 }
00139 }
00140 else
00141 {
00142 out << '?';
00143 }
00144 }
|
|
|
Definition at line 49 of file startextdump.cpp. References LE_TO_CPU_FLOAT. 00050 {
00051 float f;
00052 in.read(reinterpret_cast<char*>(&f), sizeof f);
00053 LE_TO_CPU_FLOAT(f, f);
00054 return f;
00055 }
|
|
|
Definition at line 57 of file startextdump.cpp. References LE_TO_CPU_INT16. 00058 {
00059 int16 n;
00060 in.read(reinterpret_cast<char*>(&n), sizeof n);
00061 LE_TO_CPU_INT16(n, n);
00062 return n;
00063 }
|
|
|
Definition at line 73 of file startextdump.cpp. Referenced by DumpOldStarDatabase(). 00074 {
00075 uint8 n;
00076 in.read((char*) &n, 1);
00077 return n;
00078 }
|
|
|
Definition at line 41 of file startextdump.cpp. References LE_TO_CPU_INT32. 00042 {
00043 uint32 n;
00044 in.read(reinterpret_cast<char*>(&n), sizeof n);
00045 LE_TO_CPU_INT32(n, n);
00046 return n;
00047 }
|
|
|
Definition at line 65 of file startextdump.cpp. References LE_TO_CPU_INT16. Referenced by DumpOldStarDatabase(), DumpStarDatabase(), processFaceArrayChunk(), read3DSChunk(), Read3DSFile(), readFaceArray(), readPointArray(), and readTextureCoordArray(). 00066 {
00067 uint16 n;
00068 in.read(reinterpret_cast<char*>(&n), sizeof n);
00069 LE_TO_CPU_INT16(n, n);
00070 return n;
00071 }
|
|
|
Definition at line 31 of file startextdump.cpp. 00032 {
00033 cerr << "Usage: startextdump [options] <star database file> [output file]\n";
00034 cerr << " Options:\n";
00035 cerr << " --old (or -o) : input star database is pre-2.0 format\n";
00036 cerr << " --hd : dump HD catalog cross reference\n";
00037 cerr << " --spherical (or -s) : output spherical coordinates (RA/dec/distance\n";
00038 }
|
|
|
Definition at line 26 of file startextdump.cpp. Referenced by main(), and parseCommandLine(). |
|
|
Definition at line 24 of file startextdump.cpp. |
|
|
Definition at line 25 of file startextdump.cpp. |
|
|
Definition at line 27 of file startextdump.cpp. Referenced by main(), and parseCommandLine(). |
|
|
Definition at line 28 of file startextdump.cpp. Referenced by main(), and parseCommandLine(). |
1.4.1