public cWell(cDescriptor Desc, int Col, int Row, cScreening screenParent, cPlate CurrentPlate) { this.Parent = screenParent; this.AssociatedPlate = CurrentPlate; this.ListDescriptors = new List<cDescriptor>(); this.ListDescriptors.Add(Desc); this.PosX = Col; this.PosY = Row; this.CurrentColor = this.Parent.GlobalInfo.GetColor(ClassForClassif); }
public cWell(string FileName, cScreening screenParent, cPlate CurrentPlate) { this.Parent = screenParent; this.AssociatedPlate = CurrentPlate; StreamReader sr = new StreamReader(FileName); int Idx; string NewLine; string TmpLine; string line; // we have to build the descriptor list if (screenParent.ListDescriptors.Count == 0) { Idx = FileName.LastIndexOf("\\"); NewLine = FileName.Remove(0, Idx + 1); TmpLine = NewLine; Idx = TmpLine.IndexOf("x"); NewLine = TmpLine.Remove(Idx); if (!int.TryParse(NewLine, out this.PosX)) { MessageBox.Show("Error in load the current file.\n", "Loading error !", MessageBoxButtons.OK, MessageBoxIcon.Error); sr.Close(); return; } NewLine = TmpLine.Remove(0, Idx + 1); Idx = NewLine.IndexOf("."); TmpLine = NewLine.Remove(Idx); this.PosY = Convert.ToInt16(TmpLine); line = sr.ReadLine(); while (line != null) { if (line != null) { Idx = line.IndexOf("\t"); string DescName = line.Remove(Idx); List<double> readData = new List<double>(); NewLine = line.Remove(0, Idx + 1); line = NewLine; Idx = line.IndexOf("\t"); int NumValue = 0; while (Idx > 0) { string DescValue = line.Remove(Idx); double CurrentValue = Convert.ToDouble(DescValue); readData.Add(CurrentValue); NewLine = line.Remove(0, Idx + 1); line = NewLine; Idx = line.IndexOf("\t"); NumValue++; } if (line.Length > 0) { double Value = Convert.ToDouble(line); readData.Add(Value); } // first check if the descriptor exist screenParent.ListDescriptors.AddNew(new cDescriptorsType(DescName, true, NumValue)); } line = sr.ReadLine(); } sr.Close(); } this.ListDescriptors = new List<cDescriptor>(); sr = new StreamReader(FileName); Idx = FileName.LastIndexOf("\\"); NewLine = FileName.Remove(0, Idx + 1); TmpLine = NewLine; Idx = TmpLine.IndexOf("x"); NewLine = TmpLine.Remove(Idx); this.PosX = Convert.ToInt16(NewLine); NewLine = TmpLine.Remove(0, Idx + 1); Idx = NewLine.IndexOf("."); TmpLine = NewLine.Remove(Idx); this.PosY = Convert.ToInt16(TmpLine); line = sr.ReadLine(); int IDxLine = 0; while (line != null) { if (line != null) { Idx = line.IndexOf("\t"); string DescName = line.Remove(Idx); List<double> readData = new List<double>(); NewLine = line.Remove(0, Idx + 1); line = NewLine; Idx = line.IndexOf("\t"); while (Idx > 0) { string DescValue = line.Remove(Idx); double CurrentValue = Convert.ToDouble(DescValue); readData.Add(CurrentValue); NewLine = line.Remove(0, Idx + 1); line = NewLine; Idx = line.IndexOf("\t"); } if (line.Length > 0) { double Value = Convert.ToDouble(line); readData.Add(Value); } cDescriptor CurrentDesc = new cDescriptor(readData.ToArray(), 0, screenParent.ListDescriptors[IDxLine].GetBinNumber() - 1, screenParent.ListDescriptors[IDxLine], this.Parent/* DescName*/); this.ListDescriptors.Add(CurrentDesc); } line = sr.ReadLine(); IDxLine++; } sr.Close(); this.CurrentColor = this.Parent.GlobalInfo.GetColor(ClassForClassif); return; }
private void AddCorrelatedSquareDescItem(object sender, EventArgs e) { cDescriptorsType ColumnType = new cDescriptorsType("Square(" + CompleteScreening.ListDescriptors[IntToTransfer].GetName() + ")", true, 1, GlobalInfo); CompleteScreening.ListDescriptors.AddNew(ColumnType); foreach (cPlate TmpPlate in CompleteScreening.ListPlatesAvailable) { foreach (cWell Tmpwell in TmpPlate.ListActiveWells) { List<cDescriptor> LDesc = new List<cDescriptor>(); cDescriptor NewDesc = new cDescriptor(Math.Pow(Tmpwell.ListDescriptors[IntToTransfer].GetValue(), 2), ColumnType, CompleteScreening); LDesc.Add(NewDesc); Tmpwell.AddDescriptors(LDesc); } } CompleteScreening.ListDescriptors.UpDateDisplay(); CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); }
private void AverageDescItem(object sender, EventArgs e) { //int NumBin = CompleteScreening.ListDescriptors[IntToTransfer].GetBinNumber(); // first we update the descriptor cDescriptorsType NewAverageType = new cDescriptorsType("Average(" + CompleteScreening.ListDescriptors[IntToTransfer].GetName() + ")", true, 1, GlobalInfo); CompleteScreening.ListDescriptors.AddNew(NewAverageType); foreach (cPlate TmpPlate in CompleteScreening.ListPlatesAvailable) { foreach (cWell Tmpwell in TmpPlate.ListActiveWells) { List<cDescriptor> LDesc = new List<cDescriptor>(); cDescriptor NewDesc = new cDescriptor(Tmpwell.ListDescriptors[IntToTransfer].Histogram.GetAverageValue(), NewAverageType, CompleteScreening); LDesc.Add(NewDesc); Tmpwell.AddDescriptors(LDesc); } } CompleteScreening.ListDescriptors.UpDateDisplay(); CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); }
private void SplitDescItem(object sender, EventArgs e) { int NumBin = CompleteScreening.ListDescriptors[IntToTransfer].GetBinNumber(); // first we update the descriptor for (int i = 0; i < NumBin; i++) CompleteScreening.ListDescriptors.AddNew(new cDescriptorsType(CompleteScreening.ListDescriptors[IntToTransfer].GetName() + "_" + i, true, 1, GlobalInfo)); foreach (cPlate TmpPlate in CompleteScreening.ListPlatesAvailable) { foreach (cWell Tmpwell in TmpPlate.ListActiveWells) { List<cDescriptor> LDesc = new List<cDescriptor>(); for (int i = 0; i < NumBin; i++) { cDescriptor NewDesc = new cDescriptor(Tmpwell.ListDescriptors[IntToTransfer].GetHistovalue(i), CompleteScreening.ListDescriptors[i + IntToTransfer + 1], CompleteScreening); LDesc.Add(NewDesc); } Tmpwell.AddDescriptors(LDesc); } } CompleteScreening.ListDescriptors.UpDateDisplay(); CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); }
private void SumCheckedDescToDescriptorItem(object sender, EventArgs e) { string NewName = ""; for (int Idx = 0; Idx < CompleteScreening.GlobalInfo.WindowHCSAnalyzer.checkedListBoxActiveDescriptors.Items.Count; Idx++) { if (CompleteScreening.ListDescriptors[Idx].IsActive()) if (CompleteScreening.ListDescriptors[Idx].GetBinNumber() == 1) { NewName += CompleteScreening.ListDescriptors[Idx].GetName() + "+"; } else { MessageBox.Show("Descriptor length not consistent (" + CompleteScreening.ListDescriptors[Idx].GetName() + " : " + CompleteScreening.ListDescriptors[Idx].GetBinNumber() + " bins", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } cDescriptorsType ColumnType = new cDescriptorsType(NewName.Remove(NewName.Length - 1), true, 1, GlobalInfo); CompleteScreening.ListDescriptors.AddNew(ColumnType); foreach (cPlate TmpPlate in CompleteScreening.ListPlatesAvailable) { foreach (cWell Tmpwell in TmpPlate.ListActiveWells) { List<cDescriptor> LDesc = new List<cDescriptor>(); double NewValue = 0; for (int IdxActiveDesc = 0; IdxActiveDesc < CompleteScreening.ListDescriptors.Count - 1; IdxActiveDesc++) { if (CompleteScreening.ListDescriptors[IdxActiveDesc].IsActive()) NewValue += Tmpwell.ListDescriptors[IdxActiveDesc].GetValue(); } cDescriptor NewDesc = new cDescriptor(NewValue, ColumnType, CompleteScreening); LDesc.Add(NewDesc); Tmpwell.AddDescriptors(LDesc); } } CompleteScreening.ListDescriptors.UpDateDisplay(); CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); }
private void RowToDescriptorItem(object sender, EventArgs e) { cDescriptorsType RowType = new cDescriptorsType("Row", true, 1, GlobalInfo); CompleteScreening.ListDescriptors.AddNew(RowType); foreach (cPlate TmpPlate in CompleteScreening.ListPlatesAvailable) { foreach (cWell Tmpwell in TmpPlate.ListActiveWells) { List<cDescriptor> LDesc = new List<cDescriptor>(); cDescriptor NewDesc = new cDescriptor(Tmpwell.GetPosY(), RowType, CompleteScreening); LDesc.Add(NewDesc); Tmpwell.AddDescriptors(LDesc); } } CompleteScreening.ListDescriptors.UpDateDisplay(); CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); }
public string GeneratePCADescriptor(cExtendPlateList PlatesToProcess, int NumberOfAxis, int NeutralClass) { int NumWell = 0; int NumWellForLearning = 0; foreach (cPlate CurrentPlate in PlatesToProcess) { NumWellForLearning += CurrentPlate.GetNumberOfWellOfClass(NeutralClass); NumWell += CompleteScreening.GetCurrentDisplayPlate().GetNumberOfActiveWells(); } if (NumWellForLearning == 0) { MessageBox.Show("No well identified !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } int NumDesc = CompleteScreening.GetNumberOfActiveDescriptor(); if (NumDesc <= 1) { MessageBox.Show("More than one descriptor are required for this operation", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } double[,] DataForLDA = new double[NumWellForLearning, CompleteScreening.GetNumberOfActiveDescriptor() + 1]; // return; Matrix EigenVectors = PCAComputation(DataForLDA, NumWellForLearning, NumWell, NumDesc, NeutralClass, PlatesToProcess); string AxeName = ""; int IDxDesc = 0; //for (int Desc = 0; Desc < CompleteScreening.ListDescriptors.Count; Desc++) //{ // if (CompleteScreening.ListDescriptors[Desc].IsActive() == false) continue; // // AxeName += String.Format("{0:0.##}", EigenVectors.getElement(CompleteScreening.ListDescriptors.Count - 1, 0)) + "x" + CompleteScreening.ListDescriptorName[CompleteScreening.ListDescriptors.Count - 1]; //} int OriginalDescNumber = CompleteScreening.GlobalInfo.WindowHCSAnalyzer.checkedListBoxActiveDescriptors.Items.Count; for (int AxesIdx = 0; AxesIdx < NumberOfAxis; AxesIdx++) { //for (int Idx = 0; Idx < CompleteScreening.GlobalInfo.WindowHCSAnalyzer.checkedListBoxActiveDescriptors.Items.Count; Idx++) //{ // if (CompleteScreening.ListDescriptors[Idx].IsActive()) // if (CompleteScreening.ListDescriptors[Idx].GetBinNumber() == 1) // { // AxeName += String.Format("{0:0.###}", EigenVectors.getElement(IDxDesc++, AxesIdx)) + "x" + CompleteScreening.ListDescriptors[Idx].GetName() + " + "; // } // else // { // MessageBox.Show("Descriptor length not consistent (" + CompleteScreening.ListDescriptors[Idx].GetName() + " : " + CompleteScreening.ListDescriptors[Idx].GetBinNumber() + " bins", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); // return; // } // } //cDescriptorsType ColumnType = new cDescriptorsType(AxeName.Remove(AxeName.Length - 3), true, 1); cDescriptorsType ColumnType = new cDescriptorsType("PCA_" + (AxesIdx + 1), true, 1, GlobalInfo); CompleteScreening.ListDescriptors.AddNew(ColumnType); foreach (cPlate TmpPlate in CompleteScreening.ListPlatesAvailable) { foreach (cWell Tmpwell in TmpPlate.ListActiveWells) { List<cDescriptor> LDesc = new List<cDescriptor>(); double NewValue = 0; IDxDesc = 0; // AxeName += "\nPCA_" + (AxesIdx + 1); for (int Idx = 0; Idx < OriginalDescNumber - 1; Idx++) { if (CompleteScreening.ListDescriptors[Idx].IsActive()) // AxeName += String.Format("{0:0.###}", EigenVectors.getElement(IDxDesc, AxesIdx)) + "x" + CompleteScreening.ListDescriptors[Idx].GetName() + " + "; NewValue += EigenVectors.getElement(IDxDesc++, AxesIdx) * Tmpwell.ListDescriptors[Idx].GetValue(); } cDescriptor NewDesc = new cDescriptor(NewValue, ColumnType, CompleteScreening); LDesc.Add(NewDesc); Tmpwell.AddDescriptors(LDesc); } } } CompleteScreening.ListDescriptors.UpDateDisplay(); CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); StartingUpDateUI(); return AxeName; }
private void generateHitsDistributionMapToolStripMenuItem_Click(object sender, EventArgs e) { if (CompleteScreening == null) return; List<cPanelForDisplayArray> ListPlates = new List<cPanelForDisplayArray>(); foreach (cPlate CurrentPlate in CompleteScreening.ListPlatesActive) { ListPlates.Add(new FormToDisplayPlate(CurrentPlate, CompleteScreening)); } cWindowToDisplayEntireScreening WindowToDisplayArray = new cWindowToDisplayEntireScreening(ListPlates, CompleteScreening.ListDescriptors[CompleteScreening.ListDescriptors.CurrentSelectedDescriptor].GetName(), 6); WindowToDisplayArray.checkBoxDisplayClasses.Checked = true; WindowToDisplayArray.Text = "Generate Hits Distribution Maps"; WindowToDisplayArray.Show(); System.Windows.Forms.DialogResult ResWin = MessageBox.Show("By applying this process, the current screening will be entirely updated ! Proceed ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (ResWin == System.Windows.Forms.DialogResult.No) { WindowToDisplayArray.Close(); return; } WindowToDisplayArray.Close(); if (CompleteScreening != null) CompleteScreening.Close3DView(); // CompleteScreening.ListDescriptors.RemoveDesc(CompleteScreening.ListDescriptors[IntToTransfer], CompleteScreening); cScreening MergedScreening = new cScreening("Class Screen", GlobalInfo); MergedScreening.PanelForPlate = this.panelForPlate; MergedScreening.Rows = CompleteScreening.Rows; MergedScreening.Columns = CompleteScreening.Columns; MergedScreening.ListPlatesAvailable = new cExtendPlateList(); // create the descriptor MergedScreening.ListDescriptors.Clean(); List<cDescriptorsType> ListDescType = new List<cDescriptorsType>(); List<int[][]> Values = new List<int[][]>(); for (int i = 0; i < GlobalInfo.GetNumberofDefinedClass(); i++) { cDescriptorsType DescClass = new cDescriptorsType("Class_" + i, true, 1, GlobalInfo); ListDescType.Add(DescClass); MergedScreening.ListDescriptors.AddNew(DescClass); int[][] TMpVal = new int[MergedScreening.Columns][]; for (int ii = 0; ii < MergedScreening.Columns; ii++) TMpVal[ii] = new int[MergedScreening.Rows]; Values.Add(TMpVal); } MergedScreening.ListDescriptors.CurrentSelectedDescriptor = 0; foreach (cPlate CurrentPlate in CompleteScreening.ListPlatesActive) { foreach (cWell TmpWell in CurrentPlate.ListActiveWells) { int Class = TmpWell.GetClass(); if (Class >= 0) Values[Class][TmpWell.GetPosX() - 1][TmpWell.GetPosY() - 1]++; } } cPlate NewPlate = new cPlate("Cpds", CompleteScreening.Name, MergedScreening); for (int X = 0; X < CompleteScreening.Columns; X++) for (int Y = 0; Y < CompleteScreening.Rows; Y++) { List<cDescriptor> LDesc = new List<cDescriptor>(); for (int i = 0; i < GlobalInfo.GetNumberofDefinedClass(); i++) { cDescriptor Desc = new cDescriptor(Values[i][X][Y], ListDescType[i], CompleteScreening); LDesc.Add(Desc); } cWell NewWell = new cWell(LDesc, X + 1, Y + 1, MergedScreening, NewPlate); NewWell.Name = "Well [" + (X + 1) + ":" + (Y + 1) + "]"; NewPlate.AddWell(NewWell); } // check if the plate exist already MergedScreening.AddPlate(NewPlate); MergedScreening.ListPlatesActive = new cExtendPlateList(); MergedScreening.GlobalInfo.WindowHCSAnalyzer.toolStripcomboBoxPlateList.Items.Clear(); for (int i = 0; i < MergedScreening.ListPlatesAvailable.Count; i++) { MergedScreening.ListPlatesActive.Add(MergedScreening.ListPlatesAvailable[i]); MergedScreening.GlobalInfo.WindowHCSAnalyzer.toolStripcomboBoxPlateList.Items.Add(NewPlate.Name); } CompleteScreening.ListDescriptors = MergedScreening.ListDescriptors; CompleteScreening.ListPlatesAvailable = MergedScreening.ListPlatesAvailable; CompleteScreening.ListPlatesActive = MergedScreening.ListPlatesActive; CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); CompleteScreening.CurrentDisplayPlateIdx = 0; CompleteScreening.GetCurrentDisplayPlate().DisplayDistribution(CompleteScreening.ListDescriptors.CurrentSelectedDescriptor, true); ListPlates = new List<cPanelForDisplayArray>(); for (int DescIdx = 0; DescIdx < CompleteScreening.ListDescriptors.Count; DescIdx++) { if (CompleteScreening.ListDescriptors[DescIdx].IsActive()) ListPlates.Add(new FormToDisplayDescriptorPlate(CompleteScreening.GetCurrentDisplayPlate(), CompleteScreening, DescIdx)); } cWindowToDisplayEntireDescriptors WindowToDisplayDesc = new cWindowToDisplayEntireDescriptors(ListPlates, CompleteScreening.GetCurrentDisplayPlate().Name, GlobalInfo.GetNumberofDefinedClass()); WindowToDisplayDesc.checkBoxGlobalNormalization.Checked = true; WindowToDisplayDesc.Show(); }
private void generateDRCsToolStripMenuItem_Click(object sender, EventArgs e) { int nbrofdrugs = 6; int nbrofconcentrations = 10; int nbrofdesc = 3; double[, ,] DRC = new double[nbrofconcentrations, nbrofdrugs, nbrofdesc]; float[] X1 = new float[nbrofconcentrations]; X1[0] = 1000; for (int i = 1; i < X1.Length; i++) { X1[i] = X1[i - 1] / 3; } Random Bot = new Random(); Random To = new Random(); Random Ec5 = new Random(); Random Slop = new Random(); CompleteScreening = new cScreening("Current Screen", this.GlobalInfo); CompleteScreening.Columns = nbrofconcentrations; CompleteScreening.Rows = nbrofdrugs; for (int j = 0; j < nbrofdrugs; j++) { for (int k = 0; k < nbrofdesc; k++) { float Bottom = Bot.Next(10); float Top = To.Next(80, 100); float Ec50 = Ec5.Next(40, 60); float Slope = Slop.Next(1, 5); for (int i = 0; i < X1.Length; i++) { //DRC[i, j, k] = Bottom + (Top - Bottom) / (1 + Math.Pow(((Math.Pow(10, Ec50) / Math.Pow(10, X1[0]))), Slope)); DRC[i, j, k] = Bottom + (Top - Bottom) / (1 + Math.Pow((X1[i] / Ec50), -Slope)); } } } cPlate NewPlate = new cPlate("Cpds", "Plate0", CompleteScreening); CompleteScreening.AddPlate(NewPlate); CompleteScreening.ListDescriptors.Clean(); for (int k = 0; k < nbrofdesc; k++) { cDescriptorsType DescType = new cDescriptorsType("Desc" + k, true, 1, GlobalInfo); CompleteScreening.ListDescriptors.AddNew(DescType); } for (int j = 0; j < nbrofdrugs; j++) { for (int i = 0; i < nbrofconcentrations; i++) { List<cDescriptor> LDesc = new List<cDescriptor>(); for (int k = 0; k < nbrofdesc; k++) { //DRC[i, j, k] = Bottom + (Top - Bottom) / (1 + Math.Pow(((Math.Pow(10, Ec50) / Math.Pow(10, X1[0]))), Slope)); cDescriptor CurrentDesc = new cDescriptor(DRC[i, j, k], CompleteScreening.ListDescriptors[k], CompleteScreening); LDesc.Add(CurrentDesc); } cWell NewWell = new cWell(LDesc, i+1, j+1, CompleteScreening, NewPlate); NewWell.Concentration = X1[i]; NewPlate.AddWell(NewWell); } } CompleteScreening.ListDescriptors.UpDateDisplay(); CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); StartingUpDateUI(); this.toolStripcomboBoxPlateList.Items.Clear(); for (int IdxPlate = 0; IdxPlate < CompleteScreening.ListPlatesActive.Count; IdxPlate++) { string Name = CompleteScreening.ListPlatesActive.GetPlate(IdxPlate).Name; this.toolStripcomboBoxPlateList.Items.Add(Name); PlateListWindow.listBoxPlateNameToProcess.Items.Add(Name); PlateListWindow.listBoxAvaliableListPlates.Items.Add(Name); } CompleteScreening.CurrentDisplayPlateIdx = 0; CompleteScreening.SetSelectionType(comboBoxClass.SelectedIndex - 1); UpdateUIAfterLoading(); }
private void convertDRCToWellToolStripMenuItem1_Click(object sender, EventArgs e) { System.Windows.Forms.DialogResult ResWin = MessageBox.Show("By applying this process, the current screening will be entirely updated ! Proceed ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (ResWin == System.Windows.Forms.DialogResult.No) return; //foreach (cDescriptorsType DescType in CompleteScreening.ListDescriptors) //{ // CompleteScreening.ListDescriptors.RemoveDescUnSafe(DescType, CompleteScreening); //} if (CompleteScreening != null) CompleteScreening.Close3DView(); // CompleteScreening.ListDescriptors.RemoveDesc(CompleteScreening.ListDescriptors[IntToTransfer], CompleteScreening); cScreening MergedScreening = new cScreening("Merged Screen", GlobalInfo); MergedScreening.PanelForPlate = this.panelForPlate; MergedScreening.Rows = CompleteScreening.Rows; MergedScreening.Columns = CompleteScreening.Columns; MergedScreening.ListPlatesAvailable = new cExtendPlateList(); // create the descriptor MergedScreening.ListDescriptors.Clean(); int Idesc = 0; List<cDescriptorsType> ListDescType = new List<cDescriptorsType>(); for (int i = 0; i < CompleteScreening.ListDescriptors.Count; i++) { if (!CompleteScreening.ListDescriptors[i].IsActive()) continue; cDescriptorsType DescEC50 = new cDescriptorsType("EC50_" + CompleteScreening.ListDescriptors[i].GetName(), true, 1, GlobalInfo); ListDescType.Add(DescEC50); MergedScreening.ListDescriptors.AddNew(DescEC50); cDescriptorsType DescTop = new cDescriptorsType("Top_" + CompleteScreening.ListDescriptors[i].GetName(), true, 1, GlobalInfo); ListDescType.Add(DescTop); MergedScreening.ListDescriptors.AddNew(DescTop); cDescriptorsType DescBottom = new cDescriptorsType("Bottom_" + CompleteScreening.ListDescriptors[i].GetName(), true, 1, GlobalInfo); ListDescType.Add(DescBottom); MergedScreening.ListDescriptors.AddNew(DescBottom); cDescriptorsType DescSlope = new cDescriptorsType("Slope_" + CompleteScreening.ListDescriptors[i].GetName(), true, 1, GlobalInfo); ListDescType.Add(DescSlope); MergedScreening.ListDescriptors.AddNew(DescSlope); Idesc++; } MergedScreening.ListDescriptors.CurrentSelectedDescriptor = 0; foreach (cPlate CurrentPlate in CompleteScreening.ListPlatesAvailable) { cPlate NewPlate = new cPlate("Cpds", CurrentPlate.Name + " Merged", MergedScreening); // check if the plate exist already MergedScreening.AddPlate(NewPlate); foreach (cDRC_Region CurrentRegion in CurrentPlate.ListDRCRegions) { List<cDescriptor> LDesc = new List<cDescriptor>(); Idesc = 0; int IDESCBase = 0; for (int i = 0; i < CompleteScreening.ListDescriptors.Count; i++) { if (!CompleteScreening.ListDescriptors[i].IsActive()) continue; cDRC CurrentDRC = CurrentRegion.GetDRC(CompleteScreening.ListDescriptors[IDESCBase++]); cDescriptor Desc_EC50 = new cDescriptor(CurrentDRC.EC50, ListDescType[Idesc++], CompleteScreening); LDesc.Add(Desc_EC50); cDescriptor Desc_Top = new cDescriptor(CurrentDRC.Top, ListDescType[Idesc++], CompleteScreening); LDesc.Add(Desc_Top); cDescriptor Desc_Bottom = new cDescriptor(CurrentDRC.Bottom, ListDescType[Idesc++], CompleteScreening); LDesc.Add(Desc_Bottom); cDescriptor Desc_Slope = new cDescriptor(CurrentDRC.Slope, ListDescType[Idesc++], CompleteScreening); LDesc.Add(Desc_Slope); } cWell NewWell = new cWell(LDesc, CurrentRegion.PosXMin + 1, CurrentRegion.PosYMin + 1, MergedScreening, NewPlate); NewWell.Name = "DRC [" + CurrentRegion.PosXMin + ":" + CurrentRegion.PosYMin + "]"; NewPlate.AddWell(NewWell); } } // PanelList[0].CurrentScreening.ListPlatesActive.Clear(); // PanelList[0].CurrentScreening.GlobalInfo.WindowHCSAnalyzer.RefreshInfoScreeningRichBox(); MergedScreening.ListPlatesActive = new cExtendPlateList(); for (int i = 0; i < MergedScreening.ListPlatesAvailable.Count; i++) { MergedScreening.ListPlatesActive.Add(MergedScreening.ListPlatesAvailable[i]); // MergedScreening.GlobalInfo.WindowHCSAnalyzer.toolStripcomboBoxPlateList.Items.Add(PanelList[0].CurrentScreening.ListPlatesActive[i].Name); } //PanelList[0].CurrentScreening.CurrentDisplayPlateIdx = 0; //PanelList[0].CurrentScreening.GlobalInfo.WindowHCSAnalyzer.toolStripcomboBoxPlateList.SelectedIndex = 0; //PanelList[0].CurrentScreening.GetCurrentDisplayPlate().DisplayDistribution(PanelList[0].CurrentScreening.ListDescriptors.CurrentSelectedDescriptor, false); CompleteScreening.ListDescriptors = MergedScreening.ListDescriptors; CompleteScreening.ListPlatesAvailable = MergedScreening.ListPlatesAvailable; CompleteScreening.ListPlatesActive = MergedScreening.ListPlatesActive; CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); CompleteScreening.GetCurrentDisplayPlate().DisplayDistribution(CompleteScreening.ListDescriptors.CurrentSelectedDescriptor, true); }
private void ConcentrationToDescriptorItem(object sender, EventArgs e) { cDescriptorsType ConcentrationType = new cDescriptorsType("Concentration", true, 1); CompleteScreening.ListDescriptors.AddNew(ConcentrationType); foreach (cPlate TmpPlate in CompleteScreening.ListPlatesAvailable) { foreach (cWell Tmpwell in TmpPlate.ListActiveWells) { List<cDescriptor> LDesc = new List<cDescriptor>(); cDescriptor NewDesc = new cDescriptor(Tmpwell.Concentration, ConcentrationType,CompleteScreening); LDesc.Add(NewDesc); Tmpwell.AddDescriptors(LDesc); } } CompleteScreening.ListDescriptors.UpDateDisplay(); CompleteScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < CompleteScreening.ListPlatesActive.Count; idxP++) CompleteScreening.ListPlatesActive[idxP].UpDataMinMax(); StartingUpDateUI(); }
private void buttonStartCluster_Click(object sender, EventArgs e) { FormSingleCellClusteringInfo WindowClusteringInfo = new FormSingleCellClusteringInfo(GlobalInfo); if (WindowClusteringInfo.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; Instances ListInstances = GlobalInfo.CurrentScreen.CellBasedClassification.CreateInstancesWithoutClass(dt); if ((WindowClusteringInfo.radioButtonAutomated.Checked) && (WindowClusteringInfo.radioButtonEM.Checked)) { ClusterEvaluation eval; Classes = new cExtendedList(); weka.clusterers.EM EMCluster = new EM(); if(WindowClusteringInfo.checkBoxEMAutomated.Checked) EMCluster.setNumClusters(-1); else EMCluster.setNumClusters((int)WindowClusteringInfo.numericUpDownClassNumber.Value); EMCluster.buildClusterer(ListInstances); EMCluster.getClusterModelsNumericAtts(); eval = new ClusterEvaluation(); eval.setClusterer(EMCluster); eval.evaluateClusterer(ListInstances); Classes.AddRange(eval.getClusterAssignments()); NumClusters= eval.getNumClusters(); ReDraw(); FormForCellByCellClusteringResults WindowFormForCellByCellClusteringResults = new FormForCellByCellClusteringResults(); WindowFormForCellByCellClusteringResults.richTextBoxResults.Clear(); WindowFormForCellByCellClusteringResults.richTextBoxResults.AppendText(eval.clusterResultsToString()); if (WindowFormForCellByCellClusteringResults.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; } else if (WindowClusteringInfo.radioButtonDescriptorBased.Checked) { Classes = new cExtendedList(); DataTable FinalDataTable = new DataTable(); int IdxDescForClassSelect = WindowClusteringInfo.comboBoxDescriptorForClass.SelectedIndex; for (int IdxWell = 0; IdxWell < GlobalInfo.ListSelectedWell.Count; IdxWell++) { cWell TmpWell = GlobalInfo.ListSelectedWell[IdxWell]; // if (IdxWell == 0) if (TmpWell.ListDescriptors[IdxDescForClassSelect].GetAssociatedType().DataType == eDataType.HISTOGRAM) { Classes.AddRange(TmpWell.ListDescriptors[IdxDescForClassSelect].GetOriginalValues()); } else { double ClasseValue = TmpWell.ListDescriptors[IdxDescForClassSelect].GetValue(); for (int IdxCell = 0; IdxCell < TmpWell.CellNumber; IdxCell++) Classes.Add(ClasseValue); //TmpWell.AddDescriptors } } List<double> ListClassValues = new List<double>(); foreach (var item in Classes.Distinct()) { ListClassValues.Add(item); } //(List<double>)Classes.Distinct(); NumClusters = ListClassValues.Count(); //Classes = new cExtendedList(); for (int IdxClust = 0; IdxClust < Classes.Count; IdxClust++) { for (int IdxCl = 0; IdxCl < ListClassValues.Count; IdxCl++) { if (ListClassValues[IdxCl] == Classes[IdxClust]) { Classes[IdxClust] = IdxCl; break; } } //Classes[IdxClust] = ListClassValues.Find(Classes[IdxClust]); } //int NumClusters = ReDraw(); } // ReDraw(); //if (MessageBox.Show("Do you want perform a j48 training process ?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != System.Windows.Forms.DialogResult.Yes) return; weka.core.FastVector attVals = new FastVector(); for (int i = 0; i < NumClusters; i++) attVals.addElement("Class__" + (i).ToString()); ListInstances.insertAttributeAt(new weka.core.Attribute("Class__", attVals), ListInstances.numAttributes()); for (int i = 0; i < Classes.Count; i++) { ListInstances.get(i).setValue(ListInstances.numAttributes() - 1, Classes[i]); } ListInstances.setClassIndex(ListInstances.numAttributes() - 1); GlobalInfo.CurrentScreen.CellBasedClassification.ClassificationModel_CellBased = new weka.classifiers.trees.J48(); GlobalInfo.CurrentScreen.CellBasedClassification.SetJ48Tree((weka.classifiers.trees.J48)GlobalInfo.CurrentScreen.CellBasedClassification.ClassificationModel_CellBased,Classes.Count); GlobalInfo.CurrentScreen.CellBasedClassification.J48Model.setMinNumObj((int)GlobalInfo.OptionsWindow.numericUpDownJ48MinNumObjects.Value); weka.core.Instances train = new weka.core.Instances(ListInstances, 0, ListInstances.numInstances()); GlobalInfo.CurrentScreen.CellBasedClassification.ClassificationModel_CellBased.buildClassifier(train); GlobalInfo.ConsoleWriteLine(GlobalInfo.CurrentScreen.CellBasedClassification.ClassificationModel_CellBased.ToString()); GlobalInfo.CurrentScreen.CellBasedClassification.evaluation = new weka.classifiers.Evaluation(ListInstances); GlobalInfo.CurrentScreen.CellBasedClassification.evaluation.crossValidateModel(GlobalInfo.CurrentScreen.CellBasedClassification.ClassificationModel_CellBased, ListInstances, 2, new java.util.Random(1)); GlobalInfo.CurrentScreen.CellBasedClassification.DisplayTree(GlobalInfo).Show(); FormForCellbyCellClassif WindowFormForCellbyCellClassif = new FormForCellbyCellClassif(); if (WindowFormForCellbyCellClassif.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; int DescrCount = GlobalInfo.CurrentScreen.ListDescriptors.Count; // first we update the descriptor for (int i = 0; i < ListInstances.numClasses(); i++) GlobalInfo.CurrentScreen.ListDescriptors.AddNew(new cDescriptorsType("Ratio_Class " + i, true, 1, GlobalInfo)); FormForProgress ProgressWindow = new FormForProgress(); ProgressWindow.Show(); int IdxProgress = 0; int MaxProgress = 0; foreach (cPlate CurrentPlateToProcess in GlobalInfo.CurrentScreen.ListPlatesAvailable) MaxProgress += CurrentPlateToProcess.ParentScreening.Columns * CurrentPlateToProcess.ParentScreening.Rows; ProgressWindow.progressBar.Maximum = MaxProgress; attVals = new FastVector(); for (int i = 0; i < NumClusters; i++) attVals.addElement(i.ToString()); //ParallelOptions options = new ParallelOptions(); //options.MaxDegreeOfParallelism = -1; // -1 is for unlimited. 1 is for sequential. //Stopwatch stopwatch = new Stopwatch(); //stopwatch.Start(); //////for (int PlateIdx = 0; PlateIdx < NumberOfPlates; PlateIdx++) //int NumberOfPlates = CompleteScreening.ListPlatesAvailable.Count; //Parallel.For(0, NumberOfPlates, options, (PlateIdx) => //{ // cPlate CurrentPlateToProcess = CompleteScreening.ListPlatesActive.GetPlate((string)Parent.GlobalInfo.PlateListWindow.listBoxPlateNameToProcess.Items[PlateIdx]); // for (int row = 0; row < Parent.Rows; row++) // for (int col = 0; col < Parent.Columns; col++) // { // TempWell = CurrentPlateToProcess.GetWell(col, row, false); // if (TempWell == null) continue; // else // { // if (TempWell.GetClass() == this.ClassForClassif) // Pos.Add(TempWell.ListDescriptors[Parent.ListDescriptors.CurrentSelectedDescriptor].GetValue()); // } // } //} //); foreach (cPlate CurrentPlateToProcess in GlobalInfo.CurrentScreen.ListPlatesAvailable) //Parallel.ForEach(GlobalInfo.CurrentScreen.ListPlatesActive, options, CurrentPlateToProcess => { //Parallel.ForEach(CurrentPlateToProcess.ListActiveWells, options, TmpWell => for(int j=0;j<CurrentPlateToProcess.ParentScreening.Rows;j++) for (int k = 0; k < CurrentPlateToProcess.ParentScreening.Columns; k++) { cWell TmpWell = CurrentPlateToProcess.GetWell(k, j, false); if (TmpWell == null) continue; ProgressWindow.progressBar.Value = IdxProgress++; //DataTable FinalDataTable = new DataTable(); //TmpWell.AssociatedPlate.DBConnection = new cDBConnection(TmpWell.AssociatedPlate, TmpWell.SQLTableName); //TmpWell.AssociatedPlate.DBConnection.AddWellToDataTable(TmpWell, FinalDataTable, false); DataTable FinalDataTable = TmpWell.GetDescDataTable(true); Instances ListInstancesTOClassify = GlobalInfo.CurrentScreen.CellBasedClassification.CreateInstancesWithoutClass(FinalDataTable); ListInstancesTOClassify.insertAttributeAt(new weka.core.Attribute("Class", attVals), ListInstancesTOClassify.numAttributes()); ListInstancesTOClassify.setClassIndex(ListInstancesTOClassify.numAttributes() - 1); cExtendedList ListClasses = new cExtendedList(); for (int i = 0; i < ListInstancesTOClassify.numInstances(); i++) { double classId = GlobalInfo.CurrentScreen.CellBasedClassification.ClassificationModel_CellBased.classifyInstance(ListInstancesTOClassify.instance(i)); ListClasses.Add(classId); } List<double[]> Histo = ListClasses.CreateHistogram(0, ListInstances.numClasses() - 1, ListInstances.numClasses() - 1); List<cDescriptor> LDesc = new List<cDescriptor>(); for (int IdxHisto = 0; IdxHisto < Histo[1].Length; IdxHisto++) { double Value = (100.0 * Histo[1][IdxHisto]) / (double)ListInstancesTOClassify.numInstances(); cDescriptor NewDesc = new cDescriptor(Value, GlobalInfo.CurrentScreen.ListDescriptors[IdxHisto + DescrCount], GlobalInfo.CurrentScreen); LDesc.Add(NewDesc); } TmpWell.AddDescriptors(LDesc); //TmpWell.AssociatedPlate.DBConnection.DB_CloseConnection(); }//); } ProgressWindow.Close(); if (WindowFormForCellbyCellClassif.checkBoxKeepOriginalDesc.Checked == false) { // int DescNumToRemove = GlobalInfo.CurrentScreen.ListDescriptors.Count - for (int IdxDesc = 0; IdxDesc < DescrCount; IdxDesc++) GlobalInfo.CurrentScreen.ListDescriptors.RemoveDesc(GlobalInfo.CurrentScreen.ListDescriptors[0], GlobalInfo.CurrentScreen); } GlobalInfo.CurrentScreen.ListDescriptors.UpDateDisplay(); GlobalInfo.CurrentScreen.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < GlobalInfo.CurrentScreen.ListPlatesActive.Count; idxP++) GlobalInfo.CurrentScreen.ListPlatesActive[idxP].UpDataMinMax(); if (WindowFormForCellbyCellClassif.checkBoxKeepOriginalDesc.Checked == false) GlobalInfo.CurrentScreen.GetCurrentDisplayPlate().DisplayDistribution(0, false); //WindowFormForCellbyCellClassif.Close(); //WindowClusteringInfo.Close(); }