Skip to content
Snippets Groups Projects
project.cpp 4.30 KiB

/*******************************************************************************
* Copyright (c) 2015 Olivier Langella <Olivier.Langella@moulon.inra.fr>.
*
* 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:
*     Olivier Langella <Olivier.Langella@moulon.inra.fr> - initial API and implementation
******************************************************************************/
#include "project.h"
#include "../input/xpipsaxhandler.h"
#include "peptidematch.h"
#include "proteinmatch.h"

Project::Project()
{

}

Project::~Project()
{
    auto it = _identification_goup_list.begin();
    while (it != _identification_goup_list.end()) {
        delete (*it);
        it++;
    }
}

bool Project::checkPsimodCompliance() const {
    return _peptide_store.checkPsimodCompliance();
}
void Project::readResultFile(QString filename) {
    IdentificationDataSourceSp ident_source = _identification_data_source_store.getInstance(filename);

    ident_source.get()->parseTo(this);
}

bool Project::isCombineMode() const {
    return _is_combine_mode;
}
void Project::setCombineMode(bool is_combine_mode) {
    _is_combine_mode = is_combine_mode;
}
std::vector<IdentificationGroup *> Project::getIdentificationGroupList() {
    return _identification_goup_list;
}

const std::vector<IdentificationGroup *> Project::getIdentificationGroupList() const {
    return _identification_goup_list;
}
const GroupingType Project::getGroupingType() const {
    return _grouping_type;
}

FastaFileStore & Project::getFastaFileStore() {
    return _fasta_file_store;
}
MsRunStore & Project::getMsRunStore() {
    return _msrun_store;
}
PeptideStore & Project::getPeptideStore() {
    return _peptide_store;
}

ProteinStore & Project::getProteinStore() {
    return _protein_store;
}

IdentificationDataSourceStore & Project::getIdentificationDataSourceStore() {
    return _identification_data_source_store;
}
const AutomaticFilterParameters & Project::getAutomaticFilterParameters() const {
    return _automatic_filter_parameters;
}
void Project::updateAutomaticFilters(const AutomaticFilterParameters & automatic_filter_parameters) {
    _automatic_filter_parameters = automatic_filter_parameters;
    for (auto & p_id_group : _identification_goup_list) {
        p_id_group->updateAutomaticFilters(_automatic_filter_parameters);
    }

}
ProjectSp Project::makeProjectSp() const {
    return std::make_shared<Project>(*this);
}

IdentificationGroup* Project::newIdentificationGroup() {
    _p_current_identification_group =  new IdentificationGroup(this);
    _identification_goup_list.push_back(_p_current_identification_group);
    return _p_current_identification_group;
}
void Project::readXpipFile(QFileInfo xpip_fileinfo) {
    qDebug() << "Project::readXpipFile begin";

    XpipSaxHandler * parser = new XpipSaxHandler(this);

    QXmlSimpleReader simplereader;
    simplereader.setContentHandler(parser);
    simplereader.setErrorHandler(parser);

    qDebug() << "Read XPIP XML result file '" << xpip_fileinfo.absoluteFilePath() << "'";

    QFile qfile(xpip_fileinfo.absoluteFilePath());
    QXmlInputSource xmlInputSource(&qfile);

    if (simplereader.parse(xmlInputSource)) {

        qfile.close();
    } else {
        qDebug() << parser->errorString();
        // throw PappsoException(
        //    QObject::tr("error reading tandem XML result file :\n").append(
        //         parser->errorString()));

        qfile.close();

        throw pappso::PappsoException(QObject::tr("Error reading %1 XPIP file :\n %2").arg(xpip_fileinfo.absoluteFilePath()).arg(parser->errorString()));
    }

}


void Project::startGrouping() {
    for (auto & p_id_group : _identification_goup_list) {
        p_id_group->startGrouping(_grouping_type);
    }

}