@@ -318,14 +318,9 @@ class SpectrumFragment : SerialConnectionFragment(),
318318 }
319319
320320 btnSaveSpectrum.setOnClickListener {
321- if (spectrumDataSet.data.size> 1 ){
322- // show select spectrum to save into a file
323- val spectrumFileChooserDialog = SaveSelectedSpectrumDialogFragment .newInstance(spectrumDataSet)
324- spectrumFileChooserDialog.show(childFragmentManager, " save_spectrum_file_dialog_fragment" )
325- } else {
326- val saveSpectrumIntoFileDialog = SaveSpectrumDataIntoFileDialogFragment .newInstance(spectrumDataSet)
327- saveSpectrumIntoFileDialog.show(childFragmentManager, " save_spectrum_into_file_dialog_fragment" )
328- }
321+ // show select spectrum to save into a file
322+ val spectrumFileChooserDialog = SaveSelectedSpectrumDialogFragment .newInstance(spectrumDataSet)
323+ spectrumFileChooserDialog.show(childFragmentManager, " save_spectrum_file_dialog_fragment" )
329324 }
330325
331326 btnToggleFilter.setOnClickListener {
@@ -533,12 +528,12 @@ class SpectrumFragment : SerialConnectionFragment(),
533528 return components.joinToString(" " )
534529 }
535530
536- private fun getSpectrumLabel (index : Int , entry : GammaKitEntry ): String {
537- val ct = entry.resultData.energySpectrum.validPulseCount
538- val mt = entry.resultData.energySpectrum.measurementTime
539- val ch = entry.resultData.energySpectrum.numberOfChannels
531+ private fun getSpectrumLabel (index : Int , entry : OpenGammaKitData ): String {
532+ val ct = entry.data[index]. resultData.energySpectrum.validPulseCount
533+ val mt = entry.data[index]. resultData.energySpectrum.measurementTime
534+ val ch = entry.data[index]. resultData.energySpectrum.numberOfChannels
540535 val t = formatTimeSkipZeros(mt)
541- return ( entry.deviceData.deviceName? : " Spectrum ${index + 1 } " ) + " Ch $ch Ct $ct T $t "
536+ return entry.data[index]. deviceData.deviceName + " ${entry.derivedSpectra[ index]?.name} Ch $ch Ct $ct T $t "
542537 }
543538
544539 private fun setupChart () {
@@ -553,7 +548,7 @@ class SpectrumFragment : SerialConnectionFragment(),
553548 val entries = spectrum.mapIndexed { ch, count ->
554549 Entry (ch.toFloat(), count.toFloat())
555550 }
556- val label = getSpectrumLabel(entry.key, spectrumDataSet.data[entry.key] )
551+ val label = getSpectrumLabel(entry.key, spectrumDataSet)
557552 LineDataSet (entries, label).apply {
558553 mode = LineDataSet .Mode .CUBIC_BEZIER
559554 lineWidth = 1.5f
@@ -616,7 +611,7 @@ class SpectrumFragment : SerialConnectionFragment(),
616611 val entries = spectrum.mapIndexed { ch, count ->
617612 Entry (ch.toFloat(), count.toFloat())
618613 }
619- val label = getSpectrumLabel(entry.key, spectrumDataSet.data[entry.key] )
614+ val label = getSpectrumLabel(entry.key, spectrumDataSet)
620615 LineDataSet (entries, label).apply {
621616 mode = LineDataSet .Mode .CUBIC_BEZIER
622617 lineWidth = 1.5f
@@ -665,7 +660,7 @@ class SpectrumFragment : SerialConnectionFragment(),
665660 val energy = interpolateEnergy(sortedCalibrationList, index.toDouble())
666661 Entry (energy.toFloat(), count.toFloat())
667662 }
668- val label = getSpectrumLabel(selectedIndex, spectrumDataSet.data[selectedIndex] )
663+ val label = getSpectrumLabel(selectedIndex, spectrumDataSet)
669664 val calibratedDataSet = LineDataSet (energyEntries, label).apply {
670665 mode = LineDataSet .Mode .CUBIC_BEZIER
671666 lineWidth = 1.5f
@@ -1506,22 +1501,44 @@ class SpectrumFragment : SerialConnectionFragment(),
15061501
15071502 override fun onChoose (uri : String ) {
15081503 val openGammaKitData = readAndParseFile(requireContext(), uri.toUri())
1509- spectrumDataSet.data.addAll(openGammaKitData.data)
1504+
1505+ openGammaKitData.data.forEachIndexed { index, spectrum ->
1506+ val addedIndex = spectrumDataSet.data.size
1507+ spectrumDataSet.data.add(spectrum)
1508+
1509+ spectrumDataSet.derivedSpectra[addedIndex] = openGammaKitData.derivedSpectra[index]
1510+ ? : DerivedSpectrumEntry (
1511+ name = " Copied from raw spectrum" ,
1512+ resultSpectrum = spectrum.resultData.energySpectrum.spectrum.map { it.toDouble() },
1513+ modifiers = mutableListOf (),
1514+ peaks = mutableListOf ()
1515+ )
1516+ }
1517+
15101518 updateChartSpectrumData()
15111519 }
15121520
1513- override fun onChooseMultiple (selectedIndexes : List <Int >) {
1514- // Filter entries based on selected indexes
1515- val selectedEntries = spectrumDataSet.data.filterIndexed { index, _ ->
1516- index in selectedIndexes
1517- }.toMutableList()
1521+ override fun onChooseMultiple (selectedIndexes : MutableMap <Int , String >) {
1522+ // Filter entries and remap derivedSpectra with updated names
1523+ val selectedEntries = mutableListOf<GammaKitEntry >()
1524+ val selectedDerivedSpectra = mutableMapOf<Int , DerivedSpectrumEntry >()
1525+
1526+ for ((originalIndex, newName) in selectedIndexes) {
1527+ val entry = spectrumDataSet.data.getOrNull(originalIndex) ? : continue
1528+ selectedEntries.add(entry)
15181529
1519- // Create a submap of derivedSpectra for selected indexes
1520- val selectedDerivedSpectra = spectrumDataSet.derivedSpectra
1521- .filterKeys { it in selectedIndexes }
1522- .toMutableMap()
1530+ val derived = spectrumDataSet.derivedSpectra[originalIndex]?.copy(name = newName)
1531+ ? : DerivedSpectrumEntry (
1532+ name = newName,
1533+ resultSpectrum = entry.resultData.energySpectrum.spectrum.map { it.toDouble() },
1534+ modifiers = mutableListOf (),
1535+ peaks = mutableListOf ()
1536+ )
1537+
1538+ selectedDerivedSpectra[selectedEntries.lastIndex] = derived
1539+ }
15231540
1524- // Create a new OpenGammaKitData with the same schema version and modified data
1541+ // Create a new OpenGammaKitData with selected and renamed items
15251542 val modifiedData = OpenGammaKitData (
15261543 schemaVersion = spectrumDataSet.schemaVersion,
15271544 data = selectedEntries,
0 commit comments