private UserAnswers ReadPerson(Worksheet sheet, int personRowIndex) { string itemRange = "A" + IdRowIndex + ":" + FinalColumn + IdRowIndex; string personRange = "A" + personRowIndex + ":" + FinalColumn + personRowIndex; string scaleRange = "A" + ScaleRowIndex + ":" + FinalColumn + ScaleRowIndex; List <string> scaleRow = CellReader.GetRange(scaleRange, sheet); List <string> itemRow = CellReader.GetRange(itemRange, sheet).Skip(NumEmptyScores).ToList(); List <string> scoresRow = CellReader.GetRange(personRange, sheet); string personName = scoresRow[0]; scoresRow = scoresRow.Skip(NumEmptyScores).ToList(); List <string> scaleNames = scaleRow.Distinct().ToList(); List <ScaleAnswers> scaleAnswersList = new List <ScaleAnswers>(); foreach (var scaleName in scaleNames) { List <int> indices = Enumerable.Range(0, scaleRow.Count) .Where(index => scaleRow[index] == scaleName) .ToList(); Dictionary <string, int> itemsToAnswersMap = new Dictionary <string, int>(); for (int k = 0; k < indices.Count; k++) { var index = indices[k]; var itemName = itemRow[index]; itemsToAnswersMap[itemName] = Convert.ToInt32(scoresRow[index]); } ScaleAnswers scaleAnswers = new ScaleAnswers() { ScaleName = scaleName, ItemToAnswerMap = itemsToAnswersMap }; scaleAnswersList.Add(scaleAnswers); } UserAnswers answers = new UserAnswers() { PersonName = personName, ScaleAnswers = scaleAnswersList }; return(answers); }
private static ScoringOutput GetScores(List <string> scaleNames, List <ItemInformation> itemInformationList, List <string> personNames, List <UserAnswers> answersInput, CATParameters catParameters) { List <ScoreDetails> scores = new List <ScoreDetails>(); List <List <QuestionInfo> > questionInfoList = new List <List <QuestionInfo> >(); foreach (var scaleName in scaleNames) { List <ItemInformation> itemInfoForScale = itemInformationList.Where(x => x.ScaleName.Equals(scaleName)).ToList(); IQuestionLoader questionLoader = new ExcelQuestionLoader(itemInfoForScale, catParameters.MistakeProbability); foreach (var personName in personNames) { UserAnswers personAnswers = answersInput.Single(x => x.PersonName.Equals(personName)); ScaleAnswers answers = personAnswers.ScaleAnswers.Single(x => x.ScaleName.Equals(scaleName)); IAnswerSheetLoader answerSheetLoader = new ExcelAnswerSheetLoader(answers); LocationEstimator locationEstimator = new LocationEstimator(questionLoader, answerSheetLoader, catParameters); List <QuestionInfo> output = locationEstimator.EstimatePersonLocation(); questionInfoList.Add(output); ScoreDetails scoreDetails = new ScoreDetails() { PersonName = personName, ScaleName = scaleName, Score = (double)output.Last().ThetaEstimate }; scores.Add(scoreDetails); } } ScoringOutput scoringOutput = new ScoringOutput() { FirstPersonQuestionInfo = questionInfoList.First(), ScoreDetails = scores }; return(scoringOutput); }
public ExcelAnswerSheetLoader(ScaleAnswers scaleAnswers) { _scaleAnswers = scaleAnswers; }