Mercurial > hg > orthanc-tests
comparison PerfsDb/DbPopulator.py @ 161:27b3b0df5f90
2 upload tests
author | am@osimis.io |
---|---|
date | Fri, 17 Aug 2018 17:24:11 +0200 |
parents | df1f9946571c |
children | dbc42a03ee75 |
comparison
equal
deleted
inserted
replaced
160:6995d5d12d88 | 161:27b3b0df5f90 |
---|---|
1 import typing | 1 import typing |
2 import time | |
2 from orthancRestApi import OrthancClient | 3 from orthancRestApi import OrthancClient |
3 | 4 from TestResult import TestResult |
4 from DbSize import DbSize | 5 from DbSize import DbSize |
5 | 6 |
6 class DbPopulator: | 7 class DbPopulator: |
7 | 8 |
8 def __init__(self, orthanc: OrthancClient, dbSize: DbSize): | 9 def __init__(self, orthanc: OrthancClient, dbSize: DbSize): |
9 self._orthanc = orthanc | 10 self._orthanc = orthanc |
10 self._dbSize = dbSize | 11 self._dbSize = dbSize |
11 self._sourceInstanceId = None | 12 self._sourceInstanceId = None |
12 | 13 self._fileCounter = 0 |
14 | |
13 def populate(self): | 15 def populate(self): |
14 self._sourceInstanceId = self._orthanc.uploadDicomFile("../Database/DummyCT.dcm") | 16 self._sourceInstanceId = self._orthanc.uploadDicomFile("../Database/DummyCT.dcm") |
15 | 17 |
16 if self._dbSize == DbSize.Tiny: | 18 if self._dbSize == DbSize.Tiny: |
17 patientCount = 1 | 19 patientCount = 1 |
18 smallStudiesPerPatient = 2 | 20 smallStudiesPerPatient = 2 |
19 largeStudiesPerPatient = 1 | 21 largeStudiesPerPatient = 1 |
22 seriesPerSmallStudy = 1 | |
23 seriesPerLargeStudy = 2 | |
24 instancesPerSmallSeries = 1 | |
20 instancesPerLargeSeries = 5 | 25 instancesPerLargeSeries = 5 |
21 elif self._dbSize == DbSize.Small: | 26 elif self._dbSize == DbSize.Small: |
22 patientCount = 20 | 27 patientCount = 100 |
23 smallStudiesPerPatient = 2 | 28 smallStudiesPerPatient = 2 |
24 largeStudiesPerPatient = 1 | 29 largeStudiesPerPatient = 1 |
25 instancesPerLargeSeries = 300 | 30 seriesPerSmallStudy = 1 |
31 seriesPerLargeStudy = 2 | |
32 instancesPerSmallSeries = 1 | |
33 instancesPerLargeSeries = 30 | |
26 elif self._dbSize == DbSize.Medium: | 34 elif self._dbSize == DbSize.Medium: |
27 patientCount = 1000 | 35 patientCount = 1000 |
28 smallStudiesPerPatient = 2 | 36 smallStudiesPerPatient = 2 |
29 largeStudiesPerPatient = 1 | 37 largeStudiesPerPatient = 2 |
30 instancesPerLargeSeries = 500 | 38 seriesPerSmallStudy = 1 |
39 seriesPerLargeStudy = 2 | |
40 instancesPerSmallSeries = 1 | |
41 instancesPerLargeSeries = 300 | |
31 elif self._dbSize == DbSize.Large: | 42 elif self._dbSize == DbSize.Large: |
32 patientCount = 20000 | 43 patientCount = 10000 |
33 smallStudiesPerPatient = 4 | 44 smallStudiesPerPatient = 2 |
34 largeStudiesPerPatient = 8 | 45 largeStudiesPerPatient = 2 |
35 instancesPerLargeSeries = 500 | 46 seriesPerSmallStudy = 1 |
47 seriesPerLargeStudy = 2 | |
48 instancesPerSmallSeries = 1 | |
49 instancesPerLargeSeries = 300 | |
36 else: | 50 else: |
37 raise NotImplementedError | 51 raise NotImplementedError |
38 | 52 |
53 print("Will generate data for (approximately):") | |
54 print("{n:>12} patients".format(n=patientCount)) | |
55 print("{n:>12} studies".format(n=patientCount * (smallStudiesPerPatient + largeStudiesPerPatient))) | |
56 print("{n:>12} instances".format(n=patientCount * (smallStudiesPerPatient * seriesPerSmallStudy * instancesPerSmallSeries + largeStudiesPerPatient * seriesPerLargeStudy * instancesPerLargeSeries))) | |
57 | |
58 startTime = time.time() | |
39 # first add data that are the same in small and large DBs (and that can be used in tests for comparing the same things !!) | 59 # first add data that are the same in small and large DBs (and that can be used in tests for comparing the same things !!) |
40 | 60 |
41 # used in TestFindStudyByPatientId5Results | 61 # used in TestFindStudyByPatientId5Results |
42 self.createStudy(studyIndex=99994, patientIndex=99998, seriesCount=1, instancesPerSeries=1) | 62 self.createStudy(studyIndex=99994, patientIndex=99998, seriesCount=1, instancesPerSeries=1) |
43 self.createStudy(studyIndex=99995, patientIndex=99998, seriesCount=1, instancesPerSeries=1) | 63 self.createStudy(studyIndex=99995, patientIndex=99998, seriesCount=1, instancesPerSeries=1) |
53 for patientIndex in range(0, patientCount): | 73 for patientIndex in range(0, patientCount): |
54 studyIndex=0 | 74 studyIndex=0 |
55 print("Generating data for patient " + str(patientIndex)) | 75 print("Generating data for patient " + str(patientIndex)) |
56 for i in range(0, smallStudiesPerPatient): | 76 for i in range(0, smallStudiesPerPatient): |
57 print("Generating small study " + str(i)) | 77 print("Generating small study " + str(i)) |
58 self.createStudy(studyIndex=studyIndex, patientIndex=patientIndex, seriesCount=2, instancesPerSeries=instancesPerLargeSeries) | 78 self.createStudy(studyIndex=studyIndex, patientIndex=patientIndex, seriesCount=seriesPerSmallStudy, instancesPerSeries=instancesPerSmallSeries) |
59 studyIndex+=1 | 79 studyIndex+=1 |
60 for i in range(0, largeStudiesPerPatient): | 80 for i in range(0, largeStudiesPerPatient): |
61 print("Generating large study " + str(i)) | 81 print("Generating large study " + str(i)) |
62 self.createStudy(studyIndex=studyIndex, patientIndex=patientIndex, seriesCount=4, instancesPerSeries=instancesPerLargeSeries) | 82 self.createStudy(studyIndex=studyIndex, patientIndex=patientIndex, seriesCount=seriesPerLargeStudy, instancesPerSeries=instancesPerLargeSeries) |
63 studyIndex+=1 | 83 studyIndex+=1 |
64 | 84 |
65 print("Generation completed") | 85 endTime = time.time() |
86 print("Generation completed. Elapsed time: {duration:.2f} sec".format(duration=endTime-startTime)) | |
87 print("Uploaded {n} files -> {p:.2f} files/sec".format(n=self._fileCounter, p=self._fileCounter/(endTime-startTime))) | |
66 | 88 |
67 def createStudy(self, studyIndex: int, patientIndex: int, seriesCount: int, instancesPerSeries: int): | 89 def createStudy(self, studyIndex: int, patientIndex: int, seriesCount: int, instancesPerSeries: int): |
68 for seriesIndex in range(0, seriesCount): | 90 for seriesIndex in range(0, seriesCount): |
69 for instanceIndex in range(0, instancesPerSeries): | 91 for instanceIndex in range(0, instancesPerSeries): |
70 dicomFile = self.createDicomFile(patientIndex=patientIndex, studyIndex=studyIndex, seriesIndex=seriesIndex, instanceIndex=instanceIndex) | 92 dicomFile = self.createDicomFile(patientIndex=patientIndex, studyIndex=studyIndex, seriesIndex=seriesIndex, instanceIndex=instanceIndex) |
71 self._orthanc.uploadDicom(dicomFile) | 93 self._orthanc.uploadDicom(dicomFile) |
72 | 94 |
73 def createDicomFile(self, patientIndex: int, studyIndex: int, seriesIndex: int, instanceIndex: int) -> object: | 95 def createDicomFile(self, patientIndex: int, studyIndex: int, seriesIndex: int, instanceIndex: int) -> object: |
96 self._fileCounter += 1 | |
74 return self._orthanc.instances.modify( | 97 return self._orthanc.instances.modify( |
75 instanceId=self._sourceInstanceId, | 98 instanceId=self._sourceInstanceId, |
76 replaceTags={ | 99 replaceTags={ |
77 "PatientName": "Patient-" + str(patientIndex), | 100 "PatientName": "Patient-" + str(patientIndex), |
78 "PatientID": str(patientIndex), | 101 "PatientID": str(patientIndex), |