You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Analyze_RAW_File.cc 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**********************************************************
  2. This software is part of J.-S. Caux's ABACUS library.
  3. Copyright (c) J.-S. Caux.
  4. -----------------------------------------------------------
  5. File: Analyze_RAW_File.cc
  6. Purpose: give some statistics for the matrix element distribution in a raw file.
  7. ***********************************************************/
  8. #include "ABACUS.h"
  9. using namespace std;
  10. using namespace ABACUS;
  11. int main(int argc, char* argv[])
  12. {
  13. if (argc != 4) {
  14. cout << "Argument needed: rawfile, iKmin, iKmax." << endl;
  15. ABACUSerror("");
  16. }
  17. const char* rawfilename = argv[1];
  18. int iKmin = atoi(argv[2]);
  19. int iKmax = atoi(argv[3]);
  20. ifstream RAW_infile;
  21. RAW_infile.open(rawfilename);
  22. if (RAW_infile.fail()) {
  23. cout << rawfilename << endl;
  24. ABACUSerror("Could not open RAW_infile... ");
  25. }
  26. DP omega;
  27. int iK;
  28. DP FF;
  29. //int conv;
  30. DP dev;
  31. string label;
  32. DP sumFFsq = 0.0;
  33. DP sumFF4 = 0.0;
  34. DP sumFFsqlnFFsq = 0.0;
  35. Vect<int> nFFatK (0, iKmax - iKmin + 1);
  36. Vect<DP> sumFFsqatK (0.0, iKmax - iKmin + 1);
  37. Vect<DP> sumFF4atK (0.0, iKmax - iKmin + 1);
  38. Vect<DP> sumFFsqlnFFsqatK (0.0, iKmax - iKmin + 1);
  39. int nread = 0;
  40. while (RAW_infile.peek() != EOF) {
  41. RAW_infile >> omega >> iK >> FF >> dev >> label;
  42. nread++;
  43. sumFFsq += FF*FF;
  44. sumFF4 += FF*FF*FF*FF;
  45. sumFFsqlnFFsq += FF*FF * log(FF*FF);
  46. if (iK >= iKmin && iK <= iKmax) {
  47. nFFatK[iK-iKmin] += 1;
  48. sumFFsqatK[iK - iKmin] += FF*FF;
  49. sumFF4atK[iK - iKmin] += FF*FF*FF*FF;
  50. sumFFsqlnFFsqatK[iK - iKmin] += FF*FF * log(FF*FF);
  51. }
  52. }
  53. RAW_infile.close();
  54. cout << "Inverse participation ratio: \t" << sumFF4/(sumFFsq*sumFFsq) << endl;
  55. // Entropy is -sum (FFsq/sumFFsq) * ln(FFsq/sumFFsq) = sum (FFsq lnFFsq - FFsq ln sumFFsq)/sumFFsq
  56. cout << "Entropy: \t" << -(sumFFsqlnFFsq - sumFFsq * log(sumFFsq))/sumFFsq << endl;
  57. cout << "iK\tnFFatK\tIPRatiK\tentropyatiK:" << endl;
  58. 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;
  59. return(0);
  60. }