internal void AddValue(DfRecord rec) { Accumulator += rec.GenValue; }
internal WorkerData(BetweenWorkerModel parent) { this.parentModel = parent; this.logNormalDistrn = this.parentModel.OutcomeIsLogNormallyDistributed; Data = parent.Data; workerDigests = new WorkerDigest[Data.NWorkers]; int i = 0; this.MeasureCountByWorker = new int[Data.NWorkers]; foreach (Worker w in Data.WorkersByOrdinal) { MeasureCountByWorker[i] = Data.MeasuresByWorker[w].Count; workerDigests[i] = new WorkerDigest(ordinal: i, mean: 0, measureCount: Data.MeasuresByWorker[w].Count); i++; } DFRecordByMeasureType.Add(Measure.MeasureType.Uncensored, new List <DfRecord>()); DFRecordByMeasureType.Add(Measure.MeasureType.GreaterThan, new List <DfRecord>()); DFRecordByMeasureType.Add(Measure.MeasureType.LessThan, new List <DfRecord>()); DFRecordByMeasureType.Add(Measure.MeasureType.Interval, new List <DfRecord>()); df = new DfRecord[Data.N]; int j = 0; Positions[(int)Measure.MeasureType.Uncensored] = new Position(j, Data.UncensoredMeasures.Length); for (i = 0; i < Data.UncensoredMeasures.Length; i++) { int workerOrdinal = Data.UncensoredMeasures[i].Worker.Ordinal; Measure m = Data.UncensoredMeasures[i]; m.WorkerDataOrdinal = j; df[j] = new DfRecord( measureOrdinal: j, genValue: this.logNormalDistrn ? Math.Log(m.A) : m.A, workerOrdinal: workerOrdinal, workerDigest: workerDigests[workerOrdinal]); DFRecordByMeasureType[Measure.MeasureType.Uncensored].Add(df[j]); j++; } Positions[(int)Measure.MeasureType.GreaterThan] = new Position(j, Data.GT.Length); for (i = 0; i < Data.GTMeasures.Length; i++) { int workerOrdinal = Data.GTMeasures[i].Worker.Ordinal; Measure m = Data.GTMeasures[i]; m.WorkerDataOrdinal = j; df[j] = new DfRecord( measureOrdinal: j, genValue: Tools.ND, workerOrdinal: workerOrdinal, workerDigest: workerDigests[workerOrdinal]); DFRecordByMeasureType[Measure.MeasureType.GreaterThan].Add(df[j]); j++; } Positions[(int)Measure.MeasureType.LessThan] = new Position(j, Data.LT.Length); for (i = 0; i < Data.LTMeasures.Length; i++) { int workerOrdinal = Data.LTMeasures[i].Worker.Ordinal; Measure m = Data.LTMeasures[i]; m.WorkerDataOrdinal = j; df[j] = new DfRecord( measureOrdinal: j, genValue: Tools.ND, workerOrdinal: workerOrdinal, workerDigest: workerDigests[workerOrdinal]); DFRecordByMeasureType[Measure.MeasureType.LessThan].Add(df[j]); j++; } Positions[(int)Measure.MeasureType.Interval] = new Position(j, Data.IntervalGT.Length); for (i = 0; i < Data.IntervalMeasures.Length; i++) { int workerOrdinal = Data.IntervalMeasures[i].Worker.Ordinal; Measure m = Data.IntervalMeasures[i]; m.WorkerDataOrdinal = j; df[j] = new DfRecord( measureOrdinal: j, genValue: Tools.ND, workerOrdinal: workerOrdinal, workerDigest: workerDigests[workerOrdinal]); DFRecordByMeasureType[Measure.MeasureType.Interval].Add(df[j]); j++; } this.WorkerIds = df.Select(rec => rec.WorkerOrdinal).ToArray(); UpdatePublicProperties(); }