srg/artsurvey/management/commands/00_artsurvey_replica.py
2024-04-26 12:43:00 +03:00

126 lines
3.6 KiB
Python

from django.core.management.base import BaseCommand, CommandError
from datetime import date
import datetime
from django.utils import timezone
import astropy
from astropy.io import ascii
import pandas as pd
import pymysql
from sqlalchemy import create_engine
from django.db.models import Q
from heasarc.models import HeasarcBase
from artsurvey.models import ArtSurveySource, ArtSurvey, EnergyBand
from srglib.utils import find_counterparts
from srgcat.models import SrgDataDump
def make_survey_replica(version,slug):
""" note that we don't copy catalogs, i.e. papers reletions """
""" delete all replicas of this survey """
try:
replicas = ArtSurvey.objects.filter(Q(version=version) & Q(parent__isnull=False))
for replica in replicas:
print("Delete Replica ArtSurvey {} --> {}".format(replica,replica.parent))
replicas.delete()
except ArtSurvey.DoesNotExist:
pass
""" For cloning select only original surveys, i.e. without parents """
try:
survey = ArtSurvey.objects.get(Q(version=version) & Q(parent=None))
except ArtSurvey.DoesNotExist:
print("For cloning select only original surveys, i.e. without parents")
print("Survey {} with parent=None not found".format(version))
return
print("use ArtSurvey {}".format(survey))
try:
band = EnergyBand.objects.get(slug=slug)
print("use EnergyBand {}".format(band))
except EnergyBand.DoesNotExist:
print("EnergyBand not found")
return
child = ArtSurvey(version=version,parent=survey)
child.save()
srcs = survey.artsurveysource_set.all().filter(band=band)
print("Selected {}".format(srcs.count()))
for src in srcs:
print("Cloning {}".format(src))
self_pk = src.pk
onames = src.othername_set.all()
for o in onames:
print("{} OtherNames {}".format(src,o))
ads = src.ads.all()
simbad = src.simbad.all()
nvss = src.nvss.all()
first = src.first.all()
sumss = src.sumss.all()
heasarc = src.heasarc.all()
allwise = src.allwise.all()
gaia3 = src.gaia3.all()
gaia3_primary = src.gaia3_primary
clone = src
clone.pk = None
clone.id = None
clone._state.adding = True
clone.survey = child
clone.save()
try:
parent = ArtSurveySource.objects.get(pk=self_pk)
except ArtSurveySource.DoesNotExist:
print("Parent source not found for {}".format(clone))
return
clone.parent = parent
clone.ads.set(ads)
clone.simbad.set(simbad)
clone.nvss.set(nvss)
clone.first.set(first)
clone.sumss.set(sumss)
clone.heasarc.set(heasarc)
clone.allwise.set(allwise)
clone.gaia3.set(gaia3)
""" clone OtherName """
for o in onames:
print("clone OtherName {}".format(o))
o.source=clone
o.pk=None
o.id=None
o._state.adding = True
o.save()
clone.save()
class Command(BaseCommand):
help = 'Initiates data dase'
def handle(self, *args, **options):
"""
bands = ['E0','E1','E2','E3','E4']
for slug in bands:
init_survey(12.5,'S12',slug)
"""
make_survey_replica(12.5,'E0')
self.stdout.write(self.style.SUCCESS('Done'))