libpappsomspp
Library for mass spectrometry
xicwidget.cpp
Go to the documentation of this file.
1 /**
2  * \file pappsomspp/widget/xicwidget/xicwidget.h
3  * \date 12/1/2018
4  * \author Olivier Langella
5  * \brief plot a XIC
6  */
7 
8 
9 /*******************************************************************************
10  * Copyright (c) 2018 Olivier Langella <Olivier.Langella@u-psud.fr>.
11  *
12  * This file is part of the PAPPSOms++ library.
13  *
14  * PAPPSOms++ is free software: you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation, either version 3 of the License, or
17  * (at your option) any later version.
18  *
19  * PAPPSOms++ is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with PAPPSOms++. If not, see <http://www.gnu.org/licenses/>.
26  *
27  * Contributors:
28  * Olivier Langella <Olivier.Langella@u-psud.fr> - initial API and
29  *implementation
30  ******************************************************************************/
31 
32 
33 #include "xicwidget.h"
34 #include <QDebug>
35 #include <QHBoxLayout>
36 #include "qcpxic.h"
37 #include "../../exception/exceptionnotfound.h"
38 
39 using namespace pappso;
40 
41 XicWidget::XicWidget(QWidget *parent) : GraphicDeviceWidget(parent)
42 {
43  qDebug() << "XicWidget::XicWidget begin";
44 
45 
46  this->setLayout(new QHBoxLayout(this));
47 
48  setMinimumSize(200, 160);
49  this->layout()->setMargin(0);
50 
51  _qcp_xic = new QCPXic(this);
52  this->layout()->addWidget(_qcp_xic);
53  qDebug() << "XicWidget::XicWidget end";
54 }
56 {
57 }
58 void
60 {
61  XicCstSPtr xic_sp = getXicCstSPtr(xic_p);
62  _qcp_xic->addMsMsEvent(xic_p, rt);
63  _map_xic_msms_event[xic_p] = rt;
64 }
65 void
67 {
68  _xic_sp_list.push_back(xic_sp);
69  _qcp_xic->addXicP(xic_sp.get());
70 }
71 
72 const QString &
73 XicWidget::getName(const Xic *xic_p) const
74 {
75  XicCstSPtr xic_sp = getXicCstSPtr(xic_p);
76  return _map_xic_name.at(xic_p);
77 }
78 
79 void
80 XicWidget::setName(const Xic *xic_p, const QString &name)
81 {
82  XicCstSPtr xic_sp = getXicCstSPtr(xic_p);
83  _qcp_xic->legend->setVisible(true);
84  _qcp_xic->setName(xic_p, name);
85  _map_xic_name[xic_p] = name;
86 }
87 
88 void
90 {
91  _qcp_xic->replot();
92 }
93 void
95 {
96  _qcp_xic->xAxis->rescale(true);
97  _qcp_xic->yAxis->rescale(true);
98  _qcp_xic->rescale();
99 }
100 
101 void
103 {
104  _map_xic_name.clear();
105  _xic_sp_list.clear();
106  _xic_peak_sp_list.clear();
107  _qcp_xic->clear();
108  _map_xic_msms_event.clear();
109 }
110 
112 XicWidget::getXicCstSPtr(const Xic *xic_p) const
113 {
114  std::vector<XicCstSPtr>::const_iterator it =
115  std::find_if(_xic_sp_list.begin(),
116  _xic_sp_list.end(),
117  [xic_p](XicCstSPtr xic_sp) { return xic_sp.get() == xic_p; });
118  if(it == _xic_sp_list.end())
119  {
120  throw pappso::ExceptionNotFound(tr("ERROR : xic pointer not found"));
121  }
122  return *it;
123 }
124 
125 void
127  const Xic *xic_p, const std::vector<pappso::TracePeakCstSPtr> &xic_peak_list)
128 {
129  XicCstSPtr xic_sp = getXicCstSPtr(xic_p);
130  _qcp_xic->addXicPeakList(xic_p, xic_peak_list);
131  for(const pappso::TracePeakCstSPtr &xic_peak : xic_peak_list)
132  {
133  _xic_peak_sp_list.push_back(
134  std::pair<XicCstSPtr, TracePeakCstSPtr>(xic_sp, xic_peak));
135  }
136 }
137 void
139 {
140  emit rtChanged(rt);
141 
142  std::vector<std::pair<XicCstSPtr, TracePeakCstSPtr>> over_xic_peak_list;
143  for(std::pair<XicCstSPtr, TracePeakCstSPtr> pair_xic_peak : _xic_peak_sp_list)
144  {
145  if(pair_xic_peak.second.get()->containsRt(rt))
146  {
147  over_xic_peak_list.push_back(pair_xic_peak);
148  }
149  }
150 
151  // if (over_xic_peak_list.size() > 0) {
152  emit xicPeakListChanged(over_xic_peak_list);
153  //}
154 }
155 
156 void
157 XicWidget::toQPaintDevice(QPaintDevice *device, const QSize &size)
158 {
159 
160  if(_qcp_xic != nullptr)
161  {
162  QCPPainter painter;
163  painter.begin(device);
164  _qcp_xic->toPainter(&painter, size.width(), size.height());
165  painter.end();
166  }
167 }
168 
169 
170 void
172 {
173  _rt_in_seconds = true;
174  _qcp_xic->xAxis->setLabel("retention time (sec)");
175  replotAll();
176 }
177 void
179 {
180  _rt_in_seconds = false;
181  _qcp_xic->xAxis->setLabel("retention time (min)");
182  replotAll();
183 }
184 
185 void
187 {
188  _qcp_xic->clear();
189 
190  for(XicCstSPtr xic_sp : _xic_sp_list)
191  {
192  _qcp_xic->addXicP(xic_sp.get());
193 
194  std::vector<TracePeakCstSPtr> xic_peak_list;
195  for(auto xic_map_peak_list : _xic_peak_sp_list)
196  {
197  if(xic_map_peak_list.first.get() == xic_sp.get())
198  xic_peak_list.push_back(xic_map_peak_list.second);
199  }
200  _qcp_xic->addXicPeakList(xic_sp.get(), xic_peak_list);
201  }
202  for(auto xic_name : _map_xic_name)
203  {
204  setName(xic_name.first, xic_name.second);
205  }
206  for(auto xic_msms : _map_xic_msms_event)
207  {
208  _qcp_xic->addMsMsEvent(xic_msms.first, xic_msms.second);
209  }
210 
211  rescale();
212  _qcp_xic->replot();
213 }
214 
215 void
217  pappso::pappso_double intensity) const
218 {
219  emit clicked(rt, intensity);
220 }
221 
222 
223 void
225 {
226  XicCstSPtr xic_sp;
227  for(std::pair<XicCstSPtr, TracePeakCstSPtr> pair_xic_peak : _xic_peak_sp_list)
228  {
229  if(pair_xic_peak.second.get() == xic_peak.get())
230  {
231  xic_sp = pair_xic_peak.first;
232  break;
233  }
234  }
235 
236  if(xic_sp.get() != nullptr)
237  {
238 
239  unsigned int i = 0;
240  for(XicCstSPtr xic_in_list : _xic_sp_list)
241  {
242  if(xic_in_list.get() == xic_sp.get())
243  {
244  break;
245  }
246  i++;
247  }
248  _qcp_xic->drawXicPeakBorders(i, xic_sp.get(), xic_peak.get());
249  }
250 }
251 
252 
253 void
255 {
257 }
pappso::TracePeakCstSPtr
std::shared_ptr< const TracePeak > TracePeakCstSPtr
Definition: tracepeak.h:34
pappso::XicWidget::rescale
void rescale()
Definition: xicwidget.cpp:94
pappso::XicWidget::_map_xic_name
std::map< const Xic *, QString > _map_xic_name
Definition: xicwidget.h:91
pappso::XicWidget::toQPaintDevice
void toQPaintDevice(QPaintDevice *device, const QSize &size) override
Definition: xicwidget.cpp:157
pappso::pappso_double
double pappso_double
A type definition for doubles.
Definition: types.h:48
pappso::Xic
Definition: xic.h:44
pappso::QCPXic::addXicPeakList
void addXicPeakList(const Xic *xic_p, const std::vector< pappso::TracePeakCstSPtr > &xic_peak_list)
Definition: qcpxic.cpp:274
pappso::XicWidget::xicPeakListChanged
void xicPeakListChanged(pappso::XicXicPeakPairList xic_peak_list) const
pappso::QCPXic::drawXicPeakBorders
void drawXicPeakBorders(unsigned int i, const Xic *xic_p, const pappso::TracePeak *p_xic_peak)
Definition: qcpxic.cpp:331
pappso
tries to keep as much as possible monoisotopes, removing any possible C13 peaks
Definition: aa.cpp:39
pappso::XicWidget::~XicWidget
~XicWidget()
Definition: xicwidget.cpp:55
pappso::XicWidget::clearXicPeakBorders
void clearXicPeakBorders()
Definition: xicwidget.cpp:254
pappso::XicWidget::setRetentionTimeInSeconds
void setRetentionTimeInSeconds()
Definition: xicwidget.cpp:171
pappso::XicWidget::addXicPeakList
void addXicPeakList(const Xic *xic_p, const std::vector< pappso::TracePeakCstSPtr > &xic_peak_list)
Definition: xicwidget.cpp:126
pappso::XicWidget::replotAll
void replotAll()
Definition: xicwidget.cpp:186
pappso::XicWidget::XicWidget
XicWidget(QWidget *parent=0)
Definition: xicwidget.cpp:41
pappso::QCPXic::addMsMsEvent
void addMsMsEvent(const Xic *xic_p, pappso::pappso_double rt)
Definition: qcpxic.cpp:237
pappso::QCPXic::clearXicPeakBorders
void clearXicPeakBorders()
Definition: qcpxic.cpp:393
pappso::XicWidget::addXicSp
void addXicSp(XicCstSPtr &xic_sp)
Definition: xicwidget.cpp:66
pappso::XicWidget::rtChangeEvent
void rtChangeEvent(pappso::pappso_double rt) const
Definition: xicwidget.cpp:138
GraphicDeviceWidget
Definition: graphicdevicewidget.h:37
pappso::XicCstSPtr
std::shared_ptr< const Xic > XicCstSPtr
Definition: xic.h:37
pappso::XicWidget::_qcp_xic
QCPXic * _qcp_xic
Definition: xicwidget.h:95
pappso::XicWidget::drawXicPeakBorders
void drawXicPeakBorders(pappso::TracePeakCstSPtr xic_peak)
Definition: xicwidget.cpp:224
pappso::XicWidget::xicClickEvent
void xicClickEvent(pappso::pappso_double rt, pappso::pappso_double intensity) const
Definition: xicwidget.cpp:216
pappso::QCPXic::addXicP
void addXicP(const Xic *xic_p)
Definition: qcpxic.cpp:183
pappso::XicWidget::setName
void setName(const Xic *xic_p, const QString &name)
Definition: xicwidget.cpp:80
pappso::XicWidget::clicked
void clicked(double rt, double intensity) const
announce mouse position on click (rt in seconds, intensity)
qcpxic.h
custom plot XIC
pappso::XicWidget::getXicCstSPtr
XicCstSPtr getXicCstSPtr(const Xic *xic_p) const
Definition: xicwidget.cpp:112
pappso::QCPXic::setName
void setName(const Xic *xic_p, const QString &name)
Definition: qcpxic.cpp:255
pappso::XicWidget::addMsMsEvent
void addMsMsEvent(const Xic *xic_p, pappso::pappso_double rt)
Definition: xicwidget.cpp:59
pappso::ExceptionNotFound
Definition: exceptionnotfound.h:32
pappso::XicWidget::getName
const QString & getName(const Xic *xic_p) const
Definition: xicwidget.cpp:73
pappso::XicWidget::_xic_sp_list
std::vector< XicCstSPtr > _xic_sp_list
Definition: xicwidget.h:93
pappso::XicWidget::_rt_in_seconds
bool _rt_in_seconds
Definition: xicwidget.h:88
pappso::QCPXic::clear
void clear()
Definition: qcpxic.cpp:263
pappso::XicWidget::plot
void plot()
Definition: xicwidget.cpp:89
pappso::QCPXic::rescale
void rescale()
Definition: qcpxic.cpp:214
pappso::XicWidget::rtChanged
void rtChanged(double rt) const
announce the current retention time (under mouse) in seconds
pappso::XicWidget::_map_xic_msms_event
std::map< const Xic *, pappso::pappso_double > _map_xic_msms_event
Definition: xicwidget.h:92
pappso::XicWidget::_xic_peak_sp_list
XicXicPeakPairList _xic_peak_sp_list
Definition: xicwidget.h:94
pappso::XicWidget::clear
void clear()
Definition: xicwidget.cpp:102
pappso::XicWidget::QCPXic
friend class QCPXic
Definition: xicwidget.h:80
pappso::XicWidget::setRetentionTimeInMinutes
void setRetentionTimeInMinutes()
Definition: xicwidget.cpp:178
xicwidget.h
plot a XIC