//Copyright 2017 Ryan Wick //This file is part of Bandage //Bandage 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. //Bandage 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 Bandage. If not, see . #ifndef SETTINGS_H #define SETTINGS_H #include #include #include "globals.h" #include #include "../graph/path.h" #include "scinot.h" class DeBruijnNode; class IntSetting { public: IntSetting(int v, int minimum, int maximum, bool isOn = true) {val = v; min = minimum; max = maximum; on = isOn;} IntSetting() {val = 0; min = 0; max = 0;} int val, min, max; bool on; operator int() const {return val;} IntSetting & operator=(int newVal) {val = newVal; return *this;} bool inRange(int v) const {return v >= min && v <= max;} }; class FloatSetting { public: FloatSetting(double v, double minimum, double maximum, bool isOn = true) {val = v; min = minimum; max = maximum; on = isOn;} FloatSetting() {val = 0.0; min = 0.0; max = 0.0;} double val, min, max; bool on; operator double() const {return val;} FloatSetting & operator=(double newVal) {val = newVal; return *this;} bool inRange(double v) const {return v >= min && v <= max;} }; class SciNotSetting { public: SciNotSetting(SciNot v, SciNot minimum, SciNot maximum, bool isOn = true) {val = v; min = minimum; max = maximum; on = isOn;} SciNotSetting() {val = 0.0; min = 0.0; max = 0.0;} SciNot val, min, max; bool on; operator SciNot() const {return val;} SciNotSetting & operator=(SciNot newVal) {val = newVal; return *this;} bool inRange(SciNot v) const {return v >= min && v <= max;} }; class Settings { public: Settings(); bool doubleMode; NodeLengthMode nodeLengthMode; double autoNodeLengthPerMegabase; FloatSetting manualNodeLengthPerMegabase; double meanNodeLength; double minTotalGraphLength; IntSetting graphLayoutQuality; bool linearLayout; FloatSetting minimumNodeLength; FloatSetting edgeLength; FloatSetting doubleModeNodeSeparation; FloatSetting nodeSegmentLength; FloatSetting componentSeparation; FloatSetting averageNodeWidth; FloatSetting depthEffectOnWidth; FloatSetting depthPower; FloatSetting edgeWidth; FloatSetting outlineThickness; double selectionThickness; double arrowheadSize; double arrowheadsInSingleMode; FloatSetting textOutlineThickness; int blastRainbowPartsPerQuery; GraphScope graphScope; IntSetting nodeDistance; bool startingNodesExactMatch; QString startingNodes; QString blastQueryFilename; QString unnamedQueryDefaultName; double minZoom; double minZoomOnGraphDraw; double maxZoom; double maxAutomaticZoom; double zoomFactor; double textZoomScaleFactor; // 1.0 = text size constant, regardless of zoom. 0.0 = text size changes exactly with zoom. double dragStrength; bool displayNodeCustomLabels; bool displayNodeNames; bool displayNodeLengths; bool displayNodeDepth; bool displayNodeCsvData; int displayNodeCsvDataCol; bool displayBlastHits; QFont labelFont; bool textOutline; bool antialiasing; bool positionTextNodeCentre; NodeDragging nodeDragging; QColor edgeColour; QColor outlineColour; QColor selectionColour; QColor textColour; QColor textOutlineColour; NodeColourScheme nodeColourScheme; QColor uniformPositiveNodeColour; QColor uniformNegativeNodeColour; QColor uniformNodeSpecialColour; IntSetting randomColourPositiveOpacity; IntSetting randomColourNegativeOpacity; IntSetting randomColourPositiveSaturation; IntSetting randomColourNegativeSaturation; IntSetting randomColourPositiveLightness; IntSetting randomColourNegativeLightness; IntSetting contiguitySearchSteps; QColor contiguousStrandSpecificColour; QColor contiguousEitherStrandColour; QColor maybeContiguousColour; QColor notContiguousColour; QColor contiguityStartingColour; QColor noBlastHitsColour; bool autoDepthValue; FloatSetting lowDepthValue; QColor lowDepthColour; FloatSetting highDepthValue; QColor highDepthColour; QColor pathHighlightShadingColour; QColor pathHighlightOutlineColour; QColor defaultCustomNodeColour; //These specify the range of overlaps to look for when Bandage determines //edge overlaps automatically. int minAutoFindEdgeOverlap; int maxAutoFindEdgeOverlap; //These control how Bandage finds the best path in the graph to represent //each BLAST query. Some of these settings can be turned on and off and //therefore have a corresponding bool value. IntSetting maxHitsForQueryPath; IntSetting maxQueryPathNodes; FloatSetting minQueryCoveredByPath; FloatSetting minQueryCoveredByHits; FloatSetting minMeanHitIdentity; SciNotSetting maxEValueProduct; FloatSetting minLengthPercentage; FloatSetting maxLengthPercentage; IntSetting minLengthBaseDiscrepancy; IntSetting maxLengthBaseDiscrepancy; //This holds the BLAST search parameters that a user can change before //running a BLAST search. QString blastSearchParameters; //These are the optional BLAST hit filters: whether or not they are used and //what their values are. IntSetting blastAlignmentLengthFilter; FloatSetting blastQueryCoverageFilter; FloatSetting blastIdentityFilter; SciNotSetting blastEValueFilter; FloatSetting blastBitScoreFilter; //These are used for the 'Depth range' graph scope. FloatSetting minDepthRange; FloatSetting maxDepthRange; }; #endif // SETTINGS_H