dmsaylor commited on
Commit
be39ed5
·
1 Parent(s): d095768

Initialized the "extraction efficiency" module

Browse files
CHRIS.py CHANGED
@@ -1,7 +1,7 @@
1
  from flask import Flask, render_template
2
 
3
  app = Flask(__name__)
4
- app.debug = False
5
 
6
  from color_module import blueprint
7
  app.register_blueprint(blueprint)
@@ -9,6 +9,9 @@ app.register_blueprint(blueprint)
9
  from exposure_module import blueprint
10
  app.register_blueprint(blueprint)
11
 
 
 
 
12
  @app.route('/', methods=['GET'])
13
  def app_init():
14
  return render_template('main.html')
 
1
  from flask import Flask, render_template
2
 
3
  app = Flask(__name__)
4
+ app.debug = True
5
 
6
  from color_module import blueprint
7
  app.register_blueprint(blueprint)
 
9
  from exposure_module import blueprint
10
  app.register_blueprint(blueprint)
11
 
12
+ from efficiency_module import blueprint
13
+ app.register_blueprint(blueprint)
14
+
15
  @app.route('/', methods=['GET'])
16
  def app_init():
17
  return render_template('main.html')
efficiency_module/__init__.py ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ from flask import Blueprint
2
+
3
+ blueprint = Blueprint('efficiency_module', __name__, template_folder='templates', static_folder='static', static_url_path='/efficiency_module')
4
+
5
+ from . import efficiency
efficiency_module/efficiency.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ from flask import render_template, request
3
+ from . import blueprint
4
+
5
+ # load the index page for the exposure module
6
+ @blueprint.route('/efficiency', methods=['GET'])
7
+ def efficiency():
8
+ return render_template('efficiency_index.html')
9
+
10
+
11
+ # build the report page for the exposure module
12
+ @blueprint.route('/efficiency', methods=['POST'])
13
+ def eff_post():
14
+ return render_template('efficiency_report.html')
15
+
efficiency_module/templates/efficiency_index.html ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>CHRIS</title>
6
+ <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
7
+ <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
8
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js" integrity="sha384-VHvPCCyXqtD5DqJeNxl2dtTyhF78xXNXdkwX1CZeRusQfRKp+tA7hAShOK/B/fQ2" crossorigin="anonymous"></script>
9
+ <link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='styles.css') }}">
10
+
11
+ </head>
12
+
13
+ <img src="{{ url_for('static',filename='images/FDAlogo.png') }}" style="float: left;" height="100"/>
14
+ <img src="{{ url_for('static',filename='images/FDAgraphic.png') }}" style="float: right;" height="100"/>
15
+ <br clear="all" />
16
+
17
+ <header>
18
+ <h1 style="text-align:center"><font color="#0070C0">CH</font>emical <font color="#0070C0">RIS</font>k calculator (CHRIS) - Extraction efficiency RST</h1>
19
+ </header>
20
+
21
+ <body>
22
+
23
+ <form method="POST">
24
+
25
+ </body>
26
+ </html>
efficiency_module/templates/efficiency_report.html ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>CHRIS Report</title>
6
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
7
+ <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
8
+ <link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='styles.css') }}">
9
+
10
+ <style>
11
+ * {
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ /* Create two equal columns that floats next to each other */
16
+ .column {
17
+ float: left;
18
+ width: 50%;
19
+ padding: 10px;
20
+ vertical-align: top;
21
+ align: center;
22
+ }
23
+
24
+ /* Clear floats after the columns */
25
+ .row:after {
26
+ content: "";
27
+ display: table;
28
+ clear: both;
29
+ }
30
+ </style>
31
+
32
+ </head>
33
+
34
+ <img src="{{ url_for('static',filename='images/FDAlogo.png') }}" style="float: left;" height="100"/>
35
+ <img src="{{ url_for('static',filename='images/FDAgraphic.png') }}" style="float: right;" height="100"/>
36
+ <br clear="all" />
37
+
38
+ <header>
39
+ <h1 style="text-align:center"><font color="#0070C0">CH</font>emical <font color="#0070C0">RIS</font>k calculator (CHRIS) Report - Bulk chemicals </h1>
40
+ </header>
41
+
42
+ <body>
43
+
44
+ <p> The following report was generated using CHRIS v.2.0 beta on
45
+ <script> document.write(new Date().toLocaleDateString()); </script>.
46
+ </p>
47
+
48
+ <h2> Compound </h2>
49
+
50
+ <div class="container">
51
+ <div class="row">
52
+ <div class="column">
53
+ Input :: {{chemName}} <br> <br>
54
+ IUPAC Name :: {{iupac}} <br> <br>
55
+ CAS :: {{cas}} <br> <br>
56
+ Molecular weight (g/mol) :: {{'%0.4f'%MW|float}}
57
+ {% if ceramic %} :: ceramic detected, assume maximum Mw {% endif %}
58
+ <br> <br>
59
+ {% if show_properties %}
60
+ LogKow :: {{LogP}}{{LogP_origin}}<br> <br>
61
+ Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}}<br> <br>
62
+ Melting point (&deg;C) :: {{mp}}{{mp_origin}}<br> <br>
63
+ {% endif %}
64
+ SMILES :: {{smiles}}
65
+ </div>
66
+ <div class="column">
67
+ <img src="{{molImage}}"/>
68
+ </div>
69
+ </div>
70
+ </div>
71
+
72
+
73
+ <h2> Exposure </h2>
74
+
75
+ <p>
76
+ <u> Diffusion calculation for leaching from {{polymers[pIndex]}} estimates the worst case single day exposure = {{release}} mg. </u>
77
+ <p>
78
+
79
+ <p>
80
+ This estimate was derived using solutions to the conservative plane sheet model for mass release, \( M \):
81
+
82
+ \[
83
+ M(\tau)= \left\{
84
+ \begin{array}{cr}
85
+ 2 M_0 \sqrt{\tau/\pi} & \tau \leq 0.2 \\
86
+ M_0\left(1-8 \exp\left[-\tau \pi^2/4 \right]/\pi^2\right) & \tau > 0.2
87
+ \end{array} \right.
88
+ \]
89
+
90
+ where \( \tau= D t A^2 / V^2 \) and \( A \) and \( V \) are the surface area and volume of the polymer matrix, respectively, \( M_0 \) is total mass initially contained in the polymer, \( D \) is a conservative estimate of the diffusion coefficient of the leachable within the polymer matrix, and \( t \) is time. Based on the input provided, the calculation was based on the following values:
91
+ </p>
92
+
93
+ <p>
94
+ \( A \) = {{area}} cm<sup>2</sup> <br>
95
+ \( V \) = {{vol}} cm<sup>3</sup> <br>
96
+ \( M_0 \) = {{amount}} mg <br>
97
+ \( D \) = {{diff}} cm<sup>2</sup>/h <br>
98
+ \( t \) = {{time}} h <br>
99
+ </p>
100
+
101
+ <p>
102
+ In addition to the maximum daily (day 1) release rate, it can be helpful to examine the decay in release rate over time predicted by the model,
103
+ which is illustrated for the first 30 days of exposure in the plot below:
104
+ </p>
105
+
106
+ <img src="{{ image }}"/>
107
+
108
+ <h2> Assumptions </h2>
109
+
110
+ {% if assume[0] and assume[1] and assume[2] and assume[3] and assume[4] %}
111
+
112
+ <p>
113
+ <font color="green"> You have confirmed your system complies with the model assumptions and no further data are needed to support using the exposure estimation provided by CHRIS in a submission to CDRH. </font>
114
+ </p>
115
+
116
+ {% else %}
117
+
118
+ <p>
119
+ <font color="red"> You have not confirmed compliance with one or more of the underlying assumptions upon which the exposure calculation is based. Therefore, it may be necessary to provide a justification and supporting data for why the results obtained for a system that may not comply with unchecked assumptions below are still valid if the assessment is used to support a submission to CDRH: </font> <br>
120
+ </p>
121
+
122
+ {% if not assume[0] %}
123
+ <font color="red"> &bull; The polymer matrix does not swell or degrade in the clinical use environment. <br> </font>
124
+ {% endif %}
125
+
126
+ {% if not assume[1] %}
127
+ <font color="red"> &bull; Any particles/aggregates of the chemical are much smaller than the smallest component dimension (&le; 50x). <br> </font>
128
+ {% endif %}
129
+
130
+ {% if not assume[2] %}
131
+ <font color="red"> &bull; The chemical is homogeneously distributed throughout the polymer. <br> </font>
132
+ {% endif %}
133
+
134
+ {% if not assume[3] %}
135
+ <font color="red"> &bull; The total amount of the chemical is present in dilute concentrations (&le; 2 %). <br> </font>
136
+ {% endif %}
137
+
138
+ {% if not assume[4] %}
139
+ <font color="red"> &bull; Manufacturing processes do not impact the integrity of the polymer. <br> </font>
140
+ {% endif %}
141
+
142
+ {% endif %}
143
+
144
+ <h2> Screening level toxicological risk assessment </h2>
145
+
146
+ <p>
147
+ The threshold for toxicological concern (TTC) for {{exposure}} contact is {{TTC}} mg. Based on the exposure estimation this results in a margin of safety (MOS) of {{MOS}}.
148
+ </p>
149
+
150
+ {% if MOS >= 1 %}
151
+
152
+ <p>
153
+ <font color="green"> The MOS based on the mutagenic TTC is greater than one; therefore, no further analysis is needed for systemic biocompatibility endpoints. </font>
154
+ </p>
155
+
156
+ <p>
157
+ <font color="red"> *Note*: This assessment assumes that the chemical is not in the cohort of concern. </font>
158
+ </p>
159
+
160
+ {% else %}
161
+
162
+ <p>
163
+ <font color="red"> The MOS based on the mutagenic TTC is less than one; therefore, further analysis is needed to address systemic biocompatibility endpoints. For example, a compound specific tolerable intake value could be independently derived and compared to the exposure estimate provided above. </font>
164
+ </p>
165
+
166
+ {% endif %}
167
+
168
+ <button type="button" onclick="javascript:history.back()">Back</button>
169
+
170
+ </body>
171
+ </html>
templates/main.html CHANGED
@@ -56,4 +56,10 @@ This module can be used similarly to the color additive tool, but can be applied
56
  the total amount of the chemical is known, e.g. from a certificate of analysis.
57
  </p>
58
 
 
 
 
 
 
 
59
  </body>
 
56
  the total amount of the chemical is known, e.g. from a certificate of analysis.
57
  </p>
58
 
59
+ 3. <a href="/efficiency"> Extraction efficiency RST</a>
60
+
61
+ <p>
62
+ This module can be used to estimate the fraction of the total pool of a bulk chemical that will be extracted under different conditions.
63
+ </p>
64
+
65
  </body>