USGS

Isis 3.0 Object Programmers' Reference

Home

ObservationNumberList.cpp
2 #include "IException.h"
3 #include "FileName.h"
4 #include "SerialNumberList.h"
5 #include "IString.h"
6 #include "Pvl.h"
7 
8 namespace Isis {
18  ObservationNumberList::ObservationNumberList(const QString &listfile, bool checkTarget) :
19  SerialNumberList(listfile, checkTarget) {
20  init(this);
21  }
22 
29  SerialNumberList(*snlist) {
30  init(snlist);
31  }
32 
40 
41  if(snlist->Size() == 0) {
42  QString msg = "Serial number list is empty";
44  }
45 
46  std::map<QString, int> observationMap;
47  QString observationNumber;
48  int currentIndex = 0;
49  int observationIndex;
50 
51  // Fill the temporary map to generate observation sets
52  for(int isn = 0; isn < snlist->Size(); isn++) {
53  observationNumber = snlist->ObservationNumber(isn);
54 
55  if(observationMap.find(observationNumber) == observationMap.end()) {
56  observationMap.insert(std::pair<QString, int>(observationNumber, currentIndex));
57  observationIndex = currentIndex++;
58  }
59  else {
60  observationIndex = observationMap.find(observationNumber)->second;
61  }
62 
63  Add(isn, observationIndex, observationNumber);
64  }
65  p_numberObservations = currentIndex;
66  }
67 
72  }
73 
80 
81  if(snlist->Size() == 0) {
82  QString msg = "Removing serial number list is empty";
84  }
85 
86  p_sets.clear();
87  p_indexMap.clear();
88 
89  std::map<QString, int> observationMap;
90  QString observationNumber;
91  int currentIndex = 0;
92  int observationIndex;
93 
94  // Fill the temporary map to generate observation sets
95  for(int isn = 0; isn < this->Size(); isn++) {
96  if((snlist->HasSerialNumber(this->SerialNumber(isn)))) continue;
97  observationNumber = this->ObservationNumber(isn);
98 
99  if(observationMap.find(observationNumber) == observationMap.end()) {
100  observationMap.insert(std::pair<QString, int>(observationNumber, currentIndex));
101  observationIndex = currentIndex++;
102  }
103  else {
104  observationIndex = observationMap.find(observationNumber)->second;
105  }
106 
107  Add(isn, observationIndex, observationNumber);
108  }
109  p_numberObservations = currentIndex;
110  }
111 
112 
118  void ObservationNumberList::Remove(const QString &listfile) {
119  Isis::SerialNumberList snlist(listfile);
120  Remove(&snlist);
121  }
122 
123 
135  void ObservationNumberList::Add(const int isn, const int observationIndex,
136  QString observationNumber) {
137 
138  ObservationSet nextset;
139  nextset.serialNumberIndex = isn;
140  nextset.observationNumberIndex = observationIndex;
141  nextset.observationNumber = observationNumber;
142 
143  p_sets.push_back(nextset);
144  p_indexMap.insert(std::pair<int, int>(isn, observationIndex));
145  }
146 
153  return p_numberObservations;
154  }
155 
156 
166  for(unsigned index = 0; index < p_pairs.size(); index++) {
167  if(p_pairs[index].observationNumber == on) {
168  return true;
169  }
170  }
171  return false;
172  }
173 
182  // if (serialNumberIndex >= 0 && serialNumberIndex < (int) p_indexMap.size()) {
183  if(serialNumberIndex >= 0) {
184  return p_indexMap.find(serialNumberIndex)->second;
185  }
186  else {
187  QString msg = "Serial Number Index [" + toString(serialNumberIndex) + "] is invalid";
189  }
190  }
191 
192 
201  QString ObservationNumberList::ObservationNumber(const QString &filename) {
202  if(p_fileMap.find(Isis::FileName(filename).expanded()) == p_fileMap.end()) {
203  QString msg = "Requested filename [" +
204  Isis::FileName(filename).expanded() + "]";
205  msg += "does not exist in the list";
207  }
208  int index = FileNameIndex(filename);
209  return p_pairs[index].observationNumber;
210  }
211 
220  if(index >= 0 && index < (int) p_pairs.size()) {
221  return p_pairs[index].observationNumber;
222  }
223  else {
224  QString msg = "Index [" + toString(index) + "] is invalid";
226  }
227  }
228 
237  std::vector<QString> ObservationNumberList::PossibleFileNames(const QString &on) {
238  std::vector<QString> filenames;
239  for(unsigned index = 0; index < p_pairs.size(); index++) {
240  if(p_pairs[index].observationNumber == on) {
241  filenames.push_back(p_pairs[index].filename);
242  }
243  }
244  if(filenames.size() > 0) {
245  return filenames;
246  }
247  else {
248  QString msg = "Requested observation number [" + on + "] ";
249  msg += "does not exist in the list";
251  }
252  }
253 
254 }