void EnPartCntSample::Init(pdb_setup::Atoms const& atoms,
                           config_setup::Output const& output)
{
   InitVals(output.statistics.settings.hist);
   if (enableOut)
   {
      stepsPerSample = output.state.files.hist.stepsPerHistSample;
      uint samplesPerFrame =
	 output.statistics.settings.hist.frequency / stepsPerSample + 1;
      samplesCollectedInFrame = 0;
      for (uint b = 0; b < BOXES_WITH_U_NB; ++b)
      {
         name[b] = GetFName(output.state.files.hist.sampleName,
                            output.state.files.hist.number,
                            output.state.files.hist.letter,
                            b);
         samplesE[b] = new double [samplesPerFrame];
         samplesN[b] = new uint * [var->numKinds];
         for (uint k = 0; k < var->numKinds; ++k)
         {
            samplesN[b][k] = new uint [samplesPerFrame];
         }
	 outF[b].open(name[b].c_str(), std::ofstream::out);
      }
      WriteHeader();
   }
}
Exemple #2
0
void CRusSemStructure::BuildBlackBoxCollocs(long ClauseNo, size_t SetNo)
{
	SetNodeToDeleteFalse();

	// идем по всем словосочетаниям, которые нужно построить
	for (long i=0; i <m_ClauseSetCollocHyps[ClauseNo][SetNo].size(); i++)
	{
		const CSemCollocHyp& H = m_ClauseSetCollocHyps[ClauseNo][SetNo][i];
		CColloc& Colloc = m_pData->m_RusCollocs[H.m_CollocNo];
		if (!Colloc.IsBlackBox) continue;
		CRusSemNode N;
		N.m_ClauseNo = ClauseNo;
		N.SetMainWordNo(-1);
		bool	IsClauseSyntaxTop = false;


		for (long k=0; k <H.m_Coords.size(); k++)
		{
			long NodeNo = FindNodeByWordNo(H.m_Coords[k].m_WordNo, ClauseNo);
			IsClauseSyntaxTop |= (m_Clauses[ClauseNo].m_ClauseSyntaxTop == NodeNo);
			assert (NodeNo != -1);
			assert (m_Nodes[NodeNo].IsPrimitive());
			bool bMainItem = (Colloc.m_SemMainWord-1  == H.m_Coords[k].m_CollocItemNo) 
					||	( (k ==0) && (Colloc.m_SemMainWord == -1));
			{
				CRusSemWord W = m_Nodes[NodeNo].m_Words[0];

				//  adding prepositon for the synthesis and for a better format
				string Prep = GetPrepOrConjOfNode(m_Nodes[NodeNo]);
				if (!Prep.empty() && !bMainItem  )
					W.m_Word =  Prep+" "+W.m_Word;
				N.m_Words.push_back(W);
			};
			// если это главное слово, то нужно изменить характеристики всего словосочетания
			// если главного слова нет, тогда нужно взять характеристики от первого слова словосочетания
			if	(bMainItem)
			{
				N.SetMainWordNo(k);
				N.SetGrammems ( m_Nodes[NodeNo].m_Words[0].GetAllGrammems() );
				string debug =  m_pData->GetRusGramTab()->GrammemsToStr( m_Nodes[NodeNo].m_Words[0].GetAllGrammems() );
				N.m_GramCodes =  m_Nodes[NodeNo].m_GramCodes;
				N.m_SynReal.m_Preps = m_Nodes[NodeNo].m_SynReal.m_Preps;
				m_pData->GetPrepsFromArticle (GetRoss(CollocRoss), m_pData->m_RusCollocs[H.m_CollocNo].UnitNo, 0, k, N.m_SynReal.m_Preps);
				if ( k==0)
				{
					N.m_RelOperators=m_Nodes[NodeNo].m_RelOperators;
				};
			};
			// удаляем примитивный узел
			assert (CanBeDeleted(NodeNo));
			m_Nodes[NodeNo].m_bToDelete = true;;
		};
		N.AddInterp( CDictUnitInterp(GetRossHolder(CollocRoss), CollocRoss,m_pData->m_RusCollocs[H.m_CollocNo].UnitNo, false,false) );
		InitVals(N);
		long OldNodeNo = FindNodeByWordNo(N.m_Words[N.m_MainWordNo].m_WordNo, ClauseNo);
		//сохраняю синтаксические отношения, которые былит приписаны  OldNodeNo
		// в виртуальный узел -2 (-1 используется как ошибка)
		MoveSynRelations(OldNodeNo, -2);
		//удаляю примитивные узлы, из которых состоит словосочетание, в том числе и  OldNodeNo
		DelNodesToDelete();
		// строю новый узел со словосочетанием, куда вошли только что удаленные,
		// а удалить их нужно было, поскольку  функция InsertNode не может добавить узел, который
		// по словам пересекается с другим существующим уже узлом
		long nd = InsertNode(N);
		// теперь вспоминаем синтаксические отношения, приписанные  OldNodeNo
		MoveSynRelations(-2, nd);

		if (IsClauseSyntaxTop)
			m_Clauses[ClauseNo].m_ClauseSyntaxTop = nd;

	};

};