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

fix cmg bug, modify cmg calculation method

parent 3c23d21a
Loading
Loading
Loading
Loading
+36 −3
Original line number Diff line number Diff line
@@ -12,13 +12,46 @@ import numpy as np

class cmgConstraint(object):
    def __init__(self, cmgFlag=1, orbit_time=0.0638):
        self.initCMGWeight(flag=cmgFlag)
        # self.initCMGWeight(flag=cmgFlag)
        self.initCMG_Condition(flag=cmgFlag)
        self.orbit_time = orbit_time
        # 存储节点元素,每个元素包含三个值 [开始时间(儒略日), 当前节点cmg消耗量, 当前节点总共需要的时间(单位:天)]
        self.cmgNodes = []
        self.total_cmg = 0
        self.total_cmgTime = 0

    def initCMG_Condition(self, flag=2):
        if flag == 1:
            self.CMG_angel_range = np.array([[0, 5], [5, 10], [10, 20], [20, 35], [
                                            35, 45], [45, 75], [75, 90], [90, 135], [135, 180]])
            self.CMG_weight_single = np.array(
                [0., 1/29., 1/19., 1/13., 1/10., 1/6., 1/5., 1/3., 1/2.])
            assert len(self.CMG_angel_range) == len(
                self.CMG_weight_single), "Invalid CMG data Init!"
        if flag == 2:
            self.CMG_angel_range = np.array([[0, 5], [5, 10], [10, 20], [20, 35], [
                                            35, 45], [45, 75], [75, 90], [90, 150], [150, 180]])
            self.CMG_weight_single = np.array(
                [0., 1/29., 1/19., 1/13., 1/10., 1/6., 1/5., 1/4., 1/3.])
            assert len(self.CMG_angel_range) == len(
                self.CMG_weight_single), "Invalid CMG data Init!"

    def get_cmg_use(self, tAngle=1.0):
        cmg_use = 0.0
        if tAngle < 0:
            tAngle = 0
        if tAngle > 180:
            tAngle = 180
        for i in np.arange(len(self.CMG_angel_range)):
            c_range = self.CMG_angel_range[i]
            w = self.CMG_weight_single[i]
            if tAngle >= c_range[0] and tAngle < c_range[1]:
                cmg_use = w
                break
        if tAngle == 180:
            cmg_use = self.CMG_weight_single[-1]
        return cmg_use

    def initCMGWeight(self, flag=1):
        CMG_TM_FLAG = flag
        self.cmg_tm_tAngle = np.zeros(10)
@@ -107,7 +140,7 @@ class cmgConstraint(object):
                    1.0 / 10.0,
                    1.0 / 6.0,
                    1.0 / 5.0,
                    1.0 / 34.0,
                    1.0 / 4.0,
                    1.0 / 3.0,
                ]
            )
@@ -127,7 +160,7 @@ class cmgConstraint(object):
            )
        self.cmg_tm_k = cmgWeight * cmgWRange

    def get_cmg_use(self, tAngle=1.0):
    def get_cmg_use_bak(self, tAngle=1.0):

        cmg_use = 0.0

+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
Author: Zhang Xin zhangx@bao.ac.cn
Date: 2020-06-17 17:03:15
LastEditors: Zhang Xin zhangx@bao.ac.cn
LastEditTime: 2025-04-08 14:20:26
LastEditTime: 2025-06-25 10:33:46
FilePath: /CSST_Survey/survey_sim/constraints/surveyConstraint.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
+5 −4
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: 2025-06-17 14:39:51
LastEditTime: 2025-06-30 09:49:51
FilePath: /CSST_Survey/survey_sim/strategies/SurveySim_MSC.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
@@ -446,7 +446,8 @@ class SurveySim(object):
        self.shadowTime = [0, 0]
        self.bettery_level = bettery_level
        if cmgCons is None:
            self.cmgCons = cmg_constraint.cmgConstraint(orbit_time=0.0638)
            self.cmgCons = cmg_constraint.cmgConstraint(
                orbit_time=0.0638, cmgFlag=1)
        else:
            self.cmgCons = cmgCons

@@ -977,7 +978,7 @@ class SurveySim(object):
                battery_q = self.surveyCons.BATTERY_LOW
                print("ERROR:-----Energy not balance")
            self.bettery_level = battery_q
            return returnTime, returnTime, curPSky, None, None, None, None, orbitDataId, isInSunSide, None, None, lastSatAtt, final_cmg_value, self.bettery_level
            return returnTime, returnTime, curPSky, None, None, None, None, orbitDataId, isInSunSide, None, None, lastSatAtt, self.cmgCons.total_cmg, self.bettery_level
        else:
            unObs_continue_flag = 0
            returnTime = curTime + (final_use_time) / 86400.0
@@ -1026,7 +1027,7 @@ class SurveySim(object):

            # gc.collect()

            return returnTime, otime, self.skymap.skymap[final_index], sun_r1, moon_r1, sat_r1, satVel_r1, orbitDataId_r1, isInSunSide, final_exp_time, final_Angle, curSatAtt, final_cmg_value, final_energy
            return returnTime, otime, self.skymap.skymap[final_index], sun_r1, moon_r1, sat_r1, satVel_r1, orbitDataId_r1, isInSunSide, final_exp_time, final_Angle, curSatAtt, self.cmgCons.total_cmg, final_energy

        # locateSun(infp, otime, sun_r1);
        # locateMoon(infp, otime, moon_r1);