/********************************************************** This software is part of J.-S. Caux's ABACUS library. Copyright (c) J.-S. Caux. ----------------------------------------------------------- File: Analyze_RAW_File.cc Purpose: give some statistics for the matrix element distribution in a raw file. ***********************************************************/ #include "ABACUS.h" using namespace std; using namespace ABACUS; int main(int argc, char* argv[]) { if (argc != 4) { cout << "Argument needed: rawfile, iKmin, iKmax." << endl; ABACUSerror(""); } 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; ABACUSerror("Could not open RAW_infile... "); } DP omega; int iK; DP FF; DP dev; string label; DP sumFFsq = 0.0; DP sumFF4 = 0.0; DP sumFFsqlnFFsq = 0.0; Vect nFFatK (0, iKmax - iKmin + 1); Vect sumFFsqatK (0.0, iKmax - iKmin + 1); Vect sumFF4atK (0.0, iKmax - iKmin + 1); Vect 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); }