001/* 002 * This file is part of McIDAS-V 003 * 004 * Copyright 2007-2016 005 * Space Science and Engineering Center (SSEC) 006 * University of Wisconsin - Madison 007 * 1225 W. Dayton Street, Madison, WI 53706, USA 008 * https://www.ssec.wisc.edu/mcidas 009 * 010 * All Rights Reserved 011 * 012 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and 013 * some McIDAS-V source code is based on IDV and VisAD source code. 014 * 015 * McIDAS-V is free software; you can redistribute it and/or modify 016 * it under the terms of the GNU Lesser Public License as published by 017 * the Free Software Foundation; either version 3 of the License, or 018 * (at your option) any later version. 019 * 020 * McIDAS-V is distributed in the hope that it will be useful, 021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 023 * GNU Lesser Public License for more details. 024 * 025 * You should have received a copy of the GNU Lesser Public License 026 * along with this program. If not, see http://www.gnu.org/licenses. 027 */ 028 029package edu.wisc.ssec.mcidasv.data.cyclone; 030 031import java.util.ArrayList; 032import java.util.HashMap; 033import java.util.Iterator; 034import java.util.List; 035import java.util.Set; 036 037import visad.DateTime; 038 039/** 040 * Created by IntelliJ IDEA. User: yuanho Date: Apr 9, 2008 Time: 5:00:40 PM To 041 * change this template use File | Settings | File Templates. 042 */ 043 044public class StormTrackCollection { 045 046 /** _more_ */ 047 // private HashMap forecastWayMapStartDates; 048 049 /** _more_ */ 050 // private StormTrack obsTrack; 051 052 /** _more_ */ 053 private HashMap<Way, List> wayToTracksHashMap; 054 055 /** _more_ */ 056 List<StormTrack> tracks = new ArrayList<StormTrack>(); 057 058 /** 059 * _more_ 060 */ 061 public StormTrackCollection() { 062 wayToTracksHashMap = new HashMap<Way, List>(); 063 // forecastWayMapStartDates = new HashMap(); 064 // obsTrack = null; 065 } 066 067 /** 068 * _more_ 069 * 070 * 071 * @return _more_ 072 */ 073 public List<Way> getWayList() { 074 Set ss = wayToTracksHashMap.keySet(); 075 ArrayList ways = new ArrayList(); 076 ways.addAll(ss); 077 return ways; 078 } 079 080 /** 081 * _more_ 082 * 083 * @param tracks 084 * _more_ 085 */ 086 public void addTrackList(List<StormTrack> tracks) { 087 for (StormTrack track : tracks) { 088 addTrack(track); 089 } 090 } 091 092 /** 093 * _more_ 094 * 095 * @param track 096 * _more_ 097 */ 098 public void addTrack(StormTrack track) { 099 List list = wayToTracksHashMap.get(track.getWay()); 100 if (list == null) { 101 wayToTracksHashMap.put(track.getWay(), 102 list = new ArrayList<StormTrack>()); 103 104 } 105 list.add(track); 106 tracks.add(track); 107 } 108 109 /** 110 * _more_ 111 * 112 * @return _more_ 113 */ 114 public List<StormTrack> getTracks() { 115 return new ArrayList<StormTrack>(tracks); 116 } 117 118 /** 119 * _more_ 120 * 121 * 122 * @param way 123 * _more_ 124 * @return _more_ 125 */ 126 public List<StormTrack> getTrackList(Way way) { 127 return (List<StormTrack>) wayToTracksHashMap.get(way); 128 } 129 130 /** 131 * _more_ 132 * 133 * @return _more_ 134 */ 135 public HashMap<Way, List> getWayToTracksHashMap() { 136 return wayToTracksHashMap; 137 } 138 139 /** 140 * _more_ 141 * 142 * @return _more_ 143 */ 144 public HashMap getWayToStartDatesHashMap() { 145 HashMap wayToStartDatesHashMap = new HashMap(); 146 int size = wayToTracksHashMap.size(); 147 Set ways = wayToTracksHashMap.keySet(); 148 Iterator itr = ways.iterator(); 149 for (int i = 0; i < size; i++) { 150 Way way = (Way) itr.next(); 151 List tracks = getTrackList(way); 152 List startTimes = new ArrayList(); 153 if (tracks != null) { 154 Iterator its = tracks.iterator(); 155 while (its.hasNext()) { 156 StormTrack track = (StormTrack) its.next(); 157 DateTime st = track.getStartTime(); 158 startTimes.add(st); 159 } 160 if (startTimes.size() > 0) { 161 wayToStartDatesHashMap.put(way, startTimes); 162 } 163 } 164 165 } 166 return wayToStartDatesHashMap; 167 } 168 169 /** 170 * _more_ 171 * 172 * @return _more_ 173 */ 174 public StormTrack getObsTrack() { 175 List tracks = getTrackList(Way.OBSERVATION); 176 if ((tracks == null) || (tracks.size() == 0)) { 177 return null; 178 } 179 return (StormTrack) tracks.get(0); 180 } 181 182 /** 183 * _more_ 184 * 185 * 186 * @param way 187 * _more_ 188 */ 189 public void setObsTrack(Way way) { 190 // first remove the obs track 191 List<StormTrack> obtracks = wayToTracksHashMap.get(Way.OBSERVATION); 192 StormTrack obtrack = obtracks.get(0); 193 StormInfo sInfo = obtrack.getStormInfo(); 194 List<StormParam> obParams = obtrack.getParams(); 195 int size = obParams.size(); 196 StormParam[] obParam = new StormParam[size]; 197 int i = 0; 198 for (StormParam sp : obParams) { 199 obParam[i] = sp; 200 i++; 201 } 202 wayToTracksHashMap.remove(Way.OBSERVATION); 203 204 // now construct the obs track 205 List<StormTrackPoint> newObsPoints = new ArrayList(); 206 List<StormTrack> tracks = getTrackList(way); 207 208 for (StormTrack stk : tracks) { 209 List<StormTrackPoint> stkPoints = stk.getTrackPoints(); 210 newObsPoints.add(stkPoints.get(0)); 211 } 212 213 StormTrack stk = new StormTrack(sInfo, Way.OBSERVATION, newObsPoints, 214 obParam); 215 216 addTrack(stk); 217 } 218 219}