ECGProcess 1.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. ecgprocess/__init__.py +1 -0
  2. ecgprocess/_version.py +1 -0
  3. ecgprocess/constants.py +170 -0
  4. ecgprocess/errors.py +380 -0
  5. ecgprocess/example_data/__init__.py +1 -0
  6. ecgprocess/example_data/example_datasets/.example-XML1.xml.un~ +0 -0
  7. ecgprocess/example_data/example_datasets/.example-XML1.xsd.un~ +0 -0
  8. ecgprocess/example_data/example_datasets/.example-XML1_a.xsd.un~ +0 -0
  9. ecgprocess/example_data/example_datasets/.example-XML1_d.xsd.un~ +0 -0
  10. ecgprocess/example_data/example_datasets/.example-XML1_wrong.xsd.un~ +0 -0
  11. ecgprocess/example_data/example_datasets/example-DICOM1.dcm +0 -0
  12. ecgprocess/example_data/example_datasets/example-DICOM2.dcm +0 -0
  13. ecgprocess/example_data/example_datasets/example-XML1.xml +675 -0
  14. ecgprocess/example_data/example_datasets/example-XML1.xsd +518 -0
  15. ecgprocess/example_data/example_datasets/example-XML1_error.xsd +519 -0
  16. ecgprocess/example_data/example_datasets/example-XML1_wrong.xsd +519 -0
  17. ecgprocess/example_data/example_datasets/string_data.txt +1 -0
  18. ecgprocess/example_data/examples.py +501 -0
  19. ecgprocess/plot_ecgs.py +921 -0
  20. ecgprocess/process_dicom.py +243 -0
  21. ecgprocess/process_xml.py +319 -0
  22. ecgprocess/tabular.py +1394 -0
  23. ecgprocess/utils/__init__.py +1 -0
  24. ecgprocess/utils/config_tools.py +581 -0
  25. ecgprocess/utils/ecg_tools.py +311 -0
  26. ecgprocess/utils/engineering_tools.py +385 -0
  27. ecgprocess/utils/general.py +399 -0
  28. ecgprocess/utils/reader_tools.py +508 -0
  29. ecgprocess-1.1.0.dist-info/METADATA +153 -0
  30. ecgprocess-1.1.0.dist-info/RECORD +33 -0
  31. ecgprocess-1.1.0.dist-info/WHEEL +5 -0
  32. ecgprocess-1.1.0.dist-info/licenses/LICENCE.txt +17 -0
  33. ecgprocess-1.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,519 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema
3
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" >
4
+
5
+ <xs:element name="CardiologyXML">
6
+ <xs:complexType>
7
+ <xs:sequence>
8
+ <xs:element name="ObservationType" type="xs:string"/>
9
+ <!-- ObservationDateTime with nested elements -->
10
+ <xs:element name="ObservationDateTime">
11
+ <xs:complexType>
12
+ <xs:sequence>
13
+ <xs:element name="Hour" type="xs:integer"/>
14
+ <xs:element name="Minute" type="xs:integer"/>
15
+ <xs:element name="Second" type="xs:integer"/>
16
+ <xs:element name="Day" type="xs:integer"/>
17
+ <xs:element name="Month" type="xs:integer"/>
18
+ <xs:element name="Year" type="xs:integer"/>
19
+ </xs:sequence>
20
+ </xs:complexType>
21
+ </xs:element>
22
+ <!-- UID with nested element -->
23
+ <xs:element name="UID">
24
+ <xs:complexType>
25
+ <xs:sequence>
26
+ <xs:element name="DICOMStudyUID" type="xs:string"/>
27
+ </xs:sequence>
28
+ </xs:complexType>
29
+ </xs:element>
30
+ <!-- ClinicalInfo section -->
31
+ <xs:element name="ClinicalInfo">
32
+ <xs:complexType>
33
+ <xs:sequence>
34
+ <xs:element name="ReasonForStudy" type="xs:string"
35
+ minOccurs="0" nillable="true"/>
36
+ <xs:element name="Technician" type="PersonType"/>
37
+ <xs:element name="ObservationComment" type="xs:string"
38
+ minOccurs="0" nillable="true"/>
39
+ <xs:element name="DeviceInfo">
40
+ <xs:complexType>
41
+ <xs:sequence>
42
+ <xs:element name="Desc" type="xs:string"/>
43
+ <xs:element name="SoftwareVer" type="xs:string"/>
44
+ <xs:element name="AnalysisVer" type="xs:string"/>
45
+ </xs:sequence>
46
+ </xs:complexType>
47
+ </xs:element>
48
+ </xs:sequence>
49
+ </xs:complexType>
50
+ </xs:element>
51
+ <!-- PatientVisit section -->
52
+ <xs:element name="PatientVisit">
53
+ <xs:complexType>
54
+ <xs:sequence>
55
+ <xs:element name="PatientClass" type="xs:string"/>
56
+ <xs:element name="AssignedPatientLocation">
57
+ <xs:complexType>
58
+ <xs:sequence>
59
+ <xs:element name="Facility" type="xs:string"
60
+ minOccurs="0"/>
61
+ <xs:element name="LocationNumber" type="xs:integer"/>
62
+ <xs:element name="LocationName" type="xs:string"/>
63
+ </xs:sequence>
64
+ </xs:complexType>
65
+ </xs:element>
66
+ <xs:element name="PatientRoom" type="xs:string" minOccurs="0"/>
67
+ <xs:element name="AdmissionType" type="xs:string"/>
68
+ <xs:element name="OrderingProvider" type="PersonType"/>
69
+ <xs:element name="AttendingDoctor" type="PersonType"/>
70
+ <xs:element name="ReferringDoctor" type="PersonType"/>
71
+ <xs:element name="ServicingFacility">
72
+ <xs:complexType>
73
+ <xs:sequence>
74
+ <xs:element name="Name" type="xs:string"
75
+ minOccurs="1" nillable="true"/>
76
+ <xs:element name="Address">
77
+ <xs:complexType>
78
+ <xs:sequence>
79
+ <xs:element name="Street1" type="xs:string"
80
+ minOccurs="1" nillable="true"/>
81
+ <xs:element name="City" type="xs:string"
82
+ minOccurs="1" nillable="true"/>
83
+ </xs:sequence>
84
+ </xs:complexType>
85
+ </xs:element>
86
+ </xs:sequence>
87
+ </xs:complexType>
88
+ </xs:element>
89
+ <xs:element name="SysBP" type="DecimalMeasurementType"
90
+ nillable="true"/>
91
+ <xs:element name="DiaBP" type="DecimalMeasurementType"
92
+ nillable="true"/>
93
+ <xs:element name="MedicalHistory">
94
+ <xs:complexType>
95
+ <xs:sequence>
96
+ <xs:element name="MedicalHistoryText"
97
+ type="xs:string" minOccurs="0" nillable="true"/>
98
+ </xs:sequence>
99
+ </xs:complexType>
100
+ </xs:element>
101
+ <xs:element name="OrderNumber" type="xs:string" minOccurs="0"
102
+ nillable="true"/>
103
+ <xs:element name="Medications">
104
+ <xs:complexType>
105
+ <xs:sequence>
106
+ <xs:element name="Drug" type="xs:string"
107
+ minOccurs="0" nillable="true"/>
108
+ <xs:element name="Dosage" type="xs:string"
109
+ minOccurs="0" nillable="true"/>
110
+ </xs:sequence>
111
+ </xs:complexType>
112
+ </xs:element>
113
+ <!-- Can handle any number of Extra Questions -->
114
+ <xs:element name="ExtraQuestions">
115
+ <xs:complexType>
116
+ <xs:sequence>
117
+ <xs:choice maxOccurs="unbounded">
118
+ <xs:sequence>
119
+ <xs:element name="Label" minOccurs="1">
120
+ <xs:complexType>
121
+ <xs:simpleContent>
122
+ <xs:extension base="xs:string">
123
+ <xs:attribute name="Type" type="xs:string" use="required"/>
124
+ </xs:extension>
125
+ </xs:simpleContent>
126
+ </xs:complexType>
127
+ </xs:element>
128
+ <xs:element name="Content" type="xs:string" minOccurs="1" nillable="true"/>
129
+ </xs:sequence>
130
+ </xs:choice>
131
+ </xs:sequence>
132
+ </xs:complexType>
133
+ </xs:element>
134
+ </xs:sequence>
135
+ </xs:complexType>
136
+ </xs:element>
137
+
138
+ <!-- PatientInfo section -->
139
+ <xs:element name="PatientInfo">
140
+ <xs:complexType>
141
+ <xs:sequence>
142
+ <xs:element name="PID" type="xs:string"/>
143
+ <xs:element name="Name">
144
+ <xs:complexType>
145
+ <xs:sequence>
146
+ <xs:element name="FamilyName" type="xs:string"/>
147
+ <xs:element name="GivenName" type="xs:string"/>
148
+ </xs:sequence>
149
+ </xs:complexType>
150
+ </xs:element>
151
+ <xs:element name="Age" type="DecimalMeasurementType" nillable="true"/>
152
+ <xs:element name="BirthDateTime">
153
+ <xs:complexType>
154
+ <xs:sequence>
155
+ <xs:element name="Day" type="xs:integer"/>
156
+ <xs:element name="Month" type="xs:integer"/>
157
+ <xs:element name="Year" type="xs:integer"/>
158
+ </xs:sequence>
159
+ </xs:complexType>
160
+ </xs:element>
161
+ <xs:element name="Gender" type="xs:string"/>
162
+ <xs:element name="Race" type="xs:string"/>
163
+ <xs:element name="Height" type="DecimalMeasurementType"
164
+ nillable="true"/>
165
+ <xs:element name="Weight" type="DecimalMeasurementType"
166
+ nillable="true"/>
167
+ <xs:element name="PaceMaker" type="xs:string"/>
168
+ </xs:sequence>
169
+ </xs:complexType>
170
+ </xs:element>
171
+ <xs:element name="FilterSetting">
172
+ <xs:complexType>
173
+ <xs:sequence>
174
+ <xs:element name="CubicSpline" type="xs:string" minOccurs="1"/>
175
+ <xs:element name="Filter50Hz" type="xs:string" minOccurs="1"/>
176
+ <xs:element name="Filter60Hz" type="xs:string" minOccurs="1"/>
177
+ <xs:element name="LowPass" type="DecimalMeasurementType"
178
+ nillable="true"/>
179
+ <xs:element name="HighPass" type="DecimalMeasurementType"
180
+ nillable="true"/>
181
+ </xs:sequence>
182
+ </xs:complexType>
183
+ </xs:element>
184
+ <xs:element name="Device-Type" type="xs:int"/>
185
+ <xs:element name="Interpretation">
186
+ <xs:complexType>
187
+ <xs:sequence>
188
+ <xs:element name="Diagnosis">
189
+ <xs:complexType>
190
+ <xs:sequence>
191
+ <xs:element name="DiagnosisText" type="xs:string"
192
+ maxOccurs="unbounded"/>
193
+ </xs:sequence>
194
+ </xs:complexType>
195
+ </xs:element>
196
+ <xs:element name="Conclusion">
197
+ <xs:complexType>
198
+ <xs:sequence>
199
+ <xs:element name="ConclusionText" type="xs:string"
200
+ maxOccurs="unbounded"/>
201
+ </xs:sequence>
202
+ </xs:complexType>
203
+ </xs:element>
204
+ </xs:sequence>
205
+ </xs:complexType>
206
+ </xs:element>
207
+ <!-- Resting ECG -->
208
+ <xs:element name="RestingECGMeasurements">
209
+ <xs:complexType>
210
+ <xs:sequence>
211
+ <xs:element name="DiagnosisVersion" type="xs:string"
212
+ minOccurs="0" nillable="true"/>
213
+ <xs:element name="VentricularRate" type="DecimalMeasurementType"
214
+ minOccurs="0" nillable="true"/>
215
+ <xs:element name="PQInterval" type="DecimalMeasurementType"
216
+ minOccurs="0" nillable="true"/>
217
+ <xs:element name="PDuration" type="DecimalMeasurementType"
218
+ minOccurs="0" nillable="true"/>
219
+ <xs:element name="QRSDuration" type="DecimalMeasurementType"
220
+ minOccurs="0" nillable="true"/>
221
+ <xs:element name="QTInterval" type="DecimalMeasurementType"
222
+ minOccurs="0" nillable="true"/>
223
+ <xs:element name="QTCInterval" type="DecimalMeasurementType"
224
+ minOccurs="0" nillable="true"/>
225
+ <xs:element name="RRInterval" type="DecimalMeasurementType"
226
+ minOccurs="0" nillable="true"/>
227
+ <xs:element name="PPInterval" type="DecimalMeasurementType"
228
+ minOccurs="0" nillable="true"/>
229
+ <xs:element name="SokolovLVHIndex" type="DecimalMeasurementType"
230
+ minOccurs="0" nillable="true"/>
231
+ <xs:element name="PAxis" type="DecimalMeasurementType"
232
+ minOccurs="0" nillable="true"/>
233
+ <xs:element name="RAxis" type="DecimalMeasurementType"
234
+ minOccurs="0" nillable="true"/>
235
+ <xs:element name="TAxis" type="DecimalMeasurementType"
236
+ minOccurs="0" nillable="true"/>
237
+ <xs:element name="QTDispersion" type="DecimalMeasurementType"
238
+ minOccurs="0" nillable="true"/>
239
+ <xs:element name="QTDispersionBazett" type="DecimalMeasurementType"
240
+ minOccurs="0" nillable="true"/>
241
+ <xs:element name="QRSNum" type="xs:int"
242
+ minOccurs="0" nillable="true"/>
243
+ <xs:element name="MeasurementTable">
244
+ <xs:complexType>
245
+ <xs:sequence>
246
+ <xs:element name="LeadOrder" type="xs:string"/>
247
+ <xs:element name="QDuration" type="MeasurementListType"
248
+ minOccurs="0" nillable="true"/>
249
+ <xs:element name="RDuration" type="MeasurementListType"
250
+ minOccurs="0" nillable="true"/>
251
+ <xs:element name="SDuration" type="MeasurementListType"
252
+ minOccurs="0" nillable="true"/>
253
+ <xs:element name="RpDuration" type="MeasurementListType"
254
+ minOccurs="0" nillable="true"/>
255
+ <xs:element name="PAmplitude" type="MeasurementListType"
256
+ minOccurs="0" nillable="true"/>
257
+ <xs:element name="QAmplitude" type="MeasurementListType"
258
+ minOccurs="0" nillable="true"/>
259
+ <xs:element name="RAmplitude" type="MeasurementListType"
260
+ minOccurs="0" nillable="true"/>
261
+ <xs:element name="SAmplitude" type="MeasurementListType"
262
+ minOccurs="0" nillable="true"/>
263
+ <xs:element name="R1Amplitude" type="MeasurementListType"
264
+ minOccurs="0" nillable="true"/>
265
+ <xs:element name="S1Amplitude" type="MeasurementListType"
266
+ minOccurs="0" nillable="true"/>
267
+ <xs:element name="JAmplitude" type="MeasurementListType"
268
+ minOccurs="0" nillable="true"/>
269
+ <xs:element name="JXAmplitude" type="MeasurementListType"
270
+ minOccurs="0" nillable="true"/>
271
+ <xs:element name="TAmplitude" type="MeasurementListType"
272
+ minOccurs="0" nillable="true"/>
273
+ <xs:element name="JXSlope" type="MeasurementListType"
274
+ minOccurs="0" nillable="true"/>
275
+ <xs:element name="R1Duration" type="MeasurementListType"
276
+ minOccurs="0" nillable="true"/>
277
+ <xs:element name="P1Amplitude" type="MeasurementListType"
278
+ minOccurs="0" nillable="true"/>
279
+ <xs:element name="JXEAmplitude" type="MeasurementListType"
280
+ minOccurs="0" nillable="true"/>
281
+ <xs:element name="T1Amplitude" type="MeasurementListType"
282
+ minOccurs="0" nillable="true"/>
283
+ </xs:sequence>
284
+ <xs:attribute name="Creation" type="xs:string" use="required"/>
285
+ </xs:complexType>
286
+ </xs:element>
287
+ <xs:element name="POnset" type="DecimalMeasurementType"
288
+ minOccurs="0" nillable="true"/>
289
+ <xs:element name="POffset" type="DecimalMeasurementType"
290
+ minOccurs="0" nillable="true"/>
291
+ <xs:element name="QOnset" type="DecimalMeasurementType"
292
+ minOccurs="0" nillable="true"/>
293
+ <xs:element name="QOffset" type="DecimalMeasurementType"
294
+ minOccurs="0" nillable="true"/>
295
+ <xs:element name="TOffset" type="DecimalMeasurementType"
296
+ minOccurs="0" nillable="true"/>
297
+ <xs:element name="MedianSamples">
298
+ <xs:complexType>
299
+ <xs:sequence>
300
+ <xs:element name="NumberOfLeads" type="xs:int"/>
301
+ <xs:element name="SampleRate"
302
+ type="IntegerMeasurementType"/>
303
+ <xs:element name="ChannelSampleCountTotal"
304
+ type="xs:int"/>
305
+ <xs:element name="Resolution"
306
+ type="DecimalMeasurementType"/>
307
+ <xs:element name="FirstValid"
308
+ type="IntegerMeasurementType"/>
309
+ <xs:element name="LastValid"
310
+ type="IntegerMeasurementType"/>
311
+ <xs:element name="WaveformData" maxOccurs="12">
312
+ <xs:complexType>
313
+ <xs:simpleContent>
314
+ <xs:extension base="xs:string">
315
+ <xs:attribute name="lead"
316
+ type="xs:string" use="required"/>
317
+ </xs:extension>
318
+ </xs:simpleContent>
319
+ </xs:complexType>
320
+ </xs:element>
321
+ </xs:sequence>
322
+ </xs:complexType>
323
+ </xs:element>
324
+ </xs:sequence>
325
+ </xs:complexType>
326
+ </xs:element>
327
+ <!-- Vectorloops -->
328
+ <xs:element name="VectorLoops">
329
+ <xs:complexType>
330
+ <xs:sequence>
331
+ <xs:element name="Resolution" type="DecimalMeasurementType"/>
332
+ <xs:element name="ChannelSampleCountTotal" type="xs:int"/>
333
+ <xs:element name="POnset" type="IntegerMeasurementType"/>
334
+ <xs:element name="POffset" type="IntegerMeasurementType"/>
335
+ <xs:element name="QOnset" type="IntegerMeasurementType"/>
336
+ <xs:element name="QOffset" type="IntegerMeasurementType"/>
337
+ <xs:element name="TOffset" type="IntegerMeasurementType"/>
338
+ <xs:choice maxOccurs="3">
339
+ <xs:element name="Frontal" type="VectorLoopType"
340
+ maxOccurs="unbounded"/>
341
+ <xs:element name="Horizontal" type="VectorLoopType"
342
+ maxOccurs="unbounded"/>
343
+ <xs:element name="Sagittal" type="VectorLoopType"
344
+ maxOccurs="unbounded"/>
345
+ </xs:choice>
346
+ </xs:sequence>
347
+ <xs:attribute name="Creation" type="xs:string" use="required"/>
348
+ </xs:complexType>
349
+ </xs:element>
350
+ <!-- StripData -->
351
+ <xs:element name="StripData">
352
+ <xs:complexType>
353
+ <xs:sequence>
354
+ <xs:element name="NumberOfLeads" type="xs:int"/>
355
+ <xs:element name="SampleRate" type="IntegerMeasurementType"/>
356
+ <xs:element name="ChannelSampleCountTotal" type="xs:int"/>
357
+ <xs:element name="Resolution" type="DecimalMeasurementType"/>
358
+ <xs:element name="WaveformData" maxOccurs="12">
359
+ <xs:complexType>
360
+ <xs:simpleContent>
361
+ <xs:extension base="xs:string">
362
+ <xs:attribute name="lead" type="xs:string"
363
+ use="required"/>
364
+ </xs:extension>
365
+ </xs:simpleContent>
366
+ </xs:complexType>
367
+ </xs:element>
368
+ <xs:element name="ArrhythmiaResults">
369
+ <xs:complexType>
370
+ <xs:sequence>
371
+ <xs:choice maxOccurs="unbounded">
372
+ <xs:element name="Time" type="DecimalMeasurementType"
373
+ maxOccurs="unbounded"/>
374
+ <xs:element name="BeatClass" type="xs:string"
375
+ maxOccurs="unbounded"/>
376
+ </xs:choice>
377
+ </xs:sequence>
378
+ </xs:complexType>
379
+ </xs:element>
380
+ </xs:sequence>
381
+ </xs:complexType>
382
+ </xs:element>
383
+ <!-- FullDisclosure -->
384
+ <xs:element name="FullDisclosure">
385
+ <xs:complexType>
386
+ <xs:sequence>
387
+ <xs:element name="NumberOfChannels" type="xs:int"/>
388
+ <xs:element name="SampleRate" type="IntegerMeasurementType"/>
389
+ <xs:element name="Resolution" type="DecimalMeasurementType"/>
390
+ <xs:element name="LeadOrder" type="xs:string"/>
391
+ <xs:element name="FullDisclosureData">
392
+ <xs:complexType mixed="true">
393
+ <xs:sequence>
394
+ <xs:element name="SampleCountTotal" type="xs:int"/>
395
+ </xs:sequence>
396
+ </xs:complexType>
397
+ </xs:element>
398
+ <xs:element name="EventList">
399
+ <xs:complexType>
400
+ <xs:sequence>
401
+ <xs:choice maxOccurs="unbounded">
402
+ <xs:element name="Event" type="xs:string"/>
403
+ <xs:element name="Time">
404
+ <xs:complexType>
405
+ <xs:sequence>
406
+ <xs:element name="Minute" type="xs:int"/>
407
+ <xs:element name="Second"
408
+ type="xs:decimal"/>
409
+ </xs:sequence>
410
+ </xs:complexType>
411
+ </xs:element>
412
+ </xs:choice>
413
+ </xs:sequence>
414
+ </xs:complexType>
415
+ </xs:element>
416
+ <xs:element name="ArrhythmiaResults">
417
+ <xs:complexType>
418
+ <xs:sequence>
419
+ <xs:element name="QRS" type="xs:int"/>
420
+ </xs:sequence>
421
+ </xs:complexType>
422
+ </xs:element>
423
+ </xs:sequence>
424
+ </xs:complexType>
425
+ </xs:element>
426
+ <!-- Other -->
427
+ <xs:element name="Export">
428
+ <xs:complexType mixed="true">
429
+ <xs:sequence/>
430
+ </xs:complexType>
431
+ </xs:element>
432
+ <!-- This will cause the XML to fail validation -->
433
+ <!-- <xs:element name="CSWeb"> -->
434
+ <!-- <xs:complexType> -->
435
+ <!-- <xs:sequence> -->
436
+ <!-- <xs:element name="a"> -->
437
+ <!-- <xs:complexType> -->
438
+ <!-- <xs:attribute name="href" type="xs:string" use="required"/> -->
439
+ <!-- </xs:complexType> -->
440
+ <!-- </xs:element> -->
441
+ <!-- </xs:sequence> -->
442
+ <!-- </xs:complexType> -->
443
+ <!-- </xs:element> -->
444
+ </xs:sequence>
445
+ </xs:complexType>
446
+ </xs:element>
447
+
448
+ <!-- Define re-usable type definitions -->
449
+ <xs:complexType name="PersonType">
450
+ <xs:sequence>
451
+ <xs:element name="FamilyName" type="xs:string" minOccurs="1" nillable="true"/>
452
+ <xs:element name="GivenName" type="xs:string" minOccurs="1" nillable="true"/>
453
+ <xs:element name="PersonID" type="xs:string" minOccurs="1" nillable="true"/>
454
+ </xs:sequence>
455
+ </xs:complexType>
456
+
457
+ <xs:complexType name="IntegerMeasurementType">
458
+ <xs:simpleContent>
459
+ <xs:extension base="xs:int">
460
+ <xs:attribute name="units" type="xs:string" use="required"/>
461
+ </xs:extension>
462
+ </xs:simpleContent>
463
+ </xs:complexType>
464
+
465
+
466
+ <!-- Allowing decimals to be an empty string as well as an actual number -->
467
+ <xs:simpleType name="DecimalBase">
468
+ <xs:union>
469
+ <xs:simpleType>
470
+ <xs:restriction base="xs:string">
471
+ <xs:enumeration value=""/>
472
+ </xs:restriction>
473
+ </xs:simpleType>
474
+ <xs:simpleType>
475
+ <xs:restriction base="xs:decimal"/>
476
+ </xs:simpleType>
477
+ </xs:union>
478
+ </xs:simpleType>
479
+
480
+ <!-- Inheriting from DecimalOrEmptyType -->
481
+ <xs:complexType name="DecimalMeasurementType">
482
+ <xs:simpleContent>
483
+ <xs:extension base="DecimalBase">
484
+ <xs:attribute name="units" type="xs:string" use="required"/>
485
+ </xs:extension>
486
+ </xs:simpleContent>
487
+ </xs:complexType>
488
+
489
+
490
+ <xs:complexType name="MeasurementType">
491
+ <xs:simpleContent>
492
+ <!-- NOTE check if extenson base can include nillable -->
493
+ <xs:extension base="xs:string">
494
+ <xs:attribute name="units" type="xs:string" use="required"/>
495
+ </xs:extension>
496
+ </xs:simpleContent>
497
+ </xs:complexType>
498
+
499
+ <!-- NOTE 3 it seems the comma separated list of numbers if making it difficutl -->
500
+ <!-- to treat this list as anything but string, int or float expect white space seperation. -->
501
+ <xs:complexType name="MeasurementListType">
502
+ <xs:simpleContent>
503
+ <xs:extension base="xs:string">
504
+ <xs:attribute name="units" type="xs:string" use="required"/>
505
+ </xs:extension>
506
+ </xs:simpleContent>
507
+ </xs:complexType>
508
+
509
+ <xs:complexType name="VectorLoopType">
510
+ <xs:simpleContent>
511
+ <xs:extension base="xs:string">
512
+ <xs:attribute name="Lead" type="xs:string" use="required"/>
513
+ </xs:extension>
514
+ </xs:simpleContent>
515
+ </xs:complexType>
516
+ <!-- End re-usable Types, Start XSD schema -->
517
+
518
+
519
+ </xs:schema>
@@ -0,0 +1 @@
1
+ ECGProcess module