1 // $Id: sumfilehandler.h,v 1.7 2011/03/07 06:08:47 bobgian Exp $
2 
3 /*
4   Copyright 2005 Peter Beerli, Mary Kuhner, Jon Yamato and Joseph Felsenstein
5 
6   This software is distributed free of charge for non-commercial use
7   and is copyrighted.  Of course, we do not guarantee that the software
8   works, and are not responsible for any damage you may cause or have.
9 */
10 
11 // The Sumfile Handler is here to handle reading and writing of summary files.
12 // Earlier versions of the functions here can be found in chainmanager directly,
13 // since it was pulled out of there due to this sort of thing taking up too
14 // much space.
15 
16 // In general, it is owned by and called from the chainmanager object, and
17 // modifies (by reference) other chainmanager member variables when called
18 // upon to read a summary file, and reads (by reference) other chainmanager
19 // member variables when called upon to write a summary file.
20 
21 #ifndef SUMFILEHANDLER_H
22 #define SUMFILEHANDLER_H
23 
24 #include <fstream>
25 #include "vectorx.h"
26 
27 class ForceParameters;
28 class ChainOut;
29 class ChainPack;
30 class CollectionManager;
31 
32 class SumFileHandler
33 {
34   private:
35     std::ifstream m_sumin;        // use when reading from a summary file
36     std::ofstream m_sumout;       // use when writing to a summary file
37 
38     long int m_lastRegion;
39     long int m_lastReplicate;
40     long int m_lastChain;
41     long int m_lastRegionChainSum;
42     long int m_lastReplicateChainSum;
43     long int m_lastReplicateSummary;
44     bool m_regionSummary;
45 
46   public:
47     SumFileHandler();
~SumFileHandler()48     ~SumFileHandler() {};
49     SumFileHandler(const SumFileHandler& src);            // undefined
50     SumFileHandler& operator=(const SumFileHandler& src); // undefined
51 
GetLastRegion()52     long int GetLastRegion() {return m_lastRegion;};
GetLastReplicate()53     long int GetLastReplicate() {return m_lastReplicate;};
GetLastChain()54     long int GetLastChain() {return m_lastChain;};
GetLastRegionChainSum()55     long int GetLastRegionChainSum() {return m_lastRegionChainSum;};
GetLastReplicateChainSum()56     long int GetLastReplicateChainSum() {return m_lastReplicateChainSum;};
GetLastReplicateSummary()57     long int GetLastReplicateSummary() {return m_lastReplicateSummary;};
GetRegionSummary()58     bool GetRegionSummary() {return m_regionSummary;};
59 
60     void ReadInChainPack          (ChainPack& chainpack);
61     void ReadInChainSum           (ChainPack& chainpack,
62                                    CollectionManager& collectionmanager, long int numchains);
63     void SkipComments             ();
64     void ReadInChainOut           (ChainOut &c );
65     void ReadInSumFile            (ChainPack& chainpack,
66                                    CollectionManager& collectionmanager, long int numchains);
67     void ReadInReplicateSummary   (ChainPack& chainpack);
68     void ReadInRegionSummary      (ChainPack& chainpack);
69     bool ReadInVec1D              (DoubleVec1d& vd, string endtag );
70     bool ReadInVec1D              (LongVec1d& vd, string endtag );
71     void ReadInEndRegion          (ChainPack& chainpack);
72     void ReadInRecover            (ChainPack& chainpack);
73     // public only so TreeSummary::ReadInTreeSummary() can use, change if merge
74     void ReadInForceParameters    (ForceParameters& fp );
75     static void HandleSumOutFileFormatError( string callingfxn );
76     static void ReadInCheckFileFormat( string callingfxn, string expectedtag, string readtag );
77 
78     void WriteSumFileStart        ();
79     void WriteSumFileEnd          (const ChainPack& chainpack);
80     void WriteChainSumStart       (long int whichregion, long int whichreplicate,
81                                    const CollectionManager& collectionmanager);
82     void WriteChainSumEnd         (const CollectionManager& collectionmanager);
83     void WriteChainPack           (ChainOut& chainout,const ChainPack& chainpack);
84     void WriteLastChain           (const ChainPack& chainpack);
85     void WriteRegionSummary       (ForceParameters& fp, double maxlike);
86     void WriteReplicateSummary    (ForceParameters& fp, double maxlike,
87                                    const ChainPack& chainpack);
88     void WriteWhatWasRead         (bool recoversumfile,
89                                    long int recover_region,
90                                    long int recover_replicate,
91                                    long int recover_chaintype,
92                                    long int recover_chain,
93                                    bool recover_redochain,
94                                    bool recover_redomaximization,
95                                    long int nregions,
96                                    long int nreplicates,
97                                    const ChainPack& chainpack,
98                                    const CollectionManager& collectionmanager);
99     static void WriteVec1D ( std::ofstream& out, vector<double>& vd );
100     static void WriteVec1D ( std::ofstream& out, vector<long int>& vd );
101     void CloseSumOut();
102 
103 };
104 
105 #endif // SUMFILEHANDLER_H
106 
107 //____________________________________________________________________________________
108