1 #include "abundances.h"
2 
3 struct TrackingInfoPerRep
4 {
5     boost::shared_ptr<const ReadGroupProperties> rg_props;
6     double fpkm;
7     double count;
8     AbundanceStatus status;
9 };
10 
11 struct FPKMContext
12 {
FPKMContextFPKMContext13 	FPKMContext(double cm,
14                 double cv,
15                 double cuv,
16                 double cdv,
17                 const CountPerReplicateTable& cpr,
18                 double r,
19                 const FPKMPerReplicateTable& fpr,
20                 double v,
21                 double fcl,
22                 double fch,
23                 AbundanceStatus s,
24                 const StatusPerReplicateTable& spr,
25                 const vector<double>& fs,
26                 double g)
27     : count_mean(cm),
28     count_var(cv),
29     count_uncertainty_var(cuv),
30     count_dispersion_var(cdv),
31 
32     FPKM(r),
33     FPKM_variance(v),
34     FPKM_conf_lo(fcl),
35     FPKM_conf_hi(fch),
36     status(s),
37 
38     fpkm_samples(fs),
39     gamma(g)
40     {
41         assert (fpr.size() == cpr.size());
42         assert (fpr.size() == spr.size());
43         assert (cpr.size() == spr.size());
44 
45         // TODO: should check for proper alignment of these tables...
46         for (CountPerReplicateTable::const_iterator itr = cpr.begin(); itr != cpr.end(); ++itr)
47         {
48             TrackingInfoPerRep info;
49 
50             info.rg_props = itr->first;
51             info.count = itr->second;
52 
53             FPKMPerReplicateTable::const_iterator f_itr = fpr.find(itr->first);
54             if (f_itr != fpr.end())
55                 info.fpkm = f_itr->second;
56 
57             StatusPerReplicateTable::const_iterator s_itr = spr.find(itr->first);
58             if (s_itr != spr.end())
59                 info.status = s_itr->second;
60 
61             tracking_info_per_rep.push_back(info);
62         }
63 
64         vector<TrackingInfoPerRep>(tracking_info_per_rep).swap(tracking_info_per_rep);
65     }
66 
67 	double count_mean;
68     double count_var;
69     double count_uncertainty_var;
70     double count_dispersion_var;
71     vector<TrackingInfoPerRep> tracking_info_per_rep;
72 	double FPKM;
73 	double FPKM_variance;
74     double FPKM_conf_lo;
75     double FPKM_conf_hi;
76     AbundanceStatus status;
77     vector<double> fpkm_samples;
78     double gamma;
79 };
80 
81 struct FPKMTracking
82 {
83 	string locus_tag;
84 	char classcode;
85 	set<string> tss_ids; // for individual isoforms only
86     set<string> gene_ids;
87 	set<string> gene_names;
88 	set<string> protein_ids;
89 	string description; // isoforms or tss groups (e.g.) involved in this test
90 	string ref_match;
91     int length;
92 
93     vector<vector<boost::shared_ptr<const ReadGroupProperties> > > rg_props;
94 
95 	vector<FPKMContext> fpkm_series;
96 };
97 
98 typedef map<string,  FPKMTracking> FPKMTrackingTable;
99 
100 struct Tracking
101 {
102 	FPKMTrackingTable isoform_fpkm_tracking;
103 	FPKMTrackingTable tss_group_fpkm_tracking;
104 	FPKMTrackingTable gene_fpkm_tracking;
105 	FPKMTrackingTable cds_fpkm_tracking;
106 
clearTracking107     void clear()
108     {
109         isoform_fpkm_tracking.clear();
110         tss_group_fpkm_tracking.clear();
111         gene_fpkm_tracking.clear();
112         cds_fpkm_tracking.clear();
113     }
114 };
115 
116 void add_to_tracking_table(size_t sample_index,
117                            Abundance& ab,
118 						   FPKMTrackingTable& track);
119