Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Component class for adding pointing position using Drive Reports. #159

Merged
merged 2 commits into from
Nov 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lstchain/pointing/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .pointings import *
89 changes: 89 additions & 0 deletions lstchain/pointing/pointings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import os
import numpy as np
from ctapipe.core import Component
from ctapipe_io_lst.containers import LSTMonitoringContainer, LSTDriveContainer
from ctapipe.core.traits import Unicode, Int
from astropy.io import ascii


__all__ = [
'PointingPosition'
]


class PointingPosition(Component):
"""
Pointion position of telescopes

"""
drive_path = Unicode(
'',
allow_none=True,
help='Path to the LST drive report file'
).tag(config=True)

tel_id = Int(
0,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't tel_id be 1 instead of 0 here?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did it following the same piece of code defined in the component class of ctapipe

help='id of the telescope to take drive report for'
).tag(config=True)

def _read_drive_report(self):
"""
Reading drive reports

Parameters:
-----------
str: drive report file

Returns:
data:`~astropy.table.Table`
A table of drive reports

"""
self.log.info("Drive report file:", self.drive_path)
if self.drive_path:
data = ascii.read(self.drive_path)
# Renaming the columns, since the drive report doesn't contain
# these information it self
data['col6'].name = 'time'
data['col8'].name = 'azimuth_avg'
data['col13'].name = 'altitude_avg'
return data
else:
raise Exception("No drive report file found")

def cal_pointingposition(self, ev_time):
"""
Calculating pointing positions by interpolation

Parameters:
-----------
time: array
times from events

Drivereport: Container
a container filled with drive information
"""
drive_container = LSTDriveContainer()
data = self._read_drive_report()
drive_container.time = data['time'].data
drive_container.azimuth_avg = data['azimuth_avg'].data
drive_container.altitude_avg = data['altitude_avg'].data

xp = drive_container.time
lower_drive_time = xp[xp < ev_time].max()
upper_drive_time = xp[xp > ev_time].min()

time_in_window = (xp >= lower_drive_time) & (xp <= upper_drive_time)
run_times = xp[time_in_window]

if len(run_times) > 1:
run_azimuth = drive_container.azimuth_avg[time_in_window]
run_altitude = drive_container.altitude_avg[time_in_window]

ev_azimuth = np.interp(ev_time, run_times, run_azimuth)
ev_altitude = np.interp(ev_time, run_times, run_altitude)
return ev_azimuth, ev_altitude
else:
raise Exception("No drive time in the range of event times")