Gaia
cyclops.h
1 /*
2  * Copyright (C) 2006-2013 Music Technology Group - Universitat Pompeu Fabra
3  *
4  * This file is part of Gaia
5  *
6  * Gaia is free software: you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License as published by the Free
8  * Software Foundation (FSF), either version 3 of the License, or (at your
9  * option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14  * details.
15  *
16  * You should have received a copy of the Affero GNU General Public License
17  * version 3 along with this program. If not, see http://www.gnu.org/licenses/
18  */
19 
20 #ifndef GAIA_CYCLOPS_H
21 #define GAIA_CYCLOPS_H
22 
23 #include "dataset.h"
24 #include "distancefunction.h"
25 #include "searchspace.h"
26 
27 typedef QList<QString> CyclopsResultsHeader;
28 typedef QList<QList<QVariant> > CyclopsResultsValues;
29 
31  public:
32  gaia2::SearchResults results;
33  CyclopsResultsHeader header;
34  CyclopsResultsValues values;
35 
36  void append(const gaia2::Result& r, const QList<QVariant>& values);
37 
39  void mid(int pos, int length);
40 
41  int size() const { return results.size(); }
42 
43  // NB: this is quite inefficient at the moment and could be optimized quite easily
44  void sort();
45 };
46 
47 class Cyclops : public QObject {
48 Q_OBJECT
49  public:
50 
51  Cyclops();
52  ~Cyclops();
53 
61  void load(const QString& datasetName, const QString& filename, int start = 0, int offset = -1);
62 
66  void loadNthPart(const QString& datasetName, const QString& filename, int idx, int total);
67 
73  void unload(const QString& datasetName);
74 
78  QStringList datasetNames() const;
79 
85  QString layout(const QString& datasetName) const;
86 
92  int size(const QString& datasetName) const;
93 
100  void setReferenceDataSet(const QString& dataset, const QString& referenceDataset);
101 
111  void createDistance(const QString& distanceName,
112  const QString& datasetName,
113  const QString& distance,
114  const gaia2::ParameterMap& params = gaia2::ParameterMap());
115 
121  void deleteDistance(const QString& distanceName);
122 
126  QStringList distanceNames() const;
127 
131  void indexOn(const QString& datasetName, const QString& descriptorName);
132 
141  CyclopsResults chainedSearch(const gaia2::yaml::Sequence& queries, const gaia2::yaml::Sequence& header, int numberResults, int offset = 0);
142 
152  gaia2::SearchResults nnSearchById(const QString& queryID,
153  const QString& datasetName,
154  const QString& distanceName,
155  int numberResults,
156  int offset = 0);
157 
168  gaia2::SearchResults nnSearchByIdWithFilter(const QString& queryID,
169  const QString& datasetName,
170  const QString& distanceName,
171  const QString& filter,
172  int numberResults,
173  int offset = 0);
174 
175  gaia2::SearchResults nnSearchByExample(const gaia2::Point& query,
176  const QString& datasetName,
177  const QString& distanceName,
178  int numberResults,
179  int offset = 0);
180 
181  gaia2::SearchResults nnSearchByExampleWithFilter(const gaia2::Point& query,
182  const QString& datasetName,
183  const QString& distanceName,
184  const QString& filter,
185  int numberResults,
186  int offset = 0);
187 
191  const gaia2::Point* getPoint(const QString& datasetName, const QString& pointName) const;
192 
197  std::string getPoints(const QString& datasetName, const QStringList& pointNames, bool failOnError = true) const;
198 
202  void setup(const QString& filename);
203 
204  void setupFromYaml(const gaia2::yaml::Mapping& config);
205 
206  protected:
207  gaia2::ResultSet nnSearch(const QString& methodName, const gaia2::yaml::Sequence& args,
208  const gaia2::ResultSet* inputSpace = 0);
209 
210  QMap<QString, gaia2::DataSet*> _datasets;
211  QMap<QString, gaia2::View*> _views; // there should be a corresponding view for each dataset
212  QMap<QString, gaia2::DistanceFunction*> _dfuncs;
213 };
214 
215 
216 #endif // GAIA_CYCLOPS_H
void mid(int pos, int length)
this works in place
Definition: cyclops.cpp:34
Definition: cyclops.h:47
Definition: cyclops.h:30
This class serves as a ref-counted wrapper for a SearchSpace, which is much more convenient to deal w...
Definition: searchspace.h:306
Definition: parameter.h:34
Definition: point.h:106