# coding: utf-8
# In[1]:
"""
Created on Thu Feb 08 19:50:25 2018
@author: Ondrej
"""
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 14 18:52:48 2015
@author: Ondřej Ficker
Creating HXR histogram from calibration data, data stored in binnary file,
reasonable sampling frequency is 1 MHz.
"""
import sys
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
path = 'C:\\Users\\PC\\Documents\\Data_Compass\\ch0_'
num_file = np.arange(16577,16580,step=1)
#U=200
#CsE=662
#mscint=0.2
#def movingaverage(interval, window_size):
# window= np.ones(int(window_size))/float(window_size)
# return np.convolve(interval, window, 'same')
#fig, ax = plt.subplots()
#fig2,ax2=plt.subplots()
#Y=np.fromfile(path + str(num_file[3]) + file,dtype='>f8', count=-1, sep='')
#k=662/0.05
##setting time axis
#print(np.shape(Y))
#
#X=np.linspace(0,len(Y),len(Y))
#
#ax2.plot(X,movingaverage(Y,5))
#plt.show()
#def fit_func(x,a,b,c,d):
# return a*np.exp(-(x-b)**2/c**2) + d
#
#
#def peakdet(v, delta, x=None):
# """
# Converted from MATLAB script at http://billauer.co.il/peakdet.html
# Returns two arrays
# function [maxtab, mintab]=peakdet(v, delta, x)
# %PEAKDET Detect peaks in a vector
# % [MAXTAB, MINTAB] = PEAKDET(V, DELTA) finds the local
# % maxima and minima ("peaks") in the vector V.
# % MAXTAB and MINTAB consists of two columns. Column 1
# % contains indices in V, and column 2 the found values.
# %
# % With [MAXTAB, MINTAB] = PEAKDET(V, DELTA, X) the indices
# % in MAXTAB and MINTAB are replaced with the corresponding
# % X-values.
# %
# % A point is considered a maximum peak if it has the maximal
# % value, and was preceded (to the left) by a value lower by
# % DELTA.
# % Eli Billauer, 3.4.05 (Explicitly not copyrighted).
# % This function is released to the public domain; Any use is allowed.
# """
# maxtab = []
# mintab = []
# if x is None:
# x = np.arange(len(v))
# v = np.asarray(v)
# if len(v) != len(x):
# sys.exit('Input vectors v and x must have same length')
# if not np.isscalar(delta):
# sys.exit('Input argument delta must be a scalar')
# if delta <= 0:
# sys.exit('Input argument delta must be positive')
# mn, mx = np.Inf, -np.Inf
# mnpos, mxpos = np.NaN,np.NaN
# lookformax = True
# for i in np.arange(len(v)):
# this = v[i]
# if this > mx:
# mx = this
# mxpos = x[i]
# if this < mn:
# mn = this
# mnpos = x[i]
# if lookformax:
# if this < mx-delta:
# maxtab.append((mxpos, mx))
# mn = this
# mnpos = x[i]
# lookformax = False
# else:
# if this > mn+delta:
# mintab.append((mnpos, mn))
# mx = this
# mxpos = x[i]
# lookformax = True
#
# return np.array(maxtab), np.array(mintab)
#
## Finding peaks
##maxtab, mintab=peakdet(Y,0.001,X)
##ax.set_ylabel('Counts [-]')
##ax.set_xlabel(r'E [keV]')
##print(len(maxtab))
##ax.hist(maxtab[:,1],np.arange(0.0,0.08,0.001)) #histogram in voltage
##ax.hist(maxtab[:,1],np.linspace(250,1600,80)) #histogram in Energy
#
## saving and showing the figure
##plt.savefig('Hist_to_GOLwiki_cal.png')
#res = []
#for item in num_file:
# print(item)
# Y=np.fromfile(path + file + str(item) + '.bin',dtype='>f8', count=-1, sep='')
# X = np.linspace(0,len(Y),len(Y))
# maxtab, mintab = peakdet(Y,1,X)
# print(len(maxtab))
# res.append(maxtab)
#all_res = np.concatenate(res)
# #histogram in voltage
#plt.hist(all_res[:,1],np.arange(0.0,3,0.01))
#plt.xlabel(r'$U \ [\mathrm{V}]$')
#plt.ylabel(r'$N \ [\mathrm{-}]$')
#
#hist,edges = np.histogram(all_res[:,1],bins=150,range=(0.6,3))
#plt_edges = (edges[:-1]+edges[1:])/2
#plt.plot(plt_edges,hist,'.')
#
#x_min = 2.1
#x_max = 3
##hist_fit = hist[(np.where(plt_edges >= x_min)) and (np.where(plt_edges <= x_max))]
#hist_fit = hist[np.where(plt_edges >= x_min)]
#edges_fit = plt_edges[np.where(plt_edges >= x_min)]
#
#popt,pcov = curve_fit(fit_func,edges_fit,hist_fit)
#
#print('Estimated position of the peak: ' + str(popt[1]))
#print('Error of esmtimation: ' + str(np.sqrt(np.diag(pcov))[1]))
#
#x = np.linspace(0.01,3,100)
#plt.figure()
#plt.plot(plt_edges,hist,'.',label='Data')
#plt.plot(edges_fit,hist_fit,'.',label='Fitted data')
#plt.plot(x,fit_func(x,*popt),label='Fit')
#plt.legend()
#plt.xlabel(r'$U \ [\mathrm{V}]$')
#plt.ylabel(r'$N \ [\mathrm{-}]$')
#
#
#plt.figure()
#plt.hist(all_res[:,1],np.arange(0.0,3,0.02))
#plt.plot(x,fit_func(x,*popt),label='Fit')
#plt.xlabel(r'$U \ [\mathrm{V}]$')
#plt.ylabel(r'$N \ [\mathrm{-}]$')
#plt.xlim([1,3])
#plt.title(r'$U_{Source} = 1100 \ \mathrm{V}$')
#plt.legend()
#
#def fit_func2(x,a,b,c):
# return a*np.exp(b*(x-c))
#
#x0 = 2.81065e+6
#x1 = 2.8107e+6
#index1 = (X > x0)
#index2 = (X < x1)
#index = index1 * index2
#popt,pcov = curve_fit(fit_func2,X[index],Y[index])
#plt.plot(X[index],Y[index])
data = []
for i,item in enumerate(num_file):
Y=np.fromfile(path + str(item),dtype='>f8', count=-1, sep='')
data.append([item,Y])
time = np.linspace(952,1112,len(Y))
plt.figure()
for i in range(len(data)):
plt.plot(time,data[i][1],label='Shot: ' + str(data[i][0]))
plt.legend()
plt.xlabel(r'$t \ [\mathrm{ms}]$')
plt.xlabel(r'$HXR \ [\mathrm{a.u.}] $')
# In[ ]: