# ____________________________________________________________________________ # Load data #### expression = task["expression"] parameters = task["parameters"] # ____________________________________________________________________________ # Infer trajectory #### m = matcher.MATCHER([expression.values]) m.infer(quantiles=parameters["quantiles"], method=parameters["method"]) checkpoints["method_aftermethod"] = time.time() # ____________________________________________________________________________ # Save output #### dataset = dynclipy.wrap_data(cell_ids=expression.index) # pseudotime pseudotime = pd.DataFrame({ "cell_id": expression.index, "pseudotime": m.master_time[0][:, 0] }) dataset.add_linear_trajectory(pseudotime=pseudotime) # timings dataset.add_timings(checkpoints) # save dataset.write_output(task["output"])
# infer pseudotime m.infer_pseudotime(s_columns=[ "bgplvm_" + str(i) for i in range(p["ndim"]) ]) # use the first two components to infer pseudotime # model different fates m.model_fates(C=end_n) checkpoints["method_aftermethod"] = time.time() # ____________________________________________________________________________ # Process and save output #### # pseudotime pseudotime = m.s.pseudotime.reset_index() pseudotime.columns = ["cell_id", "pseudotime"] # dimred dimred = pd.DataFrame(m.dr_models["bgplvm"].X.mean[:, :].tolist()) dimred["cell_id"] = m.s.pseudotime.index.tolist() # progressions end_state_probabilities = pd.DataFrame(m.fate_model.phi) end_state_probabilities["cell_id"] = m.s.pseudotime.index.tolist() # save dataset = dynclipy.wrap_data(cell_ids=m.s.pseudotime.index) dataset.add_end_state_probabilities( end_state_probabilities=end_state_probabilities, pseudotime=pseudotime) dataset.add_timings(timings=checkpoints) dataset.write_output(task["output"])
branches["directed"] = True output["branches"] = branches # branch network: determine order of from and to based on difference in average pseudotime branch_network = milestone_network[["from", "to"]] average_pseudotime = adata.obs.groupby("louvain")["dpt_pseudotime"].mean() for i, (branch_from, branch_to) in enumerate( zip(branch_network["from"], branch_network["to"])): if average_pseudotime[branch_from] > average_pseudotime[branch_to]: branch_network.at[i, "to"] = branch_from branch_network.at[i, "from"] = branch_to output["branch_network"] = branch_network # timings timings = pd.Series(checkpoints) timings.index.name = "name" timings.name = "timings" output["timings"] = timings # save dataset = dynclipy.wrap_data(cell_ids=counts.index) dataset.add_branch_trajectory( grouping=output["grouping"], milestone_network=output["milestone_network"], branch_progressions=output["branch_progressions"], branches=output["branches"], branch_network=output["branch_network"]) dataset.add_dimred(dimred=output["dimred"]) dataset.write_output(task["output"])
import dynclipy import pandas as pd cell_ids = pd.Series(["a", "b", "c"]) dataset = dynclipy.wrap_data(cell_ids = cell_ids) dataset.add_linear_trajectory(pseudotime = pd.Series({"a":1, "b":0.8, "c":0.1})) dataset.add_dimred(pd.DataFrame({"cell_id":cell_ids, "comp_1":[0, 0, 4], "comp_2":[1,1, 4]})) dataset.write_output("test.h5")
### INFER TRAJECTORY ### ##################################### # do PCA pca = sklearn.decomposition.PCA() dimred = pca.fit_transform(expression.values) # extract the component and use it as pseudotimes pseudotime = dimred[:, params["component"]] pseudotime = (pseudotime - pseudotime.min()) / (pseudotime.max() - pseudotime.min()) # flip pseudotimes using start_id if start_id is not None: if pseudotime[start_id].mean(): pseudotime = 1 - pseudotime checkpoints["method_aftermethod"] = time.time() ##################################### ### SAVE OUTPUT TRAJECTORY ### ##################################### output = dynclipy.wrap_data(cell_ids = cell_ids) output.add_linear_trajectory(pseudotime = pd.Series(pseudotime, index = expression.index), do_scale_minmax = False) dimred = pd.DataFrame(dimred) dimred["cell_id"] = expression.index output.add_dimred(dimred) output.add_timings(checkpoints) # save output.write_output(task["output"])
branch_progressions = branch_progressions[["cell_id", "branch_id", "percentage"]] # branches: # - length = difference between max and min dpt_pseudotime within every cluster # - directed = not yet correctly inferred branches = adata.obs.groupby("louvain").apply(lambda x: x["dpt_pseudotime"].max() - x["dpt_pseudotime"].min()).reset_index() branches.columns = ["branch_id", "length"] branches["branch_id"] = branches["branch_id"].astype(np.str) branches["directed"] = True # branch network: determine order of from and to based on difference in average pseudotime branch_network = milestone_network[["from", "to"]] average_pseudotime = adata.obs.groupby("louvain")["dpt_pseudotime"].mean() for i, (branch_from, branch_to) in enumerate(zip(branch_network["from"], branch_network["to"])): if average_pseudotime[branch_from] > average_pseudotime[branch_to]: branch_network.at[i, "to"] = branch_from branch_network.at[i, "from"] = branch_to # save dataset = dynclipy.wrap_data(cell_ids = adata.obs.index) dataset.add_branch_trajectory( grouping = grouping, branch_progressions = branch_progressions, branches = branches, branch_network = branch_network ) dataset.add_dimred(dimred = dimred) dataset.add_timings(checkpoints) dataset.write_output(task["output"])
#!/usr/bin/env python import dynclipy dataset = dynclipy.main() import pandas as pd import sklearn.decomposition # infer trajectory pca = sklearn.decomposition.PCA() dimred = pca.fit_transform(dataset['expression']) pseudotime = pd.Series(dimred[:, dataset['parameters']['component'] - 1], index=dataset['expression'].index) # build trajectory trajectory = dynclipy.wrap_data(cell_ids=dataset['expression'].index) trajectory.add_linear_trajectory(pseudotime=pseudotime) # save output trajectory.write_output(dataset['output'])
# check waypoints parameter to be lower than # cells if p["num_waypoints"] > scdata.data.shape[0]: p["num_waypoints"] = scdata.data.shape[0] # run wishbone wb = wishbone.wb.Wishbone(scdata) wb.run_wishbone(start_cell=start_cell, components_list=list(range(p["n_diffusion_components"])), num_waypoints=int(p["num_waypoints"]), branch=False, k=p["k"]) checkpoints["method_aftermethod"] = time.time() # ____________________________________________________________________________ # Process output & save #### # pseudotime pseudotime = wb.trajectory.reset_index() pseudotime.columns = ["cell_id", "pseudotime"] # dimred dimred = wb.scdata.diffusion_eigenvectors dimred.index.name = "cell_id" dimred = dimred.reset_index() # save dataset = dynclipy.wrap_data(cell_ids = dimred["cell_id"]) dataset.add_linear_trajectory( pseudotime = pseudotime ) dataset.add_dimred(dimred = dimred) dataset.add_timings(timings = checkpoints) dataset.write_output(task["output"])