From 13ff2059679e03340a2915c9e7c7d30fc17078ee Mon Sep 17 00:00:00 2001 From: mase5 Date: Wed, 4 Jul 2018 17:52:26 +0200 Subject: [PATCH 1/5] Add trajectory entry in Embedding message of s.proto file. Update compiled files of s.proto. --- .../dataserver/modules/gserver/s_pb2.py | 224 +++++++++++------- src/proto/s.proto | 6 + 2 files changed, 145 insertions(+), 85 deletions(-) diff --git a/opt/scopeserver/dataserver/modules/gserver/s_pb2.py b/opt/scopeserver/dataserver/modules/gserver/s_pb2.py index 82c73f1f..29a0f619 100644 --- a/opt/scopeserver/dataserver/modules/gserver/s_pb2.py +++ b/opt/scopeserver/dataserver/modules/gserver/s_pb2.py @@ -19,7 +19,7 @@ name='s.proto', package='scope', syntax='proto3', - serialized_pb=_b('\n\x07s.proto\x12\x05scope\"+\n\nErrorReply\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xfb\x01\n\x1a\x43\x65llColorByFeaturesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\x12\x11\n\tthreshold\x18\x06 \x03(\x02\x12\x18\n\x10scaleThresholded\x18\x07 \x01(\x08\x12%\n\nannotation\x18\x08 \x03(\x0b\x32\x11.scope.Annotation\x12\x0c\n\x04vmax\x18\t \x03(\x02\x12\r\n\x05logic\x18\n \x01(\t\"-\n\x0b\x43olorLegend\x12\x0e\n\x06values\x18\x01 \x03(\t\x12\x0e\n\x06\x63olors\x18\x02 \x03(\t\"\xdc\x01\n\x18\x43\x65llColorByFeaturesReply\x12\x1e\n\x16hasAddCompressionLayer\x18\x01 \x01(\x08\x12\x17\n\x0f\x63ompressedColor\x18\x02 \x01(\x0c\x12\r\n\x05\x63olor\x18\x03 \x03(\t\x12\x0c\n\x04vmax\x18\x04 \x03(\x02\x12\x0f\n\x07maxVmax\x18\x05 \x03(\x02\x12\x13\n\x0b\x63\x65llIndices\x18\x06 \x03(\x05\x12\"\n\x06legend\x18\x07 \x01(\x0b\x32\x12.scope.ColorLegend\x12 \n\x05\x65rror\x18\x08 \x01(\x0b\x32\x11.scope.ErrorReply\"\\\n\x1e\x43\x65llAUCValuesByFeaturesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\"-\n\x1c\x43\x65llAUCValuesByFeaturesReply\x12\r\n\x05value\x18\x01 \x03(\x02\"5\n\x0e\x46\x65\x61tureRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\r\n\x05query\x18\x02 \x01(\t\"\xcd\x01\n\x13\x43\x65llMetaDataRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x02 \x03(\x05\x12\x15\n\rselectedGenes\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\x12\x18\n\x10selectedRegulons\x18\x06 \x03(\t\x12\x13\n\x0b\x63lusterings\x18\x07 \x03(\x05\x12\x13\n\x0b\x61nnotations\x18\x08 \x03(\t\"P\n\x0c\x46\x65\x61tureReply\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x02 \x03(\t\x12\x1a\n\x12\x66\x65\x61tureDescription\x18\x03 \x03(\t\"w\n\x12\x43oordinatesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x15\n\rcoordinatesID\x18\x02 \x01(\x05\x12%\n\nannotation\x18\x03 \x03(\x0b\x32\x11.scope.Annotation\x12\r\n\x05logic\x18\x04 \x01(\t\"=\n\x10\x43oordinatesReply\x12\t\n\x01x\x18\x01 \x03(\x02\x12\t\n\x01y\x18\x02 \x03(\x02\x12\x13\n\x0b\x63\x65llIndices\x18\x03 \x03(\x05\"*\n\nAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06values\x18\x02 \x03(\t\"%\n\tEmbedding\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\"J\n\x13\x43lusterMarkerMetric\x12\x10\n\x08\x61\x63\x63\x65ssor\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"4\n\x11\x43lusterAnnotation\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\x9b\x01\n\nClustering\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05group\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x38\n\x14\x63lusterMarkerMetrics\x18\x04 \x03(\x0b\x32\x1a.scope.ClusterMarkerMetric\x12*\n\x08\x63lusters\x18\x05 \x03(\x0b\x32\x18.scope.ClusterAnnotation\"\x84\x01\n\x0c\x43\x65llMetaData\x12&\n\x0b\x61nnotations\x18\x01 \x03(\x0b\x32\x11.scope.Annotation\x12$\n\nembeddings\x18\x02 \x03(\x0b\x32\x10.scope.Embedding\x12&\n\x0b\x63lusterings\x18\x03 \x03(\x0b\x32\x11.scope.Clustering\"/\n\x0c\x41UCThreshold\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tthreshold\x18\x02 \x01(\x02\"r\n\x07Regulon\x12\r\n\x05genes\x18\x01 \x03(\t\x12+\n\x0e\x61utoThresholds\x18\x02 \x03(\x0b\x32\x13.scope.AUCThreshold\x12\x18\n\x10\x64\x65\x66\x61ultThreshold\x18\x03 \x01(\t\x12\x11\n\tmotifName\x18\x04 \x01(\t\"\x86\x01\n\x0c\x46ileMetaData\x12\x16\n\x0ehasRegulonsAUC\x18\x01 \x01(\x08\x12\x13\n\x0bhasGeneSets\x18\x02 \x01(\x08\x12\x16\n\x0ehasClusterings\x18\x03 \x01(\x08\x12\x1a\n\x12hasExtraEmbeddings\x18\x04 \x01(\x08\x12\x15\n\rhasGlobalMeta\x18\x05 \x01(\x08\"!\n\rFeatureValues\x12\x10\n\x08\x66\x65\x61tures\x18\x01 \x03(\x02\"&\n\x0f\x43\x65llAnnotations\x12\x13\n\x0b\x61nnotations\x18\x01 \x03(\t\" \n\x0c\x43\x65llClusters\x12\x10\n\x08\x63lusters\x18\x01 \x03(\x05\"\xc0\x01\n\x11\x43\x65llMetaDataReply\x12\'\n\nclusterIDs\x18\x01 \x03(\x0b\x32\x13.scope.CellClusters\x12,\n\x0egeneExpression\x18\x02 \x03(\x0b\x32\x14.scope.FeatureValues\x12\'\n\taucValues\x18\x03 \x03(\x0b\x32\x14.scope.FeatureValues\x12+\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x16.scope.CellAnnotations\"?\n\x16RegulonMetaDataRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07regulon\x18\x02 \x01(\t\";\n\x14RegulonMetaDataReply\x12#\n\x0bregulonMeta\x18\x01 \x01(\x0b\x32\x0e.scope.Regulon\"S\n\x12MarkerGenesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x14\n\x0c\x63lusteringID\x18\x02 \x01(\x05\x12\x11\n\tclusterID\x18\x03 \x01(\x05\"X\n\x11MarkerGenesMetric\x12\x10\n\x08\x61\x63\x63\x65ssor\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06values\x18\x04 \x03(\x02\"L\n\x10MarkerGenesReply\x12\r\n\x05genes\x18\x01 \x03(\t\x12)\n\x07metrics\x18\x02 \x03(\x0b\x32\x18.scope.MarkerGenesMetric\"\x1e\n\x0eMyLoomsRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"4\n\x0eLoomHeierarchy\x12\n\n\x02L1\x18\x01 \x01(\t\x12\n\n\x02L2\x18\x02 \x01(\t\x12\n\n\x02L3\x18\x03 \x01(\t\"\xce\x01\n\x06MyLoom\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x17\n\x0floomDisplayName\x18\x02 \x01(\t\x12\x10\n\x08loomSize\x18\x03 \x01(\x03\x12)\n\x0c\x63\x65llMetaData\x18\x04 \x01(\x0b\x32\x13.scope.CellMetaData\x12)\n\x0c\x66ileMetaData\x18\x05 \x01(\x0b\x32\x13.scope.FileMetaData\x12-\n\x0eloomHeierarchy\x18\x06 \x01(\x0b\x32\x15.scope.LoomHeierarchy\".\n\x0cMyLoomsReply\x12\x1e\n\x07myLooms\x18\x01 \x03(\x0b\x32\r.scope.MyLoom\"h\n\x1eTranslateLassoSelectionRequest\x12\x17\n\x0fsrcLoomFilePath\x18\x01 \x01(\t\x12\x18\n\x10\x64\x65stLoomFilePath\x18\x02 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x03 \x03(\x05\"3\n\x1cTranslateLassoSelectionReply\x12\x13\n\x0b\x63\x65llIndices\x18\x01 \x03(\x05\";\n\x0e\x43\x65llIDsRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x02 \x03(\x05\"\x1f\n\x0c\x43\x65llIDsReply\x12\x0f\n\x07\x63\x65llIds\x18\x01 \x03(\t\"Y\n\x18GeneSetEnrichmentRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x17\n\x0fgeneSetFilePath\x18\x02 \x01(\t\x12\x0e\n\x06method\x18\x03 \x01(\t\")\n\x08Progress\x12\r\n\x05value\x18\x01 \x01(\x02\x12\x0e\n\x06status\x18\x02 \x01(\t\"\x80\x01\n\x16GeneSetEnrichmentReply\x12!\n\x08progress\x18\x01 \x01(\x0b\x32\x0f.scope.Progress\x12\x0e\n\x06isDone\x18\x02 \x01(\x08\x12\x33\n\ncellValues\x18\x03 \x01(\x0b\x32\x1f.scope.CellColorByFeaturesReply\"{\n\x0bVmaxRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x03(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\"*\n\tVmaxReply\x12\x0c\n\x04vmax\x18\x01 \x03(\x02\x12\x0f\n\x07maxVmax\x18\x02 \x03(\x02\"\x19\n\x0bUUIDRequest\x12\n\n\x02ip\x18\x01 \x01(\t\"\x19\n\tUUIDReply\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"I\n\x18RemainingUUIDTimeRequest\x12\n\n\x02ip\x18\x01 \x01(\t\x12\x0c\n\x04UUID\x18\x02 \x01(\t\x12\x13\n\x0bmouseEvents\x18\x03 \x01(\x03\"[\n\x16RemainingUUIDTimeReply\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x15\n\rtimeRemaining\x18\x02 \x01(\x03\x12\x1c\n\x14sessionsLimitReached\x18\x03 \x01(\x08\"5\n\x13LoomUploadedRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x10\n\x08\x66ilename\x18\x02 \x01(\t\"\x13\n\x11LoomUploadedReply\"@\n\tMyGeneSet\x12\x17\n\x0fgeneSetFilePath\x18\x01 \x01(\t\x12\x1a\n\x12geneSetDisplayName\x18\x02 \x01(\t\"!\n\x11MyGeneSetsRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"7\n\x0fMyGeneSetsReply\x12$\n\nmyGeneSets\x18\x01 \x03(\x0b\x32\x10.scope.MyGeneSet\"I\n\x15\x44\x65leteUserFileRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x10\n\x08\x66ilePath\x18\x02 \x01(\t\x12\x10\n\x08\x66ileType\x18\x03 \x01(\t\"2\n\x13\x44\x65leteUserFileReply\x12\x1b\n\x13\x64\x65letedSuccessfully\x18\x01 \x01(\x08\x32\x95\n\n\x04Main\x12^\n\x16getCellColorByFeatures\x12!.scope.CellColorByFeaturesRequest\x1a\x1f.scope.CellColorByFeaturesReply\"\x00\x12j\n\x1agetCellAUCValuesByFeatures\x12%.scope.CellAUCValuesByFeaturesRequest\x1a#.scope.CellAUCValuesByFeaturesReply\"\x00\x12I\n\x0fgetCellMetaData\x12\x1a.scope.CellMetaDataRequest\x1a\x18.scope.CellMetaDataReply\"\x00\x12;\n\x0bgetFeatures\x12\x15.scope.FeatureRequest\x1a\x13.scope.FeatureReply\"\x00\x12\x46\n\x0egetCoordinates\x12\x19.scope.CoordinatesRequest\x1a\x17.scope.CoordinatesReply\"\x00\x12R\n\x12getRegulonMetaData\x12\x1d.scope.RegulonMetaDataRequest\x1a\x1b.scope.RegulonMetaDataReply\"\x00\x12\x46\n\x0egetMarkerGenes\x12\x19.scope.MarkerGenesRequest\x1a\x17.scope.MarkerGenesReply\"\x00\x12:\n\ngetMyLooms\x12\x15.scope.MyLoomsRequest\x1a\x13.scope.MyLoomsReply\"\x00\x12g\n\x17translateLassoSelection\x12%.scope.TranslateLassoSelectionRequest\x1a#.scope.TranslateLassoSelectionReply\"\x00\x12:\n\ngetCellIDs\x12\x15.scope.CellIDsRequest\x1a\x13.scope.CellIDsReply\"\x00\x12Y\n\x13\x64oGeneSetEnrichment\x12\x1f.scope.GeneSetEnrichmentRequest\x1a\x1d.scope.GeneSetEnrichmentReply\"\x00\x30\x01\x12\x31\n\x07getVmax\x12\x12.scope.VmaxRequest\x1a\x10.scope.VmaxReply\"\x00\x12\x31\n\x07getUUID\x12\x12.scope.UUIDRequest\x1a\x10.scope.UUIDReply\"\x00\x12X\n\x14getRemainingUUIDTime\x12\x1f.scope.RemainingUUIDTimeRequest\x1a\x1d.scope.RemainingUUIDTimeReply\"\x00\x12\x46\n\x0cloomUploaded\x12\x1a.scope.LoomUploadedRequest\x1a\x18.scope.LoomUploadedReply\"\x00\x12\x43\n\rgetMyGeneSets\x12\x18.scope.MyGeneSetsRequest\x1a\x16.scope.MyGeneSetsReply\"\x00\x12L\n\x0e\x64\x65leteUserFile\x12\x1c.scope.DeleteUserFileRequest\x1a\x1a.scope.DeleteUserFileReply\"\x00\x62\x06proto3') + serialized_pb=_b('\n\x07s.proto\x12\x05scope\"+\n\nErrorReply\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xfb\x01\n\x1a\x43\x65llColorByFeaturesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\x12\x11\n\tthreshold\x18\x06 \x03(\x02\x12\x18\n\x10scaleThresholded\x18\x07 \x01(\x08\x12%\n\nannotation\x18\x08 \x03(\x0b\x32\x11.scope.Annotation\x12\x0c\n\x04vmax\x18\t \x03(\x02\x12\r\n\x05logic\x18\n \x01(\t\"-\n\x0b\x43olorLegend\x12\x0e\n\x06values\x18\x01 \x03(\t\x12\x0e\n\x06\x63olors\x18\x02 \x03(\t\"\xdc\x01\n\x18\x43\x65llColorByFeaturesReply\x12\x1e\n\x16hasAddCompressionLayer\x18\x01 \x01(\x08\x12\x17\n\x0f\x63ompressedColor\x18\x02 \x01(\x0c\x12\r\n\x05\x63olor\x18\x03 \x03(\t\x12\x0c\n\x04vmax\x18\x04 \x03(\x02\x12\x0f\n\x07maxVmax\x18\x05 \x03(\x02\x12\x13\n\x0b\x63\x65llIndices\x18\x06 \x03(\x05\x12\"\n\x06legend\x18\x07 \x01(\x0b\x32\x12.scope.ColorLegend\x12 \n\x05\x65rror\x18\x08 \x01(\x0b\x32\x11.scope.ErrorReply\"\\\n\x1e\x43\x65llAUCValuesByFeaturesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\"-\n\x1c\x43\x65llAUCValuesByFeaturesReply\x12\r\n\x05value\x18\x01 \x03(\x02\"5\n\x0e\x46\x65\x61tureRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\r\n\x05query\x18\x02 \x01(\t\"\xcd\x01\n\x13\x43\x65llMetaDataRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x02 \x03(\x05\x12\x15\n\rselectedGenes\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\x12\x18\n\x10selectedRegulons\x18\x06 \x03(\t\x12\x13\n\x0b\x63lusterings\x18\x07 \x03(\x05\x12\x13\n\x0b\x61nnotations\x18\x08 \x03(\t\"P\n\x0c\x46\x65\x61tureReply\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x02 \x03(\t\x12\x1a\n\x12\x66\x65\x61tureDescription\x18\x03 \x03(\t\"w\n\x12\x43oordinatesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x15\n\rcoordinatesID\x18\x02 \x01(\x05\x12%\n\nannotation\x18\x03 \x03(\x0b\x32\x11.scope.Annotation\x12\r\n\x05logic\x18\x04 \x01(\t\"=\n\x10\x43oordinatesReply\x12\t\n\x01x\x18\x01 \x03(\x02\x12\t\n\x01y\x18\x02 \x03(\x02\x12\x13\n\x0b\x63\x65llIndices\x18\x03 \x03(\x05\"*\n\nAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06values\x18\x02 \x03(\t\"\"\n\nTrajectory\x12\t\n\x01x\x18\x01 \x03(\x02\x12\t\n\x01y\x18\x02 \x03(\x02\"L\n\tEmbedding\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12%\n\ntrajectory\x18\x03 \x01(\x0b\x32\x11.scope.Trajectory\"J\n\x13\x43lusterMarkerMetric\x12\x10\n\x08\x61\x63\x63\x65ssor\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"4\n\x11\x43lusterAnnotation\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\x9b\x01\n\nClustering\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05group\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x38\n\x14\x63lusterMarkerMetrics\x18\x04 \x03(\x0b\x32\x1a.scope.ClusterMarkerMetric\x12*\n\x08\x63lusters\x18\x05 \x03(\x0b\x32\x18.scope.ClusterAnnotation\"\x84\x01\n\x0c\x43\x65llMetaData\x12&\n\x0b\x61nnotations\x18\x01 \x03(\x0b\x32\x11.scope.Annotation\x12$\n\nembeddings\x18\x02 \x03(\x0b\x32\x10.scope.Embedding\x12&\n\x0b\x63lusterings\x18\x03 \x03(\x0b\x32\x11.scope.Clustering\"/\n\x0c\x41UCThreshold\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tthreshold\x18\x02 \x01(\x02\"r\n\x07Regulon\x12\r\n\x05genes\x18\x01 \x03(\t\x12+\n\x0e\x61utoThresholds\x18\x02 \x03(\x0b\x32\x13.scope.AUCThreshold\x12\x18\n\x10\x64\x65\x66\x61ultThreshold\x18\x03 \x01(\t\x12\x11\n\tmotifName\x18\x04 \x01(\t\"\x86\x01\n\x0c\x46ileMetaData\x12\x16\n\x0ehasRegulonsAUC\x18\x01 \x01(\x08\x12\x13\n\x0bhasGeneSets\x18\x02 \x01(\x08\x12\x16\n\x0ehasClusterings\x18\x03 \x01(\x08\x12\x1a\n\x12hasExtraEmbeddings\x18\x04 \x01(\x08\x12\x15\n\rhasGlobalMeta\x18\x05 \x01(\x08\"!\n\rFeatureValues\x12\x10\n\x08\x66\x65\x61tures\x18\x01 \x03(\x02\"&\n\x0f\x43\x65llAnnotations\x12\x13\n\x0b\x61nnotations\x18\x01 \x03(\t\" \n\x0c\x43\x65llClusters\x12\x10\n\x08\x63lusters\x18\x01 \x03(\x05\"\xc0\x01\n\x11\x43\x65llMetaDataReply\x12\'\n\nclusterIDs\x18\x01 \x03(\x0b\x32\x13.scope.CellClusters\x12,\n\x0egeneExpression\x18\x02 \x03(\x0b\x32\x14.scope.FeatureValues\x12\'\n\taucValues\x18\x03 \x03(\x0b\x32\x14.scope.FeatureValues\x12+\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x16.scope.CellAnnotations\"?\n\x16RegulonMetaDataRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07regulon\x18\x02 \x01(\t\";\n\x14RegulonMetaDataReply\x12#\n\x0bregulonMeta\x18\x01 \x01(\x0b\x32\x0e.scope.Regulon\"S\n\x12MarkerGenesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x14\n\x0c\x63lusteringID\x18\x02 \x01(\x05\x12\x11\n\tclusterID\x18\x03 \x01(\x05\"X\n\x11MarkerGenesMetric\x12\x10\n\x08\x61\x63\x63\x65ssor\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06values\x18\x04 \x03(\x02\"L\n\x10MarkerGenesReply\x12\r\n\x05genes\x18\x01 \x03(\t\x12)\n\x07metrics\x18\x02 \x03(\x0b\x32\x18.scope.MarkerGenesMetric\"\x1e\n\x0eMyLoomsRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"4\n\x0eLoomHeierarchy\x12\n\n\x02L1\x18\x01 \x01(\t\x12\n\n\x02L2\x18\x02 \x01(\t\x12\n\n\x02L3\x18\x03 \x01(\t\"\xce\x01\n\x06MyLoom\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x17\n\x0floomDisplayName\x18\x02 \x01(\t\x12\x10\n\x08loomSize\x18\x03 \x01(\x03\x12)\n\x0c\x63\x65llMetaData\x18\x04 \x01(\x0b\x32\x13.scope.CellMetaData\x12)\n\x0c\x66ileMetaData\x18\x05 \x01(\x0b\x32\x13.scope.FileMetaData\x12-\n\x0eloomHeierarchy\x18\x06 \x01(\x0b\x32\x15.scope.LoomHeierarchy\".\n\x0cMyLoomsReply\x12\x1e\n\x07myLooms\x18\x01 \x03(\x0b\x32\r.scope.MyLoom\"h\n\x1eTranslateLassoSelectionRequest\x12\x17\n\x0fsrcLoomFilePath\x18\x01 \x01(\t\x12\x18\n\x10\x64\x65stLoomFilePath\x18\x02 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x03 \x03(\x05\"3\n\x1cTranslateLassoSelectionReply\x12\x13\n\x0b\x63\x65llIndices\x18\x01 \x03(\x05\";\n\x0e\x43\x65llIDsRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x02 \x03(\x05\"\x1f\n\x0c\x43\x65llIDsReply\x12\x0f\n\x07\x63\x65llIds\x18\x01 \x03(\t\"Y\n\x18GeneSetEnrichmentRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x17\n\x0fgeneSetFilePath\x18\x02 \x01(\t\x12\x0e\n\x06method\x18\x03 \x01(\t\")\n\x08Progress\x12\r\n\x05value\x18\x01 \x01(\x02\x12\x0e\n\x06status\x18\x02 \x01(\t\"\x80\x01\n\x16GeneSetEnrichmentReply\x12!\n\x08progress\x18\x01 \x01(\x0b\x32\x0f.scope.Progress\x12\x0e\n\x06isDone\x18\x02 \x01(\x08\x12\x33\n\ncellValues\x18\x03 \x01(\x0b\x32\x1f.scope.CellColorByFeaturesReply\"{\n\x0bVmaxRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x03(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\"*\n\tVmaxReply\x12\x0c\n\x04vmax\x18\x01 \x03(\x02\x12\x0f\n\x07maxVmax\x18\x02 \x03(\x02\"\x19\n\x0bUUIDRequest\x12\n\n\x02ip\x18\x01 \x01(\t\"\x19\n\tUUIDReply\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"I\n\x18RemainingUUIDTimeRequest\x12\n\n\x02ip\x18\x01 \x01(\t\x12\x0c\n\x04UUID\x18\x02 \x01(\t\x12\x13\n\x0bmouseEvents\x18\x03 \x01(\x03\"[\n\x16RemainingUUIDTimeReply\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x15\n\rtimeRemaining\x18\x02 \x01(\x03\x12\x1c\n\x14sessionsLimitReached\x18\x03 \x01(\x08\"5\n\x13LoomUploadedRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x10\n\x08\x66ilename\x18\x02 \x01(\t\"\x13\n\x11LoomUploadedReply\"@\n\tMyGeneSet\x12\x17\n\x0fgeneSetFilePath\x18\x01 \x01(\t\x12\x1a\n\x12geneSetDisplayName\x18\x02 \x01(\t\"!\n\x11MyGeneSetsRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"7\n\x0fMyGeneSetsReply\x12$\n\nmyGeneSets\x18\x01 \x03(\x0b\x32\x10.scope.MyGeneSet\"I\n\x15\x44\x65leteUserFileRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x10\n\x08\x66ilePath\x18\x02 \x01(\t\x12\x10\n\x08\x66ileType\x18\x03 \x01(\t\"2\n\x13\x44\x65leteUserFileReply\x12\x1b\n\x13\x64\x65letedSuccessfully\x18\x01 \x01(\x08\x32\x95\n\n\x04Main\x12^\n\x16getCellColorByFeatures\x12!.scope.CellColorByFeaturesRequest\x1a\x1f.scope.CellColorByFeaturesReply\"\x00\x12j\n\x1agetCellAUCValuesByFeatures\x12%.scope.CellAUCValuesByFeaturesRequest\x1a#.scope.CellAUCValuesByFeaturesReply\"\x00\x12I\n\x0fgetCellMetaData\x12\x1a.scope.CellMetaDataRequest\x1a\x18.scope.CellMetaDataReply\"\x00\x12;\n\x0bgetFeatures\x12\x15.scope.FeatureRequest\x1a\x13.scope.FeatureReply\"\x00\x12\x46\n\x0egetCoordinates\x12\x19.scope.CoordinatesRequest\x1a\x17.scope.CoordinatesReply\"\x00\x12R\n\x12getRegulonMetaData\x12\x1d.scope.RegulonMetaDataRequest\x1a\x1b.scope.RegulonMetaDataReply\"\x00\x12\x46\n\x0egetMarkerGenes\x12\x19.scope.MarkerGenesRequest\x1a\x17.scope.MarkerGenesReply\"\x00\x12:\n\ngetMyLooms\x12\x15.scope.MyLoomsRequest\x1a\x13.scope.MyLoomsReply\"\x00\x12g\n\x17translateLassoSelection\x12%.scope.TranslateLassoSelectionRequest\x1a#.scope.TranslateLassoSelectionReply\"\x00\x12:\n\ngetCellIDs\x12\x15.scope.CellIDsRequest\x1a\x13.scope.CellIDsReply\"\x00\x12Y\n\x13\x64oGeneSetEnrichment\x12\x1f.scope.GeneSetEnrichmentRequest\x1a\x1d.scope.GeneSetEnrichmentReply\"\x00\x30\x01\x12\x31\n\x07getVmax\x12\x12.scope.VmaxRequest\x1a\x10.scope.VmaxReply\"\x00\x12\x31\n\x07getUUID\x12\x12.scope.UUIDRequest\x1a\x10.scope.UUIDReply\"\x00\x12X\n\x14getRemainingUUIDTime\x12\x1f.scope.RemainingUUIDTimeRequest\x1a\x1d.scope.RemainingUUIDTimeReply\"\x00\x12\x46\n\x0cloomUploaded\x12\x1a.scope.LoomUploadedRequest\x1a\x18.scope.LoomUploadedReply\"\x00\x12\x43\n\rgetMyGeneSets\x12\x18.scope.MyGeneSetsRequest\x1a\x16.scope.MyGeneSetsReply\"\x00\x12L\n\x0e\x64\x65leteUserFile\x12\x1c.scope.DeleteUserFileRequest\x1a\x1a.scope.DeleteUserFileReply\"\x00\x62\x06proto3') ) @@ -649,6 +649,44 @@ ) +_TRAJECTORY = _descriptor.Descriptor( + name='Trajectory', + full_name='scope.Trajectory', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='scope.Trajectory.x', index=0, + number=1, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='y', full_name='scope.Trajectory.y', index=1, + number=2, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1301, + serialized_end=1335, +) + + _EMBEDDING = _descriptor.Descriptor( name='Embedding', full_name='scope.Embedding', @@ -670,6 +708,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='trajectory', full_name='scope.Embedding.trajectory', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -682,8 +727,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1301, - serialized_end=1338, + serialized_start=1337, + serialized_end=1413, ) @@ -727,8 +772,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1340, - serialized_end=1414, + serialized_start=1415, + serialized_end=1489, ) @@ -765,8 +810,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1416, - serialized_end=1468, + serialized_start=1491, + serialized_end=1543, ) @@ -824,8 +869,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1471, - serialized_end=1626, + serialized_start=1546, + serialized_end=1701, ) @@ -869,8 +914,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1629, - serialized_end=1761, + serialized_start=1704, + serialized_end=1836, ) @@ -907,8 +952,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1763, - serialized_end=1810, + serialized_start=1838, + serialized_end=1885, ) @@ -959,8 +1004,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1812, - serialized_end=1926, + serialized_start=1887, + serialized_end=2001, ) @@ -1018,8 +1063,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1929, - serialized_end=2063, + serialized_start=2004, + serialized_end=2138, ) @@ -1049,8 +1094,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2065, - serialized_end=2098, + serialized_start=2140, + serialized_end=2173, ) @@ -1080,8 +1125,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2100, - serialized_end=2138, + serialized_start=2175, + serialized_end=2213, ) @@ -1111,8 +1156,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2140, - serialized_end=2172, + serialized_start=2215, + serialized_end=2247, ) @@ -1163,8 +1208,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2175, - serialized_end=2367, + serialized_start=2250, + serialized_end=2442, ) @@ -1201,8 +1246,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2369, - serialized_end=2432, + serialized_start=2444, + serialized_end=2507, ) @@ -1232,8 +1277,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2434, - serialized_end=2493, + serialized_start=2509, + serialized_end=2568, ) @@ -1277,8 +1322,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2495, - serialized_end=2578, + serialized_start=2570, + serialized_end=2653, ) @@ -1329,8 +1374,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2580, - serialized_end=2668, + serialized_start=2655, + serialized_end=2743, ) @@ -1367,8 +1412,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2670, - serialized_end=2746, + serialized_start=2745, + serialized_end=2821, ) @@ -1398,8 +1443,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2748, - serialized_end=2778, + serialized_start=2823, + serialized_end=2853, ) @@ -1443,8 +1488,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2780, - serialized_end=2832, + serialized_start=2855, + serialized_end=2907, ) @@ -1509,8 +1554,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2835, - serialized_end=3041, + serialized_start=2910, + serialized_end=3116, ) @@ -1540,8 +1585,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3043, - serialized_end=3089, + serialized_start=3118, + serialized_end=3164, ) @@ -1585,8 +1630,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3091, - serialized_end=3195, + serialized_start=3166, + serialized_end=3270, ) @@ -1616,8 +1661,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3197, - serialized_end=3248, + serialized_start=3272, + serialized_end=3323, ) @@ -1654,8 +1699,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3250, - serialized_end=3309, + serialized_start=3325, + serialized_end=3384, ) @@ -1685,8 +1730,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3311, - serialized_end=3342, + serialized_start=3386, + serialized_end=3417, ) @@ -1730,8 +1775,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3344, - serialized_end=3433, + serialized_start=3419, + serialized_end=3508, ) @@ -1768,8 +1813,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3435, - serialized_end=3476, + serialized_start=3510, + serialized_end=3551, ) @@ -1813,8 +1858,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3479, - serialized_end=3607, + serialized_start=3554, + serialized_end=3682, ) @@ -1872,8 +1917,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3609, - serialized_end=3732, + serialized_start=3684, + serialized_end=3807, ) @@ -1910,8 +1955,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3734, - serialized_end=3776, + serialized_start=3809, + serialized_end=3851, ) @@ -1941,8 +1986,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3778, - serialized_end=3803, + serialized_start=3853, + serialized_end=3878, ) @@ -1972,8 +2017,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3805, - serialized_end=3830, + serialized_start=3880, + serialized_end=3905, ) @@ -2017,8 +2062,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3832, - serialized_end=3905, + serialized_start=3907, + serialized_end=3980, ) @@ -2062,8 +2107,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3907, - serialized_end=3998, + serialized_start=3982, + serialized_end=4073, ) @@ -2100,8 +2145,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4000, - serialized_end=4053, + serialized_start=4075, + serialized_end=4128, ) @@ -2124,8 +2169,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4055, - serialized_end=4074, + serialized_start=4130, + serialized_end=4149, ) @@ -2162,8 +2207,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4076, - serialized_end=4140, + serialized_start=4151, + serialized_end=4215, ) @@ -2193,8 +2238,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4142, - serialized_end=4175, + serialized_start=4217, + serialized_end=4250, ) @@ -2224,8 +2269,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4177, - serialized_end=4232, + serialized_start=4252, + serialized_end=4307, ) @@ -2269,8 +2314,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4234, - serialized_end=4307, + serialized_start=4309, + serialized_end=4382, ) @@ -2300,14 +2345,15 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4309, - serialized_end=4359, + serialized_start=4384, + serialized_end=4434, ) _CELLCOLORBYFEATURESREQUEST.fields_by_name['annotation'].message_type = _ANNOTATION _CELLCOLORBYFEATURESREPLY.fields_by_name['legend'].message_type = _COLORLEGEND _CELLCOLORBYFEATURESREPLY.fields_by_name['error'].message_type = _ERRORREPLY _COORDINATESREQUEST.fields_by_name['annotation'].message_type = _ANNOTATION +_EMBEDDING.fields_by_name['trajectory'].message_type = _TRAJECTORY _CLUSTERING.fields_by_name['clusterMarkerMetrics'].message_type = _CLUSTERMARKERMETRIC _CLUSTERING.fields_by_name['clusters'].message_type = _CLUSTERANNOTATION _CELLMETADATA.fields_by_name['annotations'].message_type = _ANNOTATION @@ -2339,6 +2385,7 @@ DESCRIPTOR.message_types_by_name['CoordinatesRequest'] = _COORDINATESREQUEST DESCRIPTOR.message_types_by_name['CoordinatesReply'] = _COORDINATESREPLY DESCRIPTOR.message_types_by_name['Annotation'] = _ANNOTATION +DESCRIPTOR.message_types_by_name['Trajectory'] = _TRAJECTORY DESCRIPTOR.message_types_by_name['Embedding'] = _EMBEDDING DESCRIPTOR.message_types_by_name['ClusterMarkerMetric'] = _CLUSTERMARKERMETRIC DESCRIPTOR.message_types_by_name['ClusterAnnotation'] = _CLUSTERANNOTATION @@ -2466,6 +2513,13 @@ )) _sym_db.RegisterMessage(Annotation) +Trajectory = _reflection.GeneratedProtocolMessageType('Trajectory', (_message.Message,), dict( + DESCRIPTOR = _TRAJECTORY, + __module__ = 's_pb2' + # @@protoc_insertion_point(class_scope:scope.Trajectory) + )) +_sym_db.RegisterMessage(Trajectory) + Embedding = _reflection.GeneratedProtocolMessageType('Embedding', (_message.Message,), dict( DESCRIPTOR = _EMBEDDING, __module__ = 's_pb2' @@ -2761,8 +2815,8 @@ file=DESCRIPTOR, index=0, options=None, - serialized_start=4362, - serialized_end=5663, + serialized_start=4437, + serialized_end=5738, methods=[ _descriptor.MethodDescriptor( name='getCellColorByFeatures', diff --git a/src/proto/s.proto b/src/proto/s.proto index 271c8587..46464d39 100644 --- a/src/proto/s.proto +++ b/src/proto/s.proto @@ -122,9 +122,15 @@ message Annotation { repeated string values=2; } +message Trajectory { + repeated float x=1; + repeated float y=2; +} + message Embedding { int32 id=1; string name=2; + Trajectory trajectory=3; } message ClusterMarkerMetric { From 5b23c6c1c967a8a3a3423e2d8584641cba18180d Mon Sep 17 00:00:00 2001 From: mase5 Date: Fri, 6 Jul 2018 02:29:20 +0200 Subject: [PATCH 2/5] Update s.proto and its compiled file to handle branched trajectories. --- .../dataserver/modules/gserver/s_pb2.py | 283 ++++++++++++------ src/proto/s.proto | 15 +- 2 files changed, 205 insertions(+), 93 deletions(-) diff --git a/opt/scopeserver/dataserver/modules/gserver/s_pb2.py b/opt/scopeserver/dataserver/modules/gserver/s_pb2.py index 29a0f619..1c415b16 100644 --- a/opt/scopeserver/dataserver/modules/gserver/s_pb2.py +++ b/opt/scopeserver/dataserver/modules/gserver/s_pb2.py @@ -19,7 +19,7 @@ name='s.proto', package='scope', syntax='proto3', - serialized_pb=_b('\n\x07s.proto\x12\x05scope\"+\n\nErrorReply\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xfb\x01\n\x1a\x43\x65llColorByFeaturesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\x12\x11\n\tthreshold\x18\x06 \x03(\x02\x12\x18\n\x10scaleThresholded\x18\x07 \x01(\x08\x12%\n\nannotation\x18\x08 \x03(\x0b\x32\x11.scope.Annotation\x12\x0c\n\x04vmax\x18\t \x03(\x02\x12\r\n\x05logic\x18\n \x01(\t\"-\n\x0b\x43olorLegend\x12\x0e\n\x06values\x18\x01 \x03(\t\x12\x0e\n\x06\x63olors\x18\x02 \x03(\t\"\xdc\x01\n\x18\x43\x65llColorByFeaturesReply\x12\x1e\n\x16hasAddCompressionLayer\x18\x01 \x01(\x08\x12\x17\n\x0f\x63ompressedColor\x18\x02 \x01(\x0c\x12\r\n\x05\x63olor\x18\x03 \x03(\t\x12\x0c\n\x04vmax\x18\x04 \x03(\x02\x12\x0f\n\x07maxVmax\x18\x05 \x03(\x02\x12\x13\n\x0b\x63\x65llIndices\x18\x06 \x03(\x05\x12\"\n\x06legend\x18\x07 \x01(\x0b\x32\x12.scope.ColorLegend\x12 \n\x05\x65rror\x18\x08 \x01(\x0b\x32\x11.scope.ErrorReply\"\\\n\x1e\x43\x65llAUCValuesByFeaturesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\"-\n\x1c\x43\x65llAUCValuesByFeaturesReply\x12\r\n\x05value\x18\x01 \x03(\x02\"5\n\x0e\x46\x65\x61tureRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\r\n\x05query\x18\x02 \x01(\t\"\xcd\x01\n\x13\x43\x65llMetaDataRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x02 \x03(\x05\x12\x15\n\rselectedGenes\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\x12\x18\n\x10selectedRegulons\x18\x06 \x03(\t\x12\x13\n\x0b\x63lusterings\x18\x07 \x03(\x05\x12\x13\n\x0b\x61nnotations\x18\x08 \x03(\t\"P\n\x0c\x46\x65\x61tureReply\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x02 \x03(\t\x12\x1a\n\x12\x66\x65\x61tureDescription\x18\x03 \x03(\t\"w\n\x12\x43oordinatesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x15\n\rcoordinatesID\x18\x02 \x01(\x05\x12%\n\nannotation\x18\x03 \x03(\x0b\x32\x11.scope.Annotation\x12\r\n\x05logic\x18\x04 \x01(\t\"=\n\x10\x43oordinatesReply\x12\t\n\x01x\x18\x01 \x03(\x02\x12\t\n\x01y\x18\x02 \x03(\x02\x12\x13\n\x0b\x63\x65llIndices\x18\x03 \x03(\x05\"*\n\nAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06values\x18\x02 \x03(\t\"\"\n\nTrajectory\x12\t\n\x01x\x18\x01 \x03(\x02\x12\t\n\x01y\x18\x02 \x03(\x02\"L\n\tEmbedding\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12%\n\ntrajectory\x18\x03 \x01(\x0b\x32\x11.scope.Trajectory\"J\n\x13\x43lusterMarkerMetric\x12\x10\n\x08\x61\x63\x63\x65ssor\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"4\n\x11\x43lusterAnnotation\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\x9b\x01\n\nClustering\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05group\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x38\n\x14\x63lusterMarkerMetrics\x18\x04 \x03(\x0b\x32\x1a.scope.ClusterMarkerMetric\x12*\n\x08\x63lusters\x18\x05 \x03(\x0b\x32\x18.scope.ClusterAnnotation\"\x84\x01\n\x0c\x43\x65llMetaData\x12&\n\x0b\x61nnotations\x18\x01 \x03(\x0b\x32\x11.scope.Annotation\x12$\n\nembeddings\x18\x02 \x03(\x0b\x32\x10.scope.Embedding\x12&\n\x0b\x63lusterings\x18\x03 \x03(\x0b\x32\x11.scope.Clustering\"/\n\x0c\x41UCThreshold\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tthreshold\x18\x02 \x01(\x02\"r\n\x07Regulon\x12\r\n\x05genes\x18\x01 \x03(\t\x12+\n\x0e\x61utoThresholds\x18\x02 \x03(\x0b\x32\x13.scope.AUCThreshold\x12\x18\n\x10\x64\x65\x66\x61ultThreshold\x18\x03 \x01(\t\x12\x11\n\tmotifName\x18\x04 \x01(\t\"\x86\x01\n\x0c\x46ileMetaData\x12\x16\n\x0ehasRegulonsAUC\x18\x01 \x01(\x08\x12\x13\n\x0bhasGeneSets\x18\x02 \x01(\x08\x12\x16\n\x0ehasClusterings\x18\x03 \x01(\x08\x12\x1a\n\x12hasExtraEmbeddings\x18\x04 \x01(\x08\x12\x15\n\rhasGlobalMeta\x18\x05 \x01(\x08\"!\n\rFeatureValues\x12\x10\n\x08\x66\x65\x61tures\x18\x01 \x03(\x02\"&\n\x0f\x43\x65llAnnotations\x12\x13\n\x0b\x61nnotations\x18\x01 \x03(\t\" \n\x0c\x43\x65llClusters\x12\x10\n\x08\x63lusters\x18\x01 \x03(\x05\"\xc0\x01\n\x11\x43\x65llMetaDataReply\x12\'\n\nclusterIDs\x18\x01 \x03(\x0b\x32\x13.scope.CellClusters\x12,\n\x0egeneExpression\x18\x02 \x03(\x0b\x32\x14.scope.FeatureValues\x12\'\n\taucValues\x18\x03 \x03(\x0b\x32\x14.scope.FeatureValues\x12+\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x16.scope.CellAnnotations\"?\n\x16RegulonMetaDataRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07regulon\x18\x02 \x01(\t\";\n\x14RegulonMetaDataReply\x12#\n\x0bregulonMeta\x18\x01 \x01(\x0b\x32\x0e.scope.Regulon\"S\n\x12MarkerGenesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x14\n\x0c\x63lusteringID\x18\x02 \x01(\x05\x12\x11\n\tclusterID\x18\x03 \x01(\x05\"X\n\x11MarkerGenesMetric\x12\x10\n\x08\x61\x63\x63\x65ssor\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06values\x18\x04 \x03(\x02\"L\n\x10MarkerGenesReply\x12\r\n\x05genes\x18\x01 \x03(\t\x12)\n\x07metrics\x18\x02 \x03(\x0b\x32\x18.scope.MarkerGenesMetric\"\x1e\n\x0eMyLoomsRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"4\n\x0eLoomHeierarchy\x12\n\n\x02L1\x18\x01 \x01(\t\x12\n\n\x02L2\x18\x02 \x01(\t\x12\n\n\x02L3\x18\x03 \x01(\t\"\xce\x01\n\x06MyLoom\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x17\n\x0floomDisplayName\x18\x02 \x01(\t\x12\x10\n\x08loomSize\x18\x03 \x01(\x03\x12)\n\x0c\x63\x65llMetaData\x18\x04 \x01(\x0b\x32\x13.scope.CellMetaData\x12)\n\x0c\x66ileMetaData\x18\x05 \x01(\x0b\x32\x13.scope.FileMetaData\x12-\n\x0eloomHeierarchy\x18\x06 \x01(\x0b\x32\x15.scope.LoomHeierarchy\".\n\x0cMyLoomsReply\x12\x1e\n\x07myLooms\x18\x01 \x03(\x0b\x32\r.scope.MyLoom\"h\n\x1eTranslateLassoSelectionRequest\x12\x17\n\x0fsrcLoomFilePath\x18\x01 \x01(\t\x12\x18\n\x10\x64\x65stLoomFilePath\x18\x02 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x03 \x03(\x05\"3\n\x1cTranslateLassoSelectionReply\x12\x13\n\x0b\x63\x65llIndices\x18\x01 \x03(\x05\";\n\x0e\x43\x65llIDsRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x02 \x03(\x05\"\x1f\n\x0c\x43\x65llIDsReply\x12\x0f\n\x07\x63\x65llIds\x18\x01 \x03(\t\"Y\n\x18GeneSetEnrichmentRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x17\n\x0fgeneSetFilePath\x18\x02 \x01(\t\x12\x0e\n\x06method\x18\x03 \x01(\t\")\n\x08Progress\x12\r\n\x05value\x18\x01 \x01(\x02\x12\x0e\n\x06status\x18\x02 \x01(\t\"\x80\x01\n\x16GeneSetEnrichmentReply\x12!\n\x08progress\x18\x01 \x01(\x0b\x32\x0f.scope.Progress\x12\x0e\n\x06isDone\x18\x02 \x01(\x08\x12\x33\n\ncellValues\x18\x03 \x01(\x0b\x32\x1f.scope.CellColorByFeaturesReply\"{\n\x0bVmaxRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x03(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\"*\n\tVmaxReply\x12\x0c\n\x04vmax\x18\x01 \x03(\x02\x12\x0f\n\x07maxVmax\x18\x02 \x03(\x02\"\x19\n\x0bUUIDRequest\x12\n\n\x02ip\x18\x01 \x01(\t\"\x19\n\tUUIDReply\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"I\n\x18RemainingUUIDTimeRequest\x12\n\n\x02ip\x18\x01 \x01(\t\x12\x0c\n\x04UUID\x18\x02 \x01(\t\x12\x13\n\x0bmouseEvents\x18\x03 \x01(\x03\"[\n\x16RemainingUUIDTimeReply\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x15\n\rtimeRemaining\x18\x02 \x01(\x03\x12\x1c\n\x14sessionsLimitReached\x18\x03 \x01(\x08\"5\n\x13LoomUploadedRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x10\n\x08\x66ilename\x18\x02 \x01(\t\"\x13\n\x11LoomUploadedReply\"@\n\tMyGeneSet\x12\x17\n\x0fgeneSetFilePath\x18\x01 \x01(\t\x12\x1a\n\x12geneSetDisplayName\x18\x02 \x01(\t\"!\n\x11MyGeneSetsRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"7\n\x0fMyGeneSetsReply\x12$\n\nmyGeneSets\x18\x01 \x03(\x0b\x32\x10.scope.MyGeneSet\"I\n\x15\x44\x65leteUserFileRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x10\n\x08\x66ilePath\x18\x02 \x01(\t\x12\x10\n\x08\x66ileType\x18\x03 \x01(\t\"2\n\x13\x44\x65leteUserFileReply\x12\x1b\n\x13\x64\x65letedSuccessfully\x18\x01 \x01(\x08\x32\x95\n\n\x04Main\x12^\n\x16getCellColorByFeatures\x12!.scope.CellColorByFeaturesRequest\x1a\x1f.scope.CellColorByFeaturesReply\"\x00\x12j\n\x1agetCellAUCValuesByFeatures\x12%.scope.CellAUCValuesByFeaturesRequest\x1a#.scope.CellAUCValuesByFeaturesReply\"\x00\x12I\n\x0fgetCellMetaData\x12\x1a.scope.CellMetaDataRequest\x1a\x18.scope.CellMetaDataReply\"\x00\x12;\n\x0bgetFeatures\x12\x15.scope.FeatureRequest\x1a\x13.scope.FeatureReply\"\x00\x12\x46\n\x0egetCoordinates\x12\x19.scope.CoordinatesRequest\x1a\x17.scope.CoordinatesReply\"\x00\x12R\n\x12getRegulonMetaData\x12\x1d.scope.RegulonMetaDataRequest\x1a\x1b.scope.RegulonMetaDataReply\"\x00\x12\x46\n\x0egetMarkerGenes\x12\x19.scope.MarkerGenesRequest\x1a\x17.scope.MarkerGenesReply\"\x00\x12:\n\ngetMyLooms\x12\x15.scope.MyLoomsRequest\x1a\x13.scope.MyLoomsReply\"\x00\x12g\n\x17translateLassoSelection\x12%.scope.TranslateLassoSelectionRequest\x1a#.scope.TranslateLassoSelectionReply\"\x00\x12:\n\ngetCellIDs\x12\x15.scope.CellIDsRequest\x1a\x13.scope.CellIDsReply\"\x00\x12Y\n\x13\x64oGeneSetEnrichment\x12\x1f.scope.GeneSetEnrichmentRequest\x1a\x1d.scope.GeneSetEnrichmentReply\"\x00\x30\x01\x12\x31\n\x07getVmax\x12\x12.scope.VmaxRequest\x1a\x10.scope.VmaxReply\"\x00\x12\x31\n\x07getUUID\x12\x12.scope.UUIDRequest\x1a\x10.scope.UUIDReply\"\x00\x12X\n\x14getRemainingUUIDTime\x12\x1f.scope.RemainingUUIDTimeRequest\x1a\x1d.scope.RemainingUUIDTimeReply\"\x00\x12\x46\n\x0cloomUploaded\x12\x1a.scope.LoomUploadedRequest\x1a\x18.scope.LoomUploadedReply\"\x00\x12\x43\n\rgetMyGeneSets\x12\x18.scope.MyGeneSetsRequest\x1a\x16.scope.MyGeneSetsReply\"\x00\x12L\n\x0e\x64\x65leteUserFile\x12\x1c.scope.DeleteUserFileRequest\x1a\x1a.scope.DeleteUserFileReply\"\x00\x62\x06proto3') + serialized_pb=_b('\n\x07s.proto\x12\x05scope\"+\n\nErrorReply\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xfb\x01\n\x1a\x43\x65llColorByFeaturesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\x12\x11\n\tthreshold\x18\x06 \x03(\x02\x12\x18\n\x10scaleThresholded\x18\x07 \x01(\x08\x12%\n\nannotation\x18\x08 \x03(\x0b\x32\x11.scope.Annotation\x12\x0c\n\x04vmax\x18\t \x03(\x02\x12\r\n\x05logic\x18\n \x01(\t\"-\n\x0b\x43olorLegend\x12\x0e\n\x06values\x18\x01 \x03(\t\x12\x0e\n\x06\x63olors\x18\x02 \x03(\t\"\xdc\x01\n\x18\x43\x65llColorByFeaturesReply\x12\x1e\n\x16hasAddCompressionLayer\x18\x01 \x01(\x08\x12\x17\n\x0f\x63ompressedColor\x18\x02 \x01(\x0c\x12\r\n\x05\x63olor\x18\x03 \x03(\t\x12\x0c\n\x04vmax\x18\x04 \x03(\x02\x12\x0f\n\x07maxVmax\x18\x05 \x03(\x02\x12\x13\n\x0b\x63\x65llIndices\x18\x06 \x03(\x05\x12\"\n\x06legend\x18\x07 \x01(\x0b\x32\x12.scope.ColorLegend\x12 \n\x05\x65rror\x18\x08 \x01(\x0b\x32\x11.scope.ErrorReply\"\\\n\x1e\x43\x65llAUCValuesByFeaturesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\"-\n\x1c\x43\x65llAUCValuesByFeaturesReply\x12\r\n\x05value\x18\x01 \x03(\x02\"5\n\x0e\x46\x65\x61tureRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\r\n\x05query\x18\x02 \x01(\t\"\xcd\x01\n\x13\x43\x65llMetaDataRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x02 \x03(\x05\x12\x15\n\rselectedGenes\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\x12\x18\n\x10selectedRegulons\x18\x06 \x03(\t\x12\x13\n\x0b\x63lusterings\x18\x07 \x03(\x05\x12\x13\n\x0b\x61nnotations\x18\x08 \x03(\t\"P\n\x0c\x46\x65\x61tureReply\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x02 \x03(\t\x12\x1a\n\x12\x66\x65\x61tureDescription\x18\x03 \x03(\t\"w\n\x12\x43oordinatesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x15\n\rcoordinatesID\x18\x02 \x01(\x05\x12%\n\nannotation\x18\x03 \x03(\x0b\x32\x11.scope.Annotation\x12\r\n\x05logic\x18\x04 \x01(\t\"=\n\x10\x43oordinatesReply\x12\t\n\x01x\x18\x01 \x03(\x02\x12\t\n\x01y\x18\x02 \x03(\x02\x12\x13\n\x0b\x63\x65llIndices\x18\x03 \x03(\x05\"*\n\nAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06values\x18\x02 \x03(\t\"\"\n\nCoordinate\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\"&\n\x04\x45\x64ge\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x0e\n\x06target\x18\x02 \x01(\t\"_\n\nTrajectory\x12\r\n\x05nodes\x18\x01 \x03(\t\x12\x1a\n\x05\x65\x64ges\x18\x02 \x03(\x0b\x32\x0b.scope.Edge\x12&\n\x0b\x63oordinates\x18\x03 \x03(\x0b\x32\x11.scope.Coordinate\"L\n\tEmbedding\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12%\n\ntrajectory\x18\x03 \x01(\x0b\x32\x11.scope.Trajectory\"J\n\x13\x43lusterMarkerMetric\x12\x10\n\x08\x61\x63\x63\x65ssor\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"4\n\x11\x43lusterAnnotation\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\x9b\x01\n\nClustering\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05group\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x38\n\x14\x63lusterMarkerMetrics\x18\x04 \x03(\x0b\x32\x1a.scope.ClusterMarkerMetric\x12*\n\x08\x63lusters\x18\x05 \x03(\x0b\x32\x18.scope.ClusterAnnotation\"\x84\x01\n\x0c\x43\x65llMetaData\x12&\n\x0b\x61nnotations\x18\x01 \x03(\x0b\x32\x11.scope.Annotation\x12$\n\nembeddings\x18\x02 \x03(\x0b\x32\x10.scope.Embedding\x12&\n\x0b\x63lusterings\x18\x03 \x03(\x0b\x32\x11.scope.Clustering\"/\n\x0c\x41UCThreshold\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tthreshold\x18\x02 \x01(\x02\"r\n\x07Regulon\x12\r\n\x05genes\x18\x01 \x03(\t\x12+\n\x0e\x61utoThresholds\x18\x02 \x03(\x0b\x32\x13.scope.AUCThreshold\x12\x18\n\x10\x64\x65\x66\x61ultThreshold\x18\x03 \x01(\t\x12\x11\n\tmotifName\x18\x04 \x01(\t\"\x86\x01\n\x0c\x46ileMetaData\x12\x16\n\x0ehasRegulonsAUC\x18\x01 \x01(\x08\x12\x13\n\x0bhasGeneSets\x18\x02 \x01(\x08\x12\x16\n\x0ehasClusterings\x18\x03 \x01(\x08\x12\x1a\n\x12hasExtraEmbeddings\x18\x04 \x01(\x08\x12\x15\n\rhasGlobalMeta\x18\x05 \x01(\x08\"!\n\rFeatureValues\x12\x10\n\x08\x66\x65\x61tures\x18\x01 \x03(\x02\"&\n\x0f\x43\x65llAnnotations\x12\x13\n\x0b\x61nnotations\x18\x01 \x03(\t\" \n\x0c\x43\x65llClusters\x12\x10\n\x08\x63lusters\x18\x01 \x03(\x05\"\xc0\x01\n\x11\x43\x65llMetaDataReply\x12\'\n\nclusterIDs\x18\x01 \x03(\x0b\x32\x13.scope.CellClusters\x12,\n\x0egeneExpression\x18\x02 \x03(\x0b\x32\x14.scope.FeatureValues\x12\'\n\taucValues\x18\x03 \x03(\x0b\x32\x14.scope.FeatureValues\x12+\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x16.scope.CellAnnotations\"?\n\x16RegulonMetaDataRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x0f\n\x07regulon\x18\x02 \x01(\t\";\n\x14RegulonMetaDataReply\x12#\n\x0bregulonMeta\x18\x01 \x01(\x0b\x32\x0e.scope.Regulon\"S\n\x12MarkerGenesRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x14\n\x0c\x63lusteringID\x18\x02 \x01(\x05\x12\x11\n\tclusterID\x18\x03 \x01(\x05\"X\n\x11MarkerGenesMetric\x12\x10\n\x08\x61\x63\x63\x65ssor\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06values\x18\x04 \x03(\x02\"L\n\x10MarkerGenesReply\x12\r\n\x05genes\x18\x01 \x03(\t\x12)\n\x07metrics\x18\x02 \x03(\x0b\x32\x18.scope.MarkerGenesMetric\"\x1e\n\x0eMyLoomsRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"4\n\x0eLoomHeierarchy\x12\n\n\x02L1\x18\x01 \x01(\t\x12\n\n\x02L2\x18\x02 \x01(\t\x12\n\n\x02L3\x18\x03 \x01(\t\"\xce\x01\n\x06MyLoom\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x17\n\x0floomDisplayName\x18\x02 \x01(\t\x12\x10\n\x08loomSize\x18\x03 \x01(\x03\x12)\n\x0c\x63\x65llMetaData\x18\x04 \x01(\x0b\x32\x13.scope.CellMetaData\x12)\n\x0c\x66ileMetaData\x18\x05 \x01(\x0b\x32\x13.scope.FileMetaData\x12-\n\x0eloomHeierarchy\x18\x06 \x01(\x0b\x32\x15.scope.LoomHeierarchy\".\n\x0cMyLoomsReply\x12\x1e\n\x07myLooms\x18\x01 \x03(\x0b\x32\r.scope.MyLoom\"h\n\x1eTranslateLassoSelectionRequest\x12\x17\n\x0fsrcLoomFilePath\x18\x01 \x01(\t\x12\x18\n\x10\x64\x65stLoomFilePath\x18\x02 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x03 \x03(\x05\"3\n\x1cTranslateLassoSelectionReply\x12\x13\n\x0b\x63\x65llIndices\x18\x01 \x03(\x05\";\n\x0e\x43\x65llIDsRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65llIndices\x18\x02 \x03(\x05\"\x1f\n\x0c\x43\x65llIDsReply\x12\x0f\n\x07\x63\x65llIds\x18\x01 \x03(\t\"Y\n\x18GeneSetEnrichmentRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x01(\t\x12\x17\n\x0fgeneSetFilePath\x18\x02 \x01(\t\x12\x0e\n\x06method\x18\x03 \x01(\t\")\n\x08Progress\x12\r\n\x05value\x18\x01 \x01(\x02\x12\x0e\n\x06status\x18\x02 \x01(\t\"\x80\x01\n\x16GeneSetEnrichmentReply\x12!\n\x08progress\x18\x01 \x01(\x0b\x32\x0f.scope.Progress\x12\x0e\n\x06isDone\x18\x02 \x01(\x08\x12\x33\n\ncellValues\x18\x03 \x01(\x0b\x32\x1f.scope.CellColorByFeaturesReply\"{\n\x0bVmaxRequest\x12\x14\n\x0cloomFilePath\x18\x01 \x03(\t\x12\x0f\n\x07\x66\x65\x61ture\x18\x02 \x03(\t\x12\x13\n\x0b\x66\x65\x61tureType\x18\x03 \x03(\t\x12\x17\n\x0fhasLogTransform\x18\x04 \x01(\x08\x12\x17\n\x0fhasCpmTransform\x18\x05 \x01(\x08\"*\n\tVmaxReply\x12\x0c\n\x04vmax\x18\x01 \x03(\x02\x12\x0f\n\x07maxVmax\x18\x02 \x03(\x02\"\x19\n\x0bUUIDRequest\x12\n\n\x02ip\x18\x01 \x01(\t\"\x19\n\tUUIDReply\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"I\n\x18RemainingUUIDTimeRequest\x12\n\n\x02ip\x18\x01 \x01(\t\x12\x0c\n\x04UUID\x18\x02 \x01(\t\x12\x13\n\x0bmouseEvents\x18\x03 \x01(\x03\"[\n\x16RemainingUUIDTimeReply\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x15\n\rtimeRemaining\x18\x02 \x01(\x03\x12\x1c\n\x14sessionsLimitReached\x18\x03 \x01(\x08\"5\n\x13LoomUploadedRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x10\n\x08\x66ilename\x18\x02 \x01(\t\"\x13\n\x11LoomUploadedReply\"@\n\tMyGeneSet\x12\x17\n\x0fgeneSetFilePath\x18\x01 \x01(\t\x12\x1a\n\x12geneSetDisplayName\x18\x02 \x01(\t\"!\n\x11MyGeneSetsRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\"7\n\x0fMyGeneSetsReply\x12$\n\nmyGeneSets\x18\x01 \x03(\x0b\x32\x10.scope.MyGeneSet\"I\n\x15\x44\x65leteUserFileRequest\x12\x0c\n\x04UUID\x18\x01 \x01(\t\x12\x10\n\x08\x66ilePath\x18\x02 \x01(\t\x12\x10\n\x08\x66ileType\x18\x03 \x01(\t\"2\n\x13\x44\x65leteUserFileReply\x12\x1b\n\x13\x64\x65letedSuccessfully\x18\x01 \x01(\x08\x32\x95\n\n\x04Main\x12^\n\x16getCellColorByFeatures\x12!.scope.CellColorByFeaturesRequest\x1a\x1f.scope.CellColorByFeaturesReply\"\x00\x12j\n\x1agetCellAUCValuesByFeatures\x12%.scope.CellAUCValuesByFeaturesRequest\x1a#.scope.CellAUCValuesByFeaturesReply\"\x00\x12I\n\x0fgetCellMetaData\x12\x1a.scope.CellMetaDataRequest\x1a\x18.scope.CellMetaDataReply\"\x00\x12;\n\x0bgetFeatures\x12\x15.scope.FeatureRequest\x1a\x13.scope.FeatureReply\"\x00\x12\x46\n\x0egetCoordinates\x12\x19.scope.CoordinatesRequest\x1a\x17.scope.CoordinatesReply\"\x00\x12R\n\x12getRegulonMetaData\x12\x1d.scope.RegulonMetaDataRequest\x1a\x1b.scope.RegulonMetaDataReply\"\x00\x12\x46\n\x0egetMarkerGenes\x12\x19.scope.MarkerGenesRequest\x1a\x17.scope.MarkerGenesReply\"\x00\x12:\n\ngetMyLooms\x12\x15.scope.MyLoomsRequest\x1a\x13.scope.MyLoomsReply\"\x00\x12g\n\x17translateLassoSelection\x12%.scope.TranslateLassoSelectionRequest\x1a#.scope.TranslateLassoSelectionReply\"\x00\x12:\n\ngetCellIDs\x12\x15.scope.CellIDsRequest\x1a\x13.scope.CellIDsReply\"\x00\x12Y\n\x13\x64oGeneSetEnrichment\x12\x1f.scope.GeneSetEnrichmentRequest\x1a\x1d.scope.GeneSetEnrichmentReply\"\x00\x30\x01\x12\x31\n\x07getVmax\x12\x12.scope.VmaxRequest\x1a\x10.scope.VmaxReply\"\x00\x12\x31\n\x07getUUID\x12\x12.scope.UUIDRequest\x1a\x10.scope.UUIDReply\"\x00\x12X\n\x14getRemainingUUIDTime\x12\x1f.scope.RemainingUUIDTimeRequest\x1a\x1d.scope.RemainingUUIDTimeReply\"\x00\x12\x46\n\x0cloomUploaded\x12\x1a.scope.LoomUploadedRequest\x1a\x18.scope.LoomUploadedReply\"\x00\x12\x43\n\rgetMyGeneSets\x12\x18.scope.MyGeneSetsRequest\x1a\x16.scope.MyGeneSetsReply\"\x00\x12L\n\x0e\x64\x65leteUserFile\x12\x1c.scope.DeleteUserFileRequest\x1a\x1a.scope.DeleteUserFileReply\"\x00\x62\x06proto3') ) @@ -649,6 +649,82 @@ ) +_COORDINATE = _descriptor.Descriptor( + name='Coordinate', + full_name='scope.Coordinate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='scope.Coordinate.x', index=0, + number=1, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='y', full_name='scope.Coordinate.y', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1301, + serialized_end=1335, +) + + +_EDGE = _descriptor.Descriptor( + name='Edge', + full_name='scope.Edge', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='source', full_name='scope.Edge.source', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='target', full_name='scope.Edge.target', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1337, + serialized_end=1375, +) + + _TRAJECTORY = _descriptor.Descriptor( name='Trajectory', full_name='scope.Trajectory', @@ -657,15 +733,22 @@ containing_type=None, fields=[ _descriptor.FieldDescriptor( - name='x', full_name='scope.Trajectory.x', index=0, - number=1, type=2, cpp_type=6, label=3, + name='nodes', full_name='scope.Trajectory.nodes', index=0, + number=1, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='y', full_name='scope.Trajectory.y', index=1, - number=2, type=2, cpp_type=6, label=3, + name='edges', full_name='scope.Trajectory.edges', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='coordinates', full_name='scope.Trajectory.coordinates', index=2, + number=3, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, @@ -682,8 +765,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1301, - serialized_end=1335, + serialized_start=1377, + serialized_end=1472, ) @@ -727,8 +810,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1337, - serialized_end=1413, + serialized_start=1474, + serialized_end=1550, ) @@ -772,8 +855,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1415, - serialized_end=1489, + serialized_start=1552, + serialized_end=1626, ) @@ -810,8 +893,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1491, - serialized_end=1543, + serialized_start=1628, + serialized_end=1680, ) @@ -869,8 +952,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1546, - serialized_end=1701, + serialized_start=1683, + serialized_end=1838, ) @@ -914,8 +997,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1704, - serialized_end=1836, + serialized_start=1841, + serialized_end=1973, ) @@ -952,8 +1035,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1838, - serialized_end=1885, + serialized_start=1975, + serialized_end=2022, ) @@ -1004,8 +1087,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1887, - serialized_end=2001, + serialized_start=2024, + serialized_end=2138, ) @@ -1063,8 +1146,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2004, - serialized_end=2138, + serialized_start=2141, + serialized_end=2275, ) @@ -1094,8 +1177,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2140, - serialized_end=2173, + serialized_start=2277, + serialized_end=2310, ) @@ -1125,8 +1208,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2175, - serialized_end=2213, + serialized_start=2312, + serialized_end=2350, ) @@ -1156,8 +1239,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2215, - serialized_end=2247, + serialized_start=2352, + serialized_end=2384, ) @@ -1208,8 +1291,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2250, - serialized_end=2442, + serialized_start=2387, + serialized_end=2579, ) @@ -1246,8 +1329,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2444, - serialized_end=2507, + serialized_start=2581, + serialized_end=2644, ) @@ -1277,8 +1360,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2509, - serialized_end=2568, + serialized_start=2646, + serialized_end=2705, ) @@ -1322,8 +1405,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2570, - serialized_end=2653, + serialized_start=2707, + serialized_end=2790, ) @@ -1374,8 +1457,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2655, - serialized_end=2743, + serialized_start=2792, + serialized_end=2880, ) @@ -1412,8 +1495,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2745, - serialized_end=2821, + serialized_start=2882, + serialized_end=2958, ) @@ -1443,8 +1526,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2823, - serialized_end=2853, + serialized_start=2960, + serialized_end=2990, ) @@ -1488,8 +1571,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2855, - serialized_end=2907, + serialized_start=2992, + serialized_end=3044, ) @@ -1554,8 +1637,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2910, - serialized_end=3116, + serialized_start=3047, + serialized_end=3253, ) @@ -1585,8 +1668,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3118, - serialized_end=3164, + serialized_start=3255, + serialized_end=3301, ) @@ -1630,8 +1713,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3166, - serialized_end=3270, + serialized_start=3303, + serialized_end=3407, ) @@ -1661,8 +1744,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3272, - serialized_end=3323, + serialized_start=3409, + serialized_end=3460, ) @@ -1699,8 +1782,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3325, - serialized_end=3384, + serialized_start=3462, + serialized_end=3521, ) @@ -1730,8 +1813,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3386, - serialized_end=3417, + serialized_start=3523, + serialized_end=3554, ) @@ -1775,8 +1858,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3419, - serialized_end=3508, + serialized_start=3556, + serialized_end=3645, ) @@ -1813,8 +1896,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3510, - serialized_end=3551, + serialized_start=3647, + serialized_end=3688, ) @@ -1858,8 +1941,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3554, - serialized_end=3682, + serialized_start=3691, + serialized_end=3819, ) @@ -1917,8 +2000,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3684, - serialized_end=3807, + serialized_start=3821, + serialized_end=3944, ) @@ -1955,8 +2038,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3809, - serialized_end=3851, + serialized_start=3946, + serialized_end=3988, ) @@ -1986,8 +2069,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3853, - serialized_end=3878, + serialized_start=3990, + serialized_end=4015, ) @@ -2017,8 +2100,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3880, - serialized_end=3905, + serialized_start=4017, + serialized_end=4042, ) @@ -2062,8 +2145,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3907, - serialized_end=3980, + serialized_start=4044, + serialized_end=4117, ) @@ -2107,8 +2190,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3982, - serialized_end=4073, + serialized_start=4119, + serialized_end=4210, ) @@ -2145,8 +2228,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4075, - serialized_end=4128, + serialized_start=4212, + serialized_end=4265, ) @@ -2169,8 +2252,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4130, - serialized_end=4149, + serialized_start=4267, + serialized_end=4286, ) @@ -2207,8 +2290,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4151, - serialized_end=4215, + serialized_start=4288, + serialized_end=4352, ) @@ -2238,8 +2321,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4217, - serialized_end=4250, + serialized_start=4354, + serialized_end=4387, ) @@ -2269,8 +2352,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4252, - serialized_end=4307, + serialized_start=4389, + serialized_end=4444, ) @@ -2314,8 +2397,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4309, - serialized_end=4382, + serialized_start=4446, + serialized_end=4519, ) @@ -2345,14 +2428,16 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4384, - serialized_end=4434, + serialized_start=4521, + serialized_end=4571, ) _CELLCOLORBYFEATURESREQUEST.fields_by_name['annotation'].message_type = _ANNOTATION _CELLCOLORBYFEATURESREPLY.fields_by_name['legend'].message_type = _COLORLEGEND _CELLCOLORBYFEATURESREPLY.fields_by_name['error'].message_type = _ERRORREPLY _COORDINATESREQUEST.fields_by_name['annotation'].message_type = _ANNOTATION +_TRAJECTORY.fields_by_name['edges'].message_type = _EDGE +_TRAJECTORY.fields_by_name['coordinates'].message_type = _COORDINATE _EMBEDDING.fields_by_name['trajectory'].message_type = _TRAJECTORY _CLUSTERING.fields_by_name['clusterMarkerMetrics'].message_type = _CLUSTERMARKERMETRIC _CLUSTERING.fields_by_name['clusters'].message_type = _CLUSTERANNOTATION @@ -2385,6 +2470,8 @@ DESCRIPTOR.message_types_by_name['CoordinatesRequest'] = _COORDINATESREQUEST DESCRIPTOR.message_types_by_name['CoordinatesReply'] = _COORDINATESREPLY DESCRIPTOR.message_types_by_name['Annotation'] = _ANNOTATION +DESCRIPTOR.message_types_by_name['Coordinate'] = _COORDINATE +DESCRIPTOR.message_types_by_name['Edge'] = _EDGE DESCRIPTOR.message_types_by_name['Trajectory'] = _TRAJECTORY DESCRIPTOR.message_types_by_name['Embedding'] = _EMBEDDING DESCRIPTOR.message_types_by_name['ClusterMarkerMetric'] = _CLUSTERMARKERMETRIC @@ -2513,6 +2600,20 @@ )) _sym_db.RegisterMessage(Annotation) +Coordinate = _reflection.GeneratedProtocolMessageType('Coordinate', (_message.Message,), dict( + DESCRIPTOR = _COORDINATE, + __module__ = 's_pb2' + # @@protoc_insertion_point(class_scope:scope.Coordinate) + )) +_sym_db.RegisterMessage(Coordinate) + +Edge = _reflection.GeneratedProtocolMessageType('Edge', (_message.Message,), dict( + DESCRIPTOR = _EDGE, + __module__ = 's_pb2' + # @@protoc_insertion_point(class_scope:scope.Edge) + )) +_sym_db.RegisterMessage(Edge) + Trajectory = _reflection.GeneratedProtocolMessageType('Trajectory', (_message.Message,), dict( DESCRIPTOR = _TRAJECTORY, __module__ = 's_pb2' @@ -2815,8 +2916,8 @@ file=DESCRIPTOR, index=0, options=None, - serialized_start=4437, - serialized_end=5738, + serialized_start=4574, + serialized_end=5875, methods=[ _descriptor.MethodDescriptor( name='getCellColorByFeatures', diff --git a/src/proto/s.proto b/src/proto/s.proto index 46464d39..582c57bb 100644 --- a/src/proto/s.proto +++ b/src/proto/s.proto @@ -122,9 +122,20 @@ message Annotation { repeated string values=2; } +message Coordinate { + float x=1; + float y=2; +} + +message Edge { + string source=1; + string target=2; +} + message Trajectory { - repeated float x=1; - repeated float y=2; + repeated string nodes=1; + repeated Edge edges=2; + repeated Coordinate coordinates=3; } message Embedding { From 18f47755afa1a94e3a74c89b50203e5c48e5eb25 Mon Sep 17 00:00:00 2001 From: mase5 Date: Fri, 6 Jul 2018 02:37:53 +0200 Subject: [PATCH 3/5] Implement display of trajectory data in the Viewer. --- src/components/common/API.jsx | 12 +++ src/components/common/Viewer.jsx | 135 +++++++++++++++++++++++-------- 2 files changed, 115 insertions(+), 32 deletions(-) diff --git a/src/components/common/API.jsx b/src/components/common/API.jsx index 0d941d59..dd2d165d 100644 --- a/src/components/common/API.jsx +++ b/src/components/common/API.jsx @@ -243,6 +243,14 @@ class API { return this.loomFiles[this.activeLooms[0]]; } + getActiveLoomMetadataEmbeddings() { + return this.loomFiles[this.activeLooms[0]].cellMetaData.embeddings; + } + + getActiveLoomMetaDataEmbedding() { + return this.getActiveLoomMetadataEmbeddings().filter(x => x.id == this.getActiveCoordinates())[0] + } + onActiveLoomChange(listener) { this.activeLoomChangeListeners.push(listener); } @@ -258,6 +266,10 @@ class API { return this.activeCoordinates; } + getActiveCoordinatesTrajectory() { + return this.getActiveLoomMetaDataEmbedding().trajectory + } + queryLoomFiles(uuid, callback) { let query = { UUID: uuid diff --git a/src/components/common/Viewer.jsx b/src/components/common/Viewer.jsx index 840546f5..345b4219 100644 --- a/src/components/common/Viewer.jsx +++ b/src/components/common/Viewer.jsx @@ -11,6 +11,12 @@ import Popup from 'react-popup' const DEFAULT_POINT_COLOR = 'A6A6A6'; const VIEWER_MARGIN = 5; +const EMPTY_TRAJECTORY = { + nodes: [], + edges: [], + coordinates: [] +} + export default class Viewer extends Component { constructor(props) { @@ -21,6 +27,7 @@ export default class Viewer extends Component { x: [], y: [] }, + trajectory : EMPTY_TRAJECTORY, colors: props.colors || [], lassoPoints: [], lassoSelections: BackendAPI.getViewerSelections(), @@ -138,9 +145,8 @@ export default class Viewer extends Component { } */ this.onResize(); - if (this.props.loomFile != nextProps.loomFile || this.props.activeCoordinates != nextProps.activeCoordinates || this.props.superposition != nextProps.superposition || - (JSON.stringify(nextProps.activeAnnotations) != JSON.stringify(this.state.activeAnnotations)) ) { + (JSON.stringify(nextProps.activeAnnotations) != JSON.stringify(this.state.activeAnnotations)) ) { this.setState({loading: true}); if (DEBUG) console.log(nextProps.name, 'changing points'); this.getPoints(nextProps.loomFile, nextProps.activeCoordinates, nextProps.activeAnnotations, nextProps.superposition, () => { @@ -204,7 +210,7 @@ export default class Viewer extends Component { this.forceUpdate(); this.renderer.resize(this.w, this.h); this.renderer.reset(); - this.container.removeChildren(); + this.mainLayer.removeChildren(); this.setScalingFactor(); this.initializeDataPoints(); this.updateDataPoints(); @@ -219,12 +225,9 @@ export default class Viewer extends Component { this.stage.width = this.w; this.stage.height = this.h; this.renderer.render(this.stage); - this.container = new PIXI.particles.ParticleContainer(this.maxn, [false, true, false, false, true]); -// this.container.blendMode = PIXI.BLEND_MODES.NORMAL; - this.container.interactive = true - this.bcr = document.getElementById("viewer"+this.props.name).getBoundingClientRect() - this.stage.addChild(this.container); + this.addMainLayer(); this.addLassoLayer(); + this.addTrajectoryLayer(); this.zoomBehaviour = d3.zoom().scaleExtent([-1, 10]).on("zoom", this.zoom.bind(this)); this.zoomSelection.call(this.zoomBehaviour); var ticker = PIXI.ticker.shared; @@ -232,14 +235,24 @@ export default class Viewer extends Component { ticker.stop(); } + addMainLayer() { + this.mainLayer = new PIXI.particles.ParticleContainer(this.maxn, [false, true, false, false, true]); +// this.mainLayer.blendMode = PIXI.BLEND_MODES.NORMAL; + this.mainLayer.interactive = true + this.bcr = document.getElementById("viewer"+this.props.name).getBoundingClientRect() + this.stage.addChild(this.mainLayer); + } + destroyGraphics() { if (DEBUG) console.log("Destroying Viewer ", this.props.name); - this.container.removeChildren(); - this.container.destroy(); + this.mainLayer.removeChildren(); + this.mainLayer.destroy(); this.lassoLayer.removeChildren(); this.lassoLayer.destroy(); this.selectionsLayer.removeChildren(); this.selectionsLayer.destroy(); + this.trajectoryLayer.removeChildren(); + this.trajectoryLayer.destroy(); this.renderer.destroy(); this.stage.destroy(); } @@ -264,11 +277,15 @@ export default class Viewer extends Component { return s; } + scalePoint(point, scale) { + return { x: point.x * scale + this.renderer.width / 2 + , y: point.y * scale + this.renderer.height / 2 } + } + getPointAtLocation(s, x, y) { - const cx = x * 15 + this.renderer.width / 2; - const cy = y * 15 + this.renderer.height / 2; - s.position.x = cx; - s.position.y = cy; + const scaledCoordinates = this.scalePoint({ x: x, y: y }, 15) + s.position.x = scaledCoordinates.x; + s.position.y = scaledCoordinates.y; s.blendMode = PIXI.BLEND_MODES.SCREEN; s._originalData = {x: x, y: y}; return s; @@ -280,8 +297,8 @@ export default class Viewer extends Component { updatePointColor(i, x, y, c) { let point = this.getTexturedColorPoint(x, y, c) - this.container.removeChildAt(i); - this.container.addChildAt(point, i); + this.mainLayer.removeChildAt(i); + this.mainLayer.addChildAt(point, i); } isLassoActive() { @@ -360,12 +377,12 @@ export default class Viewer extends Component { } getPointsInLasso() { - let pts = this.container.children, + let pts = this.mainLayer.children, lassoPoints = []; if (pts.length < 2) return; for (let i = 0; i < pts.length; ++i) { // Calculate the position of the point in the lasso reference - let pointPosRelToLassoRef = this.lassoLayer.toLocal(pts[i], this.container, null, true) + let pointPosRelToLassoRef = this.lassoLayer.toLocal(pts[i], this.mainLayer, null, true) if(this.lasso.containsPoint(pointPosRelToLassoRef)) { let idx = pts[i]._originalData.idx; lassoPoints.push(idx); @@ -414,7 +431,7 @@ export default class Viewer extends Component { highlightPointsInLasso(lS) { this.startBenchmark("highlightPointsInLasso") - let pts = this.container.children; + let pts = this.mainLayer.children; pts.map(p => { if (lS.points.indexOf(p._originalData.idx) == -1) return; let point = this.getTexturedColorPoint(p._originalData.x, p._originalData.y, lS.color); @@ -432,6 +449,40 @@ export default class Viewer extends Component { return color; } + addTrajectoryLayer() { + this.trajectoryLayer = new PIXI.Container(); +// this.trajectoryLayer.blendMode = PIXI.BLEND_MODES.ADD; + this.trajectoryLayer.width = this.w; + this.trajectoryLayer.height = this.h; + this.stage.addChild(this.trajectoryLayer); + } + + drawTrajectory() { + console.log("DRAW TRAJECTORY....") + this.trajectoryLayer.removeChildren(); + + let k = this.zoomTransform.k; + + if(this.state.trajectory.nodes.length > 0) { + let trajectory = new PIXI.Graphics(); + this.trajectoryLayer.addChild(trajectory); + + trajectory.lineStyle(5, 0x000000, 0.5); + for(let i=0; i { @@ -440,10 +491,12 @@ export default class Viewer extends Component { dx = (t1.x - t0.x) / (this.renderer.width / 2), dy = (t1.y - t0.y) / (this.renderer.height / 2); - this.container.position.x = t1.x; - this.container.position.y = t1.y; + this.mainLayer.position.x = t1.x; + this.mainLayer.position.y = t1.y; this.selectionsLayer.position.x = t1.x; this.selectionsLayer.position.y = t1.y; + this.trajectoryLayer.position.x = t1.x; + this.trajectoryLayer.position.y = t1.y; this.zoomTransform = {x: t1.x, y: t1.y, k: t1.k}; if (t0.k != t1.k) { @@ -580,20 +633,36 @@ export default class Viewer extends Component { annotation: queryAnnotations, logic: superposition, }; + this.startBenchmark("getCoordinates") if (DEBUG) console.log(this.props.name, 'getCoordinates', query); BackendAPI.getConnection().then((gbc) => { gbc.services.scope.Main.getCoordinates(query, (err, response) => { // Update the coordinates and remove all previous data points if (DEBUG) console.log(this.props.name, 'getCoordinates', response); - this.container.removeChildren(); + this.mainLayer.removeChildren(); if (response) { let coord = { idx: response.cellIndices, x: response.x, y: response.y } - this.setState({ coord }); + // If current coordinates has a trajectory set it + let trajectory = BackendAPI.getActiveCoordinatesTrajectory() + if (trajectory != null) { + if (DEBUG) { + console.log("Trajectory detected for current embedding.") + console.log(trajectory) + } + let t = { + nodes: trajectory.nodes, + edges: trajectory.edges, + coordinates: trajectory.coordinates + } + this.setState({ coord: coord, trajectory: t }) + } else { + this.setState({ coord: coord, trajectory: EMPTY_TRAJECTORY }); + } this.setScalingFactor(); } else { console.log('Could not get the coordinates - empty response!') @@ -601,6 +670,7 @@ export default class Viewer extends Component { } this.endBenchmark("getCoordinates"); this.initializeDataPoints(callback ? true : false); + this.drawTrajectory() callback(); }); }, () => { @@ -624,7 +694,7 @@ export default class Viewer extends Component { for (let i = 0; i < n; ++i) { let point = this.getTexturedColorPoint(c.x[i], c.y[i], "000000"); point._originalData.idx = c.idx[i]; - this.container.addChild(point); + this.mainLayer.addChild(point); } this.endBenchmark("initializeDataPoints"); this.transformDataPoints(stillLoading); @@ -632,8 +702,9 @@ export default class Viewer extends Component { transformDataPoints(stillLoading) { if (DEBUG) console.log(this.props.name, 'transformDataPoints', stillLoading); - this.transformPoints(this.container); + this.transformPoints(this.mainLayer); this.transformPoints(this.selectionsLayer); + this.drawTrajectory() requestAnimationFrame(() => { this.renderer.render(this.stage); }); @@ -760,8 +831,8 @@ export default class Viewer extends Component { updateDataPoints(colors) { this.startBenchmark("updateDataPoints") - let n = this.container.children.length; - this.container.removeChildren(0, n).map((p) => { + let n = this.mainLayer.children.length; + this.mainLayer.removeChildren(0, n).map((p) => { p.destroy(); }) let settings = BackendAPI.getSettings(); @@ -779,7 +850,7 @@ export default class Viewer extends Component { pts.map((p, i) => { let point = this.getTexturedColorPoint(p[1], p[2], p[3]) point._originalData.idx = p[0]; - this.container.addChildAt(point, i); + this.mainLayer.addChildAt(point, i); }) this.endBenchmark("map") } else { @@ -787,7 +858,7 @@ export default class Viewer extends Component { this.state.coord.idx.map((ci, i) => { let point = this.getTexturedColorPoint(this.state.coord.x[i], this.state.coord.y[i], this.state.colors[i]) point._originalData.idx = ci; - this.container.addChildAt(point, i); + this.mainLayer.addChildAt(point, i); }) this.endBenchmark("map") } @@ -797,16 +868,16 @@ export default class Viewer extends Component { resetDataPoints() { this.startBenchmark("resetDataPoints") - let pts = this.container.children; + let pts = this.mainLayer.children; let n = pts.length; // Draw new data points for (let i = 0; i < n; ++i) { let point = this.getTexturedColorPoint(pts[i]._originalData.x, pts[i]._originalData.y, '000000') point._originalData.idx = pts[i]._originalData.idx; - this.container.addChildAt(point, n+i); + this.mainLayer.addChildAt(point, n+i); } // Remove the first old data points (firstly rendered) - this.container.removeChildren(0, n) + this.mainLayer.removeChildren(0, n) this.endBenchmark("resetDataPoints"); // Call for rendering this.transformDataPoints(); From 8ba36edc6442cacf99bd2956317a5c25e2f7c4d1 Mon Sep 17 00:00:00 2001 From: mase5 Date: Fri, 6 Jul 2018 03:07:10 +0200 Subject: [PATCH 4/5] Add GUI element in AppSidebar to hide trajectory. --- src/components/AppSidebar.jsx | 19 +++++++++++++++++++ src/components/common/API.jsx | 7 ++++++- src/components/common/Viewer.jsx | 3 ++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/components/AppSidebar.jsx b/src/components/AppSidebar.jsx index c593973c..9fc579ab 100644 --- a/src/components/AppSidebar.jsx +++ b/src/components/AppSidebar.jsx @@ -124,6 +124,14 @@ class AppSidebar extends Component { + { BackendAPI.hasActiveCoordinatesTrajectory() && +
+ Trajectory + + + +
+ } } { showTransforms && @@ -399,6 +407,17 @@ class AppSidebar extends Component { }); } + + toggleHideTrajectory() { + let settings = BackendAPI.setSetting('hideTrajectory', !this.state.settings.hideTrajectory); + this.setState({settings: settings}); + ReactGA.event({ + category: 'settings', + action: 'toggle hide trajectory', + label: settings.hideTrajectory ? 'on' : 'off' + }); + } + setActiveCoordinates(evt, coords) { BackendAPI.setActiveCoordinates(coords.value); this.setState({ activeCoordinates: coords.value }); diff --git a/src/components/common/API.jsx b/src/components/common/API.jsx index dd2d165d..929261d8 100644 --- a/src/components/common/API.jsx +++ b/src/components/common/API.jsx @@ -49,6 +49,7 @@ class API { this.featureChangeListeners = {}; this.settings = { + hideTrajectory: false, sortCells: true, hasLogTransform: true, hasCpmNormalization: false, @@ -107,7 +108,7 @@ class API { 'activeLooms', 'activeCoordinates', 'features', 'gene', 'regulon', 'compare', 'feature', 'featureType', 'threshold', 'type', 'metadata', 'description', - 'settings', 'hasCpmNormalization', 'hasLogTransform', 'sortCells', 'dissociateViewers', + 'settings', 'hasCpmNormalization', 'hasLogTransform', 'sortCells', 'dissociateViewers', 'hideTrajectory', 'viewerTool', 'viewerSelections', 'viewerTransform', @@ -266,6 +267,10 @@ class API { return this.activeCoordinates; } + hasActiveCoordinatesTrajectory() { + return this.getActiveLoomMetaDataEmbedding().trajectory != null + } + getActiveCoordinatesTrajectory() { return this.getActiveLoomMetaDataEmbedding().trajectory } diff --git a/src/components/common/Viewer.jsx b/src/components/common/Viewer.jsx index 345b4219..8d0e02b9 100644 --- a/src/components/common/Viewer.jsx +++ b/src/components/common/Viewer.jsx @@ -459,11 +459,12 @@ export default class Viewer extends Component { drawTrajectory() { console.log("DRAW TRAJECTORY....") + let settings = BackendAPI.getSettings(); this.trajectoryLayer.removeChildren(); let k = this.zoomTransform.k; - if(this.state.trajectory.nodes.length > 0) { + if(this.state.trajectory.nodes.length > 0 && !settings.hideTrajectory) { let trajectory = new PIXI.Graphics(); this.trajectoryLayer.addChild(trajectory); From 3f2fa8c94d7718fcf26a4fd0b4d0781400a7076f Mon Sep 17 00:00:00 2001 From: mase5 Date: Fri, 6 Jul 2018 03:24:52 +0200 Subject: [PATCH 5/5] Update to version 1.2.0. Update version history in README. --- README.md | 9 ++++++++- VERSION | 2 +- opt/setup.py | 2 +- package.json | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4a7eac91..028afe60 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# SCope v1.1.0: Visualization of large-scale and high dimensional single cell data +# SCope v1.2.0: Visualization of large-scale and high dimensional single cell data SCope is a fast visualization tool for large-scale and high dimensional scRNA-seq datasets. @@ -6,6 +6,13 @@ Currently the data format supported by SCope is `.loom`. This file format for ve ## Version History +July 6, 2018 + +* Version 1.2.0 + * Changes: + * Add feature to display trajectory data in the viewer. Currently the only way we provide to add trajectory data to .loom files is through [SCopeLoomR](https://github.com/aertslab/SCopeLoomR/). + + July 4, 2018 * Version 1.1.0 diff --git a/VERSION b/VERSION index 1cc5f657..867e5243 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.0 \ No newline at end of file +1.2.0 \ No newline at end of file diff --git a/opt/setup.py b/opt/setup.py index 23fb362a..011b0adf 100644 --- a/opt/setup.py +++ b/opt/setup.py @@ -5,7 +5,7 @@ 'scope-server = scopeserver.dataserver:dev' ] }, - version='1.1.0', + version='1.2.0', description='SCope Data Server: a server to load and serve the data to the SCope Client', url='', author='Maxime De Waegeneer', diff --git a/package.json b/package.json index e4fa5667..b70fb34b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SCope", - "version": "1.1.0", + "version": "1.2.0", "description": "Visualization tool for large-scale and high dimensional single-cell data", "main": "index.js", "scripts": {