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