STRUCTURE_OF_THE_PROJECT:
	1. src/          -  all source files (both cpp and py; note that cpp executables when compiled with Makefile, are located directly in the main directory)
		NOTE: to run pyhton scripts, firstr "cd ./src", and then "python %scriptname%.py %parameters%" to run it (use -h to get help)
	2. templates/    -  template files for plots and reports
	3. vector_files/ -  dynamic graphlet and dynamic graphlet orbit list files
	4. input/		 -  input networks and ground truth (network files are located in the corresponding subdirectory of input - input/%networkname%)
		%networkname%/   - input files related to a particular network
			1.ground_truth/     - ground truth knowledge (e.g., list of enriched nodes)
			
			2.aggregated/       - aggregated network, contains files %networkname%_aggregated_%threshold%, where %threshold% - aggregation threshold (e.g., 1)
			
			3.snapshots/	      - contains snapshot files (note: in case snapshots were obtained from a temporal network, this directory may contain subdirectories corresponding to 	the aggregation threshold (e.g., as with enron); alphabetical order of the files should correspond to the timestamps of the snapshots.
			
			4.leda_format/   	  - contains aggregated networks (aggregated/) and snapshots (snapshots/) in LEDA format (used by static graphlet counting)
			
			5.%networkname%.txt - temporal network (if available)
	5. output/       - results of the counting and analysis  (network files are located in the corresponding subdirectory of output - output/%networkname%)
		%networkname%/   - output files related to a particular network	
			1.counts/           - results of graphlet counting
					1.%networkname%_%methodname%.txt - node similarities for dynamic graphlet countings
					
					2.static/                        - counts for static graphlet counting (contains %networkname%_aggregated_%threshold%_%methodname% files)
					
					3.static-temporal/			     - counts for static-temporal graphlet counting (contains %networkname%_%methodname%.txt files)
					
					NOTE: for each similarity file, there may be also a corresponding _dist_matrix file - in this file, similarities are converted to distances and matrices are filtered to exclude low-degree nodes (see "run_enrichment_analysis.py")
			
			2.clusterings/	     - results of the clustering based on node similarities; contains files %networkname%_%methodname%_%clusteringname%_%clustercount%_clustering.txt - see run_enrichment_analysis.py; clusterings can be loaded using corresponding functions in clustering.py
			
			3.counts_comparison/ - results of correlated node similarities of various methods(mostly contains files used for the corresponding reports)
			
			4.enrichment/        - results of enrichment analysis (produced by run_enrichment_analysis.py)
				%groundtruthtype%_%clustercount%/             - results for the analysis when using a corresponding ground truth and cluster count
					1.%networkname%_pr_roc_%methodname%       - Precision/Recall results of a particular method
					
					2. log/%networkname%_%methodname%_log.txt - corresponding log information when running the analysis
					
					3. plots/                                 - corresponding plots (r_p - Precision/Recall, k_p-r - {Precision and Recall}/k, k_f - F-score/k, aupr - area under precision-recall) - created by enrichment_report.py
					
					4. report/                                - report created from the plots in "plots/" directory

METHOD NAMES  (to be used when running scripts and when accessing output files):
	1. Static graphlet counting          - aggregated_%threshold%_sgdvs_%numberofnodes% (e.g., aggregated_1_sgdvs_3,aggregated_1_sgdvs_4,aggregated_1_sgdvs_5)
	2. Static-temporal graphlet counting - stgdvs_%numberofnodes% (e.g., stgdvs_3,stgdvs_4,stgdvs_5)
	3. Dynamic graphlet counting 		 - dgdvs_%numberofevents%_%numberofnodes%_%deltat% (e.g., dgdvs_6_4_1, dgdvs_3_3_1)
	4. Dynamic causal graphlet counting  - dcgdvs_%numberofevents%_%numberofnodes%_%deltat% (e.g., 
	, dcgdvs_3_3_1)
	
	NOTE: for static-temporal, dynamic and dynamic causal graphlet counting, in case they were run on snapshots constructed from a temporal network, they will have a corresponding prefix (e.g., enron_snapshots_1month_1_stgdvs_3,enron_snapshots_1month_1_time_dgdvs_6_4_1, enron_snapshots_1month_1_time_dcgdvs_6_4_1)

RUNNING (see run.txt for examples):
count_tmp_graphlets.cpp - dynamic graphlet counting (NOTE: requires vector_files/,
    which are produced via dynamic_graphlet_enumeration/ - i.e., ordered list of dynamic graphlets/orbits up to a given size;
    NOTE: currently, there is a separate file for each nodes/events size; can we use one file for all?
    i.e., generate one file of up to some large size, and then use it for all runs; currently, different size have different orderings,
    so orderings of the same graphlets are not consistent for different sizes)
generate_random_model_networks.py - generate random networks
src/run_graphlet_counting.py - run a method on a given network
split_into_snapshots.py - split list of temporal edges into snapshots

src/run_network_model_analysis.py - compute PCA, distances, and Precision-Recall for class separation (for network classification)
src/run_pca_gdv_analysis.py - compute PCA, distances, and Precision-Recall for class separation (for node classification)
[src/run_enrichment_analysis.py - compute cluster enrichment (i.e., perform clustering and compute Precisio-Recall)]
*_report.py - generate PDF reports

Difference between the project and the paper:
causal graphlets correspond to constrained graphlets

NOTE: the most up-to-date version is in /home/yhulovat/dynamic_graphlets/ in graphzilla02