20#include <QtGui/QColor>
21#include <QtGui/QFontMetricsF>
29 template <
class DataPo
int>
48 Annotation1DPeakItem(
const DataPoint& peak_position,
const QString& text,
const QColor& color,
int charge = 0) :
60 void draw(
Plot1DCanvas*
const canvas, QPainter& painter,
bool flipped =
false)
override
66 QPoint position_widget, peak_position_widget;
73 const QFontMetricsF fm(QApplication::font());
74 const auto prebox = fm.boundingRect(QRectF(position_widget.x(), position_widget.y(), 0, 0), Qt::AlignCenter,
getText());
83 bounding_box_ = fm.boundingRect(QRectF(position_widget.x(), position_widget.y(), 0, 0), Qt::AlignCenter,
getText());
87 if ((position_widget - peak_position_widget).manhattanLength() > 2)
93 painter.setPen(Qt::DashLine);
94 painter.drawLine(peak_position_widget, border_point);
100 QString text =
text_;
101 if (!text.contains(
"<\\"))
105 QRegularExpression reg_exp(R
"(([abcdwxyz])(\d+))");
106 QRegularExpressionMatch match = reg_exp.match(text);
107 if (text.indexOf(reg_exp) == 0)
109 text.replace(reg_exp,
"\\1<sub>\\2</sub>");
113 QRegularExpression reg_exp_xlms(R
"((ci|xi)[$][abcxyz](\d+))");
114 auto match_pos = text.indexOf(reg_exp_xlms);
115 if ((match_pos == 6) || (match_pos == 7))
120 QString charge_str = match.captured(2);
122 text = text.left(match_pos) + QString(
"<sub>") + charge_str + QString(
"</sub>") + text.right(text.size() - match_pos - charge_str.size());
128 text.replace(
"H2O1",
"H<sub>2</sub>O");
129 text.replace(
"H2O",
"H<sub>2</sub>O");
130 text.replace(
"NH3",
"NH<sub>3</sub>");
131 text.replace(
"H3N1",
"NH<sub>3</sub>");
132 text.replace(
"C1H4O1S1",
"H<sub>4</sub>COS");
135 text.replace(
"H3PO4",
"H<sub>3</sub>PO<sub>4</sub>");
136 text.replace(
"HPO3",
"HPO<sub>3</sub>");
137 text.replace(
"C3O",
"C<sub>3</sub>O");
147 const long long magnitude = (
charge_ < 0) ? -
static_cast<long long>(
charge_) :
static_cast<long long>(
charge_);
150 const QString sup = QString(
"<sup>") + QString::number(magnitude) + ((
charge_ < 0) ?
"-" :
"+") + QString(
"</sup>");
151 static const QRegularExpression first_break(R
"([\r\n])");
152 const int eol = text.indexOf(first_break);
153 text.insert((eol < 0) ? text.size() : eol, sup);
158 QRegularExpression charge_rx(R
"([\+|\-](\d+)$)");
159 int match_pos = text.indexOf(charge_rx);
162 text = text.left(match_pos) + QString(
"<sup>") + text[match_pos]
163 + charge_rx.match(text).captured(1) + QString(
"</sup>");
167 charge_rx = QRegularExpression(R
"((\d+)[\+|\-]$)");
168 match_pos = text.indexOf(charge_rx);
171 auto charge_match = charge_rx.match(text).captured(1);
172 text = text.left(match_pos) + QString(
"<sup>") + charge_match
173 + text[match_pos + charge_match.size()] + QString(
"</sup>");
176 text.replace(QRegularExpression(R
"(\+\+$)"), "<sup>2+</sup>");
177 text.replace(QRegularExpression(R
"(\+$)"), "");
178 text.replace(QRegularExpression(R
"(\-\-$)"), "<sup>2-</sup>");
179 text.replace(QRegularExpression(R
"(\-$)"), "");
182 text =
"<font color=\"" +
color_.name() +
"\">" + text +
"</font>";
189 double w = td.size().width();
190 double h = td.size().height();
191 painter.translate(position_widget.x() - w / 2, position_widget.y() - h / 2);
192 td.drawContents(&painter);
252 QString peak_anno = this->
getText().trimmed();
261 static const QRegularExpression line_break(R
"(\r\n|[\r\n])");
262 QStringList lines = peak_anno.split(line_break, Qt::KeepEmptyParts);
263 if (lines.size() > 1)
265 peak_anno = lines[0];
280 const int tmp_charge = (named_charge != 0) ? named_charge :
charge_;
286 for (
int l = 1; l < lines.size(); ++l)
288 peak_anno.append(
"\n").append(lines[l]);
An abstract class acting as an interface for the different 1D annotation items.
Definition Annotation1DItem.h:38
QRectF bounding_box_
The current bounding box of this item on the canvas where it has last been drawn.
Definition Annotation1DItem.h:85
QString text_
The displayed text.
Definition Annotation1DItem.h:91
void drawBoundingBox_(QPainter &painter)
Draws the bounding_box_.
bool selected_
Determines whether this item is currently selected on the canvas.
Definition Annotation1DItem.h:88
const QString & getText() const
Returns the text of the item.
A peak annotation item.
Definition Annotation1DPeakItem.h:32
~Annotation1DPeakItem() override=default
Destructor.
const DataPoint & getPeakPosition() const
Returns the position of the annotated peak.
Definition Annotation1DPeakItem.h:225
Annotation1DItem * clone() const override
Creates a copy of the item on the heap and returns a pointer.
Definition Annotation1DPeakItem.h:296
void draw(Plot1DCanvas *const canvas, QPainter &painter, bool flipped=false) override
Draws the item on painter.
Definition Annotation1DPeakItem.h:60
const DataPoint & getPosition() const
Returns the position of the label (peak)
Definition Annotation1DPeakItem.h:219
Annotation1DPeakItem(const DataPoint &peak_position, const QString &text, const QColor &color, int charge=0)
Constructor.
Definition Annotation1DPeakItem.h:48
QColor color_
The color of the label.
Definition Annotation1DPeakItem.h:309
Annotation1DPeakItem(const Annotation1DPeakItem &rhs)=default
Copy constructor.
void ensureWithinDataRange(Plot1DCanvas *const canvas, const int layer_index) override
Ensures that the item has coordinates within the visible area of the canvas.
Definition Annotation1DPeakItem.h:231
PeptideHit::PeakAnnotation toPeakAnnotation() const
Convert the 'text()' to a Peptide::PeakAnnotation.
Definition Annotation1DPeakItem.h:249
DataPoint peak_position_
The position of the anchor (e.g. the Peak1D)
Definition Annotation1DPeakItem.h:303
void setColor(const QColor &color)
Set the color of the label.
Definition Annotation1DPeakItem.h:237
void setPosition(const DataPoint &position)
Sets the position of the label.
Definition Annotation1DPeakItem.h:213
int charge_
Charge of the annotated peak when its name does not spell one out; 0 if unknown or already named.
Definition Annotation1DPeakItem.h:312
void move(const PointXYType delta, const Gravitator &, const DimMapper< 2 > &dim_mapper) override
Moves the item on the drawing canvas; behavior depends on item type and is implemented in the subclas...
Definition Annotation1DPeakItem.h:205
const QColor & getColor() const
Returns the color of the label.
Definition Annotation1DPeakItem.h:243
DataPoint position_
The position of the label (e.g. the Peak1D)
Definition Annotation1DPeakItem.h:306
DPosition & abs() noexcept
Make all dimension values positive.
Definition DPosition.h:113
Allows dynamical switching (at runtime) between a dimension (RT, m/z, int, IM, etc) and X,...
Definition DimMapper.h:662
void fromXY(const DRange< N_DIM > &in, RangeManager< Ranges... > &output) const
Definition DimMapper.h:752
Point map(const T &data) const
convert an OpenMS datatype (such as Feature) to an N_DIM-dimensional point
Definition DimMapper.h:716
Manipulates X or Y component of points in the X-Y plane, by assuming one axis (either X or Y axis) ha...
Definition Plot1DCanvas.h:43
QPoint gravitateZero(QPoint p) const
Definition Plot1DCanvas.h:205
Gravitator swap() const
Swap gravity axis (from X to Y, or vice versa)
Definition Plot1DCanvas.h:109
Canvas for visualization of one or several spectra.
Definition Plot1DCanvas.h:296
void dataToWidget(const DPosition< 2 > &peak, QPoint &point, bool flipped=false)
For convenience - calls dataToWidget.
void pushIntoDataRange(T &data_point, const int layer_index)
Pushes a data point back into the valid data range of the current layer area. Useful for annotation i...
Definition Plot1DCanvas.h:435
const Gravitator & getGravitator() const
Get gravity manipulation object to apply gravity to points.
Definition Plot1DCanvas.h:511
PointXYType widgetToDataDistance(double x, double y)
compute distance in data coordinates (unit axis as shown) when moving x/y pixel in chart/widget coord...
Definition Plot1DCanvas.h:413
const DimMapper< 2 > & getMapper() const
Get Mapper to translate between values for axis (X/Y) and units (m/z, RT, intensity,...
QPointF intersectionPoint(const QRectF &rect, const QPointF &p)
Find the point on a rectangle where a ray/line from a point p to its center would intersect at.
int chargeFromName(const std::string &ion_name)
The charge an ion name spells out, or 0 if it does not spell one.
Definition IonNaming.h:78
Main OpenMS namespace.
Definition openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19
std::string fromQString(const QString &s)
Construct std::string from QString (replaces StringUtils::toStr(const QString&))
Definition Qt5Port.h:46
Contains annotations of a peak.
Definition PeptideHit.h:87
double intensity
Definition PeptideHit.h:91
double mz
Definition PeptideHit.h:90
std::string annotation
Definition PeptideHit.h:88
int charge
Definition PeptideHit.h:89