8 int main(
int argc,
char *argv[])
12 cerr <<
"Usage: " << argv[0] <<
" CSV_FILE" << endl;
18 vector<string> headings;
19 vector<vector<float > > intensityData;
21 auto errCode=
loadTextData(argv[1],intensityData,headings,
",\t");
24 cerr <<
"Error loading text file :" << errCode <<endl;
28 if(!intensityData.size())
30 cerr <<
"input data appears to be empty" << endl;
34 cerr <<
"Loaded :" << intensityData.size() <<
"Rows";
37 vector<vector<float > > counts;
39 counts.resize(intensityData.size());
42 v.resize(intensityData[0].size());
45 unsigned int distanceCol=-1;
46 unsigned int countCol=-1;
47 vector<unsigned int> compCols;
50 for(
auto ui=0;ui<headings.size();ui++)
52 if(headings[ui].find(
"Distance") != std::string::npos)
58 if(headings[ui].find(
"Atom Count") != std::string::npos)
65 if(headings[ui].find(
"%") != std::string::npos &&
66 headings[ui].find(
"Sigma") == std::string::npos)
68 cerr <<
"Using :" << headings[ui] << endl;
69 compCols.push_back(ui);
73 if(distanceCol == -1 || countCol == -1)
75 cerr <<
"Unable to locate distance or atom count columns. Aborting" << endl;
82 vector<string> perColumnHeading;
83 vector<vector<float> > perColumnCounts;
84 for(
auto v : compCols)
86 perColumnHeading.push_back(headings[v]);
87 perColumnCounts.push_back(intensityData[v]);
91 vector<float> distances;
92 string distHeader = headings[distanceCol];
93 for(
auto v : intensityData[distanceCol])
94 distances.push_back(v);
96 const float ALPHA=0.99;
97 const unsigned int NTRIALS=1000;
100 vector<vector<pair<float,float> > > errBounds;
102 vector<vector<float> > perRowCounts=perColumnCounts;
105 for(
auto vec: perRowCounts)
116 vector<pair<float,float> > errs;
119 errs.resize(vec.size(),make_pair(-1,-1));
120 errBounds.push_back(errs);
126 for(
auto ui=0;ui<vec.size();ui++)
143 errs.push_back(make_pair(lBound,uBound));
145 cerr <<
" Error bound size:" << errs.size() << endl;
146 errBounds.push_back(errs);
151 cout <<distHeader <<
"\t" ;
152 for(
auto s : perColumnHeading)
153 cout << s <<
"(low)\t" << s <<
"(hi)" <<
"\t";
156 for(
auto ui=0u;ui<errBounds.size();ui++)
158 cout << distances[ui] <<
"\t";
159 for(
auto e : errBounds[ui])
161 cout << e.first <<
"\t" << e.second <<
"\t";
void transposeVector(std::vector< std::vector< T > > &v)
Perform an out-of-place tranposition of a given vector.
unsigned int loadTextData(const char *cpFilename, std::vector< std::vector< float > > &dataVec, std::vector< std::string > &headerVec, const char *delim="\", bool allowNan=true, bool allowConvFails=false, unsigned int headerCount=-1)
Load a CSV, TSV or similar text file. Assumes "C" Locale for input (ie "." as decimal separator)...
bool numericalEstimatePoissRatioConf(float lambda1, float lambda2, float alpha, unsigned int nTrials, gsl_rng *r, float &lBound, float &uBound)
Brute-force poisson ratio confidence estimator. Returns the confidence interval in the estimate of th...
int main(int argc, char *argv[])
gsl_rng * getRng() const
Obtain a GSL random number generator.