forked from kscience/visionforge
Port minimal simulation
This commit is contained in:
parent
1ebc9c5cda
commit
f88c184a61
@ -25,7 +25,7 @@ class MetaEditorDemo : View("Meta editor demo") {
|
|||||||
}
|
}
|
||||||
}.toConfig()
|
}.toConfig()
|
||||||
|
|
||||||
val descriptor = NodeDescriptor.build {
|
val descriptor = NodeDescriptor {
|
||||||
node("aNode") {
|
node("aNode") {
|
||||||
info = "A root demo node"
|
info = "A root demo node"
|
||||||
value("b") {
|
value("b") {
|
||||||
|
@ -8,9 +8,11 @@ import info.laht.threekt.geometries.PlaneBufferGeometry
|
|||||||
import info.laht.threekt.materials.MeshBasicMaterial
|
import info.laht.threekt.materials.MeshBasicMaterial
|
||||||
import info.laht.threekt.objects.Mesh
|
import info.laht.threekt.objects.Mesh
|
||||||
import info.laht.threekt.textures.Texture
|
import info.laht.threekt.textures.Texture
|
||||||
import org.w3c.dom.*
|
import org.w3c.dom.CanvasRenderingContext2D
|
||||||
|
import org.w3c.dom.CanvasTextBaseline
|
||||||
|
import org.w3c.dom.HTMLCanvasElement
|
||||||
|
import org.w3c.dom.MIDDLE
|
||||||
import kotlin.browser.document
|
import kotlin.browser.document
|
||||||
import kotlin.math.PI
|
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,11 +26,13 @@ object ThreeLabelFactory : ThreeFactory<Label3D> {
|
|||||||
val context = canvas.getContext("2d") as CanvasRenderingContext2D
|
val context = canvas.getContext("2d") as CanvasRenderingContext2D
|
||||||
context.font = "Bold ${obj.fontSize}pt ${obj.fontFamily}"
|
context.font = "Bold ${obj.fontSize}pt ${obj.fontFamily}"
|
||||||
context.fillStyle = obj.color ?: "black"
|
context.fillStyle = obj.color ?: "black"
|
||||||
context.textAlign = CanvasTextAlign.CENTER
|
//context.textAlign = CanvasTextAlign.CENTER
|
||||||
//context.textBaseline = CanvasTextBaseline.MIDDLE
|
context.textBaseline = CanvasTextBaseline.MIDDLE
|
||||||
val metrics = context.measureText(obj.text)
|
val metrics = context.measureText(obj.text)
|
||||||
|
//canvas.width = metrics.width.toInt()
|
||||||
|
|
||||||
context.fillText(obj.text, 0.5*metrics.width, 0.5*metrics.width)
|
|
||||||
|
context.fillText(obj.text, (canvas.width - metrics.width)/2, 0.5*canvas.height)
|
||||||
|
|
||||||
|
|
||||||
// canvas contents will be used for a texture
|
// canvas contents will be used for a texture
|
||||||
@ -46,8 +50,6 @@ object ThreeLabelFactory : ThreeFactory<Label3D> {
|
|||||||
material
|
material
|
||||||
)
|
)
|
||||||
|
|
||||||
//mesh.rotateX(PI)
|
|
||||||
|
|
||||||
mesh.updatePosition(obj)
|
mesh.updatePosition(obj)
|
||||||
|
|
||||||
return mesh
|
return mesh
|
||||||
|
@ -93,11 +93,22 @@ fun MetaItem<*>.color(): Color {
|
|||||||
|
|
||||||
fun Mesh.updateMaterial(obj: VisualObject) {
|
fun Mesh.updateMaterial(obj: VisualObject) {
|
||||||
val meta = obj.getProperty(Material3D.MATERIAL_KEY).node ?: EmptyMeta
|
val meta = obj.getProperty(Material3D.MATERIAL_KEY).node ?: EmptyMeta
|
||||||
material = MeshBasicMaterial().apply {
|
material = if(meta[Material3D.SPECULAR_COLOR]!= null){
|
||||||
|
MeshPhongMaterial().apply {
|
||||||
|
color = meta[Material3D.COLOR_KEY]?.color() ?: ThreeMaterials.DEFAULT_COLOR
|
||||||
|
specular = meta[Material3D.SPECULAR_COLOR]!!.color()
|
||||||
|
opacity = meta[Material3D.OPACITY_KEY]?.double ?: 1.0
|
||||||
|
transparent = opacity <= 0.0
|
||||||
|
wireframe = meta[Material3D.WIREFRAME_KEY].boolean ?: false
|
||||||
|
needsUpdate = true
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
MeshBasicMaterial().apply {
|
||||||
color = meta[Material3D.COLOR_KEY]?.color() ?: ThreeMaterials.DEFAULT_COLOR
|
color = meta[Material3D.COLOR_KEY]?.color() ?: ThreeMaterials.DEFAULT_COLOR
|
||||||
opacity = meta[Material3D.OPACITY_KEY]?.double ?: 1.0
|
opacity = meta[Material3D.OPACITY_KEY]?.double ?: 1.0
|
||||||
transparent = opacity < 1.0
|
transparent = opacity <= 0.0
|
||||||
wireframe = meta[Material3D.WIREFRAME_KEY].boolean ?: false
|
wireframe = meta[Material3D.WIREFRAME_KEY].boolean ?: false
|
||||||
needsUpdate = true
|
needsUpdate = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -14,7 +14,7 @@ import javafx.scene.paint.Color
|
|||||||
import org.fxyz3d.scene.Axes
|
import org.fxyz3d.scene.Axes
|
||||||
import tornadofx.*
|
import tornadofx.*
|
||||||
|
|
||||||
class FXCanvas3D(val plugin: FX3DPlugin, val spec: CanvasSpec) :
|
class FXCanvas3D(val plugin: FX3DPlugin, val spec: CanvasSpec = CanvasSpec.empty()) :
|
||||||
Fragment(), Renderer<VisualObject3D>, ContextAware {
|
Fragment(), Renderer<VisualObject3D>, ContextAware {
|
||||||
|
|
||||||
override val context: Context get() = plugin.context
|
override val context: Context get() = plugin.context
|
||||||
|
@ -11,6 +11,8 @@ group = "ru.mipt.npm"
|
|||||||
|
|
||||||
useSerialization()
|
useSerialization()
|
||||||
|
|
||||||
|
val ktor_version = "1.3.0-rc"
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
|
||||||
jvm {
|
jvm {
|
||||||
@ -28,15 +30,20 @@ kotlin {
|
|||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":dataforge-vis-spatial"))
|
implementation(project(":dataforge-vis-spatial"))
|
||||||
api(project(":dataforge-vis-spatial-gdml"))
|
}
|
||||||
|
}
|
||||||
|
jvmMain{
|
||||||
|
dependencies {
|
||||||
|
implementation("org.apache.commons:commons-math3:3.6.1")
|
||||||
|
implementation("io.ktor:ktor-server-cio:$ktor_version")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
application {
|
application {
|
||||||
mainClassName = "hep.dataforge.vis.spatial.demo.FXDemoAppKt"
|
mainClassName = "ru.mipt.npm.muon.monitor.MMDemoAppKt"
|
||||||
}
|
}
|
||||||
|
|
||||||
configure<JavaFXOptions> {
|
configure<JavaFXOptions> {
|
||||||
|
@ -1,14 +1,18 @@
|
|||||||
package ru.mipt.npm.muon.sim
|
@file:UseSerializers(Point3DSerializer::class)
|
||||||
|
package ru.mipt.npm.muon.monitor
|
||||||
|
|
||||||
|
import hep.dataforge.vis.spatial.Point3D
|
||||||
|
import hep.dataforge.vis.spatial.Point3DSerializer
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import ru.mipt.npm.muon.monitor.Line
|
import kotlinx.serialization.UseSerializers
|
||||||
|
|
||||||
|
typealias Track = List<Point3D>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by darksnake on 11-May-16.
|
*
|
||||||
*/
|
*/
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Event(val track: Line, val hits: Set<String>) {
|
data class Event(val track: Track?, val hits: Collection<String>) {
|
||||||
/**
|
/**
|
||||||
* The unique identity for given set of hits. One identity could correspond to different tracks
|
* The unique identity for given set of hits. One identity could correspond to different tracks
|
||||||
*/
|
*/
|
||||||
|
@ -2,13 +2,10 @@ package ru.mipt.npm.muon.monitor
|
|||||||
|
|
||||||
import hep.dataforge.vis.common.removeAll
|
import hep.dataforge.vis.common.removeAll
|
||||||
import hep.dataforge.vis.spatial.*
|
import hep.dataforge.vis.spatial.*
|
||||||
import ru.mipt.npm.muon.sim.Event
|
import ru.mipt.npm.muon.monitor.Monitor.CENTRAL_LAYER_Z
|
||||||
import ru.mipt.npm.muon.sim.Monitor
|
import ru.mipt.npm.muon.monitor.Monitor.LOWER_LAYER_Z
|
||||||
import ru.mipt.npm.muon.sim.Monitor.CENTRAL_LAYER_Z
|
import ru.mipt.npm.muon.monitor.Monitor.UPPER_LAYER_Z
|
||||||
import ru.mipt.npm.muon.sim.Monitor.LOWER_LAYER_Z
|
import kotlin.math.PI
|
||||||
import ru.mipt.npm.muon.sim.Monitor.UPPER_LAYER_Z
|
|
||||||
import ru.mipt.npm.muon.sim.SC1
|
|
||||||
import ru.mipt.npm.muon.sim.SC16
|
|
||||||
|
|
||||||
class Model {
|
class Model {
|
||||||
private val map = HashMap<String, VisualGroup3D>()
|
private val map = HashMap<String, VisualGroup3D>()
|
||||||
@ -16,11 +13,11 @@ class Model {
|
|||||||
|
|
||||||
private fun VisualGroup3D.pixel(pixel: SC1) {
|
private fun VisualGroup3D.pixel(pixel: SC1) {
|
||||||
val group = group(pixel.name) {
|
val group = group(pixel.name) {
|
||||||
box(Monitor.PIXEL_XY_SIZE, Monitor.PIXEL_Z_SIZE, Monitor.PIXEL_XY_SIZE){
|
position = Point3D(pixel.center.x, pixel.center.y, pixel.center.z)
|
||||||
position = Point3D(pixel.center.x, pixel.center.z,pixel.center.y)
|
box(pixel.xSize, pixel.ySize, pixel.zSize)
|
||||||
}
|
|
||||||
label(pixel.name) {
|
label(pixel.name) {
|
||||||
y = Monitor.PIXEL_Z_SIZE / 2
|
z = - Monitor.PIXEL_Z_SIZE / 2 - 5
|
||||||
|
rotationY = PI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
map[pixel.name] = group
|
map[pixel.name] = group
|
||||||
@ -37,6 +34,7 @@ class Model {
|
|||||||
var tracks: VisualGroup3D
|
var tracks: VisualGroup3D
|
||||||
|
|
||||||
val root: VisualGroup3D = VisualGroup3D().apply {
|
val root: VisualGroup3D = VisualGroup3D().apply {
|
||||||
|
rotationX = PI / 2
|
||||||
group("bottom") {
|
group("bottom") {
|
||||||
Monitor.detectors.filter { it.center.z == LOWER_LAYER_Z }.forEach {
|
Monitor.detectors.filter { it.center.z == LOWER_LAYER_Z }.forEach {
|
||||||
detector(it)
|
detector(it)
|
||||||
@ -71,6 +69,11 @@ class Model {
|
|||||||
|
|
||||||
fun showEvent(event: Event) {
|
fun showEvent(event: Event) {
|
||||||
events.add(event)
|
events.add(event)
|
||||||
highlight(event.id)
|
event.hits.forEach {
|
||||||
|
highlight(it)
|
||||||
|
}
|
||||||
|
event.track?.let {
|
||||||
|
tracks.polyline(*it.toTypedArray())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,14 +1,17 @@
|
|||||||
package ru.mipt.npm.muon.sim
|
package ru.mipt.npm.muon.monitor
|
||||||
|
|
||||||
import hep.dataforge.vis.spatial.Point3D
|
import hep.dataforge.vis.spatial.Point3D
|
||||||
import hep.dataforge.vis.spatial.plus
|
import hep.dataforge.vis.spatial.plus
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.PIXEL_XY_SIZE
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.PIXEL_Z_SIZE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A single pixel
|
* A single pixel
|
||||||
*/
|
*/
|
||||||
class SC1(
|
open class SC1(
|
||||||
val name: String,
|
val name: String,
|
||||||
val center: Point3D
|
val center: Point3D,
|
||||||
|
val xSize: Double = PIXEL_XY_SIZE, val ySize: Double = PIXEL_XY_SIZE, val zSize: Double = PIXEL_Z_SIZE
|
||||||
)
|
)
|
||||||
|
|
||||||
class SC16(
|
class SC16(
|
||||||
@ -109,55 +112,27 @@ class SC16(
|
|||||||
|
|
||||||
expect fun readResource(path: String): String
|
expect fun readResource(path: String): String
|
||||||
|
|
||||||
|
internal expect fun readMonitorConfig(): String
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* General geometry definitions
|
* General geometry definitions
|
||||||
* Created by darksnake on 09-May-16.
|
* Created by darksnake on 09-May-16.
|
||||||
*/
|
*/
|
||||||
object Monitor {
|
object Monitor {
|
||||||
|
|
||||||
const val GEOMETRY_TOLERANCE = 0.01;
|
const val GEOMETRY_TOLERANCE = 0.01
|
||||||
const val PIXEL_XY_SIZE = 122.0;
|
const val PIXEL_XY_SIZE = 122.0
|
||||||
const val PIXEL_XY_SPACING = 123.2;
|
const val PIXEL_XY_SPACING = 123.2
|
||||||
const val PIXEL_Z_SIZE = 30.0;
|
const val PIXEL_Z_SIZE = 30.0
|
||||||
const val CENTRAL_LAYER_Z = 0.0;
|
const val CENTRAL_LAYER_Z = 0.0
|
||||||
const val UPPER_LAYER_Z = 166.0;
|
const val UPPER_LAYER_Z = 166.0
|
||||||
const val LOWER_LAYER_Z = -180.0;
|
const val LOWER_LAYER_Z = -180.0
|
||||||
|
|
||||||
private val monitorConfig = """
|
|
||||||
--Place-|-SC16-|-TB-CHN-|-HB-CHN-|-X-coord-|-Y-coord-|-Z-coord-|-Theta-|-Phi
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
RT100 SC86 3 0 0 1000 0 0 270
|
|
||||||
RT100 SC87 6 1 0 500 0 0 270
|
|
||||||
RT100 SC88 8 2 0 0 0 0 270
|
|
||||||
RT100 SC91 9 3 500 1000 0 0 270
|
|
||||||
RT100 SC92 10 4 500 500 0 0 270
|
|
||||||
RT100 SC93 11 5 500 0 0 0 270
|
|
||||||
RT100 SC94 12 6 1000 1000 0 0 270
|
|
||||||
RT100 SC85 13 7 1000 500 0 0 270
|
|
||||||
RT100 SC96 15 8 1000 0 0 0 270
|
|
||||||
###
|
|
||||||
RT100 SC81 26 12 250 750 180 0 270
|
|
||||||
RT100 SC82 27 11 250 250 180 0 270
|
|
||||||
RT100 SC83 28 23 750 750 180 0 270
|
|
||||||
RT100 SC84 29 9 750 250 180 0 270
|
|
||||||
###
|
|
||||||
RT100 SC72 80 21 1000 0 346 0 270
|
|
||||||
RT100 SC73 79 20 1000 500 346 0 270
|
|
||||||
RT100 SC74 78 19 1000 1000 346 0 270
|
|
||||||
RT100 SC75 77 18 500 0 346 0 270
|
|
||||||
RT100 SC76 84 17 500 500 346 0 270
|
|
||||||
RT100 SC77 75 16 500 1000 346 0 270
|
|
||||||
RT100 SC78 74 15 0 0 346 0 270
|
|
||||||
RT100 SC79 73 14 0 500 346 0 270
|
|
||||||
RT100 SC80 72 13 0 1000 346 0 270
|
|
||||||
STOP
|
|
||||||
""".trimIndent()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build map for the whole monitor
|
* Build map for the whole monitor
|
||||||
*/
|
*/
|
||||||
val detectors: Collection<SC16> by lazy {
|
val detectors: Collection<SC16> by lazy {
|
||||||
monitorConfig.lineSequence().mapNotNull { line ->
|
readMonitorConfig().lineSequence().mapNotNull { line ->
|
||||||
if (line.startsWith(" ")) {
|
if (line.startsWith(" ")) {
|
||||||
val split = line.trim().split("\\s+".toRegex());
|
val split = line.trim().split("\\s+".toRegex());
|
||||||
val detectorName = split[1];
|
val detectorName = split[1];
|
||||||
@ -171,4 +146,6 @@ object Monitor {
|
|||||||
}.toList()
|
}.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val pixels: Collection<SC1> get() = detectors.flatMap { it.pixels }
|
||||||
|
|
||||||
}
|
}
|
@ -1,18 +0,0 @@
|
|||||||
@file:UseSerializers(Point3DSerializer::class)
|
|
||||||
package ru.mipt.npm.muon.monitor
|
|
||||||
|
|
||||||
import hep.dataforge.vis.spatial.Point3D
|
|
||||||
import hep.dataforge.vis.spatial.Point3DSerializer
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
import kotlinx.serialization.UseSerializers
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class Line(
|
|
||||||
val start: Point3D,
|
|
||||||
val direction: Point3D
|
|
||||||
)
|
|
||||||
|
|
||||||
data class Plane(
|
|
||||||
val normal: Point3D,
|
|
||||||
val offset: Number
|
|
||||||
)
|
|
@ -1,7 +1,40 @@
|
|||||||
package ru.mipt.npm.muon.sim
|
package ru.mipt.npm.muon.monitor
|
||||||
|
|
||||||
import hep.dataforge.js.requireJS
|
import hep.dataforge.js.requireJS
|
||||||
|
|
||||||
actual fun readResource(path: String): String {
|
actual fun readResource(path: String): String {
|
||||||
return requireJS(path) as String
|
return requireJS(path) as String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO replace by resource
|
||||||
|
internal actual fun readMonitorConfig(): String{
|
||||||
|
return """
|
||||||
|
--Place-|-SC16-|-TB-CHN-|-HB-CHN-|-X-coord-|-Y-coord-|-Z-coord-|-Theta-|-Phi
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
RT100 SC86 3 0 0 1000 0 0 270
|
||||||
|
RT100 SC87 6 1 0 500 0 0 270
|
||||||
|
RT100 SC88 8 2 0 0 0 0 270
|
||||||
|
RT100 SC91 9 3 500 1000 0 0 270
|
||||||
|
RT100 SC92 10 4 500 500 0 0 270
|
||||||
|
RT100 SC93 11 5 500 0 0 0 270
|
||||||
|
RT100 SC94 12 6 1000 1000 0 0 270
|
||||||
|
RT100 SC85 13 7 1000 500 0 0 270
|
||||||
|
RT100 SC96 15 8 1000 0 0 0 270
|
||||||
|
###
|
||||||
|
RT100 SC81 26 12 250 750 180 0 270
|
||||||
|
RT100 SC82 27 11 250 250 180 0 270
|
||||||
|
RT100 SC83 28 23 750 750 180 0 270
|
||||||
|
RT100 SC84 29 9 750 250 180 0 270
|
||||||
|
###
|
||||||
|
RT100 SC72 80 21 1000 0 346 0 270
|
||||||
|
RT100 SC73 79 20 1000 500 346 0 270
|
||||||
|
RT100 SC74 78 19 1000 1000 346 0 270
|
||||||
|
RT100 SC75 77 18 500 0 346 0 270
|
||||||
|
RT100 SC76 84 17 500 500 346 0 270
|
||||||
|
RT100 SC77 75 16 500 1000 346 0 270
|
||||||
|
RT100 SC78 74 15 0 0 346 0 270
|
||||||
|
RT100 SC79 73 14 0 500 346 0 270
|
||||||
|
RT100 SC80 72 13 0 1000 346 0 270
|
||||||
|
STOP
|
||||||
|
""".trimIndent()
|
||||||
|
}
|
@ -1,5 +1,10 @@
|
|||||||
package ru.mipt.npm.muon.sim
|
package ru.mipt.npm.muon.monitor
|
||||||
|
|
||||||
actual fun readResource(path: String): String {
|
actual fun readResource(path: String): String {
|
||||||
return ClassLoader.getSystemClassLoader().getResourceAsStream("map-RMM110.sc16").readAllBytes().contentToString()
|
return ClassLoader.getSystemClassLoader().getResourceAsStream(path)?.readAllBytes()?.contentToString()
|
||||||
|
?: error("Resource '$path' not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
internal actual fun readMonitorConfig(): String {
|
||||||
|
return readResource("map-RMM110.sc16")
|
||||||
}
|
}
|
@ -0,0 +1,121 @@
|
|||||||
|
package ru.mipt.npm.muon.monitor.sim
|
||||||
|
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Line
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Plane
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.CENTRAL_LAYER_Z
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.GEOMETRY_TOLERANCE
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.LOWER_LAYER_Z
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.PIXEL_XY_SIZE
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.UPPER_LAYER_Z
|
||||||
|
import ru.mipt.npm.muon.monitor.SC1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auxiliary cache for [SC1] planes
|
||||||
|
*/
|
||||||
|
internal class SC1Aux(val sc: SC1, var efficiency: Double = 1.0) {
|
||||||
|
// val layer: Layer = findLayer(center.z);
|
||||||
|
private val upLayer =
|
||||||
|
findLayer(sc.center.z + sc.zSize / 2.0)//Layer("${name}_up", center.z + zSize / 2.0);
|
||||||
|
private val bottomLayer =
|
||||||
|
findLayer(sc.center.z - sc.zSize / 2.0)//Layer("${name}_bottom", center.z - zSize / 2.0);
|
||||||
|
private val centralLayer = findLayer(sc.center.z)
|
||||||
|
|
||||||
|
private val center = Vector3D(sc.center.x, sc.center.y, sc.center.z)
|
||||||
|
|
||||||
|
private val sideLayers: Array<Plane> = arrayOf(
|
||||||
|
Plane(center.add(Vector3D(PIXEL_XY_SIZE / 2, 0.0, 0.0)), Vector3D(1.0, 0.0, 0.0), GEOMETRY_TOLERANCE),
|
||||||
|
Plane(center.add(Vector3D(-PIXEL_XY_SIZE / 2, 0.0, 0.0)), Vector3D(-1.0, 0.0, 0.0), GEOMETRY_TOLERANCE),
|
||||||
|
Plane(center.add(Vector3D(0.0, PIXEL_XY_SIZE / 2, 0.0)), Vector3D(0.0, 1.0, 0.0), GEOMETRY_TOLERANCE),
|
||||||
|
Plane(center.add(Vector3D(0.0, -PIXEL_XY_SIZE / 2, 0.0)), Vector3D(0.0, -1.0, 0.0), GEOMETRY_TOLERANCE)
|
||||||
|
);
|
||||||
|
|
||||||
|
//TODO add efficiency
|
||||||
|
private fun containsPoint(x: Double, y: Double, z: Double, tolerance: Double = GEOMETRY_TOLERANCE): Boolean {
|
||||||
|
return x <= sc.center.x + sc.xSize / 2.0 + tolerance && x >= sc.center.x - sc.xSize / 2.0 - tolerance &&
|
||||||
|
y <= sc.center.y + sc.ySize / 2.0 + tolerance && y >= sc.center.y - sc.ySize / 2.0 - tolerance &&
|
||||||
|
z <= sc.center.z + sc.zSize / 2.0 + tolerance && z >= sc.center.z - sc.zSize / 2.0 - tolerance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if pixel contains point
|
||||||
|
*/
|
||||||
|
private fun containsPoint(point: Vector3D, tolerance: Double = GEOMETRY_TOLERANCE): Boolean {
|
||||||
|
return containsPoint(point.x, point.y, point.z, tolerance);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return number of detector pixel like SCxx-12
|
||||||
|
*/
|
||||||
|
fun getDetectorNumber(): Int {
|
||||||
|
return sc.name.substring(2, 4).toInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return number of pixel in detector like SC79-xx
|
||||||
|
*/
|
||||||
|
fun getPixelNumber(): Int {
|
||||||
|
return sc.name.substring(5).toInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The layer number from up to bottom
|
||||||
|
*/
|
||||||
|
fun getLayerNumber(): Int {
|
||||||
|
return when (this.center.z) {
|
||||||
|
UPPER_LAYER_Z -> 1;
|
||||||
|
CENTRAL_LAYER_Z -> 2;
|
||||||
|
LOWER_LAYER_Z -> 3;
|
||||||
|
else -> throw RuntimeException("Unknown layer");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if track crosses the pixel
|
||||||
|
*/
|
||||||
|
fun isHit(track: Line): Boolean {
|
||||||
|
//check central plane as well as upper and bottom planes of the layer
|
||||||
|
val upperIntersection = upLayer.intersection(track);
|
||||||
|
val bottomIntersection = bottomLayer.intersection(track);
|
||||||
|
val upperHit = containsPoint(upperIntersection);
|
||||||
|
val bottomHit = containsPoint(bottomIntersection);
|
||||||
|
|
||||||
|
if (!bottomHit && !upperHit) {
|
||||||
|
return false;
|
||||||
|
} else if (upperHit && bottomHit) {
|
||||||
|
return eff();
|
||||||
|
} else {
|
||||||
|
val verticalHitPoint = if (upperHit) {
|
||||||
|
upperIntersection
|
||||||
|
} else {
|
||||||
|
bottomIntersection
|
||||||
|
}
|
||||||
|
val horizontalHitPoint = getHorizontalHitPoint(track);
|
||||||
|
return if (horizontalHitPoint == null) {
|
||||||
|
//If horizontal intersection could not be found, it is near the rib and therefore length is always sufficient
|
||||||
|
true;
|
||||||
|
} else {
|
||||||
|
val length = verticalHitPoint.distance(horizontalHitPoint);
|
||||||
|
(length >= MINIMAL_TRACK_LENGTH) && eff();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getHorizontalHitPoint(track: Line): Vector3D? {
|
||||||
|
return sideLayers
|
||||||
|
.map { it.intersection(track) }//FIXME there is a problem with geometric tolerances here
|
||||||
|
.firstOrNull { it != null && containsPoint(it, 100 * GEOMETRY_TOLERANCE) };
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun eff(): Boolean {
|
||||||
|
return efficiency == 1.0 || rnd.nextDouble() < efficiency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val auxCache = HashMap<SC1, SC1Aux>()
|
||||||
|
|
||||||
|
fun SC1.isHit(track: Line): Boolean{
|
||||||
|
return auxCache.getOrPut(this){
|
||||||
|
SC1Aux(this)
|
||||||
|
}.isHit(track)
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package ru.mipt.npm.muon.monitor.sim
|
||||||
|
|
||||||
|
import hep.dataforge.vis.spatial.Point3D
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Line
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Plane
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.CENTRAL_LAYER_Z
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.GEOMETRY_TOLERANCE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by darksnake on 11-May-16.
|
||||||
|
*/
|
||||||
|
|
||||||
|
private val basePlane = Plane(Vector3D(0.0, 0.0, 0.0), Vector3D(0.0, 0.0, 1.0), GEOMETRY_TOLERANCE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* elevation angle
|
||||||
|
*/
|
||||||
|
fun Line.getTheta(): Double {
|
||||||
|
return direction.delta;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Azimuthal angle
|
||||||
|
*/
|
||||||
|
fun Line.getPhi(): Double {
|
||||||
|
return direction.alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* x of intersection with base (central) plane
|
||||||
|
*/
|
||||||
|
fun Line.getX(): Double {
|
||||||
|
return basePlane.intersection(this).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Line.getY(): Double {
|
||||||
|
return basePlane.intersection(this).y;
|
||||||
|
}
|
||||||
|
|
||||||
|
fun makeTrack(start: Vector3D, direction: Vector3D): Line {
|
||||||
|
return Line(start, start.add(direction), GEOMETRY_TOLERANCE)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun makeTrack(x: Double, y: Double, theta: Double, phi: Double): Line {
|
||||||
|
//TODO check angle definitions
|
||||||
|
return makeTrack(
|
||||||
|
Vector3D(x, y, CENTRAL_LAYER_Z),
|
||||||
|
Vector3D(phi, theta)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Vector3D.toPoint() = Point3D(x, y, z)
|
||||||
|
|
||||||
|
fun Line.toPoints(): List<Point3D> {
|
||||||
|
val basePoint = basePlane.intersection(this)
|
||||||
|
val bottom = basePoint.subtract(300.0, direction)
|
||||||
|
val top = basePoint.add(300.0, direction)
|
||||||
|
return listOf(bottom.toPoint(), top.toPoint())
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,55 @@
|
|||||||
|
package ru.mipt.npm.muon.monitor.sim
|
||||||
|
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Line
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Plane
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D
|
||||||
|
import org.apache.commons.math3.random.JDKRandomGenerator
|
||||||
|
import org.apache.commons.math3.random.RandomGenerator
|
||||||
|
import ru.mipt.npm.muon.monitor.Event
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor
|
||||||
|
import ru.mipt.npm.muon.monitor.SC1
|
||||||
|
import ru.mipt.npm.muon.monitor.readResource
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
|
// minimal track length in detector
|
||||||
|
val MINIMAL_TRACK_LENGTH = 10.0
|
||||||
|
|
||||||
|
var rnd: RandomGenerator = JDKRandomGenerator(223)
|
||||||
|
|
||||||
|
|
||||||
|
private val layerCache = HashMap<Double, Plane>()
|
||||||
|
|
||||||
|
fun findLayer(z: Double): Plane = layerCache.getOrPut(z){
|
||||||
|
Plane(Vector3D(0.0, 0.0, z), Vector3D(0.0, 0.0, 1.0),
|
||||||
|
Monitor.GEOMETRY_TOLERANCE
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun readEffs(): Map<String, Double> {
|
||||||
|
val effMap = HashMap<String, Double>()
|
||||||
|
var detectorName: String = ""
|
||||||
|
var index: Int = 0
|
||||||
|
readResource("Effs-MM-minhits-4.dat").lineSequence().forEach { line ->
|
||||||
|
val trimmed = line.trim()
|
||||||
|
if (trimmed.startsWith("SC")) {
|
||||||
|
detectorName = trimmed.split(Regex("\\s+"))[2]
|
||||||
|
} else if (trimmed.startsWith("pixel")) {
|
||||||
|
index = 0
|
||||||
|
} else if (!trimmed.isEmpty()) {
|
||||||
|
val eff = trimmed.split(Regex("\\s+"))[1].toDouble()
|
||||||
|
effMap.put("SC${detectorName}_${index}", eff)
|
||||||
|
index++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return effMap
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun buildEventByTrack(track: Line, hitResolver: (Line) -> Collection<SC1> = defaultHitResolver): Event {
|
||||||
|
return Event(track.toPoints(), hitResolver(track).map { it.name })
|
||||||
|
}
|
||||||
|
|
||||||
|
val defaultHitResolver: (Line) -> Collection<SC1> = { track: Line ->
|
||||||
|
Monitor.pixels.filter { it.isHit(track) }.toSet()
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
package ru.mipt.npm.muon.monitor.sim
|
||||||
|
|
||||||
|
import org.apache.commons.math3.geometry.euclidean.threed.Line
|
||||||
|
import ru.mipt.npm.muon.monitor.Event
|
||||||
|
import ru.mipt.npm.muon.monitor.Monitor.PIXEL_XY_SIZE
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simulate single track and returns corresponding event
|
||||||
|
*/
|
||||||
|
fun simulateOne(trackGenerator: TrackGenerator = UniformTrackGenerator()): Event {
|
||||||
|
val track = trackGenerator.generate()
|
||||||
|
return buildEventByTrack(track)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TrackGenerator {
|
||||||
|
fun generate(): Line
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A uniform generator with track bases distributed in square in central plane, uniform phi and cos theta
|
||||||
|
*/
|
||||||
|
class UniformTrackGenerator(val maxX: Double = 4 * PIXEL_XY_SIZE, val maxY: Double = 4 * PIXEL_XY_SIZE) :
|
||||||
|
TrackGenerator {
|
||||||
|
override fun generate(): Line {
|
||||||
|
val x = (1 - rnd.nextDouble() * 2.0) * maxX
|
||||||
|
val y = (1 - rnd.nextDouble() * 2.0) * maxY
|
||||||
|
val phi = (1 - rnd.nextDouble() * 2.0) * Math.PI
|
||||||
|
val theta = Math.PI / 2 - Math.acos(rnd.nextDouble())
|
||||||
|
return makeTrack(x, y, theta, phi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FixedAngleGenerator(
|
||||||
|
val phi: Double, val theta: Double,
|
||||||
|
val maxX: Double = 4 * PIXEL_XY_SIZE,
|
||||||
|
val maxY: Double = 4 * PIXEL_XY_SIZE
|
||||||
|
) : TrackGenerator {
|
||||||
|
override fun generate(): Line {
|
||||||
|
val x = (1 - rnd.nextDouble() * 2.0) * maxX
|
||||||
|
val y = (1 - rnd.nextDouble() * 2.0) * maxY
|
||||||
|
return makeTrack(x, y, theta, phi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generating surface distribution using accept-reject method
|
||||||
|
*/
|
||||||
|
class Cos2TrackGenerator(
|
||||||
|
val power: Double = 2.0,
|
||||||
|
val maxX: Double = 4 * PIXEL_XY_SIZE,
|
||||||
|
val maxY: Double = 4 * PIXEL_XY_SIZE
|
||||||
|
) :
|
||||||
|
TrackGenerator {
|
||||||
|
override fun generate(): Line {
|
||||||
|
val x = (1 - rnd.nextDouble() * 2.0) * maxX
|
||||||
|
val y = (1 - rnd.nextDouble() * 2.0) * maxY
|
||||||
|
val phi = (1 - rnd.nextDouble() * 2.0) * Math.PI
|
||||||
|
|
||||||
|
|
||||||
|
for (i in 0..500) {
|
||||||
|
val thetaCandidate = Math.acos(rnd.nextDouble())
|
||||||
|
val u = rnd.nextDouble()
|
||||||
|
val sin = Math.sin(thetaCandidate)
|
||||||
|
if (u < Math.pow(sin, power) / sin) {
|
||||||
|
return makeTrack(x, y, thetaCandidate, phi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw RuntimeException("Failed to generate theta from distribution")
|
||||||
|
}
|
||||||
|
}
|
397
demo/muon-monitor/src/jvmMain/resources/Effs-MM-minhits-4.dat
Normal file
397
demo/muon-monitor/src/jvmMain/resources/Effs-MM-minhits-4.dat
Normal file
@ -0,0 +1,397 @@
|
|||||||
|
SC16 = 72 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9815 0.0070 39065 39801
|
||||||
|
2a 0.9790 0.0070 38199 39019
|
||||||
|
3a 0.9811 0.0070 38791 39538
|
||||||
|
4a 0.9833 0.0069 39987 40668
|
||||||
|
1b 0.9810 0.0070 38941 39697
|
||||||
|
2b 0.9800 0.0071 37449 38213
|
||||||
|
3b 0.9804 0.0070 39025 39806
|
||||||
|
4b 0.9804 0.0069 40432 41241
|
||||||
|
1c 0.9787 0.0069 39365 40221
|
||||||
|
2c 0.9793 0.0071 38092 38898
|
||||||
|
3c 0.9812 0.0070 38548 39288
|
||||||
|
4c 0.9806 0.0068 40894 41702
|
||||||
|
1d 0.9793 0.0069 39640 40479
|
||||||
|
2d 0.9775 0.0071 37605 38470
|
||||||
|
3d 0.9778 0.0069 39541 40439
|
||||||
|
4d 0.9786 0.0067 41719 42631
|
||||||
|
SC16 = 73 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9794 0.0069 39439 40270
|
||||||
|
2a 0.9791 0.0071 37754 38561
|
||||||
|
3a 0.9789 0.0069 39348 40198
|
||||||
|
4a 0.9794 0.0068 41517 42391
|
||||||
|
1b 0.9795 0.0070 39205 40027
|
||||||
|
2b 0.9796 0.0071 37647 38432
|
||||||
|
3b 0.9809 0.0070 38528 39280
|
||||||
|
4b 0.9818 0.0069 40075 40817
|
||||||
|
1c 0.9800 0.0071 38046 38822
|
||||||
|
2c 0.9805 0.0071 37651 38399
|
||||||
|
3c 0.9776 0.0069 39304 40205
|
||||||
|
4c 0.9817 0.0068 41296 42065
|
||||||
|
1d 0.9797 0.0070 38920 39728
|
||||||
|
2d 0.9802 0.0071 38191 38964
|
||||||
|
3d 0.9802 0.0070 38525 39302
|
||||||
|
4d 0.9825 0.0069 40020 40733
|
||||||
|
SC16 = 74 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9820 0.0070 39544 40270
|
||||||
|
2a 0.9816 0.0071 37850 38561
|
||||||
|
3a 0.9826 0.0070 39500 40198
|
||||||
|
4a 0.9835 0.0068 41693 42391
|
||||||
|
1b 0.9826 0.0070 39332 40027
|
||||||
|
2b 0.9811 0.0071 37707 38432
|
||||||
|
3b 0.9839 0.0070 38646 39280
|
||||||
|
4b 0.9855 0.0069 40224 40817
|
||||||
|
1c 0.9817 0.0071 38111 38822
|
||||||
|
2c 0.9825 0.0071 37726 38399
|
||||||
|
3c 0.9827 0.0070 39511 40205
|
||||||
|
4c 0.9842 0.0068 41399 42065
|
||||||
|
1d 0.9847 0.0070 39119 39728
|
||||||
|
2d 0.9825 0.0071 38282 38964
|
||||||
|
3d 0.9832 0.0070 38642 39302
|
||||||
|
4d 0.9856 0.0069 40148 40733
|
||||||
|
SC16 = 75 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9850 0.0069 40488 41106
|
||||||
|
2a 0.9824 0.0070 39586 40294
|
||||||
|
3a 0.9842 0.0069 40539 41189
|
||||||
|
4a 0.9877 0.0068 41864 42385
|
||||||
|
1b 0.9837 0.0069 40803 41478
|
||||||
|
2b 0.9835 0.0070 38953 39605
|
||||||
|
3b 0.9839 0.0069 40864 41533
|
||||||
|
4b 0.9856 0.0068 41895 42505
|
||||||
|
1c 0.9843 0.0068 41478 42139
|
||||||
|
2c 0.9825 0.0069 39926 40637
|
||||||
|
3c 0.9854 0.0069 40817 41422
|
||||||
|
4c 0.9866 0.0067 42925 43509
|
||||||
|
1d 0.9839 0.0068 41165 41839
|
||||||
|
2d 0.9837 0.0070 39517 40172
|
||||||
|
3d 0.9830 0.0068 40869 41576
|
||||||
|
4d 0.9840 0.0066 43928 44642
|
||||||
|
SC16 = 76 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9862 0.0068 41502 42083
|
||||||
|
2a 0.9871 0.0070 39451 39965
|
||||||
|
3a 0.9886 0.0069 40287 40752
|
||||||
|
4a 0.9897 0.0068 42213 42652
|
||||||
|
1b 0.9871 0.0068 41396 41939
|
||||||
|
2b 0.9864 0.0070 39284 39824
|
||||||
|
3b 0.9870 0.0069 41226 41768
|
||||||
|
4b 0.9863 0.0067 43486 44088
|
||||||
|
1c 0.9889 0.0070 40084 40533
|
||||||
|
2c 0.9868 0.0070 39824 40357
|
||||||
|
3c 0.9889 0.0069 40552 41008
|
||||||
|
4c 0.9908 0.0069 41425 41809
|
||||||
|
1d 0.9887 0.0070 40039 40498
|
||||||
|
2d 0.9873 0.0070 39214 39717
|
||||||
|
3d 0.9865 0.0069 40925 41486
|
||||||
|
4d 0.9883 0.0068 42085 42583
|
||||||
|
SC16 = 77 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9895 0.0082 29031 29339
|
||||||
|
2a 0.9887 0.0083 28275 28599
|
||||||
|
3a 0.9893 0.0081 29510 29830
|
||||||
|
4a 0.9902 0.0080 30308 30607
|
||||||
|
1b 0.9889 0.0082 28597 28918
|
||||||
|
2b 0.9888 0.0084 27365 27675
|
||||||
|
3b 0.9892 0.0083 28387 28696
|
||||||
|
4b 0.9913 0.0082 29412 29669
|
||||||
|
1c 0.9897 0.0082 28659 28957
|
||||||
|
2c 0.9885 0.0083 27926 28250
|
||||||
|
3c 0.9902 0.0082 29138 29426
|
||||||
|
4c 0.9909 0.0080 30831 31113
|
||||||
|
1d 0.9895 0.0081 29622 29937
|
||||||
|
2d 0.9879 0.0084 27787 28126
|
||||||
|
3d 0.9900 0.0082 28675 28964
|
||||||
|
4d 0.9913 0.0080 30536 30804
|
||||||
|
SC16 = 78 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9807 0.0068 41199 42008
|
||||||
|
2a 0.9786 0.0069 39864 40735
|
||||||
|
3a 0.9783 0.0068 41363 42279
|
||||||
|
4a 0.9815 0.0067 42769 43577
|
||||||
|
1b 0.9813 0.0068 40825 41605
|
||||||
|
2b 0.9796 0.0069 39542 40366
|
||||||
|
3b 0.9815 0.0069 40446 41209
|
||||||
|
4b 0.9841 0.0068 41689 42362
|
||||||
|
1c 0.9788 0.0068 41347 42244
|
||||||
|
2c 0.9795 0.0069 40231 41075
|
||||||
|
3c 0.9788 0.0068 41565 42465
|
||||||
|
4c 0.9810 0.0066 44415 45276
|
||||||
|
1d 0.9796 0.0067 41707 42576
|
||||||
|
2d 0.9801 0.0069 39722 40528
|
||||||
|
3d 0.9816 0.0068 40700 41462
|
||||||
|
4d 0.9816 0.0067 43022 43830
|
||||||
|
SC16 = 79 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9796 0.0081 29157 29765
|
||||||
|
2a 0.9781 0.0081 28678 29321
|
||||||
|
3a 0.9811 0.0081 28751 29304
|
||||||
|
4a 0.9783 0.0080 29750 30410
|
||||||
|
1b 0.9782 0.0081 29080 29728
|
||||||
|
2b 0.9762 0.0082 27948 28628
|
||||||
|
3b 0.9796 0.0080 29739 30358
|
||||||
|
4b 0.9796 0.0079 30395 31029
|
||||||
|
1c 0.9787 0.0080 29856 30505
|
||||||
|
2c 0.9787 0.0081 28613 29235
|
||||||
|
3c 0.9800 0.0081 29214 29811
|
||||||
|
4c 0.9804 0.0079 30742 31356
|
||||||
|
1d 0.9781 0.0080 29903 30572
|
||||||
|
2d 0.9780 0.0082 28276 28912
|
||||||
|
3d 0.9772 0.0080 29570 30259
|
||||||
|
4d 0.9788 0.0078 31546 32229
|
||||||
|
SC16 = 80 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9850 0.0082 28399 28832
|
||||||
|
2a 0.9834 0.0083 27891 28363
|
||||||
|
3a 0.9859 0.0082 28386 28791
|
||||||
|
4a 0.9878 0.0081 29272 29634
|
||||||
|
1b 0.9858 0.0083 28122 28528
|
||||||
|
2b 0.9833 0.0084 26978 27437
|
||||||
|
3b 0.9846 0.0082 28345 28789
|
||||||
|
4b 0.9872 0.0081 29293 29674
|
||||||
|
1c 0.9841 0.0082 28684 29148
|
||||||
|
2c 0.9828 0.0083 27674 28159
|
||||||
|
3c 0.9851 0.0083 27958 28381
|
||||||
|
4c 0.9869 0.0081 29810 30206
|
||||||
|
1d 0.9848 0.0081 29321 29774
|
||||||
|
2d 0.9844 0.0083 27631 28069
|
||||||
|
3d 0.9836 0.0082 28503 28979
|
||||||
|
4d 0.9851 0.0079 30577 31038
|
||||||
|
SC16 = 81 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9856 0.0086 25820 26198
|
||||||
|
2a 0.9868 0.0089 24696 25027
|
||||||
|
3a 0.9892 0.0088 25195 25469
|
||||||
|
4a 0.9892 0.0087 25786 26068
|
||||||
|
1b 0.9858 0.0087 25638 26007
|
||||||
|
2b 0.9863 0.0089 24125 24459
|
||||||
|
3b 0.9873 0.0086 25929 26262
|
||||||
|
4b 0.9852 0.0085 26940 27344
|
||||||
|
1c 0.9885 0.0089 24530 24816
|
||||||
|
2c 0.9873 0.0089 24570 24886
|
||||||
|
3c 0.9888 0.0088 25000 25282
|
||||||
|
4c 0.9907 0.0087 26103 26347
|
||||||
|
1d 0.9887 0.0088 25076 25362
|
||||||
|
2d 0.9857 0.0089 24340 24694
|
||||||
|
3d 0.9864 0.0087 25796 26152
|
||||||
|
4d 0.9871 0.0086 26010 26350
|
||||||
|
SC16 = 82 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9841 0.0069 40146 40794
|
||||||
|
2a 0.9830 0.0070 39206 39884
|
||||||
|
3a 0.9854 0.0070 39525 40112
|
||||||
|
4a 0.9874 0.0069 40762 41284
|
||||||
|
1b 0.9857 0.0069 40187 40771
|
||||||
|
2b 0.9851 0.0071 38243 38823
|
||||||
|
3b 0.9835 0.0069 40009 40679
|
||||||
|
4b 0.9850 0.0068 41450 42082
|
||||||
|
1c 0.9835 0.0069 40251 40927
|
||||||
|
2c 0.9843 0.0070 39042 39663
|
||||||
|
3c 0.9845 0.0069 39990 40621
|
||||||
|
4c 0.9869 0.0068 41955 42512
|
||||||
|
1d 0.9819 0.0069 40635 41386
|
||||||
|
2d 0.9843 0.0070 38912 39532
|
||||||
|
3d 0.9831 0.0069 40428 41121
|
||||||
|
4d 0.9825 0.0067 42663 43422
|
||||||
|
SC16 = 83 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9845 0.0068 41429 42083
|
||||||
|
2a 0.9830 0.0070 39286 39965
|
||||||
|
3a 0.9838 0.0069 40092 40752
|
||||||
|
4a 0.9850 0.0068 42013 42652
|
||||||
|
1b 0.9840 0.0068 41266 41939
|
||||||
|
2b 0.9837 0.0070 39174 39824
|
||||||
|
3b 0.9842 0.0068 41108 41768
|
||||||
|
4b 0.9841 0.0067 43388 44088
|
||||||
|
1c 0.9851 0.0069 39928 40533
|
||||||
|
2c 0.9817 0.0069 39617 40357
|
||||||
|
3c 0.9849 0.0069 40390 41008
|
||||||
|
4c 0.9863 0.0068 41238 41809
|
||||||
|
1d 0.9849 0.0069 39885 40498
|
||||||
|
2d 0.9843 0.0070 39092 39717
|
||||||
|
3d 0.9828 0.0069 40774 41486
|
||||||
|
4d 0.9859 0.0068 41981 42583
|
||||||
|
SC16 = 84 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9808 0.0086 25720 26224
|
||||||
|
2a 0.9780 0.0088 24341 24889
|
||||||
|
3a 0.9834 0.0086 26105 26547
|
||||||
|
4a 0.9796 0.0085 26333 26881
|
||||||
|
1b 0.9835 0.0087 25276 25699
|
||||||
|
2b 0.9816 0.0088 24571 25032
|
||||||
|
3b 0.9790 0.0087 25134 25674
|
||||||
|
4b 0.9866 0.0086 25969 26323
|
||||||
|
1c 0.9851 0.0086 25755 26145
|
||||||
|
2c 0.9831 0.0088 24727 25152
|
||||||
|
3c 0.9821 0.0086 25863 26335
|
||||||
|
4c 0.9813 0.0083 27641 28169
|
||||||
|
1d 0.9845 0.0086 26120 26532
|
||||||
|
2d 0.9835 0.0088 24676 25090
|
||||||
|
3d 0.9805 0.0086 25495 26003
|
||||||
|
4d 0.9847 0.0084 27010 27430
|
||||||
|
SC16 = 85 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9888 0.0069 41438 41908
|
||||||
|
2a 0.9879 0.0070 40115 40608
|
||||||
|
3a 0.9885 0.0068 41522 42007
|
||||||
|
4a 0.9890 0.0066 44029 44518
|
||||||
|
1b 0.9876 0.0068 41537 42059
|
||||||
|
2b 0.9883 0.0070 39491 39958
|
||||||
|
3b 0.9908 0.0069 40708 41086
|
||||||
|
4b 0.9895 0.0068 42674 43128
|
||||||
|
1c 0.9893 0.0070 40236 40672
|
||||||
|
2c 0.9883 0.0070 39383 39849
|
||||||
|
3c 0.9887 0.0068 41897 42374
|
||||||
|
4c 0.9901 0.0067 43244 43677
|
||||||
|
1d 0.9891 0.0069 40750 41197
|
||||||
|
2d 0.9878 0.0070 39719 40209
|
||||||
|
3d 0.9901 0.0069 40752 41159
|
||||||
|
4d 0.9902 0.0068 42110 42525
|
||||||
|
SC16 = 86 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9870 0.0081 29757 30148
|
||||||
|
2a 0.9883 0.0082 28618 28958
|
||||||
|
3a 0.9879 0.0082 29167 29524
|
||||||
|
4a 0.9886 0.0079 30975 31331
|
||||||
|
1b 0.9887 0.0081 29794 30133
|
||||||
|
2b 0.9876 0.0083 28184 28538
|
||||||
|
3b 0.9895 0.0082 29207 29518
|
||||||
|
4b 0.9907 0.0080 30271 30555
|
||||||
|
1c 0.9883 0.0082 28908 29251
|
||||||
|
2c 0.9887 0.0083 28282 28606
|
||||||
|
3c 0.9883 0.0081 29827 30181
|
||||||
|
4c 0.9916 0.0079 31116 31380
|
||||||
|
1d 0.9900 0.0082 29326 29622
|
||||||
|
2d 0.9884 0.0082 28561 28897
|
||||||
|
3d 0.9898 0.0082 29081 29380
|
||||||
|
4d 0.9911 0.0081 29889 30158
|
||||||
|
SC16 = 87 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9876 0.0070 39769 40270
|
||||||
|
2a 0.9875 0.0071 38079 38561
|
||||||
|
3a 0.9886 0.0070 39740 40198
|
||||||
|
4a 0.9869 0.0068 41835 42391
|
||||||
|
1b 0.9878 0.0070 39538 40027
|
||||||
|
2b 0.9871 0.0071 37936 38432
|
||||||
|
3b 0.9885 0.0071 38827 39280
|
||||||
|
4b 0.9896 0.0069 40393 40817
|
||||||
|
1c 0.9887 0.0071 38383 38822
|
||||||
|
2c 0.9864 0.0071 37878 38399
|
||||||
|
3c 0.9892 0.0070 39772 40205
|
||||||
|
4c 0.9899 0.0068 41641 42065
|
||||||
|
1d 0.9890 0.0070 39290 39728
|
||||||
|
2d 0.9880 0.0071 38495 38964
|
||||||
|
3d 0.9888 0.0071 38862 39302
|
||||||
|
4d 0.9912 0.0070 40375 40733
|
||||||
|
SC16 = 88 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9804 0.0068 41090 41910
|
||||||
|
2a 0.9788 0.0068 40437 41311
|
||||||
|
3a 0.9787 0.0067 41989 42905
|
||||||
|
4a 0.9814 0.0067 42708 43517
|
||||||
|
1b 0.9806 0.0068 41179 41993
|
||||||
|
2b 0.9786 0.0069 39836 40706
|
||||||
|
3b 0.9822 0.0068 40809 41550
|
||||||
|
4b 0.9830 0.0068 41869 42592
|
||||||
|
1c 0.9790 0.0067 41953 42853
|
||||||
|
2c 0.9778 0.0068 40547 41467
|
||||||
|
3c 0.9776 0.0067 42426 43398
|
||||||
|
4c 0.9781 0.0065 45386 46401
|
||||||
|
1d 0.9781 0.0067 42368 43318
|
||||||
|
2d 0.9798 0.0069 40395 41227
|
||||||
|
3d 0.9794 0.0068 41421 42293
|
||||||
|
4d 0.9810 0.0066 43810 44658
|
||||||
|
SC16 = 91 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9804 0.0068 41402 42230
|
||||||
|
2a 0.9765 0.0068 40606 41582
|
||||||
|
3a 0.9816 0.0068 41040 41811
|
||||||
|
4a 0.9818 0.0067 42427 43215
|
||||||
|
1b 0.9812 0.0068 41383 42176
|
||||||
|
2b 0.9785 0.0069 39515 40383
|
||||||
|
3b 0.9787 0.0068 41492 42394
|
||||||
|
4b 0.9812 0.0067 43091 43918
|
||||||
|
1c 0.9774 0.0067 41827 42794
|
||||||
|
2c 0.9782 0.0069 40267 41164
|
||||||
|
3c 0.9801 0.0068 41027 41862
|
||||||
|
4c 0.9801 0.0066 43673 44562
|
||||||
|
1d 0.9801 0.0067 42176 43031
|
||||||
|
2d 0.9789 0.0068 40435 41308
|
||||||
|
3d 0.9774 0.0067 42377 43359
|
||||||
|
4d 0.9771 0.0065 44859 45908
|
||||||
|
SC16 = 92 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9879 0.0082 28816 29168
|
||||||
|
2a 0.9876 0.0084 27450 27795
|
||||||
|
3a 0.9881 0.0082 28799 29147
|
||||||
|
4a 0.9877 0.0080 30498 30878
|
||||||
|
1b 0.9885 0.0082 28573 28904
|
||||||
|
2b 0.9881 0.0084 27702 28037
|
||||||
|
3b 0.9899 0.0083 28461 28752
|
||||||
|
4b 0.9905 0.0081 29726 30012
|
||||||
|
1c 0.9891 0.0084 27799 28104
|
||||||
|
2c 0.9892 0.0084 27657 27958
|
||||||
|
3c 0.9880 0.0082 28644 28991
|
||||||
|
4c 0.9903 0.0080 30138 30432
|
||||||
|
1d 0.9896 0.0082 28735 29037
|
||||||
|
2d 0.9891 0.0084 27680 27984
|
||||||
|
3d 0.9903 0.0083 28303 28580
|
||||||
|
4d 0.9912 0.0082 29272 29532
|
||||||
|
SC16 = 93 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9847 0.0069 40699 41330
|
||||||
|
2a 0.9845 0.0070 39280 39898
|
||||||
|
3a 0.9220 0.0066 37984 41198
|
||||||
|
4a 0.9864 0.0067 43034 43629
|
||||||
|
1b 0.9851 0.0069 40603 41216
|
||||||
|
2b 0.9841 0.0071 38495 39117
|
||||||
|
3b 0.9873 0.0070 39577 40088
|
||||||
|
4b 0.9866 0.0068 41684 42250
|
||||||
|
1c 0.9859 0.0070 39523 40090
|
||||||
|
2c 0.9863 0.0070 39423 39972
|
||||||
|
3c 0.9865 0.0069 40785 41343
|
||||||
|
4c 0.9865 0.0068 42213 42790
|
||||||
|
1d 0.9857 0.0069 40010 40589
|
||||||
|
2d 0.9854 0.0070 38880 39456
|
||||||
|
3d 0.9859 0.0070 39559 40124
|
||||||
|
4d 0.9875 0.0069 40866 41385
|
||||||
|
SC16 = 94 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9784 0.0086 25543 26106
|
||||||
|
2a 0.9800 0.0087 25262 25777
|
||||||
|
3a 0.9850 0.0087 25523 25912
|
||||||
|
4a 0.9835 0.0086 26036 26473
|
||||||
|
1b 0.9817 0.0087 25195 25664
|
||||||
|
2b 0.9768 0.0089 24039 24610
|
||||||
|
3b 0.9788 0.0086 25589 26143
|
||||||
|
4b 0.9821 0.0085 26527 27010
|
||||||
|
1c 0.9822 0.0086 25724 26191
|
||||||
|
2c 0.9802 0.0087 24951 25455
|
||||||
|
3c 0.9778 0.0087 25174 25746
|
||||||
|
4c 0.9810 0.0084 26777 27297
|
||||||
|
1d 0.9808 0.0086 25943 26452
|
||||||
|
2d 0.9775 0.0088 24528 25093
|
||||||
|
3d 0.9799 0.0086 25872 26404
|
||||||
|
4d 0.9783 0.0083 27161 27764
|
||||||
|
SC16 = 96 the min number of hits = 4
|
||||||
|
pixel eff d_eff n_hit n_tot
|
||||||
|
1a 0.9865 0.0068 42151 42727
|
||||||
|
2a 0.9874 0.0070 40062 40574
|
||||||
|
3a 0.9890 0.0069 41115 41571
|
||||||
|
4a 0.9895 0.0068 42296 42743
|
||||||
|
1b 0.9874 0.0068 41364 41890
|
||||||
|
2b 0.9864 0.0070 39479 40022
|
||||||
|
3b 0.9872 0.0068 41528 42067
|
||||||
|
4b 0.9870 0.0067 43749 44326
|
||||||
|
1c 0.9898 0.0069 40533 40952
|
||||||
|
2c 0.9873 0.0069 40513 41034
|
||||||
|
3c 0.9898 0.0069 40908 41329
|
||||||
|
4c 0.9903 0.0068 42150 42562
|
||||||
|
1d 0.9882 0.0069 40903 41392
|
||||||
|
2d 0.9879 0.0070 39634 40121
|
||||||
|
3d 0.9862 0.0068 41810 42396
|
||||||
|
4d 0.9893 0.0067 43167 43635
|
||||||
|
|
Loading…
Reference in New Issue
Block a user