Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
W
WindEnergyToolbox
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mimc
WindEnergyToolbox
Commits
275c7854
Commit
275c7854
authored
9 years ago
by
tlbl
Browse files
Options
Downloads
Patches
Plain Diff
integrating HAWC2io into windIO
parent
a94b26c6
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
wetb/prepost/windIO.py
+10
-202
10 additions, 202 deletions
wetb/prepost/windIO.py
with
10 additions
and
202 deletions
wetb/prepost/windIO.py
+
10
−
202
View file @
275c7854
...
...
@@ -49,9 +49,11 @@ from wetb.prepost import misc
# http://vind-redmine.win.dtu.dk/projects/pythontoolbox/repository/show/fatigue_tools
from
wetb.fatigue_tools.rainflowcounting.rainflowcount
import
rainflow_astm
as
rainflow_astm
from
wetb.fatigue_tools.rainflowcounting.rfc_hist
import
rfc_hist
as
rfc_hist
from
wetb.hawc2.Hawc2io
import
ReadHawc2
from
wetb.fatigue_tools
import
fatigue
class
LoadResults
(
object
):
class
LoadResults
(
ReadHawc2
):
"""
Read a HAWC2 result data file
Usage:
...
...
@@ -133,211 +135,17 @@ class LoadResults(object):
# FIXME: since HAWC2 will always have lower case output files, convert
# any wrongly used upper case letters to lower case here
self
.
file_name
=
file_name
.
lower
()
self
.
read_sel
()
# create for any supported channel the
# continue if the file has been succesfully read
if
self
.
error_msg
==
'
none
'
:
# load the channel id's and scale factors
self
.
scale_factors
=
self
.
data_sel
()
# with the sel file loaded, we have all the channel names to
# squeeze into a more consistant naming scheme
self
.
_unified_channel_names
()
# only read when asked for
if
readdata
:
# if there is sel file but it is empty or whatever else
# FilType will not exists
try
:
# read the binary file
if
self
.
FileType
==
'
BINARY
'
:
self
.
read_bin
(
self
.
scale_factors
,
usecols
=
usecols
)
# read the ASCII file
elif
self
.
FileType
==
'
ASCII
'
:
self
.
read_ascii
(
usecols
=
usecols
)
else
:
print
(
'
=
'
*
79
)
print
(
'
unknown file type:
'
+
self
.
FileType
)
print
(
'
=
'
*
79
)
self
.
error_msg
=
'
error: unknown file type
'
self
.
sig
=
[]
except
:
print
(
'
=
'
*
79
)
print
(
'
couldn
\'
t determine FileType
'
)
print
(
'
=
'
*
79
)
self
.
error_msg
=
'
error: no file type
'
self
.
sig
=
[]
FileName
=
os
.
path
.
join
(
self
.
file_path
,
self
.
file_name
)
print
(
'
readdata
'
,
readdata
)
ReadOnly
=
0
if
readdata
else
1
super
(
LoadResults
,
self
).
__init__
(
FileName
,
ReadOnly
=
ReadOnly
)
ChVec
=
[]
if
usecols
is
None
else
usecols
self
.
sig
=
super
(
LoadResults
,
self
).
__call__
(
ChVec
=
ChVec
)
if
self
.
debug
:
stop
=
time
()
-
start
print
(
'
time to load HAWC2 file:
'
,
stop
,
'
s
'
)
def
read_sel
(
self
):
# anticipate error on file reading
try
:
# open file, read and close
go_sel
=
os
.
path
.
join
(
self
.
file_path
,
self
.
file_name
+
'
.sel
'
)
FILE
=
opent
(
go_sel
,
"
r
"
)
self
.
lines
=
FILE
.
readlines
()
FILE
.
close
()
self
.
error_msg
=
'
none
'
# error message if the file does not exists
except
:
# print(26*' ' + 'ERROR'
print
(
50
*
'
=
'
)
print
(
self
.
file_path
)
print
(
self
.
file_name
+
'
.sel could not be found
'
)
print
(
50
*
'
=
'
)
self
.
error_msg
=
'
error: file not found
'
def
data_sel
(
self
):
# scan through all the lines in the file
line_nr
=
1
# channel counter for ch_details
ch
=
0
for
line
in
self
.
lines
:
# on line 9 we can read following paramaters:
if
line_nr
==
9
:
# remove the end of line character
line
=
line
.
replace
(
'
\n
'
,
''
).
replace
(
'
\r
'
,
''
)
settings
=
line
.
split
(
'
'
)
# delete all empty string values
for
k
in
range
(
settings
.
count
(
''
)):
settings
.
remove
(
''
)
# and assign proper values with correct data type
self
.
N
=
int
(
settings
[
0
])
self
.
Nch
=
int
(
settings
[
1
])
self
.
Time
=
float
(
settings
[
2
])
self
.
FileType
=
settings
[
3
]
self
.
Freq
=
self
.
N
/
self
.
Time
# prepare list variables
self
.
ch_details
=
np
.
ndarray
(
shape
=
(
self
.
Nch
,
3
),
dtype
=
'
<U100
'
)
# it seems that float64 reeds the data correctly from the file
scale_factors
=
scipy
.
zeros
(
self
.
Nch
,
dtype
=
'
Float64
'
)
#self.scale_factors_dec = scipy.zeros(self.Nch, dtype='f8')
i
=
0
# starting from line 13, we have the channels info
if
line_nr
>
12
:
# read the signal details
if
line_nr
<
13
+
self
.
Nch
:
# remove leading and trailing whitespaces from line parts
self
.
ch_details
[
ch
,
0
]
=
str
(
line
[
12
:
43
]).
strip
()
# chID
self
.
ch_details
[
ch
,
1
]
=
str
(
line
[
43
:
54
]).
strip
()
# chUnits
self
.
ch_details
[
ch
,
2
]
=
str
(
line
[
54
:
-
1
]).
strip
()
# chDescr
ch
+=
1
# read the signal scale parameters for binary format
elif
line_nr
>
14
+
self
.
Nch
:
scale_factors
[
i
]
=
line
# print(scale_factors[i]
#self.scale_factors_dec[i] = D.Decimal(line)
i
=
i
+
1
# stop going through the lines if at the end of the file
if
line_nr
==
2
*
self
.
Nch
+
14
:
self
.
scale_factors
=
scale_factors
if
self
.
debug
:
print
(
'
N
'
,
self
.
N
)
print
(
'
Nch
'
,
self
.
Nch
)
print
(
'
Time
'
,
self
.
Time
)
print
(
'
FileType
'
,
self
.
FileType
)
print
(
'
Freq
'
,
self
.
Freq
)
print
(
'
scale_factors
'
,
scale_factors
.
shape
)
return
scale_factors
break
# counting the line numbers
line_nr
=
line_nr
+
1
def
read
(
self
,
usecols
=
False
):
"""
This whole LoadResults needs to be refactered because it is crap.
Keep the old ones for backwards compatibility
"""
if
self
.
FileType
==
'
ASCII
'
:
self
.
read_ascii
(
usecols
=
usecols
)
elif
self
.
FileType
==
'
BINARY
'
:
self
.
read_bin
(
self
.
scale_factors
,
usecols
=
usecols
)
def
read_bin
(
self
,
scale_factors
,
usecols
=
False
):
if
not
usecols
:
usecols
=
list
(
range
(
0
,
self
.
Nch
))
fid
=
open
(
os
.
path
.
join
(
self
.
file_path
,
self
.
file_name
)
+
'
.dat
'
,
'
rb
'
)
self
.
sig
=
np
.
zeros
(
(
self
.
N
,
len
(
usecols
))
)
for
j
,
i
in
enumerate
(
usecols
):
fid
.
seek
(
i
*
self
.
N
*
2
,
0
)
self
.
sig
[:,
j
]
=
np
.
fromfile
(
fid
,
'
int16
'
,
self
.
N
)
*
scale_factors
[
i
]
def
read_bin_old
(
self
,
scale_factors
):
# if there is an error reading the binary file (for instance if empty)
try
:
# read the binary file
go_binary
=
os
.
path
.
join
(
self
.
file_path
,
self
.
file_name
)
+
'
.dat
'
FILE
=
open
(
go_binary
,
mode
=
'
rb
'
)
# create array, put all the binary elements as one long chain in it
binvalues
=
array
.
array
(
'
h
'
)
binvalues
.
fromfile
(
FILE
,
self
.
N
*
self
.
Nch
)
FILE
.
close
()
# convert now to a structured numpy array
# sig = np.array(binvalues, np.float)
# sig = np.array(binvalues)
# this is faster! the saved bin values are only of type int16
sig
=
np
.
array
(
binvalues
,
dtype
=
'
int16
'
)
if
self
.
debug
:
print
(
self
.
N
,
self
.
Nch
,
sig
.
shape
)
# sig = np.reshape(sig, (self.Nch, self.N))
# # apperently Nch and N had to be reversed to read it correctly
# # is this because we are reading a Fortran array with Python C
# # code? so now transpose again so we have sig(time, channel)
# sig = np.transpose(sig)
# reshape the array to 2D and transpose (Fortran to C array)
sig
=
sig
.
reshape
((
self
.
Nch
,
self
.
N
)).
T
# create diagonal vector of size (Nch,Nch)
dig
=
np
.
diag
(
scale_factors
)
# now all rows of column 1 are multiplied with dig(1,1)
sig
=
np
.
dot
(
sig
,
dig
)
self
.
sig
=
sig
# 'file name;' + 'lnr;msg;'*(len(MsgList)) + '\n'
except
:
self
.
sig
=
[]
self
.
error_msg
=
'
error: reading binary file failed
'
print
(
'
========================================================
'
)
print
(
self
.
error_msg
)
print
(
self
.
file_path
)
print
(
self
.
file_name
)
print
(
'
========================================================
'
)
def
read_ascii
(
self
,
usecols
=
None
):
try
:
go_ascii
=
os
.
path
.
join
(
self
.
file_path
,
self
.
file_name
)
+
'
.dat
'
# self.sig = np.genfromtxt(go_ascii)
self
.
sig
=
np
.
loadtxt
(
go_ascii
,
usecols
=
usecols
)
# self.sig = np.fromfile(go_ascii, dtype=np.float32, sep=' ')
# self.sig = self.sig.reshape((self.N, self.Nch))
except
:
self
.
sig
=
[]
self
.
error_msg
=
'
error: reading ascii file failed
'
print
(
'
========================================================
'
)
print
(
self
.
error_msg
)
print
(
self
.
file_path
)
print
(
self
.
file_name
)
print
(
'
========================================================
'
)
# print '========================================================'
# print 'ASCII reading not implemented yet'
# print '========================================================'
# self.sig = []
# self.error_msg = 'error: ASCII reading not implemented yet'
def
reformat_sig_details
(
self
):
"""
Change HAWC2 output description of the channels short descriptive
...
...
@@ -996,7 +804,7 @@ class LoadResults(object):
return
slice_
,
window
,
zoomtype
,
time_range
# TODO: general signal method, this is not HAWC2 specific, move out
def
calc_stats
(
self
,
sig
,
i0
=
0
,
i1
=
-
1
):
def
calc_stats
(
self
,
sig
,
i0
=
0
,
i1
=
None
):
stats
=
{}
# calculate the statistics values:
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment