To test the TreeSummary
class, we need for the main
function to create a TreeSummary
object and call its readTreeFile
and showSummary
functions. We also need a tree file to read, and need to link in the Nexus Class Library to do the work of parsing this tree file.
Create a file named test.tre and fill it with the following text:
#NEXUS
[ID: 1234567]
begin taxa;
dimensions ntax=33;
taxlabels
'Bracteacoccus minor UTEX66'
'Bracteacoccus aerius UTEX1250'
'Pseudomuriella engadinensis UTEX58'
'Pseudomuriella schumacherensis SAG2137'
'Bracteamorpha trainori CC1VF5A'
'Radiococcus polycoccus SAG217 1c'
'Planktosphaeria gelatinosa SAG262 1b'
'Planktosphaeria texensis UTEX1241'
'Planktosphaeria botryoides UTEXLB951'
'Chromochloris zofingiensis UTEX56'
'Pediastrum duplex UTEX1364'
'Parapediastrum biradiatum UTEX37'
'Ankistrodesmus falcatus UTEX101'
'Neochloris aquatica UTEX138'
'Botryococcus sudeticus'
'Characiopodium hindakii'
'Scenedesmus obliquus UTEX393'
'Scenedesmus rotundus SEV3VF49'
'Hariotina reticulata UTEX1365'
'Schizochlamys gelatinosa SAG66 94'
'Dictyococcus varians UTEXLB62'
'Dictyochloris fragrans UTEX127'
'Mychonastes homosphaera CAUPH6502'
'Mychonastes jurisii SAG3798'
'Schroederia setigera UTEXLB2454'
'Chlorotetraedron incus SAG4381'
'Kirchneriella aperta SAG2004'
'Sphaeroplea robusta UTEX2350'
'Ankyra judai SAG17 84'
'Tumidella tumida SAG2265'
'Rotundella rotunda WJT54VFNP11'
'Rotundella sp ZNP1VF31'
'Ourococcus multisporus';
end;
begin trees;
translate
1 'Bracteacoccus minor UTEX66',
2 'Bracteacoccus aerius UTEX1250',
3 'Pseudomuriella engadinensis UTEX58',
4 'Pseudomuriella schumacherensis SAG2137',
5 'Bracteamorpha trainori CC1VF5A',
6 'Radiococcus polycoccus SAG217 1c',
7 'Planktosphaeria gelatinosa SAG262 1b',
8 'Planktosphaeria texensis UTEX1241',
9 'Planktosphaeria botryoides UTEXLB951',
10 'Chromochloris zofingiensis UTEX56',
11 'Pediastrum duplex UTEX1364',
12 'Parapediastrum biradiatum UTEX37',
13 'Ankistrodesmus falcatus UTEX101',
14 'Neochloris aquatica UTEX138',
15 'Botryococcus sudeticus',
16 'Characiopodium hindakii',
17 'Scenedesmus obliquus UTEX393',
18 'Scenedesmus rotundus SEV3VF49',
19 'Hariotina reticulata UTEX1365',
20 'Schizochlamys gelatinosa SAG66 94',
21 'Dictyococcus varians UTEXLB62',
22 'Dictyochloris fragrans UTEX127',
23 'Mychonastes homosphaera CAUPH6502',
24 'Mychonastes jurisii SAG3798',
25 'Schroederia setigera UTEXLB2454',
26 'Chlorotetraedron incus SAG4381',
27 'Kirchneriella aperta SAG2004',
28 'Sphaeroplea robusta UTEX2350',
29 'Ankyra judai SAG17 84',
30 'Tumidella tumida SAG2265',
31 'Rotundella rotunda WJT54VFNP11',
32 'Rotundella sp ZNP1VF31',
33 'Ourococcus multisporus';
tree 2topo212 = (1:0.15627210,(30:0.17162998,(((5:0.25666877,((6:0.25918524,(8:0.04890046,9:0.02103898):0.16393496):0.07744044,(((13:0.24662238,27:0.17921628):0.03452417,33:0.21951314):0.12422514,(24:0.05135497,23:0.08634639):0.29672639):0.02603509):0.04301592):0.02147069,((((17:0.11304779,(19:0.19230870,18:0.17106424):0.04876048):0.06024803,(((26:0.12528321,(12:0.14811074,11:0.10159416):0.12450103):0.11574026,(14:0.17432556,(15:0.14378088,16:0.16952013):0.07100215):0.11501679):0.06325832,(32:0.05236326,31:0.03443277):0.35846911):0.01210282):0.05449317,(((28:0.11725934,29:0.10772249):0.27946445,25:0.38458363):0.00596258,22:0.37338675):0.04813972):0.03168543,(10:0.34204294,(4:0.06438535,3:0.05207162):0.17721564):0.09167346):0.03102114):0.05358973,((7:0.21563145,20:0.25535189):0.04878285,21:0.45456205):0.10424236):0.04005845):0.13566845,2:0.15577441);
tree 37topo212 = (1:0.19535319,(30:0.21396159,(((((4:0.06681961,3:0.05541859):0.20988915,10:0.33177384):0.07063769,(((17:0.10503839,(19:0.18486713,18:0.13774763):0.07906941):0.05218904,((32:0.04101216,31:0.02770287):0.34559869,((14:0.21037724,(15:0.14385916,16:0.20516275):0.03494270):0.14087560,((12:0.15299548,11:0.09111928):0.15599325,26:0.12149992):0.03630639):0.05173516):0.00399992):0.07032845,((25:0.40721998,(28:0.10814417,29:0.13006267):0.35070553):0.00810781,22:0.48605529):0.02915788):0.00443725):0.03465077,(((6:0.33026531,(8:0.03452133,9:0.03577985):0.14055156):0.07528730,((24:0.07724682,23:0.04864349):0.26668853,((13:0.25391435,27:0.14815373):0.03760906,33:0.17433277):0.11920613):0.01382651):0.04943612,5:0.26938200):0.04605544):0.05798100,(21:0.45881190,(20:0.25293709,7:0.13093373):0.02727468):0.14226066):0.01826858):0.15905419,2:0.12223918);
tree 177topo212 = (1:0.17263901,(30:0.20992067,(((20:0.18697491,7:0.20783012):0.02022342,21:0.55912126):0.15786325,((5:0.32191893,((((13:0.22120673,27:0.14088151):0.12466135,33:0.20099223):0.10429643,(24:0.04519368,23:0.10657649):0.26923351):0.04840972,(6:0.34311725,(8:0.06647765,9:0.02513638):0.12167059):0.09308608):0.03699157):0.03553243,(((22:0.41515488,(25:0.40934369,(28:0.07315304,29:0.14252246):0.28599405):0.02714662):0.04648712,((17:0.10241118,(19:0.15187746,18:0.13872898):0.07522029):0.07677836,(((14:0.21666447,(16:0.17464475,15:0.10474928):0.03565734):0.14916653,((12:0.12576209,11:0.09283544):0.12182421,26:0.10155592):0.06173464):0.07438984,(32:0.03727526,31:0.00825297):0.40050603):0.02452030):0.06175045):0.01611106,(10:0.30285524,(4:0.09298016,3:0.06285482):0.21244857):0.05596027):0.02822623):0.02385617):0.03964512):0.12164953,2:0.13314206);
tree 817topo212 = (1:0.19215872,(((((((((26:0.20396310,(12:0.17477873,11:0.10084075):0.13460141):0.08771374,(14:0.21573087,(15:0.18461346,16:0.15407304):0.08978479):0.15596104):0.04588627,(32:0.06028829,31:0.01004081):0.41204051):0.00982853,((19:0.21149271,18:0.17387892):0.05163667,17:0.14656430):0.08237560):0.08025059,(22:0.52381962,(25:0.40330052,(28:0.10940880,29:0.15724750):0.26358713):0.05715116):0.03890461):0.01082136,((4:0.09774546,3:0.04765817):0.21833378,10:0.39081571):0.06929534):0.04574448,((((33:0.22267066,(27:0.13682667,13:0.25232487):0.10200532):0.18416847,(24:0.05246640,23:0.08160045):0.31519901):0.06970887,(6:0.35894655,(8:0.03974742,9:0.04956770):0.16531089):0.08256358):0.05406209,5:0.33414002):0.03053482):0.03697446,((7:0.20220552,20:0.29151778):0.04382592,21:0.74201221):0.11221562):0.01333178,30:0.22124048):0.18243369,2:0.14916207);
tree 846topo212 = (1:0.21513445,(30:0.26663916,(((7:0.20473226,20:0.25328580):0.05298203,21:0.57646513):0.10292079,((((4:0.09780566,3:0.07558274):0.17260496,10:0.35684935):0.11017788,((22:0.50524527,((28:0.10958918,29:0.09536010):0.26691263,25:0.49841657):0.03391956):0.05696541,(((32:0.03023503,31:0.05170754):0.49718552,((14:0.21218183,(15:0.08765387,16:0.25747977):0.07087899):0.16581063,(26:0.11473012,(12:0.11632502,11:0.07317669):0.21865315):0.06720179):0.09504242):0.00639096,((19:0.21159655,18:0.16062796):0.06147523,17:0.17146503):0.06865098):0.06735468):0.02290002):0.02864395,(((((27:0.12371550,13:0.26241311):0.09760657,33:0.17976275):0.15376519,(24:0.06420439,23:0.06113029):0.23022214):0.03430232,(6:0.31306236,(8:0.05328654,9:0.04046049):0.21189102):0.11170889):0.02112370,5:0.25643529):0.05138383):0.03807838):0.02579456):0.16665911,2:0.10958482);
tree 898topo212 = (1:0.16198847,((((20:0.26670432,7:0.22141509):0.05276667,21:0.52255443):0.08155109,((((4:0.09432053,3:0.05247520):0.16683187,10:0.36310306):0.05592855,(((25:0.38402025,(28:0.10044142,29:0.08872256):0.28362652):0.03888522,22:0.46054441):0.06647122,(((32:0.03010925,31:0.03149605):0.47312032,(((12:0.11790036,11:0.08874953):0.16495361,26:0.13870705):0.04269158,((16:0.19041063,15:0.11657282):0.03856503,14:0.21286280):0.16520670):0.06191210):0.02670160,((19:0.18325572,18:0.16495378):0.05088473,17:0.13629704):0.05781484):0.04884538):0.00534596):0.03356130,(((6:0.29267279,(8:0.04113496,9:0.03650958):0.11176421):0.09883280,(((27:0.19591516,13:0.32002223):0.04389872,33:0.19269516):0.18094088,(24:0.08522457,23:0.04779144):0.25657281):0.01681926):0.04264673,5:0.26109259):0.02740096):0.03792393):0.04607720,30:0.20333768):0.09994832,2:0.14568199);
tree 907topo212 = (1:0.20461837,((((7:0.23776249,20:0.25434065):0.02509091,21:0.90916260):0.17338878,((((6:0.38239503,(8:0.06381691,9:0.04168967):0.19944817):0.09643838,((24:0.04687438,23:0.07277379):0.41477468,((27:0.15245821,13:0.30907069):0.08394772,33:0.25676649):0.14788194):0.04833612):0.05490340,5:0.28519098):0.02167413,(((22:0.53790470,(25:0.47408819,(28:0.11004475,29:0.12790169):0.33528429):0.05567563):0.04519669,(((19:0.23449678,18:0.21631034):0.07767688,17:0.22290284):0.10064774,((((12:0.14072866,11:0.13139114):0.15031812,26:0.15025778):0.10488677,((16:0.20172241,15:0.10584334):0.04099575,14:0.24466104):0.20382049):0.06271032,(32:0.03650932,31:0.03375336):0.48832468):0.03467965):0.05204606):0.04022710,(10:0.44932193,(4:0.07760529,3:0.06515857):0.22255570):0.08206779):0.03658961):0.04350243):0.04258045,30:0.29612509):0.17567765,2:0.19394228);
tree 961topo212 = (1:0.17386767,(30:0.20096556,(((7:0.24838722,20:0.24967932):0.04924312,21:0.67176924):0.14161764,((5:0.31260921,((6:0.34205844,(8:0.04105908,9:0.03081368):0.15106287):0.10216270,(((27:0.12911654,13:0.32517888):0.12379905,33:0.24448261):0.22659492,(24:0.04748320,23:0.09031660):0.36680677):0.06703485):0.06555158):0.01726319,(((4:0.07427326,3:0.07296012):0.23644957,10:0.47937271):0.04292213,((((((15:0.14725263,16:0.23261244):0.04392687,14:0.16615839):0.22699258,(26:0.15460844,(12:0.15914763,11:0.09769891):0.19641188):0.02518916):0.05332953,(32:0.04194514,31:0.02829988):0.48827767):0.01147546,((19:0.28408934,18:0.14871767):0.06437906,17:0.12320983):0.06744618):0.10383004,(22:0.40866296,(25:0.41413100,(28:0.10463571,29:0.11786032):0.37944233):0.02072903):0.08122673):0.01002759):0.00599986):0.05123263):0.05585731):0.12454454,2:0.20340308);
tree 143topo213 = (1:0.26112860,((5:0.31220582,((((25:0.51550560,(22:0.52353006,(28:0.14324520,29:0.14053730):0.34603630):0.02779240):0.03445346,((17:0.12387663,(19:0.22469310,18:0.15472169):0.04509815):0.11084823,((((15:0.11388810,16:0.22559712):0.06600357,14:0.25840723):0.20119355,((12:0.14685851,11:0.09607501):0.14959120,26:0.16966399):0.06829334):0.04224642,(32:0.04024682,31:0.03885332):0.40575374):0.02040799):0.09369484):0.05579514,(((6:0.41872582,(8:0.05164389,9:0.03771417):0.16775113):0.10410476,(((13:0.31823795,27:0.15018413):0.01891399,33:0.30915845):0.18292721,(24:0.08658377,23:0.06140332):0.32865726):0.05925033):0.03666646,(10:0.49113002,(4:0.08933284,3:0.06760523):0.22461695):0.08519352):0.00107753):0.00892563,(21:0.58770471,(20:0.26302490,7:0.26473277):0.05966628):0.15178740):0.10644283):0.02041923,30:0.24014992):0.21024026,2:0.18633689);
tree 741topo213 = (1:0.22171991,(30:0.25900641,((((20:0.30264240,7:0.24147233):0.07246882,21:0.56271716):0.16066237,(((((24:0.09299165,23:0.07584903):0.34500827,((13:0.22788123,27:0.16234166):0.14454174,33:0.26405592):0.12990463):0.03216220,(6:0.30613896,(8:0.05594103,9:0.03516623):0.23076364):0.08236131):0.06536683,(10:0.42464789,(4:0.10089239,3:0.07295535):0.19186868):0.09356935):0.02523984,(((22:0.59034781,(28:0.13156961,29:0.08483917):0.30973904):0.03177155,25:0.49933021):0.09034257,((((26:0.15910998,(12:0.16611627,11:0.10336010):0.21657205):0.08282432,((15:0.12929642,16:0.20443772):0.04498545,14:0.22750064):0.22144510):0.06868404,(32:0.05119722,31:0.02384305):0.45287767):0.01412821,(17:0.18654944,(19:0.18861905,18:0.15140115):0.06067833):0.08812682):0.07782974):0.05937663):0.02205317):0.02471975,5:0.28963780):0.04931392):0.17534565,2:0.15879502);
tree 78topo218 = (1:0.15522631,((((21:0.63937305,(7:0.29676164,20:0.26716385):0.01476052):0.22954033,((((4:0.11532201,3:0.07025891):0.21653955,10:0.44953101):0.14528780,((25:0.49466480,(22:0.58175930,(28:0.13780585,29:0.12603872):0.43663687):0.00844292):0.07533226,((17:0.17007284,(19:0.23223558,18:0.17873777):0.11473854):0.13444985,(((14:0.18674691,(15:0.16190401,16:0.20953263):0.07782970):0.25646314,((12:0.17044354,11:0.13048074):0.12871179,26:0.17921157):0.08045630):0.10115642,(32:0.03075485,31:0.04137420):0.50088434):0.02679635):0.06375535):0.03949351):0.04729054,((6:0.49065892,(8:0.07437414,9:0.01897836):0.25540707):0.08367898,((24:0.05263214,23:0.07925182):0.36175905,(33:0.23888496,(27:0.22637010,13:0.30307719):0.12722799):0.19726319):0.05587274):0.06519122):0.01583947):0.03829454,5:0.31514653):0.09045467,30:0.24889322):0.17176337,2:0.16431228);
tree 181topo218 = (1:0.21964821,(30:0.27363100,((((((33:0.24762730,(27:0.20385353,13:0.29958118):0.06762098):0.10210317,(24:0.06782967,23:0.06699537):0.28583354):0.06685218,(6:0.35643154,(8:0.06918355,9:0.02062018):0.19556919):0.06974259):0.07027374,(((4:0.12631969,3:0.06463356):0.17474300,10:0.33499744):0.06093443,((25:0.43545684,(22:0.40373512,(28:0.09904870,29:0.12819919):0.27599699):0.04636438):0.03631356,(((((12:0.11493983,11:0.07465273):0.16300252,26:0.17871081):0.05881028,(14:0.19629105,(16:0.20683871,15:0.14839281):0.06470277):0.16790528):0.06855440,(32:0.03751764,31:0.04360540):0.44400476):0.00648923,(17:0.13897113,(19:0.22368314,18:0.17822496):0.09479475):0.07382450):0.09096026):0.02086107):0.01598582):0.04150429,(21:0.61629981,(20:0.26123912,7:0.26226663):0.05685599):0.12688860):0.01280565,5:0.25337869):0.02665355):0.12477771,2:0.17934048);
tree 770topo218 = (1:0.24683995,(30:0.23499262,(5:0.29182290,(((20:0.28526547,7:0.20545052):0.11577018,21:0.55003228):0.14414435,(((6:0.31471083,(8:0.06555849,9:0.04108222):0.12079612):0.10432817,((24:0.06852803,23:0.07649896):0.30656467,(33:0.21687230,(27:0.15343279,13:0.34449458):0.09761427):0.15844681):0.02787049):0.05700115,(((25:0.47865528,((28:0.12203615,29:0.11872703):0.37324123,22:0.51644453):0.01738390):0.01553634,((17:0.12362208,(19:0.23597518,18:0.22705861):0.05786148):0.11534667,(((14:0.19408493,(15:0.13251694,16:0.23517370):0.06014407):0.19660936,(26:0.19105958,(12:0.12787843,11:0.11116912):0.13330968):0.01395272):0.08336366,(32:0.04532188,31:0.02779489):0.45442555):0.01338702):0.07440054):0.02111174,(10:0.41687095,(4:0.08593922,3:0.06383540):0.18327578):0.06307708):0.01822460):0.03213461):0.02492279):0.05835069):0.16422981,2:0.13747389);
tree 816topo218 = (1:0.19037066,(30:0.27962058,(5:0.34820923,(((20:0.33568596,7:0.12588165):0.02689698,21:0.61142091):0.19723424,(((((22:0.40512882,(28:0.14881953,29:0.11329904):0.29764565):0.01775492,25:0.42212569):0.04609111,((((26:0.19713142,(12:0.10971368,11:0.10479760):0.14713900):0.02758304,(14:0.25032452,(15:0.15117264,16:0.16866836):0.07906727):0.19041807):0.04732945,(32:0.05177143,31:0.04051608):0.37330425):0.01624963,((19:0.22631626,18:0.16409233):0.06442115,17:0.12726306):0.07221645):0.06752339):0.02170407,((4:0.07773644,3:0.06579250):0.13552964,10:0.39817844):0.11136795):0.03268384,((((13:0.23728602,27:0.14842231):0.11460138,33:0.23859964):0.15758011,(24:0.04437028,23:0.07482049):0.26098719):0.10172317,(6:0.37061080,(8:0.05306116,9:0.05018997):0.18335257):0.06972578):0.03051827):0.01956732):0.00497875):0.04248373):0.12778280,2:0.16254617);
end;
main
functionModify the main.cpp file to look like this:
#include <iostream>
#include "tree_summary.hpp"
using namespace strom;
const double Node::_smallest_edge_length = 1.0e-12;
int main(int argc, const char * argv[]) {
std::cout << "Starting..." << std::endl;
TreeSummary sumt;
try {
sumt.readTreefile("test.tre", 1);
}
catch(NxsException x) {
std::cerr << "Program aborting due to errors encountered reading tree file." << std::endl;
std::cerr << x.what() << std::endl;
std::exit(0);
}
sumt.showSummary();
std::cout << "\nFinished!" << std::endl;
return 0;
}
Note that a try...catch
combination is used to catch and report any exceptions raised by the Nexus Class Library when it attempts to read and interpret the tree file. For example, if the file test.tre is missing, the program will say
"test.tre" does not refer to a valid file.
Program aborted due to errors encountered reading tree file.
Exceptions are small objects that are “thrown” when something unexpected happens within the try
block. The catch
block specifies what particular exceptions it is prepared to handle (in this case an object of type NxsException
). The NxsException
object is stored in the variable x
, and the what()
member function of x
returns the message string stored when the exception was generated. Because exceptions normally represent situations from which recovery is impossible, the catch block calls the std::exit
function in order to terminate the program after the message is output on the standard error stream.
When you compile strom, you will receive the following error:
In file included from ../main.cpp:2:0:
../tree_summary.hpp:15:32: fatal error: ncl/nxsmultiformat.h: No such file or directory
compilation terminated.
The readTreefile
function in our TreeSummary
class makes use of the Nexus Class Library’s MultiFormatReader
class, and the compiler is simply telling us that we haven’t yet told it where to find the code for NCL’s MultiFormatReader. Before we can compile strom again, we must install the Nexus Class Library and tell meson where to find it.
Download the NCL gzipped tar file as follows:
cd
curl -LO https://sourceforge.net/projects/ncl/files/NCL/ncl-2.1.18/ncl-2.1.18.tar.gz
Navigate into the libraries
directory and unpack ncl-2.1.18.tar.gz there:
cd ~/Documents/libraries
tar zxvf ~/ncl-2.1.18.tar.gz
Navigate into the ncl-2.1.18 directory and build the NCL using the traditional configure script followed by make install
. The --prefix
option passed to the configure script results in the NCL being installed in your home directory. Leaving off the --prefix
option would result in NCL being installed for all users in your system, which is arguably preferable as long as you have the necessary privileges to install libraries systemwide, but this tutorial assumes you do not have superuser powers and thus shows you how to do everything locally. The CXXFLAGS="-std=c++11"
part specifies that the C++11 dialect should be used when compiling NCL. This will ensure that the NCL library can be linked to strom, which is also being compiled under C++11.
cd ~/Documents/libraries/ncl-2.1.18
./configure --prefix=$HOME CXXFLAGS="-std=c++11"
make install
The make install
step above creates a directory lib inside your home directory. Navigate to the ~/lib directory and create a directory named static there, and copy the libncl.a file to that directory:
cd ~/lib
mkdir static
cd static
cp ~/lib/ncl/libncl.a .
Why not simply use libncl.a where it was created? Compilers in linux operating systems prefer to create dynamic link (a.k.a. shared object) libraries. These are separate files (with the filename extension .so
) that are linked to your program at run time. In order to force the libraries to be linked at compile time so that our program is not split up over several files, it is necessary to separate the static libraries (e.g. libncl.a) from the shared object files (e.g. libncl-2.1.18.so) so that the compiler can’t even find the shared object version when linking is carried out.
Modify your meson.build file to tell the compiler where the installed NCL header files are located (~/include) and where to find the NCL library (~/lib/static/libncl.a).
project('strom', 'cpp',
default_options : ['cpp_std=c++11','cpp_link_args=-static','prefix=/home/paul/Documents/strom/distr'],
version : '1.0')
cpp = meson.get_compiler('cpp')
lib_ncl = cpp.find_library('ncl', dirs: ['/home/paul/lib/static'], required: true)
incl_ncl = include_directories('/home/paul/include')
incl_boost = include_directories('/home/paul/Documents/libraries/boost_1_71_0')
executable('strom', 'main.cpp', install: true, install_dir: '.', dependencies: lib_ncl, include_directories: [incl_ncl,incl_boost])
install_data('test.tre', install_dir: '.')
The line beginning incl_ncl
points meson to the location of NCL’s header files in the same way incl_boost
points to the location of the Boost headers. The following two lines point meson to the location of the libncl.a static library and store this information in a meson variable called lib_ncl
:
lib_ncl = cpp.find_library('ncl', dirs: ['/home/paul/lib/static'], required: true)
incl_ncl = include_directories('/home/paul/include')
The cpp
variable is first set to the meson object that stores information about the C++ compiler. The find_library
function of the compiler object is then used to locate the file libncl.so. The convention for library file naming is to follow the pattern libXXX.so
, so all that find_library
needs to know is the XXX
part (ncl
here) and a list of directories (['/home/plewis/lib/ncl']
here) to include in the search. The resulting lib_ncl
variable is passed to the dependencies
option of the executables
command.
The last line,
install_data('test.tre', install_dir: '.')
copies the tree file test.tre to the directory where the program is installed by meson. Specifying '.'
for install_dir
means that test.tre will be copied directly to the directory specified by the prefix
variable defined in the default_options
section of the project command starting on the first line of meson.build. If we had specified install_dir: 'data'
, then test.tre would be copied to /home/plewis/Documents/strom/distr/data
instead.
The expected output is shown below. Keep in mind that tree topologies are ordered arbitrarily; the important thing to note is whether 7 of the trees in the file have one topology, 4 have a distinctly different topology, and the final 2 trees have a third topology distinct from the first two.
Starting...
storing read block: TAXA
storing read block: TREES
Read 13 trees from file
Topology 1 seen in these 4 trees:
9 10 11 12
Topology 2 seen in these 2 trees:
7 8
Topology 3 seen in these 7 trees:
0 1 2 3 4 5 6
Topologies sorted by sample frequency:
topology frequency
3 7
1 4
2 2
Finished!
If you get the error message above, it means that you have tried to run strom
from a directory other than the directory containing the tree file (test.tre). The test.tre file should have been installed in the same directory as the strom executable when you issued the command meson install
. If you used a command like this to run strom:
../../distr/strom
then you will get the error because strom
will look for the test.tre file in the current working directory, which differs from the directory where test.tre resides.
Important! The lines of output above will be lost in a sea of constructor and destructor notifications unless you comment those out. Visit the Node
, Tree
, Split
, TreeManip
, and TreeSummary
classes and use //
to comment out the std::cout << "Constructing a XXXX" << std::endl;
statement inside the constructor and the std::cout << "Destroying a XXXX" << std::endl;
statement inside the destructor. In future steps, these “reporter” output lines will be created already commented out so that they can be easily turned on if needed during debugging but not clutter the output during normal operation.