Modern ephemeris প্রথমে একটি dynamical model থেকে body-এর অবস্থান দেয়। ব্যবহারকারীর প্রয়োজন অনুযায়ী এরপর light-time, aberration, gravitational deflection, precession–nutation, Earth rotation, parallax এবং atmospheric refraction-এর মতো স্তর প্রয়োগ হতে পারে। কোন স্তর পর্যন্ত গেছেন তা না লিখলে “longitude = 120°” কথাটি অসম্পূর্ণ।
একই celestial body-এর এত position কেন?
আমরা কোনো distant body-এর বর্তমান অবস্থান সরাসরি দেখি না। আলো পৌঁছাতে সময় লাগে। Observer নিজেও স্থির নন—Earth সূর্যের চারদিকে ঘুরছে, নিজের অক্ষে ঘুরছে এবং তার rotation axis দীর্ঘ ও স্বল্পমেয়াদি পরিবর্তনের মধ্যে আছে। আলো Sun-এর gravitational field দিয়ে আসতে পারে, পরে Earth-এর atmosphere-এ বাঁকতে পারে।
এ কারণে calculation একটি transformation chain:
orbit/ephemeris state
→ geometric direction
→ light-time corrected astrometric direction
→ aberration + light deflection
→ precession/nutation reference frame
→ topocentric parallax + Earth rotation
→ atmospheric refraction
→ observed altitude/azimuth
সব application পুরো chain ব্যবহার করে না। একটি Panchanga longitude, telescope pointing coordinate এবং চোখে দেখা horizon altitude—এই তিনটির লক্ষ্য আলাদা।
মূল terminology: নাম কাছাকাছি, অর্থ আলাদা
| Position | প্রধান অর্থ | কী অন্তর্ভুক্ত/বাদ? |
|---|---|---|
| Geometric | একই coordinate time-এ observer ও body-এর সরল vector | Light-time, aberration ও deflection বাদ |
| Astrometric | Light emission-এর travel time বিবেচিত direction | Light-time আছে; aberration ও light deflection সাধারণত বাদ |
| Proper | Geocenter থেকে object বাস্তবে যেদিকে দেখা যেত | Light-time, deflection ও annual aberration প্রযোজ্য |
| Apparent place | Proper place, true equator ও equinox of date-এ প্রকাশিত | Precession–nutation frame প্রয়োগিত |
| Topocentric | Earth surface-এর নির্দিষ্ট observer থেকে direction | Diurnal parallax ও observer geometry যুক্ত |
| Observed | বাস্তব/মডেল atmosphere-সহ local horizon direction | Topocentric geometry, Earth rotation ও refraction |
USNO Astronomical Almanac glossary অনুযায়ী astrometric position হলো geometric position-এ light-time displacement প্রয়োগের ফল, যেখানে aberration ও light deflection নেই। Apparent place হলো proper place-কে true equator ও equinox of date-এর reference-এ প্রকাশ করা position। এই precise সংজ্ঞা everyday “দেখতে যেমন” অর্থের চেয়ে সংকীর্ণ।
Light-time: আমরা body-কে অতীতের অবস্থায় দেখি
Light-time হলো celestial body থেকে Earth-এ আলো আসতে যত সময় লাগে। Object এই interval-এ নিজের orbit-এ এগিয়ে যায়। তাই observation time-এর instantaneous geometric position এবং আলো ছাড়ার সময়ের direction এক নয়। এই difference হলো light-time displacement।
τ ≈ distance ÷ speed of light
emission time = observation time − τ
τ-কে updated distance দিয়ে iteratively refine করা যায়
Sun-এর আলো Earth-এ পৌঁছাতে প্রায় আট মিনিট লাগে; outer planet-এর ক্ষেত্রে সময় আরও বেশি। Moon-এর light-time ছোট, কিন্তু high-precision calculation-এ শূন্য নয়। Astrometric direction সাধারণত body-এর retarded বা emission-time position ব্যবহার করে।
কেন position solve iterative হতে পারে?
Distance জানলে light-time জানা যায়, কিন্তু body-এর emission-time position বদলালে distance-ও সামান্য বদলে যায়। তাই modern algorithm কয়েকবার estimate update করতে পারে। Ephemeris library এই কাজ করে দিলে application code-এ আবার নিজে light-time subtract করলে correction double-applied হবে।
Aberration: observer-এর গতির কারণে direction shift
Aberration হলো observer-এর motion-এর ফলে incoming light-এর apparent direction পরিবর্তন। USNO এটিকে observer-এর গতির কারণে geometric position থেকে relativistic apparent angular displacement হিসেবে সংজ্ঞায়িত করে।
Annual aberration
Earth সূর্যের চারদিকে orbit করার কারণে annual aberration হয়। Observer velocity বছরের সঙ্গে direction বদলায়। এটি কোনো body-এর orbit correction নয়; আলো গ্রহণকারী frame-এর motion correction।
Diurnal aberration
Earth-এর rotation-এ surface observer-এর দৈনিক velocity থেকে diurnal aberration হয়। Geocenter-এর observer-এর এই surface rotational velocity নেই; তাই geocentric apparent place এবং topocentric observed place-এর transformation chain এক নয়।
Planetary aberration
Solar-system body-এর apparent displacement-এ observer aberration ও object-এর light-time motion একত্রে দেখা যায়। পুরোনো গ্রন্থে “planetary aberration” কথাটি এই combined effect বোঝাতে পারে। তাই source-এর terminology যাচাই জরুরি।
Gravitational deflection of light
Massive body-এর gravitational field দিয়ে আলো যাওয়ার সময় ray-এর direction পরিবর্তিত হয়। Sun-এর কাছাকাছি angular separation-এ solar gravitational deflection সবচেয়ে গুরুত্বপূর্ণ। USNO glossary জানায়, apparent-place transformation-এ light deflection অন্তর্ভুক্ত হয়; Sun-এর limb-এর কাছে shift প্রায় 1.75 arcsecond পর্যন্ত হতে পারে।
সাধারণ বাংলা তারিখে এই correction-এর effect প্রায়ই day-level result বদলায় না। কিন্তু research comparison, occultation, close solar conjunction বা arcsecond-level regression-এ এটি বাদ দিলে mismatch দেখা দিতে পারে।
Precession, nutation এবং coordinate frame
Body-এর physical direction না বদলালেও coordinate axes বদলালে longitude, right ascension ও declination বদলতে পারে।
Precession
Earth-এর rotation axis এবং equatorial frame দীর্ঘমেয়াদে ধীরে পরিবর্তিত হয়। J2000 catalog coordinate-কে date-এর equator/equinox-এ আনতে precession transformation লাগে।
Nutation
Nutation হলো precession-এর ওপর অপেক্ষাকৃত স্বল্পমেয়াদি periodic পরিবর্তন। Mean equator/equinox-এ nutation নেই; true equator/equinox of date-এ nutation প্রয়োগিত। ফলে SEFLG_NONUT শুধু একটি ছোট planet correction বন্ধ করে না—coordinate reference frame-কে mean frame-এ রাখে।
| Frame | Nutation | সাধারণ ব্যবহার |
|---|---|---|
| J2000/ICRS-like fixed frame | Date-frame nutation নয় | Catalog ও ephemeris comparison |
| Mean equator/equinox of date | বাদ | Mean coordinates/sidereal-time workflow |
| True equator/equinox of date | অন্তর্ভুক্ত | Apparent place ও apparent sidereal time |
Apparent right ascension-এর সঙ্গে Greenwich Apparent Sidereal Time এবং mean right ascension-এর সঙ্গে compatible mean sidereal-time path ব্যবহার করতে হবে। Mean এবং apparent frame mix করলে hour angle ও lagna-তে systematic error ঢুকতে পারে।
Observed position: atmosphere পর্যন্ত পূর্ণ local chain
Geocentric apparent place এখনও Earth-এর center-ভিত্তিক। নির্দিষ্ট location-এর observed altitude/azimuth পেতে আরও দরকার:
- Observer latitude, longitude ও elevation;
- Earth rotation—UT1 বা compatible Earth Rotation Angle;
- Polar motion, accuracy requirement অনুযায়ী;
- Topocentric parallax;
- Diurnal aberration;
- Atmospheric refraction;
- Local horizon এবং body limb convention।
Refraction
Atmosphere incoming ray বাঁকিয়ে body-কে geometric direction-এর তুলনায় সাধারণত উঁচু দেখায়, বিশেষত horizon-এর কাছে। Refraction model pressure, temperature, humidity, wavelength এবং atmosphere-এর vertical structure-এর ওপর নির্ভর করতে পারে।
Observed coordinate তাই exact weather measurement ছাড়া model-dependent। Standard pressure/temperature দিয়ে গণিতগত sunrise reproducible হতে পারে, কিন্তু মেঘ, inversion layer বা unusual atmosphere-এর বাস্তব observation নিশ্চয়তা দেয় না।
Refraction কখন প্রয়োগ করবেন না?
- Geocentric ecliptic longitude;
- তিথি, করণ, নক্ষত্র ও যোগের core angles;
- Planetary ephemeris comparison;
- Atmosphere-বহির্ভূত geometric eclipse model;
- Already refracted observed coordinate-এ দ্বিতীয়বার।
Panchanga calculation-এ কোন profile?
আপনার প্রকল্পে দুটি engine-layer আছে: ঐতিহ্যগত Surya Siddhanta calculation এবং আধুনিক Swiss Ephemeris support। তাদের terminology এক করে ফেললে ইতিহাস ও আধুনিক astronomy—দুটিই অস্পষ্ট হয়ে যায়।
| Calculation | প্রস্তাবিত profile | বিশেষ সতর্কতা |
|---|---|---|
| Surya Siddhanta তিথি/নক্ষত্র | নিজস্ব declared traditional true/manda-sphuta model | Modern apparent flags গোপনে মেশাবেন না |
| Swiss-based তিথি/যোগ comparison | Consistent geocentric nirayana Sun–Moon profile | Sun ও Moon-এ একই correction family |
| সংক্রান্তি | Declared solar-longitude profile | Traditional Fit correction আলাদা layer |
| গ্রহস্ফুট | Report-এ mean/true/apparent স্পষ্ট করুন | Printed Panjika-র method মিলিয়ে নিন |
| Sunrise/sunset | Named observed বা traditional horizon profile | Center/limb/refraction flags প্রকাশ করুন |
| Moonrise/moonset | Topocentric apparent + declared limb/refraction | Lunar parallax অপরিহার্য |
| Lagna | Consistent apparent বা mean sidereal chain | RA/frame/sidereal time mix নয় |
| Local eclipse | Topocentric apparent geometry | Contact বনাম visual horizon আলাদা করুন |
তিথিতে relative angle বলে correction বাতিল হয়ে যায়?
Sun ও Moon-এর longitude difference নেওয়ায় কিছু common frame rotation cancel হতে পারে, কিন্তু সব correction cancel হয় না। Light-time, aberration এবং object-specific geometry Sun ও Moon-এ সমান নয়। তাই এক body apparent এবং অন্য body geometric নিলে nonstandard hybrid elongation তৈরি হবে।
valid: elongation = Moon(profile A) − Sun(profile A)
unsafe: elongation = Moon(profile A) − Sun(profile B)
Sankranti Star Correction-এর সঙ্গে সম্পর্ক
আপনার Modern Fit-এর Sankranti Star Correction একটি project-specific traditional calibration। এটি modern aberration বা nutation correction নয়। তাই metadata-তে আলাদা fields রাখুন:
astronomical_position_profile;traditional_star_correction;modern_fit_cutoff;bengali_date_rule;calculation_engine_version।
এতে বোঝা যাবে কোনো সময়ের shift modern apparent-coordinate physics থেকে এসেছে, না printed Panjika-র সঙ্গে declared calibration থেকে।
Swiss Ephemeris flags: নামের অর্থ ঠিকভাবে পড়ুন
Swiss Ephemeris-এর documented default behavior সাধারণ astrological ephemeris-এর মতো geocentric ecliptic apparent position, true equinox of date-এ। গুরুত্বপূর্ণ flags:
| Flag | প্রভাব | ভুল ব্যাখ্যা এড়ান |
|---|---|---|
SEFLG_TRUEPOS |
True/geometric position; light-time accounting বাদ | এটি “সবচেয়ে বাস্তব observed position” নয় |
SEFLG_NONUT |
Nutation বাদ; mean equinox of date | True equinox চাইলে এটি দেবেন না |
SEFLG_NOABERR |
Annual aberration বাদ | Light-time স্বয়ংক্রিয়ভাবে বাদ বোঝায় না |
SEFLG_NOGDEFL |
Gravitational light deflection বাদ | Nutation বা refraction-এর সঙ্গে সম্পর্ক নেই |
SEFLG_J2000 |
J2000 reference equinox/frame output | Date-of-equinox output নয় |
SEFLG_TOPOCTR |
Observer-based topocentric position | আগে observer set করতে হয় |
SEFLG_SIDEREAL |
Selected sidereal mode/ayanamsa প্রয়োগ | Topocentric বা geometric status নির্ধারণ করে না |
// Example: explicit geocentric apparent sidereal profile
int flags = SEFLG_SWIEPH
| SEFLG_SPEED
| SEFLG_SIDEREAL;
// Example: explicit geometric/true profile
int geometricFlags = SEFLG_SWIEPH
| SEFLG_SPEED
| SEFLG_TRUEPOS
| SEFLG_NONUT;
দ্বিতীয় profile-কে “more accurate” বলা ঠিক নয়; এটি অন্য quantity চায়। Accuracy মানে intended definition-এর সঙ্গে কতটা সঠিকভাবে মেলে।
Requested flags বনাম returned flags
swe_calc return value-তে বাস্তবে ব্যবহৃত flags পাওয়া যায়। Ephemeris file না পাওয়া, incompatible combination বা fallback হলে returned value requested flags-এর মতো নাও হতে পারে। Production trace-এ দুটিই রাখুন।
C#-এ correction profile type-safe করুন
[Flags]
public enum PositionCorrection
{
None = 0,
LightTime = 1,
AnnualAberration = 2,
GravitationalDeflection = 4,
Nutation = 8,
TopocentricParallax = 16,
DiurnalAberration = 32,
AtmosphericRefraction = 64
}
public enum EquinoxFrame
{
J2000,
MeanOfDate,
TrueOfDate
}
public sealed class PositionProfile
{
public string Id { get; set; }
public PositionOrigin Origin { get; set; }
public EquinoxFrame Frame { get; set; }
public PositionCorrection Corrections { get; set; }
public bool Sidereal { get; set; }
public string AyanamsaId { get; set; }
}
Named profiles
static readonly PositionProfile PanchangaApparentNirayana =
new PositionProfile
{
Id = "panchanga-apparent-nirayana-v1",
Origin = PositionOrigin.Geocentric,
Frame = EquinoxFrame.TrueOfDate,
Corrections = PositionCorrection.LightTime
| PositionCorrection.AnnualAberration
| PositionCorrection.GravitationalDeflection
| PositionCorrection.Nutation,
Sidereal = true,
AyanamsaId = "DeclaredProjectAyanamsa"
};
static readonly PositionProfile ObservedHorizon =
new PositionProfile
{
Id = "observed-horizon-standard-v1",
Origin = PositionOrigin.Topocentric,
Frame = EquinoxFrame.TrueOfDate,
Corrections = PositionCorrection.LightTime
| PositionCorrection.AnnualAberration
| PositionCorrection.GravitationalDeflection
| PositionCorrection.Nutation
| PositionCorrection.TopocentricParallax
| PositionCorrection.DiurnalAberration
| PositionCorrection.AtmosphericRefraction
};
এই code conceptual। Swiss Ephemeris-এর exact internal correction behavior flag-combination অনুযায়ী map করতে হবে। নিজের enum দেখে library যা করেনি তা “applied” বলে report করবেন না।
Compatible-pair guard
static double Elongation(
CalculatedPosition moon,
CalculatedPosition sun)
{
if (moon.ProfileId != sun.ProfileId)
throw new InvalidOperationException(
"Sun and Moon must use the same position profile.");
if (moon.UtcInstant != sun.UtcInstant)
throw new InvalidOperationException(
"Sun and Moon must be evaluated at the same instant.");
return NormalizeDegrees(moon.LongitudeDeg - sun.LongitudeDeg);
}
Trace record
public sealed class PositionTrace
{
public string ProfileId { get; set; }
public double JulianDayUt { get; set; }
public double JulianDayTt { get; set; }
public string RequestedFlags { get; set; }
public string ReturnedFlags { get; set; }
public string EphemerisSource { get; set; }
public string EngineVersion { get; set; }
public string AyanamsaId { get; set; }
public string ObserverId { get; set; }
public string RefractionProfileId { get; set; }
}
Validation checklist
- Geometric position light-time বাদ দিয়ে test করা হয়েছে;
- Astrometric position light-time অন্তর্ভুক্ত করে;
- Astrometric profile aberration বাদ রাখে;
- Apparent profile annual aberration অন্তর্ভুক্ত করে;
- Apparent profile gravitational deflection policy স্পষ্ট;
- Mean-of-date ও true-of-date পৃথক থাকে;
- Nutation flag frame metadata-এর সঙ্গে মেলে;
- J2000 output date-of-equinox label পায় না;
- Precession double-applied হয় না;
- Nutation double-applied হয় না;
- Light-time application একবারই হয়;
- Library-computed aberration আবার application code যোগ করে না;
- Refraction geocentric longitude-এ প্রয়োগ হয় না;
- Topocentric parallax observed profile-এ থাকে;
- Diurnal aberration geocentric profile-এ ভুলে ঢোকে না;
- Observer coordinates শুধুমাত্র applicable profile-এ লাগে;
- Pressure unit hPa/mbar হিসেবে যাচাই করা হয়;
- Temperature Celsius হিসেবে যাচাই করা হয়;
- Default atmosphere explicitly versioned;
- No-refraction profile আলাদা ID পায়;
- Sun ও Moon tithi calculation-এ একই profile ব্যবহার করে;
- Sun ও Moon একই instant-এ গণিত হয়;
- Raw longitude দিয়ে elongation solve হয়;
- Rounded longitude boundary calculation-এ যায় না;
- Tithi boundary-এর দুই পাশে regression test আছে;
- Nakshatra boundary-এর দুই পাশে test আছে;
- Sankranti root-solver profile স্থির রাখে;
- Sankranti Star Correction আলাদা metadata field;
- Traditional Fit cutoff astronomical flag বদলায় না;
- Surya Siddhanta result modern apparent নামে label হয় না;
- Modern Swiss result traditional sphuta নামে label হয় না;
- Mean planet report ও apparent planet report পৃথক;
- Lagna chain mean/apparent sidereal time consistent;
- Equation of equinoxes accidental double-use হয় না;
- Rise/set limb ও refraction profile trace-এ থাকে;
- Moonrise-এ lunar parallax সক্রিয় থাকে;
- Eclipse local circumstances topocentric;
- Eclipse global circumstances profile documented;
- Requested Swiss flags সংরক্ষিত হয়;
- Returned Swiss flags যাচাই ও সংরক্ষিত হয়;
- Ephemeris fallback warning প্রকাশিত হয়;
- Ephemeris file/version audit trace-এ থাকে;
- UT ও TT fields গুলিয়ে যায় না;
- ΔT একবারই প্রয়োগিত হয়;
- Historic ΔT uncertainty report করা হয়;
- Same profile cache key-তে profile version থাকে;
- Observer-dependent cache key-তে location থাকে;
- API result-এ origin ও frame থাকে;
- XML export correction profile সংরক্ষণ করে;
- Printed report calculation method স্পষ্ট দেখায়।
সাধারণ ভুল ও সমাধান
| ভুল | ফল | সমাধান |
|---|---|---|
TRUEPOS মানেই observed সত্য ধরে নেওয়া |
Light-time বাদ পড়ে | এটিকে geometric profile নামে রাখুন |
| Apparent ও topocentric সমার্থক ধরা | Observer correction অস্পষ্ট | Origin ও correction chain পৃথক fields |
| এক body apparent, অন্যটি geometric | Nonstandard tithi/যোগ angle | Profile compatibility guard |
NONUT দিয়ে true-of-date label |
Reference-frame mismatch | Mean-of-date label ও tests |
| Refraction planet longitude-এ যোগ | ভৌত অর্থহীন coordinate | শুধু observed horizon layer |
| Library correction নিজে আবার যোগ | Double correction | Raw flags ও documentation audit |
| Traditional calibration-কে aberration বলা | Research provenance হারায় | Star Correction আলাদা layer |
| শুধু formatted degree সংরক্ষণ | Boundary debugging অসম্ভব | Raw value + full profile trace |
উপসংহার
একটি celestial position হলো একটি transformation-এর ফল, নিছক longitude নয়। Geometric position object-এর simultaneous vector দেখায়; astrometric position light-time বিবেচনা করে; apparent place observer motion, light deflection ও true date-frame-এর সঙ্গে সম্পর্কিত; observed position local observer ও atmosphere পর্যন্ত পৌঁছায়।
Panchanga calculation-এ সবসময় সবচেয়ে বেশি correction ব্যবহার করাই সঠিক নয়। সঠিক হলো যে quantity নির্ধারণ করছেন তার documented definition অনুসরণ করা। তিথি ও যোগে Sun–Moon-এর compatible geocentric profile, sunrise/moonrise-এ declared horizon profile এবং lagna-তে compatible sidereal-time/frame chain দরকার।
আপনার Traditional Fit ও Modern Fit-কে modern astrometric correction থেকে পৃথক named layer হিসেবে রাখলে printed Panjika calibration, historical reconstruction এবং modern observation—তিনটি ফলই স্বচ্ছ ও পুনরুৎপাদনযোগ্য থাকবে।
তথ্যসূত্র ও আরও পাঠ
- U.S. Naval Observatory—Astronomical Almanac Glossary; geometric, astrometric, proper ও apparent position, light-time, aberration ও deflection-এর সংজ্ঞা।
- U.S. Naval Observatory—NOVAS; precession, nutation, aberration, parallax ও apparent/topocentric/astrometric transformation।
- IAU SOFA—About; IAU-approved astronomical computing models ও software।
- IAU SOFA—Astrometry Cookbooks; catalog data থেকে observed direction পর্যন্ত transformation chain।
- Swiss Ephemeris Programmer’s Documentation; default apparent position এবং
TRUEPOS,NONUT,NOABERR,NOGDEFLflags।
মন্তব্য, আলোচনা ও প্রশ্ন