41 main(
int argc,
char** argv){
44 cerr<<
"Usage: selector nbins nsurvivors preselection fitdir1 fitdir2 fitdir3 ..."<<endl;
48 unsigned int nbins=
atoi(argv[1]);
49 unsigned int nsurv=
atoi(argv[2]);
52 vector<TString> inputdirectories;
54 map<double,TString> results;
55 unsigned int bestfit=0;
57 unsigned int counter=0;
59 ifstream prefile(argv[3]);
60 cerr <<
"Opened Preselectionfile " << pre << endl;
61 while(!prefile.eof() && prefile.good()){
64 prefile >> dir >> likeli;
66 cerr <<
"Pre: " << dir <<
" " << likeli << endl;
67 inputdirectories.push_back(dir);
70 counter=inputdirectories.size();
74 for(
int i=4;
i<argc; ++
i){
75 inputdirectories.push_back(argv[
i]);
78 if(nsurv>inputdirectories.size()){
79 cerr <<
"Not enough fits to create " << nsurv <<
" survivors." << endl;
91 unsigned int ngen=100;
93 TH2D* hWavesetSize=
new TH2D(
"hWS",
"Waveset sizes evolution",ngen,-0.5,(
double)ngen-.5,100,0,100);
94 TH2D* hEvidences=
new TH2D(
"hEvi",
"Evidence evolution",ngen,-0.5,(
double)ngen-.5,1000,minevi,maxevi);
95 TH2D* hEviSize=
new TH2D(
"hEviSize",
"Evidence vs Waveset size",100,0,100,1000,minevi,maxevi);
97 TH2D* hLogliSize=
new TH2D(
"hLogliSize",
"LogLikelihood vs Waveset size",100,0,100,1000,minevi,minevi);
106 for(
unsigned int j=counter; j<inputdirectories.size(); ++j){
107 cerr <<
"Examining "<<inputdirectories[j]<<endl;
109 unsigned int startgen=inputdirectories[j].Index(
"gen",0)+3;
110 unsigned int endgen=inputdirectories[j].Index(
"/",startgen);
111 TString genS=inputdirectories[j](startgen,endgen-startgen);
112 cerr <<
"generation=" << genS << endl;
113 double gen=atof(genS.Data());
115 TChain* chain=
new TChain(
"pwa");
117 TString f=inputdirectories[j];
119 cerr <<
"Loading " << f << endl;
120 if(chain->Add(f)==0){
121 cerr <<
"No fitoutput files found." << nbins
122 <<
". Skipping fit!" << endl;
128 cerr <<
"Set up Chain"<< endl;
130 chain->SetBranchAddress(
"fitResult_v2",&bin);
131 cerr <<
"Set Branch"<< endl;
133 unsigned int n=chain->GetEntries();
134 cerr <<
"Got Entries"<< endl;
136 cerr << n <<
" bins in this fit. Expected " << nbins
137 <<
". Skipping fit!" << endl;
144 unsigned int nwaves=0;
145 cerr <<
"Reading data..."<< endl;
146 bool allconverged=
true;
147 for(
unsigned int k=0;k<
n;++k){
149 if(!bin->converged()){
150 cerr<<
"Fit not converged. Will skip this."<< endl;
153 if(k==0)nwaves=bin->nmbWaves();
154 sumevi+=bin->evidence();
155 sumlogli+=-bin->logLikelihood();
158 cerr<<
"SumLogli ="<<setprecision(9)<<sumlogli<<endl;
159 cerr<<
"SumEvidence ="<<setprecision(9)<<sumevi<<endl;
160 if(sumevi==0 || !(sumevi>std::numeric_limits<double>::min() && sumevi < std::numeric_limits<double>::max())){
161 cerr<<
"Invalid value. Skipping."<< endl;
169 hWavesetSize->Fill(gen,nwaves);
170 hEvidences->Fill(gen,sumevi);
171 hEviSize->Fill(nwaves,sumevi);
172 hLogliSize->Fill(nwaves,sumlogli);
174 results[sumevi]=inputdirectories[j];
175 if(sumevi>bestLogli){
185 map<double,TString>::iterator mit=results.begin();
186 while(mit!=results.end()){
187 cerr <<mit->second<<
": "<<mit->first<<endl;
191 cerr <<
"Bestfit: "<<inputdirectories[bestfit]
192 <<
" with loglikely/event: "<<bestLogli<<endl;
194 map<double,TString>::iterator mrit=results.end();
195 if(nsurv>results.size())nsurv=results.size();
196 for(
unsigned int i=0;
i<nsurv;++
i){
198 cout << mrit->second;
199 if(!(mrit->second).Contains(
"wavelist"))cout<<
"/wavelist";
200 cout<<
" "<<maxPrecision(mrit->first) << endl;
203 TFile* outfile=TFile::Open(
"genetic_stats.root",
"RECREATE");
204 hWavesetSize->Write();