msidentificationtablemodel.cpp 10.5 KB
Newer Older
1
2

/*******************************************************************************
Renne Thomas's avatar
Renne Thomas committed
3
 * Copyright (c) 2019 Olivier Langella <olivier.langella@u-psud.fr>.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 *
 * This file is part of XTPcpp.
 *
 *     XTPcpp is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 *
 *     XTPcpp is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 *     You should have received a copy of the GNU General Public License
 *     along with XTPcpp.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Contributors:
Renne Thomas's avatar
Renne Thomas committed
21
 *     Thomas Renne <thomas.renne@u-psud.fr>. - initial API and
22
23
24
25
26
27
28
29
30
31
 *implementation
 ******************************************************************************/

#include "msidentificationtablemodel.h"

#include <QDebug>
#include <pappsomspp/pappsoexception.h>
#include "msidentificationlistwindow.h"
#include "../../../utils/identificationdatasourcestore.h"

Renne Thomas's avatar
Renne Thomas committed
32
33
MsIdentificationTableModel::MsIdentificationTableModel(
  MsIdentificationListWindow *ms_id_list_window)
34
35
36
37
38
39
40
  : QAbstractTableModel(ms_id_list_window)
{
  m_ms_id_list_window = ms_id_list_window;
}

void
MsIdentificationTableModel::setIdentificationDataSourceSpList(
Renne Thomas's avatar
Renne Thomas committed
41
  std::vector<IdentificationDataSourceSp> &identificationDataSourceSpList)
42
{
Renne Thomas's avatar
Renne Thomas committed
43
44
45
  qDebug() << " identificationDataSourceSpList.size()="
           << identificationDataSourceSpList.size();

46
47
48
49
50
51
52
  beginResetModel();
  m_identificationDataSourceSpList = identificationDataSourceSpList;
  endResetModel();

  m_ms_id_list_window->resizeColumnsToContents();
}

Renne Thomas's avatar
Renne Thomas committed
53
54
55
56
57
std::vector<IdentificationDataSourceSp>
MsIdentificationTableModel::getIdentificationDataSourceSpList() const
{
  return m_identificationDataSourceSpList;
}
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

int
MsIdentificationTableModel::rowCount(const QModelIndex &parent) const
{
  // qDebug() << "MsIdentificationTableModel::rowCount begin ";
  if(m_identificationDataSourceSpList.size() != 0)
    {
      return (int)m_identificationDataSourceSpList.size();
    }
  return 0;
}
int
MsIdentificationTableModel::columnCount(const QModelIndex &parent) const
{
  return (std::int8_t)msIdentificationListColumn::last;
}
const QString
MsIdentificationTableModel::getTitle(msIdentificationListColumn column)
{
  qDebug() << "MsIdentificationTableModel::getTitle begin ";
  return MsIdentificationTableModel::getTitle((std::int8_t)column);
  // qDebug() << "MsIdentificationTableModel::getTitle end ";
}
const QString
MsIdentificationTableModel::getDescription(msIdentificationListColumn column)
{
  qDebug() << "MsIdentificationTableModel::columnCount begin ";
  return MsIdentificationTableModel::getDescription((std::int8_t)column);
  // qDebug() << "MsIdentificationTableModel::columnCount end ";
}

const QString
MsIdentificationTableModel::getTitle(std::int8_t column)
{

  qDebug() << "MsIdentificationTableModel::getTitle begin " << column;
  switch(column)
    {

      case(std::int8_t)msIdentificationListColumn::run_id:
Renne Thomas's avatar
Renne Thomas committed
98
        return "Identification RunID";
99
100
        break;
      case(std::int8_t)msIdentificationListColumn::id_file:
Renne Thomas's avatar
Renne Thomas committed
101
        return "Identification File";
102
103
        break;
      case(std::int8_t)msIdentificationListColumn::mzML:
Renne Thomas's avatar
Renne Thomas committed
104
        return "Peak-list file";
105
        break;
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
      case(std::int8_t)msIdentificationListColumn::engine_name:
        return "Engine Name";
        break;
      case(std::int8_t)msIdentificationListColumn::nbr_spectrum:
        return "Number of Spectrum";
        break;
      case(std::int8_t)msIdentificationListColumn::nbr_peptide:
        return "Number of peptide";
        break;
      case(std::int8_t)msIdentificationListColumn::nbr_unique:
        return "Number of unique";
        break;
      case(std::int8_t)msIdentificationListColumn::percent_assign:
        return "% Assignation";
        break;
      case(std::int8_t)msIdentificationListColumn::id_msrun_id:
        return "MsRunID";
        break;
124
125
126
127
128
129
130
131
132
133
134
135
136
    }
  return "";
}

const QString
MsIdentificationTableModel::getDescription(std::int8_t column)
{

  qDebug() << "MsIdentificationTableModel::getDescription begin " << column;
  switch(column)
    {

      case(std::int8_t)msIdentificationListColumn::run_id:
Renne Thomas's avatar
Renne Thomas committed
137
        return "Identification of RunID";
138
139
        break;
      case(std::int8_t)msIdentificationListColumn::id_file:
Renne Thomas's avatar
Renne Thomas committed
140
        return "Identification File pathway";
141
142
        break;
      case(std::int8_t)msIdentificationListColumn::mzML:
Renne Thomas's avatar
Renne Thomas committed
143
        return "peak-list data file pathway";
144
        break;
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
      case(std::int8_t)msIdentificationListColumn::engine_name:
        return "Engine Name";
        break;
      case(std::int8_t)msIdentificationListColumn::nbr_spectrum:
        return "Number of Spectrum";
        break;
      case(std::int8_t)msIdentificationListColumn::nbr_peptide:
        return "Number of peptide identified";
        break;
      case(std::int8_t)msIdentificationListColumn::nbr_unique:
        return "Number of unique peptide";
        break;
      case(std::int8_t)msIdentificationListColumn::percent_assign:
        return "Percentage of Assignation";
        break;
      case(std::int8_t)msIdentificationListColumn::id_msrun_id:
        return "Identification of MsRunID";
        break;
163
164
165
166
167
168
    }
  return "";
}

QVariant
MsIdentificationTableModel::headerData(int section,
Renne Thomas's avatar
Renne Thomas committed
169
170
                                       Qt::Orientation orientation,
                                       int role) const
171
172
173
174
175
176
177
178
179
180
181
182
183
184
{
  if(orientation == Qt::Horizontal)
    {
      switch(role)
        {
          case Qt::DisplayRole:
            qDebug() << section;
            return QVariant(getTitle(section));
            break;
          case Qt::ToolTipRole:
            return QVariant(getDescription(section));
            break;
          case Qt::SizeHintRole:
            qDebug() << section;
Renne Thomas's avatar
Renne Thomas committed
185
            return QSize(getColumnWidth(section), 40);
186
187
188
189
190
191
192
193
194
195
196
197
            break;
        }
    }
  return QVariant();
}

int
MsIdentificationTableModel::getColumnWidth(int column)
{
  switch(column)
    {
      case(int)msIdentificationListColumn::run_id:
Renne Thomas's avatar
Renne Thomas committed
198
        return 200;
199
200
        break;
      case(int)msIdentificationListColumn::id_file:
201
        return 400;
202
203
        break;
      case(int)msIdentificationListColumn::mzML:
204
205
206
207
208
209
210
211
212
213
        return 400;
        break;
      case(int)msIdentificationListColumn::nbr_spectrum:
        return 160;
        break;
      case(int)msIdentificationListColumn::nbr_peptide:
        return 160;
        break;
      case(int)msIdentificationListColumn::nbr_unique:
        return 160;
214
215
        break;
    }
216
  return 120;
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
}

msIdentificationListColumn
MsIdentificationTableModel::getMsIdentificationListColumn(std::int8_t column)
{
  return static_cast<msIdentificationListColumn>(column);
}

QVariant
MsIdentificationTableModel::data(const QModelIndex &index, int role) const
{
  int row = index.row();
  int col = index.column();

  switch(role)
    {
      case Qt::SizeHintRole:
        qDebug() << MsIdentificationTableModel::getColumnWidth(col);
Renne Thomas's avatar
Renne Thomas committed
235

236
237
238
239
240
241
        return QSize(MsIdentificationTableModel::getColumnWidth(col), 30);
        break;
      case Qt::DisplayRole:
        switch(col)
          {
            case(std::int8_t)msIdentificationListColumn::run_id:
Renne Thomas's avatar
Renne Thomas committed
242
              return QVariant(
Renne Thomas's avatar
Renne Thomas committed
243
                m_identificationDataSourceSpList.at(row)->getXmlId());
244
          }
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
        if(col == (std::int8_t)msIdentificationListColumn::id_file)
          {
            QFileInfo fi(
              m_identificationDataSourceSpList.at(row)->getResourceName());
            return QVariant(fi.fileName());
          }

        if(col == (std::int8_t)msIdentificationListColumn::mzML)
          {
            QFileInfo fi(m_identificationDataSourceSpList.at(row)
                           ->getMsRunSp()
                           .get()
                           ->getFileName());
            return QVariant(fi.fileName());
          }
        if(col == (std::int8_t)msIdentificationListColumn::engine_name)
          {
            return QVariant(m_identificationDataSourceSpList.at(row)
                              ->getIdentificationEngineName());
          }
        if(col == (std::int8_t)msIdentificationListColumn::id_msrun_id)
          {
            return QVariant(m_identificationDataSourceSpList.at(row)
                              ->getMsRunSp()
                              ->getXmlId());
          }
        if(col == (std::int8_t)msIdentificationListColumn::nbr_peptide)
          {
            return QVariant(
              m_identificationDataSourceSpList.at(row)
                ->getIdentificationEngineStatistics(
                  IdentificationEngineStatistics::total_spectra_assigned));
          }
        if(col == (std::int8_t)msIdentificationListColumn::nbr_unique)
          {
            return QVariant(
              m_identificationDataSourceSpList.at(row)
                ->getIdentificationEngineStatistics(
                  IdentificationEngineStatistics::total_unique_assigned));
          }
        if(col == (std::int8_t)msIdentificationListColumn::nbr_spectrum)
          {
            return QVariant(
              m_identificationDataSourceSpList.at(row)
                ->getIdentificationEngineStatistics(
                  IdentificationEngineStatistics::total_spectra_used));
          }
        if(col == (std::int8_t)msIdentificationListColumn::percent_assign)
          {
            return QVariant(
              m_identificationDataSourceSpList.at(row)
                ->getIdentificationEngineStatistics(
                  IdentificationEngineStatistics::total_spectra_assigned)
                .toDouble() /
              m_identificationDataSourceSpList.at(row)
                ->getIdentificationEngineStatistics(
                  IdentificationEngineStatistics::total_spectra_used)
                .toDouble());
          }
      case Qt::ToolTipRole:
305
306
        if(col == (std::int8_t)msIdentificationListColumn::id_file)
          {
Renne Thomas's avatar
Renne Thomas committed
307
308
            return QVariant(
              m_identificationDataSourceSpList.at(row)->getResourceName());
309
310
311
312
          }

        if(col == (std::int8_t)msIdentificationListColumn::mzML)
          {
Renne Thomas's avatar
Renne Thomas committed
313
314
315
316
            return QVariant(m_identificationDataSourceSpList.at(row)
                              ->getMsRunSp()
                              .get()
                              ->getFileName());
317
318
319
320
321
322
323
324
325
326
327
328
329
          }
        return QVariant();
    }
  return QVariant();
}

void
MsIdentificationTableModel::onMsIdentificationDataChanged()
{
  qDebug() << rowCount();
  emit layoutAboutToBeChanged();
  emit layoutChanged();
}