diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 583decfd..6fddca0d 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -4,4 +4,4 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
- interval: "daily"
\ No newline at end of file
+ interval: "weekly"
diff --git a/IDR/resources/queries/bimber_data/idrAnchorDateSource.sql b/IDR/resources/queries/bimber_data/idrAnchorDateSource.sql
index 7bdf019d..50205baf 100644
--- a/IDR/resources/queries/bimber_data/idrAnchorDateSource.sql
+++ b/IDR/resources/queries/bimber_data/idrAnchorDateSource.sql
@@ -7,6 +7,7 @@ PID0 as date,
FROM bimber_data.subjects
WHERE PID0 IS NOT NULL
+AND Cohort NOT IN ('PC549', 'PC585', 'PC529') AND Cohort NOT LIKE 'W%'
UNION ALL
@@ -18,4 +19,5 @@ D0 as date,
'Hansen/IDR' as dataSource
FROM bimber_data.subjects
-WHERE D0 IS NOT NULL
\ No newline at end of file
+WHERE D0 IS NOT NULL
+ AND Cohort NOT IN ('PC549', 'PC585', 'PC529') AND Cohort NOT LIKE 'W%'
\ No newline at end of file
diff --git a/IDR/resources/queries/bimber_data/idrOutcomeSource.sql b/IDR/resources/queries/bimber_data/idrOutcomeSource.sql
index d254000c..277eb04e 100644
--- a/IDR/resources/queries/bimber_data/idrOutcomeSource.sql
+++ b/IDR/resources/queries/bimber_data/idrOutcomeSource.sql
@@ -12,4 +12,5 @@ END as outcome,
'Hansen/IDR' as dataSource
FROM bimber_data.subjects
-WHERE contprog IS NOT NULL AND contprog != ''
\ No newline at end of file
+WHERE contprog IS NOT NULL AND contprog != ''
+AND Cohort NOT IN ('PC549', 'PC585', 'PC529') AND Cohort NOT LIKE 'W%'
\ No newline at end of file
diff --git a/SivStudies/resources/etls/idr-data.xml b/SivStudies/resources/etls/idr-data.xml
index f686476f..a7756e8c 100644
--- a/SivStudies/resources/etls/idr-data.xml
+++ b/SivStudies/resources/etls/idr-data.xml
@@ -125,7 +125,7 @@
-
+
diff --git a/SivStudies/resources/queries/studies/studies.query.xml b/SivStudies/resources/queries/studies/studies.query.xml
new file mode 100644
index 00000000..bc903ae8
--- /dev/null
+++ b/SivStudies/resources/queries/studies/studies.query.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+ true
+ false
+ false
+ Summary Information
+
+ studies
+ studiesSummary
+ rowId
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SivStudies/resources/queries/studies/studies/.qview.xml b/SivStudies/resources/queries/studies/studies/.qview.xml
new file mode 100644
index 00000000..69765c5a
--- /dev/null
+++ b/SivStudies/resources/queries/studies/studies/.qview.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SivStudies/resources/queries/studies/studiesSummary.query.xml b/SivStudies/resources/queries/studies/studiesSummary.query.xml
new file mode 100644
index 00000000..6f01b8d1
--- /dev/null
+++ b/SivStudies/resources/queries/studies/studiesSummary.query.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ Studies Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # Animals
+
+
+ Sex(es)
+
+
+ SIV Challenges
+
+
+ ART Initiation(s) (DPI)
+
+
+ Interventions
+
+
+
+
+
+
diff --git a/SivStudies/resources/queries/studies/studiesSummary.sql b/SivStudies/resources/queries/studies/studiesSummary.sql
new file mode 100644
index 00000000..c79c61e2
--- /dev/null
+++ b/SivStudies/resources/queries/studies/studiesSummary.sql
@@ -0,0 +1,16 @@
+SELECT
+ s.rowId,
+ s.labelOrName,
+ s.description,
+ group_concat(DISTINCT a.cohortId.labelOrName, char(10)) as cohorts,
+ count(DISTINCT a.Id) as numAnimals,
+ group_concat(DISTINCT a.DataSets.Demographics.sex) as sexes,
+ group_concat(DISTINCT a.sivArt.allInfections, char(10)) as challenges,
+ group_concat(DISTINCT a.sivArt.artInitiationDPI, char(10)) as artInitiationsDPI,
+ group_concat(DISTINCT a.interventions.allInterventions, char(10)) as interventions,
+
+
+FROM studies.studies s
+LEFT JOIN study.assignment a ON (a.cohortId.studyId = s.rowId)
+
+GROUP BY s.rowId, s.labelOrName, s.description
\ No newline at end of file
diff --git a/SivStudies/resources/queries/studies/studyCohortSummary.query.xml b/SivStudies/resources/queries/studies/studyCohortSummary.query.xml
new file mode 100644
index 00000000..8103e4aa
--- /dev/null
+++ b/SivStudies/resources/queries/studies/studyCohortSummary.query.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ Study Cohort Summary
+
+
+
+
+
+ Study Name
+
+
+
+
+
+ Cohort Name
+
+
+ # Animals
+
+
+ Sex(es)
+
+
+ SIV Challenges
+
+
+ ART Initiation(s) (DPI)
+
+
+ Interventions
+
+
+
+
+
+
diff --git a/SivStudies/resources/queries/studies/studyCohortSummary.sql b/SivStudies/resources/queries/studies/studyCohortSummary.sql
new file mode 100644
index 00000000..f9626cf7
--- /dev/null
+++ b/SivStudies/resources/queries/studies/studyCohortSummary.sql
@@ -0,0 +1,16 @@
+SELECT
+ sc.rowId,
+ sc.studyId.labelOrName as studyName,
+ sc.labelOrName,
+ sc.studyId.description,
+ count(DISTINCT a.Id) as numAnimals,
+ group_concat(DISTINCT a.DataSets.Demographics.sex) as sexes,
+ group_concat(DISTINCT a.sivArt.allInfections, char(10)) as challenges,
+ group_concat(DISTINCT a.sivArt.artInitiationDPI, char(10)) as artInitiationsDPI,
+ group_concat(DISTINCT a.interventions.allInterventions, char(10)) as interventions
+
+
+FROM studies.studyCohorts sc
+LEFT JOIN study.assignment a ON (a.cohortId = sc.rowId)
+
+GROUP BY sc.rowId, sc.labelOrName, sc.studyId.description, sc.studyId.labelOrName
\ No newline at end of file
diff --git a/SivStudies/resources/queries/studies/studyCohorts.query.xml b/SivStudies/resources/queries/studies/studyCohorts.query.xml
new file mode 100644
index 00000000..00428ae1
--- /dev/null
+++ b/SivStudies/resources/queries/studies/studyCohorts.query.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+ true
+ false
+ false
+ Summary Information
+
+ studies
+ studyCohortSummary
+ rowId
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SivStudies/resources/queries/studies/studyCohorts/.qview.xml b/SivStudies/resources/queries/studies/studyCohorts/.qview.xml
new file mode 100644
index 00000000..2dc419f7
--- /dev/null
+++ b/SivStudies/resources/queries/studies/studyCohorts/.qview.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SivStudies/resources/queries/study/demographics/Expanded ART Detail.qview.xml b/SivStudies/resources/queries/study/demographics/Expanded ART Detail.qview.xml
new file mode 100644
index 00000000..d74baa9e
--- /dev/null
+++ b/SivStudies/resources/queries/study/demographics/Expanded ART Detail.qview.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SivStudies/resources/queries/study/demographics/Expanded Vaccine Detail.qview.xml b/SivStudies/resources/queries/study/demographics/Expanded Vaccine Detail.qview.xml
new file mode 100644
index 00000000..5734403d
--- /dev/null
+++ b/SivStudies/resources/queries/study/demographics/Expanded Vaccine Detail.qview.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SivStudies/resources/queries/study/demographics/Expanded.qview.xml b/SivStudies/resources/queries/study/demographics/Expanded.qview.xml
index 9e3d0a62..9ac5f0b1 100644
--- a/SivStudies/resources/queries/study/demographics/Expanded.qview.xml
+++ b/SivStudies/resources/queries/study/demographics/Expanded.qview.xml
@@ -4,8 +4,6 @@
-
-
diff --git a/SivStudies/resources/queries/study/demographics/SIV and ART Info.qview.xml b/SivStudies/resources/queries/study/demographics/SIV and ART Info.qview.xml
index 43f68638..028b3a7b 100644
--- a/SivStudies/resources/queries/study/demographics/SIV and ART Info.qview.xml
+++ b/SivStudies/resources/queries/study/demographics/SIV and ART Info.qview.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/SivStudies/resources/queries/study/demographicsChallengeAndArt.query.xml b/SivStudies/resources/queries/study/demographicsChallengeAndArt.query.xml
index db95fd32..c0e5e43a 100644
--- a/SivStudies/resources/queries/study/demographicsChallengeAndArt.query.xml
+++ b/SivStudies/resources/queries/study/demographicsChallengeAndArt.query.xml
@@ -12,11 +12,13 @@
SIV Infection
/query/executeQuery.view?schemaName=study&query.queryName=treatments&query.Id~eq=${Id}&query.category~eq=SIV Infection
_blank
+ 150
- ART
+ ART Regimen
/query/executeQuery.view?schemaName=study&query.queryName=treatments&query.Id~eq=${Id}&query.category~eq=ART
_blank
+ 175
Infection Date
diff --git a/SivStudies/resources/queries/study/demographicsChallengeAndArt.sql b/SivStudies/resources/queries/study/demographicsChallengeAndArt.sql
index e9ed1f28..6805ca6d 100644
--- a/SivStudies/resources/queries/study/demographicsChallengeAndArt.sql
+++ b/SivStudies/resources/queries/study/demographicsChallengeAndArt.sql
@@ -5,13 +5,13 @@ FROM (
SELECT
t.Id,
group_concat(DISTINCT CASE
- WHEN t.category = 'SIV Infection' THEN (cast(month(t.date) as varchar) || '/' || cast(dayofmonth(t.date) as varchar) || '/' || cast(year(t.date) as varchar) || ' (' || t.treatment || ')')
+ WHEN t.category = 'SIV Infection' THEN (t.treatment || (CASE WHEN t.route IS NULL then '' ELSE (', ' || t.route) END) || (CASE WHEN t.amount IS NULL then '' ELSE (', ' || CAST(t.amount as VARCHAR) || ' ' || t.amount_units) END))
ELSE NULL
END, char(10)) as allInfections,
min(floor(age(t.DataSets.Demographics.birth, CASE WHEN t.category = 'SIV Infection' THEN t.date ELSE NULL END))) AS ageAtInfection,
group_concat(DISTINCT CASE
- WHEN t.category = 'ART' THEN (cast(month(t.date) as varchar) || '/' || cast(dayofmonth(t.date) as varchar) || '/' || cast(year(t.date) as varchar) || ' (' || t.treatment || ')')
+ WHEN t.category = 'ART' THEN (t.treatment || ' (' || COALESCE(t.timePostSivChallenge.timePostInfection, 'Unk DPI') || ')')
ELSE NULL
END, char(10)) as allART,
min(CASE
diff --git a/SivStudies/resources/queries/study/demographicsInterventions.query.xml b/SivStudies/resources/queries/study/demographicsInterventions.query.xml
index c41a1cc7..b717f3a3 100644
--- a/SivStudies/resources/queries/study/demographicsInterventions.query.xml
+++ b/SivStudies/resources/queries/study/demographicsInterventions.query.xml
@@ -22,6 +22,9 @@
First Intervention (WPI)
+
+ First Intervention Relative to ART Release (Weeks)
+
allInterventions
diff --git a/SivStudies/resources/queries/study/demographicsInterventions.sql b/SivStudies/resources/queries/study/demographicsInterventions.sql
index 306ac17a..7d1c77da 100644
--- a/SivStudies/resources/queries/study/demographicsInterventions.sql
+++ b/SivStudies/resources/queries/study/demographicsInterventions.sql
@@ -1,20 +1,10 @@
SELECT
t.Id,
- group_concat(DISTINCT CASE
- WHEN t.category = 'Intervention' THEN (t.treatment || ' (' || t.timePostSivChallenge.timePostInfection || ')')
- ELSE NULL
- END, char(10)) as allInterventions,
- min(CASE
- WHEN t.category = 'Intervention' THEN t.date
- ELSE NULL
- END) as firstInterventionDate,
- min(CASE
- WHEN t.category = 'Intervention' THEN t.timePostSivChallenge.daysPostInfection
- ELSE NULL
- END) as firstInterventionDPI,
- min(CASE
- WHEN t.category = 'Intervention' THEN t.timePostSivChallenge.weeksPostInfection
- ELSE NULL
- END) as firstInterventionWPI
+ group_concat(DISTINCT (t.treatment || ' (' || COALESCE(t.timePostSivChallenge.timePostInfection, 'Unk DPI') || ')'), char(10)) as allInterventions,
+ min(t.date) as firstInterventionDate,
+ min(t.timePostSivChallenge.daysPostInfection) as firstInterventionDPI,
+ min(t.timePostSivChallenge.weeksPostInfection) as firstInterventionWPI,
+ min(t.timePostSivChallenge.weeksPostInfection) - min(t.sivART.artReleaseWPI) as firstInterventionPostArtReleaseWeeks
FROM study.treatments t
+WHERE t.category = 'Intervention'
GROUP BY t.Id
\ No newline at end of file
diff --git a/SivStudies/resources/queries/study/demographicsProjects.query.xml b/SivStudies/resources/queries/study/demographicsProjects.query.xml
index 40389751..11e8665c 100644
--- a/SivStudies/resources/queries/study/demographicsProjects.query.xml
+++ b/SivStudies/resources/queries/study/demographicsProjects.query.xml
@@ -12,7 +12,16 @@
Study Categories
- All Studies
+ Studies
+ /query/executeQuery.view?schemaName=study&query.queryName=assignment&query.Id~eq=${Id}
+ _blank
+
+
+ Studies and Analyses
+
+
+ Analysis Groups
+ 150
Subgroups/Treatments
diff --git a/SivStudies/resources/queries/study/demographicsProjects.sql b/SivStudies/resources/queries/study/demographicsProjects.sql
index d1a8689e..b54d1591 100644
--- a/SivStudies/resources/queries/study/demographicsProjects.sql
+++ b/SivStudies/resources/queries/study/demographicsProjects.sql
@@ -1,7 +1,9 @@
SELECT
s.Id,
count(s.Id) as totalProjects,
- group_concat(DISTINCT s.study, char(10)) as allStudies,
+ group_concat(DISTINCT s.study, char(10)) as allStudiesAndAnalyses,
+ group_concat(DISTINCT CASE WHEN s.category = 'Analysis Cohorts' THEN NULL ELSE s.study END, char(10)) as allStudies,
+ group_concat(DISTINCT CASE WHEN s.category = 'Analysis Cohorts' THEN s.study ELSE NULL END, char(10)) as analysisGroups,
group_concat(DISTINCT s.cohortId.studyId.description, char(10)) as studyDescription,
group_concat(DISTINCT s.category, char(10)) as categories,
group_concat(DISTINCT s.subgroup, char(10)) as subgroups
diff --git a/SivStudies/resources/queries/study/infectionAnchorDateDiscordance.sql b/SivStudies/resources/queries/study/infectionAnchorDateDiscordance.sql
index c19cd094..cb140f34 100644
--- a/SivStudies/resources/queries/study/infectionAnchorDateDiscordance.sql
+++ b/SivStudies/resources/queries/study/infectionAnchorDateDiscordance.sql
@@ -1,16 +1,15 @@
SELECT
- t.Id,
+ coalesce(t.Id, t2.subjectId) as Id,
'SIV Infection' as category,
t.date as treatmentTableDate,
t2.date as subjectAnchorDatesTableDate
FROM study.treatments t
FULL JOIN studies.subjectAnchorDates t2 ON (
- t.category = 'SIV Infection' AND
- t2.subjectId = t.Id AND
- t2.eventLabel = 'SIV Infection'
+ t.category = t2.eventLabel AND
+ t2.subjectId = t.Id
)
-WHERE t2.date != t.date OR
+WHERE (t2.date != t.date OR
t2.date IS NULL OR
- t.date IS NULL
\ No newline at end of file
+ t.date IS NULL) AND COALESCE(t.category, t2.eventLabel) = 'SIV Infection'
\ No newline at end of file
diff --git a/SivStudies/resources/queries/study/missingAnchorDates.query.xml b/SivStudies/resources/queries/study/missingAnchorDates.query.xml
new file mode 100644
index 00000000..78b2805f
--- /dev/null
+++ b/SivStudies/resources/queries/study/missingAnchorDates.query.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SivStudies/resources/queries/study/missingAnchorDates.sql b/SivStudies/resources/queries/study/missingAnchorDates.sql
new file mode 100644
index 00000000..ba56cacf
--- /dev/null
+++ b/SivStudies/resources/queries/study/missingAnchorDates.sql
@@ -0,0 +1,30 @@
+SELECT
+ dc.Id as SubjectId,
+ dc.infectionDate as date,
+ 'SIV Infection' as eventLabel
+
+FROM study.demographicsChallengeAndArt dc
+LEFT JOIN studies.subjectAnchorDates ad ON (dc.Id = ad.SubjectId AND dc.infectionDate = ad.date AND ad.eventLabel = 'SIV Infection')
+WHERE ad.rowid IS NULL AND dc.infectionDate IS NOT NULL
+
+UNION ALL
+
+SELECT
+ dc.Id as SubjectId,
+ dc.artInitiationDate as date,
+ 'ART Initiation' as eventLabel
+
+FROM study.demographicsChallengeAndArt dc
+ LEFT JOIN studies.subjectAnchorDates ad ON (dc.Id = ad.SubjectId AND dc.artInitiationDate = ad.date AND ad.eventLabel = 'ART Initiation')
+WHERE ad.rowid IS NULL AND dc.artInitiationDate IS NOT NULL
+
+UNION ALL
+
+SELECT
+ dc.Id as SubjectId,
+ dc.artReleaseDate as date,
+ 'ART Release' as eventLabel
+
+FROM study.demographicsChallengeAndArt dc
+ LEFT JOIN studies.subjectAnchorDates ad ON (dc.Id = ad.SubjectId AND dc.artReleaseDate = ad.date AND ad.eventLabel = 'ART Release')
+WHERE ad.rowid IS NULL AND dc.artReleaseDate IS NOT NULL
\ No newline at end of file
diff --git a/SivStudies/resources/queries/study/treatments/With SIV-ART Dates.qview.xml b/SivStudies/resources/queries/study/treatments/With SIV-ART Dates.qview.xml
new file mode 100644
index 00000000..087c2d4f
--- /dev/null
+++ b/SivStudies/resources/queries/study/treatments/With SIV-ART Dates.qview.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SivStudies/src/org/labkey/sivstudies/etl/PerformManualIdrStepsTask.java b/SivStudies/src/org/labkey/sivstudies/etl/PerformManualIdrStepsTask.java
index 756f96ee..c604e013 100644
--- a/SivStudies/src/org/labkey/sivstudies/etl/PerformManualIdrStepsTask.java
+++ b/SivStudies/src/org/labkey/sivstudies/etl/PerformManualIdrStepsTask.java
@@ -41,6 +41,9 @@ public RecordedActionSet run(@NotNull PipelineJob pipelineJob) throws PipelineJo
updateVaccineInformation(pipelineJob);
updateChallengeAnchorDates(pipelineJob);
updateArtInitiationAnchorDates(pipelineJob);
+ updateJS46();
+
+ // TODO: Set other cohort-by-cohort params
return new RecordedActionSet();
}
@@ -283,4 +286,44 @@ public void setContainerUser(ContainerUser containerUser)
{
_containerUser = containerUser;
}
+
+ private void updateJS46() throws PipelineJobException
+ {
+ updateTreatmentRecords("JS46", new SimpleFilter(FieldKey.fromString("treatment"), "SIV - Unknown"), Map.of("treatment", "SIVmac239", "route", "IV"));
+ }
+
+ private void updateTreatmentRecords(String cohortName, SimpleFilter treatmentFilter, final Map additionalProps) throws PipelineJobException
+ {
+ TableInfo assignments = QueryService.get().getUserSchema(_containerUser.getUser(), _containerUser.getContainer(), "study").getTable("assignment");
+ List ids = new TableSelector(assignments, PageFlowUtil.set("Id"), new SimpleFilter(FieldKey.fromString("study"), cohortName), null).getArrayList(String.class);
+ treatmentFilter.addCondition(FieldKey.fromString("Id"), ids, CompareType.IN);
+
+ TableInfo treatments = QueryService.get().getUserSchema(_containerUser.getUser(), _containerUser.getContainer(), "study").getTable("treatments");
+ List