void DosageCalculator::CalculateMarkerInfo(int marker, double& freq, double& maf, double& avgPost, double& rsq) { if (stored == 0) return; if (!storeDistribution) return; double scale_sg = 1.0 / (samples * genotypes + 1e-30); double scale_g = 1.0 / (genotypes + 1e-30); double scale_ss = 1.0 / (samples * samples + 1e-30); double p0 = 0.0, p1 = 0.0; double qc = 0.0, sumsq = 0.0; for (int sample = 0; sample < genotypes; sample++) { unsigned int n0, n1, n2; GetCounts(sample, marker, n0, n1, n2); p0 += n0; p1 += n1; qc += (n0 > n1 && n0 > n2) ? n0 : (n1 > n2) ? n1 : n2; sumsq += square(n0 + n1 * 0.5) * scale_ss; } p0 *= scale_sg; p1 *= scale_sg; qc *= scale_sg; sumsq *= scale_g; freq = p0 + p1 * 0.50; maf = freq > 0.50 ? 1.0-freq : freq; double var1 = max(p0 + p1 * 0.25 - square(freq), 0); double var2 = max(sumsq - square(freq), 0); avgPost = qc; rsq = var2 / (var1 + 1e-30); }
void DosageCalculator::OutputMarkerInfo(FILE * output) { if (stored == 0) return; if (!storeDistribution) { OutputBasicMarkerInfo(output); return; } fprintf(output, "SNP\tAl1\tAl2\tFreq1\tMAF\tQuality\tRsq\n"); double scale_sg = 1.0 / (samples * genotypes + 1e-30); double scale_g = 1.0 / (genotypes + 1e-30); double scale_ss = 1.0 / (samples * samples + 1e-30); for (int marker = 0; marker < markers; marker++) { double p0 = 0.0, p1 = 0.0; double qc = 0.0, sumsq = 0.0; for (int sample = 0; sample < genotypes; sample++) { unsigned int n0, n1, n2; GetCounts(sample, marker, n0, n1, n2); p0 += n0; p1 += n1; qc += (n0 > n1 && n0 > n2) ? n0 : (n1 > n2) ? n1 : n2; sumsq += square(n0 + n1 * 0.5) * scale_ss; } p0 *= scale_sg; p1 *= scale_sg; qc *= scale_sg; sumsq *= scale_g; double freq = p0 + p1 * 0.50; double var1 = max(p0 + p1 * 0.25 - square(freq), 0); double var2 = max(sumsq - square(freq), 0); MarkerInfo * info = Pedigree::GetMarkerInfo(marker); fprintf(output, "%s\t%s\t%s\t%.4f\t%.4f\t%.4f\t%.4f\n", (const char *) info->name, (const char *) info->GetAlleleLabel(1), info->CountAlleles() > 1 ? (const char *) info->GetAlleleLabel(2) : "-", freq, freq > 0.50 ? 1.0 - freq : freq, qc, var2 / (var1 + 1e-30)); } }
double DosageCalculator::GetQuality(int individual, int genotype) { if (stored == 0) return 0.0; unsigned int n2, n1, n0; GetCounts(individual, genotype, n0, n1, n2); if (n0 >= n2 && n0 >= n1) return n0 / (double) stored; if (n1 >= n2) return n1 / (double) stored; return n2 / (double) stored; }
int DosageCalculator::GetBestGenotype(int individual, int genotype) { if (stored == 0) return 1; unsigned int n2, n1, n0; GetCounts(individual, genotype, n0, n1, n2); if (n0 >= n2 && n0 >= n1) return 0; if (n1 >= n2) return 1; return 2; }
int main(int argc, char *argv[]){ SetStyle(); bool use_mc(false); char opt(' '); while(( opt=getopt(argc, argv, "m") )!=-1){ switch(opt){ case 'm': use_mc=true; break; default: break; } } {TTree crap;} std::vector<std::string> observed_names(0), signal_names; signal_names.push_back("raw_plots_and_values/SMS-TChiHH_2b2b_2J_mChargino-400_mLSP-1_TuneZ2star_8TeV-madgraph-tauola_Summer12-START53_V19_FSIM-v1_AODSIM_UCSB1871_v71_SyncSkim.root"); if(use_mc){ observed_names.push_back("raw_plots_and_values/BJets_HT-1000ToInf_8TeV-madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1895_v71_SyncSkim.root");//6 observed_names.push_back("raw_plots_and_values/BJets_HT-250To500_8TeV-madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1893_v71_SyncSkim.root");//7 observed_names.push_back("raw_plots_and_values/BJets_HT-500To1000_8TeV-madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1894_v71_SyncSkim.root");//8 observed_names.push_back("raw_plots_and_values/TTJets_FullLeptMGDecays_8TeV-madgraph-tauola_Summer12_DR53X-PU_S10_START53_V7C-v2_AODSIM_UCSB1883_v71_SyncSkim.root");//9 observed_names.push_back("raw_plots_and_values/TTJets_SemiLeptMGDecays_8TeV-madgraph-tauola_Summer12_DR53X-PU_S10_START53_V7C-v1_AODSIM_UCSB1884_v71_SyncSkim.root");//10 observed_names.push_back("raw_plots_and_values/TTJets_HadronicMGDecays_8TeV-madgraph_Summer12_DR53X-PU_S10_START53_V7A_ext-v1_AODSIM_UCSB1880_v71_SyncSkim.root");//11 observed_names.push_back("raw_plots_and_values/TTH_HToBB_M-125_8TeV-pythia6_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1855_v71_SyncSkim.root");//12 observed_names.push_back("raw_plots_and_values/TTWJets_8TeV-madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1857_v71_SyncSkim.root");//13 observed_names.push_back("raw_plots_and_values/TTZJets_8TeV-madgraph_v2_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1856_v71_SyncSkim.root");//14 observed_names.push_back("raw_plots_and_values/Tbar_s-channel_TuneZ2star_8TeV-powheg-tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1864_v71_SyncSkim.root");//15 observed_names.push_back("raw_plots_and_values/Tbar_t-channel_TuneZ2star_8TeV-powheg-tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1865_v71_SyncSkim.root");//16 observed_names.push_back("raw_plots_and_values/Tbar_tW-channel-DR_TuneZ2star_8TeV-powheg-tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1866_v71_SyncSkim.root");//17 observed_names.push_back("raw_plots_and_values/T_s-channel_TuneZ2star_8TeV-powheg-tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1860_v71_SyncSkim.root");//18 observed_names.push_back("raw_plots_and_values/T_t-channel_TuneZ2star_8TeV-powheg-tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1861_v71_SyncSkim.root");//19 observed_names.push_back("raw_plots_and_values/T_tW-channel-DR_TuneZ2star_8TeV-powheg-tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1862_v71_SyncSkim.root");//20 observed_names.push_back("raw_plots_and_values/W2JetsToLNu_TuneZ2Star_8TeV-madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1877_v71_SyncSkim.root");//21 observed_names.push_back("raw_plots_and_values/W3JetsToLNu_TuneZ2Star_8TeV-madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1878_v71_SyncSkim.root");//22 observed_names.push_back("raw_plots_and_values/W4JetsToLNu_TuneZ2Star_8TeV-madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1879_v71_SyncSkim.root");//23 observed_names.push_back("raw_plots_and_values/ZJetsToNuNu_100_HT_200_TuneZ2Star_8TeV_madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1887_v71_SyncSkim.root");//24 observed_names.push_back("raw_plots_and_values/ZJetsToNuNu_200_HT_400_TuneZ2Star_8TeV_madgraph_ext_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1889_v71_SyncSkim.root");//25 observed_names.push_back("raw_plots_and_values/ZJetsToNuNu_200_HT_400_TuneZ2Star_8TeV_madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1888_v71_SyncSkim.root");//26 observed_names.push_back("raw_plots_and_values/ZJetsToNuNu_400_HT_inf_TuneZ2Star_8TeV_madgraph_ext_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1891_v71_SyncSkim.root");//27 observed_names.push_back("raw_plots_and_values/ZJetsToNuNu_400_HT_inf_TuneZ2Star_8TeV_madgraph_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1890_v71_SyncSkim.root");//28 observed_names.push_back("raw_plots_and_values/WH_WToLNu_HToBB_M-125_8TeV-powheg-herwigpp_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1858_v71_SyncSkim.root");//29 observed_names.push_back("raw_plots_and_values/ZH_ZToBB_HToBB_M-125_8TeV-powheg-herwigpp_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1868_v71_SyncSkim.root");//30 observed_names.push_back("raw_plots_and_values/WW_TuneZ2star_8TeV_pythia6_tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1874_v71_SyncSkim.root");//31 observed_names.push_back("raw_plots_and_values/ZZ_TuneZ2star_8TeV_pythia6_tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1876_v71_SyncSkim.root");//32 observed_names.push_back("raw_plots_and_values/WbbJetsToLNu_Massive_TuneZ2star_8TeV-madgraph-pythia6_tauola_Summer12_DR53X-PU_S10_START53_V7A-v1_AODSIM_UCSB1859_v71_SyncSkim.root");//33 }else{ observed_names.push_back("raw_plots_and_values/MET_Run2012A-13Jul2012-v1_AOD_UCSB1852_v71_SyncSkim.root");//0 observed_names.push_back("raw_plots_and_values/MET_Run2012B-13Jul2012-v1_AOD_UCSB1853_v71_SyncSkim.root");//1 observed_names.push_back("raw_plots_and_values/MET_Run2012C-24Aug2012-v1_AOD_UCSB1854_v71_SyncSkim.root");//2 observed_names.push_back("raw_plots_and_values/MET_Run2012C-PromptReco-v2_AOD_UCSB1867_v71_SyncSkim.root");//3 observed_names.push_back("raw_plots_and_values/MET_Run2012D-PromptReco-v1_AOD_UCSB1869_v71_SyncSkim.root");//4 observed_names.push_back("raw_plots_and_values/MET_Run2012D-PromptReco-v1_AOD_UCSB1870_v71_SyncSkim.root");//5 } std::vector<TFile*> observed_files(0), signal_files(0); GetFiles(observed_files, observed_names); GetFiles(signal_files, signal_names); std::vector<TTree*> observed_trees(0), signal_trees(0); GetTrees(observed_trees, observed_files); GetTrees(signal_trees, signal_files); WeightCalculator weightCalc(19399.0); std::vector<double> observed_weights(0), signal_weights; GetWeights(observed_weights, observed_names, weightCalc); GetWeights(signal_weights, signal_names, weightCalc); std::vector<ABCDCount> observed_counts(0), signal_counts; GetCounts(observed_counts, observed_trees, observed_weights); GetCounts(signal_counts, signal_trees, signal_weights); KillTrees(observed_trees); KillTrees(signal_trees); KillFiles(observed_files); KillFiles(signal_files); ABCDCalculator abcd_calculator(observed_counts, signal_counts); const unsigned int num_params(abcd_calculator.GetNumberOfParameters()); TMinuit minuit(num_params); minuit.SetPrintLevel(1); double strategy[1]={2.0}; int useless(0); minuit.mnexcm("SET STR", strategy, 1, useless); MinuitFunctor<ABCDCalculator>::SetFunctor(&abcd_calculator); MinuitFunctor<ABCDCalculator>::SetNumParams(num_params); minuit.SetFCN(MinuitFunctor<ABCDCalculator>::Function); minuit.SetMaxIterations(std::numeric_limits<int32_t>::max()); std::cout << "before" << std::endl; for(unsigned int i(0); i<num_params; ++i){ SetParameter(i, num_params, minuit); } std::cout << "middle" << std::endl; minuit.Migrad(); minuit.Migrad(); minuit.Migrad(); minuit.mnmnos(); minuit.mnmnos(); minuit.mnmnos(); std::cout << "after" << std::endl; }