import numpy as np import matplotlib.pyplot as plt import statsLibTwo as statsLib # Initialise plot parameters and colours plt.rcParams.update({'font.size': 18}) plt.rcParams["font.family"] = "sans-serif" names = names = ['NonXL (0%)', 'Ethanol (0%)', 'EDC-NHS \n 10% (17%)', 'EDC-NHS \n 50% (47%)', 'EDC-NHS \n 100% (52%)', 'Genipin \n 60% (16%)', 'Genipin \n 100% (28%) ', 'Genipin \n 200% (35%)', 'TG2 \n 40% (50%)', 'TG2 \n 100% (48%)', 'TG2 \n 200% (46%)', 'Seeded \n Density'] colours = ['k', 'k', '#DC143C', '#DC143C', '#DC143C', '#6495ED', '#6495ED', '#6495ED', '#3CB371', '#3CB371', '#3CB371', '#4B0082'] # MTS Standard Curve Raw Data and Linear Regression cellCount = [143750, 71875, 35938, 17969, 8984] stdAbsorbance = np.array( [(1.806, 1.863, 1.861), (1.198, 1.213, 1.223), (0.761, 0.782, 0.778), (0.362, 0.361, 0.363), (0.212, 0.212, 0.202)]) Slope, Int = statsLib.standardCurve(cellCount, stdAbsorbance, (0, 3), (0, 70000), 'MTSStdCurve.eps', 'Absorbance', 'Cell Number', axisNo=1) # Sample raw data MTS Control Values: no cells (N=3, n=3 for reading from each well) NonXLCtrlDay1 = np.array([(0.138, 0.137, 0.139), (0.142, 0.14, 0.141), (0.14, 0.137, 0.139), (0.142, 0.142, 0.141)]) EthanolCtrlDay1 = np.array([(0.144, 0.143, 0.148), (0.142, 0.141, 0.142), (0.138, 0.139, 0.138), (0.149, 0.146, 0.146)]) EDCNHS10CtrlDay1 = np.array( [(0.156, 0.159, 0.148), (0.156, 0.153, 0.152), (0.152, 0.151, 0.152), (0.163, 0.162, 0.157)]) EDCNHS50CtrlDay1 = np.array([(0.157, 0.151, 0.159), (0.159, 0.156, 0.16), (0.159, 0.158, 0.156), (0.159, 0.157, 0.16)]) EDCNHS100CtrlDay1 = np.array( [(0.157, 0.168, 0.158), (0.154, 0.151, 0.162), (0.153, 0.149, 0.152), (0.162, 0.152, 0.147)]) Genipin03CtrlDay1 = np.array( [(0.265, 0.253, 0.263), (0.252, 0.249, 0.314), (0.245, 0.239, 0.245), (0.253, 0.246, 0.248)]) Genipin05CtrlDay1 = np.array( [(0.269, 0.26, 0.259), (0.257, 0.259, 0.256), (0.262, 0.263, 0.264), (0.281, 0.272, 0.284)]) Genipin10CtrlDay1 = np.array( [(0.31, 0.302, 0.317), (0.296, 0.289, 0.296), (0.306, 0.296, 0.298), (0.304, 0.304, 0.299)]) TG2LowCtrlDay1 = np.array([(0.15, 0.15, 0.15), (0.153, 0.144, 0.153), (0.154, 0.148, 0.148), (0.154, 0.16, 0.154)]) TG2MidCtrlDay1 = np.array([(0.153, 0.145, 0.147), (0.143, 0.144, 0.141), (0.14, 0.144, 0.151), (0.151, 0.148, 0.151)]) TG2HighCtrlDay1 = np.array([(0.158, 0.152, 0.152), (0.151, 0.147, 0.147), (0.15, 0.151, 0.149), (0.153, 0.152, 0.152)]) NonXLCtrlDay4 = np.array([(0.148, 0.15, 0.142), (0.137, 0.14, 0.139), (0.141, 0.136, 0.139), (0.141, 0.14, 0.146)]) EthanolCtrlDay4 = np.array([(0.152, 0.148, 0.15), (0.14, 0.137, 0.142), (0.149, 0.144, 0.146), (0.153, 0.154, 0.15)]) EDCNHS10CtrlDay4 = np.array([(0.173, 0.168, 0.175), (0.165, 0.165, 0.167), (0.162, 0.157, 0.162), (0.159, 0.163, 0.17)]) EDCNHS50CtrlDay4 = np.array( [(0.168, 0.159, 0.157), (0.156, 0.155, 0.156), (0.154, 0.158, 0.159), (0.158, 0.163, 0.163)]) EDCNHS100CtrlDay4 = np.array( [(0.171, 0.163, 0.153), (0.156, 0.151, 0.145), (0.164, 0.156, 0.154), (0.163, 0.163, 0.152)]) Genipin03CtrlDay4 = np.array( [(0.209, 0.203, 0.208), (0.21, 0.211, 0.207), (0.226, 0.197, 0.203), (0.225, 0.218, 0.211)]) Genipin05CtrlDay4 = np.array([(0.228, 0.231, 0.229), (0.23, 0.231, 0.23), (0.229, 0.226, 0.232), (0.238, 0.233, 0.234)]) Genipin10CtrlDay4 = np.array([(0.275, 0.275, 0.278), (0.265, 0.274, 0.28), (0.264, 0.266, 0.269), (0.288, 0.27, 0.273)]) TG2LowCtrlDay4 = np.array([(0.155, 0.16, 0.153), (0.155, 0.143, 0.148), (0.151, 0.156, 0.155), (0.146, 0.149, 0.146)]) TG2MidCtrlDay4 = np.array([(0.135, 0.14, 0.139), (0.133, 0.297, 0.135), (0.134, 0.134, 0.144), (0.141, 0.145, 0.142)]) TG2HighCtrlDay4 = np.array([(0.142, 0.143, 0.141), (0.144, 0.144, 0.146), (0.144, 0.144, 0.144), (0.148, 0.15, 0.148)]) NonXLCtrlDay7 = np.array([(0.126, 0.125, 0.129), (0.12, 0.122, 0.12), (0.184, 0.181, 0.175), (0.129, 0.141, 0.123)]) EthanolCtrlDay7 = np.array([(0.131, 0.127, 0.125), (0.129, 0.122, 0.125), (0.162, 0.161, 0.162), (0.131, 0.146, 0.128)]) EDCNHS10CtrlDay7 = np.array([(0.139, 0.137, 0.136), (0.143, 0.139, 0.134), (0.137, 0.137, 0.133), (0.156, 0.15, 0.149)]) EDCNHS50CtrlDay7 = np.array([(0.142, 0.149, 0.148), (0.143, 0.143, 0.142), (0.14, 0.14, 0.143), (0.145, 0.146, 0.144)]) EDCNHS100CtrlDay7 = np.array( [(0.141, 0.138, 0.143), (0.139, 0.146, 0.141), (0.141, 0.136, 0.135), (0.139, 0.137, 0.144)]) Genipin03CtrlDay7 = np.array([(0.19, 0.191, 0.189), (0.193, 0.18, 0.164), (0.189, 0.187, 0.278), (0.192, 0.192, 0.193)]) Genipin05CtrlDay7 = np.array( [(0.201, 0.211, 0.201), (0.258, 0.253, 0.239), (0.187, 0.184, 0.178), (0.198, 0.196, 0.205)]) Genipin10CtrlDay7 = np.array( [(0.229, 0.223, 0.226), (0.234, 0.209, 0.223), (0.216, 0.223, 0.225), (0.229, 0.222, 0.218)]) TG2LowCtrlDay7 = np.array([(0.121, 0.126, 0.114), (0.125, 0.123, 0.122), (0.132, 0.127, 0.134), (0.128, 0.127, 0.211)]) TG2MidCtrlDay7 = np.array([(0.113, 0.112, 0.11), (0.12, 0.116, 0.117), (0.123, 0.122, 0.123), (0.126, 0.13, 0.127)]) TG2HighCtrlDay7 = np.array([(0.125, 0.127, 0.126), (0.124, 0.122, 0.121), (0.127, 0.126, 0.124), (0.114, 0.117, 0.12)]) # Substrate means and error day1Ctrl = statsLib.statsproducer(( NonXLCtrlDay1, EthanolCtrlDay1, EDCNHS10CtrlDay1, EDCNHS50CtrlDay1, EDCNHS100CtrlDay1, Genipin03CtrlDay1, Genipin05CtrlDay1, Genipin10CtrlDay1, TG2LowCtrlDay1, TG2MidCtrlDay1, TG2HighCtrlDay1), names, axisNo=(1, 0)) day4Ctrl = statsLib.statsproducer(( NonXLCtrlDay4, EthanolCtrlDay4, EDCNHS10CtrlDay4, EDCNHS50CtrlDay4, EDCNHS100CtrlDay4, Genipin03CtrlDay4, Genipin05CtrlDay4, Genipin10CtrlDay4, TG2LowCtrlDay4, TG2MidCtrlDay4, TG2HighCtrlDay4), names, axisNo=(1, 0)) day7Ctrl = statsLib.statsproducer(( NonXLCtrlDay7, EthanolCtrlDay7, EDCNHS10CtrlDay7, EDCNHS50CtrlDay7, EDCNHS100CtrlDay7, Genipin03CtrlDay7, Genipin05CtrlDay7, Genipin10CtrlDay7, TG2LowCtrlDay7, TG2MidCtrlDay7, TG2HighCtrlDay7), names, axisNo=(1, 0)) # Sample raw data(N=3, n=3 for reading from each well) NonXLDay1 = np.array([(1.345, 1.331, 1.33), (1.249, 1.258, 1.275), (1.307, 1.26, 1.284), (1.375, 1.386, 1.388)]) EthanolDay1 = np.array([(1.042, 0.956, 0.985), (0.939, 0.912, 0.886), (1.068, 1.028, 1.115), (0.99, 0.99, 0.99)]) EDCNHS10Day1 = np.array([(1.052, 1.074, 1.059), (1.107, 1.079, 1.042), (0.962, 0.918, 0.967), (0.986, 0.971, 1.011)]) EDCNHS50Day1 = np.array([(1.19, 1.189, 1.171), (1.12, 1.124, 1.125), (1.111, 1.095, 1.103), (1.172, 1.148, 1.129)]) EDCNHS100Day1 = np.array([(0.864, 0.888, 0.929), (1.019, 1.032, 1.027), (0.959, 0.96, 0.953), (0.997, 0.95, 1.005)]) Genipin03Day1 = np.array([(1.327, 1.314, 1.306), (1.291, 1.249, 1.258), (1.3, 1.296, 1.305), (1.073, 1.014, 1.009)]) Genipin05Day1 = np.array([(1.457, 1.439, 1.403), (1.348, 1.524, 1.463), (1.077, 1.149, 1.15), (1.443, 1.403, 1.417)]) Genipin10Day1 = np.array([(1.427, 1.363, 1.329), (1.435, 1.401, 1.418), (1.314, 1.321, 1.326), (1.243, 1.242, 1.218)]) TG2LowDay1 = np.array([(1.108, 1.115, 1.117), (1.16, 1.105, 1.102), (1.158, 1.194, 1.167), (1.281, 1.22, 1.285)]) TG2MidDay1 = np.array([(1.207, 1.152, 1.232), (0.949, 0.939, 0.942), (1.126, 1.173, 1.097), (1.246, 1.223, 1.236)]) TG2HighDay1 = np.array([(1.281, 1.244, 1.244), (1.191, 1.162, 1.154), (1.173, 1.182, 1.2), (1.303, 1.335, 1.25)]) NonXLDay4 = np.array([(1.266, 1.234, 1.235), (1.235, 1.183, 1.178), (1.039, 1.001, 1.094), (1.281, 1.281, 1.283)]) EthanolDay4 = np.array([(1.832, 1.817, 1.84), (1.796, 1.795, 1.803), (1.789, 1.668, 1.7), (1.806, 1.822, 1.766)]) EDCNHS10Day4 = np.array([(1.805, 1.772, 1.792), (1.602, 1.62, 1.639), (1.677, 1.668, 1.68), (1.841, 1.822, 1.841)]) EDCNHS50Day4 = np.array([(1.785, 1.762, 1.779), (1.713, 1.704, 1.681), (1.744, 1.744, 1.795), (1.782, 1.796, 1.802)]) EDCNHS100Day4 = np.array([(1.144, 1.164, 1.191), (1.534, 1.486, 1.514), (1.676, 1.704, 1.689), (1.403, 1.435, 1.388)]) Genipin03Day4 = np.array([(1.956, 1.936, 1.902), (1.853, 1.849, 1.875), (1.763, 1.849, 1.818), (1.944, 1.958, 1.881)]) Genipin05Day4 = np.array([(1.894, 1.966, 1.986), (1.993, 1.917, 2.076), (1.932, 1.899, 1.955), (1.913, 1.833, 1.953)]) Genipin10Day4 = np.array([(1.877, 1.939, 1.978), (1.972, 1.952, 1.984), (1.956, 1.967, 1.953), (2.048, 2.046, 1.962)]) TG2LowDay4 = np.array([(1.561, 1.603, 1.571), (1.366, 1.354, 1.308), (1.499, 1.565, 1.556), (1.662, 1.743, 1.715)]) TG2MidDay4 = np.array([(1.429, 1.465, 1.427), (1.267, 1.188, 1.288), (1.222, 1.233, 1.217), (1.492, 1.588, 1.6)]) TG2HighDay4 = np.array([(1.327, 1.317, 1.327), (1.258, 1.247, 1.265), (1.308, 1.321, 1.303), (1.541, 1.497, 1.438)]) NonXLDay7 = np.array([(1.861, 1.912, 1.814), (1.697, 1.647, 1.625), (1.762, 1.694, 1.693), (1.766, 1.799, 1.78)]) EthanolDay7 = np.array([(1.813, 1.712, 1.758), (1.841, 1.722, 1.69), (1.862, 1.671, 1.871), (1.894, 1.872, 1.804)]) EDCNHS10Day7 = np.array([(1.953, 1.963, 2.018), (1.894, 1.851, 1.951), (1.91, 1.871, 1.991), (1.915, 1.903, 1.907)]) EDCNHS50Day7 = np.array([(0.868, 0.856, 0.93), (0.94, 0.933, 0.988), (0.962, 0.964, 1.001), (1.046, 1.065, 1.019)]) EDCNHS100Day7 = np.array([(0.899, 0.889, 0.881), (0.895, 0.859, 0.878), (0.793, 0.797, 0.803), (0.907, 0.89, 0.919)]) Genipin03Day7 = np.array([(1.886, 1.973, 1.857), (1.884, 1.888, 1.809), (1.919, 1.908, 1.902), (1.957, 1.927, 1.928)]) Genipin05Day7 = np.array([(1.808, 1.91, 1.871), (1.915, 1.893, 1.915), (1.905, 1.829, 1.9), (1.917, 1.926, 1.883)]) Genipin10Day7 = np.array([(2.03, 1.933, 2.026), (1.902, 1.869, 2.067), (1.932, 1.814, 1.943), (1.911, 1.808, 1.937)]) TG2LowDay7 = np.array([(1.835, 1.854, 1.765), (1.776, 1.793, 1.818), (1.785, 1.81, 1.782), (1.797, 1.791, 1.801)]) TG2MidDay7 = np.array([(1.829, 1.812, 1.805), (1.658, 1.584, 1.602), (1.732, 1.677, 1.73), (1.821, 1.805, 1.825)]) TG2HighDay7 = np.array([(1.838, 1.875, 1.848), (1.812, 1.822, 1.849), (1.856, 1.804, 1.865), (1.826, 1.786, 1.84)]) # Sample means + errors day1Data = statsLib.statsproducer((NonXLDay1, EthanolDay1, EDCNHS10Day1, EDCNHS50Day1, EDCNHS100Day1, Genipin03Day1, Genipin05Day1, Genipin10Day1, TG2LowDay1, TG2MidDay1, TG2HighDay1), names, axisNo=(1, 0)) day4Data = statsLib.statsproducer((NonXLDay4, EthanolDay4, EDCNHS10Day4, EDCNHS50Day4, EDCNHS100Day4, Genipin03Day4, Genipin05Day4, Genipin10Day4, TG2LowDay4, TG2MidDay4, TG2HighDay4), names, axisNo=(1, 0)) day7Data = statsLib.statsproducer((NonXLDay7, EthanolDay7, EDCNHS10Day7, EDCNHS50Day7, EDCNHS100Day7, Genipin03Day7, Genipin05Day7, Genipin10Day7, TG2LowDay7, TG2MidDay7, TG2HighDay7), names, axisNo=(1, 0)) # Convert from absorbance to cell number for key in names: day1Data.loc[key, 'meanArray'] = Slope * (day1Data.loc[key, 'meanArray'] - day1Ctrl.loc[key, 'meanArray']) + Int day1Data.loc[key, 'meansArray'] = Slope * (day1Data.loc[key, 'meansArray'] - day1Ctrl.loc[key, 'meanArray']) + Int day1Data.loc[key, 'errorArray'] = Slope * day1Data.loc[key, 'errorArray'] day4Data.loc[key, 'meanArray'] = Slope * (day4Data.loc[key, 'meanArray'] - day4Ctrl.loc[key, 'meanArray']) + Int day4Data.loc[key, 'meansArray'] = Slope * (day4Data.loc[key, 'meansArray'] - day4Ctrl.loc[key, 'meanArray']) + Int day4Data.loc[key, 'errorArray'] = Slope * day4Data.loc[key, 'errorArray'] day7Data.loc[key, 'meanArray'] = Slope * (day7Data.loc[key, 'meanArray'] - day7Ctrl.loc[key, 'meanArray']) + Int day7Data.loc[key, 'meansArray'] = Slope * (day7Data.loc[key, 'meansArray'] - day7Ctrl.loc[key, 'meanArray']) + Int day7Data.loc[key, 'errorArray'] = Slope * day7Data.loc[key, 'errorArray'] # Plot cell number for seeded initial density for comparison day1Data.loc['Seeded \n Density']['meansArray'] = [50000, 50000, 50000, 50000] day1Data.loc['Seeded \n Density']['meanArray'] = 0 day1Data.loc['Seeded \n Density']['errorArray'] = 0 day4Data.loc['Seeded \n Density']['meansArray'] = [50000, 50000, 50000, 50000] day4Data.loc['Seeded \n Density']['meanArray'] = 50000 day4Data.loc['Seeded \n Density']['errorArray'] = 0 day7Data.loc['Seeded \n Density']['meansArray'] = [50000, 50000, 50000, 50000] day7Data.loc['Seeded \n Density']['meanArray'] = 0 day7Data.loc['Seeded \n Density']['errorArray'] = 0 # Calculate significance level with respect to the non-crosslinked condition statsLib.significanceTests(day1Data, standard='NonXL (0%)', names=names) statsLib.significanceTests(day4Data, standard='Ethanol (0%)', names=names) statsLib.significanceTests(day7Data, standard='Ethanol (0%)', names=names) # Plot results in a bar chart statsLib.barPlotter([day1Data, day4Data, day7Data], names[0:5] + [names[-1]], label=[['', '*', '*', '', '*', ''], [' ', '*', '*', '*', '^', ''], [' ', '*', '^*', '*', '^*', '']], xlabel='Crosslinking Conditions', ylabel='Cell Number', loc=1, savfig='MTSEDCNHS.png', ylim=(0, 180000), xlim=(0, len(names[0:5] + [names[-1]])), colour=colours[0:5] + [colours[-1]], alpha=[0.25, 0.5, 0.75], legendparams=[(0, 0), (1, 0), (2, 0)], legendnames=('Day 1', 'Day 4', 'Day 7'), ncol=1, adj=0.5, barwidth=0.2) statsLib.barPlotter([day1Data, day4Data, day7Data], [names[0]] + names[5:8] + [names[-1]], label=[['', '', '', '', ''], ['', '*', '*', '*', ''], ['', '*', '*', '*', '']], xlabel='Crosslinking Conditions', ylabel='Cell Number', loc=2, savfig='MTSGenipin.png', ylim=(0, 180000), xlim=(0, len([names[0]] + names[5:8] + [names[-1]])), colour=[colours[0]] + colours[5:8] + [colours[-1]], alpha=[0.25, 0.5, 0.75], legendparams=[(0, 0), (1, 0), (2, 0)], legendnames=('Day 1', 'Day 4', 'Day 7'), ncol=1, adj=0.5, barwidth=0.2) statsLib.barPlotter([day1Data, day4Data, day7Data], [names[0]] + names[8::], label=[['', '', '', '', ''], ['', '', '', '', ''], ['', '*', '*', '*', '']], xlabel='Crosslinking Conditions', ylabel='Cell Number', loc=2, savfig='MTSTG2.png', ylim=(0, 180000), xlim=(0, len([names[0]] + names[8::])), colour=[colours[0]] + colours[8::], alpha=[0.25, 0.5, 0.75], legendparams=[(0, 0), (1, 0), (2, 0)], legendnames=('Day 1', 'Day 4', 'Day 7'), ncol=1, adj=0.5, barwidth=0.2) statsLib.barPlotter([day1Ctrl, day4Ctrl, day7Ctrl], names, label=[['', '', '', '', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '', '', '', '']], xlabel='Crosslinking Conditions', ylabel='Cell Number', loc=1, savfig='MTSCtrl.png', ylim=(0, 0.5), xlim=(0, len(names)), colour=colours, alpha=[0.25, 0.5, 0.75], legendparams=[(1, 0), (1, 3), (1, 6), (1, 9), (0, 0), (1, 0), (2, 0)], legendnames=('NonXL', 'EDC-NHS', 'Genipin', 'TG2', 'Day 1', 'Day 4', 'Day 7'), ncol=4, adj=0.3) statsLib.barPlotter([day1Data, day4Data, day7Data], names, label=[['^', '*', '*', '', '*', '', '', '^', '', '', '^', ''], ['^', '*', '*', '*', '^', '*', '*^', '*^', '*^', '^', '^*', ''], ['^', '*', '*', '*^', '*^', '*^', '*^', '*^', '*^', '*^', '*^', '']], xlabel='Crosslinking Conditions', ylabel='Cell Number', loc=1, savfig='MTS.svg', ylim=(0, 225000), xlim=(-0.5, len(names)), colour=colours, alpha=[0.25, 0.5, 0.75], legendparams=[(1, 0), (1, 3), (1, 6), (1, 9), (0, 0), (1, 0), (2, 0)], legendnames=('NonXL', 'EDC-NHS', 'Genipin', 'TG2', 'Day 1', 'Day 4', 'Day 7'), ncol=4, adj=-0.25)