This commit is contained in:
orgin 2023-11-02 13:42:44 +08:00
commit a8cb864938
13 changed files with 464 additions and 263 deletions

View File

@ -1,5 +1,6 @@
<template>
<a-table
ref="tableRef"
class="custom-table"
v-bind="$attrs"
:data-source="list"
@ -107,6 +108,14 @@ export default {
handleTableChange(pagination, filters, sorter) {
this.$emit('change', pagination, filters, sorter)
},
// index
scrollIntoView(index) {
const tableEle = this.$refs.tableRef.$el
const tableBodyEle = tableEle.querySelector('.ant-table-body')
const prevEle = tableBodyEle.querySelector(`.ant-table-row:nth-child(${index + 1})`)
tableBodyEle.scrollTop = prevEle.offsetTop
},
},
watch: {
selectedRowKeys(val) {

View File

@ -36,6 +36,7 @@
<span @click="handleChangeMarkLine('next')">&gt;</span>
</p>
<custom-table
ref="tableRef"
size="small"
:class="list.length ? 'has-data' : ''"
:list="list"
@ -222,10 +223,9 @@ import { findNearPeak, getLineData, transformPointListData } from '@/utils/sampl
const initialOption = {
grid: {
top: 40,
left: 40,
left: 80,
right: 30,
bottom: 30,
containLabel: true,
},
title: {
text: '',
@ -372,14 +372,16 @@ const columns = [
const thumbnailOption = {
grid: {
top: 0,
left: 5,
right: 5,
left: 0,
right: 0,
bottom: 0,
},
xAxis: {
type: 'category',
axisLine: {
show: false,
lineStyle: {
color: '#fff',
}
},
splitLine: {
show: false,
@ -387,6 +389,9 @@ const thumbnailOption = {
axisLabel: {
show: false,
},
axisTick: {
show: false,
},
min: 1,
max: 'dataMax',
},
@ -401,8 +406,12 @@ const thumbnailOption = {
axisLabel: {
show: false,
},
min: 0.1,
max: 'dataMax',
max: (value) => {
return (Math.abs(value.min) < value.max ? value.max : -value.min).toFixed(2)
},
min: (value) => {
return (Math.abs(value.min) < value.max ? -value.max : value.min).toFixed(2)
},
},
series: null,
}
@ -507,7 +516,7 @@ export default {
const currSampleDetailInfo = await this.$store.dispatch('GET_SAMPLE_DATA', inputFileName)
const {
data: { allData, shadowChannelChart, shapeChannelData, peak, BaseCtrls },
data: { allData, shadowChannelChart, shapeChannelData, peak, BaseCtrls, barChart },
} = currSampleDetailInfo
const channelBaseLine = getLineData(allData, 'BaseLine', 'channel')
@ -521,9 +530,9 @@ export default {
this.channelPeakChart = channelPeakGroup
this.energy = allEnergy
this.BaseCtrls = BaseCtrls
this.barChart = shadowChannelChart
this.barChart = barChart
this.setChartOption(channelBaseLine, shadowChannelChart, channelPeakGroup, shapeChannelData, shadowChannelChart)
this.setChartOption(channelBaseLine, shadowChannelChart, channelPeakGroup, shapeChannelData, barChart)
this.list = peak
},
@ -542,7 +551,7 @@ export default {
// 线
series.push(this.buildCtrlPoint(baseCP))
// this.thumbnailOption.series = this.buildBarChart(bar)
this.thumbnailOption.series = this.buildBarChart(bar)
this.option.series = series
},
@ -578,7 +587,7 @@ export default {
if (this.list.length) {
const selectedRow = this.list[index]
this.selectTableRow(selectedRow.index)
this.selectTableRow(selectedRow.index, index)
this.getSelPosNuclide(selectedRow)
this.selectedTableItem = selectedRow
}
@ -638,27 +647,53 @@ export default {
this.setMarkLineXAxis(centroid)
const selectedRow = this.list[i]
this.selectedTableItem = selectedRow
this.selectTableRow(selectedRow.index)
this.selectTableRow(selectedRow.index, i)
this.getSelPosNuclide(selectedRow)
this.adjustArea(i)
return
}
}
} else if (direction == 'prev') {
for (i = size - 1; i >= 0; i--) {
if (Math.round(this.list[i].peakCentroid) < prevAxis) {
this.setMarkLineXAxis(Math.round(this.list[i].peakCentroid))
const centroid = Math.round(this.list[i].peakCentroid)
if (centroid < prevAxis) {
this.setMarkLineXAxis(centroid)
const selectedRow = this.list[i]
this.selectedTableItem = selectedRow
this.selectTableRow(selectedRow.index)
this.selectTableRow(selectedRow.index, i)
this.getSelPosNuclide(selectedRow)
this.adjustArea(i)
return
}
}
}
},
selectTableRow(key) {
/**
* 根据当前Peak调整缩放范围
*/
adjustArea(index) {
const peak = this.channelPeakChart[index]
if (peak) {
const peakCountMax = Math.max(...peak.pointlist.map(({ y }) => y))
const peakCountMin = Math.min(...peak.pointlist.map(({ y }) => y))
const {
yAxis: { max, min },
} = this.option
if (max !== 'dataMax' && peakCountMin >= max) {
this.option.yAxis.max = 'dataMax'
}
if (peakCountMax <= min) {
this.option.yAxis.min = 0.1
}
}
},
selectTableRow(key, index) {
this.selectedKeys = [key]
this.$refs.tableRef.scrollIntoView(index)
},
// 线
@ -713,16 +748,6 @@ export default {
}
},
// Channel
getPeakMaxValues() {
const maxXAxises = this.channelPeakChart.map((item) => {
const allY = item.pointlist.map((point) => point.y)
const max = item.pointlist.find((point) => point.y == Math.max(...allY))
return max.x
})
return maxXAxises
},
// peak comment
handleAddPeakComment() {
if (!this.selectedKeys.length) {
@ -914,7 +939,7 @@ export default {
},
//
handleTableRowClick(row) {
handleTableRowClick(row, index) {
if (this.selectedTableItem == row) {
return
}
@ -940,6 +965,8 @@ export default {
this.getSelPosNuclide(row)
this.selectedTableItem = row
this.adjustArea(index)
},
//
@ -1005,8 +1032,6 @@ export default {
this.thumbnailOption.xAxis.min = x1
this.thumbnailOption.xAxis.max = x2
this.thumbnailOption.yAxis.min = y1
this.thumbnailOption.yAxis.max = y2
if (this.btnGroupType == 2) {
this.buildRect()
@ -1023,8 +1048,6 @@ export default {
this.thumbnailOption.xAxis.min = 1
this.thumbnailOption.xAxis.max = 'dataMax'
this.thumbnailOption.yAxis.min = 0.1
this.thumbnailOption.yAxis.max = 'dataMax'
if (this.btnGroupType == 2) {
this.buildRect()
@ -1522,14 +1545,24 @@ export default {
//
buildBarChart(barChart) {
return buildLineSeries(
'BarChart',
barChart.map(({ x, y }) => [x, y]),
'#fff',
{
return {
name: 'BarChart',
type: 'bar',
data: barChart.map(({ x, y }) => [x, y]),
itemStyle: {
color: '#fff',
},
lineStyle: {
width: 1,
},
symbol: 'none',
symbolSize: 1,
emphasis: {
disabled: true,
},
animation: false,
silent: true,
}
)
},
/**
@ -1617,7 +1650,7 @@ export default {
.thumbnail {
height: 50px;
margin: 10px 10px 35px 40px;
margin: 10px 30px 35px 80px;
background-color: #255369;
}

View File

@ -72,11 +72,15 @@ export default {
qcFileName,
}
res = await postAction(url, params)
} else if (this.type == 2) {
res = await getAction(url, {
sampleId,
fileName,
// ...this.extraData,
})
} else {
res = await getAction(url, {
sampleId,
// fileName,
...this.extraData,
})
}

View File

@ -1,7 +1,7 @@
<template>
<custom-modal v-model="visible" title="BetaGamma Analyser Log" :width="800">
<a-spin :spinning="isLoading">
<a-textarea class="bg-log-viewer" v-model="content"></a-textarea>
<a-textarea :rows="20" v-model="content"></a-textarea>
</a-spin>
<div slot="custom-footer">
<a-button type="primary" @click="handleClick">Save As</a-button>
@ -26,7 +26,7 @@ export default {
try {
this.isLoading = true
const { dbName, sampleId, sampleFileName, gasFileName, detFileName, qcFileName } = this.newSampleData
const { success, result, message } = await getAction('/spectrumAnalysis/viewBGLogViewer', {
const result = await getAction('/spectrumAnalysis/viewBGLogViewer', {
dbName,
sampleId,
sampleFileName,
@ -34,12 +34,7 @@ export default {
detFileName,
qcFileName,
})
if (success) {
console.log('%c [ ]-21', 'font-size:13px; background:pink; color:#bf2c9f;', result)
this.content = 'test'
} else {
this.$message.error(message)
}
this.content = result
} catch (error) {
console.error(error)
} finally {
@ -60,8 +55,4 @@ export default {
</script>
<style lang="less" scoped>
.bg-log-viewer {
height: 400px;
overflow: auto;
}
</style>

View File

@ -545,6 +545,12 @@ const newCalibrationFuncModel = {
export default {
mixins: [SampleDataMixin],
components: { CustomChart, TitleOverBorder },
props: {
isFirstFitting: {
type: Boolean,
required: false,
},
},
data() {
this.columns = columns
@ -594,7 +600,7 @@ export default {
recalculateROICountsFor: [],
count: 0, // tableWidgets
isFirstFitting: true,
// isFirstFitting: true,
isInverse: false, //
betaIsFitting: false,
}
@ -608,12 +614,14 @@ export default {
},
async getData() {
const { sampleId = '', qcFileName } = this.newSampleData
// sampleFileName 20231101xiao
const { sampleId = '', qcFileName, sampleFileName = inputFileName } = this.newSampleData
try {
this.isLoading = true
const res = await getAction('/spectrumAnalysis/viewBetaDetectorCalibration', {
sampleId,
qcFileName,
sampleFileName
})
if (res.success) {
const { CToE, EToC, betaEnergy, gammaEnergy, gammaGatedBetaSpectrum, histogramData, oldScatterSeries } =
@ -623,7 +631,7 @@ export default {
this.oldScatterSeries = oldScatterSeries
this.count = oldScatterSeries.length
this.isFirstFitting = true
// this.isFirstFitting = true
this.betaGammaChartOption.series.data = histogramData.map(({ b, g, c }) => [b, g, c])
this.gammaEnergy = gammaEnergy
@ -644,6 +652,13 @@ export default {
this.figureChartOption.series[0].markPoint.data = oldScatterSeries.map(({ x, y }) => ({ xAxis: x, yAxis: y }))
this.oldChartOption = cloneDeep(this.figureChartOption)
// reanalyzefittingReanalyze 20231101xiao
// todo fitting
if(this.getCache("calibration-beta:"+this.newSampleData.inputFileName)) {
this.setFirringResult(this.getCache("calibration-beta:"+this.newSampleData.inputFileName))
return false;
}
} else {
this.$message.error(res.message)
}
@ -861,6 +876,7 @@ export default {
// Reset Button
handleReset() {
this.removeCache("calibration-beta:"+this.newSampleData.inputFileName) // fitting 20231101:xiao
this.newCalibrationFuncModel = cloneDeep(newCalibrationFuncModel)
this.list = []
this.newE2C = []
@ -880,7 +896,9 @@ export default {
}
try {
const { success, result, message } = await postAction('/spectrumAnalysis/fitting', {
...this.newCalibrationFuncModel,
...this.list.length <= 0 ? this.newCalibrationFuncModel : [], // list C to E 20231101xiao
sampleFileName: this.newSampleData.inputFileName,
tabName: "beta",
// 20231028Xiao
tempPoints: this.list.length > 0
? this.list.map((item) => ({ x: item.channel, y: item.energy }))
@ -891,10 +909,25 @@ export default {
count: this.isFirstFitting || !this.isInverse ? undefined : this.count,
})
if (success) {
this.isFirstFitting = false
// this.isFirstFitting = false
this.betaIsFitting = true
this.$emit('isFitting', this.betaIsFitting)
this.$emit('isFitting', true) // reAnalyzeisFirstFittingtrue 20231101xiao
this.setCache("calibration-beta:"+this.newSampleData.inputFileName, result) // ReAnalyze 20231101xiao
this.setFirringResult(result)
} else {
this.$message.error(message)
}
} catch (error) {
console.error(error)
}
},
// fittingReAnalyze 20231101xiao
setFirringResult(result){
const { EToC, newLineSeries, newScatterSeriesData, tableWidgets, CToE } = result
this.newE2C = EToC
this.newLineSeries = newLineSeries
@ -934,12 +967,6 @@ export default {
}
})
}
} else {
this.$message.error(message)
}
} catch (error) {
console.error(error)
}
},
// Figure Chart
@ -985,6 +1012,15 @@ export default {
}
return 0
},
getCache(name){
return this.$ls.get(name)
},
setCache(name, data){
this.$ls.set(name, data)
},
removeCache(name){
this.$ls.remove(name) // fitting 20231101:xiao
}
},
computed: {
rectHeight() {

View File

@ -435,6 +435,12 @@ const newCalibrationFuncModel = {
export default {
mixins: [SampleDataMixin],
components: { CustomChart, TitleOverBorder },
props: {
isFirstFitting: {
type: Boolean,
required: false,
},
},
data() {
this.columns = columns
@ -466,7 +472,7 @@ export default {
recalculateROICountsFor: [],
count: 0, // tableWidgets
isFirstFitting: true,
// isFirstFitting: true,
isInverse: false, //
gammaIsFitting: false,
}
@ -480,12 +486,16 @@ export default {
},
async getData() {
const { sampleId = '', qcFileName } = this.newSampleData
console.log("isFirstFitting>>>"+this.isFirstFitting);
// sampleFileName 20231101xiao
const { sampleId = '', qcFileName, sampleFileName = inputFileName } = this.newSampleData
try {
this.isLoading = true
const res = await getAction('/spectrumAnalysis/viewGammaDetectorCalibration', {
sampleId,
qcFileName,
sampleFileName
})
if (res.success) {
@ -495,7 +505,7 @@ export default {
this.e2c = EToC
this.oldScatterSeries = oldScatterSeries
this.count = oldScatterSeries.length
this.isFirstFitting = true
// this.isFirstFitting = true
const { max: _max, min: _min, interval: _interval } = splitAxis(max, min, 4)
@ -519,6 +529,13 @@ export default {
this.figureChartOption.series[0].markPoint.data = oldScatterSeries.map(({ x, y }) => ({ xAxis: x, yAxis: y }))
this.oldChartOption = cloneDeep(this.figureChartOption)
// reanalyzefittingReanalyze 20231101xiao
// todo fitting
if(this.getCache("calibration-gamma:"+this.newSampleData.inputFileName)) {
this.setFirringResult(this.getCache("calibration-gamma:"+this.newSampleData.inputFileName))
return false;
}
} else {
this.$message.error(res.message)
}
@ -640,12 +657,13 @@ export default {
// Reset Button
handleReset() {
this.$ls.remove("calibration-gamma:"+this.newSampleData.inputFileName) // fitting 20231101:xiao
this.newCalibrationFuncModel = cloneDeep(newCalibrationFuncModel)
this.list = []
this.newE2C = []
this.figureChartOption = cloneDeep(this.oldChartOption)
this.isFirstFitting = true
this.isFirstFitting = false
this.isInverse = false
},
@ -657,8 +675,10 @@ export default {
}
try {
const { success, result, message } = await postAction('/spectrumAnalysis/fitting', {
...this.newCalibrationFuncModel,
// 20231028Xiao
...this.list.length <= 0 ? this.newCalibrationFuncModel : [], // list C to E 20231101xiao
sampleFileName: this.newSampleData.inputFileName,
tabName: "gamma",
// 20231028Xiao
tempPoints: this.list.length > 0
? this.list.map((item) => ({ x: item.channel, y: item.energy }))
: this.oldScatterSeries,
@ -669,10 +689,24 @@ export default {
count: this.isFirstFitting || !this.isInverse ? undefined : this.count,
})
if (success) {
this.isFirstFitting = false
// this.isFirstFitting = true
this.gammaIsFitting = false
this.$emit('isFitting', this.gammaIsFitting)
this.$emit('isFitting', true) // reAnalyzeisFirstFittingtrue 20231101xiao
this.setCache("calibration-gamma:"+this.newSampleData.inputFileName, result) // ReAnalyze 20231101xiao
this.setFirringResult(result)
} else {
this.$message.error(message)
}
} catch (error) {
console.error(error)
}
},
// fittingReAnalyze 20231101xiao
setFirringResult(result){
const { EToC, newLineSeries, newScatterSeriesData, tableWidgets, CToE } = result
this.newE2C = EToC
this.newLineSeries = newLineSeries
@ -689,7 +723,6 @@ export default {
paramC: Number(paramC).toPrecision(6),
}
}
const energyValues = newLineSeries.map((item) => item.y)
const { max: prevMax, min: prevMin } = this.oldChartOption.yAxis
@ -710,12 +743,6 @@ export default {
yAxis: y,
}))
}
} else {
this.$message.error(message)
}
} catch (error) {
console.error(error)
}
},
// Figure Chart
@ -761,6 +788,15 @@ export default {
}
return 0
},
getCache(name){
return this.$ls.get(name)
},
setCache(name, data){
this.$ls.set(name, data)
},
removeCache(name){
this.$ls.remove(name) // fitting 20231101:xiao
}
},
}
</script>

View File

@ -6,10 +6,11 @@
class="beta-gamma-tool-of-calibration"
:footer="null"
destroy-on-close
@cancel="handleExit"
>
<a-tabs :animated="false" v-model="currTab">
<a-tab-pane tab="Gamma Detector Calibration" key="gamma">
<gamma-detector-calibration @isFitting="getFittingFlag_gamma" />
<gamma-detector-calibration @isFitting="getFittingFlag_gamma" :isFirstFitting="gammaEnergyValid"/>
</a-tab-pane>
<a-tab-pane tab="Beta Detector Calibration" key="beta">
<beta-detector-calibration @isFitting="getFittingFlag_beta" />
@ -69,7 +70,8 @@ export default {
checkDet: false,
},
betaEnergyValid: false,
gammaEnergyValid: true,
gammaEnergyValid: false,
isReanlyze: false
}
},
methods: {
@ -88,9 +90,15 @@ export default {
this.betaEnergyValid = val
},
getFittingFlag_gamma(val) {
console.log("zhiqian>>>"+this.gammaEnergyValid);
this.gammaEnergyValid = val
console.log("zhihou>>>"+this.gammaEnergyValid);
},
handleReAnalyse() {
// todo 1.fitting; 2.isReAnalyze
if(!this.gammaEnergyValid){
return false;
}
const regExp = /^([A-Z]{1,}\d{1,})_/
const regMatched = this.newSampleData.inputFileName.match(regExp)
const currStationName = regMatched[1]
@ -140,13 +148,19 @@ export default {
})
this.$emit('sendXeData', res.result.XeData)
this.$message.success('Analyse Success!')
this.visible = false
this.isReanlyze = true
this.handleExit()
} else {
this.$message.warning(res.message)
}
})
},
handleExit() {
this.gammaEnergyValid = this.isReanlyze
console.log("exit>>>this.isReanlyze>>>"+this.isReanlyze);
if(!this.isReanlyze && this.$ls.get("calibration-gamma:"+this.newSampleData.inputFileName)){
this.$ls.remove("calibration-gamma:"+this.newSampleData.inputFileName) // ReANalyzefitting 20231101:xiao
}
this.visible = false
},
},

View File

@ -110,15 +110,15 @@ export default {
this.list.push({
qcFlags: 'Gas Bg',
evaluationMetrics: result.gasBgValueAndStatus,
value: result.gasBgValueAndStatus ? 'Match' : 'UnMatch',
evaluationMetrics: result.gasBgEvaluationMetrics,
value: result.gasBgValue,
status: result.gasBgValueAndStatus ? 'Pass' : 'Failed',
})
this.list.push({
qcFlags: 'Det Bg',
evaluationMetrics: result.detBgValueAndStatus,
value: result.detBgValueAndStatus ? 'Match' : 'UnMatch',
evaluationMetrics: result.detBgEvaluationMetrics,
value: result.detBgValue,
status: result.detBgValueAndStatus ? 'Pass' : 'Failed',
})

View File

@ -114,6 +114,7 @@ export default {
return {
queryParam: {
menuTypes: 'G,B',
sampleType: 'P',
startDate: moment().add(-7, 'd').format('YYYY-MM-DD'),
endDate: moment().format('YYYY-MM-DD'),
dbName: 'auto',
@ -323,7 +324,16 @@ export default {
value: 'G',
},
]
this.sampleTypeOption = event == 'B' ? arr_B : event == 'G' ? arr_G : arr_A
if (event == 'B') {
this.sampleTypeOption = arr_B
this.queryParam.sampleType = 'B'
} else if (event == 'G') {
this.sampleTypeOption = arr_G
this.queryParam.sampleType = 'P'
} else {
this.sampleTypeOption = arr_A
this.queryParam.sampleType = 'P'
}
this.getStationAndDetectorList(event)
},
},

View File

@ -421,6 +421,7 @@ export default {
m_vCurReso: this.list.map((item) => item.fwhm),
m_vCurUncert: this.uncert,
m_curParam: this.param,
width: 922,
})
if (success) {
this.handleResult(result)

View File

@ -86,6 +86,7 @@ const columns = [
{
title: 'Indentify',
dataIndex: 'indentify',
ellipsis: true,
},
]
export default {

View File

@ -141,7 +141,7 @@ import StripModal from './components/Modals/StripModal.vue'
import { FilePicker } from '@/utils/FilePicker'
import { zipFile } from '@/utils/file'
import { findNearPeak } from '@/utils/sampleHelper'
import baseCtrlJson from './baseCtrlJson.json'
import { add, subtract } from 'xe-utils/methods'
export default {
props: {
@ -303,8 +303,8 @@ export default {
case '=': // x
nextMinX = currMinX - xStep
nextMaxX = currMaxX + xStep
if (nextMinX < 1) {
nextMinX = 1
if (nextMinX < this.xAxisMin) {
nextMinX = this.xAxisMin
}
if (nextMaxX > maxX) {
nextMaxX = maxX
@ -351,30 +351,45 @@ export default {
if (markLineXAxis == maxX) {
return
}
const nextAxis = markLineXAxis == -1 ? 1 : markLineXAxis + 1
markLineData.xAxis = nextAxis
let rightAxis = -1
if (markLineXAxis == -1) {
rightAxis = this.xAxisMin
} else {
if (this.isEnergy) {
const channel = this.getChannelByEnergy(markLineXAxis)
rightAxis = this.getEnergyByChannel(channel + 1)
} else {
rightAxis = markLineXAxis + 1
}
}
markLineData.xAxis = rightAxis
const {
channel: nextChannel,
energy: nextEnergy,
counts: nextCounts,
} = this.getEnergyAndCountsByXAxis(nextAxis)
this.setChartBottomTitle(nextChannel, nextEnergy, nextCounts)
this.getSelPosNuclide(nextChannel)
channel: rightChannel,
energy: rightEnergy,
counts: rightCounts,
} = this.getEnergyAndCountsByXAxis(rightAxis)
this.setChartBottomTitle(rightChannel, rightEnergy, rightCounts)
this.getSelPosNuclide(rightChannel)
break
case 'ArrowLeft':
if (markLineXAxis <= 1) {
if (markLineXAxis <= this.xAxisMin) {
return
}
markLineData.xAxis = markLineXAxis - 1
let leftAxis = 0
if (this.isEnergy) {
const channel = this.getChannelByEnergy(markLineXAxis)
leftAxis = this.getEnergyByChannel(channel - 1)
} else {
leftAxis = markLineXAxis - 1
}
markLineData.xAxis = leftAxis
const {
channel: prevChannel,
energy: prevEnergy,
counts: prevCounts,
} = this.getEnergyAndCountsByXAxis(markLineXAxis - 1)
this.setChartBottomTitle(prevChannel, prevEnergy, prevCounts)
this.getSelPosNuclide(prevChannel)
channel: leftChannel,
energy: leftEnergy,
counts: leftCounts,
} = this.getEnergyAndCountsByXAxis(leftAxis)
this.setChartBottomTitle(leftChannel, leftEnergy, leftCounts)
this.getSelPosNuclide(leftChannel)
break
}
},
@ -394,13 +409,7 @@ export default {
this.option.xAxis.max = maxX
this.option.yAxis.min = minY
this.option.yAxis.max = maxY
if (this.isEnergy()) {
const channel1 = this.getChannelByEnergy(minX)
const channel2 = this.getChannelByEnergy(maxX)
this.setThumbnailChartRect(channel1, maxY, channel2, minY)
} else {
this.setThumbnailChartRect(minX, maxY, maxX, minY)
}
const thumbnailChart = this.getThumbnailChart()
const [, maxYPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [0, minY]) // yAxispix
@ -556,7 +565,7 @@ export default {
peak,
BaseCtrls,
} = result
if (flag && (flag == 'dab' || flag == 'file')) {
if (flag && (flag == 'db' || flag == 'file')) {
this.bAnalyed = result.bAnalyed
this.$emit('reAnalyed', this.bAnalyed)
this.checkBox_updateCal = result.checkBox_updateCal
@ -664,14 +673,13 @@ export default {
let energy = 0
const value = params[0].value[0]
if (this.isEnergy()) {
if (this.isEnergy) {
energy = value.toFixed(2)
channel = this.getChannelByEnergy(energy)
channel = this.getChannelByEnergy(value)
} else {
const allPointList = this.energyData.all.pointlist
channel = parseInt(value.toFixed())
energy = allPointList && allPointList[channel - 1]
energy = energy ? energy.x.toFixed(2) : undefined
energy = this.getEnergyByChannel(channel)
energy = energy ? energy.toFixed(2) : undefined
}
return `<div class="channel">Channel: ${channel}</div>
@ -729,8 +737,18 @@ export default {
}
this.option.xAxis.name = value
if (this.isEnergy) {
this.option.xAxis.axisLabel.formatter = (value) => {
return value.toFixed(2)
}
} else {
this.option.xAxis.axisLabel.formatter = (value) => {
return value
}
}
this.handleResetChart()
this.thumbnailOption.xAxis.min = this.xAxisMin
this.redrawLineBySeriesName(
'BaseLine',
@ -812,7 +830,7 @@ export default {
// seriesName线
redrawLineBySeriesName(seriesName, energyData, channelData, isShow = true, color) {
if (isShow) {
const data = this.isEnergy() ? energyData : channelData
const data = this.isEnergy ? energyData : channelData
this.setSeriesData(this.option.series, seriesName, this.transformPointListData(data.pointlist), color)
} else {
this.setSeriesData(this.option.series, seriesName, [])
@ -822,7 +840,7 @@ export default {
//
redrawCtrlPointBySeriesName() {
const series = findSeriesByName(this.option.series, 'BaseLine_Ctrl_Point')
const data = this.isEnergy() ? this.energyData.baseLineCP : this.channelData.baseLineCP
const data = this.isEnergy ? this.energyData.baseLineCP : this.channelData.baseLineCP
series.data = data.map(({ size, color, point: { x, y } }) => {
return {
value: [x, y],
@ -847,7 +865,7 @@ export default {
redrawPeakLine() {
this.clearPeakLine()
const data = this.isEnergy() ? this.energyData.peakGroup : this.channelData.peakGroup
const data = this.isEnergy ? this.energyData.peakGroup : this.channelData.peakGroup
const peakLines = []
data.forEach((item, index) => {
peakLines.push(
@ -863,7 +881,7 @@ export default {
//
redrawThumbnailChart() {
const series = findSeriesByName(this.thumbnailOption.series, 'Spectrum')
const data = this.isEnergy() ? this.energyData.spectrumLine : this.channelData.spectrumLine
const data = this.isEnergy ? this.energyData.spectrumLine : this.channelData.spectrumLine
series.data = this.transformPointListData(data.pointlist)
},
@ -875,7 +893,7 @@ export default {
if (point) {
const xAxis = point[0]
const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum')
spectrumLineSeries.markLine.data[0].xAxis = parseInt(xAxis.toFixed())
spectrumLineSeries.markLine.data[0].xAxis = xAxis
const { channel, energy, counts } = this.getEnergyAndCountsByXAxis(xAxis)
this.setChartBottomTitle(channel, energy, counts)
@ -888,7 +906,7 @@ export default {
setChartBottomTitle(channel, energy, counts) {
const { index, find } = findNearPeak(channel, this.peakList)
this.option.title.text = `{a|Channel:${channel}} {a|Energy:${energy || '0.00'}} {a|Counts:${
this.option.title.text = `{a|Channel:${channel}} {a|Energy:${energy.toFixed(2) || '0.00'}} {a|Counts:${
counts || '0.0'
}} {a|Significance:${find ? this.peakList[index].significance.toFixed(2) : '0.00'}}`
},
@ -896,19 +914,19 @@ export default {
// xAixschannelenergycounts
getEnergyAndCountsByXAxis(xAxis) {
let channel, energy, counts
if (this.isEnergy()) {
if (this.isEnergy) {
channel = this.getChannelByEnergy(xAxis)
energy = xAxis.toFixed(2)
counts = this.energyData.all.pointlist[channel - 1]
energy = xAxis
counts = this.energyData.all.pointlist[channel - 1].y
} else {
channel = parseInt(xAxis.toFixed())
energy = this.energyData.all.pointlist && this.energyData.all.pointlist[channel - 1].x.toFixed(2)
counts = this.channelData.all.pointlist[channel - 1]
channel = Math.round(xAxis)
energy = this.getEnergyByChannel(channel)
counts = this.channelData.all.pointlist[channel - 1].y
}
return {
channel,
energy,
counts: counts.y,
counts,
}
},
@ -961,7 +979,7 @@ export default {
handleTogglePeak() {
const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum')
const xAxis = spectrumLineSeries.markLine.data[0].xAxis
const channel = this.isEnergy() ? this.getChannelByEnergy(xAxis) : parseInt(xAxis.toFixed())
const channel = this.isEnergy ? this.getChannelByEnergy(xAxis) : parseInt(xAxis.toFixed())
const index = this.channelData.peakGroup.findIndex((peakItem) => {
const allX = peakItem.pointlist.map((item) => item.x)
const max = Math.max(...allX)
@ -1016,32 +1034,83 @@ export default {
const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum')
const prevAxis = spectrumLineSeries.markLine.data[0].xAxis
// Channel
const maxXAxises = this.channelData.peakGroup.map((item) => {
const allY = item.pointlist.map((item) => item.y)
const max = item.pointlist.find((point) => point.y == Math.max(...allY))
return max.x
})
const { channel: prevChannel } = this.getEnergyAndCountsByXAxis(prevAxis)
let i,
size = this.peakList.length
let find = null
if (direction == 'right') {
// prevAxisxAxis
find = maxXAxises.find((xAxis) => xAxis > prevAxis)
if (find) {
spectrumLineSeries.markLine.data[0].xAxis = find
for (i = 0; i < size; i++) {
const centroid = Math.round(this.peakList[i].peakCentroid)
if (centroid > prevChannel) {
const energy = this.getEnergyByChannel(centroid)
this.setMarkLineXAxis(this.isEnergy ? energy : centroid, i)
this.getSelPosNuclide(centroid)
const { counts } = this.getEnergyAndCountsByXAxis(this.isEnergy ? energy : centroid)
this.setChartBottomTitle(centroid, energy, counts)
return
}
}
} else if (direction == 'left') {
// prevAxisxAxis
find = maxXAxises.reverse().find((xAxis) => xAxis < prevAxis)
if (find) {
spectrumLineSeries.markLine.data[0].xAxis = find
for (i = size - 1; i >= 0; i--) {
const centroid = Math.round(this.peakList[i].peakCentroid)
if (Math.round(centroid) < prevChannel) {
const energy = this.getEnergyByChannel(centroid)
this.setMarkLineXAxis(this.isEnergy ? energy : centroid, i)
this.getSelPosNuclide(centroid)
const { counts } = this.getEnergyAndCountsByXAxis(this.isEnergy ? energy : centroid)
this.setChartBottomTitle(centroid, energy, counts)
return
}
}
}
},
// 线
setMarkLineXAxis(xAxis, index) {
const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum')
const markLineOption = spectrumLineSeries.markLine.data[0]
markLineOption.xAxis = xAxis
const {
xAxis: { max: xAxisMax, min: xAxisMin },
yAxis: { max: yAxisMax, min: yAxisMin },
} = this.option
//
if (xAxis >= xAxisMax || xAxis <= xAxisMin) {
let nextMaxX = xAxisMax,
nextMinX = xAxisMin,
nextMaxY = yAxisMax,
nextMinY = yAxisMin
const halfDiff = (xAxisMax - xAxisMin) / 2
const dataSource = this.isEnergy ? this.energyData : this.channelData
const lastChannel = dataSource.spectrumLine.pointlist[dataSource.spectrumLine.pointlist.length - 1].x
const tmpNextMaxX = xAxis + halfDiff
const tmpNextMinX = xAxis - halfDiff
nextMaxX = tmpNextMaxX > lastChannel ? lastChannel : tmpNextMaxX
nextMinX = tmpNextMinX < this.xAxisMin ? this.xAxisMin : tmpNextMinX
const peak = this.channelData.peakGroup[index]
const peakCountMax = Math.max(...peak.pointlist.map(({ y }) => y))
const peakCountMin = Math.min(...peak.pointlist.map(({ y }) => y))
const chart = this.$refs.thumbnailChartRef.getChartInstance()
const yDataMax = getAxisMax(chart, 'yAxis')
if (yAxisMax !== 'dataMax' && peakCountMin >= yAxisMax) {
nextMaxY = yDataMax
}
if (find) {
this.getSelPosNuclide(find)
const { channel, energy, counts } = this.getEnergyAndCountsByXAxis(find)
this.setChartBottomTitle(channel, energy, counts)
if (peakCountMax <= yAxisMin) {
nextMinY = 1
}
this.setRectRange(nextMinX, nextMaxX, nextMinY, nextMaxY)
}
},
@ -1118,13 +1187,7 @@ export default {
this.option.yAxis.min = y1
this.option.yAxis.max = y2
if (this.isEnergy()) {
const channel1 = this.getChannelByEnergy(x1)
const channel2 = this.getChannelByEnergy(x2)
this.setThumbnailChartRect(channel1, y2, channel2, y1)
} else {
this.setThumbnailChartRect(x1, y2, x2, y1)
}
const thumbnailChart = this.getThumbnailChart()
const [, maxYPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [0, y1]) // yAxispix
@ -1251,31 +1314,29 @@ export default {
const xAxisMax = getAxisMax(thumbnailChart, 'xAxis')
const xAxisLimit = rangeNumber(1 + halfWidth, xAxisMax - halfWidth)
const xAxisLimit = rangeNumber(add(this.xAxisMin, halfWidth), subtract(xAxisMax, halfWidth))
const halfHeightPixel = this.halfHeightPixel
const yAxisLimit = rangeNumber(maxYAxisPixel + halfHeightPixel, minYAxisPixel - halfHeightPixel)
const yAxisLimit = rangeNumber(add(maxYAxisPixel, halfHeightPixel), subtract(minYAxisPixel, halfHeightPixel))
xAxis = xAxisLimit(xAxis)
let { pixY: yAxisPixel } = this.convertToPixel(thumbnailChart, 0, yAxis)
yAxisPixel = yAxisLimit(yAxisPixel)
const minYAxis = thumbnailChart.convertFromPixel({ seriesIndex: 0 }, [0, yAxisPixel + halfHeightPixel])[1] // ypixyAxis
const maxYAxis = thumbnailChart.convertFromPixel({ seriesIndex: 0 }, [0, yAxisPixel - halfHeightPixel])[1]
const minYAxis = thumbnailChart.convertFromPixel({ seriesIndex: 0 }, [0, add(yAxisPixel, halfHeightPixel)])[1] // ypixyAxis
const maxYAxis = thumbnailChart.convertFromPixel({ seriesIndex: 0 }, [
0,
subtract(yAxisPixel, halfHeightPixel),
])[1]
this.setThumbnailChartRect(xAxis - halfWidth, maxYAxis, xAxis + halfWidth, minYAxis)
const nextXAxisMin = subtract(xAxis, halfWidth)
const nextXAxisMax = add(xAxis, halfWidth)
if (this.isEnergy()) {
const x1 = parseInt(this.energyData.spectrumLine.pointlist[xAxis - halfWidth].x)
const x2 = parseInt(this.energyData.spectrumLine.pointlist[xAxis + halfWidth].x)
this.setThumbnailChartRect(nextXAxisMin, maxYAxis, nextXAxisMax, minYAxis)
this.option.xAxis.min = x1
this.option.xAxis.max = x2
} else {
this.option.xAxis.min = xAxis - halfWidth
this.option.xAxis.max = xAxis + halfWidth
}
this.option.xAxis.min = nextXAxisMin
this.option.xAxis.max = nextXAxisMax
this.option.yAxis.min = minYAxis
this.option.yAxis.max = maxYAxis
@ -1290,7 +1351,7 @@ export default {
* 重置图表
*/
handleResetChart() {
this.option.xAxis.min = 1
this.option.xAxis.min = this.xAxisMin
this.option.xAxis.max = 'dataMax'
this.option.yAxis.min = 1
this.option.yAxis.max = 'dataMax'
@ -1317,14 +1378,7 @@ export default {
// Accept
handleAccept(data) {
const {
allData,
peakSet,
shadowChannelChart,
shadowEnergyChart,
shapeChannelData,
shapeEnergyData,
} = data
const { allData, peakSet, shadowChannelChart, shadowEnergyChart, shapeChannelData, shapeEnergyData } = data
const result = {
DetailedInformation: this.detailedInfomation,
@ -1531,6 +1585,15 @@ export default {
return channel
},
/**
* 根据channel获取energy
* @param {number} channel
*/
getEnergyByChannel(channel) {
const energyItem = this.energyData.all.pointlist ? this.energyData.all.pointlist[channel - 1] : {}
return energyItem ? energyItem.x : 0
},
/**
* 重置页面信息
*/
@ -1621,10 +1684,6 @@ export default {
})
},
isEnergy() {
return this.graphAssistance.axisType == 'Energy'
},
isScatter() {
return this.graphAssistance.spectrumType == 'Scatter'
},
@ -1704,6 +1763,17 @@ export default {
immediate: true,
},
},
computed: {
// Energy
isEnergy() {
return this.graphAssistance.axisType == 'Energy'
},
// x
xAxisMin() {
return this.isEnergy ? 0.01 : 1
},
},
}
</script>

View File

@ -63,16 +63,14 @@ export const GammaOptions = {
axisLabel: {
textStyle: {
color: '#ade6ee'
},
formatter: value => {
return parseInt(value)
}
},
min: 1,
max: 'dataMax',
animation: false,
axisLabel: {
formatter: value => {
return parseInt(value)
}
}
animation: false
},
yAxis: {
name: 'Counts',
@ -96,16 +94,14 @@ export const GammaOptions = {
axisLabel: {
textStyle: {
color: '#ade6ee'
},
formatter: value => {
return value.toFixed(1)
}
},
min: 1,
max: 'dataMax',
animation: false,
axisLabel: {
formatter: value => {
return value.toFixed(1)
}
}
animation: false
},
series: [spectrumSeries, baseLineSeries, lcLineSeries, scacLineSeries, baseLineCtrlPoint, compareLineSeries],
brush: {}