예제 #1
0
        // один пакет с одним совпадением на детекторах 1 и 2, всё остальное по нулям
        public static PETCoincidencePacket[] CreateUnitCoincidencePacket()
        {
            var coinc = new PETCoincidence();

            coinc.Position1 = 1;
            coinc.Position2 = 2;
            coinc.Flags     = 13;
            coinc.XPlus1    = 5;
            coinc.XMinus1   = 6;
            coinc.YPlus1    = 7;
            coinc.YMinus1   = 8;
            coinc.XPlus2    = 9;
            coinc.XMinus2   = 10;
            coinc.YPlus2    = 11;
            coinc.YMinus2   = 12;
            coinc.Timestamp = 255;

            var packet = new PETCoincidencePacket();

            packet.Flags           = 63;
            packet.ItemCount       = 1;
            packet.Coincidences    = new PETCoincidence[1];
            packet.Coincidences[0] = coinc;

            return(new PETCoincidencePacket[] { packet });
        }
예제 #2
0
        public static void CalculateXYCoincidenceFromIJ(PETDigitalCoincidence In, ref PETCoincidence Out)
        {
            Out.Position1 = In.Position1;
            Out.Position2 = In.Position2;
            Out.Timestamp = In.Timestamp;

            GetXYFromIJ(In.I1, In.J1, 511.0, out Out.XPlus1, out Out.XMinus1, out Out.YPlus1, out Out.YMinus1);
            GetXYFromIJ(In.I1, In.J1, 511.0, out Out.XPlus2, out Out.XMinus2, out Out.YPlus2, out Out.YMinus2);
        }
예제 #3
0
        public static PETCoincidence[] ConvertIJToXYCoincidences(PETDigitalCoincidence[] coinc)
        {
            var res = new PETCoincidence[coinc.Length];

            for (int i = 0; i < coinc.Length; i++)
            {
                CalculateXYCoincidenceFromIJ(coinc[i], ref res[i]);
            }

            return(res);
        }
예제 #4
0
        public static PETCoincidence[] DecodeArray(byte[] b, int Offset, int Size)
        {
            int ofs = Offset;
            int num = (Size) / PETStructSizes.PETCoincidence_Size;
            var res = new PETCoincidence[num];

            for (int i = 0; i < num; i++)
            {
                res[i].FromBytes(ofs, b);
                ofs += PETStructSizes.PETCoincidence_Size;
            }

            return(res);
        }
예제 #5
0
        public static void CalculateDigitalCoincidence(PETCoincidence In, ref PETDigitalCoincidence OutE)
        {
            OutE.I1 = (byte)iForX(In.XPlus1, In.XMinus1);
            OutE.J1 = (byte)jForY(In.YPlus1, In.YMinus1);

            OutE.I2 = (byte)iForX(In.XPlus2, In.XMinus2);
            OutE.J2 = (byte)jForY(In.YPlus2, In.YMinus2);

            OutE.Position1 = In.Position1;
            OutE.Position2 = In.Position2;

            OutE.Timestamp = In.Timestamp;

            // OutE.Flags = In.Flags;
        }
예제 #6
0
 public bool CompareTo(PETCoincidence p)
 {
     return((p.Timestamp == this.Timestamp) &&
            (p.Position1 == this.Position1) &&
            (p.Position2 == this.Position2) &&
            (p.XPlus1 == this.XPlus1) &&
            (p.YPlus1 == this.YPlus1) &&
            (p.XMinus1 == this.XMinus1) &&
            (p.YMinus1 == this.YMinus1) &&
            (p.XPlus2 == this.XPlus2) &&
            (p.YPlus2 == this.YPlus2) &&
            (p.XMinus2 == this.XMinus2) &&
            (p.YMinus2 == this.YMinus2) &&
            (p.Flags == this.Flags));
 }
예제 #7
0
        //static int ItemSize = PETCoincidence.Size; //Marshal.SizeOf(typeof(PETCoincidence));

        public static PETCoincidencePacket RandomPacket(System.Random rnd = null)
        {
            var res = new PETCoincidencePacket();

            var r = (rnd == null) ? new System.Random() : rnd;

            res.Flags     = (byte)r.Next();
            res.ItemCount = (byte)r.Next(1, 10);

            res.Coincidences = new PETCoincidence[res.ItemCount];

            for (int i = 0; i < res.ItemCount; i++)
            {
                res.Coincidences[i] = PETCoincidence.RandomCoincidence(rnd);
            }

            return(res);
        }
예제 #8
0
        public static void CalculateCoincidenceForDigital(PETDigitalCoincidence In, ref PETCoincidence OutE)
        {
            OutE.XPlus1  = XPlusForI(In.I1);
            OutE.XMinus1 = XMinusForI(In.I1);
            OutE.XPlus2  = XPlusForI(In.I2);
            OutE.XMinus2 = XMinusForI(In.I2);

            OutE.YPlus1  = YPlusForJ(In.J1);
            OutE.YMinus1 = YMinusForJ(In.J1);
            OutE.YPlus2  = YPlusForJ(In.J2);
            OutE.YMinus2 = YMinusForJ(In.J2);

            OutE.Position1 = In.Position1;
            OutE.Position2 = In.Position2;

            OutE.Timestamp = In.Timestamp;

            // OutE.Flags = In.Flags;
        }
예제 #9
0
        public static PETCoincidence RandomCoincidence(System.Random rnd = null)
        {
            var res = new PETCoincidence();

            var r = (rnd == null) ? new System.Random() : rnd;

            res.Timestamp = (UInt32)r.Next();
            res.Position1 = (UInt16)(r.Next(0, 47) + 64 * r.Next(0, 3));
            res.Position2 = (UInt16)(r.Next(0, 47) + 64 * r.Next(0, 3));

            res.XPlus1  = (UInt16)r.Next(0, 255);
            res.YPlus1  = (UInt16)r.Next(0, 255);
            res.XMinus1 = (UInt16)r.Next(0, 255);
            res.YMinus1 = (UInt16)r.Next(0, 255);

            res.XPlus2  = (UInt16)r.Next(0, 255);
            res.YPlus2  = (UInt16)r.Next(0, 255);
            res.XMinus2 = (UInt16)r.Next(0, 255);
            res.YMinus2 = (UInt16)r.Next(0, 255);

            res.Flags = (byte)r.Next();

            return(res);
        }