File indexing completed on 2025-02-23 09:21:58
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 outputFile = "molecularDNArepair.txt"
0014 iRootFile = "../molecular-dna.root"
0015 print("\nInput file:",iRootFile,"\n")
0016
0017
0018 r3 = 7100*1e-09 * 2500*1e-09 * 7100*1e-09
0019 NBP = 6405886128
0020 mass = 997 * 4 * 3.141592 * r3 / 3
0021
0022
0023 t0 = 0.0;
0024 t1 = 25;
0025 dt = 0.001
0026 numpoints = int( (t1 - t0) / dt )
0027
0028
0029
0030
0031
0032 import ROOT as root
0033 import numpy as np
0034 import matplotlib.pyplot as plt
0035 from scipy.integrate import odeint as od
0036
0037
0038 DSBBPID = []
0039 i = 0
0040 repDSB = 0
0041 irrDSB = 0
0042 acc_edep = 0
0043 dose = 0
0044 eVtoJ = 1.60218e-19
0045
0046
0047 f = root.TFile(iRootFile)
0048
0049 fTree = f.Get("tuples/damage")
0050 for e in fTree:
0051 if (e.TypeClassification=="DSB" or e.TypeClassification=="DSB+" or e.TypeClassification=="DSB++"):
0052 DSBBPID.append((e.Event, e.BasePair))
0053 i += 1
0054
0055 gTree = f.Get("tuples/classification")
0056 for e in gTree:
0057 repDSB += e.DSB
0058 irrDSB += e.DSBp + e.DSBpp
0059
0060 ffTree = f.Get("tuples/chromosome_hits")
0061 for ev in ffTree:
0062 acc_edep += (ev.e_chromosome_kev + ev.e_dna_kev) *1e3
0063
0064
0065
0066
0067 totalDSB = repDSB + irrDSB
0068
0069
0070 dose = acc_edep * eVtoJ / mass
0071
0072
0073
0074
0075 NBP_of_cell = 5000000000
0076 NBPcell = NBP/NBP_of_cell
0077 totalDSBperGyCell = totalDSB/NBPcell/dose
0078 print ("Dose :", dose, "\nTotal DSB/Gy/Cell :", totalDSBperGyCell)
0079 S1 = repDSB/NBPcell/dose
0080 S2 = irrDSB/NBPcell/dose
0081 print("Repairable DSBs/Gy/cell :", S1, "\nIrrepairable DSBs/Gy/cell :", S2)
0082
0083
0084
0085 fDz = 1
0086 falpha = totalDSBperGyCell
0087 fNirrep = irrDSB/totalDSB
0088 if (fNirrep == 0):
0089 fNirrep = 0.01
0090 print("Ratio of irrepairable to repairable damage :", fNirrep)
0091
0092
0093 NbEquat = 29
0094 Y = [0] * NbEquat
0095
0096 Y[0] = falpha * fDz
0097 YP = [0] * NbEquat
0098 print("\nY[0] used in the model :", Y[0])
0099
0100
0101
0102
0103 t = [(t1-t0) * float(i) / (numpoints - 1) for i in range(numpoints)]
0104
0105
0106
0107
0108
0109 K1 = 11.052
0110 Kmin1 = 6.6*1e-01
0111 K2 = 5.82*1e+05
0112
0113 Kmin2 = 5.26*1e-01
0114 K3 = 1.86
0115 K4 = 1.38*1e+06
0116 Kmin4 = 3.86*1e-04
0117 K5 = 15.24
0118 Kmin5 = 8.28
0119 K6 = 18.06
0120 Kmin6 = 1.33
0121 K7 = 2.73*1e+05
0122 Kmin7 = 3.2
0123
0124 normK8 = 0.35
0125 K8 = normK8*5.52*1e-01
0126 K9 = 1.66*1e-01
0127 K10 = (1.93*1e-07)/fNirrep
0128 K11 = 7.50*1e-02
0129 K12 = 11.1
0130
0131
0132 P1 = 1.75*1e+03
0133 Pmin1 = 1.33*1e-04
0134 P2 = 0.39192
0135 Pmin2 = 2.7605512*1e+02
0136 P3 = 1.37*1e+04
0137 Pmin3 = 2.34
0138 P4 = 5.52*1e-2
0139 P5 = 1.20*1e+05
0140 Pmin5 = 8.82*1e-05
0141 P6 = 1.87*1e+05
0142 Pmin6 = 1.55*1e-03
0143 P7 = 21.36
0144 P8 = 1.20*1e+04
0145 Pmin8 = 2.49*1e-04
0146 P9 = 4.88*1e-1
0147 P10 = 7.20*1e-03
0148 P11 = 6.06*1e-04
0149 P12 = 2.76*1e-01
0150
0151
0152 Q1 = 7.8*1e+03
0153 Qmin1 = 1.71*1e-04
0154 Q2 = 3*1e+04
0155 Q3 = 6*1e+03
0156 Qmin3 = 6.06*1e-04
0157 Q4 = 1.66*1e-06
0158 Q5 = 8.40*1e+04
0159 Qmin5 = 4.75*1e-04
0160 Q6 = 11.58
0161
0162
0163 R1 = 2.39*1e+03
0164 Rmin1 = 12.63
0165 R2 = 4.07*1e+04
0166 R3 = 9.82
0167 R4 = 1.47*1e+05
0168 Rmin4 = 2.72
0169 R5 = 1.65*1e-01
0170
0171
0172 XX1 = 9.19*1e-07
0173 XX3 = 2.3 *1e-12
0174
0175
0176
0177
0178 k1 = K1*XX1/K8
0179 kmin1 = Kmin1/K8
0180 k2 = K2*XX1/K8
0181 kmin2 = Kmin2/K8
0182 k3 = K3/K8
0183 k4 = K4*XX1/K8
0184 kmin4 = Kmin4/K8
0185 k5 = K5*XX1/K8
0186 kmin5 = Kmin5/K8
0187 k6 = K6*XX1/K8
0188 kmin6 = Kmin6/K8
0189 k7 = K7*XX1/K8
0190 kmin7 = Kmin7/K8
0191 k8 = K8/K8
0192 k9 = K9/K8
0193 k10 = K10/XX1
0194 k11 = K11/K8
0195 k12 = K12/K8
0196
0197
0198 p1 = P1*XX1/K8
0199 pmin1 = Pmin1/K8
0200 p2 = P2/K8
0201 pmin2 = Pmin2/K8
0202 p3 = P3*XX1/K8
0203 pmin3 = Pmin3/K8
0204 p4 = P4/K8
0205 p5 = P5*XX1/K8
0206 pmin5 = Pmin5/K8
0207 p6 = P6*XX1/K8
0208 pmin6 = Pmin6/K8
0209 p7 = P7/K8
0210 p8 = P8*XX1/K8
0211 pmin8 = Pmin8/K8
0212 p9 = P9/K8
0213 p10 = P10/K8
0214 p11 = P11/K8
0215 p12 = P12/K8
0216
0217
0218 q1= Q1*XX1/K8
0219 qmin1 = Qmin1/K8
0220 q2 = Q2*XX1/K8
0221 q3 = Q3*XX1/K8
0222 qmin3 = Qmin3/K8
0223 q4 = Q4/K8
0224 q5 = Q5*XX1/K8
0225 qmin5 = Qmin5/K8
0226 q6 = Q6/K8
0227
0228
0229 r1 = R1*XX1/K8
0230 rmin1 = Rmin1/K8
0231 r2 = R2*XX1/K8
0232 r3 = R3/K8
0233 r4 = R4*XX1/K8
0234 rmin4 = Rmin4/K8
0235 r5 = R5/K8
0236
0237
0238 p = [ k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12,
0239 kmin1, kmin2, kmin4, kmin5, kmin6, kmin7,
0240 p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
0241 pmin1, pmin2, pmin3, pmin5, pmin6, pmin8,
0242 q1, q2, q3, q4, q5, q6,
0243 qmin1, qmin3, qmin5,
0244 r1, r2, r3, r4, r5,
0245 rmin1, rmin4
0246 ]
0247
0248
0249
0250 def DSBRepairPathways( Y , t , p ):
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262 X1= X2= X3= X4= X5= X6= X7= X8= X9= X10= X11= X12= X13= X14= X15= X16= X17= 400000.
0263
0264
0265 YP[0] = fNirrep - k1*Y[0]*X1 + kmin1*Y[1] - p1*Y[0]*X1 + pmin1*Y[10]
0266 YP[1] = k1*Y[0]*X1 - kmin1*Y[1] - k2*Y[1]*X2 + kmin2*Y[2]
0267 YP[2] = k2*Y[1]*X2 - k3*Y[2] - kmin2*Y[2]
0268 YP[3] = k3*Y[2] - k4*(Y[3]*Y[3]) + kmin4*Y[4]
0269 YP[4] = k4*(Y[3]*Y[3]) - kmin4*Y[4] - k5*Y[4]*X3 + kmin5*Y[5]
0270 YP[5] = kmin6*Y[6] + k5*Y[4]*X3 - kmin5*Y[5] - k6*Y[5]*X4
0271 YP[6] = -kmin6*Y[6] - k7*Y[6]*X5 + kmin7*Y[7] + k6*Y[5]*X4
0272 YP[7] = k7*Y[6]*X5 - k8*Y[7] - kmin7*Y[7]
0273 YP[8] = r5*Y[28] + k8*Y[7] + p12*Y[18] + p11*Y[19] + q6*Y[24]
0274 YP[9] = (k9* (Y[3]+Y[4]+Y[5]+Y[6]+Y[7]) * X6)/ (k10+ Y[3]+ Y[4]+ Y[5]+ Y[6]+ Y[7]) - k11*Y[8]- k12*Y[9]
0275
0276
0277 YP[10] = p1*Y[0]*X7 - pmin1*Y[10] - p3*Y[10]*Y[11] + pmin3*Y[12]
0278 YP[11] = p2*X8 - pmin2*Y[11] - p3*Y[10]*Y[11] + p4*Y[12] + pmin3*Y[12]
0279 YP[12] = p3*Y[10]*Y[11] - p4*Y[12] - pmin3*Y[12]
0280 YP[13] = rmin1*Y[25] + p4*Y[12] - r1*X15*Y[13] - p5*Y[13]*X9 + pmin5*Y[14]
0281 YP[14] = pmin6*Y[15] + p5*Y[13]*X9 - pmin5*Y[14] - p6*Y[14]*X10 - q1*Y[14]*X12 + qmin1*Y[20]
0282 YP[15] = -p7*Y[15] - pmin6*Y[15] + p6*Y[14]*X10
0283 YP[16] = p7*Y[15] - p8*Y[16]*X11 + pmin8*Y[17]
0284 YP[17] = p8*Y[16]*X11 - p9*Y[17] - pmin8*Y[17]
0285 YP[18] = p9*Y[17] - p10*Y[18] - p12*Y[18]
0286 YP[19] = p10*Y[18] - p11*Y[19]
0287
0288
0289 YP[20] = q1*Y[14]*X12 - qmin1*Y[20] - q2*(Y[20]*Y[20])
0290 YP[21] = q2*(Y[20]*Y[20]) - q3*Y[21]*X13 + qmin3*Y[22]
0291 YP[22] = q3*Y[21]*X13 - q4*Y[22] - qmin3*Y[22]
0292 YP[23] = q4*Y[22] - q5*Y[23]*X14 + qmin5*Y[24]
0293 YP[24] = q5*Y[23]*X14 - q6*Y[24] - qmin5*Y[24]
0294
0295
0296 YP[25] = -rmin1*Y[25] - r2*Y[25]*X16 + r1*X15*Y[13]
0297 YP[26] = r2*Y[25]*X16 - r3*Y[26]
0298 YP[27] = r3*Y[26] - r4*Y[27]*X17 + rmin4*Y[28]
0299 YP[28] = r4*Y[27]*X17 - r5*Y[28] - rmin4*Y[28]
0300
0301
0302
0303 return YP
0304
0305
0306 steps = od( DSBRepairPathways, Y , t , args=(p,) )
0307
0308 print("\nCalculation concluded. Check the final images and close them to end the program.!")
0309
0310
0311 KU = []
0312 DNAPKcs = []
0313 RPA = []
0314 Rad51 = []
0315 gH2AX = []
0316 gH2AXnorm = []
0317 i = 0
0318 for i in range(len(t)):
0319 KU.append(steps[i][1])
0320 DNAPKcs.append(steps[i][3]+steps[i][4]+steps[i][5]+steps[i][6]+steps[i][7])
0321 RPA.append(steps[i][14]+steps[i][15]+steps[i][20])
0322 Rad51.append(steps[i][15]+steps[i][16]+steps[i][17])
0323 gH2AX.append(steps[i][9])
0324 gH2AXnorm.append(100*steps[i][9]/repDSB)
0325
0326
0327 plt.figure("KU")
0328 plt.plot(t, KU)
0329 plt.show()
0330
0331
0332 plt.figure("DNAPKcs")
0333 plt.plot(t, DNAPKcs)
0334 plt.show()
0335
0336
0337 plt.figure("RPA")
0338 plt.plot(t, RPA)
0339 plt.show()
0340
0341
0342 plt.figure("Rad51")
0343 plt.plot(t, Rad51)
0344 plt.show()
0345
0346
0347
0348 plt.figure("gH2AX")
0349 plt.plot(t, gH2AX)
0350 plt.savefig("g-H2AX.pdf")
0351
0352 with open(outputFile, 'w') as ofile:
0353 for m in range(len(gH2AX)):
0354 ofile.write(str(t[m])+ "\t" + str(gH2AX[m])+"\n")
0355
0356 plt.show()
0357
0358
0359
0360
0361 plt.figure("gH2AXnorm")
0362 fig = plt.figure("gH2AXnorm")
0363
0364 m = max(gH2AX)
0365 for k in range(len(gH2AX)):
0366 gH2AXnorm[k] = 100 * gH2AX[k]/m
0367
0368
0369 ax1 = fig.add_subplot(111)
0370
0371 ax1.scatter(t, gH2AXnorm, s=1, c='b', marker="s", label='gH2AXnorm')
0372 xD = [ 23.90410959, 10, 5, 1.47260274, 0.71917808, 0.239726027, 0.136986301, 0.102739726 ]
0373 yD = [ 10.55555556, 15.13888889, 26.52777778, 80, 100, 60, 20, 8.333333333 ]
0374 ax1.scatter(xD, yD, s=20, c='r', marker="o", label='gH2AXnorm_dous')
0375 xA = [ 0.5308219178082174, 2.0376712328767113, 4.006849315068493, 11.952054794520548, 23.869863013698634 ]
0376 yA = [ 99.99999999999997, 55.13888888888887, 30.27777777777777, 12.777777777777771, 1.6666666666666572 ]
0377 ax1.scatter(xA, yA, s=30, c='g', marker="+", label='gH2AXnorm_Asaithamby')
0378 plt.legend(loc='upper right');
0379
0380
0381 plt.savefig("g-H2AX_norm.pdf")
0382
0383 plt.show()
0384
0385 with open(outputFile, 'w') as ofile:
0386 for m in range(len(gH2AX)):
0387 ofile.write(str(t[m])+ "\t" + str(gH2AXnorm[m])+"\n")
0388
0389
0390
0391
0392 print("\nCheck your folder for new images (pdf). Thank you for using molecularDNArepair.!\n")