Updates and fixes

This commit is contained in:
Alexander Nozik 2023-10-25 20:22:20 +03:00
parent b7618cc08f
commit 232669af80
6 changed files with 216 additions and 8 deletions

View File

@ -13,13 +13,13 @@ allprojects {
} }
group = "ru.inr.mass" group = "ru.inr.mass"
version = "0.1.4-dev-2" version = "0.1.4-dev-3"
} }
val dataforgeVersion by extra("0.6.2") val dataforgeVersion by extra("0.6.2")
val tablesVersion: String by extra("0.2.0-dev-3") val tablesVersion: String by extra("0.2.1")
val kmathVersion by extra("0.3.1") val kmathVersion by extra("0.3.1")
val visionForgeVersion: String by rootProject.extra("0.3.0-dev-6") val visionForgeVersion: String by rootProject.extra("0.3.0-dev-14")
ksciencePublish { ksciencePublish {
@ -28,6 +28,7 @@ ksciencePublish {
useSPCTeam() useSPCTeam()
} }
space("https://maven.pkg.jetbrains.space/spc/p/numass/maven") space("https://maven.pkg.jetbrains.space/spc/p/numass/maven")
//repository("spc","https://maven.sciprog.center/spc")
} }
apiValidation { apiValidation {

View File

@ -12,4 +12,4 @@ org.gradle.parallel=true
org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G
toolsVersion=0.14.10-kotlin-1.9.0 toolsVersion=0.14.10-kotlin-1.9.0
compose.version=1.5.1 compose.version=1.5.3

View File

@ -12,15 +12,16 @@ import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.asName import space.kscience.dataforge.names.asName
import space.kscience.plotly.models.LineShape import space.kscience.plotly.models.LineShape
import space.kscience.plotly.models.ScatterMode import space.kscience.plotly.models.ScatterMode
import space.kscience.plotly.plotElement import space.kscience.plotly.plotDiv
import space.kscience.plotly.scatter import space.kscience.plotly.scatter
import space.kscience.visionforge.ElementVisionRenderer import space.kscience.visionforge.ElementVisionRenderer
import space.kscience.visionforge.JsVisionClient
import space.kscience.visionforge.Vision import space.kscience.visionforge.Vision
import space.kscience.visionforge.VisionClient import space.kscience.visionforge.VisionClient
import space.kscience.visionforge.plotly.PlotlyPlugin import space.kscience.visionforge.plotly.PlotlyPlugin
public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer { public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
public val client: VisionClient by require(VisionClient) public val client: VisionClient by require(JsVisionClient)
public val numassCommon: NumassCommonPlugin by require(NumassCommonPlugin) public val numassCommon: NumassCommonPlugin by require(NumassCommonPlugin)
public val plotly: PlotlyPlugin by require(PlotlyPlugin) public val plotly: PlotlyPlugin by require(PlotlyPlugin)
@ -59,7 +60,7 @@ public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
is VisionOfNumassPoint -> element.append { is VisionOfNumassPoint -> element.append {
h1 { +"Point" } h1 { +"Point" }
plotElement { plotDiv {
vision.spectra.forEach { (channel, spectrum) -> vision.spectra.forEach { (channel, spectrum) ->
val pairs = spectrum.entries.sortedBy { it.key } val pairs = spectrum.entries.sortedBy { it.key }
scatter { scatter {

View File

@ -20,7 +20,8 @@ dependencies {
implementation("space.kscience:dataforge-workspace:$dataforgeVersion") implementation("space.kscience:dataforge-workspace:$dataforgeVersion")
implementation("space.kscience:kmath-jupyter:$kmathVersion") implementation("space.kscience:kmath-jupyter:$kmathVersion")
implementation("space.kscience:tables-kt:$tablesVersion") implementation("space.kscience:tables-kt-csv:$tablesVersion")
implementation("org.apache.commons:commons-csv:1.10.0")
implementation("space.kscience:visionforge-plotly:$visionForgeVersion") implementation("space.kscience:visionforge-plotly:$visionForgeVersion")
} }

View File

@ -0,0 +1,97 @@
package ru.inr.mass.scripts
import org.apache.commons.csv.CSVFormat
import ru.inr.mass.models.*
import ru.inr.mass.workspace.Numass
import ru.inr.mass.workspace.buffer
import ru.inr.mass.workspace.fitWith
import space.kscience.dataforge.meta.Value
import space.kscience.dataforge.meta.double
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.data.XYErrorColumnarData
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.optimization.*
import space.kscience.kmath.real.map
import space.kscience.kmath.real.step
import space.kscience.kmath.structures.DoubleBuffer
import space.kscience.kmath.structures.indices
import space.kscience.plotly.*
import space.kscience.plotly.models.ScatterMode
import space.kscience.tables.Column
import space.kscience.tables.Table
import space.kscience.tables.csv.readAsCsv
import space.kscience.tables.get
import kotlin.math.pow
fun Column<Value>.toDoubleBuffer() = DoubleBuffer(size) { get(it).double }
@OptIn(UnstableKMathAPI::class)
suspend fun main() {
val input = Table.readAsCsv(
Numass::class.java.getResource("/data/2023_events.tsv")!!,
csvFormat = CSVFormat.TDF
)
val timePerPoint = 30.0 * 129
val data: XYErrorColumnarData<Double, Double, Double> = XYErrorColumnarData.of(
input.columns["U"].toDoubleBuffer(),
input.columns["events"].toDoubleBuffer().map { it / timePerPoint },
input.columns["error"].toDoubleBuffer().map { it / timePerPoint }
)
val spectrum: NBkgSpectrum = SterileNeutrinoSpectrum(fss = FSS.default).withNBkg()
val args: Map<Symbol, Double> = mapOf(
NBkgSpectrum.norm to 215443.0,
NBkgSpectrum.bkg to 2.0,
NumassBeta.mnu2 to 0.0,
NumassBeta.e0 to 18575.0,
NumassBeta.msterile2 to 2000.0.pow(2),
NumassBeta.u2 to 0.0,
NumassTransmission.thickness to 0.3,
NumassTransmission.trap to 1.0
)
val fit: XYFit = data.fitWith(
optimizer = QowOptimizer,
modelExpression = spectrum,
startingPoint = args,
OptimizationParameters(NBkgSpectrum.norm, NBkgSpectrum.bkg, NumassBeta.e0),
OptimizationIterations(20)
)
println("Chi squared/dof: ${fit.chiSquaredOrNull}/${fit.dof}")
Plotly.page {
plot {
scatter {
name = "Data"
mode = ScatterMode.markers
x.buffer = data.x
y.buffer = data.y
}
scatter {
name = "Fit"
mode = ScatterMode.lines
x.buffer = 12000.0..18600.0 step 10.0
y.numbers = x.doubles.map { spectrum(it, args + fit.resultPoint) }
}
}
plot {
layout.title = "residuals"
scatter {
mode = ScatterMode.markers
x.buffer = data.x
y.numbers = data.x.indices.map {
(data.y[it] - spectrum(data.x[it], args + fit.resultPoint))/data.yErr[it]
}
}
}
}.makeFile()
}

View File

@ -0,0 +1,108 @@
U events error
12000 6.452460E+07 8032.720335
12050 6.308058E+07 7942.32812
12100 6.166233E+07 7852.536369
12150 6.026178E+07 7762.846435
12200 5.888044E+07 7673.359382
12250 5.752020E+07 7584.207129
12300 5.618589E+07 7495.725049
12350 5.486976E+07 7407.412404
12400 5.357057E+07 7319.192132
12450 5.229649E+07 7231.631507
12500 5.104097E+07 7144.295993
12550 4.980586E+07 7057.326711
12600 4.858747E+07 6970.471306
12650 4.739252E+07 6884.222328
12700 4.621748E+07 6798.344134
12750 4.505844E+07 6712.55872
12800 4.392086E+07 6627.281125
12850 4.280192E+07 6542.317643
12900 4.170236E+07 6457.736238
12950 4.062241E+07 6373.571204
13000 3.955862E+07 6289.564579
13050 3.851518E+07 6206.059556
13100 3.748997E+07 6122.905734
13150 3.648207E+07 6040.03875
13200 3.549434E+07 5957.712236
13250 3.452146E+07 5875.496153
13300 3.356598E+07 5793.615159
13350 3.263059E+07 5712.318869
13400 3.171169E+07 5631.313607
13450 3.080984E+07 5550.661274
13500 2.992572E+07 5470.440919
13550 2.905686E+07 5390.441869
13600 2.820575E+07 5310.908839
13650 2.737116E+07 5231.745008
13700 2.655560E+07 5153.212589
13750 2.575232E+07 5074.674515
13800 2.496715E+07 4996.713422
13850 2.419569E+07 4918.911404
13900 2.344232E+07 4841.727268
13950 2.270363E+07 4764.832291
14000 2.198215E+07 4688.512852
14050 2.127411E+07 4612.386446
14100 2.058196E+07 4536.734227
14150 1.990347E+07 4461.330615
14200 1.924117E+07 4386.475463
14250 1.859371E+07 4312.041926
14300 1.796066E+07 4238.001528
14350 1.734144E+07 4164.305627
14400 1.673491E+07 4090.832005
14450 1.614486E+07 4018.066921
14500 1.556582E+07 3945.354348
14550 1.500395E+07 3873.492826
14600 1.445357E+07 3801.785423
14650 1.391677E+07 3730.51812
14700 1.339411E+07 3659.796472
14750 1.288430E+07 3589.470303
14800 1.238646E+07 3519.440284
14850 1.190164E+07 3449.875909
14900 1.143011E+07 3380.844281
14950 1.097078E+07 3312.217027
15000 1.052425E+07 3244.109423
15050 1.008924E+07 3176.356172
15100 9.665787E+06 3108.984892
15150 9.254249E+06 3042.079724
15200 8.854339E+06 2975.624154
15250 8.467155E+06 2909.837666
15300 8.090963E+06 2844.46187
15350 7.725603E+06 2779.496931
15400 7.370687E+06 2714.900844
15450 7.028022E+06 2651.041609
15500 6.694518E+06 2587.376647
15550 6.372090E+06 2524.299879
15600 6.058846E+06 2461.472259
15650 5.758606E+06 2399.709617
15700 5.466336E+06 2338.019685
15750 5.183979E+06 2276.835393
15800 4.912587E+06 2216.435542
15850 4.648231E+06 2155.975548
15900 4.396058E+06 2096.677784
15950 4.151727E+06 2037.578662
16000 3.916397E+06 1978.98901
16100 3.473288E+06 1863.676016
16200 3.065010E+06 1750.717128
16300 2.688767E+06 1639.746111
16400 2.344119E+06 1531.051707
16500 2.029421E+06 1424.577365
16600 1.743956E+06 1320.589413
16700 1.487062E+06 1219.45145
16800 1.255541E+06 1120.509421
16900 1.049216E+06 1024.312329
17000 8.724297E+05 934.0394267
17100 7.157295E+05 846.0079518
17200 5.750288E+05 758.3065238
17300 4.560588E+05 675.3212528
17400 3.553991E+05 596.1536111
17500 2.697442E+05 519.3690855
17600 2.005270E+05 447.8024159
17700 1.434300E+05 378.7215839
17800 9.860455E+04 314.0136092
17900 6.354514E+04 252.0816166
18000 3.898907E+04 197.456499
18100 2.149273E+04 146.6039915
18200 1.010559E+04 100.5265405
18300 4.910901E+03 70.07781835
18400 2.252190E+03 47.4572434
18500 1.860929E+03 43.13848425
18600 1.760000E+03 41.95235393
1 U events error
2 12000 6.452460E+07 8032.720335
3 12050 6.308058E+07 7942.32812
4 12100 6.166233E+07 7852.536369
5 12150 6.026178E+07 7762.846435
6 12200 5.888044E+07 7673.359382
7 12250 5.752020E+07 7584.207129
8 12300 5.618589E+07 7495.725049
9 12350 5.486976E+07 7407.412404
10 12400 5.357057E+07 7319.192132
11 12450 5.229649E+07 7231.631507
12 12500 5.104097E+07 7144.295993
13 12550 4.980586E+07 7057.326711
14 12600 4.858747E+07 6970.471306
15 12650 4.739252E+07 6884.222328
16 12700 4.621748E+07 6798.344134
17 12750 4.505844E+07 6712.55872
18 12800 4.392086E+07 6627.281125
19 12850 4.280192E+07 6542.317643
20 12900 4.170236E+07 6457.736238
21 12950 4.062241E+07 6373.571204
22 13000 3.955862E+07 6289.564579
23 13050 3.851518E+07 6206.059556
24 13100 3.748997E+07 6122.905734
25 13150 3.648207E+07 6040.03875
26 13200 3.549434E+07 5957.712236
27 13250 3.452146E+07 5875.496153
28 13300 3.356598E+07 5793.615159
29 13350 3.263059E+07 5712.318869
30 13400 3.171169E+07 5631.313607
31 13450 3.080984E+07 5550.661274
32 13500 2.992572E+07 5470.440919
33 13550 2.905686E+07 5390.441869
34 13600 2.820575E+07 5310.908839
35 13650 2.737116E+07 5231.745008
36 13700 2.655560E+07 5153.212589
37 13750 2.575232E+07 5074.674515
38 13800 2.496715E+07 4996.713422
39 13850 2.419569E+07 4918.911404
40 13900 2.344232E+07 4841.727268
41 13950 2.270363E+07 4764.832291
42 14000 2.198215E+07 4688.512852
43 14050 2.127411E+07 4612.386446
44 14100 2.058196E+07 4536.734227
45 14150 1.990347E+07 4461.330615
46 14200 1.924117E+07 4386.475463
47 14250 1.859371E+07 4312.041926
48 14300 1.796066E+07 4238.001528
49 14350 1.734144E+07 4164.305627
50 14400 1.673491E+07 4090.832005
51 14450 1.614486E+07 4018.066921
52 14500 1.556582E+07 3945.354348
53 14550 1.500395E+07 3873.492826
54 14600 1.445357E+07 3801.785423
55 14650 1.391677E+07 3730.51812
56 14700 1.339411E+07 3659.796472
57 14750 1.288430E+07 3589.470303
58 14800 1.238646E+07 3519.440284
59 14850 1.190164E+07 3449.875909
60 14900 1.143011E+07 3380.844281
61 14950 1.097078E+07 3312.217027
62 15000 1.052425E+07 3244.109423
63 15050 1.008924E+07 3176.356172
64 15100 9.665787E+06 3108.984892
65 15150 9.254249E+06 3042.079724
66 15200 8.854339E+06 2975.624154
67 15250 8.467155E+06 2909.837666
68 15300 8.090963E+06 2844.46187
69 15350 7.725603E+06 2779.496931
70 15400 7.370687E+06 2714.900844
71 15450 7.028022E+06 2651.041609
72 15500 6.694518E+06 2587.376647
73 15550 6.372090E+06 2524.299879
74 15600 6.058846E+06 2461.472259
75 15650 5.758606E+06 2399.709617
76 15700 5.466336E+06 2338.019685
77 15750 5.183979E+06 2276.835393
78 15800 4.912587E+06 2216.435542
79 15850 4.648231E+06 2155.975548
80 15900 4.396058E+06 2096.677784
81 15950 4.151727E+06 2037.578662
82 16000 3.916397E+06 1978.98901
83 16100 3.473288E+06 1863.676016
84 16200 3.065010E+06 1750.717128
85 16300 2.688767E+06 1639.746111
86 16400 2.344119E+06 1531.051707
87 16500 2.029421E+06 1424.577365
88 16600 1.743956E+06 1320.589413
89 16700 1.487062E+06 1219.45145
90 16800 1.255541E+06 1120.509421
91 16900 1.049216E+06 1024.312329
92 17000 8.724297E+05 934.0394267
93 17100 7.157295E+05 846.0079518
94 17200 5.750288E+05 758.3065238
95 17300 4.560588E+05 675.3212528
96 17400 3.553991E+05 596.1536111
97 17500 2.697442E+05 519.3690855
98 17600 2.005270E+05 447.8024159
99 17700 1.434300E+05 378.7215839
100 17800 9.860455E+04 314.0136092
101 17900 6.354514E+04 252.0816166
102 18000 3.898907E+04 197.456499
103 18100 2.149273E+04 146.6039915
104 18200 1.010559E+04 100.5265405
105 18300 4.910901E+03 70.07781835
106 18400 2.252190E+03 47.4572434
107 18500 1.860929E+03 43.13848425
108 18600 1.760000E+03 41.95235393