Exemplo n.º 1
0
        public void SetCalced(SensorThick _s)
        {
            _s.calced = true;
            ZoneThick z = ZonesGot[0];

            foreach (SensorThick s in z.MSensor)
            {
                if (!s.calced)
                {
                    return;
                }
            }
            ZonesGot.RemoveAt(0);
            ZonesCalced.Add(z);
        }
Exemplo n.º 2
0
        public ZoneThick GetNextDataUnitZone(bool _check, int?_TubeLength, L_TickPosition _MTP)
        {
            if (IsComplete())
            {
                return(null);
            }
            NextZone(_TubeLength, _MTP);
            ComputeZones();
            ZoneThick PrevZone = ZonesAll.LastOrDefault();

            if (PrevZone != null)
            {
                if (PrevZone.Last)
                {
                    GotZones = true;
                }
            }
            if (ZonesComputed.Count == 0)
            {
                return(null);
            }
            ZoneThick z = ZonesComputed[0];

            if (!_check)
            {
                //				pr(AnsiString("z.index=") + z.index);
                //				pr(AnsiString("z1.data=") + (unsigned long)(z1.data));
                //				pr(AnsiString("z1.data2=") + (unsigned long)
                //					(z1.data + z1.size));
                //				pr(AnsiString("z2.data=") + (unsigned long)(z2.data));
                //				pr(AnsiString("z2.data2=") + (unsigned long)
                //					(z2.data + z2.size));
                //				pr(AnsiString("deltaZ2Z1=") + ((int)(z2.data - z1.data)));
                //				pr(AnsiString("SensorsPosition=") + _dataUnit->SensorsPosition);
                //				pr(AnsiString("SensorsPosition2=") +
                //					_dataUnit->SensorsPosition2);
                //				pr(z.ToString());
                if (z.Last)
                {
                    complete = true;
                }
                ZonesComputed.RemoveAt(0);
            }
            return(z);
        }
Exemplo n.º 3
0
        void ComputeZones()
        {
            if (ZonesCalced.Count == 0)
            {
                return;
            }
            ZoneThick zLast  = ZonesAll.LastOrDefault();
            bool      IsLast = zLast == null ? false : zLast.Last;

            if (!IsLast)
            {
                ZoneThick Z = ZonesCalced[0];
                // Зона не должна попасть на последние мертвые зоны
                if (Z.Index + 1 + CalcEndDeadZones() >= ZonesAll.Count)
                {
                    return;
                }
                // Зона должна иметь следующую зону
                if (Z.Index + 1 + 1 >= ZonesAll.Count)
                {
                    return;
                }
                Z.ComputeMedian(Z.Index == 0 ? null : ZonesAll[Z.Index - 1], ZonesAll[Z.Index + 1]);
                Z.ComputeDead();
                ZonesCalced.RemoveAt(0);
                ZonesComputed.Add(Z);
            }
            else
            {
                // Считаем в любом случае - дополнительных зон уже не будет никогда
                ZoneThick Z    = ZonesCalced[0];
                ZoneThick prev = Z.Index == 0 ? null : ZonesAll[Z.Index - 1];
                ZoneThick next = Z.Index + 1 < ZonesAll.Count() ? ZonesAll[Z.Index + 1] : null;
                Z.ComputeMedian(prev, next);
                Z.ComputeDead(ZonesAll.Count());
                ZonesCalced.RemoveAt(0);
                ZonesComputed.Add(Z);
            }
        }
Exemplo n.º 4
0
        void NextZone(int?_TubeLength, L_TickPosition _MTP)
        {
            ZoneThick PrevZone = ZonesAll.LastOrDefault();

            if (PrevZone == null)
            {
                int?idata0 = IndexByTick(_MTP.TickByPosition(SensorsPosition));
                if (idata0 == null)
                {
                    return;
                }

                int?idata1 = IndexByTick(_MTP.TickByPosition(SensorsPosition + ZoneLength));
                if (idata1 == null)
                {
                    return;
                }
                if (idata1.Value == idata0.Value)
                {
                    return;
                }

                int zsize = idata1.Value - idata0.Value;
                if (zsize <= 0)
                {
                    return;
                }

                ZoneThick z = new ZoneThick(rawStrobes, idata0.Value, zsize, 0, ZoneLength, false);
                ZonesAll.Add(z);
                ZonesGot.Add(z);
                pr(z.ToString());
            }
            else
            {
                if (PrevZone.Last)
                {
                    return;
                }
                int  idata  = PrevZone.rawstrobes_index + PrevZone.Size;
                int  length = ZoneLength;
                bool last   = false;

                double pos = ZoneLength * (PrevZone.Index + 2);
                if (_TubeLength != null)
                {
                    if (pos >= _TubeLength.Value)
                    {
                        last   = true;
                        length = Convert.ToInt32(ZoneLength - (pos - _TubeLength.Value));
                        pos    = _TubeLength.Value;
                    }
                }
                int?idata1 = IndexByTick(_MTP.TickByPosition(SensorsPosition + pos));
                if (idata1 == null)
                {
                    return;
                }

                int size = idata1.Value - idata;
                if (size <= 0)
                {
                    return;
                }
                ZoneThick z = new ZoneThick(rawStrobes, idata, size, PrevZone.Index + 1, length, last);
                ZonesAll.Add(z);
                ZonesGot.Add(z);
                pr(z.ToString());
            }
        }