Commit f6bbdbae authored by Zhang Xin's avatar Zhang Xin
Browse files

optimize the progress speed use pre-process

parent 157f1d5c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -121,7 +121,7 @@ def locateSat(time=2459766.0, OrbitData=None, startId=0, orbDataLen=-1):


@jit
def locateSat1(time=2459766.0, OrbitData=None, startId=0, orbDataLen=-1):
def locateSat1(time=2459766.0, OrbitData=None, startId=0, orbDataLen=-1, calVelFlag=True):

    if orbDataLen <= 0 and OrbitData is not None:
        orbDataLen = len(OrbitData)
@@ -139,7 +139,9 @@ def locateSat1(time=2459766.0, OrbitData=None, startId=0, orbDataLen=-1):

            t_ratio = (time - t1) / (t2 - t1)
            satPos = slerp(OrbitData[i, 1:4], OrbitData[i + 1, 1:4], t_ratio)
            satVel = slerp(OrbitData[i, 4:7], OrbitData[i + 1, 4:7], t_ratio)
            if calVelFlag:
                satVel = slerp(OrbitData[i, 4:7],
                               OrbitData[i + 1, 4:7], t_ratio)

            nextSid = i
            break
+85 −25
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
Author: Zhang Xin zhangx@bao.ac.cn
Date: 2024-09-19 15:53:27
LastEditors: Zhang Xin zhangx@bao.ac.cn
LastEditTime: 2024-11-15 15:46:30
LastEditTime: 2024-12-10 21:31:50
FilePath: /CSST_Survey/survey_sim/strategies/SurveySim_MSC.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
@@ -31,6 +31,7 @@ import time
import os
import pickle

from scipy import interpolate
import numpy as np
import jax.numpy as jnp

@@ -111,17 +112,40 @@ class SurveySim(object):
        jump_time = jump_time
        pNum = 0
        for start_end_t in self.betaCons.MSC_time:
            sec_times = np.arange(
                start_end_t[0]-0.001, start_end_t[1]+0.001, 5/86400.)
            len_sat_array = len(sec_times)
            sat_info_sec = np.zeros([len_sat_array, 5])
            for tmp_i, temp_t in enumerate(sec_times):
                sat_info_sec[tmp_i, 0:3], _, orbitDataId = locateSat1(
                    time=temp_t, OrbitData=self.orbitDat, startId=orbitDataId, calVelFlag=False
                )
                sat_info_sec[tmp_i, 3:] = _utils.getSatSubpoint(
                    sat_info_sec[tmp_i, 0:3], temp_t)
            orbitDataId = 0
            sat_xi = interpolate.interp1d(
                sec_times, sat_info_sec[:, 0], kind="linear")
            sat_yi = interpolate.interp1d(
                sec_times, sat_info_sec[:, 1], kind="linear")
            sat_zi = interpolate.interp1d(
                sec_times, sat_info_sec[:, 2], kind="linear")

            subPoint_xi = interpolate.interp1d(
                sec_times, sat_info_sec[:, 3], kind="linear")
            subPoint_yi = interpolate.interp1d(
                sec_times, sat_info_sec[:, 4], kind="linear")

            curTime = start_end_t[0]
            while curTime <= start_end_t[1]:
                print("Time:", curTime)
                curTime, obsTime, curPSky, sun, moon, sat, satV, orbitDataId, _ = self.searchOnePointing(
                    curTime=curTime, curPSky=curPSky, orbitDataId=orbitDataId, jump_time=jump_time, endTime=start_end_t[1])
                    curTime=curTime, curPSky=curPSky, orbitDataId=orbitDataId, jump_time=jump_time, endTime=start_end_t[1], satOrbit_interp=[sat_xi, sat_yi, sat_zi], subPoint_interp=[subPoint_xi, subPoint_yi])
                if sun is not None:
                    print("obsTime-------------------:", obsTime)
                    self.outInfo.outInfo_add_obj(jdTime=obsTime, p_lon_ecl=curPSky.ecl_lon, p_lat_ecl=curPSky.ecl_lat, p_ra=curPSky.ra,
                                                 p_dec=curPSky.dec, sun=sun, moon=moon, sat=sat, sat_vel=satV, isInDeep=curPSky.inDeepFlag)
                    pNum = pNum + 1
                if pNum > 1:
                if pNum > 20:
                    break

    # 搜索一个是否满足的节点
@@ -136,6 +160,8 @@ class SurveySim(object):
        orbitDataId=0,
        jump_time=60,
        endTime=2460766.0,
        satOrbit_interp=None,
        subPoint_interp=None
    ):

        final_min_value = MAX_VALUE
@@ -152,9 +178,12 @@ class SurveySim(object):
                curTime=curTime, orbitDat=self.orbitDat, ephlib=self.eph
            )

        sat, satVel, orbitDataId = locateSat1(
            time=curTime, OrbitData=self.orbitDat, startId=orbitDataId
        )
        # sat, satVel, orbitDataId = locateSat1(
        #     time=curTime, OrbitData=self.orbitDat, startId=orbitDataId
        # )
        sat = np.array([satOrbit_interp[0](curTime), satOrbit_interp[1](
            curTime), satOrbit_interp[2](curTime)])
        # print(sat-sat_i)
        # sat1, satVel1, orbitDataId = locateSat1(
        #     time=curTime, OrbitData=self.orbitDat, startId=orbitDataId-10
        # )
@@ -171,14 +200,20 @@ class SurveySim(object):
            lastPointing = [curPSky.ecl_lon, curPSky.ecl_lat]
            lastPointingCar = [curPSky.x, curPSky.y, curPSky.z]

        underStarPoint = _utils.getSatSubpoint(sat, curTime)
        # underStarPoint = _utils.getSatSubpoint(sat, curTime)
        underStarPoint = np.array([subPoint_interp[0](
            curTime), subPoint_interp[1](curTime)])
        # print(underStarPoint - underStarPoint1)
        battery_q = self.bettery_level
        while saa_constraint.IsInSAA(uderStarPoint=underStarPoint):
            lastSAATime = curTime
            curTime = curTime + jump_time / 86400.0
            sat, satVel, orbitDataId = locateSat1(
                time=curTime, OrbitData=self.orbitDat, startId=orbitDataId
            )
            # sat, satVel, orbitDataId = locateSat1(
            #     time=curTime, OrbitData=self.orbitDat, startId=orbitDataId
            # )
            sat = np.array([satOrbit_interp[0](curTime), satOrbit_interp[1](
                curTime), satOrbit_interp[2](curTime)])
            # print(sat-sat_i)
            sun_front_time = 0  # 1 orbit, 一轨结束前剩下的阳照时间(单位是天)
            sun_back_time = 0  # 1 orbit, 一轨结束前剩下的阴影时间(单位是天)

@@ -225,7 +260,10 @@ class SurveySim(object):
                self.shadowTime = obscure_constraint.aquireShadowTime(
                    curTime=curTime, orbitDat=self.orbitDat, ephlib=self.eph
                )
            underStarPoint = _utils.getSatSubpoint(sat, curTime)
            # underStarPoint = _utils.getSatSubpoint(sat, curTime)
            underStarPoint = np.array([subPoint_interp[0](
                curTime), subPoint_interp[1](curTime)])
        # print(underStarPoint - underStarPoint1)

        if sat[0] == 0.0 and sat[1] == 0.0 and sat[2] == 0.0:
            # outputresult[0] = -1;
@@ -327,9 +365,12 @@ class SurveySim(object):
                    self.local_fail_out[0] += 1.0
                    continue

                ttsat, _, _ = locateSat1(
                    time=timeAfterTrans, OrbitData=self.orbitDat, startId=orbitDataId
                )
                # ttsat, _, _ = locateSat1(
                #     time=timeAfterTrans, OrbitData=self.orbitDat, startId=orbitDataId
                # )
                ttsat = np.array([satOrbit_interp[0](timeAfterTrans), satOrbit_interp[1](
                    timeAfterTrans), satOrbit_interp[2](timeAfterTrans)])
                # print(ttsat-ttsat_i)
                # sat_eq_coord_tt = csstSkyCoordGeocentricEquator(
                #     coorEquator=ttsat, curJdTime=timeAfterTrans
                # )
@@ -385,16 +426,22 @@ class SurveySim(object):
                    self.local_fail_out[6] += 1.0
                    continue

                ttSatE, _, _ = locateSat1(
                    time=exEndTime, OrbitData=self.orbitDat, startId=orbitDataId
                )
                # ttSatE, _, _ = locateSat1(
                #     time=exEndTime, OrbitData=self.orbitDat, startId=orbitDataId
                # )
                ttSatE = np.array([satOrbit_interp[0](exEndTime), satOrbit_interp[1](
                    exEndTime), satOrbit_interp[2](exEndTime)])
                # print(ttSatE-ttSatE_i)
                # sat_eq_coord_tt_end = csstSkyCoordGeocentricEquator(
                #     coorEquator=ttSatE, curJdTime=exEndTime
                # )
                # sat_ecl_car_tt_end, _, _ = (
                #     sat_eq_coord_tt_end.getGeocentricTrueEcliptic()
                # )
                unSPoint = _utils.getSatSubpoint(satPos=ttSatE, t=exEndTime)
                # unSPoint = _utils.getSatSubpoint(satPos=ttSatE, t=exEndTime)
                unSPoint = np.array([subPoint_interp[0](exEndTime), subPoint_interp[1](
                    exEndTime)])
                # print(unSPoint - unSPoint1)
                if saa_constraint.IsInSAA(uderStarPoint=unSPoint) == 1:
                    self.local_fail_out[3] += 1.0
                    continue
@@ -527,9 +574,12 @@ class SurveySim(object):
                    self.local_fail_out[0] += 1.0
                    continue

                ttsat, _, _ = locateSat1(
                    time=timeAfterTrans, OrbitData=self.orbitDat, startId=orbitDataId
                )
                # ttsat, _, _ = locateSat1(
                #     time=timeAfterTrans, OrbitData=self.orbitDat, startId=orbitDataId
                # )
                ttsat = np.array([satOrbit_interp[0](timeAfterTrans), satOrbit_interp[1](
                    timeAfterTrans), satOrbit_interp[2](timeAfterTrans)])
                # print(ttsat-ttsat_i)
                # sat_eq_coord_tt = csstSkyCoordGeocentricEquator(
                #     coorEquator=ttsat, curJdTime=timeAfterTrans
                # )
@@ -581,16 +631,22 @@ class SurveySim(object):
                    self.local_fail_out[5] += 1.0
                    continue

                ttSatE, _, _ = locateSat1(
                    time=exEndTime, OrbitData=self.orbitDat, startId=orbitDataId
                )
                # ttSatE, _, _ = locateSat1(
                #     time=exEndTime, OrbitData=self.orbitDat, startId=orbitDataId
                # )
                ttSatE = np.array([satOrbit_interp[0](exEndTime), satOrbit_interp[1](
                    exEndTime), satOrbit_interp[2](exEndTime)])
                # print(ttSatE-ttSatE_i)
                # sat_eq_coord_tt_end = csstSkyCoordGeocentricEquator(
                #     coorEquator=ttSatE, curJdTime=exEndTime
                # )
                # sat_ecl_car_tt_end, _, _ = (
                #     sat_eq_coord_tt_end.getGeocentricTrueEcliptic()
                # )
                unSPoint = _utils.getSatSubpoint(satPos=ttSatE, t=exEndTime)
                # unSPoint = _utils.getSatSubpoint(satPos=ttSatE, t=exEndTime)
                unSPoint = np.array([subPoint_interp[0](exEndTime), subPoint_interp[1](
                    exEndTime)])
                # print(unSPoint - unSPoint1)
                if saa_constraint.IsInSAA(uderStarPoint=unSPoint) == 1:
                    self.local_fail_out[3] += 1.0
                    continue
@@ -1056,4 +1112,8 @@ class SurveySim(object):

ss = SurveySim(time_start=2459768, time_end=2459775.0,
               bettery_level=97200., cmgCons=None, dir="/Users/zhangxin/Work/SurveyPlan/CSST_Survey", logName="MSC_survey_20241108_log", outFn="MSC_survey_20241108_log_outInfo")

t1 = time.time()
tt = ss.do_observe_plan(jump_time=300)
t2 = time.time()
print("ust time %f minute" % ((t1-t2)/60))
+20 −26
Original line number Diff line number Diff line
@@ -28,7 +28,9 @@ ephLib = importEphemerisLib()
sCons = surveyConstraint()

rdTime = 2459989.5208
orbitDat = loadSatOrbitDat(datDir=pkg_resources.files("survey_sim.satOrbit.data").joinpath("orbit20160925/"))
orbitDat = loadSatOrbitDat(datDir=pkg_resources.files(
    "survey_sim.satOrbit.data").joinpath("orbit20160925/"))


def testLoadSatSunMoon():
    rdTime = 2459989.5208
@@ -40,7 +42,8 @@ def testLoadSatSunMoon():
    satPos, satVel, _ = locateSat(time=rdTime, OrbitData=orbitDat)
    print("sat position:", satPos)

testLoadSatSunMoon()
# testLoadSatSunMoon()


def testConstraints():
    point = np.array([0, 0, 1])
@@ -51,9 +54,11 @@ def testConstraints():
    # orbitDat = loadSatOrbitDat()
    satPos, satVel, _ = locateSat(time=rdTime, OrbitData=orbitDat)

    sunCons = obscure_constraint.isObscureBySun(sun=sunPos, p=point, constr=sCons)
    sunCons = obscure_constraint.isObscureBySun(
        sun=sunPos, p=point, constr=sCons)
    print('sunCons:', sunCons)
    moonCons = obscure_constraint.IsObscureByMoon(moon=mPos, p=point, constr=sCons)
    moonCons = obscure_constraint.IsObscureByMoon(
        moon=mPos, p=point, constr=sCons)
    print('moonCons:', moonCons)
    earthCons = obscure_constraint.IsObscureByEarth(
        sat=satPos, sun=sunPos, p=point, constr=sCons
@@ -65,13 +70,13 @@ def testConstraints():
    saaCons = saa_constraint.IsInSAA(uderStarPoint=sat_subPoint)
    print('saaCons:', saaCons)

testConstraints()
# testConstraints()


def testTimsSequence():
    from survey_sim.surveyTools import aquireTargetObsTime

    rdTime = 2459989.5208
    rdTime_e = 2459990.5208
    rdTime = 2461311.5
    rdTime_e = 2461312.5

    obsTimeSegList = aquireTargetObsTime.aquireTargetObsTime(
        stTime=rdTime, endTime=rdTime_e, pointting=[40, -60], searchInterval=60,
@@ -79,7 +84,8 @@ def testTimsSequence():
    )
    print('obsTimeSegList:', obsTimeSegList)

testTimsSequence()
# testTimsSequence()


def testBetaAngle():
    from survey_sim.constraints import beta_time_constraint
@@ -96,23 +102,11 @@ def testBetaAngle():
        surveyCosntraint=sCons,
    )
    print('betaTime_segs:', betaTime_segs)
# testBetaAngle()


betaCons = beta_time_constraint.beta_time_constraint(
    # startTime=orbitDat[0, 0],
    # endTime=orbitDat[0, 0] + 365.25 * 10,
    startTime=rdTime - 0.001,
    endTime=rdTime + 0.001,
    orbitData=orbitDat,
    ephLib=ephLib,
    surveyCosntraint=sCons,
)
beta_time=betaCons.get_beta_time()
print('beta_time:', beta_time)
survey_time_seg=betaCons.get_survey_time_segment_MSC()
    survey_time_seg = beta_time_constraint.get_survey_time_segment_MSC()
    print('survey_time_seg:', survey_time_seg)

# testBetaAngle()

# betaTime_segs = beta_time_constraint.get_beta_time(
#     startTime=orbitDat[0, 0],
#     endTime=orbitDat[0, 0] + 365.25 * 10,