Compare commits
16 Commits
main
...
feature/fi
Author | SHA1 | Date | |
---|---|---|---|
6650353683 | |||
bc77af263b | |||
7659bc41a0 | |||
b7618cc08f | |||
f67157b953 | |||
5fcff41db6 | |||
bbfa0483b6 | |||
047551fef7 | |||
43d79db6bb | |||
26f5e7461c | |||
64bae18644 | |||
cf02b2d8ba | |||
d9b4707da1 | |||
17d681bd42 | |||
e95f73d94d | |||
4c67d8b0a0 |
@ -1,3 +1,6 @@
|
|||||||
|
import space.kscience.gradle.useApache2Licence
|
||||||
|
import space.kscience.gradle.useSPCTeam
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("space.kscience.gradle.project")
|
id("space.kscience.gradle.project")
|
||||||
}
|
}
|
||||||
@ -10,17 +13,21 @@ allprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "ru.inr.mass"
|
group = "ru.inr.mass"
|
||||||
version = "0.1.3"
|
version = "0.1.4-dev-2"
|
||||||
}
|
}
|
||||||
|
|
||||||
val dataforgeVersion by extra("0.6.0-dev-15")
|
val dataforgeVersion by extra("0.6.2")
|
||||||
val tablesVersion: String by extra("0.2.0-dev-3")
|
val tablesVersion: String by extra("0.2.0-dev-3")
|
||||||
val kmathVersion by extra("0.3.1-dev-6")
|
val kmathVersion by extra("0.3.1")
|
||||||
val visionForgeVersion: String by rootProject.extra("0.3.0-dev-4")
|
val visionForgeVersion: String by rootProject.extra("0.3.0-dev-6")
|
||||||
|
|
||||||
|
|
||||||
ksciencePublish{
|
ksciencePublish {
|
||||||
space("https://maven.pkg.jetbrains.space/mipt-npm/p/numass/maven")
|
pom("https://spc.jetbrains.space/p/numass/repositories/numass/") {
|
||||||
|
useApache2Licence()
|
||||||
|
useSPCTeam()
|
||||||
|
}
|
||||||
|
space("https://maven.pkg.jetbrains.space/spc/p/numass/maven")
|
||||||
}
|
}
|
||||||
|
|
||||||
apiValidation {
|
apiValidation {
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
kotlin.mpp.stability.nowarn=true
|
kotlin.mpp.stability.nowarn=true
|
||||||
|
kotlin.js.compiler=ir
|
||||||
kotlin.jupyter.add.scanner=false
|
|
||||||
|
|
||||||
org.gradle.configureondemand=true
|
org.gradle.configureondemand=true
|
||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G
|
org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G
|
||||||
|
|
||||||
toolsVersion=0.13.3-kotlin-1.7.20
|
toolsVersion=0.14.10-kotlin-1.9.0
|
||||||
|
compose.version=1.5.1
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
@ -8,7 +8,9 @@ val dataforgeVersion: String by rootProject.extra
|
|||||||
val kmathVersion: String by rootProject.extra
|
val kmathVersion: String by rootProject.extra
|
||||||
val tablesVersion: String by rootProject.extra
|
val tablesVersion: String by rootProject.extra
|
||||||
|
|
||||||
kotlin.sourceSets {
|
kscience {
|
||||||
|
jvm()
|
||||||
|
js()
|
||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(projects.numass.numassDataModel)
|
api(projects.numass.numassDataModel)
|
||||||
@ -20,7 +22,7 @@ kotlin.sourceSets {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
//kscience{
|
//kscience{
|
||||||
// useAtomic()
|
// useAtomic()
|
||||||
//}
|
//}
|
||||||
|
@ -6,7 +6,11 @@ plugins {
|
|||||||
|
|
||||||
val dataforgeVersion: String by rootProject.extra
|
val dataforgeVersion: String by rootProject.extra
|
||||||
|
|
||||||
kotlin.sourceSets {
|
kscience{
|
||||||
|
jvm()
|
||||||
|
js()
|
||||||
|
useSerialization()
|
||||||
|
|
||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
api("space.kscience:dataforge-context:$dataforgeVersion")
|
api("space.kscience:dataforge-context:$dataforgeVersion")
|
||||||
@ -14,15 +18,14 @@ kotlin.sourceSets {
|
|||||||
api("org.jetbrains.kotlinx:kotlinx-datetime:${space.kscience.gradle.KScienceVersions.dateTimeVersion}")
|
api("org.jetbrains.kotlinx:kotlinx-datetime:${space.kscience.gradle.KScienceVersions.dateTimeVersion}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jvmMain{
|
}
|
||||||
|
|
||||||
|
kotlin.sourceSets{
|
||||||
|
getByName("jvmMain"){
|
||||||
dependencies{
|
dependencies{
|
||||||
api("ch.qos.logback:logback-classic:1.2.3")
|
api("ch.qos.logback:logback-classic:1.2.3")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
kscience{
|
|
||||||
useSerialization()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("space.kscience.gradle.jvm")
|
id("space.kscience.gradle.jvm")
|
||||||
id("com.squareup.wire") version "4.4.1"
|
id("com.squareup.wire") version "4.9.1"
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,10 +2,27 @@
|
|||||||
// Source: ru.inr.mass.data.proto.Point in numass-proto.proto
|
// Source: ru.inr.mass.data.proto.Point in numass-proto.proto
|
||||||
package ru.inr.mass.`data`.proto
|
package ru.inr.mass.`data`.proto
|
||||||
|
|
||||||
import com.squareup.wire.*
|
import com.squareup.wire.FieldEncoding
|
||||||
|
import com.squareup.wire.Message
|
||||||
|
import com.squareup.wire.ProtoAdapter
|
||||||
|
import com.squareup.wire.ProtoReader
|
||||||
|
import com.squareup.wire.ProtoWriter
|
||||||
|
import com.squareup.wire.ReverseProtoWriter
|
||||||
import com.squareup.wire.Syntax.PROTO_3
|
import com.squareup.wire.Syntax.PROTO_3
|
||||||
import com.squareup.wire.internal.immutableCopyOf
|
import com.squareup.wire.WireField
|
||||||
import com.squareup.wire.internal.redactElements
|
import com.squareup.wire.`internal`.JvmField
|
||||||
|
import com.squareup.wire.`internal`.immutableCopyOf
|
||||||
|
import com.squareup.wire.`internal`.redactElements
|
||||||
|
import kotlin.Any
|
||||||
|
import kotlin.AssertionError
|
||||||
|
import kotlin.Boolean
|
||||||
|
import kotlin.Deprecated
|
||||||
|
import kotlin.DeprecationLevel
|
||||||
|
import kotlin.Int
|
||||||
|
import kotlin.Long
|
||||||
|
import kotlin.Nothing
|
||||||
|
import kotlin.String
|
||||||
|
import kotlin.collections.List
|
||||||
import okio.ByteString
|
import okio.ByteString
|
||||||
|
|
||||||
public class Point(
|
public class Point(
|
||||||
@ -19,6 +36,7 @@ public class Point(
|
|||||||
tag = 1,
|
tag = 1,
|
||||||
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel#ADAPTER",
|
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel#ADAPTER",
|
||||||
label = WireField.Label.REPEATED,
|
label = WireField.Label.REPEATED,
|
||||||
|
schemaIndex = 0,
|
||||||
)
|
)
|
||||||
public val channels: List<Channel> = immutableCopyOf("channels", channels)
|
public val channels: List<Channel> = immutableCopyOf("channels", channels)
|
||||||
|
|
||||||
@ -26,10 +44,10 @@ public class Point(
|
|||||||
message = "Shouldn't be used in Kotlin",
|
message = "Shouldn't be used in Kotlin",
|
||||||
level = DeprecationLevel.HIDDEN,
|
level = DeprecationLevel.HIDDEN,
|
||||||
)
|
)
|
||||||
public override fun newBuilder(): Nothing = throw
|
override fun newBuilder(): Nothing = throw
|
||||||
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
||||||
|
|
||||||
public override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other === this) return true
|
if (other === this) return true
|
||||||
if (other !is Point) return false
|
if (other !is Point) return false
|
||||||
if (unknownFields != other.unknownFields) return false
|
if (unknownFields != other.unknownFields) return false
|
||||||
@ -37,7 +55,7 @@ public class Point(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
var result = super.hashCode
|
var result = super.hashCode
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
result = unknownFields.hashCode()
|
result = unknownFields.hashCode()
|
||||||
@ -47,7 +65,7 @@ public class Point(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun toString(): String {
|
override fun toString(): String {
|
||||||
val result = mutableListOf<String>()
|
val result = mutableListOf<String>()
|
||||||
if (channels.isNotEmpty()) result += """channels=$channels"""
|
if (channels.isNotEmpty()) result += """channels=$channels"""
|
||||||
return result.joinToString(prefix = "Point{", separator = ", ", postfix = "}")
|
return result.joinToString(prefix = "Point{", separator = ", ", postfix = "}")
|
||||||
@ -66,23 +84,23 @@ public class Point(
|
|||||||
null,
|
null,
|
||||||
"numass-proto.proto"
|
"numass-proto.proto"
|
||||||
) {
|
) {
|
||||||
public override fun encodedSize(`value`: Point): Int {
|
override fun encodedSize(`value`: Point): Int {
|
||||||
var size = value.unknownFields.size
|
var size = value.unknownFields.size
|
||||||
size += Channel.ADAPTER.asRepeated().encodedSizeWithTag(1, value.channels)
|
size += Channel.ADAPTER.asRepeated().encodedSizeWithTag(1, value.channels)
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ProtoWriter, `value`: Point): Unit {
|
override fun encode(writer: ProtoWriter, `value`: Point) {
|
||||||
Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels)
|
Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels)
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ReverseProtoWriter, `value`: Point): Unit {
|
override fun encode(writer: ReverseProtoWriter, `value`: Point) {
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels)
|
Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun decode(reader: ProtoReader): Point {
|
override fun decode(reader: ProtoReader): Point {
|
||||||
val channels = mutableListOf<Channel>()
|
val channels = mutableListOf<Channel>()
|
||||||
val unknownFields = reader.forEachTag { tag ->
|
val unknownFields = reader.forEachTag { tag ->
|
||||||
when (tag) {
|
when (tag) {
|
||||||
@ -96,7 +114,7 @@ public class Point(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun redact(`value`: Point): Point = value.copy(
|
override fun redact(`value`: Point): Point = value.copy(
|
||||||
channels = value.channels.redactElements(Channel.ADAPTER),
|
channels = value.channels.redactElements(Channel.ADAPTER),
|
||||||
unknownFields = ByteString.EMPTY
|
unknownFields = ByteString.EMPTY
|
||||||
)
|
)
|
||||||
@ -116,6 +134,7 @@ public class Point(
|
|||||||
tag = 1,
|
tag = 1,
|
||||||
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
||||||
label = WireField.Label.OMIT_IDENTITY,
|
label = WireField.Label.OMIT_IDENTITY,
|
||||||
|
schemaIndex = 0,
|
||||||
)
|
)
|
||||||
public val id: Long = 0L,
|
public val id: Long = 0L,
|
||||||
blocks: List<Block> = emptyList(),
|
blocks: List<Block> = emptyList(),
|
||||||
@ -128,6 +147,7 @@ public class Point(
|
|||||||
tag = 2,
|
tag = 2,
|
||||||
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block#ADAPTER",
|
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block#ADAPTER",
|
||||||
label = WireField.Label.REPEATED,
|
label = WireField.Label.REPEATED,
|
||||||
|
schemaIndex = 1,
|
||||||
)
|
)
|
||||||
public val blocks: List<Block> = immutableCopyOf("blocks", blocks)
|
public val blocks: List<Block> = immutableCopyOf("blocks", blocks)
|
||||||
|
|
||||||
@ -135,10 +155,10 @@ public class Point(
|
|||||||
message = "Shouldn't be used in Kotlin",
|
message = "Shouldn't be used in Kotlin",
|
||||||
level = DeprecationLevel.HIDDEN,
|
level = DeprecationLevel.HIDDEN,
|
||||||
)
|
)
|
||||||
public override fun newBuilder(): Nothing = throw
|
override fun newBuilder(): Nothing = throw
|
||||||
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
||||||
|
|
||||||
public override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other === this) return true
|
if (other === this) return true
|
||||||
if (other !is Channel) return false
|
if (other !is Channel) return false
|
||||||
if (unknownFields != other.unknownFields) return false
|
if (unknownFields != other.unknownFields) return false
|
||||||
@ -147,7 +167,7 @@ public class Point(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
var result = super.hashCode
|
var result = super.hashCode
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
result = unknownFields.hashCode()
|
result = unknownFields.hashCode()
|
||||||
@ -158,7 +178,7 @@ public class Point(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun toString(): String {
|
override fun toString(): String {
|
||||||
val result = mutableListOf<String>()
|
val result = mutableListOf<String>()
|
||||||
result += """id=$id"""
|
result += """id=$id"""
|
||||||
if (blocks.isNotEmpty()) result += """blocks=$blocks"""
|
if (blocks.isNotEmpty()) result += """blocks=$blocks"""
|
||||||
@ -181,26 +201,26 @@ public class Point(
|
|||||||
null,
|
null,
|
||||||
"numass-proto.proto"
|
"numass-proto.proto"
|
||||||
) {
|
) {
|
||||||
public override fun encodedSize(`value`: Channel): Int {
|
override fun encodedSize(`value`: Channel): Int {
|
||||||
var size = value.unknownFields.size
|
var size = value.unknownFields.size
|
||||||
if (value.id != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.id)
|
if (value.id != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.id)
|
||||||
size += Block.ADAPTER.asRepeated().encodedSizeWithTag(2, value.blocks)
|
size += Block.ADAPTER.asRepeated().encodedSizeWithTag(2, value.blocks)
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ProtoWriter, `value`: Channel): Unit {
|
override fun encode(writer: ProtoWriter, `value`: Channel) {
|
||||||
if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id)
|
if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id)
|
||||||
Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks)
|
Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks)
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ReverseProtoWriter, `value`: Channel): Unit {
|
override fun encode(writer: ReverseProtoWriter, `value`: Channel) {
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks)
|
Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks)
|
||||||
if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id)
|
if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun decode(reader: ProtoReader): Channel {
|
override fun decode(reader: ProtoReader): Channel {
|
||||||
var id: Long = 0L
|
var id: Long = 0L
|
||||||
val blocks = mutableListOf<Block>()
|
val blocks = mutableListOf<Block>()
|
||||||
val unknownFields = reader.forEachTag { tag ->
|
val unknownFields = reader.forEachTag { tag ->
|
||||||
@ -217,7 +237,7 @@ public class Point(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun redact(`value`: Channel): Channel = value.copy(
|
override fun redact(`value`: Channel): Channel = value.copy(
|
||||||
blocks = value.blocks.redactElements(Block.ADAPTER),
|
blocks = value.blocks.redactElements(Block.ADAPTER),
|
||||||
unknownFields = ByteString.EMPTY
|
unknownFields = ByteString.EMPTY
|
||||||
)
|
)
|
||||||
@ -237,6 +257,7 @@ public class Point(
|
|||||||
tag = 1,
|
tag = 1,
|
||||||
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
||||||
label = WireField.Label.OMIT_IDENTITY,
|
label = WireField.Label.OMIT_IDENTITY,
|
||||||
|
schemaIndex = 0,
|
||||||
)
|
)
|
||||||
public val time: Long = 0L,
|
public val time: Long = 0L,
|
||||||
frames: List<Frame> = emptyList(),
|
frames: List<Frame> = emptyList(),
|
||||||
@ -247,6 +268,7 @@ public class Point(
|
|||||||
tag = 3,
|
tag = 3,
|
||||||
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Events#ADAPTER",
|
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Events#ADAPTER",
|
||||||
label = WireField.Label.OMIT_IDENTITY,
|
label = WireField.Label.OMIT_IDENTITY,
|
||||||
|
schemaIndex = 2,
|
||||||
)
|
)
|
||||||
public val events: Events? = null,
|
public val events: Events? = null,
|
||||||
/**
|
/**
|
||||||
@ -256,6 +278,7 @@ public class Point(
|
|||||||
tag = 4,
|
tag = 4,
|
||||||
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
||||||
label = WireField.Label.OMIT_IDENTITY,
|
label = WireField.Label.OMIT_IDENTITY,
|
||||||
|
schemaIndex = 3,
|
||||||
)
|
)
|
||||||
public val length: Long = 0L,
|
public val length: Long = 0L,
|
||||||
/**
|
/**
|
||||||
@ -266,6 +289,7 @@ public class Point(
|
|||||||
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
||||||
label = WireField.Label.OMIT_IDENTITY,
|
label = WireField.Label.OMIT_IDENTITY,
|
||||||
jsonName = "binSize",
|
jsonName = "binSize",
|
||||||
|
schemaIndex = 4,
|
||||||
)
|
)
|
||||||
public val bin_size: Long = 0L,
|
public val bin_size: Long = 0L,
|
||||||
unknownFields: ByteString = ByteString.EMPTY,
|
unknownFields: ByteString = ByteString.EMPTY,
|
||||||
@ -277,6 +301,7 @@ public class Point(
|
|||||||
tag = 2,
|
tag = 2,
|
||||||
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Frame#ADAPTER",
|
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Frame#ADAPTER",
|
||||||
label = WireField.Label.REPEATED,
|
label = WireField.Label.REPEATED,
|
||||||
|
schemaIndex = 1,
|
||||||
)
|
)
|
||||||
public val frames: List<Frame> = immutableCopyOf("frames", frames)
|
public val frames: List<Frame> = immutableCopyOf("frames", frames)
|
||||||
|
|
||||||
@ -284,10 +309,10 @@ public class Point(
|
|||||||
message = "Shouldn't be used in Kotlin",
|
message = "Shouldn't be used in Kotlin",
|
||||||
level = DeprecationLevel.HIDDEN,
|
level = DeprecationLevel.HIDDEN,
|
||||||
)
|
)
|
||||||
public override fun newBuilder(): Nothing = throw
|
override fun newBuilder(): Nothing = throw
|
||||||
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
||||||
|
|
||||||
public override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other === this) return true
|
if (other === this) return true
|
||||||
if (other !is Block) return false
|
if (other !is Block) return false
|
||||||
if (unknownFields != other.unknownFields) return false
|
if (unknownFields != other.unknownFields) return false
|
||||||
@ -299,7 +324,7 @@ public class Point(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
var result = super.hashCode
|
var result = super.hashCode
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
result = unknownFields.hashCode()
|
result = unknownFields.hashCode()
|
||||||
@ -313,7 +338,7 @@ public class Point(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun toString(): String {
|
override fun toString(): String {
|
||||||
val result = mutableListOf<String>()
|
val result = mutableListOf<String>()
|
||||||
result += """time=$time"""
|
result += """time=$time"""
|
||||||
if (frames.isNotEmpty()) result += """frames=$frames"""
|
if (frames.isNotEmpty()) result += """frames=$frames"""
|
||||||
@ -342,7 +367,7 @@ public class Point(
|
|||||||
null,
|
null,
|
||||||
"numass-proto.proto"
|
"numass-proto.proto"
|
||||||
) {
|
) {
|
||||||
public override fun encodedSize(`value`: Block): Int {
|
override fun encodedSize(`value`: Block): Int {
|
||||||
var size = value.unknownFields.size
|
var size = value.unknownFields.size
|
||||||
if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time)
|
if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time)
|
||||||
size += Frame.ADAPTER.asRepeated().encodedSizeWithTag(2, value.frames)
|
size += Frame.ADAPTER.asRepeated().encodedSizeWithTag(2, value.frames)
|
||||||
@ -353,7 +378,7 @@ public class Point(
|
|||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ProtoWriter, `value`: Block): Unit {
|
override fun encode(writer: ProtoWriter, `value`: Block) {
|
||||||
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
|
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
|
||||||
Frame.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.frames)
|
Frame.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.frames)
|
||||||
if (value.events != null) Events.ADAPTER.encodeWithTag(writer, 3, value.events)
|
if (value.events != null) Events.ADAPTER.encodeWithTag(writer, 3, value.events)
|
||||||
@ -362,7 +387,7 @@ public class Point(
|
|||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ReverseProtoWriter, `value`: Block): Unit {
|
override fun encode(writer: ReverseProtoWriter, `value`: Block) {
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
if (value.bin_size != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 5, value.bin_size)
|
if (value.bin_size != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 5, value.bin_size)
|
||||||
if (value.length != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 4, value.length)
|
if (value.length != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 4, value.length)
|
||||||
@ -371,7 +396,7 @@ public class Point(
|
|||||||
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
|
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun decode(reader: ProtoReader): Block {
|
override fun decode(reader: ProtoReader): Block {
|
||||||
var time: Long = 0L
|
var time: Long = 0L
|
||||||
val frames = mutableListOf<Frame>()
|
val frames = mutableListOf<Frame>()
|
||||||
var events: Events? = null
|
var events: Events? = null
|
||||||
@ -397,7 +422,7 @@ public class Point(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun redact(`value`: Block): Block = value.copy(
|
override fun redact(`value`: Block): Block = value.copy(
|
||||||
frames = value.frames.redactElements(Frame.ADAPTER),
|
frames = value.frames.redactElements(Frame.ADAPTER),
|
||||||
events = value.events?.let(Events.ADAPTER::redact),
|
events = value.events?.let(Events.ADAPTER::redact),
|
||||||
unknownFields = ByteString.EMPTY
|
unknownFields = ByteString.EMPTY
|
||||||
@ -418,6 +443,7 @@ public class Point(
|
|||||||
tag = 1,
|
tag = 1,
|
||||||
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
||||||
label = WireField.Label.OMIT_IDENTITY,
|
label = WireField.Label.OMIT_IDENTITY,
|
||||||
|
schemaIndex = 0,
|
||||||
)
|
)
|
||||||
public val time: Long = 0L,
|
public val time: Long = 0L,
|
||||||
/**
|
/**
|
||||||
@ -428,6 +454,7 @@ public class Point(
|
|||||||
adapter = "com.squareup.wire.ProtoAdapter#BYTES",
|
adapter = "com.squareup.wire.ProtoAdapter#BYTES",
|
||||||
label = WireField.Label.OMIT_IDENTITY,
|
label = WireField.Label.OMIT_IDENTITY,
|
||||||
declaredName = "data",
|
declaredName = "data",
|
||||||
|
schemaIndex = 1,
|
||||||
)
|
)
|
||||||
public val data_: ByteString = ByteString.EMPTY,
|
public val data_: ByteString = ByteString.EMPTY,
|
||||||
unknownFields: ByteString = ByteString.EMPTY,
|
unknownFields: ByteString = ByteString.EMPTY,
|
||||||
@ -436,10 +463,10 @@ public class Point(
|
|||||||
message = "Shouldn't be used in Kotlin",
|
message = "Shouldn't be used in Kotlin",
|
||||||
level = DeprecationLevel.HIDDEN,
|
level = DeprecationLevel.HIDDEN,
|
||||||
)
|
)
|
||||||
public override fun newBuilder(): Nothing = throw
|
override fun newBuilder(): Nothing = throw
|
||||||
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
||||||
|
|
||||||
public override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other === this) return true
|
if (other === this) return true
|
||||||
if (other !is Frame) return false
|
if (other !is Frame) return false
|
||||||
if (unknownFields != other.unknownFields) return false
|
if (unknownFields != other.unknownFields) return false
|
||||||
@ -448,7 +475,7 @@ public class Point(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
var result = super.hashCode
|
var result = super.hashCode
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
result = unknownFields.hashCode()
|
result = unknownFields.hashCode()
|
||||||
@ -459,7 +486,7 @@ public class Point(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun toString(): String {
|
override fun toString(): String {
|
||||||
val result = mutableListOf<String>()
|
val result = mutableListOf<String>()
|
||||||
result += """time=$time"""
|
result += """time=$time"""
|
||||||
result += """data_=$data_"""
|
result += """data_=$data_"""
|
||||||
@ -482,7 +509,7 @@ public class Point(
|
|||||||
null,
|
null,
|
||||||
"numass-proto.proto"
|
"numass-proto.proto"
|
||||||
) {
|
) {
|
||||||
public override fun encodedSize(`value`: Frame): Int {
|
override fun encodedSize(`value`: Frame): Int {
|
||||||
var size = value.unknownFields.size
|
var size = value.unknownFields.size
|
||||||
if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time)
|
if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time)
|
||||||
if (value.data_ != ByteString.EMPTY) size += ProtoAdapter.BYTES.encodedSizeWithTag(2,
|
if (value.data_ != ByteString.EMPTY) size += ProtoAdapter.BYTES.encodedSizeWithTag(2,
|
||||||
@ -490,21 +517,21 @@ public class Point(
|
|||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ProtoWriter, `value`: Frame): Unit {
|
override fun encode(writer: ProtoWriter, `value`: Frame) {
|
||||||
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
|
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
|
||||||
if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2,
|
if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2,
|
||||||
value.data_)
|
value.data_)
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ReverseProtoWriter, `value`: Frame): Unit {
|
override fun encode(writer: ReverseProtoWriter, `value`: Frame) {
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2,
|
if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2,
|
||||||
value.data_)
|
value.data_)
|
||||||
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
|
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun decode(reader: ProtoReader): Frame {
|
override fun decode(reader: ProtoReader): Frame {
|
||||||
var time: Long = 0L
|
var time: Long = 0L
|
||||||
var data_: ByteString = ByteString.EMPTY
|
var data_: ByteString = ByteString.EMPTY
|
||||||
val unknownFields = reader.forEachTag { tag ->
|
val unknownFields = reader.forEachTag { tag ->
|
||||||
@ -521,7 +548,7 @@ public class Point(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun redact(`value`: Frame): Frame = value.copy(
|
override fun redact(`value`: Frame): Frame = value.copy(
|
||||||
unknownFields = ByteString.EMPTY
|
unknownFields = ByteString.EMPTY
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -547,6 +574,7 @@ public class Point(
|
|||||||
tag = 1,
|
tag = 1,
|
||||||
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
||||||
label = WireField.Label.PACKED,
|
label = WireField.Label.PACKED,
|
||||||
|
schemaIndex = 0,
|
||||||
)
|
)
|
||||||
public val times: List<Long> = immutableCopyOf("times", times)
|
public val times: List<Long> = immutableCopyOf("times", times)
|
||||||
|
|
||||||
@ -557,6 +585,7 @@ public class Point(
|
|||||||
tag = 2,
|
tag = 2,
|
||||||
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
adapter = "com.squareup.wire.ProtoAdapter#UINT64",
|
||||||
label = WireField.Label.PACKED,
|
label = WireField.Label.PACKED,
|
||||||
|
schemaIndex = 1,
|
||||||
)
|
)
|
||||||
public val amplitudes: List<Long> = immutableCopyOf("amplitudes", amplitudes)
|
public val amplitudes: List<Long> = immutableCopyOf("amplitudes", amplitudes)
|
||||||
|
|
||||||
@ -564,10 +593,10 @@ public class Point(
|
|||||||
message = "Shouldn't be used in Kotlin",
|
message = "Shouldn't be used in Kotlin",
|
||||||
level = DeprecationLevel.HIDDEN,
|
level = DeprecationLevel.HIDDEN,
|
||||||
)
|
)
|
||||||
public override fun newBuilder(): Nothing = throw
|
override fun newBuilder(): Nothing = throw
|
||||||
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
|
||||||
|
|
||||||
public override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other === this) return true
|
if (other === this) return true
|
||||||
if (other !is Events) return false
|
if (other !is Events) return false
|
||||||
if (unknownFields != other.unknownFields) return false
|
if (unknownFields != other.unknownFields) return false
|
||||||
@ -576,7 +605,7 @@ public class Point(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
var result = super.hashCode
|
var result = super.hashCode
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
result = unknownFields.hashCode()
|
result = unknownFields.hashCode()
|
||||||
@ -587,7 +616,7 @@ public class Point(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun toString(): String {
|
override fun toString(): String {
|
||||||
val result = mutableListOf<String>()
|
val result = mutableListOf<String>()
|
||||||
if (times.isNotEmpty()) result += """times=$times"""
|
if (times.isNotEmpty()) result += """times=$times"""
|
||||||
if (amplitudes.isNotEmpty()) result += """amplitudes=$amplitudes"""
|
if (amplitudes.isNotEmpty()) result += """amplitudes=$amplitudes"""
|
||||||
@ -610,43 +639,61 @@ public class Point(
|
|||||||
null,
|
null,
|
||||||
"numass-proto.proto"
|
"numass-proto.proto"
|
||||||
) {
|
) {
|
||||||
public override fun encodedSize(`value`: Events): Int {
|
override fun encodedSize(`value`: Events): Int {
|
||||||
var size = value.unknownFields.size
|
var size = value.unknownFields.size
|
||||||
size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(1, value.times)
|
size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(1, value.times)
|
||||||
size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(2, value.amplitudes)
|
size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(2, value.amplitudes)
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ProtoWriter, `value`: Events): Unit {
|
override fun encode(writer: ProtoWriter, `value`: Events) {
|
||||||
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times)
|
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times)
|
||||||
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes)
|
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes)
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun encode(writer: ReverseProtoWriter, `value`: Events): Unit {
|
override fun encode(writer: ReverseProtoWriter, `value`: Events) {
|
||||||
writer.writeBytes(value.unknownFields)
|
writer.writeBytes(value.unknownFields)
|
||||||
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes)
|
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes)
|
||||||
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times)
|
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun decode(reader: ProtoReader): Events {
|
override fun decode(reader: ProtoReader): Events {
|
||||||
val times = mutableListOf<Long>()
|
var times: MutableList<Long>? = null
|
||||||
val amplitudes = mutableListOf<Long>()
|
var amplitudes: MutableList<Long>? = null
|
||||||
val unknownFields = reader.forEachTag { tag ->
|
val unknownFields = reader.forEachTag { tag ->
|
||||||
when (tag) {
|
when (tag) {
|
||||||
1 -> times.add(ProtoAdapter.UINT64.decode(reader))
|
1 -> {
|
||||||
2 -> amplitudes.add(ProtoAdapter.UINT64.decode(reader))
|
if (times == null) {
|
||||||
|
val minimumByteSize = 1
|
||||||
|
val initialCapacity = (reader.nextFieldMinLengthInBytes() / minimumByteSize)
|
||||||
|
.coerceAtMost(Int.MAX_VALUE.toLong())
|
||||||
|
.toInt()
|
||||||
|
times = ArrayList(initialCapacity)
|
||||||
|
}
|
||||||
|
times!!.add(ProtoAdapter.UINT64.decode(reader))
|
||||||
|
}
|
||||||
|
2 -> {
|
||||||
|
if (amplitudes == null) {
|
||||||
|
val minimumByteSize = 1
|
||||||
|
val initialCapacity = (reader.nextFieldMinLengthInBytes() / minimumByteSize)
|
||||||
|
.coerceAtMost(Int.MAX_VALUE.toLong())
|
||||||
|
.toInt()
|
||||||
|
amplitudes = ArrayList(initialCapacity)
|
||||||
|
}
|
||||||
|
amplitudes!!.add(ProtoAdapter.UINT64.decode(reader))
|
||||||
|
}
|
||||||
else -> reader.readUnknownField(tag)
|
else -> reader.readUnknownField(tag)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Events(
|
return Events(
|
||||||
times = times,
|
times = times ?: listOf(),
|
||||||
amplitudes = amplitudes,
|
amplitudes = amplitudes ?: listOf(),
|
||||||
unknownFields = unknownFields
|
unknownFields = unknownFields
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun redact(`value`: Events): Events = value.copy(
|
override fun redact(`value`: Events): Events = value.copy(
|
||||||
unknownFields = ByteString.EMPTY
|
unknownFields = ByteString.EMPTY
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ import java.nio.file.Path
|
|||||||
import kotlin.io.path.exists
|
import kotlin.io.path.exists
|
||||||
import kotlin.io.path.isDirectory
|
import kotlin.io.path.isDirectory
|
||||||
import kotlin.io.path.relativeTo
|
import kotlin.io.path.relativeTo
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
public class NumassProtoPlugin : AbstractPlugin() {
|
public class NumassProtoPlugin : AbstractPlugin() {
|
||||||
public val io: IOPlugin by require(IOPlugin)
|
public val io: IOPlugin by require(IOPlugin)
|
||||||
@ -35,7 +34,6 @@ public class NumassProtoPlugin : AbstractPlugin() {
|
|||||||
public companion object : PluginFactory<NumassProtoPlugin> {
|
public companion object : PluginFactory<NumassProtoPlugin> {
|
||||||
override fun build(context: Context, meta: Meta): NumassProtoPlugin = NumassProtoPlugin()
|
override fun build(context: Context, meta: Meta): NumassProtoPlugin = NumassProtoPlugin()
|
||||||
override val tag: PluginTag = PluginTag("numass-proto", group = "ru.inr.mass")
|
override val tag: PluginTag = PluginTag("numass-proto", group = "ru.inr.mass")
|
||||||
override val type: KClass<out NumassProtoPlugin> = NumassProtoPlugin::class
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,24 +39,8 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm
|
|||||||
writeRawString(END_SEQUENCE)
|
writeRawString(END_SEQUENCE)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun writeEnvelope(
|
override fun writeObject(output: Output, obj: Envelope) {
|
||||||
output: Output,
|
|
||||||
envelope: Envelope,
|
|
||||||
metaFormatFactory: MetaFormatFactory,
|
|
||||||
formatMeta: Meta,
|
|
||||||
) {
|
|
||||||
error("Don't write legacy formats")
|
error("Don't write legacy formats")
|
||||||
// val metaFormat = metaFormatFactory.invoke(formatMeta, io.context)
|
|
||||||
// val metaBytes = metaFormat.toBinary(envelope.meta)
|
|
||||||
// val actualSize: ULong = (envelope.data?.size ?: 0).toULong()
|
|
||||||
// val tag = Tag(metaFormatFactory.key, metaBytes.size.toUInt() + 2u, actualSize)
|
|
||||||
// output.writeBinary(tag.toBinary())
|
|
||||||
// output.writeBinary(metaBytes)
|
|
||||||
// output.writeRawString("\r\n")
|
|
||||||
// envelope.data?.let {
|
|
||||||
// output.writeBinary(it)
|
|
||||||
// }
|
|
||||||
// output.flush()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -68,31 +52,30 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm
|
|||||||
override fun readObject(input: Input): Envelope {
|
override fun readObject(input: Input): Envelope {
|
||||||
val tag = input.readTag()
|
val tag = input.readTag()
|
||||||
|
|
||||||
val metaFormat = io.resolveMetaFormat(tag.metaFormatKey)
|
val metaFormat = io.resolveMetaFormat(tag.metaFormatKey) ?: JsonMetaFormat
|
||||||
?: error("Meta format with key ${tag.metaFormatKey} not found")
|
|
||||||
|
|
||||||
val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt()))
|
val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt()))
|
||||||
|
|
||||||
val data = input.readBinary(tag.dataSize.toInt())
|
val data = input.readBinary(tag.dataSize.toInt())
|
||||||
|
|
||||||
return SimpleEnvelope(meta, data)
|
return Envelope(meta, data)
|
||||||
}
|
|
||||||
|
|
||||||
override fun readPartial(input: Input): PartialEnvelope {
|
|
||||||
val tag = input.readTag()
|
|
||||||
|
|
||||||
val metaFormat = if (tag.metaFormatKey == 1.toShort()) {
|
|
||||||
JsonMetaFormat
|
|
||||||
} else {
|
|
||||||
io.resolveMetaFormat(tag.metaFormatKey)
|
|
||||||
?: error("Meta format with key ${tag.metaFormatKey} not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt()))
|
|
||||||
|
|
||||||
|
|
||||||
return PartialEnvelope(meta, 30 + tag.metaSize.toInt(), tag.dataSize)
|
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// override fun readPartial(input: Input): PartialEnvelope {
|
||||||
|
// val tag = input.readTag()
|
||||||
|
//
|
||||||
|
// val metaFormat = if (tag.metaFormatKey == 1.toShort()) {
|
||||||
|
// JsonMetaFormat
|
||||||
|
// } else {
|
||||||
|
// io.resolveMetaFormat(tag.metaFormatKey)
|
||||||
|
// ?: error("Meta format with key ${tag.metaFormatKey} not found")
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt()))
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// return PartialEnvelope(meta, 30 + tag.metaSize.toInt(), tag.dataSize)
|
||||||
|
// }
|
||||||
|
|
||||||
private data class Tag(
|
private data class Tag(
|
||||||
val metaFormatKey: Short,
|
val metaFormatKey: Short,
|
||||||
@ -149,23 +132,11 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm
|
|||||||
|
|
||||||
private val default by lazy { invoke() }
|
private val default by lazy { invoke() }
|
||||||
|
|
||||||
override fun readPartial(input: Input): PartialEnvelope =
|
override fun writeObject(output: Output, obj: Envelope) {
|
||||||
default.run { readPartial(input) }
|
error("Don't write legacy formats")
|
||||||
|
|
||||||
override fun writeEnvelope(
|
|
||||||
output: Output,
|
|
||||||
envelope: Envelope,
|
|
||||||
metaFormatFactory: MetaFormatFactory,
|
|
||||||
formatMeta: Meta,
|
|
||||||
): Unit = default.run {
|
|
||||||
writeEnvelope(
|
|
||||||
output,
|
|
||||||
envelope,
|
|
||||||
metaFormatFactory,
|
|
||||||
formatMeta
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun readObject(input: Input): Envelope = default.readObject(input)
|
override fun readObject(input: Input): Envelope = default.readObject(input)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("space.kscience.gradle.mpp")
|
id("space.kscience.gradle.mpp")
|
||||||
|
id("org.jetbrains.compose")
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7,54 +8,41 @@ val visionForgeVersion: String by rootProject.extra
|
|||||||
|
|
||||||
val production: Boolean by rootProject.extra(true)
|
val production: Boolean by rootProject.extra(true)
|
||||||
|
|
||||||
kotlin {
|
|
||||||
js(IR) {
|
|
||||||
browser {
|
|
||||||
webpackTask {
|
|
||||||
this.outputFileName = "js/numass-web.js"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
binaries.executable()
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
commonMain {
|
|
||||||
dependencies {
|
|
||||||
implementation(project(":numass-data-model"))
|
|
||||||
implementation("space.kscience:visionforge-core:$visionForgeVersion")
|
|
||||||
implementation("space.kscience:visionforge-plotly:$visionForgeVersion")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
jvmMain {
|
|
||||||
dependencies {
|
|
||||||
implementation(project(":numass-data-proto"))
|
|
||||||
implementation("space.kscience:visionforge-server:$visionForgeVersion")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
afterEvaluate {
|
|
||||||
val distributionTask = if (production) {
|
|
||||||
tasks.getByName("jsBrowserDistribution")
|
|
||||||
} else {
|
|
||||||
tasks.getByName("jsBrowserDevelopmentExecutableDistribution")
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.getByName<ProcessResources>("jvmProcessResources") {
|
|
||||||
dependsOn(distributionTask)
|
|
||||||
from(distributionTask)
|
|
||||||
include("**/*.js")
|
|
||||||
if (production) {
|
|
||||||
include("**/*.map")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
kscience {
|
kscience {
|
||||||
|
fullStack("js/numass-web.js")
|
||||||
|
|
||||||
useSerialization {
|
useSerialization {
|
||||||
json()
|
json()
|
||||||
}
|
}
|
||||||
withContextReceivers()
|
|
||||||
|
useContextReceivers()
|
||||||
|
useKtor()
|
||||||
|
|
||||||
|
commonMain {
|
||||||
|
dependencies {
|
||||||
|
implementation(project(":numass-data-model"))
|
||||||
|
implementation("space.kscience:visionforge-core:$visionForgeVersion")
|
||||||
|
implementation("space.kscience:visionforge-plotly:$visionForgeVersion")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kotlin{
|
||||||
|
sourceSets{
|
||||||
|
getByName("jvmMain"){
|
||||||
|
dependencies{
|
||||||
|
implementation(compose.runtime)
|
||||||
|
implementation(project(":numass-data-proto"))
|
||||||
|
implementation("io.ktor:ktor-server-cio")
|
||||||
|
implementation("io.ktor:ktor-server-html-builder")
|
||||||
|
implementation("space.kscience:visionforge-plotly:$visionForgeVersion")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getByName("jsMain"){
|
||||||
|
dependencies{
|
||||||
|
implementation(compose.html.core)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -9,7 +9,6 @@ import space.kscience.dataforge.context.PluginTag
|
|||||||
import space.kscience.dataforge.meta.Meta
|
import space.kscience.dataforge.meta.Meta
|
||||||
import space.kscience.visionforge.Vision
|
import space.kscience.visionforge.Vision
|
||||||
import space.kscience.visionforge.VisionPlugin
|
import space.kscience.visionforge.VisionPlugin
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
public class NumassCommonPlugin(meta: Meta = Meta.EMPTY) : VisionPlugin(meta) {
|
public class NumassCommonPlugin(meta: Meta = Meta.EMPTY) : VisionPlugin(meta) {
|
||||||
override val tag: PluginTag get() = Companion.tag
|
override val tag: PluginTag get() = Companion.tag
|
||||||
@ -18,7 +17,6 @@ public class NumassCommonPlugin(meta: Meta = Meta.EMPTY) : VisionPlugin(meta) {
|
|||||||
|
|
||||||
public companion object : PluginFactory<NumassCommonPlugin> {
|
public companion object : PluginFactory<NumassCommonPlugin> {
|
||||||
override val tag: PluginTag = PluginTag("numass.common", "ru.inr.mass")
|
override val tag: PluginTag = PluginTag("numass.common", "ru.inr.mass")
|
||||||
override val type: KClass<NumassCommonPlugin> = NumassCommonPlugin::class
|
|
||||||
|
|
||||||
override fun build(context: Context, meta: Meta): NumassCommonPlugin = NumassCommonPlugin()
|
override fun build(context: Context, meta: Meta): NumassCommonPlugin = NumassCommonPlugin()
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ import space.kscience.visionforge.ElementVisionRenderer
|
|||||||
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
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
|
public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
|
||||||
public val client: VisionClient by require(VisionClient)
|
public val client: VisionClient by require(VisionClient)
|
||||||
@ -37,7 +36,7 @@ public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
|
|||||||
else -> super.content(target)
|
else -> super.content(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun render(element: Element, vision: Vision, meta: Meta) {
|
override fun render(element: Element, name: Name, vision: Vision, meta: Meta) {
|
||||||
when (vision) {
|
when (vision) {
|
||||||
is VisionOfNumassHv -> element.append {
|
is VisionOfNumassHv -> element.append {
|
||||||
h1 { +"HV" }
|
h1 { +"HV" }
|
||||||
@ -64,7 +63,7 @@ public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
|
|||||||
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 {
|
||||||
name = channel
|
this.name = channel
|
||||||
mode = ScatterMode.lines
|
mode = ScatterMode.lines
|
||||||
line {
|
line {
|
||||||
shape = LineShape.hv
|
shape = LineShape.hv
|
||||||
@ -83,8 +82,6 @@ public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
|
|||||||
|
|
||||||
public companion object : PluginFactory<NumassJsPlugin> {
|
public companion object : PluginFactory<NumassJsPlugin> {
|
||||||
override val tag: PluginTag = PluginTag("numass.js", "ru.inr.mass")
|
override val tag: PluginTag = PluginTag("numass.js", "ru.inr.mass")
|
||||||
override val type: KClass<NumassJsPlugin> = NumassJsPlugin::class
|
|
||||||
|
|
||||||
override fun build(context: Context, meta: Meta): NumassJsPlugin = NumassJsPlugin()
|
override fun build(context: Context, meta: Meta): NumassJsPlugin = NumassJsPlugin()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
package ru.inr.mass.data.server
|
||||||
|
|
||||||
|
import org.jetbrains.compose.web.dom.Div
|
||||||
|
import org.jetbrains.compose.web.renderComposable
|
||||||
|
import org.w3c.dom.Document
|
||||||
|
import space.kscience.dataforge.context.Context
|
||||||
|
import space.kscience.visionforge.Application
|
||||||
|
|
||||||
|
public class NumassViewerApplication : Application {
|
||||||
|
private val context = Context("NumassViewer") {
|
||||||
|
plugin(NumassJsPlugin)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun start(document: Document, state: Map<String, Any>) {
|
||||||
|
renderComposable(rootElementId = "application") {
|
||||||
|
Div({ classes("container") }) {
|
||||||
|
Div({ classes("row") })
|
||||||
|
Div({ classes("col-md-3") }) {
|
||||||
|
|
||||||
|
}
|
||||||
|
Div({ classes("col-md-9") }) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,15 +1,20 @@
|
|||||||
package ru.inr.mass.data.server
|
package ru.inr.mass.data.server
|
||||||
|
|
||||||
|
import io.ktor.http.ContentType
|
||||||
import io.ktor.http.HttpStatusCode
|
import io.ktor.http.HttpStatusCode
|
||||||
import io.ktor.http.URLBuilder
|
import io.ktor.server.application.Application
|
||||||
import io.ktor.server.application.call
|
import io.ktor.server.application.call
|
||||||
import io.ktor.server.cio.CIO
|
import io.ktor.server.cio.CIO
|
||||||
import io.ktor.server.engine.embeddedServer
|
import io.ktor.server.engine.embeddedServer
|
||||||
|
import io.ktor.server.html.respondHtml
|
||||||
|
import io.ktor.server.http.content.resources
|
||||||
import io.ktor.server.response.respondText
|
import io.ktor.server.response.respondText
|
||||||
import io.ktor.server.routing.get
|
import io.ktor.server.routing.get
|
||||||
import io.ktor.server.routing.routing
|
import io.ktor.server.routing.routing
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import kotlinx.html.*
|
||||||
import ru.inr.mass.data.api.NumassPoint
|
import ru.inr.mass.data.api.NumassPoint
|
||||||
import ru.inr.mass.data.proto.NumassDirectorySet
|
import ru.inr.mass.data.proto.NumassDirectorySet
|
||||||
import ru.inr.mass.data.proto.NumassProtoPlugin
|
import ru.inr.mass.data.proto.NumassProtoPlugin
|
||||||
@ -22,12 +27,15 @@ import space.kscience.dataforge.names.Name
|
|||||||
import space.kscience.dataforge.names.NameToken
|
import space.kscience.dataforge.names.NameToken
|
||||||
import space.kscience.dataforge.names.cutLast
|
import space.kscience.dataforge.names.cutLast
|
||||||
import space.kscience.dataforge.names.lastOrNull
|
import space.kscience.dataforge.names.lastOrNull
|
||||||
import space.kscience.visionforge.server.close
|
|
||||||
import space.kscience.visionforge.server.openInBrowser
|
|
||||||
import space.kscience.visionforge.server.visionServer
|
|
||||||
|
|
||||||
|
|
||||||
public suspend fun main() {
|
public fun main() {
|
||||||
|
val port = 7777
|
||||||
|
val host = "localhost"
|
||||||
|
embeddedServer(CIO, port, host, module = Application::numassModule).start()
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun Application.numassModule(repositoryName: String = "D:\\Work\\Numass\\data\\test") {
|
||||||
val context = Context("Numass") {
|
val context = Context("Numass") {
|
||||||
plugin(NumassProtoPlugin)
|
plugin(NumassProtoPlugin)
|
||||||
plugin(NumassCommonPlugin)
|
plugin(NumassCommonPlugin)
|
||||||
@ -37,96 +45,98 @@ public suspend fun main() {
|
|||||||
val numassCommon = context.fetch(NumassCommonPlugin)
|
val numassCommon = context.fetch(NumassCommonPlugin)
|
||||||
|
|
||||||
val visionManager = numassCommon.visionManager
|
val visionManager = numassCommon.visionManager
|
||||||
|
val repository: DataTree<NumassDirectorySet> = runBlocking { numassProto.readRepository(repositoryName) }
|
||||||
|
|
||||||
val repositroyName = "D:\\Work\\Numass\\data\\test"
|
routing {
|
||||||
|
resources()
|
||||||
|
|
||||||
val port = 7777
|
get("/") {
|
||||||
val host = "localhost"
|
call.respondHtml {
|
||||||
|
head {
|
||||||
val url = URLBuilder(host = host, port = port).build()
|
meta { charset = "utf-8" }
|
||||||
|
meta {
|
||||||
val repository: DataTree<NumassDirectorySet> = numassProto.readRepository(repositroyName)
|
name = "viewport"
|
||||||
|
content = "width=device-width, initial-scale=1"
|
||||||
val visionOfNumassRepository = VisionOfNumassRepository(Name.EMPTY, repository)
|
}
|
||||||
|
title("Numass Data Viewer")
|
||||||
val server = context.embeddedServer(CIO, port, host) {
|
link {
|
||||||
routing {
|
href = "https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
|
||||||
get("/repository") {
|
rel = "stylesheet"
|
||||||
call.respondText {
|
attributes["integrity"] =
|
||||||
visionManager.encodeToString(visionOfNumassRepository)
|
"sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
|
||||||
|
attributes["crossorigin"] = "anonymous"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
body {
|
||||||
|
div {
|
||||||
get("/sets/{name...}") {
|
id = "application"
|
||||||
val setName: Name? = call.parameters.getAll("name")
|
}
|
||||||
?.map { NameToken.parse(it) }?.let(::Name)
|
script {
|
||||||
|
src = "js/numass-web.js"
|
||||||
if (setName == null) {
|
}
|
||||||
call.respondText(status = HttpStatusCode.BadRequest) { "Set name is empty" }
|
script {
|
||||||
return@get
|
src = "https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
|
||||||
}
|
integrity = "sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
|
||||||
|
attributes["crossorigin"] = "anonymous"
|
||||||
val set: NumassDirectorySet? = withContext(Dispatchers.IO) { repository[setName]?.await() }
|
}
|
||||||
if (set == null) {
|
|
||||||
call.respondText(status = HttpStatusCode.NotFound) { "A set with name $setName not found in the repository" }
|
|
||||||
return@get
|
|
||||||
}
|
|
||||||
|
|
||||||
call.respondText {
|
|
||||||
visionManager.encodeToString(VisionOfNumassSet(setName, set))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
get("/points/{name...}") {
|
|
||||||
val fullName: Name? = call.parameters.getAll("name")
|
|
||||||
?.map { NameToken.parse(it) }?.let(::Name)
|
|
||||||
|
|
||||||
if (fullName == null) {
|
|
||||||
call.respondText(status = HttpStatusCode.BadRequest) { "Point name is empty" }
|
|
||||||
return@get
|
|
||||||
}
|
|
||||||
|
|
||||||
val setName = fullName.cutLast()
|
|
||||||
|
|
||||||
val set: NumassDirectorySet? = withContext(Dispatchers.IO) { repository[setName]?.await() }
|
|
||||||
if (set == null) {
|
|
||||||
call.respondText(status = HttpStatusCode.NotFound) { "A set with name $setName not found in the repository" }
|
|
||||||
return@get
|
|
||||||
}
|
|
||||||
|
|
||||||
val pointIndex: Int? = fullName.lastOrNull()?.body?.toIntOrNull()
|
|
||||||
|
|
||||||
val point: NumassPoint? = set.points.find { it.index == pointIndex }
|
|
||||||
|
|
||||||
if (point == null) {
|
|
||||||
call.respondText(status = HttpStatusCode.NotFound) { "A point with name $setName/$pointIndex not found in the repository" }
|
|
||||||
return@get
|
|
||||||
}
|
|
||||||
call.respondText {
|
|
||||||
visionManager.encodeToString(point.toVision())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
visionServer(numassCommon.visionManager, url)
|
|
||||||
}.start()
|
|
||||||
|
|
||||||
// val server = context.visionManager.serve {
|
get("/repository") {
|
||||||
// header("numass", VisionPage.scriptHeader("js/numass-web.js"))
|
call.respondText(ContentType.Application.Json) {
|
||||||
// page {
|
visionManager.encodeToString(VisionOfNumassRepository(Name.EMPTY, repository))
|
||||||
// div("flex-column") {
|
}
|
||||||
// h1 { +"Visionforge file demo" }
|
}
|
||||||
// vision { visionOfNumass }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
server.openInBrowser()
|
get("/sets/{name...}") {
|
||||||
|
val setName: Name? = call.parameters.getAll("name")
|
||||||
|
?.map { NameToken.parse(it) }?.let(::Name)
|
||||||
|
|
||||||
|
if (setName == null) {
|
||||||
|
call.respondText(status = HttpStatusCode.BadRequest) { "Set name is empty" }
|
||||||
|
return@get
|
||||||
|
}
|
||||||
|
|
||||||
println("Enter 'exit' to close server")
|
val set: NumassDirectorySet? = withContext(Dispatchers.IO) { repository[setName]?.await() }
|
||||||
while (readLine() != "exit") {
|
if (set == null) {
|
||||||
//
|
call.respondText(status = HttpStatusCode.NotFound) { "A set with name $setName not found in the repository" }
|
||||||
|
return@get
|
||||||
|
}
|
||||||
|
|
||||||
|
call.respondText(ContentType.Application.Json) {
|
||||||
|
visionManager.encodeToString(VisionOfNumassSet(setName, set))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
get("/points/{name...}") {
|
||||||
|
val fullName: Name? = call.parameters.getAll("name")
|
||||||
|
?.map { NameToken.parse(it) }?.let(::Name)
|
||||||
|
|
||||||
|
if (fullName == null) {
|
||||||
|
call.respondText(status = HttpStatusCode.BadRequest) { "Point name is empty" }
|
||||||
|
return@get
|
||||||
|
}
|
||||||
|
|
||||||
|
val setName = fullName.cutLast()
|
||||||
|
|
||||||
|
val set: NumassDirectorySet? = withContext(Dispatchers.IO) { repository[setName]?.await() }
|
||||||
|
if (set == null) {
|
||||||
|
call.respondText(status = HttpStatusCode.NotFound) { "A set with name $setName not found in the repository" }
|
||||||
|
return@get
|
||||||
|
}
|
||||||
|
|
||||||
|
val pointIndex: Int? = fullName.lastOrNull()?.body?.toIntOrNull()
|
||||||
|
|
||||||
|
val point: NumassPoint? = set.points.find { it.index == pointIndex }
|
||||||
|
|
||||||
|
if (point == null) {
|
||||||
|
call.respondText(status = HttpStatusCode.NotFound) { "A point with name $setName/$pointIndex not found in the repository" }
|
||||||
|
return@get
|
||||||
|
}
|
||||||
|
call.respondText(ContentType.Application.Json) {
|
||||||
|
visionManager.encodeToString(point.toVision())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
//serveVisionData(VisionRoute("/visions", visionManager))
|
||||||
server.close()
|
|
||||||
|
|
||||||
}
|
}
|
@ -2,11 +2,8 @@ package ru.inr.mass.data.server
|
|||||||
|
|
||||||
import space.kscience.dataforge.context.Context
|
import space.kscience.dataforge.context.Context
|
||||||
import space.kscience.dataforge.misc.DFExperimental
|
import space.kscience.dataforge.misc.DFExperimental
|
||||||
import space.kscience.visionforge.html.HtmlVisionFragment
|
import space.kscience.visionforge.html.*
|
||||||
import space.kscience.visionforge.html.ResourceLocation
|
import space.kscience.visionforge.visionManager
|
||||||
import space.kscience.visionforge.html.VisionPage
|
|
||||||
import space.kscience.visionforge.html.importScriptHeader
|
|
||||||
import space.kscience.visionforge.makeFile
|
|
||||||
import java.awt.Desktop
|
import java.awt.Desktop
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
@ -19,7 +16,7 @@ public fun Context.makeNumassWebFile(
|
|||||||
show: Boolean = true,
|
show: Boolean = true,
|
||||||
content: HtmlVisionFragment,
|
content: HtmlVisionFragment,
|
||||||
): Unit {
|
): Unit {
|
||||||
val actualPath = VisionPage(this, content = content).makeFile(path) { actualPath: Path ->
|
val actualPath = VisionPage(visionManager, content = content).makeFile(path) { actualPath: Path ->
|
||||||
mapOf(
|
mapOf(
|
||||||
"title" to VisionPage.title(title),
|
"title" to VisionPage.title(title),
|
||||||
"numassWeb" to VisionPage.importScriptHeader("js/numass-web.js", resourceLocation, actualPath)
|
"numassWeb" to VisionPage.importScriptHeader("js/numass-web.js", resourceLocation, actualPath)
|
||||||
|
@ -7,7 +7,9 @@ plugins {
|
|||||||
val dataforgeVersion: String by rootProject.extra
|
val dataforgeVersion: String by rootProject.extra
|
||||||
val kmathVersion: String by rootProject.extra
|
val kmathVersion: String by rootProject.extra
|
||||||
|
|
||||||
kotlin.sourceSets {
|
kscience{
|
||||||
|
jvm()
|
||||||
|
js()
|
||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
api("space.kscience:dataforge-context:$dataforgeVersion")
|
api("space.kscience:dataforge-context:$dataforgeVersion")
|
||||||
@ -15,7 +17,10 @@ kotlin.sourceSets {
|
|||||||
api("space.kscience:kmath-functions:$kmathVersion")
|
api("space.kscience:kmath-functions:$kmathVersion")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jvmMain {
|
}
|
||||||
|
|
||||||
|
kotlin.sourceSets{
|
||||||
|
getByName("jvmMain"){
|
||||||
dependencies {
|
dependencies {
|
||||||
api("space.kscience:kmath-commons:$kmathVersion")
|
api("space.kscience:kmath-commons:$kmathVersion")
|
||||||
api("ch.qos.logback:logback-classic:1.2.3")
|
api("ch.qos.logback:logback-classic:1.2.3")
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
package ru.inr.mass.models
|
package ru.inr.mass.models
|
||||||
|
|
||||||
|
import space.kscience.kmath.UnstableKMathAPI
|
||||||
import space.kscience.kmath.data.ColumnarData
|
import space.kscience.kmath.data.ColumnarData
|
||||||
import space.kscience.kmath.expressions.Symbol
|
import space.kscience.kmath.expressions.Symbol
|
||||||
import space.kscience.kmath.expressions.symbol
|
import space.kscience.kmath.expressions.symbol
|
||||||
import space.kscience.kmath.misc.UnstableKMathAPI
|
|
||||||
import space.kscience.kmath.structures.Buffer
|
import space.kscience.kmath.structures.Buffer
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,8 +32,8 @@ public class NBkgSpectrum(public val source: Spectrum) : DifferentiableSpectrum
|
|||||||
override fun derivativeOrNull(symbols: List<Symbol>): Spectrum? = when {
|
override fun derivativeOrNull(symbols: List<Symbol>): Spectrum? = when {
|
||||||
symbols.isEmpty() -> this
|
symbols.isEmpty() -> this
|
||||||
symbols.size == 1 -> when (symbols.first()) {
|
symbols.size == 1 -> when (symbols.first()) {
|
||||||
norm -> Spectrum { x, arguments -> source(x, arguments) + (arguments[bkg] ?: 0.0) }
|
norm -> Spectrum { x, arguments -> source(x, arguments) }
|
||||||
bkg -> Spectrum { x, arguments -> (arguments[norm] ?: 1.0) * source(x, arguments) }
|
bkg -> Spectrum { _, _ -> 1.0 }
|
||||||
else -> (source as? DifferentiableSpectrum)?.derivativeOrNull(symbols)?.let { NBkgSpectrum(it) }
|
else -> (source as? DifferentiableSpectrum)?.derivativeOrNull(symbols)?.let { NBkgSpectrum(it) }
|
||||||
}
|
}
|
||||||
else -> null
|
else -> null
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
* To change this template file, choose Tools | Templates
|
* To change this template file, choose Tools | Templates
|
||||||
* and open the template in the editor.
|
* and open the template in the editor.
|
||||||
*/
|
*/
|
||||||
|
@file:Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
|
||||||
|
|
||||||
package ru.inr.mass.models
|
package ru.inr.mass.models
|
||||||
|
|
||||||
import space.kscience.kmath.expressions.Symbol
|
import space.kscience.kmath.expressions.Symbol
|
||||||
|
@ -12,10 +12,13 @@ import kotlin.math.sqrt
|
|||||||
/**
|
/**
|
||||||
* @author [Alexander Nozik](mailto:altavir@gmail.com)
|
* @author [Alexander Nozik](mailto:altavir@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
|
||||||
public class NumassResolution(
|
public class NumassResolution(
|
||||||
public val resA: Double = 8.3e-5,
|
public val resA: Double = 1.7e-4,
|
||||||
public val resB: Double = 0.0,
|
public val resB: Double = 0.0,
|
||||||
public val tailFunction: (Double, Double) -> Double = { _, _ -> 1.0 },
|
// Recent formula for adiabacity
|
||||||
|
public val tailFunction: (Double, Double) -> Double = { e, u -> -1.75559e-13 * (e - u) * (e - u) * (e - u) - 5.97479e-11 * (e - u) * (e - u) + 3.26473e-7 * (e - u) + 1.0 },
|
||||||
) : DifferentiableKernel {
|
) : DifferentiableKernel {
|
||||||
|
|
||||||
// private val tailFunction: Kernel = when {
|
// private val tailFunction: Kernel = when {
|
||||||
@ -43,12 +46,12 @@ public class NumassResolution(
|
|||||||
// else -> ResolutionFunction.getConstantTail()
|
// else -> ResolutionFunction.getConstantTail()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
private fun getValueFast(E: Double, U: Double): Double {
|
private fun getValueFast(e: Double, u: Double): Double {
|
||||||
val delta = resA * E
|
val delta = resA * e
|
||||||
return when {
|
return when {
|
||||||
E - U < 0 -> 0.0
|
e - u < 0 -> 0.0
|
||||||
E - U > delta -> tailFunction(E, U)
|
e - u > delta -> tailFunction(e, u)
|
||||||
else -> (E - U) / delta
|
else -> (e - u) / delta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,15 +60,15 @@ public class NumassResolution(
|
|||||||
override val x: Symbol get() = e
|
override val x: Symbol get() = e
|
||||||
override val y: Symbol get() = u
|
override val y: Symbol get() = u
|
||||||
|
|
||||||
override fun invoke(E: Double, U: Double, arguments: Map<Symbol, Double>): Double {
|
override fun invoke(e: Double, u: Double, arguments: Map<Symbol, Double>): Double {
|
||||||
if (resB <= 0) {
|
if (resB <= 0) {
|
||||||
return this.getValueFast(E, U)
|
return this.getValueFast(e, u)
|
||||||
}
|
}
|
||||||
val delta = resA * E
|
val delta = resA * e
|
||||||
return when {
|
return when {
|
||||||
E - U < 0 -> 0.0
|
e - u < 0 -> 0.0
|
||||||
E - U > delta -> tailFunction(E, U)
|
e - u > delta -> tailFunction(e, u)
|
||||||
else -> (1 - sqrt(1 - (E - U) / E * resB)) / (1 - sqrt(1 - resA * resB))
|
else -> (1 - sqrt(1 - (e - u) / e * resB)) / (1 - sqrt(1 - resA * resB))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import kotlin.math.*
|
|||||||
* @author [Alexander Nozik](mailto:altavir@gmail.com)
|
* @author [Alexander Nozik](mailto:altavir@gmail.com)
|
||||||
*/
|
*/
|
||||||
public class NumassTransmission(
|
public class NumassTransmission(
|
||||||
public val trapFunc: Kernel = defaultTrapping,
|
public val trapFunc: Kernel = trapFunction,
|
||||||
// private val adjustX: Boolean = false,
|
// private val adjustX: Boolean = false,
|
||||||
) : DifferentiableKernel {
|
) : DifferentiableKernel {
|
||||||
// private val trapFunc: Kernel = if (meta.hasValue("trapping")) {
|
// private val trapFunc: Kernel = if (meta.hasValue("trapping")) {
|
||||||
@ -54,8 +54,10 @@ public class NumassTransmission(
|
|||||||
}
|
}
|
||||||
sum
|
sum
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,6 +65,7 @@ public class NumassTransmission(
|
|||||||
// loss part
|
// loss part
|
||||||
val thickness = arguments[thickness] ?: 0.0
|
val thickness = arguments[thickness] ?: 0.0
|
||||||
val loss = getTotalLossValue(thickness, ei, ef)
|
val loss = getTotalLossValue(thickness, ei, ef)
|
||||||
|
//val loss = 0.0
|
||||||
// double loss;
|
// double loss;
|
||||||
//
|
//
|
||||||
// if(eIn-eOut >= 300){
|
// if(eIn-eOut >= 300){
|
||||||
@ -76,7 +79,9 @@ public class NumassTransmission(
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
//trapping part
|
//trapping part
|
||||||
|
//
|
||||||
val trap = (arguments[trap] ?: 1.0) * trapFunc(ei, ef, arguments)
|
val trap = (arguments[trap] ?: 1.0) * trapFunc(ei, ef, arguments)
|
||||||
|
//val trap = 0.0
|
||||||
return loss + trap
|
return loss + trap
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +91,7 @@ public class NumassTransmission(
|
|||||||
|
|
||||||
private val cache = HashMap<Int, Function1D<Double>>()
|
private val cache = HashMap<Int, Function1D<Double>>()
|
||||||
|
|
||||||
private const val ION_POTENTIAL = 15.4//eV
|
private const val ION_POTENTIAL = 13.6//eV
|
||||||
|
|
||||||
|
|
||||||
private fun getX(arguments: Map<Symbol, Double>, eIn: Double, adjustX: Boolean = false): Double {
|
private fun getX(arguments: Map<Symbol, Double>, eIn: Double, adjustX: Boolean = false): Double {
|
||||||
@ -131,6 +136,7 @@ public class NumassTransmission(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getCachedSpectrum(order: Int): Function1D<Double> {
|
private fun getCachedSpectrum(order: Int): Function1D<Double> {
|
||||||
|
//println("-------------------ORDER $order ------------------------")
|
||||||
return when {
|
return when {
|
||||||
order <= 0 -> error("Non-positive loss cache order")
|
order <= 0 -> error("Non-positive loss cache order")
|
||||||
order == 1 -> singleScatterFunction
|
order == 1 -> singleScatterFunction
|
||||||
@ -274,13 +280,13 @@ public class NumassTransmission(
|
|||||||
* Значение полной производной функции потерь с учетом всех неисчезающих
|
* Значение полной производной функции потерь с учетом всех неисчезающих
|
||||||
* порядков
|
* порядков
|
||||||
*
|
*
|
||||||
* @param X
|
* @param thickness
|
||||||
* @param eIn
|
* @param eIn
|
||||||
* @param eOut
|
* @param eOut
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private fun getTotalLossDeriv(X: Double, eIn: Double, eOut: Double): Double {
|
private fun getTotalLossDeriv(thickness: Double, eIn: Double, eOut: Double): Double {
|
||||||
val probs = getLossProbDerivs(X)
|
val probs = getLossProbDerivs(thickness)
|
||||||
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
for (i in 1 until probs.size) {
|
for (i in 1 until probs.size) {
|
||||||
@ -331,6 +337,7 @@ public class NumassTransmission(
|
|||||||
val z = eps - pos1
|
val z = eps - pos1
|
||||||
A1 * exp(-2.0 * z * z / w1 / w1)
|
A1 * exp(-2.0 * z * z / w1 / w1)
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val z = 4.0 * (eps - pos2) * (eps - pos2)
|
val z = 4.0 * (eps - pos2) * (eps - pos2)
|
||||||
A2 / (1 + z / w2 / w2)
|
A2 / (1 + z / w2 / w2)
|
||||||
@ -399,8 +406,8 @@ public class NumassTransmission(
|
|||||||
// return getSingleScatterFunction(exPos, ionPos, exW, ionW, exIonRatio)
|
// return getSingleScatterFunction(exPos, ionPos, exW, ionW, exIonRatio)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public val trapFunction: (Double, Double) -> Double = { Ei: Double, Ef: Double ->
|
public val trapFunction: Kernel = Kernel { ei: Double, ef: Double, _ ->
|
||||||
val eps = Ei - Ef
|
val eps = ei - ef
|
||||||
if (eps > 10) {
|
if (eps > 10) {
|
||||||
1.86e-04 * exp(-eps / 25.0) + 5.5e-05
|
1.86e-04 * exp(-eps / 25.0) + 5.5e-05
|
||||||
} else {
|
} else {
|
||||||
|
@ -2,6 +2,7 @@ plugins {
|
|||||||
id("space.kscience.gradle.jvm")
|
id("space.kscience.gradle.jvm")
|
||||||
id("com.github.johnrengelman.shadow") version "7.1.2"
|
id("com.github.johnrengelman.shadow") version "7.1.2"
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
|
application
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
@ -9,7 +10,7 @@ kotlin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val dataforgeVersion: String by rootProject.extra
|
val dataforgeVersion: String by rootProject.extra
|
||||||
val visionForgeVersion: String by rootProject.extra
|
val plotlyKtVersion = "0.6.0"
|
||||||
val kmathVersion: String by rootProject.extra
|
val kmathVersion: String by rootProject.extra
|
||||||
val tablesVersion: String by rootProject.extra
|
val tablesVersion: String by rootProject.extra
|
||||||
|
|
||||||
@ -21,9 +22,15 @@ dependencies {
|
|||||||
|
|
||||||
implementation("space.kscience:kmath-jupyter:$kmathVersion")
|
implementation("space.kscience:kmath-jupyter:$kmathVersion")
|
||||||
implementation("space.kscience:tables-kt:$tablesVersion")
|
implementation("space.kscience:tables-kt:$tablesVersion")
|
||||||
implementation("space.kscience:visionforge-plotly:$visionForgeVersion")
|
implementation("space.kscience:plotlykt-core:$plotlyKtVersion")
|
||||||
|
|
||||||
|
implementation("com.github.ajalt.clikt:clikt:4.2.1")
|
||||||
}
|
}
|
||||||
|
|
||||||
kscience{
|
kscience{
|
||||||
jupyterLibrary("ru.inr.mass.notebook.NumassJupyter")
|
jupyterLibrary("ru.inr.mass.notebook.NumassJupyter")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//application {
|
||||||
|
// mainClass.set("ru.inr.mass.scripts.Get_spectrumKt")
|
||||||
|
//}
|
196
numass-workspace/src/main/kotlin/ru/inr/mass/scripts/fit.kt
Normal file
196
numass-workspace/src/main/kotlin/ru/inr/mass/scripts/fit.kt
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
package ru.inr.mass.scripts
|
||||||
|
|
||||||
|
import com.github.ajalt.clikt.core.CliktCommand
|
||||||
|
import com.github.ajalt.clikt.core.context
|
||||||
|
import com.github.ajalt.clikt.output.MordantHelpFormatter
|
||||||
|
import com.github.ajalt.clikt.parameters.arguments.argument
|
||||||
|
import com.github.ajalt.clikt.parameters.arguments.help
|
||||||
|
import com.github.ajalt.clikt.parameters.options.default
|
||||||
|
import com.github.ajalt.clikt.parameters.options.help
|
||||||
|
import com.github.ajalt.clikt.parameters.options.option
|
||||||
|
import com.github.ajalt.clikt.parameters.options.prompt
|
||||||
|
import com.github.ajalt.clikt.parameters.types.double
|
||||||
|
import com.github.ajalt.clikt.parameters.types.int
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import ru.inr.mass.models.*
|
||||||
|
import ru.inr.mass.workspace.buffer
|
||||||
|
import ru.inr.mass.workspace.fitWith
|
||||||
|
import space.kscience.kmath.UnstableKMathAPI
|
||||||
|
import space.kscience.kmath.data.XYColumnarData
|
||||||
|
import space.kscience.kmath.data.XYErrorColumnarData
|
||||||
|
import space.kscience.kmath.data.indices
|
||||||
|
import space.kscience.kmath.expressions.Symbol
|
||||||
|
import space.kscience.kmath.expressions.derivative
|
||||||
|
import space.kscience.kmath.operations.asSequence
|
||||||
|
import space.kscience.kmath.optimization.*
|
||||||
|
import space.kscience.kmath.real.step
|
||||||
|
import space.kscience.kmath.structures.asBuffer
|
||||||
|
import space.kscience.plotly.*
|
||||||
|
import space.kscience.plotly.models.ScatterMode
|
||||||
|
import java.io.File
|
||||||
|
import kotlin.math.pow
|
||||||
|
|
||||||
|
@OptIn(UnstableKMathAPI::class)
|
||||||
|
fun parse(filename: String): XYErrorColumnarData<Double, Double, Double> {
|
||||||
|
val x: MutableList<Double> = mutableListOf()
|
||||||
|
val y: MutableList<Double> = mutableListOf()
|
||||||
|
val errors: MutableList<Double> = mutableListOf()
|
||||||
|
|
||||||
|
File(filename).forEachLine {
|
||||||
|
val array = it.split("\t").map { it.toDouble() }
|
||||||
|
x.add(array[0])
|
||||||
|
y.add(array[1])
|
||||||
|
errors.add(array[2])
|
||||||
|
//errors.add(array[1] / 100)
|
||||||
|
}
|
||||||
|
return XYErrorColumnarData.of(
|
||||||
|
x.asBuffer(),
|
||||||
|
y.asBuffer(),
|
||||||
|
errors.map { it }.asBuffer()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
class Args : CliktCommand() {
|
||||||
|
|
||||||
|
init {
|
||||||
|
context {
|
||||||
|
helpFormatter = { MordantHelpFormatter(it, showDefaultValues = true) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val spectrum: String by argument().help("path to spectrum TSV file")
|
||||||
|
|
||||||
|
val norm: Double by option().double().default(8.311751921319484E8).help("NBkgSpectrum.norm")
|
||||||
|
val bkg: Double by option().double().default(1612.626961212948).help("NBkgSpectrum.bkg")
|
||||||
|
|
||||||
|
val mnu2: Double by option().double().default(0.0).help("NumassBeta.mnu2")
|
||||||
|
val e0: Double by option().double().default(18572.0).help("NumassBeta.e0")
|
||||||
|
val msterile2: Double by option().double().default(0.0.pow(2)).help("NumassBeta.msterile2")
|
||||||
|
val u2: Double by option().double().default(1e-2).help("NumassBeta.u2")
|
||||||
|
|
||||||
|
val thickness: Double by option().double().default(0.3).help("NumassTransmission.thickness")
|
||||||
|
val trap: Double by option().double().default(1.0).help("NumassTransmission.trap")
|
||||||
|
|
||||||
|
@UnstableKMathAPI
|
||||||
|
override fun run() {
|
||||||
|
val fitParams: Map<Symbol, Double> = mapOf(
|
||||||
|
NBkgSpectrum.norm to norm,
|
||||||
|
NBkgSpectrum.bkg to bkg,
|
||||||
|
NumassBeta.mnu2 to mnu2,
|
||||||
|
NumassBeta.e0 to e0,
|
||||||
|
NumassBeta.msterile2 to msterile2,
|
||||||
|
NumassBeta.u2 to u2,
|
||||||
|
NumassTransmission.thickness to thickness,
|
||||||
|
NumassTransmission.trap to trap
|
||||||
|
)
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
process(spectrum, fitParams)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun main(args: Array<String>) = Args().main(args)
|
||||||
|
|
||||||
|
suspend fun fitNumassSpectrum(data: XYErrorColumnarData<Double, Double, Double>, initial: Map<Symbol, Double>): XYFit {
|
||||||
|
val spectrum: NBkgSpectrum = SterileNeutrinoSpectrum(
|
||||||
|
// fss = FSS.default,
|
||||||
|
transmission = NumassTransmission(NumassTransmission.trapFunction),
|
||||||
|
// resolution = NumassResolution(1.7e-4)
|
||||||
|
).withNBkg()
|
||||||
|
|
||||||
|
return data.fitWith(
|
||||||
|
optimizer = QowOptimizer,
|
||||||
|
modelExpression = spectrum,
|
||||||
|
startingPoint = initial,
|
||||||
|
OptimizationParameters(NumassBeta.e0, NBkgSpectrum.norm, NBkgSpectrum.bkg,
|
||||||
|
// NumassTransmission.trap
|
||||||
|
),
|
||||||
|
OptimizationIterations(20)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@UnstableKMathAPI
|
||||||
|
suspend fun process(spectrumFile: String, fitParams: Map<Symbol, Double>) {
|
||||||
|
|
||||||
|
val data = parse(spectrumFile)
|
||||||
|
|
||||||
|
val spectrum: NBkgSpectrum = SterileNeutrinoSpectrum(
|
||||||
|
// fss = FSS.default,
|
||||||
|
transmission = NumassTransmission(NumassTransmission.trapFunction),
|
||||||
|
// resolution = NumassResolution(1.7e-4)
|
||||||
|
).withNBkg()
|
||||||
|
|
||||||
|
val fit = fitNumassSpectrum(data, fitParams)
|
||||||
|
|
||||||
|
println(fit.resultPoint)
|
||||||
|
|
||||||
|
Plotly.page {
|
||||||
|
plot {
|
||||||
|
|
||||||
|
scatter {
|
||||||
|
name = "Data"
|
||||||
|
mode = ScatterMode.markers
|
||||||
|
x.buffer = data.x
|
||||||
|
y.buffer = data.y
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
scatter {
|
||||||
|
name = "Initial"
|
||||||
|
mode = ScatterMode.lines
|
||||||
|
x.buffer = data.x
|
||||||
|
y.numbers = x.doubles.map { spectrum(it, fitParams + fit.resultPoint) }
|
||||||
|
File(spectrumFile + "-fit").printWriter().use { out ->
|
||||||
|
out.println("U_sp\tcounts\tresidials")
|
||||||
|
|
||||||
|
data.indices.map{
|
||||||
|
val value = spectrum(data.x[it], fitParams + fit.resultPoint)
|
||||||
|
val dif = data.y[it] - value
|
||||||
|
out.println("${data.x[it]}\t${data.y[it]}\t${dif/data.yErr[it]}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scatter {
|
||||||
|
name = "Fit"
|
||||||
|
mode = ScatterMode.lines
|
||||||
|
x.buffer = 12000.0..18600.0 step 10.0
|
||||||
|
y.numbers = x.doubles.map { spectrum(it, fitParams + fit.resultPoint) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plot{
|
||||||
|
scatter {
|
||||||
|
name = "Residuals"
|
||||||
|
mode = ScatterMode.markers
|
||||||
|
x.buffer = data.x
|
||||||
|
y.numbers = data.indices.map{
|
||||||
|
val value = spectrum(data.x[it], fitParams + fit.resultPoint)
|
||||||
|
val dif = data.y[it] - value
|
||||||
|
dif/data.yErr[it]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plot{
|
||||||
|
histogram {
|
||||||
|
x.numbers = data.indices.map{
|
||||||
|
val value = spectrum(data.x[it], fitParams + fit.resultPoint)
|
||||||
|
val dif = data.y[it] - value
|
||||||
|
dif/data.yErr[it]
|
||||||
|
}
|
||||||
|
name = "Res histo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plot {
|
||||||
|
scatter {
|
||||||
|
name = "Residuals_lines"
|
||||||
|
mode = ScatterMode.lines
|
||||||
|
x.buffer = data.x
|
||||||
|
y.numbers = data.indices.map {
|
||||||
|
val value = spectrum(data.x[it], fitParams + fit.resultPoint)
|
||||||
|
val dif = data.y[it] - value
|
||||||
|
dif / data.yErr[it]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.makeFile()
|
||||||
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
package ru.inr.mass.scripts
|
||||||
|
|
||||||
|
import com.github.ajalt.clikt.core.CliktCommand
|
||||||
|
import com.github.ajalt.clikt.core.context
|
||||||
|
import com.github.ajalt.clikt.output.MordantHelpFormatter
|
||||||
|
import com.github.ajalt.clikt.parameters.arguments.argument
|
||||||
|
import com.github.ajalt.clikt.parameters.arguments.help
|
||||||
|
import com.github.ajalt.clikt.parameters.options.default
|
||||||
|
import com.github.ajalt.clikt.parameters.options.help
|
||||||
|
import com.github.ajalt.clikt.parameters.options.option
|
||||||
|
import com.github.ajalt.clikt.parameters.types.double
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import ru.inr.mass.models.*
|
||||||
|
import space.kscience.kmath.data.XYErrorColumnarData
|
||||||
|
import space.kscience.kmath.UnstableKMathAPI
|
||||||
|
import space.kscience.kmath.expressions.Symbol
|
||||||
|
import space.kscience.kmath.operations.toTypedArray
|
||||||
|
import space.kscience.kmath.real.plus
|
||||||
|
import space.kscience.kmath.real.step
|
||||||
|
import space.kscience.plotly.models.HoverMode
|
||||||
|
import kotlin.math.pow
|
||||||
|
|
||||||
|
private class CalcSpectrum : CliktCommand() {
|
||||||
|
|
||||||
|
init {
|
||||||
|
context {
|
||||||
|
helpFormatter = { MordantHelpFormatter(it, showDefaultValues = true) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val spectrum: String by argument().help("path to spectrum TSV file")
|
||||||
|
|
||||||
|
val norm: Double by option().double().default(8.84e8).help("NBkgSpectrum.norm")
|
||||||
|
val bkg: Double by option().double().default(-1.702).help("NBkgSpectrum.bkg")
|
||||||
|
|
||||||
|
val mnu2: Double by option().double().default(0.0).help("NumassBeta.mnu2")
|
||||||
|
val e0: Double by option().double().default(18572.0).help("NumassBeta.e0")
|
||||||
|
val msterile2: Double by option().double().default(0.0.pow(2)).help("NumassBeta.msterile2")
|
||||||
|
val u2: Double by option().double().default(1e-2).help("NumassBeta.u2")
|
||||||
|
|
||||||
|
val thickness: Double by option().double().default(0.3).help("NumassTransmission.thickness")
|
||||||
|
val trap: Double by option().double().default(1.0).help("NumassTransmission.trap")
|
||||||
|
|
||||||
|
@UnstableKMathAPI
|
||||||
|
override fun run() {
|
||||||
|
val fitParams: Map<Symbol, Double> = mapOf(
|
||||||
|
NBkgSpectrum.norm to norm,
|
||||||
|
NBkgSpectrum.bkg to bkg,
|
||||||
|
NumassBeta.mnu2 to mnu2,
|
||||||
|
NumassBeta.e0 to e0,
|
||||||
|
NumassBeta.msterile2 to msterile2,
|
||||||
|
NumassBeta.u2 to u2,
|
||||||
|
NumassTransmission.thickness to thickness,
|
||||||
|
NumassTransmission.trap to trap
|
||||||
|
)
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
calcSpectrum(spectrum, fitParams)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun main(args: Array<String>) = CalcSpectrum().main(args)
|
||||||
|
|
||||||
|
suspend fun calcSpectrum(spectrumFile: String, fitParams: Map<Symbol, Double>) {
|
||||||
|
|
||||||
|
val data = parse(spectrumFile)
|
||||||
|
|
||||||
|
val range = data.x.toTypedArray();
|
||||||
|
|
||||||
|
runBlocking(Dispatchers.Default) {
|
||||||
|
|
||||||
|
val handles = range.map {
|
||||||
|
|
||||||
|
async(Dispatchers.Default) {
|
||||||
|
val spectrum: NBkgSpectrum = SterileNeutrinoSpectrum(
|
||||||
|
transmission = NumassTransmission(NumassTransmission.trapFunction),
|
||||||
|
).withNBkg()
|
||||||
|
|
||||||
|
val res = spectrum.invoke(it, fitParams)
|
||||||
|
return@async res
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val out = handles.map { it.await() }
|
||||||
|
println(out.joinToString("\n"))
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package ru.inr.mass.scripts
|
||||||
|
|
||||||
|
//import com.google.cloud.storage.contrib.nio.CloudStorageFileSystem
|
||||||
|
//import ru.inr.mass.data.proto.NumassDirectorySet
|
||||||
|
//import ru.inr.mass.workspace.Numass
|
||||||
|
//import space.kscience.dataforge.data.DataTree
|
||||||
|
//
|
||||||
|
//// https://storage.cloud.google.com/numass-data/2020_12/Adiabaticity/16/set_3/p10(10s)(HV1%3D13750)
|
||||||
|
//
|
||||||
|
//suspend fun main() {
|
||||||
|
// CloudStorageFileSystem.forBucket("numass-data").use { fs ->
|
||||||
|
// val repo: DataTree<NumassDirectorySet> = Numass.readRepository(fs.getPath("2020_12/Adiabaticity"))
|
||||||
|
// repo.items().forEach{ (key,item)->
|
||||||
|
// println(key)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
@ -18,7 +18,6 @@ import space.kscience.dataforge.workspace.WorkspacePlugin
|
|||||||
import space.kscience.dataforge.workspace.pipeFrom
|
import space.kscience.dataforge.workspace.pipeFrom
|
||||||
import space.kscience.dataforge.workspace.task
|
import space.kscience.dataforge.workspace.task
|
||||||
import space.kscience.tables.Table
|
import space.kscience.tables.Table
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
class NumassWorkspacePlugin : WorkspacePlugin() {
|
class NumassWorkspacePlugin : WorkspacePlugin() {
|
||||||
override val tag: PluginTag get() = Companion.tag
|
override val tag: PluginTag get() = Companion.tag
|
||||||
@ -128,7 +127,6 @@ class NumassWorkspacePlugin : WorkspacePlugin() {
|
|||||||
|
|
||||||
companion object : PluginFactory<NumassWorkspacePlugin> {
|
companion object : PluginFactory<NumassWorkspacePlugin> {
|
||||||
override val tag: PluginTag = PluginTag("numass", "ru.mipt.npm")
|
override val tag: PluginTag = PluginTag("numass", "ru.mipt.npm")
|
||||||
override val type: KClass<out NumassWorkspacePlugin> = NumassWorkspacePlugin::class
|
|
||||||
override fun build(context: Context, meta: Meta): NumassWorkspacePlugin = NumassWorkspacePlugin()
|
override fun build(context: Context, meta: Meta): NumassWorkspacePlugin = NumassWorkspacePlugin()
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
@file:OptIn(UnstableKMathAPI::class)
|
||||||
|
|
||||||
|
package ru.inr.mass.workspace
|
||||||
|
|
||||||
|
import ru.inr.mass.models.Spectrum
|
||||||
|
import space.kscience.kmath.UnstableKMathAPI
|
||||||
|
import space.kscience.kmath.data.XYColumnarData
|
||||||
|
import space.kscience.kmath.data.XYErrorColumnarData
|
||||||
|
import space.kscience.kmath.expressions.DifferentiableExpression
|
||||||
|
import space.kscience.kmath.expressions.Symbol
|
||||||
|
import space.kscience.kmath.misc.FeatureSet
|
||||||
|
import space.kscience.kmath.misc.Loggable
|
||||||
|
import space.kscience.kmath.optimization.*
|
||||||
|
import space.kscience.kmath.random.RandomGenerator
|
||||||
|
import space.kscience.kmath.samplers.PoissonSampler
|
||||||
|
import space.kscience.kmath.stat.next
|
||||||
|
import space.kscience.kmath.structures.asBuffer
|
||||||
|
import kotlin.math.sqrt
|
||||||
|
|
||||||
|
public suspend fun XYColumnarData<Double, Double, Double>.fitWith(
|
||||||
|
optimizer: Optimizer<Double, XYFit>,
|
||||||
|
modelExpression: DifferentiableExpression<Double>,
|
||||||
|
startingPoint: Map<Symbol, Double>,
|
||||||
|
vararg features: OptimizationFeature = emptyArray(),
|
||||||
|
xSymbol: Symbol = Symbol.x,
|
||||||
|
pointToCurveDistance: PointToCurveDistance = PointToCurveDistance.byY,
|
||||||
|
pointWeight: PointWeight = PointWeight.byYSigma,
|
||||||
|
): XYFit {
|
||||||
|
var actualFeatures = FeatureSet.of(*features, OptimizationStartPoint(startingPoint))
|
||||||
|
|
||||||
|
if (actualFeatures.getFeature<OptimizationLog>() == null) {
|
||||||
|
actualFeatures = actualFeatures.with(OptimizationLog(Loggable.console))
|
||||||
|
}
|
||||||
|
val problem = XYFit(
|
||||||
|
this,
|
||||||
|
modelExpression,
|
||||||
|
actualFeatures,
|
||||||
|
pointToCurveDistance,
|
||||||
|
pointWeight,
|
||||||
|
xSymbol
|
||||||
|
)
|
||||||
|
return optimizer.optimize(problem)
|
||||||
|
}
|
||||||
|
|
||||||
|
public suspend fun Spectrum.generate(
|
||||||
|
strategy: Map<Double, Double>,
|
||||||
|
arguments: Map<Symbol, Double>,
|
||||||
|
generator: RandomGenerator = RandomGenerator.default,
|
||||||
|
): XYErrorColumnarData<Double, Double, Double> {
|
||||||
|
val xs = mutableListOf<Double>()
|
||||||
|
val ys = mutableListOf<Double>()
|
||||||
|
val errors = mutableListOf<Double>()
|
||||||
|
|
||||||
|
strategy.forEach { (x, time) ->
|
||||||
|
xs.add(x)
|
||||||
|
val mu = invoke(x, arguments) * time
|
||||||
|
val y = PoissonSampler(mu).next(generator) / time
|
||||||
|
val error = sqrt(mu) / time
|
||||||
|
ys.add(y)
|
||||||
|
errors.add(error)
|
||||||
|
}
|
||||||
|
return XYErrorColumnarData.of(
|
||||||
|
xs.toTypedArray().asBuffer(),
|
||||||
|
ys.toTypedArray().asBuffer(),
|
||||||
|
errors.toTypedArray().asBuffer()
|
||||||
|
)
|
||||||
|
}
|
@ -12,9 +12,9 @@ import ru.inr.mass.data.proto.HVData
|
|||||||
import ru.inr.mass.data.proto.NumassDirectorySet
|
import ru.inr.mass.data.proto.NumassDirectorySet
|
||||||
import space.kscience.dataforge.meta.asValue
|
import space.kscience.dataforge.meta.asValue
|
||||||
import space.kscience.dataforge.meta.double
|
import space.kscience.dataforge.meta.double
|
||||||
|
import space.kscience.kmath.UnstableKMathAPI
|
||||||
import space.kscience.kmath.domains.center
|
import space.kscience.kmath.domains.center
|
||||||
import space.kscience.kmath.histogram.Histogram1D
|
import space.kscience.kmath.histogram.Histogram1D
|
||||||
import space.kscience.kmath.misc.UnstableKMathAPI
|
|
||||||
import space.kscience.kmath.operations.asIterable
|
import space.kscience.kmath.operations.asIterable
|
||||||
import space.kscience.kmath.structures.Buffer
|
import space.kscience.kmath.structures.Buffer
|
||||||
import space.kscience.kmath.structures.DoubleBuffer
|
import space.kscience.kmath.structures.DoubleBuffer
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
rootProject.name = "numass"
|
rootProject.name = "numass"
|
||||||
|
|
||||||
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
||||||
enableFeaturePreview("VERSION_CATALOGS")
|
|
||||||
|
|
||||||
pluginManagement {
|
pluginManagement {
|
||||||
|
|
||||||
@ -15,6 +14,7 @@ pluginManagement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
|
id("org.jetbrains.compose").version(extra["compose.version"] as String)
|
||||||
id("space.kscience.gradle.project") version toolsVersion
|
id("space.kscience.gradle.project") version toolsVersion
|
||||||
id("space.kscience.gradle.mpp") version toolsVersion
|
id("space.kscience.gradle.mpp") version toolsVersion
|
||||||
id("space.kscience.gradle.jvm") version toolsVersion
|
id("space.kscience.gradle.jvm") version toolsVersion
|
||||||
|
Loading…
Reference in New Issue
Block a user