Exemplo n.º 1
0
bool
KnobSerialization::checkForDefaultValueNode(const YAML::Node& node, const std::string& nodeType, bool dataTypeSet)
{
    std::string defaultString("Default");
    std::string defaultTypeName = defaultString + nodeType;
    if (!node[defaultTypeName]) {
        return false;
    }

    // If the _dataType member was set in checkForValueNode, ensure that the data type of the value is the same as
    // the default value.
    if (dataTypeSet) {
        SerializationValueVariantTypeEnum type = dataTypeFromString(nodeType);
        if (type != _dataType) {
            throw std::invalid_argument(_scriptName + ": Default value and value type differ!");
        }
    } else {
        _dataType = dataTypeFromString(nodeType);
    }


    YAML::Node defNode = node[defaultTypeName];
    int nDims = defNode.IsSequence() ? defNode.size() : 1;
    _defaultValues.resize(nDims);
    for (int i = 0; i < nDims; ++i) {
        _defaultValues[i].serializeDefaultValue = true;
        YAML::Node dimNode = defNode.IsSequence() ? defNode[i] : defNode;
        decodeValueFromNode(dimNode, _defaultValues[i].value, _dataType);
    }

    return true;
}
Exemplo n.º 2
0
//--------------------------------------------------
// THE SEQUENCE BASED NJ ALGO
//
//
void
computeSequenceBasedNJ(std::vector<Sequence> &seqs, SequenceTree &resultTree){

  // 1. Create a star tree with the leafs being the input sequences in b128 format.
  DNA_b128_String defaultString(seqs[0].seq.size());
  b128Tree tree(defaultString);
  b128Tree::Node *root = tree.getRoot();
  obj_ptr2obj_ptr_hashmap node2seqs((size_t)(seqs.size()*1.5));
  b128Tree::NodeVector leafs;
  for ( size_t i = 0 ; i < seqs.size()  ; i++ ){
    b128Tree::Node *leaf = root->addChild(defaultString);
    node2seqs[leaf] = &(seqs[i]);
    leafs.push_back(leaf);
    (leaf->data).append(seqs[i].seq);
  }
  
  // 2. Compute the DistanceMatrix for the seqs.
  b128Matrix dm(seqs.size());
  for ( size_t i = 0 ; i < leafs.size() ; i++ ){
    dm.setIdentifier(i,leafs[i]);
  }

  fillMatrix(dm);

  //std::cout << dm << std::endl;
  // 3. COMPUTE ROW SUMS
  double rowSums[dm.getSize()];
  for ( size_t row = 0 ; row < dm.getSize() ; row++ ){
    double sum = 0;
    size_t i =0;
    for ( ; i < dm.getSize() ; i++ )
      sum += dm.getDistance(row,i);

    rowSums[row] = sum;
  }

  //----------------
  // 4. 
  // NJ ITERATION
  //compute the row sums

  while ( dm.getSize() > 3 ) {

    //FIND MIN PAIR
    //find the minimal value
    double minVal = FLT_MAX;
    size_t mini = 1000000;
    size_t minj = 1000000;
    for ( size_t i = 0 ; i < dm.getSize() ; i++ ){
      for ( size_t j = i+1 ; j < dm.getSize() ; j++ ){
        double newVal = (dm.getSize() - 2.0)*dm.getDistance(i,j) - rowSums[i] - rowSums[j];
        //std::cout << newVal << " , ";
        if ( newVal < minVal ){
          minVal = newVal;
          mini = i;
          minj = j;
        }
      }
    }
    //    std::cout << std::endl;
    //PRINT(minVal);
    //make sure that minj is the last row in the matrix
    if ( mini == dm.getSize() -1 ){
      mini = minj;
    }
    else {
      dm.swapRowToLast(minj);
      double tmp = rowSums[dm.getSize()-1];
      rowSums[dm.getSize()-1] = rowSums[minj];
      rowSums[minj] = tmp;
    }
    minj = dm.getSize()-1;

    //CLUSTER THE LEAFS
    DNA_b128_String &child1str = dm.getIdentifier(mini)->data;
    DNA_b128_String &child2str = dm.getIdentifier(minj)->data;
    b128Tree::Node *parent = dm.getIdentifier(mini)->getTree()->detachFromParentAndAddAsSiblings(dm.getIdentifier(mini),dm.getIdentifier(minj), defaultString);
    dm.setIdentifier(mini, parent);

    //COMPUTE PARSIMONY AND SET IN PARENT
    DNA_b128_String &parentstr = parent->data;
    DNA_b128_String::create_weighted_parsimonious(parentstr,child1str,child2str);
    //COMPUTE DISTANCES FROM PARENT TO ALL OTHER NODES
    //PRINT(mini);PRINT(minj);
    for ( size_t i = 0 ; i < dm.getSize()-1 ; i++ ){//skip last row
      double dist2iandj = dm.getDistance(mini,i) + dm.getDistance(minj,i);
      DNA_b128_String &leafstr = dm.getIdentifier(i)->data;
      double dist = computeK2PDistance(parentstr,leafstr);
      // regular nj update function:
      //double regnj = dist2iandj * 0.5; 
      //double studier = (dist2iandj-dm.getDistance(mini,minj))*0.5;
      //PRINT(dist); PRINT(regnj);PRINT(dist2iandj);PRINT(dist-regnj);PRINT(dist-studier);
      //PRINT(dist - dm.getDistance(mini,i) );PRINT(dist - dm.getDistance(minj,i) );
      
      dm.setDistance(mini,i, dist); 
    
      //update rowsums
      rowSums[i] = rowSums[i] - dist2iandj + dm.getDistance(mini,i);
      //PRINT(rowSums[i]);
    }

    dm.setDistance(mini,mini,0);
    
    //remove the last row of the matrix
    dm.removeLastRow();
    
    //recompute the row sum for the parent
    double sum = 0;
    for ( size_t i = 0 ; i < dm.getSize() ; i++ )
      sum += dm.getDistance(mini,i);
    rowSums[mini] = sum;

  }
  //END ITERATION
  //----------------------------------

  
  //CONVERT THE TREE TO A SEQUENCE TREE
  tree.recalcNodeStructure();
  //  tree.drawTree(std::cout);
  b128Tree::NodeVector leafnodes;
  tree.addLeafs(leafnodes);

  Sequence_double dummy;
  dummy.dbl = -1;
  resultTree = SequenceTree(tree,dummy);

  SequenceTree::NodeVector seqnodes;
  resultTree.addLeafs(seqnodes);
  
  for ( size_t i = 0 ; i < seqnodes.size() ; i++ ){
    seqnodes[i]->data.s = *((Sequence *) node2seqs[leafnodes[i]]);
  }
  //resultTree.drawTree(std::cout);
}
Exemplo n.º 3
0
 void testString() {
   clang_analyzer_eval(defaultString("xyz") == 'y'); // expected-warning{{TRUE}}
   clang_analyzer_eval(defaultString() == 'b'); // expected-warning{{TRUE}}
 }
Exemplo n.º 4
0
 ParserStringItem::ParserStringItem(const Json::JsonObject& jsonConfig) : ParserItem(jsonConfig) {
     if (jsonConfig.has_item("default")) 
         setDefault( jsonConfig.get_string("default") );
     else
         m_default = defaultString();
 }
Exemplo n.º 5
0
 ParserStringItem::ParserStringItem(const std::string& itemName, ParserItemSizeEnum sizeType) : ParserItem(itemName, sizeType) {
     m_default = defaultString();
 }
Exemplo n.º 6
0
 ParserStringItem::ParserStringItem(const std::string& itemName) : ParserItem(itemName) {
     m_default = defaultString();
 }