`studentGrowthPlot_Styles` <-
function(
sgPlot.data,
sgPlot.sgp_object,
sgPlot.cutscores,
state,
last.year,
content_areas,
districts,
schools,
reports.by.student,
reports.by.instructor,
reports.by.school,
sgPlot.years,
sgPlot.demo.report,
sgPlot.folder,
sgPlot.folder.names,
sgPlot.anonymize,
sgPlot.front.page,
sgPlot.header.footer.color,
sgPlot.fan,
sgPlot.sgp.targets,
sgPlot.cleanup,
sgPlot.baseline,
sgPlot.sgp.targets.timeframe,
sgPlot.zip,
sgPlot.output.format,
sgPlot.linkages) {
CUTLEVEL <- ID <- CONTENT_AREA <- GRADE <- CUTSCORES <- YEAR <- NULL ## To prevent R CMD check warnings
### Utility functions
"%w/o%" <- function(x,y) x[!x %in% y]
pretty_year <- function(x) sub("_", "-", x)
### Check/adjust supplied arguments
if (any(c("PNG", "PDF_PIECES") %in% sgPlot.output.format | reports.by.student)) {
reports.by.school <- TRUE
reports.by.instructor <- FALSE
}
### Define quantities/variables related to state
if (state %in% objects(SGP::SGPstateData)) {
tmp.abbreviation <- SGP::SGPstateData[[state]][["Assessment_Program_Information"]][["Assessment_Abbreviation"]]
tmp.state <- paste(datasets::state.name[state==datasets::state.abb], tmp.abbreviation)
tmp.organization <- SGP::SGPstateData[[state]][["Assessment_Program_Information"]][["Organization"]]
number.achievement.level.regions <- length(SGP::SGPstateData[[state]][["Student_Report_Information"]][["Achievement_Level_Labels"]])
tmp.proficiency <- SGP::SGPstateData[[state]][["Student_Report_Information"]][["Proficiency_Label"]]
if (is.null(tmp.proficiency)) tmp.proficiency <- "proficient"
tmp.ach.lev.text.interp <- SGP::SGPstateData[[state]][["Student_Report_Information"]][["Achievement_Level_Text"]][["Interpretation"]]
if (is.null(tmp.ach.lev.text.interp)) tmp.ach.lev.text.interp <- c("Achievement", "Levels")
tmp.ach.lev.text.use <- SGP::SGPstateData[[state]][["Student_Report_Information"]][["Achievement_Level_Text"]][["Suggested_Uses"]]
if (is.null(tmp.ach.lev.text.use)) tmp.ach.lev.text.use <- "achievement levels."
if (!is.null(SGP::SGPstateData[[state]][["SGP_Configuration"]][["sgp.projections.max.forward.progression.grade"]])) {
trajectory.cuts <- sort(c(SGP::SGPstateData[[state]][["Growth"]][["Cutscores"]][['Cuts']], SGP::SGPstateData[[state]][["Student_Report_Information"]][["Projection_Fan_Limits"]]))
trajectory.cuts <- paste(paste0("P", trajectory.cuts, "_"), collapse="|")
} else {
trajectory.cuts <- c(1, SGP::SGPstateData[[state]][["Growth"]][["Cutscores"]][['Cuts']], 99)
trajectory.cuts <- paste(paste0("P", trajectory.cuts, "_"), collapse="|")
}
if (!is.null(SGP::SGPstateData[[state]][["Custom_Student_Report"]])) {
custom.isr.tf <- TRUE
custom.isr <- SGP::SGPstateData[[state]][["Custom_Student_Report"]]
} else custom.isr.tf <- FALSE
catalog_name <- SGP::SGPstateData[[state]][["Student_Report_Information"]][["catalog_name"]]
if (is.null(rm.pattern <- SGP::SGPstateData[[state]][["Student_Report_Information"]][["file_remove_pattern"]])) rm.pattern <- "REPORT"
} else {
stop("Construction of student growth plots requires state meta-data to be included in the embedded SGPstateData set.\nPlease augment the SGPstateData set with your data or contact the SGP package maintainer to have your data added to the SGP package.")
}
year_folder <- as.character(last.year)
## To Baseline or not to Baseline
if (sgPlot.baseline) {
my.sgp <- "SGP_BASELINE"
my.sgp.level <- "SGP_LEVEL_BASELINE"
my.sgp.target.label <- c("SGP_TARGET_BASELINE", paste(sgPlot.sgp.targets.timeframe, "YEAR", sep="_"))
} else {
my.sgp <- "SGP"
my.sgp.level <- "SGP_LEVEL"
my.sgp.target.label <- c("SGP_TARGET", paste(sgPlot.sgp.targets.timeframe, "YEAR", sep="_"))
}
#############################################################################################################################
###
### Reports assuming DISTRICT, SCHOOLS, GRADES, and then STUDENTS
###
#############################################################################################################################
if (reports.by.school) {
### Extend sgPlot.folder
sgPlot.folder <- file.path(sgPlot.folder, "School")
if (identical(sgPlot.output.format, "PNG")) {
sgPlot.folder <- file.path(sgPlot.folder, "PNG")
}
### Loop over unique DISTRICTS, SCHOOLS, GRADES and then STUDENTS
tmp.keys <- paste(c("DISTRICT_NUMBER", "SCHOOL_NUMBER", "GRADE", "LAST_NAME", "FIRST_NAME"), last.year, sep=".")
## Districts
setkeyv(sgPlot.data, tmp.keys[1])
for (i in districts) {
if (reports.by.student) {
tmp_district_name <- as.character(sgPlot.data[list(i)][[paste("DISTRICT_NAME", last.year, sep=".")]][1])
district_folder <- "Uncollated_Student_Reports"
} else {
if (sgPlot.demo.report | identical(i, -999L)) {
tmp_district_name <- "Sample District"
district_folder <- "Sample_District"
} else {
if (sgPlot.folder.names=="name") {
tmp_district_name <- as.character(sgPlot.data[list(i)][[paste("DISTRICT_NAME", last.year, sep=".")]][1])
district_folder <- gsub(" ", "_", paste(tmp_district_name, i))
} else {
tmp_district_name <- as.character(sgPlot.data[list(i)][[paste("DISTRICT_NAME", last.year, sep=".")]][1])
district_folder <- as.character(i)
}
}
}
tmp_district_ids <- unique(sgPlot.data[list(i)]$ID)
tmp_district_data <- sgPlot.data[ID %in% tmp_district_ids]
if (is.factor(tmp_district_data[[paste("LAST_NAME", last.year, sep=".")]]) | is.factor(tmp_district_data[[paste("FIRST_NAME", last.year, sep=".")]])) {
tmp_district_data[, paste("LAST_NAME", last.year, sep=".") := as.character(tmp_district_data[[paste("LAST_NAME", last.year, sep=".")]])]
tmp_district_data[, paste("FIRST_NAME", last.year, sep=".") := as.character(tmp_district_data[[paste("FIRST_NAME", last.year, sep=".")]])]
}
## Schools
setkeyv(tmp_district_data, tmp.keys[2])
for (j in intersect(tmp_district_data[[paste("SCHOOL_NUMBER", last.year, sep=".")]], schools)) {
started.at <- proc.time()
started.date <- prettyDate()
if (!is.null(sgPlot.front.page)) {
sgPlot.front.page.ij <- paste0(paste(unlist(strsplit(sgPlot.front.page, "[.]"))[1], i, j, sep="_"), ".pdf")
file.copy(sgPlot.front.page, sgPlot.front.page.ij)
}
if (reports.by.student) {
tmp_school_name <- as.character(tmp_district_data[list(j)][[paste("SCHOOL_NAME", last.year, sep=".")]][1])
school_folder <- NULL
} else {
if (sgPlot.demo.report | identical(j, -99L)) {
tmp_school_name <- "Sample School"
school_folder <- "Sample_School"
} else {
if (sgPlot.folder.names=="name") {
tmp_school_name <- as.character(tmp_district_data[list(j)][[paste("SCHOOL_NAME", last.year, sep=".")]][1])
school_folder <- gsub(" ", "_", paste(tmp_school_name, j))
} else {
tmp_school_name <- as.character(tmp_district_data[list(j)][[paste("SCHOOL_NAME", last.year, sep=".")]][1])
school_folder <- as.character(j)
}
}
if ("PDF" %in% sgPlot.output.format) {
######################## SCHOOL Report Catalog LaTeX Header #################################################################################
if (.Platform$OS.type == "windows" & length(unique(tmp_district_data[list(j)]$ID)) > 500) {
cat("\\let\\mypdfximage\\pdfximage\n\\def\\pdfximage{\\immediate\\mypdfximage}\n\\documentclass[pdftex]{book}\n\\usepackage{hyperref,pdfpages}\n\\hypersetup{%\n",
file=paste0("school_catalog_", i, "_", j, ".tex"))
} else cat("\\documentclass[pdftex]{book}\n\\usepackage{hyperref,pdfpages}\n\\hypersetup{%\n", file=paste0("school_catalog_", i, "_", j, ".tex"))
cat(paste0("pdftitle={", tmp_school_name, ": ", pretty_year(last.year), " ", tmp.state, " Growth and Achievement Reports},\n"),
file=paste0("school_catalog_", i, "_", j, ".tex"), append=TRUE)
cat(paste0("pdfauthor={", tmp.organization$Name, "/Center for Assessment Inc.},\n"), "pdfcreator={pdfLaTeX},\n",
paste0("pdfproducer={", tmp.organization$Name, "/Center for Assessment Inc.}}\n"),
"\\begin{document}\n", file=paste0("school_catalog_", i, "_", j, ".tex"), sep="", append=TRUE)
cat(paste0("\\pdfbookmark[-1]{", tmp_district_name, "}{", i, "}\n"), file=paste0("school_catalog_", i, "_", j, ".tex"), append=TRUE)
cat(paste0("\\pdfbookmark[0]{", tmp_school_name, "}{", j, "}\n"), file=paste0("school_catalog_", i, "_", j, ".tex"), append=TRUE)
##############################################################################################################################################
}
}
tmp_school_ids <- unique(tmp_district_data[list(j)]$ID)
tmp_school_data <- tmp_district_data[ID %in% tmp_school_ids]
## Grades
setkeyv(tmp_school_data, tmp.keys[2])
grades <- as.character(sort(type.convert(unique(unlist(tmp_school_data[list(j), tmp.keys[3], with=FALSE])), as.is=TRUE)) %w/o% NA)
setkeyv(tmp_school_data, tmp.keys[3])
for (k in grades) {
if (reports.by.student) {
grade_folder <- NULL
} else {
if (sgPlot.folder.names=="name") {
grade_folder <- paste("Grade", k, sep="_")
} else {
if (k=="EOCT") {
grade_folder <- "EOCT"
} else {
grade_folder <- substr(paste0("0", as.character(k)), nchar(k), nchar(k)+1)
}
}
if ("PDF" %in% sgPlot.output.format) {
################################ SCHOOL Report Catalog LaTeX Code #########################################################
cat(paste0("\\pdfbookmark[1]{Grade ", k, "}{", j, k, "}\n"),
file=paste0("school_catalog_", i, "_", j, ".tex"), append=TRUE) ## NOTE: j, k included in anchor for uniqueness
###########################################################################################################################
}
}
tmp_grade_ids <- unique(tmp_school_data[list(k)]$ID)
tmp_grade_data <- tmp_school_data[ID %in% tmp_grade_ids]
### Create path to pdf files
path.to.pdfs <- paste(c(sgPlot.folder, year_folder, district_folder, school_folder, grade_folder), collapse=.Platform$file.sep)
dir.create(path.to.pdfs, recursive=TRUE, showWarnings=FALSE)
## Students
setkeyv(tmp_grade_data, tmp.keys[4:5])
for (n in unique(tmp_grade_data[["ID"]])) {
FIRST_NAME <- sort(tmp_grade_data[ID==n][[tmp.keys[5]]])[1]
LAST_NAME <- sort(tmp_grade_data[ID==n][[tmp.keys[4]]])[1]
if (sgPlot.anonymize) {
student_number <- 1234567890
} else {
student_number <- n
}
if (sgPlot.folder.names=="name" | sgPlot.anonymize) {
file_name <- paste0(paste(gsub(" |/", "-", FIRST_NAME), gsub(" |/", "-", LAST_NAME), student_number, gsub("[.]", "-", year_folder), "REPORT", sep="_"), ".pdf")
file_name_json <- paste0(paste(gsub(" |/", "-", FIRST_NAME), gsub(" |/", "-", LAST_NAME), student_number, gsub("[.]", "-", year_folder), sep="_"))
} else {
file_name <- paste0(n, "_REPORT.pdf")
file_name_json <- n
}
tmp_all_student_data <- tmp_grade_data[ID==n]
tmp_content_areas <- content_areas
if (length(tmp_content_areas) > dim(tmp_all_student_data)[1] & !any(duplicated(tmp_all_student_data[["CONTENT_AREA"]]))) tmp_content_areas <- tmp_all_student_data[['CONTENT_AREA']]
if (length(content_areas) < dim(tmp_all_student_data)[1] | any(duplicated(tmp_all_student_data[["CONTENT_AREA"]]))) {
tmp_content_areas <- tmp_all_student_data[["CONTENT_AREA"]]
tmp_index <- unlist(sapply(unique(tmp_content_areas), function(x) which(tmp_content_areas==x), USE.NAMES=FALSE))
tmp_all_student_data[["CONTENT_AREA"]] <- tmp_content_areas <- unlist(sapply(unique(tmp_content_areas), function(x) paste(x, which(tmp_content_areas==x), sep="."), USE.NAMES=FALSE))[tmp_index]
}
num.charts <- length(tmp_content_areas)
if ("JSON" %in% sgPlot.output.format) {
for (vp in seq_along(tmp_content_areas)) {
tmp_student_data <- as.data.frame(tmp_all_student_data[CONTENT_AREA==tmp_content_areas[vp]])
if (dim(tmp_student_data)[1]==0) tmp_student_data <- as.data.frame(data.table(tmp_student_data)[NA][,CONTENT_AREA := tmp_content_areas[vp]])
tmp.list <- list(
Scale_Scores_TEXT=as.numeric(tmp_student_data[,paste("SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Scale_Scores=as.numeric(tmp_student_data[,paste("TRANSFORMED_SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Achievement_Levels=as.character(tmp_student_data[,paste("ACHIEVEMENT_LEVEL", rev(sgPlot.years), sep=".")]),
SGP=as.numeric(tmp_student_data[,paste(my.sgp, rev(sgPlot.years), sep=".")]),
SGP_Levels=as.character(unlist(tmp_student_data[,paste(my.sgp.level, rev(sgPlot.years), sep=".")])),
Grades=as.character(tmp_student_data[,paste("GRADE", rev(sgPlot.years), sep=".")]),
Content_Areas=as.character(tmp_student_data[,paste("CONTENT_AREA_LABELS", rev(sgPlot.years), sep=".")]),
Cuts_TEXT=list(
NY1=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_1", names(tmp_student_data))), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_2", names(tmp_student_data))), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_3", names(tmp_student_data))), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
Cuts=list(NY1=as.numeric(tmp_student_data[,
intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,
intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,
intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
SGP_Targets=list(CUKU=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
CUKU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
MUSU=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
MUSU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
CUSTOM_TRAJECTORY=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_AGP']][1],
CUSTOM_TRAJECTORY_Current=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_AGP']][1]),
SGP_Scale_Score_Targets_TEXT=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][3]))),
SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][3]))),
Cutscores=sgPlot.cutscores[[strsplit(tmp_content_areas[vp], "[.]")[[1]][1]]],
Years=rev(sgPlot.years),
Report_Parameters=list(Current_Year=last.year, Content_Area=strsplit(tmp_content_areas[vp], "[.]")[[1]][1], Content_Area_Title=tmp_student_data[[paste("CONTENT_AREA_LABELS", last.year, sep=".")]],
State=state, SGP_Targets=sgPlot.sgp.targets, Assessment_Transition=sgPlot.linkages, Fan=SGP::SGPstateData[[state]][["SGP_Configuration"]][['sgPlot.fan.condition']]))
tmp_student_data_JSON <- getJSON(
tmp.data=tmp.list,
sgPlot.sgp_object=sgPlot.sgp_object,
state=state,
content_area=strsplit(tmp_content_areas[vp], "[.]")[[1]][1],
year=last.year,
years.for.percentile.trajectories=yearIncrement(last.year, c(0,-1)),
baseline=sgPlot.baseline,
data.type="studentGrowthPlot")
cat(toJSON(tmp_student_data_JSON, pretty=TRUE, na="null", auto_unbox=TRUE), file=file.path(path.to.pdfs, paste0(file_name_json, "_", vp, ".json")))
}
} ### END if ("JSON" %in% sgPlot.output.format)
if ("PDF" %in% sgPlot.output.format) {
if (!reports.by.student) {
################################ SCHOOL Report Catalog LaTeX Code ###################################################################################
if (is.null(sgPlot.front.page) | !is.null(SGP::SGPstateData[[state]][["Student_Report_Information"]][["Include_Front_Page_in_School_Catalog"]])) {
cat(paste0("\\pdfbookmark[2]{", paste0(LAST_NAME, ", ", FIRST_NAME, " (", student_number, ")"), "}{", n , "}\n\\includepdf[pages={1-}, fitpaper=true]{",
path.to.pdfs, "/", file_name, "}\n"), file=paste0("school_catalog_", i, "_", j, ".tex"), append=TRUE)
} else {
cat(paste0("\\includepdf[pages={1-},fitpaper=true]{", sgPlot.front.page.ij, "}\n\\pdfbookmark[2]{", paste0(LAST_NAME, ", ", FIRST_NAME, " (",
student_number, ")"), "}{", n , "}\n\\includepdf[pages={1-},fitpaper=true]{", path.to.pdfs, "/", file_name, "}\n"),
file=paste0("school_catalog_", i, "_", j, ".tex"), append=TRUE)
}
#####################################################################################################################################################
}
################################ STUDENT Report Front Page Attach LaTeX Code ########################################################################
cat("\\documentclass[pdftex]{article}\n\\usepackage{hyperref,pdfpages}\n\\hypersetup{%\n", file=paste0("student_report_", i, "_", j, ".tex"))
cat(paste0("pdftitle={", FIRST_NAME, " ", LAST_NAME, " (", student_number, ")", ": ", pretty_year(last.year), " ",
tmp.state, " Growth and Achievement Report},\n"), file=paste0("student_report_", i, "_", j, ".tex"), append=TRUE)
cat(paste0("pdfauthor={", tmp.organization$Name, "/Center for Assessment Inc.},\n"), file=paste0("student_report_", i, "_", j, ".tex"), append=TRUE)
cat("pdfcreator={pdfLaTeX},\n", file=paste0("student_report_", i, "_", j, ".tex"), append=TRUE)
cat(paste0("pdfproducer={", tmp.organization$Name, "/Center for Assessment Inc.}}\n"), file=paste0("student_report_", i, "_", j, ".tex"), append=TRUE)
cat("\\begin{document}\n", file=paste0("student_report_", i, "_", j, ".tex"), append=TRUE)
if (!is.null(sgPlot.front.page)) {
cat(paste0("\\includepdf[pages={1-}, fitpaper=true]{", sgPlot.front.page.ij, "}\n"), file=paste0("student_report_", i, "_", j, ".tex"), append=TRUE)
}
cat(paste0("\\includepdf[pages={1-}, fitpaper=true]{", path.to.pdfs, "/", file_name, "}\n"),
file=paste0("student_report_", i, "_", j, ".tex"), append=TRUE)
cat("\\end{document}", file=paste0("student_report_", i, "_", j, ".tex"), append=TRUE)
####################################################################################################################################################
if (!custom.isr.tf) { # boiler plate student reports:
## Start pdf device
if (num.charts %in% c(1,2)) {
report.width=11
report.height=8.5
}
if (num.charts==3) {
report.width=8.5
report.height=11
}
if (num.charts==4) {
report.width=8.5
report.height=11
# report.width=11
# report.height=8.5
# report.width=17
# report.height=11
}
if (num.charts==5) {
report.width=8.5
report.height=11
# report.width=11
# report.height=17
}
if (!num.charts %in% 1:5) {
stop("Individual Student Report Templates currently only available for situations with 1, 2, 3, 4 or 5 content areas.")
}
pdf(file.path(path.to.pdfs, file_name),
width=report.width, height=report.height, version="1.4", onefile=TRUE)
########################################################################################################
###
### Overall Report viewport creation
###
########################################################################################################
page.count <- 1; page.content_areas <- list(1:num.charts); legend.tf <- FALSE # redefined below if necessary
if (num.charts==1) {
report.vp <- viewport(layout = grid.layout(5, 4, widths = unit(c(2.5, 0.1, 8.3, 0.1), rep("inches", 4)),
heights = unit(c(0.55, 0.2, 7, 0.25, 0.5), rep("inches", 5))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=3)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:4)
bottom.border.vp <- viewport(layout.pos.row=5, layout.pos.col=1:4)
left.legend.vp <- viewport(layout.pos.row=2:4, layout.pos.col=1)
}
if (num.charts==2) {
report.vp <- viewport(layout = grid.layout(7, 4, widths = unit(c(2.5, 0.1, 8.3, 0.1), rep("inches", 4)),
heights = unit(c(0.35, 0.2, 3.55, 0.25, 3.55, 0.2, 0.4), rep("inches", 7))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=3)
content_area_2.vp <- viewport(layout.pos.row=5, layout.pos.col=3)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:4)
bottom.border.vp <- viewport(layout.pos.row=7, layout.pos.col=1:4)
left.legend.vp <- viewport(layout.pos.row=2:6, layout.pos.col=1)
}
if (num.charts==3) {
report.vp <- viewport(layout = grid.layout(9, 3, widths = unit(c(0.125, 8.3, 0.075), rep("inches", 3)),
heights = unit(c(0.35, 0.1, 3.256, 0.14, 3.256, 0.14, 3.256, 0.1, 0.4), rep("inches", 9))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=2)
content_area_2.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
content_area_3.vp <- viewport(layout.pos.row=7, layout.pos.col=2)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:3)
bottom.border.vp <- viewport(layout.pos.row=9, layout.pos.col=1:3)
}
if (num.charts==4) {
# report.vp <- viewport(layout = grid.layout(7, 3, widths = unit(c(0.125, 8.3, 0.075), rep("inches", 3)),
# heights = unit(c(0.4, 0.75, 4, 0.5, 4, 0.85, 0.5), rep("inches", 7))))
# page.content_areas <- list(1:2, 3:4)
# content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=2)
# content_area_2.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
# content_area_3.vp <- viewport(layout.pos.row=3, layout.pos.col=2)
# content_area_4.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
# top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:3)
# bottom.border.vp <- viewport(layout.pos.row=7, layout.pos.col=1:3)
if (!is.null(Four_Charts <- SGP::SGPstateData[[state]][["Student_Report_Information"]][["Two_Page_Layout"]][["Four_Charts"]])) {
page.count <- 2
report.vp <- Four_Charts[["report.vp"]]
page.content_areas <- Four_Charts[["page.content_areas"]]
content_area_1.vp <- Four_Charts[["content_area_1.vp"]]
content_area_2.vp <- Four_Charts[["content_area_2.vp"]]
content_area_3.vp <- Four_Charts[["content_area_3.vp"]]
content_area_4.vp <- Four_Charts[["content_area_4.vp"]]
top.border.vp <- Four_Charts[["top.border.vp"]]
bottom.border.vp <- Four_Charts[["bottom.border.vp"]]
if (!is.null(Four_Charts[["left.legend.vp"]])) {left.legend.vp <- Four_Charts[["left.legend.vp"]]; legend.tf <- TRUE}
} else { ### 17 x 11 Default
report.vp <- viewport(layout = grid.layout(7, 6, widths = unit(c(2.5, 0.15, 7, 0.2, 7, 0.15), rep("inches", 6)),
heights = unit((11/8.5)*c(0.35, 0.2, 3.55, 0.25, 3.55, 0.2, 0.4), rep("inches", 7))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=3)
content_area_2.vp <- viewport(layout.pos.row=3, layout.pos.col=5)
content_area_3.vp <- viewport(layout.pos.row=5, layout.pos.col=3)
content_area_4.vp <- viewport(layout.pos.row=5, layout.pos.col=5)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:6)
bottom.border.vp <- viewport(layout.pos.row=7, layout.pos.col=1:6)
left.legend.vp <- viewport(layout.pos.row=2:6, layout.pos.col=1)
legend.tf <- TRUE
}
### 11 x 8.5 - Panels generally are too small
# report.vp <- viewport(layout = grid.layout(7, 5, widths = unit(c(0.15, 5.3, 0.1, 5.3, 0.15), rep("inches", 5)),
# heights = unit(c(0.35, 0.2, 3.55, 0.25, 3.55, 0.2, 0.4), rep("inches", 7))))
# content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=2)
# content_area_2.vp <- viewport(layout.pos.row=3, layout.pos.col=4)
# content_area_3.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
# content_area_4.vp <- viewport(layout.pos.row=5, layout.pos.col=4)
# top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:5)
# bottom.border.vp <- viewport(layout.pos.row=7, layout.pos.col=1:5)
# # No Legend
}
if (num.charts==5) {
# report.vp <- viewport(layout = grid.layout(9, 3, widths = unit(c(0.125, 8.3, 0.075), rep("inches", 3)),
# heights = unit(c(0.35, 0.1, 3.256, 0.14, 3.256, 0.14, 3.256, 0.1, 0.4), rep("inches", 9))))
# page.content_areas <- list(1:3, 4:5)
# content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=2) # 1st Page
# content_area_2.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
# content_area_3.vp <- viewport(layout.pos.row=7, layout.pos.col=2)
# content_area_4.vp <- viewport(layout.pos.row=3, layout.pos.col=2) # 2nd Page
# content_area_5.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
# top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:3)
# bottom.border.vp <- viewport(layout.pos.row=9, layout.pos.col=1:3)
if (!is.null(Five_Charts <- SGP::SGPstateData[[state]][["Student_Report_Information"]][["Two_Page_Layout"]][["Five_Charts"]])) {
page.count <- 2
report.vp <- Five_Charts[["report.vp"]]
page.content_areas <- Five_Charts[["page.content_areas"]]
content_area_1.vp <- Five_Charts[["content_area_1.vp"]]
content_area_2.vp <- Five_Charts[["content_area_2.vp"]]
content_area_3.vp <- Five_Charts[["content_area_3.vp"]]
content_area_4.vp <- Five_Charts[["content_area_4.vp"]]
content_area_5.vp <- Five_Charts[["content_area_5.vp"]]
top.border.vp <- Five_Charts[["top.border.vp"]]
bottom.border.vp <- Five_Charts[["bottom.border.vp"]]
if (!is.null(Five_Charts[["left.legend.vp"]])) {left.legend.vp <- Five_Charts[["left.legend.vp"]]; legend.tf <- TRUE}
} else { ### 17 x 11 Default
report.vp <- viewport(layout = grid.layout(13, 3, widths = unit((11/8.5)*c(0.125, 8.3, 0.075), rep("inches", 3)),
heights = unit(c(0.3, 0.10, 3.25, 0.15, 3.25, 0.15, 3.35, 0.15, 3.25, 0.15, 3.25, 0.10, 0.3), rep("inches", 9))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=2)
content_area_2.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
content_area_3.vp <- viewport(layout.pos.row=7, layout.pos.col=2)
content_area_4.vp <- viewport(layout.pos.row=9, layout.pos.col=2)
content_area_5.vp <- viewport(layout.pos.row=11, layout.pos.col=2)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:3)
bottom.border.vp <- viewport(layout.pos.row=13, layout.pos.col=1:3)
}
}
for (pages in 1:page.count) {
pushViewport(report.vp)
for (vp in page.content_areas[[pages]]) {
tmp_student_data <- as.data.frame(tmp_all_student_data[CONTENT_AREA==tmp_content_areas[vp]])
if (dim(tmp_student_data)[1]==0) tmp_student_data <- as.data.frame(data.table(tmp_student_data)[NA][,c("CONTENT_AREA", paste("CONTENT_AREA_LABELS", last.year, sep=".")) := tmp_content_areas[vp]])
pushViewport(get(paste0("content_area_", vp, ".vp")))
studentGrowthPlot(
Scale_Scores=as.numeric(tmp_student_data[,paste("SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Plotting_Scale_Scores=as.numeric(tmp_student_data[,paste("TRANSFORMED_SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Achievement_Levels=as.character(tmp_student_data[,paste("ACHIEVEMENT_LEVEL", rev(sgPlot.years), sep=".")]),
SGP=as.numeric(tmp_student_data[,paste(my.sgp, rev(sgPlot.years), sep=".")]),
SGP_Levels=as.character(unlist(tmp_student_data[,paste(my.sgp.level, rev(sgPlot.years), sep=".")])),
Grades=as.character(tmp_student_data[,paste("GRADE", rev(sgPlot.years), sep=".")]),
Content_Areas=as.character(tmp_student_data[,paste("CONTENT_AREA_LABELS", rev(sgPlot.years), sep=".")]),
Cuts=list(
NY1=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_1", names(tmp_student_data))), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_2", names(tmp_student_data))), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_3", names(tmp_student_data))), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
Plotting_Cuts=list(
NY1=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
SGP_Targets=list(
CUKU=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
CUKU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
MUSU=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
MUSU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
CUSTOM_TRAJECTORY=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_AGP']][1],
CUSTOM_TRAJECTORY_Current=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_AGP']][1]),
SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][3]))),
Plotting_SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][3]))),
Cutscores=sgPlot.cutscores[[strsplit(tmp_content_areas[vp], "[.]")[[1]][1]]],
Years=rev(sgPlot.years),
Report_Parameters=list(Current_Year=last.year, Content_Area=strsplit(tmp_content_areas[vp], "[.]")[[1]][1], Content_Area_Title=tmp_student_data[[paste("CONTENT_AREA_LABELS", last.year, sep=".")]],
State=state, SGP_Targets=sgPlot.sgp.targets, Assessment_Transition=sgPlot.linkages, Fan=SGP::SGPstateData[[state]][["SGP_Configuration"]][['sgPlot.fan.condition']]))
popViewport()
} ## END loop over tmp_content_areas
## Top Legend
if (!is.null(SGP::SGPstateData[[state]][["SGP_Configuration"]][["sgPlot.use.student.school.name"]])) {
student_school_name <- sort(unique(as.character(tmp_grade_data[ID==n][[paste("SCHOOL_NAME", last.year, sep=".")]])))[1] # sort to get rid of potential NA values
if (is.na(student_school_name)) student_school_name <- tmp_school_name
} else student_school_name <- tmp_school_name
if (!is.null(SGP::SGPstateData[[state]][["SGP_Configuration"]][["sgPlot.use.student.id"]])) {
tmp.student.name <- paste0(FIRST_NAME, " ", LAST_NAME, " - ", student_number)
} else tmp.student.name <- paste0(FIRST_NAME, " ", LAST_NAME)
pushViewport(top.border.vp)
grid.rect(gp=gpar(fill=sgPlot.header.footer.color, col=sgPlot.header.footer.color))
grid.text(x=0.025, y=0.5, tmp.student.name,
gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", col="white", cex=1.65), just="left", default.units="native")
if (page.count > 1) grid.text(x=0.475, y=0.5, paste("Page", pages), gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", col="white", cex=1.65), just="center", default.units="native")
grid.text(x=0.975, y=0.5, student_school_name, gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", col="white", cex=1.65), just="right", default.units="native")
popViewport()
## Bottom Legend
pushViewport(bottom.border.vp)
grid.rect(gp=gpar(fill=sgPlot.header.footer.color, col=sgPlot.header.footer.color))
grid.text(x=0.02, y=0.70, paste("For more information please visit the", tmp.organization$Name, paste0("(", tmp.organization$Abbreviation, ")"),
"at", tmp.organization$URL, "or contact", tmp.organization$Contact), gp=gpar(cex=0.8, col="white"), default.units="native", just="left")
copyright.text <- paste0("Cooperatively developed by ", tmp.organization$Abbreviation, " & the Center for Assessment, Inc.")
grid.text(x=0.02, y=0.30, paste0(copyright.text, " Distributed by ", tmp.organization$Abbreviation, "."),
gp=gpar(cex=0.8, col="white"), default.units="native", just="left")
# grid.text(x=0.995, y=0.18, copyright.text, gp=gpar(col="white", cex=0.45), default.units="native", just="right")
# grid.text(x=unit(0.992, "native")-convertWidth(grobWidth(textGrob(copyright.text, gp=gpar(cex=0.45))), "native"), y=0.19, "\\co",
# gp=gpar(col="white", cex=0.55, fontfamily="HersheySymbol"), default.units="native", just="right")
popViewport()
## Left Legend (Only with one or two content areas depicted)
if (num.charts %in% c(1,2) | legend.tf) { #,4
pushViewport(left.legend.vp)
# Interpretation
interpretation.y <- 0.93
achievement.level.region.colors <- paste0("grey", round(seq(62, 91, length=number.achievement.level.regions)))
grid.roundrect(x=unit(0.5, "native"), y=unit(interpretation.y, "native"), width=unit(0.9, "native"), height=unit(0.06, "native"),
gp=gpar(fill=sgPlot.header.footer.color, col="black"))
grid.text(x=0.5, y=interpretation.y+0.012, "How to interpret this student", gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", cex=1.05, col="white"))
grid.text(x=0.5, y=interpretation.y-0.012, "growth & achievement report", gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", cex=1.05, col="white"))
grid.roundrect(x=unit(0.2, "native"), y=unit(interpretation.y-0.08, "native"), width=unit(0.1, "native"), height=unit(0.05, "native"), r=unit(0.02, "inches"),
gp=gpar(fill=achievement.level.region.colors[1], lwd=1))
grid.circle(x=0.2, y=interpretation.y-0.08, r=0.02, default.units="native", gp=gpar(fill="white"))
grid.text(x=0.325, y=interpretation.y-0.0675, tmp.abbreviation, gp=gpar(cex=0.9), default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.0925, "Scale Score", gp=gpar(cex=0.9), default.units="native", just="left")
tmp.rect.height <- 0.125/number.achievement.level.regions
for (l in seq(number.achievement.level.regions)) {
grid.rect(x=unit(0.2, "native"), y=unit(interpretation.y-0.125-(l-1)*tmp.rect.height, "native"), width=unit(0.1, "native"),
height=unit(tmp.rect.height, "native"), gp=gpar(fill=rev(achievement.level.region.colors)[l], col="white", lwd=1), just=c("center", "top"))
}
grid.roundrect(x=unit(0.2, "native"), y=interpretation.y-0.125, width=unit(0.1, "native"), height=unit(0.125, "native"),
r=unit(0.02, "inches"),gp=gpar(col="black", lwd=1.5), just=c("center", "top"))
grid.text(x=0.325, y=interpretation.y-0.1625, tmp.abbreviation, default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.1875, tmp.ach.lev.text.interp[1], default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.2125, tmp.ach.lev.text.interp[2], default.units="native", just="left")
grid.polygon(x=c(0.1875, 0.1875, 0.17, 0.2, 0.23, 0.2125, 0.2125), y=interpretation.y-c(0.35, 0.30, 0.31, 0.27, 0.31, 0.30, 0.35),
default.units="native",gp=gpar(fill="grey50"))
grid.text(x=0.325, y=interpretation.y-0.285, "Student", gp=gpar(cex=0.9), default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.31, "Growth", gp=gpar(cex=0.9), default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.335, "Percentile", gp=gpar(cex=0.9), default.units="native", just="left")
if (!is.null(sgPlot.sgp.targets)) {
grid.circle(x=0.2, y=interpretation.y-0.41, r=unit(c(0.08, 0.065, 0.045, 0.0225), "inches"),
gp=gpar(col=c("black", "white", "black", "white"), lwd=0.01, fill=c("black", "white", "black", "white")), default.units="native")
grid.text(x=0.325, y=interpretation.y-0.385, "Catch Up/Keep Up", gp=gpar(cex=0.9), default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.41, "Move Up/Stay Up", gp=gpar(cex=0.9), default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.435, "Targets", gp=gpar(cex=0.9), default.units="native", just="left")
}
# Suggested uses
if (is.null(sgPlot.sgp.targets)) suggested.y <- 0.52 else suggested.y <- 0.42
grid.roundrect(x=unit(0.5, "native"), y=unit(suggested.y, "native"), width=unit(0.9, "native"), height=unit(0.06, "native"),
gp=gpar(fill=sgPlot.header.footer.color, col="black"))
grid.text(x=0.5, y=suggested.y, "Suggested Uses", gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", cex=1.05, col="white"))
grid.circle(x=0.075, y=suggested.y-0.07, r=0.01, gp=gpar(fill="black"), default.units="native")
grid.text(x=0.12, y=suggested.y-0.07, "Review past growth to assess", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.09, "student academic progress toward", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.11, paste(tmp.abbreviation, "achievement goals."), gp=gpar(cex=0.8), default.units="native", just="left")
grid.circle(x=0.075, y=suggested.y-0.14, r=0.01, gp=gpar(fill="black"), default.units="native")
grid.text(x=0.12, y=suggested.y-0.14, "Develop remediation or enrich-", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.16, "ment plans based on rate of", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.18, "growth needed to reach higher", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.20, paste(tmp.abbreviation, tmp.ach.lev.text.use), gp=gpar(cex=0.8), default.units="native", just="left")
if (sgPlot.fan) {
grid.circle(x=0.075, y=suggested.y-0.23, r=0.01, gp=gpar(fill="black"), default.units="native")
grid.text(x=0.12, y=suggested.y-0.23, "Identify the rate of progress", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.25, "needed in order to reach or", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.27, paste("maintain",tmp.proficiency, "status"), gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.29, paste("on the", tmp.abbreviation, "next year."), gp=gpar(cex=0.8), default.units="native", just="left")
}
# Extra stuff
grid.lines(x=1.0, y=c(0.025,0.975), gp=gpar(lwd=1.8), default.units="native")
popViewport()
} ## END Left legend
if (page.count > 1 & pages < max(page.count)) grid.newpage()
} ## END loop over pages
## Turn pdf device off
dev.off()
} else {
#############################
### Custom Student reports
#############################
make.custom.isr <- as.function(custom.isr$Custom_ISR_Function$value)
environment(make.custom.isr) <- environment()
## Turn pdf device ON and OFF within make.custom.isr
make.custom.isr()
} # End Custom Student reports
## Code to LaTeX document attaching first page/adding meta-data
system(paste0("pdflatex -interaction=batchmode student_report_", i, "_", j, ".tex"), ignore.stdout = TRUE)
file.rename(paste0("student_report_", i, "_", j, ".pdf"), paste0(path.to.pdfs, "/", paste(head(unlist(strsplit(file_name, "_")), -1), collapse="_"), ".pdf"))
} ### END "PDF" %in% sgPlot.output.format
if (any(c("PNG", "PDF_PIECES") %in% sgPlot.output.format)) {
report.png.vp <- viewport(width = unit(8.1, "inches"), height = unit(3.64, "inches"))
for (vp in seq_along(tmp_content_areas)) {
if ("PNG" %in% sgPlot.output.format) {
Cairo(file.path(path.to.pdfs, paste(paste(n, vp, sep="_"), "png", sep=".")), width=8.2, height=3.74, units="in", dpi=144, pointsize=10.5, bg="transparent")
} else {
pdf(file.path(path.to.pdfs, paste(paste(n, vp, sep="_"), "pdf", sep=".")), width=8.2, height=3.74, version="1.4")
}
tmp_student_data <- as.data.frame(tmp_all_student_data[CONTENT_AREA==tmp_content_areas[vp]])
if (dim(tmp_student_data)[1]==0) tmp_student_data <- as.data.frame(data.table(tmp_student_data)[NA][,CONTENT_AREA := tmp_content_areas[vp]])
pushViewport(report.png.vp)
studentGrowthPlot(
Scale_Scores=as.numeric(tmp_student_data[,paste("SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Plotting_Scale_Scores=as.numeric(tmp_student_data[,paste("TRANSFORMED_SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Achievement_Levels=as.character(tmp_student_data[,paste("ACHIEVEMENT_LEVEL", rev(sgPlot.years), sep=".")]),
SGP=as.numeric(tmp_student_data[,paste(my.sgp, rev(sgPlot.years), sep=".")]),
SGP_Levels=as.character(unlist(tmp_student_data[,paste(my.sgp.level, rev(sgPlot.years), sep=".")])),
Grades=as.character(tmp_student_data[,paste("GRADE", rev(sgPlot.years), sep=".")]),
Content_Areas=as.character(tmp_student_data[,paste("CONTENT_AREA_LABELS", rev(sgPlot.years), sep=".")]),
Cuts=list(
NY1=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_1", names(tmp_student_data))), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_2", names(tmp_student_data))), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_3", names(tmp_student_data))), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
Plotting_Cuts=list(
NY1=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
SGP_Targets=list(
CUKU=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
CUKU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
MUSU=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
MUSU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
CUSTOM_TRAJECTORY=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_AGP']][1],
CUSTOM_TRAJECTORY_Current=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_AGP']][1]),
SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][3]))),
Plotting_SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][3]))),
Cutscores=sgPlot.cutscores[[strsplit(tmp_content_areas[vp], "[.]")[[1]][1]]],
Years=rev(sgPlot.years),
Report_Parameters=list(Current_Year=last.year, Content_Area=strsplit(tmp_content_areas[vp], "[.]")[[1]][1], Content_Area_Title=tmp_student_data[[paste("CONTENT_AREA_LABELS", last.year, sep=".")]], State=state, SGP_Targets=sgPlot.sgp.targets,
Assessment_Transition=sgPlot.linkages, Fan=SGP::SGPstateData[[state]][["SGP_Configuration"]][['sgPlot.fan.condition']]))
popViewport()
dev.off()
} ## END loop over tmp_content_areas
} ### END if ("PNG" %in% sgPlot.output.format)
} ## END for loop for STUDENTS (n)
} ## END for loop for GRADES (k)
if (!reports.by.student & "PDF" %in% sgPlot.output.format) {
cat("\\end{document}", file=paste0("school_catalog_", i, "_", j, ".tex"), append=TRUE)
system(paste0("pdflatex -interaction=batchmode school_catalog_", i, "_", j, ".tex"), ignore.stdout = TRUE)
system(paste0("pdflatex -interaction=batchmode school_catalog_", i, "_", j, ".tex"), ignore.stdout = TRUE)
if (is.null(catalog_name)) {
tmp_catalog_name <- file.path(sgPlot.folder, year_folder, district_folder, school_folder,
paste0(year_folder, "_", district_folder, "_", school_folder, "_Individual_SGP_Report_Catalog.pdf"))
} else {
tmp_catalog_name <- eval(parse(text = catalog_name))
}
file.rename(paste0("school_catalog_", i, "_", j, ".pdf"), tmp_catalog_name)
# file.path(sgPlot.folder, year_folder, district_folder, school_folder, tmp_catalog_name))
}
if (sgPlot.cleanup & "PDF" %in% sgPlot.output.format) {
invisible(file.remove(list.files(pattern=paste(i, j, sep="_"), all.files=TRUE)))
files.to.remove <- list.files(path=paste(c(sgPlot.folder, year_folder, district_folder, school_folder), collapse=.Platform$file.sep),
pattern=rm.pattern, all.files=TRUE, full.names=TRUE, recursive=TRUE)
invisible(file.remove(files.to.remove))
}
if (identical(.Platform$OS.type, "unix") & sgPlot.zip & !reports.by.student) {
if (1000*as.numeric(unlist(strsplit(system(paste("du -s", file.path(sgPlot.folder, year_folder, district_folder, school_folder)), intern=TRUE), "\t"))[1]) > 4000000000) {
tmp.working.directory <- getwd()
setwd(file.path(sgPlot.folder, year_folder, district_folder))
if (paste0(school_folder, ".tar.gz") %in% list.files()) file.remove(paste0(school_folder, ".tar.gz"))
system(paste("tar cfz", paste0(school_folder, ".tar.gz"), school_folder, sep=" "))
setwd(tmp.working.directory)
} else {
tmp.working.directory <- getwd()
setwd(file.path(sgPlot.folder, year_folder, district_folder))
if (paste0(school_folder, ".zip") %in% list.files()) file.remove(paste0(school_folder, ".zip"))
suppressMessages(
zip(paste0(school_folder, ".zip"), school_folder, flags="-rmq1")
)
setwd(tmp.working.directory)
}
unlink(file.path(sgPlot.folder, year_folder, district_folder, school_folder), recursive=TRUE)
}
messageSGP(paste("\tStarted", last.year, tmp_school_name, "student growth plots:", started.date))
messageSGP(paste("\tFinished", last.year, tmp_school_name, "student growth plots:", prettyDate(), "in", convertTime(timetakenSGP(started.at)), "\n"))
} ## END for loop for SCHOOLS (j)
} ## END for loop for DISTRICTS (i)
return("DONE")
} ### END if (!reports.by.instructor)
#############################################################################################################################
###
### Reports assuming DISTRICT, SCHOOLS, INSTRUCTORS, GRADES, and then STUDENTS
###
#############################################################################################################################
if (reports.by.instructor) {
### Extend sgPlot.folder
sgPlot.folder <- file.path(sgPlot.folder, "Instructor")
### Loop over unique DISTRICTS, SCHOOLS, INSTRUCTORS, GRADES and then STUDENTS
tmp.keys <- paste(c("DISTRICT_NUMBER", "SCHOOL_NUMBER", "INSTRUCTOR_NUMBER", "GRADE", "LAST_NAME", "FIRST_NAME"), last.year, sep=".")
## Districts
setkeyv(sgPlot.data, tmp.keys[1])
for (i in districts) {
if (sgPlot.demo.report | identical(i, -999L)) {
tmp_district_name <- "Sample District"
district_folder <- "Sample_District"
} else {
if (sgPlot.folder.names=="name") {
tmp_district_name <- as.character(sgPlot.data[list(i)][[paste("DISTRICT_NAME", last.year, sep=".")]][1])
district_folder <- gsub(" ", "_", paste(tmp_district_name, i))
} else {
tmp_district_name <- as.character(sgPlot.data[list(i)][[paste("DISTRICT_NAME", last.year, sep=".")]][1])
district_folder <- as.character(i)
}
}
tmp_district_ids <- unique(sgPlot.data[list(i)]$ID)
tmp_district_data <- sgPlot.data[ID %in% tmp_district_ids]
## Schools
setkeyv(tmp_district_data, tmp.keys[2])
for (j in intersect(tmp_district_data[[paste("SCHOOL_NUMBER", last.year, sep=".")]], schools)) {
if (sgPlot.demo.report | identical(j, -99L)) {
tmp_school_name <- "Sample School"
school_folder <- "Sample_School"
} else {
if (sgPlot.folder.names=="name") {
tmp_school_name <- as.character(tmp_district_data[list(j)][[paste("SCHOOL_NAME", last.year, sep=".")]][1])
school_folder <- gsub(" ", "_", paste(tmp_school_name, j))
} else {
tmp_school_name <- as.character(tmp_district_data[list(j)][[paste("SCHOOL_NAME", last.year, sep=".")]][1])
school_folder <- as.character(j)
}
}
tmp_school_ids <- unique(tmp_district_data[list(j)]$ID)
tmp_school_data <- tmp_district_data[ID %in% tmp_school_ids]
## Instructor
setkeyv(tmp_school_data, tmp.keys[2])
instructors <- sort(unique(unlist(tmp_school_data[list(j), tmp.keys[3], with=FALSE]))) %w/o% NA
setkeyv(tmp_school_data, tmp.keys[3])
for (k in instructors) {
started.at <- proc.time()
started.date <- prettyDate()
if (!is.null(sgPlot.front.page)) {
sgPlot.front.page.ijk <- paste0(paste(unlist(strsplit(sgPlot.front.page, "[.]"))[1], i, j, k, sep="_"), ".pdf")
file.copy(sgPlot.front.page, sgPlot.front.page.ijk)
}
if (sgPlot.demo.report | identical(k, -9L)) {
tmp_instructor_name <- "Sample Instructor"
instructor_folder <- "Sample Instructor"
FIRST_NAME_TEACHER <- "Sample"
LAST_NAME_TEACHER <- "Teacher"
} else {
FIRST_NAME_TEACHER <- unlist(strsplit(as.character(tmp_school_data[list(k)][[paste("INSTRUCTOR_NAME", last.year, sep=".")]][1]), ", "))[2]
LAST_NAME_TEACHER <- unlist(strsplit(as.character(tmp_school_data[list(k)][[paste("INSTRUCTOR_NAME", last.year, sep=".")]][1]), ", "))[1]
if (sgPlot.folder.names=="name") {
tmp_instructor_name <- as.character(tmp_school_data[list(k)][[paste("INSTRUCTOR_NAME", last.year, sep=".")]][1])
instructor_folder <- gsub(" ", "_", paste(tmp_instructor_name, k))
} else {
tmp_instructor_name <- as.character(tmp_school_data[list(k)][[paste("INSTRUCTOR_NUMBER", last.year, sep=".")]][1])
instructor_folder <- as.character(k)
}
}
if ("PDF" %in% sgPlot.output.format) {
######################## INSTRUCTOR Report Catalog LaTeX Header #################################################################################
cat("\\documentclass[pdftex]{book}\n\\usepackage{hyperref,pdfpages}\n\\hypersetup{%\n", file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"))
cat(paste0("pdftitle={", tmp_instructor_name, ": ", pretty_year(last.year), " ", tmp.state, " Growth and Achievement Reports},\n"),
file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), append=TRUE)
cat(paste0("pdfauthor={", tmp.organization$Name, "/Center for Assessment Inc.},\n"), "pdfcreator={pdfLaTeX},\n",
paste0("pdfproducer={", tmp.organization$Name, "/Center for Assessment Inc.}}\n"),
"\\begin{document}\n", file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), sep="", append=TRUE)
cat(paste0("\\pdfbookmark[-1]{", tmp_district_name, "}{", i, "}\n"), file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), append=TRUE)
cat(paste0("\\pdfbookmark[0]{", tmp_school_name, "}{", j, "}\n"), file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), append=TRUE)
cat(paste0("\\pdfbookmark[1]{", tmp_instructor_name, "}{", k, "}\n"), file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), append=TRUE)
##############################################################################################################################################
}
tmp_instructor_ids <- unique(tmp_school_data[list(k)]$ID)
tmp_instructor_data <- tmp_school_data[list(k)][ID %in% tmp_instructor_ids] ### NOTE: possible that students have multiple instructors so need list(k)
## Grades
setkeyv(tmp_instructor_data, tmp.keys[3])
grades <- sort(unique(unlist(tmp_instructor_data[list(k), tmp.keys[4], with=FALSE]))) %w/o% NA
setkeyv(tmp_instructor_data, tmp.keys[4])
for (l in grades) {
if (sgPlot.folder.names=="name") {
grade_folder <- paste("Grade", l, sep="_")
} else {
grade_folder <- substr(paste0("0", l), nchar(l), nchar(l)+1)
}
if ("PDF" %in% sgPlot.output.format) {
################################ INSTRUCTOR Report Catalog LaTeX Code #########################################################
cat(paste0("\\pdfbookmark[2]{Grade ", l, "}{", j, k, l, "}\n"),
file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), append=TRUE) ## NOTE: j, k, l included in anchor for uniqueness
###########################################################################################################################
}
tmp_grade_ids <- unique(tmp_instructor_data[list(l)]$ID)
tmp_grade_data <- tmp_instructor_data[ID %in% tmp_grade_ids]
### Create path to pdf files
path.to.pdfs <- file.path(sgPlot.folder, year_folder, district_folder, school_folder, instructor_folder, grade_folder)
dir.create(path.to.pdfs, recursive=TRUE, showWarnings=FALSE)
## Students
setkeyv(tmp_grade_data, tmp.keys[5:6])
for (n in unique(tmp_grade_data[["ID"]])) {
FIRST_NAME <- gsub(" |/", "-", sort(tmp_grade_data[ID==n][[tmp.keys[6]]])[1])
LAST_NAME <- gsub(" |/", "-", sort(tmp_grade_data[ID==n][[tmp.keys[5]]])[1])
if (sgPlot.anonymize) {
student_number <- 1234567890
} else {
student_number <- n
}
if (sgPlot.folder.names=="name" | sgPlot.anonymize) {
file_name <- paste0(paste(FIRST_NAME, LAST_NAME, student_number, gsub("[.]", "-", year_folder), "REPORT", sep="_"), ".pdf")
} else {
file_name <- paste0(n, "_REPORT.pdf")
}
if ("PDF" %in% sgPlot.output.format) {
################################ INSTRUCTOR Report Catalog LaTeX Code ###################################################################################
if (is.null(sgPlot.front.page)) {
cat(paste0("\\pdfbookmark[3]{", paste0(LAST_NAME, ", ", FIRST_NAME, " (", student_number, ")"), "}{", n , "}\n\\includepdf[pages={1-}, fitpaper=true]{",
path.to.pdfs, "/", file_name, "}\n"), file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), append=TRUE)
} else {
cat(paste0("\\includepdf[pages={1-}, fitpaper=true]{", sgPlot.front.page.ijk, "}\n\\pdfbookmark[3]{", paste0(LAST_NAME, ", ", FIRST_NAME, " (",
student_number, ")"), "}{", n , "}\n\\includepdf[pages={1-}, fitpaper=true]{", path.to.pdfs, "/", file_name, "}\n"),
file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), append=TRUE)
}
#####################################################################################################################################################
################################ STUDENT Report Front Page Attach LaTeX Code ########################################################################
cat("\\documentclass[pdftex]{article}\n\\usepackage{hyperref,pdfpages}\n\\hypersetup{%\n", file=paste0("student_report_", i, "_", j, "_", k, ".tex"))
cat(paste0("pdftitle={", FIRST_NAME, " ", LAST_NAME, " (", student_number, ")", ": ", pretty_year(last.year), " ",
tmp.state, " Growth and Achievement Report},\n"), file=paste0("student_report_", i, "_", j, "_", k, ".tex"), append=TRUE)
cat(paste0("pdfauthor={", tmp.organization$Name, "/Center for Assessment Inc.},\n"), file=paste0("student_report_", i, "_", j, "_", k, ".tex"), append=TRUE)
cat("pdfcreator={pdfLaTeX},\n", file=paste0("student_report_", i, "_", j, "_", k, ".tex"), append=TRUE)
cat(paste0("pdfproducer={", tmp.organization$Name, "/Center for Assessment Inc.}}\n"), file=paste0("student_report_", i, "_", j, "_", k, ".tex"), append=TRUE)
cat("\\begin{document}\n", file=paste0("student_report_", i, "_", j, "_", k, ".tex"), append=TRUE)
if (!is.null(sgPlot.front.page)) {
cat(paste0("\\includepdf[pages={1-}, fitpaper=true]{", sgPlot.front.page.ijk, "}\n"), file=paste0("student_report_", i, "_", j, "_", k, ".tex"), append=TRUE)
}
cat(paste0("\\includepdf[pages={1-}, fitpaper=true]{", path.to.pdfs, "/", file_name, "}\n"),
file=paste0("student_report_", i, "_", j, "_", k, ".tex"), append=TRUE)
cat("\\end{document}", file=paste0("student_report_", i, "_", j, "_", k, ".tex"), append=TRUE)
####################################################################################################################################################
## Start pdf device
if (num.charts %in% c(1,2)) {
report.width=11
report.height=8.5
}
if (num.charts==3) {
report.width=8.5
report.height=11
}
if (num.charts==4) {
report.width=17
report.height=11
}
if (num.charts==5) {
report.width=11
report.height=17
}
if (!num.charts %in% 1:5) {
stop("Individual Student Report Templates currently only available for situations with 1, 2, 3, 4 or 5 content areas.")
}
pdf(file.path(path.to.pdfs, file_name),
width=report.width, height=report.height, version="1.4")
########################################################################################################
###
### Overall Report viewport creation
###
########################################################################################################
if (num.charts==1) {
report.vp <- viewport(layout = grid.layout(5, 4, widths = unit(c(2.5, 0.1, 8.3, 0.1), rep("inches", 4)),
heights = unit(c(0.55, 0.2, 7, 0.25, 0.5), rep("inches", 5))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=3)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:4)
bottom.border.vp <- viewport(layout.pos.row=5, layout.pos.col=1:4)
left.legend.vp <- viewport(layout.pos.row=2:4, layout.pos.col=1)
}
if (num.charts==2) {
report.vp <- viewport(layout = grid.layout(7, 4, widths = unit(c(2.5, 0.1, 8.3, 0.1), rep("inches", 4)),
heights = unit(c(0.35, 0.2, 3.55, 0.25, 3.55, 0.2, 0.4), rep("inches", 7))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=3)
content_area_2.vp <- viewport(layout.pos.row=5, layout.pos.col=3)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:4)
bottom.border.vp <- viewport(layout.pos.row=7, layout.pos.col=1:4)
left.legend.vp <- viewport(layout.pos.row=2:6, layout.pos.col=1)
}
if (num.charts==3) {
report.vp <- viewport(layout = grid.layout(9, 3, widths = unit(c(0.125, 8.3, 0.075), rep("inches", 3)),
heights = unit(c(0.35, 0.1, 3.256, 0.14, 3.256, 0.14, 3.256, 0.1, 0.4), rep("inches", 9))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=2)
content_area_2.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
content_area_3.vp <- viewport(layout.pos.row=7, layout.pos.col=2)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:3)
bottom.border.vp <- viewport(layout.pos.row=9, layout.pos.col=1:3)
}
if (num.charts==4) {
report.vp <- viewport(layout = grid.layout(7, 6, widths = unit(c(2.5, 0.15, 7, 0.2, 7, 0.15), rep("inches", 6)),
heights = unit((11/8.5)*c(0.35, 0.2, 3.55, 0.25, 3.55, 0.2, 0.4), rep("inches", 7))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=3)
content_area_2.vp <- viewport(layout.pos.row=3, layout.pos.col=5)
content_area_3.vp <- viewport(layout.pos.row=5, layout.pos.col=3)
content_area_4.vp <- viewport(layout.pos.row=5, layout.pos.col=5)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:6)
bottom.border.vp <- viewport(layout.pos.row=7, layout.pos.col=1:6)
left.legend.vp <- viewport(layout.pos.row=2:6, layout.pos.col=1)
}
if (num.charts==5) {
report.vp <- viewport(layout = grid.layout(13, 3, widths = unit((11/8.5)*c(0.125, 8.3, 0.075), rep("inches", 3)),
heights = unit(c(0.3, 0.10, 3.25, 0.15, 3.25, 0.15, 3.35, 0.15, 3.25, 0.15, 3.25, 0.10, 0.3), rep("inches", 9))))
content_area_1.vp <- viewport(layout.pos.row=3, layout.pos.col=2)
content_area_2.vp <- viewport(layout.pos.row=5, layout.pos.col=2)
content_area_3.vp <- viewport(layout.pos.row=7, layout.pos.col=2)
content_area_4.vp <- viewport(layout.pos.row=9, layout.pos.col=2)
content_area_5.vp <- viewport(layout.pos.row=11, layout.pos.col=2)
top.border.vp <- viewport(layout.pos.row=1, layout.pos.col=1:3)
bottom.border.vp <- viewport(layout.pos.row=13, layout.pos.col=1:3)
}
pushViewport(report.vp)
for (vp in seq_along(tmp_content_areas)) {
tmp_student_data <- as.data.frame(tmp_all_student_data[CONTENT_AREA==tmp_content_areas[vp]])
if (dim(tmp_student_data)[1]==0) tmp_student_data <- as.data.frame(data.table(tmp_student_data)[NA][,CONTENT_AREA := tmp_content_areas[vp]])
pushViewport(get(paste0("content_area_", vp, ".vp")))
studentGrowthPlot(
Scale_Scores=as.numeric(tmp_student_data[,paste("SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Plotting_Scale_Scores=as.numeric(tmp_student_data[,paste("TRANSFORMED_SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Achievement_Levels=as.character(tmp_student_data[,paste("ACHIEVEMENT_LEVEL", rev(sgPlot.years), sep=".")]),
SGP=as.numeric(tmp_student_data[,paste(my.sgp, rev(sgPlot.years), sep=".")]),
SGP_Levels=as.character(unlist(tmp_student_data[,paste(my.sgp.level, rev(sgPlot.years), sep=".")])),
Grades=as.character(tmp_student_data[,paste("GRADE", rev(sgPlot.years), sep=".")]),
Content_Areas=as.character(tmp_student_data[,paste("CONTENT_AREA_LABELS", rev(sgPlot.years), sep=".")]),
Cuts=list(
NY1=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_1", names(tmp_student_data))), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_2", names(tmp_student_data))), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_3", names(tmp_student_data))), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
Plotting_Cuts=list(
NY1=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
SGP_Targets=list(
CUKU=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
CUKU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
MUSU=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
MUSU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
CUSTOM_TRAJECTORY=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_AGP']][1],
CUSTOM_TRAJECTORY_Current=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_AGP']][1]),
SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][3]))),
Plotting_SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][3]))),
Cutscores=sgPlot.cutscores[[strsplit(tmp_content_areas[vp], "[.]")[[1]][1]]],
Years=rev(sgPlot.years),
Report_Parameters=list(Current_Year=last.year, Content_Area=strsplit(tmp_content_areas[vp], "[.]")[[1]][1],
Content_Area_Title=tmp_student_data[[paste("CONTENT_AREA_LABELS", last.year, sep=".")]],
State=state, Denote_Content_Area=tmp_student_data[['CONTENT_AREA_RESPONSIBILITY']]=="Content Area Responsibility: Yes", SGP_Targets=sgPlot.sgp.targets,
Assessment_Transition=sgPlot.linkages, Fan=SGP::SGPstateData[[state]][["SGP_Configuration"]][['sgPlot.fan.condition']]))
popViewport()
} ## END loop over tmp_content_areas
## Top Legend
if (!is.null(SGP::SGPstateData[[state]][["SGP_Configuration"]][["sgPlot.use.student.school.name"]])) {
student_school_name <- sort(unique(tmp_student_data[[paste("SCHOOL_NAME", last.year, sep=".")]]))[1] # sort to get rid of potential NA values
} else student_school_name <- tmp_school_name
if (!is.null(SGP::SGPstateData[[state]][["SGP_Configuration"]][["sgPlot.use.student.id"]])) {
tmp.student.name <- paste0(FIRST_NAME, " ", LAST_NAME, " - ", student_number)
} else tmp.student.name <- paste0(FIRST_NAME, " ", LAST_NAME)
pushViewport(top.border.vp)
grid.rect(gp=gpar(fill=sgPlot.header.footer.color, col=sgPlot.header.footer.color))
grid.text(x=0.025, y=0.5, tmp.student.name,
gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", col="white", cex=1.65), just="left", default.units="native")
grid.text(x=0.975, y=0.5, paste0(student_school_name, ": ", FIRST_NAME_TEACHER, " ", LAST_NAME_TEACHER),
gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", col="white", cex=1.65), just="right", default.units="native")
popViewport()
## Bottom Legend
pushViewport(bottom.border.vp)
grid.rect(gp=gpar(fill=sgPlot.header.footer.color, col=sgPlot.header.footer.color))
grid.text(x=0.02, y=0.70, paste("For more information please visit the", tmp.organization$Name, paste0("(", gsub("the ", "", tmp.organization$Abbreviation), ")"),
"at", tmp.organization$URL, "or contact", tmp.organization$Contact), gp=gpar(cex=0.8, col="white"), default.units="native", just="left")
copyright.text <- paste0("Cooperatively developed by the ", tmp.organization$Abbreviation, " & the Center for Assessment, Inc.")
grid.text(x=0.02, y=0.30, paste0(copyright.text, " Distributed by the ", tmp.organization$Abbreviation, "."),
gp=gpar(cex=0.8, col="white"), default.units="native", just="left")
popViewport()
## Left Legend (Only with one or two content areas depicted)
if (num.charts %in% c(1,2,4)) {
pushViewport(left.legend.vp)
# Interpretation
interpretation.y <- 0.93
achievement.level.region.colors <- paste0("grey", round(seq(62, 91, length=number.achievement.level.regions)))
grid.roundrect(x=unit(0.5, "native"), y=unit(interpretation.y, "native"), width=unit(0.9, "native"), height=unit(0.06, "native"),
gp=gpar(fill=sgPlot.header.footer.color, col="black"))
grid.text(x=0.5, y=interpretation.y+0.012, "How to interpret this student", gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", cex=1.05, col="white"))
grid.text(x=0.5, y=interpretation.y-0.012, "growth & achievement report", gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", cex=1.05, col="white"))
grid.roundrect(x=unit(0.2, "native"), y=unit(interpretation.y-0.08, "native"), width=unit(0.1, "native"), height=unit(0.05, "native"), r=unit(0.02, "inches"),
gp=gpar(fill=achievement.level.region.colors[1], lwd=1))
grid.circle(x=0.2, y=interpretation.y-0.08, r=0.02, default.units="native", gp=gpar(fill="white"))
grid.text(x=0.325, y=interpretation.y-0.0675, tmp.abbreviation, gp=gpar(cex=0.9), default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.0925, "Scale Score", gp=gpar(cex=0.9), default.units="native", just="left")
tmp.rect.height <- 0.125/number.achievement.level.regions
for (p in seq(number.achievement.level.regions)) {
grid.rect(x=unit(0.2, "native"), y=unit(interpretation.y-0.125-(p-1)*tmp.rect.height, "native"), width=unit(0.1, "native"), height=unit(tmp.rect.height, "native"),
gp=gpar(fill=rev(achievement.level.region.colors)[p], col="white", lwd=1), just=c("center", "top"))
}
grid.roundrect(x=unit(0.2, "native"), y=interpretation.y-0.125, width=unit(0.1, "native"), height=unit(0.125, "native"), r=unit(0.02, "inches"),
gp=gpar(col="black", lwd=1.5), just=c("center", "top"))
grid.text(x=0.325, y=interpretation.y-0.1625, tmp.abbreviation, default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.1875, tmp.ach.lev.text.interp[1], default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.2125, tmp.ach.lev.text.interp[2], default.units="native", just="left")
grid.polygon(x=c(0.1875, 0.1875, 0.17, 0.2, 0.23, 0.2125, 0.2125), y=interpretation.y-c(0.35, 0.30, 0.31, 0.27, 0.31, 0.30, 0.35), default.units="native",
gp=gpar(fill="grey50"))
grid.text(x=0.325, y=interpretation.y-0.285, "Student", gp=gpar(cex=0.9), default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.31, "Growth", gp=gpar(cex=0.9), default.units="native", just="left")
grid.text(x=0.325, y=interpretation.y-0.335, "Percentile", gp=gpar(cex=0.9), default.units="native", just="left")
# Suggested uses
suggested.y <- 0.52
grid.roundrect(x=unit(0.5, "native"), y=unit(suggested.y, "native"), width=unit(0.9, "native"), height=unit(0.06, "native"),
gp=gpar(fill=sgPlot.header.footer.color, col="black"))
grid.text(x=0.5, y=suggested.y, "Suggested Uses", gp=gpar(fontface="bold", fontfamily="Helvetica-Narrow", cex=1.05, col="white"))
grid.circle(x=0.075, y=suggested.y-0.07, r=0.01, gp=gpar(fill="black"), default.units="native")
grid.text(x=0.12, y=suggested.y-0.07, "Review past growth to assess", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.09, "student academic progress toward", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.11, paste(tmp.abbreviation, "achievement goals."), gp=gpar(cex=0.8), default.units="native", just="left")
grid.circle(x=0.075, y=suggested.y-0.14, r=0.01, gp=gpar(fill="black"), default.units="native")
grid.text(x=0.12, y=suggested.y-0.14, "Develop remediation or enrich-", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.16, "ment plans based on rate of", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.18, "growth needed to reach higher", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.20, paste(tmp.abbreviation, tmp.ach.lev.text.use), gp=gpar(cex=0.8), default.units="native", just="left")
if (sgPlot.fan) {
grid.circle(x=0.075, y=suggested.y-0.23, r=0.01, gp=gpar(fill="black"), default.units="native")
grid.text(x=0.12, y=suggested.y-0.23, "Identify the rate of progress", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.25, "needed in order to reach or", gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.27, paste("maintain",tmp.proficiency, "status"), gp=gpar(cex=0.8), default.units="native", just="left")
grid.text(x=0.12, y=suggested.y-0.29, paste("on the", tmp.abbreviation, "next year."), gp=gpar(cex=0.8), default.units="native", just="left")
}
# Extra stuff
grid.lines(x=1.0, y=c(0.025,0.975), gp=gpar(lwd=1.8), default.units="native")
popViewport()
} ## END Left legend
## Turn pdf device off
dev.off()
## Code to LaTeX document attaching first page/adding meta-data
system(paste0("pdflatex -interaction=batchmode student_report_", i, "_", j, "_", k, ".tex"), ignore.stdout = TRUE)
file.rename(paste0("student_report_", i, "_", j, "_", k, ".pdf"), paste0(path.to.pdfs, "/", paste(head(unlist(strsplit(file_name, "_")), -1), collapse="_"), ".pdf"))
} ### END "PDF" %in% sgPlot.output.format
if (any(c("PNG", "PDF_PIECES") %in% sgPlot.output.format)) {
report.png.vp <- viewport(width = unit(8.1, "inches"), height = unit(3.64, "inches"))
for (vp in seq_along(tmp_content_areas)) {
if ("PNG" %in% sgPlot.output.format) {
Cairo(file.path(path.to.pdfs, paste(paste(n, vp, sep="_"), "png", sep=".")), width=8.2, height=3.74, units="in", dpi=144, pointsize=10.5, bg="transparent")
} else {
pdf(file.path(path.to.pdfs, paste(paste(n, vp, sep="_"), "pdf", sep=".")), width=8.2, height=3.74, version="1.4")
}
tmp_student_data <- as.data.frame(tmp_all_student_data[CONTENT_AREA==tmp_content_areas[vp]])
if (dim(tmp_student_data)[1]==0) tmp_student_data <- as.data.frame(data.table(tmp_student_data)[NA][,CONTENT_AREA := tmp_content_areas[vp]])
pushViewport(report.png.vp)
studentGrowthPlot(
Scale_Scores=as.numeric(tmp_student_data[,paste("SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Plotting_Scale_Scores=as.numeric(tmp_student_data[,paste("TRANSFORMED_SCALE_SCORE", rev(sgPlot.years), sep=".")]),
Achievement_Levels=as.character(tmp_student_data[,paste("ACHIEVEMENT_LEVEL", rev(sgPlot.years), sep=".")]),
SGP=as.numeric(tmp_student_data[,paste(my.sgp, rev(sgPlot.years), sep=".")]),
SGP_Levels=as.character(unlist(tmp_student_data[,paste(my.sgp.level, rev(sgPlot.years), sep=".")])),
Grades=as.character(tmp_student_data[,paste("GRADE", rev(sgPlot.years), sep=".")]),
Content_Areas=as.character(tmp_student_data[,paste("CONTENT_AREA_LABELS", rev(sgPlot.years), sep=".")]),
Cuts=list(
NY1=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_1", names(tmp_student_data))), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_2", names(tmp_student_data))), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,setdiff(intersect(grep(trajectory.cuts, names(tmp_student_data)),
grep("YEAR_3", names(tmp_student_data))), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
Plotting_Cuts=list(
NY1=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_1_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY2=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_2_CURRENT_TRANSFORMED", names(tmp_student_data)))]),
NY3=as.numeric(tmp_student_data[,intersect(grep(trajectory.cuts, names(tmp_student_data)), grep("YEAR_3_CURRENT_TRANSFORMED", names(tmp_student_data)))])),
SGP_Targets=list(
CUKU=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
CUKU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
MUSU=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], sep="_"), last.year, sep=".")]],
MUSU_Current=tmp_student_data[[paste(paste(my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "CURRENT", sep="_"), last.year, sep=".")]],
CUSTOM_TRAJECTORY=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_AGP']][1],
CUSTOM_TRAJECTORY_Current=tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_AGP']][1]),
SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET']][3]))),
Plotting_SGP_Scale_Score_Targets=list(
CUKU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
MUSU=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['LAGGED_SS_TARGET_PLOTTING']][3])),
CUKU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
MUSU_Current=list(
NY1=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_1_CURRENT_TRANSFORMED", sep="_")]]),
NY2=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_2_CURRENT_TRANSFORMED", sep="_")]]),
NY3=as.numeric(tmp_student_data[[paste('SCALE_SCORE', my.sgp.target.label[1], "MOVE_UP_STAY_UP", my.sgp.target.label[2], "PROJ_YEAR_3_CURRENT_TRANSFORMED", sep="_")]])),
CUSTOM_TRAJECTORY_Current=list(
NY1=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][1]),
NY2=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][2]),
NY3=as.numeric(tmp_student_data[[paste('ISR_CUSTOM_DATA', last.year, sep=".")]][[1]][['CURRENT_SS_TARGET_PLOTTING']][3]))),
Cutscores=sgPlot.cutscores[[strsplit(tmp_content_areas[vp], "[.]")[[1]][1]]],
Years=rev(sgPlot.years),
Report_Parameters=list(Current_Year=last.year, Content_Area=strsplit(tmp_content_areas[vp], "[.]")[[1]][1],
Content_Area_Title=tmp_student_data[[paste("CONTENT_AREA_LABELS", last.year, sep=".")]],
State=state, Denote_Content_Area=tmp_student_data[['CONTENT_AREA_RESPONSIBILITY']]=="Content Area Responsibility: Yes", SGP_Targets=sgPlot.sgp.targets,
Assessment_Transition=sgPlot.linkages, Fan=SGP::SGPstateData[[state]][["SGP_Configuration"]][['sgPlot.fan.condition']]))
popViewport()
dev.off()
} ## END loop over tmp_content_areas
} ### END if ("PNG" %in% sgPlot.output.format)
} ## END for loop for STUDENTS (n)
} ## END for loop for GRADES (l)
cat("\\end{document}", file=paste0("instructor_catalog_", i, "_", j, "_", k, ".tex"), append=TRUE)
system(paste0("pdflatex -interaction=batchmode instructor_catalog_", i, "_", j, "_", k, ".tex"), ignore.stdout = TRUE)
system(paste0("pdflatex -interaction=batchmode instructor_catalog_", i, "_", j, "_", k, ".tex"), ignore.stdout = TRUE)
file.rename(paste0("instructor_catalog_", i, "_", j, "_", k, ".pdf"), file.path(sgPlot.folder, year_folder, district_folder, school_folder, instructor_folder,
paste0(year_folder, "_", district_folder, "_", school_folder, "_Individual_SGP_Report_Catalog.pdf")))
if (sgPlot.cleanup & "PDF" %in% sgPlot.output.format) {
files.to.remove <- list.files(pattern=paste(i, j, k, sep="_"), all.files=TRUE)
lapply(files.to.remove, file.remove)
files.to.remove <- list.files(path=file.path(sgPlot.folder, year_folder, district_folder, school_folder, instructor_folder), pattern="REPORT", all.files=TRUE, full.names=TRUE, recursive=TRUE)
lapply(files.to.remove, file.remove)
}
if (identical(.Platform$OS.type, "unix") & sgPlot.zip) {
if (1000*as.numeric(unlist(strsplit(system(paste("du -s", file.path(sgPlot.folder, year_folder, district_folder, school_folder, instructor_folder)), intern=TRUE), "\t"))[1]) > 4000000000) {
tmp.working.directory <- getwd()
setwd(file.path(sgPlot.folder, year_folder, district_folder, school_folder))
if (paste0(instructor_folder, ".tar.gz") %in% list.files()) file.remove(paste0(instructor_folder, ".tar.gz"))
system(paste("tar cfz", paste0(instructor_folder, ".tar.gz"), instructor_folder, sep=" "))
setwd(tmp.working.directory)
} else {
tmp.working.directory <- getwd()
setwd(file.path(sgPlot.folder, year_folder, district_folder, school_folder))
if (paste0(instructor_folder, ".zip") %in% list.files()) file.remove(paste0(instructor_folder, ".zip"))
suppressMessages(
zip(paste0(instructor_folder, ".zip"), instructor_folder, flags="-rmq1")
)
setwd(tmp.working.directory)
}
unlink(file.path(sgPlot.folder, year_folder, district_folder, school_folder, instructor_folder), recursive=TRUE)
}
messageSGP(paste("\tStarted", last.year, tmp_school_name, "Instructor:", tmp_instructor_name, "student growth plots:", started.date))
messageSGP(paste("\tFinished", last.year, tmp_school_name, "Instructor:", tmp_instructor_name, "student growth plots:", prettyDate(), "in", convertTime(timetakenSGP(started.at)), "\n"))
} ## END for loop for INSTRUCTORS (k)
} ## END for loop for SCHOOLS (j)
} ## END for loop for DISTRICTS (i)
return("DONE")
} ### END if (reports.by.instructor)
} ## END studentGrowthPlot_Styles function
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.