ROBAST logo
/******************************************************************************
 * Copyright (C) 2006-, Akira Okumura                                         *
 * All rights reserved.                                                       *
 *****************************************************************************/

///////////////////////////////////////////////////////////////////////////////
//
// AFilmetrixDotCom
//
// Wrapper class to read text files retreived from https://reflactiveindex.info
//
///////////////////////////////////////////////////////////////////////////////

#include <fstream>
#include <iostream>

#include "TSystem.h"

#include "AFilmetrixDotCom.h"
#include "AOpticsManager.h"

ClassImp(AFilmetrixDotCom);

AFilmetrixDotCom::AFilmetrixDotCom(const char* fname) : ARefractiveIndex() {
  std::ifstream fin;
  fin.open(gSystem->ExpandPathName(fname));

  if (!fin.is_open()) {
    Error("AFilmetrixDotCom", "Cannot open %s", fname);
    return;
  }

  char buf[100];
  fin.getline(buf, 100);

  // Check header with possible UTF-8 BOM and CR
  // clang-format off
  if (strcmp(buf, "\xef\xbb\xbfWavelength(nm)\tn\tk\r") != 0 &&
      strcmp(buf, "\xef\xbb\xbfWavelength(nm)\tn\tk"  ) != 0 &&
      strcmp(buf,             "Wavelength(nm)\tn\tk\r") != 0 &&
      strcmp(buf,             "Wavelength(nm)\tn\tk")   != 0 ) {
    // clang-format on
    Error("AFilmetrixDotCom", "Invalid data format");
    return;
  }

  fRefractiveIndex = std::make_shared<TGraph>();
  fExtinctionCoefficient = std::make_shared<TGraph>();

  while (1) {
    double wl, n, k;
    fin >> wl >> n >> k;
    if (fin.good()) {
      wl *= AOpticsManager::nm();
      fRefractiveIndex->SetPoint(fRefractiveIndex->GetN(), wl, n);
      fExtinctionCoefficient->SetPoint(fExtinctionCoefficient->GetN(), wl, k);
    } else {
      fin.close();
      break;
    }
  }
}
 AFilmetrixDotCom.cxx:1
 AFilmetrixDotCom.cxx:2
 AFilmetrixDotCom.cxx:3
 AFilmetrixDotCom.cxx:4
 AFilmetrixDotCom.cxx:5
 AFilmetrixDotCom.cxx:6
 AFilmetrixDotCom.cxx:7
 AFilmetrixDotCom.cxx:8
 AFilmetrixDotCom.cxx:9
 AFilmetrixDotCom.cxx:10
 AFilmetrixDotCom.cxx:11
 AFilmetrixDotCom.cxx:12
 AFilmetrixDotCom.cxx:13
 AFilmetrixDotCom.cxx:14
 AFilmetrixDotCom.cxx:15
 AFilmetrixDotCom.cxx:16
 AFilmetrixDotCom.cxx:17
 AFilmetrixDotCom.cxx:18
 AFilmetrixDotCom.cxx:19
 AFilmetrixDotCom.cxx:20
 AFilmetrixDotCom.cxx:21
 AFilmetrixDotCom.cxx:22
 AFilmetrixDotCom.cxx:23
 AFilmetrixDotCom.cxx:24
 AFilmetrixDotCom.cxx:25
 AFilmetrixDotCom.cxx:26
 AFilmetrixDotCom.cxx:27
 AFilmetrixDotCom.cxx:28
 AFilmetrixDotCom.cxx:29
 AFilmetrixDotCom.cxx:30
 AFilmetrixDotCom.cxx:31
 AFilmetrixDotCom.cxx:32
 AFilmetrixDotCom.cxx:33
 AFilmetrixDotCom.cxx:34
 AFilmetrixDotCom.cxx:35
 AFilmetrixDotCom.cxx:36
 AFilmetrixDotCom.cxx:37
 AFilmetrixDotCom.cxx:38
 AFilmetrixDotCom.cxx:39
 AFilmetrixDotCom.cxx:40
 AFilmetrixDotCom.cxx:41
 AFilmetrixDotCom.cxx:42
 AFilmetrixDotCom.cxx:43
 AFilmetrixDotCom.cxx:44
 AFilmetrixDotCom.cxx:45
 AFilmetrixDotCom.cxx:46
 AFilmetrixDotCom.cxx:47
 AFilmetrixDotCom.cxx:48
 AFilmetrixDotCom.cxx:49
 AFilmetrixDotCom.cxx:50
 AFilmetrixDotCom.cxx:51
 AFilmetrixDotCom.cxx:52
 AFilmetrixDotCom.cxx:53
 AFilmetrixDotCom.cxx:54
 AFilmetrixDotCom.cxx:55
 AFilmetrixDotCom.cxx:56
 AFilmetrixDotCom.cxx:57
 AFilmetrixDotCom.cxx:58
 AFilmetrixDotCom.cxx:59
 AFilmetrixDotCom.cxx:60
 AFilmetrixDotCom.cxx:61
 AFilmetrixDotCom.cxx:62