File: bruker1DFile.C

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 239,848 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 93
file content (82 lines) | stat: -rw-r--r-- 1,875 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//

#include <BALL/FORMAT/bruker1DFile.h>
#include <BALL/SYSTEM/binaryFileAdaptor.h>

namespace BALL 
{

  Bruker1DFile::Bruker1DFile()
    : File(),
			min_(0),
			max_(1),
			pars_()
  {
  }

	Bruker1DFile::Bruker1DFile(const String& name, OpenMode open_mode) 
		: File(name + FileSystem::PATH_SEPARATOR + "1r", open_mode),
			min_(0),
			max_(1),
			pars_()
	{
		pars_.open(name + FileSystem::PATH_SEPARATOR + "procs");
		pars_.read();
		min_ = (Size)pars_.getDoubleValue("YMIN_p");
		max_ = (Size)pars_.getDoubleValue("YMAX_p");
		pars_.close();
		read();
	}

	Bruker1DFile::~Bruker1DFile()
	{
	}

	void Bruker1DFile::read(const String &name)
	{
	  pars_.open(name + FileSystem::PATH_SEPARATOR + "procs");
	  pars_.read();
	  min_ = (Size)pars_.getDoubleValue("YMIN_p");
	  max_ = (Size)pars_.getDoubleValue("YMAX_p");
		pars_.close();
	  
	  close();
	  open(name + FileSystem::PATH_SEPARATOR + "1r");
	  read();
	}

  void Bruker1DFile::read()
	{
	  // first we will have to find out whether we are using big or little
	  // endian on this machine.
		unsigned int endTest = 1;
		BinaryFileAdaptor<BALL_INT32> adapt_int32_t_;
		adapt_int32_t_.setSwapEndian((*(char*)&endTest == 1) != (pars_.getDoubleValue("BYTORDP") == 1.0));

	  spectrum_.resize( (Size)pars_.getDoubleValue("SI"));
	  spectrum_.setOrigin(pars_.getDoubleValue("YMIN_p"));
		spectrum_.setDimension(pars_.getDoubleValue("YMAX_p") - pars_.getDoubleValue("YMIN_p"));

	  // back to beginning of file
	  this->reopen();
	  
	  // read data
	  for (Position i = 0; i < spectrum_.size(); ++i)
		{
		  if (!this->good())
		  {
				// ?????: here should be a warning or exception
				return;
			}

			(*this) >> adapt_int32_t_;

		  if ((max_ - min_) != 0) 
			{
				spectrum_[i] = ((double) (adapt_int32_t_.getData() - min_)) / (max_ - min_);
			}
		}
	}
}