Home  · Classes  · Annotated Classes  · Modules  · Members  · Namespaces  · Related Pages

LayerStatisticsDialog.h

Go to the documentation of this file.
00001 // --------------------------------------------------------------------------
00002 //                   OpenMS -- Open-Source Mass Spectrometry
00003 // --------------------------------------------------------------------------
00004 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
00005 // ETH Zurich, and Freie Universitaet Berlin 2002-2012.
00006 //
00007 // This software is released under a three-clause BSD license:
00008 //  * Redistributions of source code must retain the above copyright
00009 //    notice, this list of conditions and the following disclaimer.
00010 //  * Redistributions in binary form must reproduce the above copyright
00011 //    notice, this list of conditions and the following disclaimer in the
00012 //    documentation and/or other materials provided with the distribution.
00013 //  * Neither the name of any author or any participating institution
00014 //    may be used to endorse or promote products derived from this software
00015 //    without specific prior written permission.
00016 // For a full list of authors, refer to the file AUTHORS.
00017 // --------------------------------------------------------------------------
00018 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00019 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
00022 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00023 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00024 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
00025 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
00026 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
00027 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
00028 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00029 //
00030 // --------------------------------------------------------------------------
00031 // $Maintainer: Timo Sachsenberg $
00032 // $Authors: Marc Sturm $
00033 // --------------------------------------------------------------------------
00034 
00035 
00036 #ifndef OPENMS_VISUAL_DIALOGS_LAYERSTATISTICSDIALOG_H
00037 #define OPENMS_VISUAL_DIALOGS_LAYERSTATISTICSDIALOG_H
00038 
00039 #include <OpenMS/VISUAL/DIALOGS/UIC/ui_LayerStatisticsDialog.h>
00040 #include <OpenMS/VISUAL/LayerData.h>
00041 
00042 #include <QtGui/QPushButton>
00043 
00044 #include <utility>
00045 #include <map>
00046 
00047 namespace OpenMS
00048 {
00049   class SpectrumWidget;
00050   class SpectrumCanvas;
00051 
00057   class OPENMS_GUI_DLLAPI LayerStatisticsDialog :
00058     public QDialog,
00059     public Ui::LayerStatisticsDialogTemplate
00060   {
00061     Q_OBJECT
00062 
00063 public:
00064 
00066     LayerStatisticsDialog(SpectrumWidget * parent);
00067 
00068 protected slots:
00069 
00071     void showDistribution_();
00072 
00073 protected:
00074 
00078     struct MetaStatsValue_
00079     {
00080       MetaStatsValue_(unsigned long c = 0, DoubleReal mi = 0, DoubleReal ma = 0, DoubleReal a = 0)
00081       {
00082         count = c;
00083         min = mi;
00084         max = ma;
00085         avg = a;
00086       }
00087 
00088       unsigned long count;
00089       DoubleReal min, max, avg;
00090     };
00091 
00093     typedef LayerData::ExperimentType::SpectrumType::ConstIterator PeakIterator_;
00095     typedef LayerData::FeatureMapType::ConstIterator FeatureIterator_;
00097     typedef LayerData::ConsensusMapType::ConstIterator ConsensusIterator_;
00099     typedef std::map<UInt, MetaStatsValue_>::iterator MetaIterator_;
00100 
00102     void computePeakStats_();
00104     void computeFeatureStats_();
00106     void computeConsensusStats_();
00108     template <typename MetaDataIterator>
00109     void computeMetaDataArrayStats_(MetaDataIterator begin, MetaDataIterator end);
00111     void bringInMetaStats_(const MetaInfoInterface & meta_interface);
00113     void computeMetaAverages_();
00114 
00116     std::map<UInt, MetaStatsValue_> meta_stats_;
00118     std::map<String, MetaStatsValue_> meta_array_stats_;
00120     SpectrumCanvas * canvas_;
00122     LayerData layer_data_;
00124     DoubleReal min_intensity_;
00126     DoubleReal max_intensity_;
00128     DoubleReal avg_intensity_;
00130     DoubleReal min_charge_;
00132     DoubleReal max_charge_;
00134     DoubleReal avg_charge_;
00136     DoubleReal min_quality_;
00138     DoubleReal max_quality_;
00140     DoubleReal avg_quality_;
00142     DoubleReal min_elements_;
00144     DoubleReal max_elements_;
00146     DoubleReal avg_elements_;
00147 
00148 private:
00150     LayerStatisticsDialog();
00151 
00152   };
00153 
00154   template <typename MetaDataIterator>
00155   void LayerStatisticsDialog::computeMetaDataArrayStats_(MetaDataIterator begin, MetaDataIterator end)
00156   {
00157     for (MetaDataIterator meta_array_it = begin; meta_array_it != end; meta_array_it++)
00158     {
00159       String meta_name = meta_array_it->getName();
00160       MetaStatsValue_ meta_stats_value;
00161       std::map<String, MetaStatsValue_>::iterator it = meta_array_stats_.find(meta_name);
00162       if (it != meta_array_stats_.end())       // stats about this meta name already exist -> bring this value in
00163       {
00164         meta_stats_value = it->second;
00165         for (typename MetaDataIterator::value_type::const_iterator value_it = meta_array_it->begin(); value_it != meta_array_it->end(); value_it++)
00166         {
00167           Real value = *value_it;
00168           meta_stats_value.count++;
00169           if (value < meta_stats_value.min)
00170           {
00171             meta_stats_value.min = value;
00172           }
00173           else if (value > meta_stats_value.max)
00174           {
00175             meta_stats_value.max = value;
00176           }
00177           meta_stats_value.avg += value;
00178         }
00179         it->second = meta_stats_value;
00180       }
00181       else if (meta_array_it->size() > 0)    // meta name has not occurred before, create new stats for it:
00182       {
00183         Real init_value = *(meta_array_it->begin());
00184         meta_stats_value = MetaStatsValue_(0, init_value, init_value, 0);
00185         for (typename MetaDataIterator::value_type::const_iterator value_it = meta_array_it->begin(); value_it != meta_array_it->end(); value_it++)
00186         {
00187           Real value = *value_it;
00188           meta_stats_value.count++;
00189           if (value < meta_stats_value.min)
00190           {
00191             meta_stats_value.min = value;
00192           }
00193           else if (value > meta_stats_value.max)
00194           {
00195             meta_stats_value.max = value;
00196           }
00197           meta_stats_value.avg += value;
00198         }
00199         meta_array_stats_.insert(make_pair(meta_name, meta_stats_value));
00200       }
00201     }
00202   }
00203 
00204 }
00205 #endif // OPENMS_VISUAL_DIALOGS_LAYERSTATISTICSDIALOG_H

OpenMS / TOPP release 1.10.0 Documentation generated on Thu Mar 7 2013 09:42:40 using doxygen 1.7.1