1 /* Copyright 2013-2016 CS Systèmes d'Information 2 * Licensed to CS Systèmes d'Information (CS) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * CS licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.orekit.rugged.linesensor; 18 19 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; 20 import org.orekit.rugged.errors.DumpManager; 21 import org.orekit.rugged.errors.RuggedException; 22 import org.orekit.rugged.los.TimeDependentLOS; 23 import org.orekit.time.AbsoluteDate; 24 25 /** Line sensor model. 26 * @author Luc Maisonobe 27 */ 28 public class LineSensor { 29 30 /** Name of the sensor. */ 31 private final String name; 32 33 /** Datation model. */ 34 private final LineDatation datationModel; 35 36 /** Sensor position. */ 37 private final Vector3D position; 38 39 /** Pixels lines-of-sight. */ 40 private final TimeDependentLOS los; 41 42 /** Simple constructor. 43 * @param name name of the sensor 44 * @param datationModel datation model 45 * @param position sensor position in spacecraft frame 46 * @param los pixels lines-of-sight in spacecraft frame 47 * @see org.orekit.rugged.los.LOSBuilder 48 */ 49 public LineSensor(final String name, final LineDatation datationModel, 50 final Vector3D position, final TimeDependentLOS los) { 51 52 this.name = name; 53 this.datationModel = datationModel; 54 this.position = position; 55 this.los = los; 56 57 } 58 59 /** Get the name of the sensor. 60 * @return name of the sensor 61 */ 62 public String getName() { 63 return name; 64 } 65 66 /** Get the number of pixels. 67 * @return number of pixels 68 */ 69 public int getNbPixels() { 70 return los.getNbPixels(); 71 } 72 73 /** Get the pixel normalized line-of-sight at some date. 74 * @param date current date 75 * @param i pixel index (must be between 0 and {@link #getNbPixels()} - 1 76 * @return pixel normalized line-of-sight 77 * @exception RuggedException if date cannot be handled 78 */ 79 public Vector3D getLos(final AbsoluteDate date, final int i) 80 throws RuggedException { 81 final Vector3D l = los.getLOS(i, date); 82 DumpManager.dumpSensorLOS(this, date, i, l); 83 return l; 84 } 85 86 /** Get the date. 87 * @param lineNumber line number 88 * @return date corresponding to line number 89 * @exception RuggedException if date cannot be handled 90 */ 91 public AbsoluteDate getDate(final double lineNumber) 92 throws RuggedException { 93 final AbsoluteDate date = datationModel.getDate(lineNumber); 94 DumpManager.dumpSensorDatation(this, lineNumber, date); 95 return date; 96 } 97 98 /** Get the line number. 99 * @param date date 100 * @return line number corresponding to date 101 * @exception RuggedException if date cannot be handled 102 */ 103 public double getLine(final AbsoluteDate date) 104 throws RuggedException { 105 final double lineNumber = datationModel.getLine(date); 106 DumpManager.dumpSensorDatation(this, lineNumber, date); 107 return lineNumber; 108 } 109 110 /** Get the rate of lines scanning. 111 * @param lineNumber line number 112 * @return rate of lines scanning (lines / seconds) 113 */ 114 public double getRate(final double lineNumber) { 115 final double rate = datationModel.getRate(lineNumber); 116 DumpManager.dumpSensorRate(this, lineNumber, rate); 117 return rate; 118 } 119 120 /** Get the sensor position. 121 * @return position 122 */ 123 public Vector3D getPosition() { 124 return position; 125 } 126 127 }