// один пакет с одним совпадением на детекторах 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 }); }
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); }
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); }
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); }
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; }
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)); }
//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); }
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; }
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); }