123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /**********************************************************
-
- 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;
- //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);
- }
|