示例#1
0
void TBowMd::SaveTxtCfy(const PSOut& SOut, const TFltStrPrV& WgtCatNmPrV){
  for (int WCPrN=0; WCPrN<WgtCatNmPrV.Len(); WCPrN++){
    double Wgt=WgtCatNmPrV[WCPrN].Val1;
    TStr CatNm=WgtCatNmPrV[WCPrN].Val2;
    //printf("%d. %.3f '%s'\n", 1+WCPrN, Wgt, CatNm.CStr());
    TChA Ln;
    Ln+=TInt::GetStr(1+WCPrN, "%d.");
    Ln+=TFlt::GetStr(Wgt, " %.3f");
    Ln+=TStr::GetStr(CatNm, " '%s'");
    SOut->PutStr(Ln); SOut->PutLn();
  }
}
示例#2
0
文件: wbmp.cpp 项目: Accio/snap
/////////////////////////////////////////////////
// Wireless-BMP
void TWbmp::PutMultiByteInt(const PSOut& SOut, const uint& Val){
  if (Val<128){
    SOut->PutCh(uchar(Val));
  } else
  if (Val<128*128){
    uchar MsCh=uchar(Val/128); MsCh+=uchar(128);
    uchar LsCh=uchar(Val%128);
    SOut->PutCh(MsCh);
    SOut->PutCh(LsCh);
  } else {
    Fail;
  }
}
示例#3
0
文件: wbmp.cpp 项目: Accio/snap
void TWbmp::SaveWbmp(const PSOut& SOut) const {
  // write header
  SOut->PutCh(uchar(0)); // TypeField
  SOut->PutCh(uchar(0)); // FixHeaderField
  PutMultiByteInt(SOut, GetWidth()); // Width
  PutMultiByteInt(SOut, GetHeight()); // Height
  // write bitmap
  for (int Y=0; Y<GetHeight(); Y++){
    TB8Set BSet; int X=0;
    while (X<GetWidth()){
      if (GetPxVal(X,Y)){BSet.Incl(7-X%8);}
      X++;
      if (X%8==0){SOut->PutCh(BSet.GetUCh()); BSet=0;}
    }
    if (X%8!=0){SOut->PutCh(BSet.GetUCh());}
  }
}
示例#4
0
void TCpDoc::SaveForNlpWin(const PSOut& SOut){
  SOut->PutStr("DocId:");
  SOut->PutStr(DocNm); SOut->PutLn();
  SOut->PutStr(HeadlineStr); SOut->PutLn();
  for (int ParStrN=0; ParStrN<ParStrV.Len(); ParStrN++){
    SOut->PutStr(ParStrV[ParStrN]); SOut->PutLn();
  }
}
示例#5
0
void TBowMd::SaveXmlCfy(const PSOut& SOut, const TFltStrPrV& WgtCatNmPrV){
  SOut->PutStr("<Classification>"); SOut->PutLn();
  for (int WCPrN=0; WCPrN<WgtCatNmPrV.Len(); WCPrN++){
    double Wgt=WgtCatNmPrV[WCPrN].Val1;
    TStr CatNm=WgtCatNmPrV[WCPrN].Val2;
    //printf("%d. %.3f '%s'\n", 1+WCPrN, Wgt, CatNm.CStr());
    SOut->PutStr("<Category ");
    TChA Ln;
    Ln+=TInt::GetStr(1+WCPrN, "Rank=\"%d\"");
    Ln+=TFlt::GetStr(Wgt, " Weight=\"%.3f\"");
    Ln+=TStr::GetStr(CatNm, " Category=\"%s\"");
    SOut->PutStr(Ln);
    SOut->PutStr("/>"); SOut->PutLn();
  }
  SOut->PutStr("</Classification>"); SOut->PutLn();
}
void TTransCorpus::SaveTxt(const TStr& OutFBase, const TStr& OutOrgFNm, 
        const TStr& OutTransFNm, const TStr& OutRefTransFNm, TStrV& OrgFNmV, 
        TStrV& TransFNmV, TStrV& RefTransFNmV, const int& LinesPerFile) {
    
    // prepare filenames
    OrgFNmV.Clr(); TransFNmV.Clr(); RefTransFNmV.Clr();
    if (!OutOrgFNm.Empty()) { OrgFNmV.Add(GetOutFNm(OutFBase, 0, LinesPerFile, OutOrgFNm)); }
    if (!OutTransFNm.Empty()) { TransFNmV.Add(GetOutFNm(OutFBase, 0, LinesPerFile, OutTransFNm)); }
    if (!OutRefTransFNm.Empty()) { RefTransFNmV.Add(GetOutFNm(OutFBase, 0, LinesPerFile, OutRefTransFNm)); }
    // open files
    PSOut OrgSOut = !OutOrgFNm.Empty() ? TFOut::New(OrgFNmV.Last()) : PSOut();
    PSOut TransSOut = !OutTransFNm.Empty() ? TFOut::New(TransFNmV.Last()) : PSOut();
    PSOut RefTransSOut = !OutRefTransFNm.Empty() ? TFOut::New(RefTransFNmV.Last()) : PSOut();
    // check which are given
    const bool IsOrgP = !OrgSOut.Empty() && IsOrg();
    const bool IsTransP = !TransSOut.Empty() && IsTrans();
    const bool IsRefTransP = !RefTransSOut.Empty() && IsRefTrans();
    // print warnings
    if (!IsOrgP) { printf("No original sentences!\n"); }
    if (!IsTransP) { printf("No machine translation sentences!\n"); }
    if (!IsRefTransP) { printf("No reference translation sentences!\n"); }
    // go over all the sentences and store them in the file
    TIntV SentIdV; GetSentIdV(SentIdV);
    for (int SentIdN = 0; SentIdN < SentIdV.Len(); SentIdN++) {
        const int SentId = SentIdV[SentIdN];
        if (IsOrgP) { OrgSOut->PutStrLn(GetOrgStr(SentId)); }
        if (IsTransP) { TransSOut->PutStrLn(GetTransStr(SentId)); }
        if (IsRefTransP) { RefTransSOut->PutStrLn(GetRefTransStrV(SentId)[0]); }
        // should we break and go to next file?
        if ((LinesPerFile!=-1) && (SentIdN>0) && (SentIdN % LinesPerFile == 0)) {
            // prepare filenames
            if (!OutOrgFNm.Empty()) { OrgFNmV.Add(GetOutFNm(OutFBase, SentIdN, LinesPerFile, OutOrgFNm)); }
            if (!OutTransFNm.Empty()) { TransFNmV.Add(GetOutFNm(OutFBase, SentIdN, LinesPerFile, OutTransFNm)); }
            if (!OutRefTransFNm.Empty()) { RefTransFNmV.Add(GetOutFNm(OutFBase, SentIdN, LinesPerFile, OutRefTransFNm)); }
            // open next files files
            OrgSOut = !OutOrgFNm.Empty() ? TFOut::New(OrgFNmV.Last()) : PSOut();
            TransSOut = !OutTransFNm.Empty() ? TFOut::New(TransFNmV.Last()) : PSOut();
            RefTransSOut = !OutRefTransFNm.Empty() ? TFOut::New(RefTransFNmV.Last()) : PSOut();
        }
    }
}
void TPartialGS::Dump(const TStr& FName) {
    PSOut out = TFOut::New(FName);
    for (int i = 0; i < R.Len(); i++) {
        for (int j = 0; j < i; j++) {
            out->PutStr(TFlt::GetStr(0.0, 20, 18)); out->PutCh(' '); }
        for (int j = 0; j < R[i].Len(); j++) {
            out->PutStr(TFlt::GetStr(R[i][j], 20, 18)); out->PutCh(' '); }
        out->PutCh('\n');
    }
}
示例#8
0
int main(int argc, char* argv[])
{
  TEnv Env(argc, argv);
  TStr PrefixPath = Env.GetArgs() > 1 ? Env.GetArg(1) : TStr("");

  double ts1 = Tick();
  TTableContext Context;
  TVec<TPair<PTable,TStr> > NodeTblV = TVec<TPair<PTable,TStr> >();
  TVec<TPair<PTable, int> > EdgeTblV = TVec<TPair<PTable, int> >();
  Schema NodeSchema = Schema();
  Schema EdgeSchema = Schema();
  LoadFlickrTables(PrefixPath, Context, NodeTblV, NodeSchema, EdgeTblV, EdgeSchema);

  double ts2 = Tick();

  THash<TStr,TStrH> NStrH;
  TIntStrH NIdH;
  CreateIdHashes(NodeTblV, NStrH, NIdH);

  double ts3 = Tick();
  PSVNet Graph = LoadGraphMNet<PSVNet>(NodeTblV, EdgeTblV, NStrH, NIdH);

  double ts4 = Tick();

  int nExps = 10;
  int nTriads = 0;
  for (int i = 0; i < nExps; i++) {
    nTriads = TSnap::GetTriads(Graph);
  }
  double ts5 = Tick();
  StdOut->PutStrFmtLn("Triads %d", nTriads);

  PSOut TimeOut = TFOut::New(PrefixPath + TStr("time.txt"), true);
  TimeOut->PutStrFmtLn("===== Triad Counting - PSVNet =====");
  TimeOut->PutStrLn(Env.GetCmLn());
  TimeOut->PutStrFmtLn("Input Time = %f", GetCPUTimeUsage(ts1, ts2));
  TimeOut->PutStrFmtLn("Preprocessing Time = %f", GetCPUTimeUsage(ts2, ts3));
  TimeOut->PutStrFmtLn("Conversion Time = %f", GetCPUTimeUsage(ts3, ts4));
  TimeOut->PutStrFmtLn("Computing Time = %f", GetCPUTimeUsage(ts4, ts5)/nExps);

	return 0;
}
示例#9
0
void TSAppSrvFun::LogReqRes(const TStrKdV& FldNmValPrV, const PHttpResp& HttpResp)
{
	if (LogRqFolder == "")
		return;
	try	 {
		TDir::GenDir(LogRqFolder);
		TStr TimeNow = TTm::GetCurLocTm().GetWebLogDateTimeStr(true);
		TimeNow.ChangeChAll(':', '.');
		PSOut Output = TFOut::New(LogRqFolder + "/" + TimeNow + ".txt", false);
		Output->PutStr(FunNm.CStr()); Output->PutCh('\n');
		for (int N=0; N < FldNmValPrV.Len(); N++)
			Output->PutStrFmt("  %s: %s\n", FldNmValPrV[N].Key.CStr(), FldNmValPrV[N].Dat.CStr());
		Output->PutCh('\n');
		Output->PutStr(HttpResp->GetBodyAsStr(), false);
	} catch (...) {
		/*const PNotify& Notify = RqEnv->GetWebSrv()->GetNotify();
		Notify->OnStatus("Unable to log request for function '" + GetFunNm() + "'!");*/
	}
}
示例#10
0
 void OnNotify(const TNotifyType& Type, const TStr& MsgStr){
   TStr LogStr=TNotify::GetTypeStr(Type)+": "+MsgStr;
   LogSOut->PutStr(LogStr); LogSOut->PutDosLn();
   printf("%s\n", LogStr.CStr());
 }
示例#11
0
int main(int argc, char* argv[]) {
//  PSVNet PGraph = PSVNet::New();
//  PCVNet PGraph = PCVNet::New();
  PMVNet PGraph = PMVNet::New();
  int NTypeId1 = PGraph->AddNType(TStr("Photo"));
  int NTypeId2 = PGraph->AddNType(TStr("User"));
  int NTypeId3 = PGraph->AddNType(TStr("Tag"));
  int ETypeId1 = PGraph->AddEType(TStr("EType1"), TStr("Photo"), TStr("User"));
  int ETypeId2 = PGraph->AddEType(TStr("EType2"), TStr("User"), TStr("Photo"));
  int ETypeId3 = PGraph->AddEType(TStr("EType3"), TStr("User"), TStr("Photo"));
  int ETypeId4 = PGraph->AddEType(TStr("EType4"), TStr("Photo"), TStr("Tag"));
  StdOut->PutStrFmtLn("EdgeTypeId %d - %d - %d", ETypeId1, ETypeId2, ETypeId4);
  StdOut->PutStrFmtLn("TypeId %d - %d - %d", PGraph->AddNType(TStr("User")), PGraph->GetNTypeId(TStr("Photo")), PGraph->GetNTypeId(TStr("User")));
  int NId1 = PGraph->AddNode(1, 0);
  int NId2 = PGraph->AddNode(1, 1);
  int NId3 = PGraph->AddNode(0, 1);
  int NId4 = PGraph->AddNode(1, 2);
  int NId5 = PGraph->AddNode(0, 0);
  int NId6 = PGraph->AddNode(2, 1);
  StdOut->PutStrFmtLn("Nodes %d %d %d %d %d %d", NId1, NId2, NId3, NId4, NId5, NId6);
  StdOut->PutStrFmtLn("Size = %d", PGraph->GetNodes());
  for (TMVNet::TNodeI Iter = PGraph->BegNI(); Iter < PGraph->EndNI(); Iter++) {
    StdOut->PutStrFmtLn("Iter = %d, %d", Iter.GetTypeId(), Iter.GetId());
  }


//  StdOut->PutStrFmtLn("Edges %d", EId1);
//  StdOut->PutStrFmtLn("IsEdge(%d) = %d", EId1, PGraph->IsEdge(EId1));
//  StdOut->PutStrFmtLn("IsEdge(%d) = %d", 1, PGraph->IsEdge(1));
//  int EId;
//  StdOut->PutStrFmtLn("IsEdge(%d, %d) = %d", NId1, NId2, PGraph->IsEdge(NId1, NId2, true));
//  StdOut->PutStrFmtLn("IsEdge(%d, %d) = %d - %d", NId1, NId2, PGraph->IsEdge(NId1, NId2, EId, true), EId);
//  StdOut->PutStrFmtLn("IsEdge(%d, %d) = %d", NId1, NId3, PGraph->IsEdge(NId1, NId3, true));
//  StdOut->PutStrFmtLn("IsEdge(%d, %d) = %d - %d", NId1, NId3, PGraph->IsEdge(NId1, NId3, EId, true), EId);

  int EId1 = PGraph->AddEdge(NId1, NId3, ETypeId2);
  int EId2 = PGraph->AddEdge(NId3, NId2, ETypeId1);
  int EId3 = PGraph->AddEdge(NId5, NId2, ETypeId1);
  int EId4 = PGraph->AddEdge(NId1, NId5, ETypeId2, 10);
  int EId5 = PGraph->AddEdge(NId3, NId1, ETypeId1);
  int EId6 = PGraph->AddEdge(NId3, NId6, ETypeId4);
  int EId7 = PGraph->AddEdge(NId3, NId6, ETypeId4);
  for (TMVNet::TEdgeI Iter = PGraph->BegEI(); Iter < PGraph->EndEI(); Iter++) {
    StdOut->PutStrFmtLn("Edge = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }
  StdOut->PutStrFmtLn("Edge Size = %d", PGraph->GetEdges());
  StdOut->PutStrFmtLn("Degree %d-%d", PGraph->GetNI(NId3).GetInDeg(), PGraph->GetNI(NId3).GetOutDeg());
  for (int i = 0; i < PGraph->GetNI(NId3).GetOutDeg(); i++) {
    StdOut->PutStrFmtLn("Edge %d", PGraph->GetNI(NId3).GetOutEId(i));
  }

  TStrV NTypeNameV;
  NTypeNameV.Add(TStr("Photo"));
  NTypeNameV.Add(TStr("User"));
  PMVNet PSubGraph = PGraph->GetSubGraph(NTypeNameV);
  StdOut->PutStrFmtLn("Size = %d", PSubGraph->GetNodes());
  StdOut->PutStrFmtLn("Edge Size = %d", PSubGraph->GetEdges());
  for (TMVNet::TEdgeI Iter = PSubGraph->BegEI(); Iter < PSubGraph->EndEI(); Iter++) {
    StdOut->PutStrFmtLn("Edge = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }

  PGraph->DelEdge(EId5);
  PGraph->DelEdge(EId3);
  StdOut->PutStrFmtLn("Edge Size = %d", PGraph->GetEdges());
  PGraph->DelEdge(NId3, NId6, true);
  for (TSVNet::TEdgeI Iter = PGraph->BegEI(); Iter < PGraph->EndEI(); Iter++) {
    StdOut->PutStrFmtLn("Edge = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }
  StdOut->PutStrFmtLn("Edge Size = %d", PGraph->GetEdges());

  PGraph->DelNode(NId2);
  StdOut->PutStrFmtLn("Size = %d", PGraph->GetNodes());
  for (TSVNet::TNodeI Iter = PGraph->BegNI(); Iter < PGraph->EndNI(); Iter++) {
    StdOut->PutStrFmtLn("Node = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }
  for (TSVNet::TEdgeI Iter = PGraph->BegEI(); Iter < PGraph->EndEI(); Iter++) {
    StdOut->PutStrFmtLn("Edge = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }
  StdOut->PutStrFmtLn("Edge Size = %d", PGraph->GetEdges());

  TIntV ShortestDists;
  StdOut->PutStrFmtLn("Depth = %d", TSnap::GetShortestDistances(PGraph, NId1, false, false, ShortestDists));
  for (TSVNet::TNodeI Iter = PGraph->BegNI(); Iter < PGraph->EndNI(); Iter++) {
    int NId = Iter.GetId();
    StdOut->PutStrFmtLn("Shortest Dist = %d:%d", NId, ShortestDists[NId]);
  }

  TIntFltH PageRankH;
  TSnap::GetPageRankMNetMP(PGraph, PageRankH, 0.849999999999998, 0.0001, 10);
}
示例#12
0
int main(int argc, char* argv[])
{
  TEnv Env(argc, argv);
  TStr PrefixPath = Env.GetArgs() > 1 ? Env.GetArg(1) : TStr("");

  double ts1 = Tick();
  TTableContext Context;
  TVec<PTable> NodeTblV = TVec<PTable>();
  TVec<PTable> EdgeTblV = TVec<PTable>();
  Schema NodeSchema = Schema();
  Schema EdgeSchema = Schema();
  LoadFlickrTables(PrefixPath, Context, NodeTblV, NodeSchema, EdgeTblV, EdgeSchema);

  double ts2 = Tick();

  int ExpectedSz = 0;
  for (TVec<PTable>::TIter it = NodeTblV.BegI(); it < NodeTblV.EndI(); it++) {
    PTable Table = *it;
    ExpectedSz += Table->GetNumRows();
  }

  THash<TStr, TInt> Hash(ExpectedSz);
  TStrV OriNIdV(ExpectedSz);

  MergeNodeTables(NodeTblV, NodeSchema, Hash, OriNIdV);
  PTable EdgeTable = MergeEdgeTables(EdgeTblV, EdgeSchema, Hash, Context);

  double ts3 = Tick();
  TStrV V;
  TStrV VE;
  VE.Add(EdgeSchema.GetVal(2).GetVal1());
  PNEANet Graph = TSnap::ToNetwork<PNEANet>(EdgeTable, EdgeSchema.GetVal(0).GetVal1(), EdgeSchema.GetVal(1).GetVal1(),
						V, V, VE, aaLast);
  double ts4 = Tick();

  //int nExps = 1;
  int nExps = 40;
  TIntFltH PageRankResults;
  for (int i = 0; i < nExps; i++) {
    PageRankResults = TIntFltH(ExpectedSz);
#ifdef USE_OPENMP
    TSnap::GetWeightedPageRankMP2(Graph, PageRankResults, EdgeSchema.GetVal(2).GetVal1(), 0.849999999999998, 0.0001, 10);
#else
    TSnap::GetWeightedPageRank(Graph, PageRankResults, EdgeSchema.GetVal(2).GetVal1(), 0.849999999999998, 0.0001, 10);
#endif
  }
  double ts5 = Tick();

  PSOut ResultOut = TFOut::New(PrefixPath + TStr("page-rank-results.tsv"));
  for (TIntFltH::TIter it = PageRankResults.BegI(); it < PageRankResults.EndI(); it++) {
    ResultOut->PutStrFmtLn("%s\t%f9", OriNIdV[it.GetKey()].CStr(), it.GetDat().Val);
  }
  double ts6 = Tick();

  bool isPar = false;
#ifdef USE_OPENMP
  isPar = true;
#endif

//  PSOut FeaturesOut = TFOut::New(PrefixPath + "features.txt");
//  FeaturesOut->PutStrFmtLn("Photo %d", PPhotoTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Users %d", PUserTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Tags %d", PTagTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Comments %d", PCommentTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Locations %d", PLocationTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Photo - Owner %d", PPhotoOwnerTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Photo - Comment %d", PPhotoCommentTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Photo - Location %d", PPhotoLocationTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Comment - User %d", PCommentUserTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Comment - User %d", PCommentUserTbl->GetNumRows().Val);
////  FeaturesOut->PutStrFmtLn("Photo - Tagger %d", PPhotoTaggerTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Tagger - Tag %d", PTaggerTagTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Total number of nodes = %d", Graph->GetNodes());
//  FeaturesOut->PutStrFmtLn("Total number of edges = %d", Graph->GetEdges());

  PSOut TimeOut = TFOut::New(PrefixPath + TStr("time.txt"), true);
  TimeOut->PutStrFmtLn("Experiment Weighted - %s - %s", PrefixPath.CStr(), (isPar ? "Parallel" : "Sequential"));
  TimeOut->PutStrFmtLn("Input Time = %f", GetCPUTimeUsage(ts1, ts2));
  TimeOut->PutStrFmtLn("Preprocessing Time = %f", GetCPUTimeUsage(ts2, ts3));
  TimeOut->PutStrFmtLn("Conversion Time = %f", GetCPUTimeUsage(ts3, ts4));
  TimeOut->PutStrFmtLn("Computing Time = %f", GetCPUTimeUsage(ts4, ts5)/nExps);
  TimeOut->PutStrFmtLn("Output Time = %f", GetCPUTimeUsage(ts5, ts6));

  return 0;
}
void TTransCorpus::SaveTransScript(const TStr& OutFBase, const TStr& OrgLang,
        const TStr& TransLang, const TStrV& OrgFNmV, const TStrV& RefTransFNmV) {

    const int FNms = OrgFNmV.Len();
    IAssert(OrgFNmV.Len() == RefTransFNmV.Len());

    // make tokenize
    PSOut TokSOut = TFOut::New(OutFBase + "_tokenize.sh");
    for (int FNmN = 0; FNmN < FNms; FNmN++) {
        TokSOut->PutStrLn("tokenize.pl -lang=" + OrgLang + " " + 
            OrgFNmV[FNmN].GetFBase() + " " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".tok").GetFBase());
        TokSOut->PutStrLn("tokenize.pl -lang=" + TransLang + " " + 
            RefTransFNmV[FNmN].GetFBase() + " " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".tok").GetFBase());           
    }
    TokSOut->Flush();

    // make align
    PSOut AlignSOut = TFOut::New(OutFBase + "_align.sh");
    for (int FNmN = 0; FNmN < FNms; FNmN++) {
        AlignSOut->PutStrLn("ssal -f " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".tok").GetFBase() + " " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".tok").GetFBase());
        AlignSOut->PutStrLn("mv " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".tok.al").GetFBase() + " " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".al").GetFBase());
        AlignSOut->PutStrLn("mv " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".tok.al").GetFBase() + " " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".al").GetFBase());
    }
    AlignSOut->Flush();

    // make lowercase
    PSOut LcSOut = TFOut::New(OutFBase + "_lowercase.sh");
    for (int FNmN = 0; FNmN < FNms; FNmN++) {
        LcSOut->PutStrLn("lc-latin.pl " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".al").GetFBase() + " " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".lc").GetFBase());
        LcSOut->PutStrLn("lc-latin.pl " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".al").GetFBase() + " " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".lc").GetFBase());
    }
    LcSOut->Flush();

    // rest -- script
}
void TTransCorpus::SaveSgm(const TStr& OutOrgFNm, 
        const TStr& OutTransFNm, const TStr& OutRefTransFNm) {

    // open files
    PSOut OrgSOut = !OutOrgFNm.Empty() ? TFOut::New(OutOrgFNm) : NULL;
    PSOut TransSOut = !OutTransFNm.Empty() ? TFOut::New(OutTransFNm) : NULL;
    PSOut RefTransSOut = !OutRefTransFNm.Empty() ? TFOut::New(OutRefTransFNm) : NULL;
    // check which are given
    const bool IsOrgP = !OrgSOut.Empty() && IsOrg();
    const bool IsTransP = !TransSOut.Empty() && IsTrans();
    const bool IsRefTransP = !RefTransSOut.Empty() && IsRefTrans();
    // prepare headers
    if (IsOrgP) {
        OrgSOut->PutStrLn("<srcset setid=\"tmp\" srclang=\"source\" trglang=\"target\">");
        OrgSOut->PutStrLn("<DOC docid=\"tmpdoc\">");
    }
    if (IsTransP) {
        TransSOut->PutStrLn("<tstset setid=\"tmp\" srclang=\"source\" trglang=\"target\">");
        TransSOut->PutStrLn("<DOC docid=\"tmpdoc\" sysid=\"trans\">");
    }
    if (IsRefTransP) {
        RefTransSOut->PutStrLn("<refset setid=\"tmp\" srclang=\"source\" trglang=\"target\">");
        RefTransSOut->PutStrLn("<DOC docid=\"tmpdoc\" sysid=\"ref\">");
    }
    // output sentences
    TIntV SentIdV; GetSentIdV(SentIdV);
    for (int SentIdN = 0; SentIdN < SentIdV.Len(); SentIdN++) {
        const int SentId = SentIdV[SentIdN];
        if (IsOrgP) { 
            OrgSOut->PutStrLn(TStr::Fmt(
                "<p><seg id=\"%d\">%s</seg></p>", 
                SentId, GetOrgStr(SentId).CStr())); 
        }
        if (IsTransP) { 
            TransSOut->PutStrLn(TStr::Fmt(
                "<p><seg id=\"%d\">%s</seg></p>", 
                SentId, GetTransStr(SentId).CStr()));
        }
        if (IsRefTransP) { 
            RefTransSOut->PutStrLn(TStr::Fmt(
                "<p><seg id=\"%d\">%s</seg></p>", 
                SentId, GetRefTransStrV(SentId)[0].CStr()));
        }
    }
    // prepare footers
    if (IsOrgP) {
        OrgSOut->PutStrLn("</DOC>");
        OrgSOut->PutStrLn("</srcset>");
    }
    if (IsTransP) {
        TransSOut->PutStrLn("</DOC>");
        TransSOut->PutStrLn("</tstset>");
    }
    if (IsRefTransP) {
        RefTransSOut->PutStrLn("</DOC>");
        RefTransSOut->PutStrLn("</refset>");
    }
}