//– Dispense back into vessel and then pipette nothing //– Ignore clot error and continue //– Discard the DITI and pipette nothing private void ProcessClot(Labware labware, int wellID, double volume, LiquidClass liquidClass, out PipettingResult pipettingResult, string barcode = "") { string labwareLabel = labware.Label; ClotDetectedForm clotForm = new ClotDetectedForm(); clotForm.ShowDialog(); e_RSPErrorCode res = e_RSPErrorCode.RSP_ERROR_NONE; var userSelection = clotForm.UserSelection; pipettingResult = PipettingResult.ok; DitiTrackInfo trackInfo = new DitiTrackInfo(Labware.WasteLabel, 1, true, false); switch (userSelection) { case ClotDetectedAction.dispenseBackThenDropDiti: pipettingResult = PipettingResult.clotDispenseBack; res = MoveController.Instance.Move2Z(_eARM.左臂, labware.ZValues.ZDispense); ThrowCriticalException(res, "遇到凝块,移动到ZDispense"); res = MoveController.Instance.Dispense(volume + excessVolume, liquidClass.AspirationSinglePipetting.AspirationSpeed, startSpeedV, endSpeedV); ThrowCriticalException(res, "遇到凝块,打回容器"); DropTip(out trackInfo); break; case ClotDetectedAction.dropDiti: pipettingResult = PipettingResult.clotDropDiti; DropTip(out trackInfo); break; case ClotDetectedAction.ignore: pipettingResult = PipettingResult.clotIgnore; break; } }
private void OnLayoutEditorEditWare(object sender, WareBase e) { if (e is Labware) { Labware labware = e as Labware; if (this.ActivateEditingTab(labware.TypeName)) { return; } LabwareEditor editor = new LabwareEditor(AddInfo, this); editor.DataContext = labware; this.AddTabItem(editor); } else if (e is Carrier) { Carrier carrier = e as Carrier; if (this.ActivateEditingTab(carrier.TypeName)) { return; } CarrierEditor editor = new CarrierEditor(AddInfo); editor.DataContext = carrier; this.AddTabItem(editor); } else { // Bad argument } }
private void DeleteLabware_Executed(object sender, ExecutedRoutedEventArgs e) { Labware selectedLW = (Labware)this.lb_labwares.SelectedItem; PipettorElementManager.Instance.DeletePipettorElement <Labware>(selectedLW.TypeName); DeleteTabItem(selectedLW.TypeName); }
public PipettingCommandEidtor(Labware selectedLabware, bool isAspirate) { _labware = selectedLabware; InitializeComponent(); this.Loaded += PipettingCommandEidtor_Loaded; SetCaption(isAspirate); }
private bool TryDetectLiquid(Labware labware) { const int mmPerSecond = 50; var res = MoveController.Instance.DetectLiquid(labware.ZValues.ZStart, labware.ZValues.ZMax, mmPerSecond); return(res == e_RSPErrorCode.RSP_ERROR_NONE); }
public static void MountThis(BasewareUIElement baseUIElement, Point position, Grid container, Layout workingLayout) { bool bValid = IsValid(baseUIElement, position, container); if (!bValid) { if (baseUIElement is LabwareUIElement) //if labware has parent, let it go back { LabwareUIElement labwareUIElement = (LabwareUIElement)baseUIElement; if (labwareUIElement.Labware.ParentCarrier != null) { return; } } container.Children.Remove(baseUIElement); if (baseUIElement is CarrierUIElement) { RemoveUIElementsOnCarrier(container, baseUIElement as CarrierUIElement); } baseUIElement = null; return; } int grid = VisualCommon.FindCorrespondingGrid(position.X); if (baseUIElement is CarrierUIElement) { CarrierUIElement carrierUIElement = (CarrierUIElement)baseUIElement; carrierUIElement.Grid = grid; } if (baseUIElement is LabwareUIElement) { LabwareUIElement labwareUIElement = (LabwareUIElement)baseUIElement; Labware labware = labwareUIElement.Labware; CarrierUIElement carrierUIElement = null; int siteID = -1; bool bFound = FindSuitableCarrier(position, labware.TypeName, container, ref carrierUIElement, ref siteID); if (bFound) { if (labware.ParentCarrier != null) { labware.ParentCarrier.Labwares.Remove(labware); } labware.SiteID = siteID; if (labware.IsDitiBox) { var ditiInfo = workingLayout.DitiInfo.DitiBoxInfos.Find(x => x.label == labware.Label); if (ditiInfo == null) { DitiType ditiType = DitiBox.Parse(labware.TypeName); workingLayout.DitiInfo.DitiBoxInfos.Add(new DitiBoxInfo(ditiType, labware.Label, 96)); } } } carrierUIElement.Carrier.AddLabware(labware); } }
public DitiEditor(Labware selectedLabware, Layout layout) { _layout = layout; _labware = selectedLabware; InitializeComponent(); this.Loaded += DitiEidtor_Loaded; SetOk = false; }
private void NewLabware_Executed(object sender, ExecutedRoutedEventArgs e) { Labware labware = new Labware(); LabwareEditor editor = new LabwareEditor(AddInfo, this); editor.DataContext = labware; this.AddTabItem(editor); }
private void DuplicateLabware_Executed(object sender, ExecutedRoutedEventArgs e) { Labware labware = ((Labware)this.lb_labwares.SelectedItem).Clone() as Labware; LabwareEditor editor = new LabwareEditor(AddInfo, this); editor.DataContext = labware; this.AddTabItem(editor); }
/// <summary> /// ctor /// </summary> /// <param name="labware"></param> /// <param name="boundingSize"></param> public LabwareUIElementFixedSize(Labware labware, Size boundingSize) { this._labware = labware; UpdateContainerSize(boundingSize); AddWellVisuals(); _singleSelection = new SingleSelection(wellVisuals, _tightBoundingRect, _labware); this.MouseMove += LabwareUIElementFixedSize_MouseMove; this.MouseUp += LabwareUIElementFixedSize_MouseUp; }
/// <summary> /// ctor /// </summary> /// <param name="labware"></param> public LabwareUIElement(Labware labware) : base((WareBase)labware) { this._labware = labware; _children.Add(CreateViusal()); AspirateWellIDs = new List <int>(); DispenseWellIDs = new List <int>(); timer.Elapsed += timer_Elapsed; timer.Start(); }
private void DoTracking(Labware labware, double volume, LiquidClass liquidClass) { double crossSectionArea = labware.WellsInfo.WellRadius * labware.WellsInfo.WellRadius * Math.PI; double distance2Go = volume / crossSectionArea; double seconds = volume / liquidClass.AspirationSinglePipetting.AspirationSpeed; double goDownSpeed = distance2Go / seconds; var res = MoveController.Instance.MoveZAtSpeed(_eARM.左臂, distance2Go, goDownSpeed); ThrowCriticalException(res, "液面跟随!"); }
private void OnLabwareXmlFileCreated(object sender, FileSystemEventArgs e) { Labware labware = this.CreatedPipettorElement.Pop() as Labware; if (labware == null) { throw new InvalidOperationException("Labware instance was supposed to be existing."); } this._labwares.Add(e.FullPath, labware); this.PropertyChanged(this, new PropertyChangedEventArgs("Labwares")); }
private static void RemoveLabware(Grid container, Labware labware) { for (int i = 0; i < container.Children.Count; i++) { if (container.Children[i] is LabwareUIElement) { if (((LabwareUIElement)container.Children[i]).Labware.Equals(labware)) { container.Children.RemoveAt(i); } } } }
private void SetDitiPosition_CanExecute(object sender, CanExecuteRoutedEventArgs e) { if (e.Parameter is Labware) { Labware labware = e.Parameter as Labware; if (labware.IsDitiBox) { e.CanExecute = true; return; } } e.CanExecute = false; }
public void CarrierWithLabwaresSerializationTest() { Carrier carrier = new Carrier(); carrier.Dimension.XLength = 40; carrier.Dimension.YLength = 500; //carrier.AllowedLabwareType = 2; carrier.GridID = 1; #region Labware1 Labware labware1 = new Labware(); //labware1.Name = "Labware1"; //labware1.XLength = 85; //labware1.YLength = 125; //labware1.Height = 45; //labware1.WellRadius = 4; //labware1.NumberOfWellsX = 8; //labware1.NumberOfWellsY = 12; //labware1.FirstWellPosition = new Point(8, 10); //labware1.LastWellPosition = new Point(78, 118); //labware1.ZTravel = 4200; //labware1.ZStart = 4000; //labware1.ZDispense = 3500; //labware1.ZMax = 50; carrier.AddLabware(labware1); #endregion #region Labware2 Labware labware2 = new Labware(); //labware2.Name = "Labware2"; //labware2.XLength = 85; //labware2.YLength = 125; //labware2.Height = 45; //labware2.WellRadius = 4; //labware2.NumberOfWellsX = 8; //labware2.NumberOfWellsY = 12; //labware2.FirstWellPosition = new Point(8, 10); //labware2.LastWellPosition = new Point(78, 118); //labware2.ZTravel = 4200; //labware2.ZStart = 4000; //labware2.ZDispense = 3500; //labware2.ZMax = 50; carrier.AddLabware(labware2); #endregion string xmlFileName = Path.Combine(UnitTestHelper.GetTestModuleDirectory(), "testresult", "CarrierWithLabwaresSerializeTest.xml"); SerializationHelper.Serialize <Carrier>(xmlFileName, carrier); Carrier carrier_deserialized = SerializationHelper.Deserialize <Carrier>(xmlFileName); }
private void btnNewLabware_Click(object sender, RoutedEventArgs e) { Labware labware = new Labware(); labware.ZValues = new ZValues(360, 625, 665, 1610); labware.Dimension = new Dimension(25, 305); labware.TypeName = "lab1"; labware.SiteID = 1; labware.WellsInfo = new WellsInfo(0, -3.2, 0, 278.8, 1, 16, BottomShape.Flat, 50); labware.TypeName = LabwareBuildInType.Tubes16Pos13_100MM.ToString(); labware.BackgroundColor = Color.FromArgb(255, 255, 0, 0); labware.ParentCarrier = null; //layoutEditor.AddCandidate(new LabwareUIElement(labware)); UserControlContainer.InvalidateVisual(); }
private void EditLabware_Executed(object sender, ExecutedRoutedEventArgs e) { Labware selectedLabware = e.Parameter != null? (Labware)e.Parameter: (Labware)this.lb_labwares.SelectedItem; if (selectedLabware == null || this.ActivateEditingTab(selectedLabware.TypeName)) { return; } LabwareEditor editor = new LabwareEditor(AddInfo, this); selectedLabware.CalculatePositionInLayout(); editor.DataContext = selectedLabware; this.AddTabItem(editor); }
private bool IsEnoughLiquid(Labware labware, double volume, int subMergeMM) { double x, y, z; x = y = z = 0; MoveController.Instance.GetCurrentPosition(_eARM.左臂, ref x, ref y, ref z); if (x == -1 || y == -1 || z == -1) { throw new CriticalException("无法获取到位置!"); } double crossSectionArea = labware.WellsInfo.WellRadius * labware.WellsInfo.WellRadius * Math.PI; double zMax = labware.ZValues.ZMax; //mm return(crossSectionArea * (zMax - z - subMergeMM) > volume); }
void PipettingEditorTestharness_Loaded(object sender, RoutedEventArgs e) { Labware labware1 = new Labware(); labware1.ZValues = new ZValues(360, 625, 665, 1610); labware1.Dimension = new Dimension(127, 85.5); labware1.TypeName = "16Pos Tubes"; labware1.Label = "lab1"; labware1.SiteID = 1; labware1.WellsInfo = new WellsInfo(14.4, 11.5, 99 + 14.4, 74.5, 12, 8, BottomShape.Flat, 4); labware1.TypeName = LabwareBuildInType.Plate96_05ML.ToString(); labware1.BackgroundColor = Color.FromArgb(255, 255, 0, 0); labware1.ParentCarrier = null; container.Children.Add(new PipettingCommandEidtor(labware1, false)); }
public void CarrierSerializeToXmlFileWithLabwaresTest() { Carrier carrier = new Carrier(); carrier.Dimension.XLength = 40; carrier.Dimension.YLength = 500; carrier.GridID = 3; carrier.Sites.Add(new Site(0, 0, 0, 10, 10, 1)); Labware labware1 = new Labware(); labware1.Label = "Labware1"; labware1.Dimension.XLength = 85; labware1.Dimension.YLength = 125; labware1.WellsInfo.WellRadius = 4; labware1.WellsInfo.NumberOfWellsX = 8; labware1.WellsInfo.NumberOfWellsY = 12; labware1.WellsInfo.FirstWellPositionX = 8; labware1.WellsInfo.FirstWellPositionY = 10; labware1.WellsInfo.LastWellPositionX = 78; labware1.WellsInfo.LastWellPositionX = 118; labware1.ZValues.ZTravel = 4200; labware1.ZValues.ZStart = 4000; labware1.ZValues.ZDispense = 3500; labware1.ZValues.ZMax = 50; carrier.AddLabware(labware1); Labware labware2 = new Labware(); labware2.Label = "Labware2"; labware2.Dimension.XLength = 85; labware2.Dimension.YLength = 125; labware2.WellsInfo.WellRadius = 4; labware2.WellsInfo.NumberOfWellsX = 8; labware2.WellsInfo.NumberOfWellsY = 12; labware1.WellsInfo.FirstWellPositionX = 8; labware1.WellsInfo.FirstWellPositionY = 10; labware1.WellsInfo.LastWellPositionX = 78; labware1.WellsInfo.LastWellPositionX = 118; labware2.ZValues.ZTravel = 4200; labware2.ZValues.ZStart = 4000; labware2.ZValues.ZDispense = 3500; labware2.ZValues.ZMax = 50; carrier.AddLabware(labware2); carrier.Serialize(this._xmlFileWithLabwarePath); }
private void CreateTwoLabwares() { Labware labware1 = new Labware(); labware1.ZValues = new ZValues(360, 625, 665, 1610); labware1.Dimension = new Dimension(25, 305); labware1.Label = "lab1"; labware1.SiteID = 1; labware1.WellsInfo = new WellsInfo(0, -3.2, 0, 278.8, 1, 16, BottomShape.Flat, 5); labware1.TypeName = LabwareBuildInType.Tubes16Pos13_100MM.ToString(); labware1.BackgroundColor = Color.FromArgb(255, 255, 0, 0); labware1.ParentCarrier = null; Labware labware2 = new Labware(); labware2.ZValues = new ZValues(360, 625, 665, 1610); labware2.Dimension = new Dimension(127, 85.5); labware2.Label = "lab2"; labware2.SiteID = 1; labware2.WellsInfo = new WellsInfo(2.4, 2.9, 101.4, 60.9, 12, 8, BottomShape.Flat, 3.3); labware2.TypeName = LabwareBuildInType.Plate96_05ML.ToString(); labware2.BackgroundColor = Color.FromArgb(255, 255, 0, 0); labware2.ParentCarrier = null; Labware labware3 = new Labware(); labware3.ZValues = new ZValues(360, 625, 665, 1610); labware3.Dimension = new Dimension(127, 85.5); labware3.Label = "lab3"; labware3.SiteID = 1; labware3.WellsInfo = new WellsInfo(2.4, 2.9, 101.4, 60.9, 6, 4, BottomShape.Flat, 6.0); labware3.TypeName = LabwareBuildInType.Plate24_2ML.ToString(); labware3.BackgroundColor = Color.FromArgb(255, 100, 255, 0); labware3.ParentCarrier = null; Carrier carrier1 = new Carrier(BuildInCarrierType.MP_3POS); Carrier carrier2 = new Carrier(BuildInCarrierType.Tube13mm_16POS); wares.Add(labware1); wares.Add(labware2); wares.Add(labware3); wares.Add(carrier1); wares.Add(carrier2); lstboxLabwares.ItemsSource = wares; }
/// <summary> /// update the ware, once it has been changed in editor /// </summary> /// <param name="ware"></param> public void UpdateWare(WareBase ware) { List <BasewareUIElement> thisTypeUIElements = FindUIElement(ware.TypeName); if (thisTypeUIElements.Count == 0) { return; } if (ware.GetType() == typeof(Carrier)) { Carrier carrier = (Carrier)ware; thisTypeUIElements.ForEach(x => UpdateCarrier(carrier, (CarrierUIElement)x)); } else { Labware labware = (Labware)ware; thisTypeUIElements.ForEach(x => ReplaceLabware(labware, (LabwareUIElement)x)); } }
void MainWindow_Loaded(object sender, RoutedEventArgs e) { Labware labware1 = new Labware(); labware1.ZValues = new ZValues(360, 625, 665, 1610); labware1.Dimension = new Dimension(1270, 855); labware1.TypeName = "16Pos Tubes"; labware1.Label = "lab1"; labware1.SiteID = 1; labware1.WellsInfo = new WellsInfo(144, 115, 990 + 144, 745, 12, 8, BottomShape.Flat, 40); labware1.TypeName = LabwareBuildInType.Plate96_05ML.ToString(); labware1.BackgroundColor = Color.FromArgb(255, 255, 0, 0); labware1.ParentCarrier = null; LabwareUIElementFixedSize labwareUIElement = new LabwareUIElementFixedSize(labware1, new Size(400, 400)); grid1.Children.Add(labwareUIElement); this.MouseMove += MainWindow_MouseMove; }
/// <summary> /// create UIElement /// </summary> /// <param name="wareBase"></param> /// <param name="existingUIElements"/> /// <returns></returns> public static BasewareUIElement CreateUIElement(WareBase wareBase, UIElementCollection existingUIElements) { BasewareUIElement newUIElement; if (wareBase is Labware) { Labware labware = ((Labware)wareBase).Clone() as Labware; List <string> existingLabels = GetExistingLabels(existingUIElements); string newLabel = FindNextLabelName(existingLabels); labware.Label = newLabel; newUIElement = new LabwareUIElement(labware); } else { Carrier carrier = ((Carrier)wareBase).Clone() as Carrier; newUIElement = new CarrierUIElement((Carrier)carrier); } newUIElement.Selected = true; return(newUIElement); }
/// <summary> /// Draw the worktable with pins, and the current DitiBox /// </summary> /// <param name="drawingContext"></param> public void Draw(DrawingContext drawingContext) { for (int i = 0; i < worktable.GridCount; i++) { DrawPinsSameGrid(i, drawingContext); } DrawBorder(worktable.Size, drawingContext); //if(layout.DitiInfo.DitiInfoItems.Count !=) foreach (var ditiBoxInfo in layout.DitiInfo.DitiBoxInfos) { Labware labware = layout.FindLabware(ditiBoxInfo.label); if (labware != null) { labware.CalculatePositionInLayout(); var position = labware.GetAbsPosition(96); position.X += 18; VisualCommon.DrawCircle(position, 6, drawingContext, Colors.Red, true); } } }
private void SetDitiPosition_Executed(object sender, ExecutedRoutedEventArgs e) { LayoutEditor layoutEditor = GetLayoutEditor(); if (layoutEditor == null) { AddErrorInfo("找不到布局!"); return; } Labware labware = e.Parameter as Labware; DitiEditor ditiEditor = new DitiEditor(labware, layoutEditor.Layout); ditiEditor.ShowDialog(); if (!ditiEditor.SetOk) { return; } var ditibox = layoutEditor.Layout.DitiInfo.DitiBoxInfos.Find(x => x.label == labware.Label); ditibox.count = ditiEditor.RemainTipCount; }
public Labware CreateDiti1000(string label, int site) { Labware labware = new Labware(); labware.TypeName = LabwareBuildInType.Diti1000.ToString(); labware.Dimension.XLength = 125.5; labware.Dimension.YLength = 85; labware.WellsInfo.WellRadius = 4; labware.WellsInfo.NumberOfWellsX = 8; labware.WellsInfo.NumberOfWellsY = 12; labware.WellsInfo.FirstWellPositionX = 8; labware.WellsInfo.FirstWellPositionY = 10; labware.WellsInfo.LastWellPositionX = 78; labware.WellsInfo.LastWellPositionX = 118; labware.SiteID = site; labware.ZValues.ZTravel = 300; labware.ZValues.ZStart = 600; labware.ZValues.ZDispense = 1000; labware.ZValues.ZMax = 1600; labware.Label = label; return(labware); }
public void LabwareSerializeToXmlFileTest() { Labware labware = new Labware(); labware.TypeName = "LabwareSerializeTest"; labware.Dimension.XLength = 800; labware.Dimension.YLength = 125; labware.WellsInfo.WellRadius = 4; labware.WellsInfo.NumberOfWellsX = 8; labware.WellsInfo.NumberOfWellsY = 12; labware.WellsInfo.FirstWellPositionX = 8; labware.WellsInfo.FirstWellPositionY = 10; labware.WellsInfo.LastWellPositionX = 78; labware.WellsInfo.LastWellPositionX = 118; labware.ZValues.ZTravel = 300; labware.ZValues.ZStart = 600; labware.ZValues.ZDispense = 1000; labware.ZValues.ZMax = 1600; labware.Serialize(this._xmlFilePath); }
void LabwareEditor_Loaded(object sender, RoutedEventArgs e) { try { TeachingControllerDelegate.Instance.Controller.Init(); } catch (CriticalException ex) { if (ex.Message == "Send_fail") { MessageBox.Show("初始化失败,可能是机器未通电"); } } labware = this.DataContext as Labware; int index = -1; if (labware.ParentCarrier != null) { int tempIndex = 0; foreach (var carrier in labware.AllCarriers) { if (carrier.TypeName == labware.ParentCarrier.TypeName) { index = tempIndex; break; } } if (index != -1) { cmbCalibCarrier.SelectedIndex = index; } } labware.CalculatePositionInLayout(); GetCurrentPositon(); curPositionPanel.DataContext = xyz; StartCheckingInput(); }