85 rindas
2.2 KiB
C++
85 rindas
2.2 KiB
C++
/**********************************************************
|
|
|
|
This software is part of J.-S. Caux's ABACUS++ library.
|
|
|
|
Copyright (c)
|
|
|
|
-----------------------------------------------------------
|
|
|
|
File: Analyze_RAW_File.cc
|
|
|
|
Purpose: give some statistics for the matrix element distribution in a raw file.
|
|
|
|
***********************************************************/
|
|
|
|
#include "JSC.h"
|
|
|
|
using namespace std;
|
|
using namespace JSC;
|
|
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
if (argc != 4) {
|
|
cout << "Argument needed: rawfile, iKmin, iKmax." << endl;
|
|
JSCerror("");
|
|
}
|
|
|
|
const char* rawfilename = argv[1];
|
|
int iKmin = atoi(argv[2]);
|
|
int iKmax = atoi(argv[3]);
|
|
|
|
ifstream RAW_infile;
|
|
RAW_infile.open(rawfilename);
|
|
if (RAW_infile.fail()) {
|
|
cout << rawfilename << endl;
|
|
JSCerror("Could not open RAW_infile... ");
|
|
}
|
|
|
|
DP omega;
|
|
int iK;
|
|
DP FF;
|
|
//int conv;
|
|
DP dev;
|
|
string label;
|
|
|
|
DP sumFFsq = 0.0;
|
|
DP sumFF4 = 0.0;
|
|
DP sumFFsqlnFFsq = 0.0;
|
|
|
|
Vect<int> nFFatK (0, iKmax - iKmin + 1);
|
|
Vect<DP> sumFFsqatK (0.0, iKmax - iKmin + 1);
|
|
Vect<DP> sumFF4atK (0.0, iKmax - iKmin + 1);
|
|
Vect<DP> sumFFsqlnFFsqatK (0.0, iKmax - iKmin + 1);
|
|
|
|
int nread = 0;
|
|
|
|
while (RAW_infile.peek() != EOF) {
|
|
RAW_infile >> omega >> iK >> FF >> dev >> label;
|
|
|
|
nread++;
|
|
sumFFsq += FF*FF;
|
|
sumFF4 += FF*FF*FF*FF;
|
|
sumFFsqlnFFsq += FF*FF * log(FF*FF);
|
|
|
|
if (iK >= iKmin && iK <= iKmax) {
|
|
nFFatK[iK-iKmin] += 1;
|
|
sumFFsqatK[iK - iKmin] += FF*FF;
|
|
sumFF4atK[iK - iKmin] += FF*FF*FF*FF;
|
|
sumFFsqlnFFsqatK[iK - iKmin] += FF*FF * log(FF*FF);
|
|
}
|
|
}
|
|
|
|
RAW_infile.close();
|
|
|
|
cout << "Inverse participation ratio: \t" << sumFF4/(sumFFsq*sumFFsq) << endl;
|
|
// Entropy is -sum (FFsq/sumFFsq) * ln(FFsq/sumFFsq) = sum (FFsq lnFFsq - FFsq ln sumFFsq)/sumFFsq
|
|
cout << "Entropy: \t" << -(sumFFsqlnFFsq - sumFFsq * log(sumFFsq))/sumFFsq << endl;
|
|
|
|
cout << "iK\tnFFatK\tIPRatiK\tentropyatiK:" << endl;
|
|
for (int iK = iKmin; iK <= iKmax; ++iK) cout << iK << "\t" << nFFatK[iK-iKmin] << "\t" << sumFF4atK[iK-iKmin]/(sumFFsqatK[iK - iKmin] * sumFFsqatK[iK - iKmin]) << "\t" << -(sumFFsqlnFFsqatK[iK-iKmin] - sumFFsqatK[iK-iKmin] * log(sumFFsqatK[iK-iKmin]))/sumFFsqatK[iK-iKmin]<< endl;
|
|
|
|
|
|
return(0);
|
|
}
|