mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-21 13:50:20 +08:00
@@ -1,5 +1,5 @@
|
||||
RELEASE_CURR:=16.01
|
||||
RELEASE_CURR_MINOR_NEXT:=$(shell expr `awk '$$1 == "VERSION_MINOR" {print $$NF}' lib/galaxy/version.py | tr -d \" | sed 's/None/0/' ` + 1)
|
||||
RELEASE_CURR_MINOR_NEXT:=$(shell expr `awk '$$1 == "VERSION_MINOR" {print $$NF}' lib/galaxy/version.py | tr -d \" | sed 's/None/0/;s/dev/0/;' ` + 1)
|
||||
RELEASE_NEXT:=16.04
|
||||
# TODO: This needs to be updated with create_release_rc
|
||||
#RELEASE_NEXT_BRANCH:=release_$(RELEASE_NEXT)
|
||||
@@ -7,35 +7,35 @@ RELEASE_NEXT_BRANCH:=dev
|
||||
RELEASE_UPSTREAM:=upstream
|
||||
GRUNT_DOCKER_NAME:=galaxy/client-builder:16.01
|
||||
|
||||
all:
|
||||
all: help
|
||||
@echo "This makefile is primarily used for building Galaxy's JS client. A sensible all target is not yet implemented."
|
||||
|
||||
npm-deps:
|
||||
cd client && npm install
|
||||
|
||||
grunt: npm-deps
|
||||
grunt: npm-deps ## Calls out to Grunt to build client
|
||||
cd client && node_modules/grunt-cli/bin/grunt
|
||||
|
||||
style: npm-deps
|
||||
style: npm-deps ## Calls the style task of Grunt
|
||||
cd client && node_modules/grunt-cli/bin/grunt style
|
||||
|
||||
webpack: npm-deps
|
||||
webpack: npm-deps ## Pack javascript
|
||||
cd client && node_modules/webpack/bin/webpack.js -p
|
||||
|
||||
client: grunt style webpack
|
||||
client: grunt style webpack ## Process all client-side tasks
|
||||
|
||||
grunt-docker-image:
|
||||
grunt-docker-image: ## Build docker image for running grunt
|
||||
docker build -t ${GRUNT_DOCKER_NAME} client
|
||||
|
||||
grunt-docker: grunt-docker-image
|
||||
grunt-docker: grunt-docker-image ## Run grunt inside docker
|
||||
docker run -it -v `pwd`:/data ${GRUNT_DOCKER_NAME}
|
||||
|
||||
clean-grunt-docker-image:
|
||||
clean-grunt-docker-image: ## Remove grunt docker image
|
||||
docker rmi ${GRUNT_DOCKER_NAME}
|
||||
|
||||
|
||||
# Release Targets
|
||||
create_release_rc:
|
||||
create_release_rc: ## Create a release-candidate branch
|
||||
git checkout dev
|
||||
git pull --ff-only ${RELEASE_UPSTREAM} dev
|
||||
git push origin dev
|
||||
@@ -63,7 +63,7 @@ create_release_rc:
|
||||
git branch -d version-$(RELEASE_CURR)
|
||||
git branch -d version-$(RELEASE_NEXT).dev
|
||||
|
||||
create_release:
|
||||
create_release: ## Create a release branch
|
||||
git pull --ff-only $(RELEASE_UPSTREAM) master
|
||||
git push origin master
|
||||
git checkout release_$(RELEASE_CURR)
|
||||
@@ -92,7 +92,7 @@ create_release:
|
||||
#git push origin master:master
|
||||
#git push origin --tags
|
||||
|
||||
create_point_release:
|
||||
create_point_release: ## Create a point release
|
||||
git pull --ff-only $(RELEASE_UPSTREAM) master
|
||||
git push origin master
|
||||
git checkout release_$(RELEASE_CURR)
|
||||
@@ -119,3 +119,8 @@ create_point_release:
|
||||
#git push origin master:master
|
||||
#git push origin --tags
|
||||
git checkout release_$(RELEASE_CURR)
|
||||
|
||||
.PHONY: help
|
||||
|
||||
help:
|
||||
@egrep '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
@@ -100,7 +100,7 @@ window.app = function app( options, bootstrapped ){
|
||||
'(/)' : 'home',
|
||||
// TODO: remove annoying 'root' from root urls
|
||||
'(/)root*' : 'home',
|
||||
'(/)tours(/:tour_id)' : 'show_tours',
|
||||
'(/)tours(/)(:tour_id)' : 'show_tours',
|
||||
},
|
||||
|
||||
show_tours : function( tour_id ){
|
||||
@@ -116,9 +116,13 @@ window.app = function app( options, bootstrapped ){
|
||||
home : function( params ){
|
||||
// TODO: to router, remove Globals
|
||||
// load a tool by id (tool_id) or rerun a previous tool execution (job_id)
|
||||
if( ( params.tool_id || params.job_id ) && params.tool_id !== 'upload1' ){
|
||||
this._loadToolForm( params );
|
||||
|
||||
if( params.tool_id || params.job_id ) {
|
||||
if ( params.tool_id === 'upload1' ) {
|
||||
Galaxy.upload.show();
|
||||
this._loadCenterIframe( 'welcome' );
|
||||
} else {
|
||||
this._loadToolForm( params );
|
||||
}
|
||||
} else {
|
||||
// show the workflow run form
|
||||
if( params.workflow_id ){
|
||||
|
||||
@@ -144,15 +144,15 @@ var Collection = Backbone.Collection.extend({
|
||||
target : '_blank'
|
||||
},{
|
||||
title : 'Interactive Tours',
|
||||
url : 'tours',
|
||||
onclick : function(){
|
||||
if (Galaxy.app){
|
||||
Galaxy.app.display(new Tours.ToursView());
|
||||
} else {
|
||||
// Redirect and use clientside routing to go to tour index
|
||||
window.location = Galaxy.root + "#/tours";
|
||||
window.location = Galaxy.root + "tours";
|
||||
}
|
||||
},
|
||||
target : 'galaxy_main'
|
||||
}
|
||||
}]
|
||||
};
|
||||
options.terms_url && helpTab.menu.push({
|
||||
@@ -274,7 +274,7 @@ var Tab = Backbone.View.extend({
|
||||
this.$toggle.html( this.model.get( 'title' ) || '' )
|
||||
.removeClass().addClass( 'dropdown-toggle' )
|
||||
.addClass( this.model.get( 'cls' ) )
|
||||
.addClass( this.model.get( 'icon' ) && 'fa fa-2x ' + this.model.get( 'icon' ) )
|
||||
.addClass( this.model.get( 'icon' ) && 'dropdown-icon fa ' + this.model.get( 'icon' ) )
|
||||
.addClass( this.model.get( 'toggle' ) && 'toggle' )
|
||||
.attr( 'target', this.model.get( 'target' ) )
|
||||
.attr( 'href', this.model.get( 'url' ) )
|
||||
@@ -383,4 +383,4 @@ return {
|
||||
Tab : Tab
|
||||
};
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
@@ -132,7 +132,6 @@ var DatasetListItemEdit = _super.extend(
|
||||
var actions = _super.prototype._renderSecondaryActions.call( this );
|
||||
switch( this.model.get( 'state' ) ){
|
||||
case STATES.UPLOAD:
|
||||
case STATES.NEW:
|
||||
case STATES.NOT_VIEWABLE:
|
||||
return actions;
|
||||
case STATES.ERROR:
|
||||
|
||||
@@ -2,9 +2,10 @@ define([
|
||||
"mvc/history/history-content-model",
|
||||
"mvc/history/hda-model",
|
||||
"mvc/history/hdca-model",
|
||||
"mvc/dataset/states",
|
||||
"mvc/base-mvc",
|
||||
"utils/localization"
|
||||
], function( HISTORY_CONTENT, HDA_MODEL, HDCA_MODEL, BASE_MVC, _l ){
|
||||
], function( HISTORY_CONTENT, HDA_MODEL, HDCA_MODEL, STATES, BASE_MVC, _l ){
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -102,15 +103,8 @@ var HistoryContents = Backbone.Collection
|
||||
* @see HistoryDatasetAssociation#inReadyState
|
||||
*/
|
||||
running : function(){
|
||||
var idList = [];
|
||||
this.each( function( item ){
|
||||
var isRunning = !item.inReadyState();
|
||||
if( isRunning ){
|
||||
//TODO: is this still correct since type_id
|
||||
idList.push( item.get( 'id' ) );
|
||||
}
|
||||
});
|
||||
return idList;
|
||||
function filterFn( c ){ return !c.inReadyState(); }
|
||||
return new HistoryContents( this.filter( filterFn ) );
|
||||
},
|
||||
|
||||
/** Get the model with the given hid
|
||||
@@ -156,12 +150,53 @@ var HistoryContents = Backbone.Collection
|
||||
return new HistoryContents( this.filter( filterFn ) );
|
||||
},
|
||||
|
||||
/** return a new contents collection of only hidden items */
|
||||
visibleAndUndeleted : function(){
|
||||
function filterFn( c ){ return c.get( 'visible' ) && !c.get( 'deleted' ); }
|
||||
return new HistoryContents( this.filter( filterFn ) );
|
||||
},
|
||||
|
||||
/** return true if any contents don't have details */
|
||||
haveDetails : function(){
|
||||
return this.all( function( content ){ return content.hasDetails(); });
|
||||
},
|
||||
|
||||
// ........................................................................ ajax
|
||||
/** override to use newest (versioned) api */
|
||||
fetch : function( options ){
|
||||
options = options || {};
|
||||
options.data = _.defaults( options.data || {}, {
|
||||
v : 'dev'
|
||||
});
|
||||
return Backbone.Collection.prototype.fetch.call( this, options );
|
||||
},
|
||||
|
||||
/** override to use newest (versioned) api */
|
||||
fetchUpdated : function( since, options ){
|
||||
options = options || {};
|
||||
options.traditional = true;
|
||||
// TODO: this is painful - simplify here or move q/qv to named/mappable params
|
||||
options.data = [{ name: 'v', value: 'dev' }];
|
||||
if( since ){
|
||||
options.data = options.data.concat( this._filtersFromMap({
|
||||
'update_time-ge' : since.toISOString(),
|
||||
}));
|
||||
}
|
||||
options.merge = true;
|
||||
options.remove = false;
|
||||
return this.fetch( options );
|
||||
},
|
||||
|
||||
_filtersFromMap : function( filterMap ){
|
||||
var filters = [];
|
||||
// TODO: this seems unnecessary
|
||||
_.each( filterMap, function( val, key ){
|
||||
filters.push({ name: 'q', value: key });
|
||||
filters.push({ name: 'qv', value: val });
|
||||
});
|
||||
return filters;
|
||||
},
|
||||
|
||||
/** fetch detailed model data for all contents in this collection */
|
||||
fetchAllDetails : function( options ){
|
||||
options = options || {};
|
||||
@@ -293,7 +328,6 @@ var HistoryContents = Backbone.Collection
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
/** In this override, copy the historyId to the clone */
|
||||
clone : function(){
|
||||
var clone = Backbone.Collection.prototype.clone.call( this );
|
||||
|
||||
@@ -137,6 +137,18 @@ var History = Backbone.Model
|
||||
return _.reduce( _.values( this.get( 'state_details' ) ), function( memo, num ){ return memo + num; }, 0 );
|
||||
},
|
||||
|
||||
/** Return the number of running jobs assoc with this history (note: unknown === 0) */
|
||||
numOfUnfinishedJobs : function(){
|
||||
var unfinishedJobIds = this.get( 'non_ready_jobs' );
|
||||
return unfinishedJobIds? unfinishedJobIds.length : 0;
|
||||
},
|
||||
|
||||
/** Return the number of running hda/hdcas in this history (note: unknown === 0) */
|
||||
numOfUnfinishedShownContents : function(){
|
||||
var contents = this.contents.running().visibleAndUndeleted();
|
||||
return contents? contents.length : 0;
|
||||
},
|
||||
|
||||
// ........................................................................ search
|
||||
/** What model fields to search with */
|
||||
searchAttributes : [
|
||||
@@ -150,39 +162,56 @@ var History = Backbone.Model
|
||||
},
|
||||
|
||||
// ........................................................................ updates
|
||||
/** does the contents collection indicate they're still running and need to be updated later?
|
||||
* delay + update if needed
|
||||
* @param {Function} onReadyCallback function to run when all contents are in the ready state
|
||||
* events: ready
|
||||
*/
|
||||
checkForUpdates : function( onReadyCallback ){
|
||||
//this.info( 'checkForUpdates' )
|
||||
|
||||
// get overall History state from collection, run updater if History has running/queued contents
|
||||
// boiling it down on the client to running/not
|
||||
if( this.contents.running().length ){
|
||||
this.setUpdateTimeout();
|
||||
|
||||
} else {
|
||||
this.trigger( 'ready' );
|
||||
if( _.isFunction( onReadyCallback ) ){
|
||||
onReadyCallback.call( this );
|
||||
}
|
||||
}
|
||||
return this;
|
||||
_getSizeAndRunning : function(){
|
||||
return this.fetch({ data : $.param({ keys : 'size,non_ready_jobs' }) });
|
||||
},
|
||||
|
||||
/** create a timeout (after UPDATE_DELAY or delay ms) to refetch the contents. Clear any prev. timeout */
|
||||
setUpdateTimeout : function( delay ){
|
||||
delay = delay || History.UPDATE_DELAY;
|
||||
var history = this;
|
||||
/** */
|
||||
refresh : function( options ){
|
||||
options = options || {};
|
||||
var self = this;
|
||||
|
||||
// prevent buildup of updater timeouts by clearing previous if any, then set new and cache id
|
||||
this.clearUpdateTimeout();
|
||||
this.updateTimeoutId = setTimeout( function(){
|
||||
history.refresh();
|
||||
}, delay );
|
||||
return this.updateTimeoutId;
|
||||
var lastUpdateTime = self.lastUpdateTime;
|
||||
self.lastUpdateTime = new Date();
|
||||
// note if there was no previous update time, all summary contents will be fetched
|
||||
return self.contents.fetchUpdated( lastUpdateTime )
|
||||
.done( _.bind( self.checkForUpdates, self ) );
|
||||
},
|
||||
|
||||
/** */
|
||||
checkForUpdates : function( options ){
|
||||
options = options || {};
|
||||
var delay = History.UPDATE_DELAY;
|
||||
var self = this;
|
||||
|
||||
function _delayThenUpdate(){
|
||||
// prevent buildup of updater timeouts by clearing previous if any, then set new and cache id
|
||||
self.clearUpdateTimeout();
|
||||
self.updateTimeoutId = setTimeout( function(){
|
||||
self.refresh( options );
|
||||
}, delay );
|
||||
}
|
||||
|
||||
// if there are still datasets in the non-ready state, recurse into this function with the new time
|
||||
if( this.numOfUnfinishedShownContents() > 0 ){
|
||||
_delayThenUpdate();
|
||||
|
||||
} else {
|
||||
// no datasets are running, but currently runnning jobs may still produce new datasets
|
||||
// see if the history has any running jobs and continue to update if so
|
||||
// (also update the size for the user in either case)
|
||||
self._getSizeAndRunning()
|
||||
.done( function( historyData ){
|
||||
if( self.numOfUnfinishedJobs() > 0 ){
|
||||
_delayThenUpdate();
|
||||
|
||||
} else {
|
||||
// otherwise, let listeners know that all updates have stopped
|
||||
self.trigger( 'ready' );
|
||||
// self.lastUpdateTime = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/** clear the timeout and the cached timeout id */
|
||||
@@ -193,32 +222,6 @@ var History = Backbone.Model
|
||||
}
|
||||
},
|
||||
|
||||
/* update the contents, getting full detailed model data for any whose id is in detailIds
|
||||
* set up to run this again in some interval of time
|
||||
* @param {String[]} detailIds list of content ids to get detailed model data for
|
||||
* @param {Object} options std. backbone fetch options map
|
||||
*/
|
||||
refresh : function( detailIds, options ){
|
||||
//this.info( 'refresh:', detailIds, this.contents );
|
||||
detailIds = detailIds || [];
|
||||
options = options || {};
|
||||
var history = this;
|
||||
|
||||
// add detailIds to options as CSV string
|
||||
options.data = options.data || {};
|
||||
if( detailIds.length ){
|
||||
options.data.details = detailIds.join( ',' );
|
||||
}
|
||||
var xhr = this.contents.fetch( options );
|
||||
xhr.done( function( models ){
|
||||
history.checkForUpdates( function(){
|
||||
// fetch the history inside onReadyCallback in order to recalc history size
|
||||
this.fetch();
|
||||
});
|
||||
});
|
||||
return xhr;
|
||||
},
|
||||
|
||||
// ........................................................................ ajax
|
||||
/** save this history, _Mark_ing it as deleted (just a flag) */
|
||||
_delete : function( options ){
|
||||
@@ -330,14 +333,11 @@ History.getHistoryData = function getHistoryData( historyId, options ){
|
||||
if( _.isFunction( hdcaDetailIds ) ){
|
||||
hdcaDetailIds = hdcaDetailIds( historyData );
|
||||
}
|
||||
var data = {};
|
||||
var data = {
|
||||
v : 'dev'
|
||||
};
|
||||
if( detailIdsFn.length ) {
|
||||
data.dataset_details = detailIdsFn.join( ',' );
|
||||
}
|
||||
if( hdcaDetailIds.length ) {
|
||||
// for symmetry, not actually used by backend of consumed
|
||||
// by frontend.
|
||||
data.dataset_collection_details = hdcaDetailIds.join( ',' );
|
||||
data.details = detailIdsFn.join( ',' );
|
||||
}
|
||||
return jQuery.ajax( Galaxy.root + 'api/histories/' + historyData.id + '/contents', { data: data });
|
||||
}
|
||||
|
||||
@@ -131,8 +131,8 @@ var HistoryView = _super.extend(
|
||||
/** In this override, clear the update timer on the model */
|
||||
freeModel : function(){
|
||||
_super.prototype.freeModel.call( this );
|
||||
//TODO: move to History.free()
|
||||
if( this.model ){
|
||||
//TODO: move to History.free()
|
||||
this.model.clearUpdateTimeout();
|
||||
}
|
||||
return this;
|
||||
@@ -221,9 +221,9 @@ var HistoryView = _super.extend(
|
||||
},
|
||||
|
||||
/** convenience alias to the model. Updates the item list only (not the history) */
|
||||
refreshContents : function( detailIds, options ){
|
||||
refreshContents : function( options ){
|
||||
if( this.model ){
|
||||
return this.model.refresh( detailIds, options );
|
||||
return this.model.refresh( options );
|
||||
}
|
||||
// may have callbacks - so return an empty promise
|
||||
return $.when();
|
||||
|
||||
@@ -453,7 +453,7 @@ var MultiPanelColumns = Backbone.View.extend( baseMVC.LoggableMixin ).extend({
|
||||
handleDeletedHistory : function handleDeletedHistory( history ){
|
||||
if( history.get( 'deleted' ) || history.get( 'purged' ) ){
|
||||
this.log( 'handleDeletedHistory', this.collection.includeDeleted, history );
|
||||
var multipanel = this;
|
||||
var multipanel = this,
|
||||
column = multipanel.columnMap[ history.id ];
|
||||
if( !column ){ return; }
|
||||
|
||||
@@ -723,7 +723,7 @@ var MultiPanelColumns = Backbone.View.extend( baseMVC.LoggableMixin ).extend({
|
||||
var xhrData = {},
|
||||
ids = _.values( column.panel.storage.get( 'expandedIds' ) ).join();
|
||||
if( ids ){
|
||||
xhrData.dataset_details = ids;
|
||||
xhrData.details = ids;
|
||||
}
|
||||
// this uses a 'named' queue so that duplicate requests are ignored
|
||||
this.hdaQueue.add({
|
||||
|
||||
@@ -220,29 +220,22 @@ var FolderView = Backbone.View.extend({
|
||||
tmpl_array.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');
|
||||
tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');
|
||||
tmpl_array.push(' </div>');
|
||||
|
||||
// tmpl_array.push('<% if (item.get("is_unrestricted")) { %>');
|
||||
tmpl_array.push(' <p>');
|
||||
tmpl_array.push(' This dataset is unrestricted so everybody can access it. Just share the URL of this page. ');
|
||||
tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');
|
||||
tmpl_array.push(' </p>');
|
||||
// tmpl_array.push('<% } %>');
|
||||
|
||||
tmpl_array.push('<div class="dataset_table">');
|
||||
|
||||
tmpl_array.push(' <table class="grid table table-striped table-condensed">');
|
||||
tmpl_array.push(' <tr>');
|
||||
tmpl_array.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');
|
||||
tmpl_array.push(' <td><%= _.escape(item.get("name")) %></td>');
|
||||
tmpl_array.push(' </tr>');
|
||||
|
||||
tmpl_array.push(' <% if (item.get("file_ext")) { %>');
|
||||
tmpl_array.push(' <tr>');
|
||||
tmpl_array.push(' <th scope="row">Data type</th>');
|
||||
tmpl_array.push(' <td><%= _.escape(item.get("file_ext")) %></td>');
|
||||
tmpl_array.push(' </tr>');
|
||||
tmpl_array.push(' <% } %>');
|
||||
|
||||
tmpl_array.push(' </table>');
|
||||
tmpl_array.push('</div>');
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ var FolderToolbarView = Backbone.View.extend({
|
||||
renderPaginator: function( options ){
|
||||
this.options = _.extend( this.options, options );
|
||||
var paginator_template = this.templatePaginator();
|
||||
this.$el.find( '#folder_paginator' ).html( paginator_template({
|
||||
$("body").find( '.folder-paginator' ).html( paginator_template({
|
||||
id: this.options.id,
|
||||
show_page: parseInt( this.options.show_page ),
|
||||
page_count: parseInt( this.options.page_count ),
|
||||
@@ -1059,7 +1059,7 @@ var FolderToolbarView = Backbone.View.extend({
|
||||
tmpl_array.push(' <div id="library_toolbar">');
|
||||
tmpl_array.push('<form class="form-inline" role="form">');
|
||||
tmpl_array.push(' <span><strong>DATA LIBRARIES</strong></span>');
|
||||
tmpl_array.push(' <span id="folder_paginator" class="library-paginator">');
|
||||
tmpl_array.push(' <span class="library-paginator folder-paginator">');
|
||||
// paginator will append here
|
||||
tmpl_array.push(' </span>');
|
||||
tmpl_array.push('<div class="checkbox toolbar-item logged-dataset-manipulation" style="height: 20px; display:none;">');
|
||||
@@ -1119,6 +1119,8 @@ var FolderToolbarView = Backbone.View.extend({
|
||||
tmpl_array.push(' <div id="folder_items_element">');
|
||||
tmpl_array.push(' </div>');
|
||||
tmpl_array.push('</div>');
|
||||
|
||||
tmpl_array.push('<div class="folder-paginator paginator-bottom"></div>');
|
||||
// CONTAINER END
|
||||
|
||||
return _.template(tmpl_array.join(''));
|
||||
|
||||
@@ -98,7 +98,7 @@ define(['utils/utils', 'mvc/tool/tool-form-base'],
|
||||
type : 'boolean',
|
||||
value : String(Boolean(this.post_job_actions['EmailAction' + output_id])),
|
||||
ignore : 'false',
|
||||
help : 'An email notification will be send when the job has completed.',
|
||||
help : 'An email notification will be sent when the job has completed.',
|
||||
payload : {
|
||||
'host' : window.location.host
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ define(['utils/utils', 'mvc/ui/ui-misc', 'mvc/tool/tool-form-base', 'mvc/tool/to
|
||||
icon : 'fa-check',
|
||||
tooltip : 'Execute: ' + options.name + ' (' + options.version + ')',
|
||||
title : 'Execute',
|
||||
cls : 'btn btn-primary',
|
||||
cls : 'ui-button btn btn-primary',
|
||||
floating : 'clear',
|
||||
onclick : function() {
|
||||
execute_btn.wait();
|
||||
|
||||
@@ -101,14 +101,15 @@ define(['libs/bootstrap-tour'],function(BootstrapTour) {
|
||||
"<ul>",
|
||||
'<% _.each(tours, function(tour) { %>',
|
||||
'<li>',
|
||||
'<a href="#/tours/<%- tour.id %>" class="tourItem" data-tour.id=<%- tour.id %>>',
|
||||
'<a href="/tours/<%- tour.id %>" class="tourItem" data-tour.id=<%- tour.id %>>',
|
||||
'<%- tour.attributes.name || tour.id %>',
|
||||
'</a>',
|
||||
' - <%- tour.attributes.description || "No description given." %>',
|
||||
'</li>',
|
||||
'<% }); %>',
|
||||
"</ul>"].join(''));
|
||||
this.$el.html(tpl({tours: this.model.models})).on("click", ".tourItem", function(){
|
||||
this.$el.html(tpl({tours: this.model.models})).on("click", ".tourItem", function(e){
|
||||
e.preventDefault();
|
||||
giveTour($(this).data("tour.id"));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ define([], function() {
|
||||
this.app = app;
|
||||
this.cv = canvas_viewport;
|
||||
this.cc = this.cv.find( "#canvas-container" );
|
||||
this.overview = overview;
|
||||
this.oc = overview.find( "#overview-canvas" );
|
||||
this.ov = overview.find( "#overview-viewport" );
|
||||
// Make overview box draggable
|
||||
@@ -41,18 +42,34 @@ define([], function() {
|
||||
self.app.workflow.fit_canvas_to_nodes();
|
||||
self.draw_overview();
|
||||
});
|
||||
this.overview.click( function( e ) {
|
||||
if (self.overview.hasClass('blockaclick')){
|
||||
self.overview.removeClass('blockaclick');
|
||||
} else {
|
||||
var in_w = self.cc.width(),
|
||||
in_h = self.cc.height(),
|
||||
o_w = self.oc.width(),
|
||||
o_h = self.oc.height(),
|
||||
new_x_offset = e.pageX - self.oc.offset().left - self.ov.width() / 2,
|
||||
new_y_offset = e.pageY - self.oc.offset().top - self.ov.height() / 2;
|
||||
move( - ( new_x_offset / o_w * in_w ),
|
||||
- ( new_y_offset / o_h * in_h ) );
|
||||
self.app.workflow.fit_canvas_to_nodes();
|
||||
self.draw_overview();
|
||||
}
|
||||
});
|
||||
// Dragging for overview pane
|
||||
this.ov.bind( "drag", function( e, d ) {
|
||||
var in_w = self.cc.width(),
|
||||
in_h = self.cc.height(),
|
||||
o_w = self.oc.width(),
|
||||
o_h = self.oc.height(),
|
||||
p = $(this).offsetParent().offset(),
|
||||
new_x_offset = d.offsetX - p.left,
|
||||
new_y_offset = d.offsetY - p.top;
|
||||
new_x_offset = d.offsetX - self.overview.offset().left,
|
||||
new_y_offset = d.offsetY - self.overview.offset().top;
|
||||
move( - ( new_x_offset / o_w * in_w ),
|
||||
- ( new_y_offset / o_h * in_h ) );
|
||||
}).bind( "dragend", function() {
|
||||
self.overview.addClass('blockaclick');
|
||||
self.app.workflow.fit_canvas_to_nodes();
|
||||
self.draw_overview();
|
||||
});
|
||||
@@ -68,11 +85,11 @@ define([], function() {
|
||||
});
|
||||
self.draw_overview();
|
||||
});
|
||||
|
||||
|
||||
/* Disable dragging for child element of the panel so that resizing can
|
||||
only be done by dragging the borders */
|
||||
$("#overview-border div").bind("drag", function() { });
|
||||
|
||||
|
||||
},
|
||||
update_viewport_overlay: function() {
|
||||
var cc = this.cc,
|
||||
@@ -83,7 +100,7 @@ define([], function() {
|
||||
in_h = cc.height(),
|
||||
o_w = oc.width(),
|
||||
o_h = oc.height(),
|
||||
cc_pos = cc.position();
|
||||
cc_pos = cc.position();
|
||||
ov.css( {
|
||||
left: - ( cc_pos.left / in_w * o_w ),
|
||||
top: - ( cc_pos.top / in_h * o_h ),
|
||||
@@ -143,7 +160,7 @@ define([], function() {
|
||||
if (node.tool_errors){
|
||||
c.fillStyle = "#FFCCCC";
|
||||
c.strokeStyle = "#AA6666";
|
||||
} else if (node.workflow_outputs != undefined && node.workflow_outputs.length > 0){
|
||||
} else if (node.workflow_outputs !== undefined && node.workflow_outputs.length > 0){
|
||||
c.fillStyle = "#E8A92D";
|
||||
c.strokeStyle = "#E8A92D";
|
||||
}
|
||||
@@ -225,4 +242,4 @@ define([], function() {
|
||||
}
|
||||
});
|
||||
return CanvasManager;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -361,12 +361,10 @@ EditorFormView = Backbone.View.extend({
|
||||
self.canvas_manager.draw_overview();
|
||||
// Determine if any parameters were 'upgraded' and provide message
|
||||
upgrade_message = "";
|
||||
$.each( data.upgrade_messages, function( step_id, messages ) {
|
||||
_.each( data.upgrade_messages, function( messages, step_id ) {
|
||||
var details = "";
|
||||
Utils.deepeach( [ messages ], function( d ) {
|
||||
$.each( d, function( i, v ) {
|
||||
details += typeof v === "string" ? "<li>" + v + "</li>" : "";
|
||||
});
|
||||
_.each( messages, function( m ) {
|
||||
details += "<li>" + m + "</li>";
|
||||
});
|
||||
if ( details ) {
|
||||
upgrade_message += "<li>Step " + ( parseInt( step_id, 10 ) + 1 ) + ": " + self.workflow.nodes[ step_id ].name + "<ul>" + details + "</ul></li>";
|
||||
|
||||
@@ -170,11 +170,17 @@ $(document).ready( function() {
|
||||
if (et){
|
||||
et = TOURS.hooked_tour_from_data(et);
|
||||
if (et && et.steps){
|
||||
var tour = new Tour(_.extend({
|
||||
steps: et.steps,
|
||||
}, TOURS.tour_opts));
|
||||
tour.init();
|
||||
tour.restart();
|
||||
if (window && window.self === window.top){
|
||||
// Only kick off a new tour if this is the toplevel window (non-iframe). This
|
||||
// functionality actually *could* be useful, but we'd need to handle it better and
|
||||
// come up with some design guidelines for tours jumping between windows.
|
||||
// Disabling for now.
|
||||
var tour = new Tour(_.extend({
|
||||
steps: et.steps,
|
||||
}, TOURS.tour_opts));
|
||||
tour.init();
|
||||
tour.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -430,6 +430,10 @@ div.unified-panel-body-background {
|
||||
.toggle {
|
||||
color : gold;
|
||||
}
|
||||
.dropdown-icon {
|
||||
top : 1px;
|
||||
font-size : 1.8em;
|
||||
}
|
||||
.dropdown-note {
|
||||
font-weight : bold;
|
||||
font-size : 10px;
|
||||
|
||||
@@ -229,3 +229,8 @@ span.expandLink {
|
||||
.library-paginator {
|
||||
margin-left: 2em;
|
||||
}
|
||||
.paginator-bottom{
|
||||
width: 27em;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
// buttons
|
||||
.ui-button {
|
||||
i {
|
||||
font-size: 1.2em;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
}
|
||||
.ui-button-icon {
|
||||
@@ -579,6 +579,7 @@
|
||||
|
||||
i {
|
||||
padding-right: @ui-margin-horizontal;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -670,7 +671,7 @@
|
||||
position: relative;
|
||||
.icon-dropdown {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
top: 7px;
|
||||
right: 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
color: @btn-default-border;
|
||||
i {
|
||||
margin-right: 10px;
|
||||
font-size: inherit;
|
||||
}
|
||||
}
|
||||
.upload-row {
|
||||
|
||||
@@ -67,6 +67,9 @@ module.exports = function( grunt ){
|
||||
|
||||
// remove tmp files
|
||||
grunt.config( 'clean', {
|
||||
options : {
|
||||
force: true
|
||||
},
|
||||
clean : [
|
||||
fmt( '%s/tmp-site-config.less', lessPath )
|
||||
]
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
"keywords": [
|
||||
"galaxy"
|
||||
],
|
||||
"repository": { "type": "git",
|
||||
"url": "https://github.com/galaxyproject/galaxy.git"
|
||||
},
|
||||
"license": "AFL-3.0",
|
||||
"dependencies": {
|
||||
"amdi18n-loader": "^0.2.0",
|
||||
"grunt": "^0.4.5",
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<display file="ensembl/ensembl_bam.xml" />
|
||||
<display file="igv/bam.xml" />
|
||||
<display file="igb/bam.xml" />
|
||||
<display file="iobio/bam.xml" />
|
||||
</datatype>
|
||||
<datatype extension="cram" type="galaxy.datatypes.binary:CRAM" mimetype="application/octet-stream" display_in_upload="true" description="CRAM is a file format for highly efficient and tunable reference-based compression of alignment data." description_url="http://www.ebi.ac.uk/ena/software/cram-usage"/>
|
||||
<datatype extension="bed" type="galaxy.datatypes.interval:Bed" display_in_upload="true" description="BED format provides a flexible way to define the data lines that are displayed in an annotation track. BED lines have three required columns and nine additional optional columns. The three required columns are chrom, chromStart and chromEnd." description_url="https://wiki.galaxyproject.org/Learn/Datatypes#Bed">
|
||||
@@ -246,6 +247,7 @@
|
||||
<display file="ucsc/vcf.xml" />
|
||||
<display file="igv/vcf.xml" />
|
||||
<display file="rviewer/vcf.xml" inherit="True"/>
|
||||
<display file="iobio/vcf.xml" />
|
||||
</datatype>
|
||||
<datatype extension="bcf" type="galaxy.datatypes.binary:Bcf" mimetype="application/octet-stream" display_in_upload="True">
|
||||
<converter file="bcf_to_bcf_bgzip_converter.xml" target_datatype="bcf_bgzip"/>
|
||||
@@ -440,6 +442,53 @@
|
||||
<datatype extension="biom1" type="galaxy.datatypes.text:Biom1" display_in_upload="True" subclass="True" mimetype="application/json" />
|
||||
<!-- Strand-specific Coordinate Count Datatype used by the Center for Eukaryotic Gene Regulation labs at Penn State -->
|
||||
<datatype extension="scidx" type="galaxy.datatypes.interval:ScIdx" display_in_upload="true" />
|
||||
|
||||
<!--Cheminformatics Datatypes -->
|
||||
<datatype extension="smi" type="galaxy.datatypes.molecules:SMILES" display_in_upload="True">
|
||||
<!-- The ordering is important. The first one is considered as default converter in the build-in conversion function -> (as sdf)-->
|
||||
<converter file="smi_to_sdf_converter.xml" target_datatype="sdf"/>
|
||||
<converter file="smi_to_inchi_converter.xml" target_datatype="inchi"/>
|
||||
<converter file="smi_to_cml_converter.xml" target_datatype="cml"/>
|
||||
<converter file="smi_to_mol_converter.xml" target_datatype="mol"/>
|
||||
<converter file="smi_to_mol2_converter.xml" target_datatype="mol2"/>
|
||||
<converter file="smi_to_smi_converter.xml" target_datatype="smi"/>
|
||||
</datatype>
|
||||
<datatype extension="sdf" type="galaxy.datatypes.molecules:SDF" display_in_upload="True">
|
||||
<converter file="sdf_to_smi_converter.xml" target_datatype="smi"/>
|
||||
<converter file="sdf_to_inchi_converter.xml" target_datatype="inchi"/>
|
||||
<converter file="sdf_to_mol2_converter.xml" target_datatype="mol2"/>
|
||||
<converter file="sdf_to_cml_converter.xml" target_datatype="cml"/>
|
||||
</datatype>
|
||||
<datatype extension="inchi" type="galaxy.datatypes.molecules:InChI" display_in_upload="True">
|
||||
<converter file="inchi_to_smi_converter.xml" target_datatype="smi"/>
|
||||
<converter file="inchi_to_sdf_converter.xml" target_datatype="sdf"/>
|
||||
<converter file="inchi_to_mol_converter.xml" target_datatype="mol"/>
|
||||
<converter file="inchi_to_mol2_converter.xml" target_datatype="mol2"/>
|
||||
<converter file="inchi_to_cml_converter.xml" target_datatype="cml"/>
|
||||
</datatype>
|
||||
<datatype extension="mol" type="galaxy.datatypes.molecules:MOL" display_in_upload="True">
|
||||
<converter file="mol_to_smi_converter.xml" target_datatype="smi"/>
|
||||
<converter file="mol_to_inchi_converter.xml" target_datatype="inchi"/>
|
||||
<converter file="mol_to_mol2_converter.xml" target_datatype="mol2"/>
|
||||
<converter file="mol_to_cml_converter.xml" target_datatype="cml"/>
|
||||
</datatype>
|
||||
<datatype extension="mol2" type="galaxy.datatypes.molecules:MOL2" display_in_upload="False">
|
||||
<converter file="mol2_to_smi_converter.xml" target_datatype="smi"/>
|
||||
<converter file="mol2_to_sdf_converter.xml" target_datatype="sdf"/>
|
||||
<converter file="mol2_to_inchi_converter.xml" target_datatype="inchi"/>
|
||||
<converter file="mol2_to_mol_converter.xml" target_datatype="mol"/>
|
||||
<converter file="mol2_to_cml_converter.xml" target_datatype="cml"/>
|
||||
</datatype>
|
||||
<datatype extension="cml" type="galaxy.datatypes.molecules:CML" display_in_upload="True">
|
||||
<converter file="cml_to_smi_converter.xml" target_datatype="smi"/>
|
||||
<converter file="cml_to_inchi_converter.xml" target_datatype="inchi"/>
|
||||
<converter file="cml_to_sdf_converter.xml" target_datatype="sdf"/>
|
||||
<converter file="cml_to_mol2_converter.xml" target_datatype="mol2"/>
|
||||
</datatype>
|
||||
<datatype extension="fps" type="galaxy.datatypes.molecules:FPS" mimetype="text/html" display_in_upload="True" />
|
||||
<datatype extension="obfs" type="galaxy.datatypes.molecules:OBFS" mimetype="text/html" display_in_upload="False" />
|
||||
<datatype extension="phar" type="galaxy.datatypes.molecules:PHAR" display_in_upload="False" />
|
||||
<datatype extension="pdb" type="galaxy.datatypes.molecules:PDB" display_in_upload="True" />
|
||||
</registration>
|
||||
<sniffers>
|
||||
<!--
|
||||
@@ -481,6 +530,7 @@
|
||||
<sniffer type="galaxy.datatypes.proteomics:Msp"/>
|
||||
<sniffer type="galaxy.datatypes.proteomics:SPLib"/>
|
||||
<sniffer type="galaxy.datatypes.proteomics:ThermoRAW"/>
|
||||
<sniffer type="galaxy.datatypes.molecules:CML"/>
|
||||
<sniffer type="galaxy.datatypes.xml:GenericXml"/>
|
||||
<sniffer type="galaxy.datatypes.triples:Turtle"/>
|
||||
<sniffer type="galaxy.datatypes.triples:NTriples"/>
|
||||
@@ -490,6 +540,12 @@
|
||||
<sniffer type="galaxy.datatypes.sequence:csFasta"/>
|
||||
<sniffer type="galaxy.datatypes.qualityscore:QualityScoreSOLiD"/>
|
||||
<sniffer type="galaxy.datatypes.qualityscore:QualityScore454"/>
|
||||
<sniffer type="galaxy.datatypes.molecules:SDF"/>
|
||||
<sniffer type="galaxy.datatypes.molecules:PDB"/>
|
||||
<sniffer type="galaxy.datatypes.molecules:MOL2"/>
|
||||
<sniffer type="galaxy.datatypes.molecules:InChI"/>
|
||||
<sniffer type="galaxy.datatypes.molecules:FPS"/>
|
||||
<!-- TODO: see molecules.py <sniffer type="galaxy.datatypes.molecules:SMILES"/>-->
|
||||
<sniffer type="galaxy.datatypes.sequence:Fasta"/>
|
||||
<sniffer type="galaxy.datatypes.sequence:Fastq"/>
|
||||
<sniffer type="galaxy.datatypes.interval:Wiggle"/>
|
||||
|
||||
@@ -656,6 +656,13 @@ nglims_config_file = tool-data/nglims.yaml
|
||||
# log_events and log_actions functionality will eventually be merged.
|
||||
#log_actions = True
|
||||
|
||||
|
||||
# Fluentd configuration. Various events can be logged to the fluentd instance
|
||||
# configured below by enabling fluent_log.
|
||||
#fluent_log = False
|
||||
#fluent_host = localhost
|
||||
#fluent_port = 24224
|
||||
|
||||
# Sanitize all HTML tool output. By default, all tool output served as
|
||||
# 'text/html' will be sanitized thoroughly. This can be disabled if you have
|
||||
# special tools that require unaltered output. WARNING: disabling this does
|
||||
|
||||
@@ -28,18 +28,18 @@
|
||||
</section>
|
||||
<section id="textutil" name="Text Manipulation">
|
||||
<tool file="filters/fixedValueColumn.xml" />
|
||||
<tool file="filters/catWrapper.xml" />
|
||||
<tool file="filters/catWrapper.xml" hidden="True" />
|
||||
<tool file="filters/condense_characters.xml" />
|
||||
<tool file="filters/convert_characters.xml" />
|
||||
<tool file="filters/mergeCols.xml" />
|
||||
<tool file="filters/CreateInterval.xml" />
|
||||
<tool file="filters/cutWrapper.xml" />
|
||||
<tool file="filters/cutWrapper.xml" hidden="True" />
|
||||
<tool file="filters/changeCase.xml" />
|
||||
<tool file="filters/pasteWrapper.xml" />
|
||||
<tool file="filters/remove_beginning.xml" />
|
||||
<tool file="filters/randomlines.xml" />
|
||||
<tool file="filters/headWrapper.xml" />
|
||||
<tool file="filters/tailWrapper.xml" />
|
||||
<tool file="filters/headWrapper.xml" hidden="True" />
|
||||
<tool file="filters/tailWrapper.xml" hidden="True" />
|
||||
<tool file="filters/trimmer.xml" />
|
||||
<tool file="filters/wc_gnu.xml" />
|
||||
<tool file="filters/secure_hash_message_digest.xml" />
|
||||
|
||||
@@ -75,4 +75,14 @@
|
||||
<columns>dbkey, name, value</columns>
|
||||
<file path="tool-data/liftOver.loc" />
|
||||
</table>
|
||||
<!-- iobio bam servers -->
|
||||
<table name="bam_iobio" comment_char="#">
|
||||
<columns>value, name, url</columns>
|
||||
<file path="tool-data/bam_iobio.loc" />
|
||||
</table>
|
||||
<!-- iobio vcf servers -->
|
||||
<table name="vcf_iobio" comment_char="#">
|
||||
<columns>value, name, url</columns>
|
||||
<file path="tool-data/vcf_iobio.loc" />
|
||||
</table>
|
||||
</tables>
|
||||
|
||||
+14
-12
@@ -8,6 +8,8 @@
|
||||
# chkconfig: 2345 98 20
|
||||
# description: Galaxy http://galaxyproject.org/
|
||||
|
||||
#--- loading functions
|
||||
. /etc/init.d/functions
|
||||
#--- config
|
||||
|
||||
SERVICE_NAME="galaxy"
|
||||
@@ -53,17 +55,17 @@ stop() {
|
||||
echo "done."
|
||||
}
|
||||
|
||||
status() {
|
||||
echo -n "$SERVICE_NAME status: "
|
||||
|
||||
while read pid; do
|
||||
if [ "$(readlink -m /proc/$pid/cwd)" = "$(readlink -m $RUN_IN)" ]; then
|
||||
echo "started"
|
||||
return 0
|
||||
fi
|
||||
done < <(ps ax -o 'pid cmd' | grep -P '^\s*\d+ python ./scripts/paster.py serve' | awk '{print $1}')
|
||||
echo "stopped"
|
||||
return 3
|
||||
galaxy_status() {
|
||||
if [[ $(grep '\[server:' $RUN_IN/config/galaxy.ini|awk -F'(:)|(])' '{ print $2 }') == 'main' ]]
|
||||
then
|
||||
echo -n "$SERVICE_NAME status: "
|
||||
status -p $RUN_IN/paster.pid galaxy
|
||||
else
|
||||
for proc in $(grep '\[server:' $RUN_IN/config/galaxy.ini|awk -F'(:)|(])' '{ print $2 }')
|
||||
do
|
||||
status -p $RUN_IN/${proc}.pid ${proc}
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
notsupported() {
|
||||
@@ -90,7 +92,7 @@ case "$1" in
|
||||
;;
|
||||
status)
|
||||
set +e
|
||||
status
|
||||
galaxy_status
|
||||
exit $?
|
||||
;;
|
||||
'')
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Init file for Galaxy (http://galaxyproject.org/)
|
||||
# Suitable for use on Fedora and derivatives (RedHat Enterprise Linux, Scientific Linux, CentOS)
|
||||
#
|
||||
# Contributed by Brad Chapman
|
||||
#
|
||||
# chkconfig: 2345 98 20
|
||||
# description: Galaxy http://galaxyproject.org/
|
||||
|
||||
#--- loading functions
|
||||
. /etc/init.d/functions
|
||||
#--- config
|
||||
|
||||
SERVICE_NAME="galaxy-reports"
|
||||
RUN_AS="galaxy"
|
||||
RUN_IN="/path/to/galaxy-dist"
|
||||
|
||||
#--- main actions
|
||||
|
||||
start() {
|
||||
echo "Starting $SERVICE_NAME... "
|
||||
cmd="cd $RUN_IN && sh run_reports.sh --daemon"
|
||||
case "$(id -un)" in
|
||||
$RUN_AS)
|
||||
eval "$cmd"
|
||||
;;
|
||||
root)
|
||||
su - $RUN_AS -c "$cmd"
|
||||
;;
|
||||
*)
|
||||
echo "*** ERROR *** must be $RUN_AS or root in order to control this service" >&2
|
||||
exit 1
|
||||
esac
|
||||
echo "...done."
|
||||
}
|
||||
|
||||
stop() {
|
||||
echo -n "Stopping $SERVICE_NAME... "
|
||||
|
||||
cmd="cd $RUN_IN && sh run_reports.sh --stop-daemon"
|
||||
|
||||
case "$(id -un)" in
|
||||
$RUN_AS)
|
||||
eval "$cmd"
|
||||
;;
|
||||
root)
|
||||
su - $RUN_AS -c "$cmd"
|
||||
;;
|
||||
*)
|
||||
echo "*** ERROR *** must be $RUN_AS or root in order to control this service" >&2
|
||||
exit 1
|
||||
esac
|
||||
|
||||
echo "done."
|
||||
}
|
||||
|
||||
notsupported() {
|
||||
echo "*** ERROR*** $SERVICE_NAME: operation [$1] not supported"
|
||||
}
|
||||
|
||||
usage() {
|
||||
echo "Usage: $SERVICE_NAME start|stop|restart|status"
|
||||
}
|
||||
|
||||
|
||||
#---
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start "$@"
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
restart|reload)
|
||||
stop
|
||||
start
|
||||
;;
|
||||
status)
|
||||
set +e
|
||||
echo -n "$SERVICE_NAME status: "
|
||||
status -p $RUN_IN/reports_webapp.pid $SERVICE_NAME
|
||||
exit $?
|
||||
;;
|
||||
'')
|
||||
usage >&2
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
notsupported "$1" >&2
|
||||
usage >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
+5
-3
@@ -1,9 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -d .venv ];
|
||||
: ${GALAXY_VIRTUAL_ENV:=.venv}
|
||||
|
||||
if [ -d "$GALAXY_VIRTUAL_ENV" ];
|
||||
then
|
||||
printf "Activating virtualenv at %s/.venv\n" $(pwd)
|
||||
. .venv/bin/activate
|
||||
printf "Activating virtualenv at $GALAXY_VIRTUAL_ENV\n"
|
||||
. "$GALAXY_VIRTUAL_ENV/bin/activate"
|
||||
fi
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<display id="iobio_bam" version="1.0.0" name="display at bam.iobio">
|
||||
<dynamic_links from_data_table="bam_iobio" skip_startswith="#" id="value" name="name">
|
||||
<url>${url}?bam=${bam_file.qp}</url>
|
||||
<param type="data" name="bam_file" url="galaxy_${DATASET_HASH}.bam" />
|
||||
<param type="data" name="bai_file" url="galaxy_${DATASET_HASH}.bam.bai" metadata="bam_index" />
|
||||
</dynamic_links>
|
||||
</display>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<display id="iobio_vcf" version="1.0.0" name="display at vcf.iobio">
|
||||
<dynamic_links from_data_table="vcf_iobio" skip_startswith="#" id="value" name="name">
|
||||
<url>${url}?vcf=${bgzip_file.qp}</url>
|
||||
<param type="data" name="bgzip_file" url="galaxy_${DATASET_HASH}.vcf.gz" format="vcf_bgzip" />
|
||||
<param type="data" name="tabix_file" dataset="bgzip_file" url="galaxy_${DATASET_HASH}.vcf.gz.tbi" format="tabix" />
|
||||
</dynamic_links>
|
||||
</display>
|
||||
@@ -125,10 +125,10 @@ virtualenv using the ``--no-create-venv`` option:
|
||||
repoze.lru, Routes, WebOb, WebHelpers, Mako, pytz, Babel, Beaker,
|
||||
Markdown, Cheetah, requests, requests-toolbelt, boto, bioblend, amqp,
|
||||
anyjson, kombu, pbr, sqlparse, decorator, Tempita, sqlalchemy-migrate,
|
||||
Parsley, nose, SVGFig, ecdsa, paramiko, Fabric, Whoosh, pysam
|
||||
Parsley, nose, svgwrite, ecdsa, paramiko, Fabric, Whoosh, pysam
|
||||
Successfully installed Babel-2.0 Beaker-1.7.0 Cheetah-2.4.4 Fabric-1.10.2
|
||||
Mako-1.0.2 Markdown-2.6.3 MarkupSafe-0.23 Parsley-1.3 Paste-2.0.2
|
||||
PasteDeploy-1.5.2 PyYAML-3.11 Routes-2.2 SQLAlchemy-1.0.8 SVGFig-1.1.6
|
||||
PasteDeploy-1.5.2 PyYAML-3.11 Routes-2.2 SQLAlchemy-1.0.8 svgwrite-1.1.6
|
||||
Tempita-0.5.3.dev0 WebHelpers-1.3 WebOb-1.4.1 Whoosh-2.4.1+gx1 amqp-1.4.8
|
||||
anyjson-0.3.3 bioblend-0.6.1 boto-2.38.0 bx-python-0.7.3 decorator-4.0.2
|
||||
docutils-0.12 ecdsa-0.13 kombu-3.0.30 mercurial-3.4.2 nose-1.3.7
|
||||
@@ -178,10 +178,8 @@ Galaxy to start without attempting to fetch wheels:
|
||||
$ sh run.sh --no-create-venv --skip-wheels
|
||||
|
||||
Including ``--index-url=https://wheels.galaxyproject.org/simple/`` is important
|
||||
- at least one current Galaxy dependency (SVGFig) is not available in PyPI but
|
||||
is available (in both source and wheel form) on `wheels.galaxyproject.org`_,
|
||||
and two (pysam, Whoosh) include modifications specific to Galaxy which are only
|
||||
available on `wheels.galaxyproject.org`_.
|
||||
as two dependencies (pysam, Whoosh) include modifications specific to Galaxy
|
||||
which are only available on `wheels.galaxyproject.org`_.
|
||||
|
||||
.. _unpinned requirements file: https://github.com/galaxyproject/galaxy/blob/dev/lib/galaxy/dependencies/requirements.txt
|
||||
|
||||
|
||||
+11
-1
@@ -41,6 +41,11 @@ app = None
|
||||
class UniverseApplication( object, config.ConfiguresGalaxyMixin ):
|
||||
"""Encapsulates the state of a Universe application"""
|
||||
def __init__( self, **kwargs ):
|
||||
if not log.handlers:
|
||||
# Paste didn't handle it, so we need a temporary basic log
|
||||
# configured. The handler added here gets dumped and replaced with
|
||||
# an appropriately configured logger in configure_logging below.
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
log.debug( "python path is: %s", ", ".join( sys.path ) )
|
||||
self.name = 'galaxy'
|
||||
self.new_installation = False
|
||||
@@ -49,7 +54,7 @@ class UniverseApplication( object, config.ConfiguresGalaxyMixin ):
|
||||
self.config.check()
|
||||
config.configure_logging( self.config )
|
||||
self.configure_fluent_log()
|
||||
|
||||
self.config.reload_sanitize_whitelist(explicit='sanitize_whitelist_file' in kwargs)
|
||||
self.amqp_internal_connection_obj = galaxy.queues.connection_from_config(self.config)
|
||||
# control_worker *can* be initialized with a queue, but here we don't
|
||||
# want to and we'll allow postfork to bind and start it.
|
||||
@@ -155,6 +160,11 @@ class UniverseApplication( object, config.ConfiguresGalaxyMixin ):
|
||||
self.heartbeat.start()
|
||||
if not config.process_is_uwsgi:
|
||||
_start()
|
||||
if self.config.sentry_dsn:
|
||||
import raven
|
||||
self.sentry_client = raven.Client(self.config.sentry_dsn)
|
||||
else:
|
||||
self.sentry_client = None
|
||||
# Transfer manager client
|
||||
if self.config.get_bool( 'enable_beta_job_managers', False ):
|
||||
from galaxy.jobs import transfer_manager
|
||||
|
||||
@@ -267,7 +267,6 @@ class Configuration( object ):
|
||||
self.log_events = string_as_bool( kwargs.get( 'log_events', 'False' ) )
|
||||
self.sanitize_all_html = string_as_bool( kwargs.get( 'sanitize_all_html', True ) )
|
||||
self.sanitize_whitelist_file = resolve_path( kwargs.get( 'sanitize_whitelist_file', "config/sanitize_whitelist.txt" ), self.root )
|
||||
self.reload_sanitize_whitelist()
|
||||
self.serve_xss_vulnerable_mimetypes = string_as_bool( kwargs.get( 'serve_xss_vulnerable_mimetypes', False ) )
|
||||
self.allowed_origin_hostnames = self._parse_allowed_origin_hostnames( kwargs )
|
||||
self.trust_ipython_notebook_conversion = string_as_bool( kwargs.get( 'trust_ipython_notebook_conversion', False ) )
|
||||
@@ -484,7 +483,7 @@ class Configuration( object ):
|
||||
else:
|
||||
return None
|
||||
|
||||
def reload_sanitize_whitelist( self ):
|
||||
def reload_sanitize_whitelist( self, explicit=True ):
|
||||
self.sanitize_whitelist = []
|
||||
try:
|
||||
with open(self.sanitize_whitelist_file, 'rt') as f:
|
||||
@@ -492,7 +491,8 @@ class Configuration( object ):
|
||||
if not line.startswith("#"):
|
||||
self.sanitize_whitelist.append(line.strip())
|
||||
except IOError:
|
||||
log.warning("Sanitize log file %s does not exist, continuing with no tools whitelisted.", self.sanitize_whitelist_file)
|
||||
if explicit:
|
||||
log.warning("Sanitize log file explicitly specified as '%s' but does not exist, continuing with no tools whitelisted.", self.sanitize_whitelist_file)
|
||||
|
||||
def __parse_config_file_options( self, kwargs ):
|
||||
"""
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_cml_to_inchi" name="CML to InChI" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -icml "${input}" -oinchi -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="cml" label="Molecules in CML-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="inchi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_cml_to_mol2" name="CML to mol2" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -icml "${input}" -omol2 -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="cml" label="Molecules in CML-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol2"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_cml_to_sdf" name="CML to SDF" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -icml "${input}" -osdf "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="cml" label="Molecules in CML-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="sdf"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,48 @@
|
||||
<tool id="CONVERTER_cml_to_smiles" name="CML to SMILES" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command >
|
||||
<![CDATA[
|
||||
obabel
|
||||
-icml "${input}"
|
||||
#if $can:
|
||||
-ocan
|
||||
#else:
|
||||
-osmi
|
||||
#end if
|
||||
-O "${output}"
|
||||
-e
|
||||
$remove_h
|
||||
#if $iso_chi or $can or $exp_h:
|
||||
-x$iso_chi$exp_h$can
|
||||
#end if
|
||||
#if $dative_bonds:
|
||||
-b
|
||||
#end if
|
||||
#if int($ph) >= 0:
|
||||
-p $ph
|
||||
#end if
|
||||
|
||||
2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="cml" label="Molecules in CML-format"/>
|
||||
<param name="iso_chi" type="boolean" label="Do not include isotopic or chiral markings (-xi)" truevalue="i" falsevalue="" checked="false" />
|
||||
<param name="can" type="boolean" label="Output in canonical form (-xc)" truevalue="c" falsevalue="" checked="false" />
|
||||
<param name="exp_h" type="boolean" label="Output explicit hydrogens as such (-xh)" truevalue="h" falsevalue="" checked="false" />
|
||||
<param name="remove_h" type="boolean" label="Delete hydrogen atoms (-d)" truevalue="-d" falsevalue="" />
|
||||
<param name="ph" type="float" value="-1" label="Add hydrogens appropriate for pH (-p)" help="-1 means deactivated"/>
|
||||
<param name="dative_bonds" type="boolean" label="Convert dative bonds (e.g. [N+]([O-])=O to N(=O)=O) (-b)" truevalue="-b" falsevalue="" />
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="smi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_inchi_to_cml" name="InChI to CML" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -iinchi "${input}" -ocml -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="inchi" label="Molecules in InChI format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="cml"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_inchi_to_mol2" name="InChI to MOL2" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -iinchi "${input}" -omol2 -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="inchi" label="Molecules in InChI format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol2"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_inchi_to_mol" name="InChI to MOL" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -iinchi "${input}" -omol -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="inchi" label="Molecules in InChI-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_inchi_to_sdf" name="InChI to SDF" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -iinchi "${input}" -osdf -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="inchi" label="Molecules in InChI format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="sdf"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_inchi_to_smi" name="InChI to SMILES" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -iinchi "${input}" -osmi -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="inchi" label="Molecules in InChI format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="smi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_mol2_to_cml" name="MOL2 to CML" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol2 "${input}" -ocml -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol2" label="Molecules in MOL2-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="cml"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_mol2_to_inchi" name="MOL2 to InChI" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol2 "${input}" -oinchi -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol2" label="Molecules in MOL2-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="inchi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_mol2_to_mol" name="MOL2 to MOL" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol2 "${input}" -omol -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol2" label="Molecules in MOL2-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_mol2_to_sdf" name="MOL2 to SDF" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol2 "${input}" -osdf "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol2" label="Molecules in MOL2-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="sdf"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_mol2_to_smi" name="MOL2 to SMILES" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol2 "${input}" -omol "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol2" label="Molecules in MOL2-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="smi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,21 @@
|
||||
<tool id="CONVERTER_mol_to_cml" name="MOL to CML" version="1.0.0">
|
||||
<description></description>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol "${input}" -ocml -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol" label="Molecules in MOL-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="cml"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,21 @@
|
||||
<tool id="CONVERTER_mol_to_mol2" name="MOL to MOL2" version="1.0.0">
|
||||
<description></description>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol "${input}" -omol2 -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol" label="Molecules in MOL-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol2"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,21 @@
|
||||
<tool id="CONVERTER_mol_to_mol2" name="MOL to MOL2" version="1.0.0">
|
||||
<description></description>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol "${input}" -omol2 -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol" label="Molecules in MOL-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol2"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,21 @@
|
||||
<tool id="CONVERTER_mol_to_smi" name="MOL to SMILES" version="1.0.0">
|
||||
<description></description>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -imol "${input}" -osmi -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="mol" label="Molecules in MOL-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="smi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_sdf_to_cml" name="SDF to CML" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -isdf "${input}" -ocml -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="sdf" label="Molecules in SDF-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="cml"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_sdf_to_inchi" name="SDF to InChI" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -isdf "${input}" -oinchi -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="sdf" label="Molecules in SDF-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="inchi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_sdf_to_mol2" name="SDF to mol2" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -isdf "${input}" -omol2 -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="sdf" label="Molecules in SDF-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol2"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,27 @@
|
||||
<tool id="CONVERTER_sdf_to_smiles" name="SDF to SMILES" version="1.0.1">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command >
|
||||
<![CDATA[
|
||||
obabel
|
||||
-isdf "${input}"
|
||||
-ocan
|
||||
-O "${output}"
|
||||
-e
|
||||
2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="sdf" label="Molecules in SDF-format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="smi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_SMILES_to_cml" name="SMILES to CML" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -ismi "${input}" -ocml -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="smi" label="Molecules in SMILES format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="cml"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_SMILES_to_inchi" name="SMILES to InChI" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -ismi "${input}" -oinchi -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="smi" label="Molecules in SMILES format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="inchi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_SMILES_to_MOL2" name="SMILES to MOL2" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -ismi "${input}" -omol2 -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="smi" label="Molecules in SMILES format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol2"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_SMILES_to_MOL" name="SMILES to MOL" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -ismi "${input}" -omol -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="smi" label="Molecules in SMILES format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="mol"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,22 @@
|
||||
<tool id="CONVERTER_SMILES_to_sdf" name="SMILES to SDF" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command>
|
||||
<![CDATA[
|
||||
obabel -ismi "${input}" -osdf -O "${output}" -e 2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="smi" label="Molecules in SMILES format"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="sdf"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -0,0 +1,48 @@
|
||||
<tool id="CONVERTER_smiles_to_smiles" name="SMILES to SMILES" version="1.0.0">
|
||||
<description></description>
|
||||
<parallelism method="multi" split_inputs="input" split_mode="to_size" split_size="10000" shared_inputs="" merge_outputs="output"></parallelism>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.3.2">openbabel</requirement>
|
||||
</requirements>
|
||||
<command >
|
||||
<![CDATA[
|
||||
obabel
|
||||
-ismi "${input}"
|
||||
#if $can:
|
||||
-ocan
|
||||
#else:
|
||||
-osmi
|
||||
#end if
|
||||
-O "${output}"
|
||||
-e
|
||||
$remove_h
|
||||
#if $iso_chi or $can or $exp_h:
|
||||
-x$iso_chi$exp_h$can
|
||||
#end if
|
||||
#if $dative_bonds:
|
||||
-b
|
||||
#end if
|
||||
#if int($ph) >= 0:
|
||||
-p $ph
|
||||
#end if
|
||||
|
||||
2>&1
|
||||
]]>
|
||||
</command>
|
||||
<inputs>
|
||||
<param name="input" type="data" format="smi" label="Molecules in SD-format"/>
|
||||
<param name="iso_chi" type="boolean" label="Do not include isotopic or chiral markings (-xi)" truevalue="i" falsevalue="" checked="false" />
|
||||
<param name="can" type="boolean" label="Output in canonical form (-xc)" truevalue="c" falsevalue="" checked="false" />
|
||||
<param name="exp_h" type="boolean" label="Output explicit hydrogens as such (-xh)" truevalue="h" falsevalue="" checked="false" />
|
||||
<param name="remove_h" type="boolean" label="Delete hydrogen atoms (-d)" truevalue="-d" falsevalue="" />
|
||||
<param name="ph" type="float" value="-1" label="Add hydrogens appropriate for pH (-p)" help="-1 means deactivated"/>
|
||||
<param name="dative_bonds" type="boolean" label="Convert dative bonds (e.g. [N+]([O-])=O to N(=O)=O) (-b)" truevalue="-b" falsevalue="" />
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output" format="smi"/>
|
||||
</outputs>
|
||||
<help>
|
||||
<![CDATA[
|
||||
]]>
|
||||
</help>
|
||||
</tool>
|
||||
@@ -142,7 +142,7 @@ class DynamicDisplayApplicationBuilder( object ):
|
||||
max_col = max( id_col, name_col )
|
||||
dynamic_params = {}
|
||||
if data_table is not None:
|
||||
max_col = max( [ max_col ] + data_table.columns.values() )
|
||||
max_col = max( [ max_col ] + data_table.columns.values() )
|
||||
for key, value in data_table.columns.items():
|
||||
dynamic_params[key] = { 'column': value, 'split': False, 'separator': ',' }
|
||||
for dynamic_param in elem.findall( 'dynamic_param' ):
|
||||
|
||||
@@ -0,0 +1,769 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from galaxy.datatypes import data
|
||||
import logging
|
||||
from galaxy.datatypes.sniff import get_headers
|
||||
from galaxy.datatypes.data import get_file_peek
|
||||
from galaxy.datatypes.tabular import Tabular
|
||||
from galaxy.datatypes.binary import Binary
|
||||
from galaxy.datatypes.xml import GenericXml
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
from galaxy.datatypes.metadata import MetadataElement
|
||||
from galaxy.datatypes import metadata
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def count_special_lines(word, filename, invert=False):
|
||||
"""
|
||||
searching for special 'words' using the grep tool
|
||||
grep is used to speed up the searching and counting
|
||||
The number of hits is returned.
|
||||
"""
|
||||
try:
|
||||
cmd = ["grep", "-c"]
|
||||
if invert:
|
||||
cmd.append('-v')
|
||||
cmd.extend([word, filename])
|
||||
out = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
||||
return int(out.communicate()[0].split()[0])
|
||||
except:
|
||||
pass
|
||||
return 0
|
||||
|
||||
|
||||
def count_lines(filename, non_empty=False):
|
||||
"""
|
||||
counting the number of lines from the 'filename' file
|
||||
"""
|
||||
try:
|
||||
if non_empty:
|
||||
out = subprocess.Popen(['grep', '-cve', '^\s*$', filename], stdout=subprocess.PIPE)
|
||||
else:
|
||||
out = subprocess.Popen(['wc', '-l', filename], stdout=subprocess.PIPE)
|
||||
return int(out.communicate()[0].split()[0])
|
||||
except:
|
||||
pass
|
||||
return 0
|
||||
|
||||
|
||||
class GenericMolFile(data.Text):
|
||||
"""
|
||||
abstract class for most of the molecule files
|
||||
"""
|
||||
MetadataElement(name="number_of_molecules", default=0, desc="Number of molecules", readonly=True, visible=True, optional=True, no_value=0)
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
if (dataset.metadata.number_of_molecules == 1):
|
||||
dataset.blurb = "1 molecule"
|
||||
else:
|
||||
dataset.blurb = "%s molecules" % dataset.metadata.number_of_molecules
|
||||
dataset.peek = data.get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
def get_mime(self):
|
||||
return 'text/plain'
|
||||
|
||||
|
||||
class MOL(GenericMolFile):
|
||||
file_ext = "mol"
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
"""
|
||||
Set the number molecules, in the case of MOL its always one.
|
||||
"""
|
||||
dataset.metadata.number_of_molecules = 1
|
||||
|
||||
|
||||
class SDF(GenericMolFile):
|
||||
file_ext = "sdf"
|
||||
|
||||
def sniff(self, filename):
|
||||
"""
|
||||
Try to guess if the file is a SDF2 file.
|
||||
|
||||
>>> from galaxy.datatypes.sniff import get_test_fname
|
||||
>>> fname = get_test_fname('drugbank_drugs.sdf')
|
||||
>>> SDF().sniff(fname)
|
||||
True
|
||||
|
||||
>>> fname = get_test_fname('drugbank_drugs.cml')
|
||||
>>> SDF().sniff(fname)
|
||||
False
|
||||
"""
|
||||
counter = count_special_lines("^M\s*END", filename) + count_special_lines("^\$\$\$\$", filename)
|
||||
if counter > 0 and counter % 2 == 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
"""
|
||||
Set the number of molecules in dataset.
|
||||
"""
|
||||
dataset.metadata.number_of_molecules = count_special_lines("^\$\$\$\$", dataset.file_name)
|
||||
|
||||
def split(cls, input_datasets, subdir_generator_function, split_params):
|
||||
"""
|
||||
Split the input files by molecule records.
|
||||
"""
|
||||
if split_params is None:
|
||||
return None
|
||||
|
||||
if len(input_datasets) > 1:
|
||||
raise Exception("SD-file splitting does not support multiple files")
|
||||
input_files = [ds.file_name for ds in input_datasets]
|
||||
|
||||
chunk_size = None
|
||||
if split_params['split_mode'] == 'number_of_parts':
|
||||
raise Exception('Split mode "%s" is currently not implemented for SD-files.' % split_params['split_mode'])
|
||||
elif split_params['split_mode'] == 'to_size':
|
||||
chunk_size = int(split_params['split_size'])
|
||||
else:
|
||||
raise Exception('Unsupported split mode %s' % split_params['split_mode'])
|
||||
|
||||
def _read_sdf_records(filename):
|
||||
lines = []
|
||||
with open(filename) as handle:
|
||||
for line in handle:
|
||||
lines.append(line)
|
||||
if line.startswith("$$$$"):
|
||||
yield lines
|
||||
lines = []
|
||||
|
||||
def _write_part_sdf_file(accumulated_lines):
|
||||
part_dir = subdir_generator_function()
|
||||
part_path = os.path.join(part_dir, os.path.basename(input_files[0]))
|
||||
part_file = open(part_path, 'w')
|
||||
part_file.writelines(accumulated_lines)
|
||||
part_file.close()
|
||||
|
||||
try:
|
||||
sdf_records = _read_sdf_records(input_files[0])
|
||||
sdf_lines_accumulated = []
|
||||
for counter, sdf_record in enumerate(sdf_records, start=1):
|
||||
sdf_lines_accumulated.extend(sdf_record)
|
||||
if counter % chunk_size == 0:
|
||||
_write_part_sdf_file(sdf_lines_accumulated)
|
||||
sdf_lines_accumulated = []
|
||||
if sdf_lines_accumulated:
|
||||
_write_part_sdf_file(sdf_lines_accumulated)
|
||||
except Exception, e:
|
||||
log.error('Unable to split files: %s' % str(e))
|
||||
raise
|
||||
split = classmethod(split)
|
||||
|
||||
|
||||
class MOL2(GenericMolFile):
|
||||
file_ext = "mol2"
|
||||
|
||||
def sniff(self, filename):
|
||||
"""
|
||||
Try to guess if the file is a MOL2 file.
|
||||
|
||||
>>> from galaxy.datatypes.sniff import get_test_fname
|
||||
>>> fname = get_test_fname('drugbank_drugs.mol2')
|
||||
>>> MOL2().sniff(fname)
|
||||
True
|
||||
|
||||
>>> fname = get_test_fname('drugbank_drugs.cml')
|
||||
>>> MOL2().sniff(fname)
|
||||
False
|
||||
"""
|
||||
if count_special_lines("@<TRIPOS>MOLECULE", filename) > 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
"""
|
||||
Set the number of lines of data in dataset.
|
||||
"""
|
||||
dataset.metadata.number_of_molecules = count_special_lines("@<TRIPOS>MOLECULE", dataset.file_name)
|
||||
|
||||
def split(cls, input_datasets, subdir_generator_function, split_params):
|
||||
"""
|
||||
Split the input files by molecule records.
|
||||
"""
|
||||
if split_params is None:
|
||||
return None
|
||||
|
||||
if len(input_datasets) > 1:
|
||||
raise Exception("MOL2-file splitting does not support multiple files")
|
||||
input_files = [ds.file_name for ds in input_datasets]
|
||||
|
||||
chunk_size = None
|
||||
if split_params['split_mode'] == 'number_of_parts':
|
||||
raise Exception('Split mode "%s" is currently not implemented for MOL2-files.' % split_params['split_mode'])
|
||||
elif split_params['split_mode'] == 'to_size':
|
||||
chunk_size = int(split_params['split_size'])
|
||||
else:
|
||||
raise Exception('Unsupported split mode %s' % split_params['split_mode'])
|
||||
|
||||
def _read_mol2_records(filename):
|
||||
lines = []
|
||||
start = True
|
||||
with open(filename) as handle:
|
||||
for line in handle:
|
||||
if line.startswith("@<TRIPOS>MOLECULE"):
|
||||
if start:
|
||||
start = False
|
||||
else:
|
||||
yield lines
|
||||
lines = []
|
||||
lines.append(line)
|
||||
|
||||
def _write_part_mol2_file(accumulated_lines):
|
||||
part_dir = subdir_generator_function()
|
||||
part_path = os.path.join(part_dir, os.path.basename(input_files[0]))
|
||||
part_file = open(part_path, 'w')
|
||||
part_file.writelines(accumulated_lines)
|
||||
part_file.close()
|
||||
|
||||
try:
|
||||
mol2_records = _read_mol2_records(input_files[0])
|
||||
mol2_lines_accumulated = []
|
||||
for counter, mol2_record in enumerate(mol2_records, start=1):
|
||||
mol2_lines_accumulated.extend(mol2_record)
|
||||
if counter % chunk_size == 0:
|
||||
_write_part_mol2_file(mol2_lines_accumulated)
|
||||
mol2_lines_accumulated = []
|
||||
if mol2_lines_accumulated:
|
||||
_write_part_mol2_file(mol2_lines_accumulated)
|
||||
except Exception, e:
|
||||
log.error('Unable to split files: %s' % str(e))
|
||||
raise
|
||||
split = classmethod(split)
|
||||
|
||||
|
||||
class FPS(GenericMolFile):
|
||||
"""
|
||||
chemfp fingerprint file: http://code.google.com/p/chem-fingerprints/wiki/FPS
|
||||
"""
|
||||
file_ext = "fps"
|
||||
|
||||
def sniff(self, filename):
|
||||
"""
|
||||
Try to guess if the file is a FPS file.
|
||||
|
||||
>>> from galaxy.datatypes.sniff import get_test_fname
|
||||
>>> fname = get_test_fname('q.fps')
|
||||
>>> FPS().sniff(fname)
|
||||
True
|
||||
|
||||
>>> fname = get_test_fname('drugbank_drugs.cml')
|
||||
>>> FPS().sniff(fname)
|
||||
False
|
||||
"""
|
||||
header = get_headers(filename, sep='\t', count=1)
|
||||
if header[0][0].strip() == '#FPS1':
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
"""
|
||||
Set the number of lines of data in dataset.
|
||||
"""
|
||||
dataset.metadata.number_of_molecules = count_special_lines('^#', dataset.file_name, invert=True)
|
||||
|
||||
def split(cls, input_datasets, subdir_generator_function, split_params):
|
||||
"""
|
||||
Split the input files by fingerprint records.
|
||||
"""
|
||||
if split_params is None:
|
||||
return None
|
||||
|
||||
if len(input_datasets) > 1:
|
||||
raise Exception("FPS-file splitting does not support multiple files")
|
||||
input_files = [ds.file_name for ds in input_datasets]
|
||||
|
||||
chunk_size = None
|
||||
if split_params['split_mode'] == 'number_of_parts':
|
||||
raise Exception('Split mode "%s" is currently not implemented for MOL2-files.' % split_params['split_mode'])
|
||||
elif split_params['split_mode'] == 'to_size':
|
||||
chunk_size = int(split_params['split_size'])
|
||||
else:
|
||||
raise Exception('Unsupported split mode %s' % split_params['split_mode'])
|
||||
|
||||
def _write_part_fingerprint_file(accumulated_lines):
|
||||
part_dir = subdir_generator_function()
|
||||
part_path = os.path.join(part_dir, os.path.basename(input_files[0]))
|
||||
part_file = open(part_path, 'w')
|
||||
part_file.writelines(accumulated_lines)
|
||||
part_file.close()
|
||||
|
||||
try:
|
||||
header_lines = []
|
||||
lines_accumulated = []
|
||||
fingerprint_counter = 0
|
||||
for line in open(input_files[0]):
|
||||
if not line.strip():
|
||||
continue
|
||||
if line.startswith('#'):
|
||||
header_lines.append(line)
|
||||
else:
|
||||
fingerprint_counter += 1
|
||||
lines_accumulated.append(line)
|
||||
if fingerprint_counter != 0 and fingerprint_counter % chunk_size == 0:
|
||||
_write_part_fingerprint_file(header_lines + lines_accumulated)
|
||||
lines_accumulated = []
|
||||
if lines_accumulated:
|
||||
_write_part_fingerprint_file(header_lines + lines_accumulated)
|
||||
except Exception, e:
|
||||
log.error('Unable to split files: %s' % str(e))
|
||||
raise
|
||||
split = classmethod(split)
|
||||
|
||||
def merge(split_files, output_file):
|
||||
"""
|
||||
Merging fps files requires merging the header manually.
|
||||
We take the header from the first file.
|
||||
"""
|
||||
if len(split_files) == 1:
|
||||
# For one file only, use base class method (move/copy)
|
||||
return data.Text.merge(split_files, output_file)
|
||||
if not split_files:
|
||||
raise ValueError("No fps files given, %r, to merge into %s"
|
||||
% (split_files, output_file))
|
||||
out = open(output_file, "w")
|
||||
first = True
|
||||
for filename in split_files:
|
||||
with open(filename) as handle:
|
||||
for line in handle:
|
||||
if line.startswith('#'):
|
||||
if first:
|
||||
out.write(line)
|
||||
else:
|
||||
# line is no header and not a comment, we assume the first header is written to out and we set 'first' to False
|
||||
first = False
|
||||
out.write(line)
|
||||
out.close()
|
||||
merge = staticmethod(merge)
|
||||
|
||||
|
||||
class OBFS(Binary):
|
||||
"""OpenBabel Fastsearch format (fs)."""
|
||||
file_ext = 'fs'
|
||||
composite_type = 'basic'
|
||||
allow_datatype_change = False
|
||||
|
||||
MetadataElement(name="base_name", default='OpenBabel Fastsearch Index',
|
||||
readonly=True, visible=True, optional=True,)
|
||||
|
||||
def __init__(self, **kwd):
|
||||
"""
|
||||
A Fastsearch Index consists of a binary file with the fingerprints
|
||||
and a pointer the actual molecule file.
|
||||
"""
|
||||
Binary.__init__(self, **kwd)
|
||||
self.add_composite_file('molecule.fs', is_binary=True,
|
||||
description='OpenBabel Fastsearch Index')
|
||||
self.add_composite_file('molecule.sdf', optional=True,
|
||||
is_binary=False, description='Molecule File')
|
||||
self.add_composite_file('molecule.smi', optional=True,
|
||||
is_binary=False, description='Molecule File')
|
||||
self.add_composite_file('molecule.inchi', optional=True,
|
||||
is_binary=False, description='Molecule File')
|
||||
self.add_composite_file('molecule.mol2', optional=True,
|
||||
is_binary=False, description='Molecule File')
|
||||
self.add_composite_file('molecule.cml', optional=True,
|
||||
is_binary=False, description='Molecule File')
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
"""Set the peek and blurb text."""
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = "OpenBabel Fastsearch Index"
|
||||
dataset.blurb = "OpenBabel Fastsearch Index"
|
||||
else:
|
||||
dataset.peek = "file does not exist"
|
||||
dataset.blurb = "file purged from disk"
|
||||
|
||||
def display_peek(self, dataset):
|
||||
"""Create HTML content, used for displaying peek."""
|
||||
try:
|
||||
return dataset.peek
|
||||
except:
|
||||
return "OpenBabel Fastsearch Index"
|
||||
|
||||
def display_data(self, trans, data, preview=False, filename=None,
|
||||
to_ext=None, size=None, offset=None, **kwd):
|
||||
"""Apparently an old display method, but still gets called.
|
||||
|
||||
This allows us to format the data shown in the central pane via the "eye" icon.
|
||||
"""
|
||||
return "This is a OpenBabel Fastsearch format. You can speed up your similarity and substructure search with it."
|
||||
|
||||
def get_mime(self):
|
||||
"""Returns the mime type of the datatype (pretend it is text for peek)"""
|
||||
return 'text/plain'
|
||||
|
||||
def merge(split_files, output_file, extra_merge_args):
|
||||
"""Merging Fastsearch indices is not supported."""
|
||||
raise NotImplementedError("Merging Fastsearch indices is not supported.")
|
||||
|
||||
def split(cls, input_datasets, subdir_generator_function, split_params):
|
||||
"""Splitting Fastsearch indices is not supported."""
|
||||
if split_params is None:
|
||||
return None
|
||||
raise NotImplementedError("Splitting Fastsearch indices is not possible.")
|
||||
|
||||
|
||||
class DRF(GenericMolFile):
|
||||
file_ext = "drf"
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
"""
|
||||
Set the number of lines of data in dataset.
|
||||
"""
|
||||
dataset.metadata.number_of_molecules = count_special_lines('\"ligand id\"', dataset.file_name, invert=True)
|
||||
|
||||
|
||||
class PHAR(GenericMolFile):
|
||||
"""
|
||||
Pharmacophore database format from silicos-it.
|
||||
"""
|
||||
file_ext = "phar"
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
dataset.blurb = "pharmacophore"
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
|
||||
class PDB(GenericMolFile):
|
||||
"""
|
||||
Protein Databank format.
|
||||
http://www.wwpdb.org/documentation/format33/v3.3.html
|
||||
"""
|
||||
file_ext = "pdb"
|
||||
|
||||
def sniff(self, filename):
|
||||
"""
|
||||
Try to guess if the file is a PDB file.
|
||||
|
||||
>>> from galaxy.datatypes.sniff import get_test_fname
|
||||
>>> fname = get_test_fname('5e5z.pdb')
|
||||
>>> PDB().sniff(fname)
|
||||
True
|
||||
|
||||
>>> fname = get_test_fname('drugbank_drugs.cml')
|
||||
>>> PDB().sniff(fname)
|
||||
False
|
||||
"""
|
||||
headers = get_headers(filename, sep=' ', count=300)
|
||||
h = t = c = s = k = e = False
|
||||
for line in headers:
|
||||
section_name = line[0].strip()
|
||||
if section_name == 'HEADER':
|
||||
h = True
|
||||
elif section_name == 'TITLE':
|
||||
t = True
|
||||
elif section_name == 'COMPND':
|
||||
c = True
|
||||
elif section_name == 'SOURCE':
|
||||
s = True
|
||||
elif section_name == 'KEYWDS':
|
||||
k = True
|
||||
elif section_name == 'EXPDTA':
|
||||
e = True
|
||||
|
||||
if h * t * c * s * k * e:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
if not dataset.dataset.purged:
|
||||
atom_numbers = count_special_lines("^ATOM", dataset.file_name)
|
||||
hetatm_numbers = count_special_lines("^HETATM", dataset.file_name)
|
||||
dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
dataset.blurb = "%s atoms and %s HET-atoms" % (atom_numbers, hetatm_numbers)
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
|
||||
class grd(data.Text):
|
||||
file_ext = "grd"
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
dataset.blurb = "grids for docking"
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
|
||||
class grdtgz(Binary):
|
||||
file_ext = "grd.tgz"
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = 'binary data'
|
||||
dataset.blurb = "compressed grids for docking"
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
|
||||
class InChI(Tabular):
|
||||
file_ext = "inchi"
|
||||
column_names = ['InChI']
|
||||
MetadataElement(name="columns", default=2, desc="Number of columns", readonly=True, visible=False)
|
||||
MetadataElement(name="column_types", default=['str'], param=metadata.ColumnTypesParameter, desc="Column types", readonly=True, visible=False)
|
||||
MetadataElement(name="number_of_molecules", default=0, desc="Number of molecules", readonly=True, visible=True, optional=True, no_value=0)
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
"""
|
||||
Set the number of lines of data in dataset.
|
||||
"""
|
||||
dataset.metadata.number_of_molecules = self.count_data_lines(dataset)
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
if (dataset.metadata.number_of_molecules == 1):
|
||||
dataset.blurb = "1 molecule"
|
||||
else:
|
||||
dataset.blurb = "%s molecules" % dataset.metadata.number_of_molecules
|
||||
dataset.peek = data.get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
def sniff(self, filename):
|
||||
"""
|
||||
Try to guess if the file is a InChI file.
|
||||
|
||||
>>> from galaxy.datatypes.sniff import get_test_fname
|
||||
>>> fname = get_test_fname('drugbank_drugs.inchi')
|
||||
>>> InChI().sniff(fname)
|
||||
True
|
||||
|
||||
>>> fname = get_test_fname('drugbank_drugs.cml')
|
||||
>>> InChI().sniff(fname)
|
||||
False
|
||||
"""
|
||||
inchi_lines = get_headers(filename, sep=' ', count=10)
|
||||
for inchi in inchi_lines:
|
||||
if not inchi[0].startswith('InChI='):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
class SMILES(Tabular):
|
||||
file_ext = "smi"
|
||||
column_names = ['SMILES', 'TITLE']
|
||||
MetadataElement(name="columns", default=2, desc="Number of columns", readonly=True, visible=False)
|
||||
MetadataElement(name="column_types", default=['str', 'str'], param=metadata.ColumnTypesParameter, desc="Column types", readonly=True, visible=False)
|
||||
MetadataElement(name="number_of_molecules", default=0, desc="Number of molecules", readonly=True, visible=True, optional=True, no_value=0)
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
"""
|
||||
Set the number of lines of data in dataset.
|
||||
"""
|
||||
dataset.metadata.number_of_molecules = self.count_data_lines(dataset)
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
if dataset.metadata.number_of_molecules == 1:
|
||||
dataset.blurb = "1 molecule"
|
||||
else:
|
||||
dataset.blurb = "%s molecules" % dataset.metadata.number_of_molecules
|
||||
dataset.peek = data.get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
'''
|
||||
def sniff(self, filename):
|
||||
"""
|
||||
Its hard or impossible to sniff a SMILES File. We can
|
||||
try to import the first SMILES and check if it is a molecule, but
|
||||
currently its not possible to use external libraries in datatype definition files.
|
||||
Moreover it seems mpossible to inlcude OpenBabel as python library because OpenBabel
|
||||
is GPL licensed.
|
||||
"""
|
||||
self.molecule_number = count_lines(filename, non_empty = True)
|
||||
word_count = count_lines(filename)
|
||||
|
||||
if self.molecule_number != word_count:
|
||||
return False
|
||||
|
||||
if self.molecule_number > 0:
|
||||
# test first 3 SMILES
|
||||
smiles_lines = get_headers(filename, sep='\t', count=3)
|
||||
for smiles_line in smiles_lines:
|
||||
if len(smiles_line) > 2:
|
||||
return False
|
||||
smiles = smiles_line[0]
|
||||
try:
|
||||
# if we have atoms, we have a molecule
|
||||
if not len(pybel.readstring('smi', smiles).atoms) > 0:
|
||||
return False
|
||||
except:
|
||||
# if convert fails its not a smiles string
|
||||
return False
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
'''
|
||||
|
||||
|
||||
class CML(GenericXml):
|
||||
"""
|
||||
Chemical Markup Language
|
||||
http://cml.sourceforge.net/
|
||||
"""
|
||||
file_ext = "cml"
|
||||
MetadataElement(name="number_of_molecules", default=0, desc="Number of molecules", readonly=True, visible=True, optional=True, no_value=0)
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
"""
|
||||
Set the number of lines of data in dataset.
|
||||
"""
|
||||
dataset.metadata.number_of_molecules = count_special_lines('^\s*<molecule', dataset.file_name)
|
||||
|
||||
def set_peek(self, dataset, is_multi_byte=False):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
if (dataset.metadata.number_of_molecules == 1):
|
||||
dataset.blurb = "1 molecule"
|
||||
else:
|
||||
dataset.blurb = "%s molecules" % dataset.metadata.number_of_molecules
|
||||
dataset.peek = data.get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
def sniff(self, filename):
|
||||
"""
|
||||
Try to guess if the file is a CML file.
|
||||
|
||||
>>> from galaxy.datatypes.sniff import get_test_fname
|
||||
>>> fname = get_test_fname('interval.interval')
|
||||
>>> CML().sniff(fname)
|
||||
False
|
||||
|
||||
>>> fname = get_test_fname('drugbank_drugs.cml')
|
||||
>>> CML().sniff(fname)
|
||||
True
|
||||
"""
|
||||
handle = open(filename)
|
||||
line = handle.readline()
|
||||
if line.strip() != '<?xml version="1.0"?>':
|
||||
handle.close()
|
||||
return False
|
||||
line = handle.readline()
|
||||
if line.strip().find('http://www.xml-cml.org/schema') == -1:
|
||||
handle.close()
|
||||
return False
|
||||
handle.close()
|
||||
return True
|
||||
|
||||
def split(cls, input_datasets, subdir_generator_function, split_params):
|
||||
"""
|
||||
Split the input files by molecule records.
|
||||
"""
|
||||
if split_params is None:
|
||||
return None
|
||||
|
||||
if len(input_datasets) > 1:
|
||||
raise Exception("CML-file splitting does not support multiple files")
|
||||
input_files = [ds.file_name for ds in input_datasets]
|
||||
|
||||
chunk_size = None
|
||||
if split_params['split_mode'] == 'number_of_parts':
|
||||
raise Exception('Split mode "%s" is currently not implemented for CML-files.' % split_params['split_mode'])
|
||||
elif split_params['split_mode'] == 'to_size':
|
||||
chunk_size = int(split_params['split_size'])
|
||||
else:
|
||||
raise Exception('Unsupported split mode %s' % split_params['split_mode'])
|
||||
|
||||
def _read_cml_records(filename):
|
||||
lines = []
|
||||
with open(filename) as handle:
|
||||
for line in handle:
|
||||
if line.lstrip().startswith('<?xml version="1.0"?>') or \
|
||||
line.lstrip().startswith('<cml xmlns="http://www.xml-cml.org/schema') or \
|
||||
line.lstrip().startswith('</cml>'):
|
||||
continue
|
||||
lines.append(line)
|
||||
if line.lstrip().startswith('</molecule>'):
|
||||
yield lines
|
||||
lines = []
|
||||
|
||||
header_lines = ['<?xml version="1.0"?>\n', '<cml xmlns="http://www.xml-cml.org/schema">\n']
|
||||
footer_line = ['</cml>\n']
|
||||
|
||||
def _write_part_cml_file(accumulated_lines):
|
||||
part_dir = subdir_generator_function()
|
||||
part_path = os.path.join(part_dir, os.path.basename(input_files[0]))
|
||||
part_file = open(part_path, 'w')
|
||||
part_file.writelines(header_lines)
|
||||
part_file.writelines(accumulated_lines)
|
||||
part_file.writelines(footer_line)
|
||||
part_file.close()
|
||||
|
||||
try:
|
||||
cml_records = _read_cml_records(input_files[0])
|
||||
cml_lines_accumulated = []
|
||||
for counter, cml_record in enumerate(cml_records, start=1):
|
||||
cml_lines_accumulated.extend(cml_record)
|
||||
if counter % chunk_size == 0:
|
||||
_write_part_cml_file(cml_lines_accumulated)
|
||||
cml_lines_accumulated = []
|
||||
if cml_lines_accumulated:
|
||||
_write_part_cml_file(cml_lines_accumulated)
|
||||
except Exception, e:
|
||||
log.error('Unable to split files: %s' % str(e))
|
||||
raise
|
||||
split = classmethod(split)
|
||||
|
||||
def merge(split_files, output_file):
|
||||
"""
|
||||
Merging CML files.
|
||||
"""
|
||||
if len(split_files) == 1:
|
||||
# For one file only, use base class method (move/copy)
|
||||
return data.Text.merge(split_files, output_file)
|
||||
if not split_files:
|
||||
raise ValueError("Given no CML files, %r, to merge into %s"
|
||||
% (split_files, output_file))
|
||||
with open(output_file, "w") as out:
|
||||
for filename in split_files:
|
||||
with open(filename) as handle:
|
||||
header = handle.readline()
|
||||
if not header:
|
||||
raise ValueError("CML file %s was empty" % filename)
|
||||
if not header.lstrip().startswith('<?xml version="1.0"?>'):
|
||||
out.write(header)
|
||||
raise ValueError("%s is not a valid XML file!" % filename)
|
||||
line = handle.readline()
|
||||
header += line
|
||||
if not line.lstrip().startswith('<cml xmlns="http://www.xml-cml.org/schema'):
|
||||
out.write(header)
|
||||
raise ValueError("%s is not a CML file!" % filename)
|
||||
molecule_found = False
|
||||
for line in handle.readlines():
|
||||
# We found two required header lines, the next line should start with <molecule >
|
||||
if line.lstrip().startswith('</cml>'):
|
||||
continue
|
||||
if line.lstrip().startswith('<molecule'):
|
||||
molecule_found = True
|
||||
if molecule_found:
|
||||
out.write(line)
|
||||
out.write("</cml>\n")
|
||||
merge = staticmethod(merge)
|
||||
@@ -647,81 +647,81 @@ class Registry( object ):
|
||||
# Default values.
|
||||
if not self.datatypes_by_extension:
|
||||
self.datatypes_by_extension = {
|
||||
'ab1' : binary.Ab1(),
|
||||
'axt' : sequence.Axt(),
|
||||
'bam' : binary.Bam(),
|
||||
'bed' : interval.Bed(),
|
||||
'coverage' : coverage.LastzCoverage(),
|
||||
'customtrack' : interval.CustomTrack(),
|
||||
'csfasta' : sequence.csFasta(),
|
||||
'db3' : binary.SQlite(),
|
||||
'fasta' : sequence.Fasta(),
|
||||
'eland' : tabular.Eland(),
|
||||
'fastq' : sequence.Fastq(),
|
||||
'fastqsanger' : sequence.FastqSanger(),
|
||||
'ab1' : binary.Ab1(),
|
||||
'axt' : sequence.Axt(),
|
||||
'bam' : binary.Bam(),
|
||||
'bed' : interval.Bed(),
|
||||
'coverage' : coverage.LastzCoverage(),
|
||||
'customtrack' : interval.CustomTrack(),
|
||||
'csfasta' : sequence.csFasta(),
|
||||
'db3' : binary.SQlite(),
|
||||
'fasta' : sequence.Fasta(),
|
||||
'eland' : tabular.Eland(),
|
||||
'fastq' : sequence.Fastq(),
|
||||
'fastqsanger' : sequence.FastqSanger(),
|
||||
'gemini.sqlite' : binary.GeminiSQLite(),
|
||||
'gtf' : interval.Gtf(),
|
||||
'gff' : interval.Gff(),
|
||||
'gff3' : interval.Gff3(),
|
||||
'genetrack' : tracks.GeneTrack(),
|
||||
'h5' : binary.H5(),
|
||||
'idpdb' : binary.IdpDB(),
|
||||
'interval' : interval.Interval(),
|
||||
'laj' : images.Laj(),
|
||||
'lav' : sequence.Lav(),
|
||||
'maf' : sequence.Maf(),
|
||||
'mz.sqlite' : binary.MzSQlite(),
|
||||
'pileup' : tabular.Pileup(),
|
||||
'qualsolid' : qualityscore.QualityScoreSOLiD(),
|
||||
'qualsolexa' : qualityscore.QualityScoreSolexa(),
|
||||
'qual454' : qualityscore.QualityScore454(),
|
||||
'sam' : tabular.Sam(),
|
||||
'scf' : binary.Scf(),
|
||||
'sff' : binary.Sff(),
|
||||
'tabular' : tabular.Tabular(),
|
||||
'csv' : tabular.CSV(),
|
||||
'taxonomy' : tabular.Taxonomy(),
|
||||
'txt' : data.Text(),
|
||||
'wig' : interval.Wiggle(),
|
||||
'xml' : xml.GenericXml(),
|
||||
'gtf' : interval.Gtf(),
|
||||
'gff' : interval.Gff(),
|
||||
'gff3' : interval.Gff3(),
|
||||
'genetrack' : tracks.GeneTrack(),
|
||||
'h5' : binary.H5(),
|
||||
'idpdb' : binary.IdpDB(),
|
||||
'interval' : interval.Interval(),
|
||||
'laj' : images.Laj(),
|
||||
'lav' : sequence.Lav(),
|
||||
'maf' : sequence.Maf(),
|
||||
'mz.sqlite' : binary.MzSQlite(),
|
||||
'pileup' : tabular.Pileup(),
|
||||
'qualsolid' : qualityscore.QualityScoreSOLiD(),
|
||||
'qualsolexa' : qualityscore.QualityScoreSolexa(),
|
||||
'qual454' : qualityscore.QualityScore454(),
|
||||
'sam' : tabular.Sam(),
|
||||
'scf' : binary.Scf(),
|
||||
'sff' : binary.Sff(),
|
||||
'tabular' : tabular.Tabular(),
|
||||
'csv' : tabular.CSV(),
|
||||
'taxonomy' : tabular.Taxonomy(),
|
||||
'txt' : data.Text(),
|
||||
'wig' : interval.Wiggle(),
|
||||
'xml' : xml.GenericXml(),
|
||||
}
|
||||
self.mimetypes_by_extension = {
|
||||
'ab1' : 'application/octet-stream',
|
||||
'axt' : 'text/plain',
|
||||
'bam' : 'application/octet-stream',
|
||||
'bed' : 'text/plain',
|
||||
'customtrack' : 'text/plain',
|
||||
'csfasta' : 'text/plain',
|
||||
'db3' : 'application/octet-stream',
|
||||
'eland' : 'application/octet-stream',
|
||||
'fasta' : 'text/plain',
|
||||
'fastq' : 'text/plain',
|
||||
'fastqsanger' : 'text/plain',
|
||||
'ab1' : 'application/octet-stream',
|
||||
'axt' : 'text/plain',
|
||||
'bam' : 'application/octet-stream',
|
||||
'bed' : 'text/plain',
|
||||
'customtrack' : 'text/plain',
|
||||
'csfasta' : 'text/plain',
|
||||
'db3' : 'application/octet-stream',
|
||||
'eland' : 'application/octet-stream',
|
||||
'fasta' : 'text/plain',
|
||||
'fastq' : 'text/plain',
|
||||
'fastqsanger' : 'text/plain',
|
||||
'gemini.sqlite' : 'application/octet-stream',
|
||||
'gtf' : 'text/plain',
|
||||
'gff' : 'text/plain',
|
||||
'gff3' : 'text/plain',
|
||||
'h5' : 'application/octet-stream',
|
||||
'idpdb' : 'application/octet-stream',
|
||||
'interval' : 'text/plain',
|
||||
'laj' : 'text/plain',
|
||||
'lav' : 'text/plain',
|
||||
'maf' : 'text/plain',
|
||||
'memexml' : 'application/xml',
|
||||
'mz.sqlite' : 'application/octet-stream',
|
||||
'pileup' : 'text/plain',
|
||||
'qualsolid' : 'text/plain',
|
||||
'qualsolexa' : 'text/plain',
|
||||
'qual454' : 'text/plain',
|
||||
'sam' : 'text/plain',
|
||||
'scf' : 'application/octet-stream',
|
||||
'sff' : 'application/octet-stream',
|
||||
'tabular' : 'text/plain',
|
||||
'csv' : 'text/plain',
|
||||
'taxonomy' : 'text/plain',
|
||||
'txt' : 'text/plain',
|
||||
'wig' : 'text/plain',
|
||||
'xml' : 'application/xml',
|
||||
'gtf' : 'text/plain',
|
||||
'gff' : 'text/plain',
|
||||
'gff3' : 'text/plain',
|
||||
'h5' : 'application/octet-stream',
|
||||
'idpdb' : 'application/octet-stream',
|
||||
'interval' : 'text/plain',
|
||||
'laj' : 'text/plain',
|
||||
'lav' : 'text/plain',
|
||||
'maf' : 'text/plain',
|
||||
'memexml' : 'application/xml',
|
||||
'mz.sqlite' : 'application/octet-stream',
|
||||
'pileup' : 'text/plain',
|
||||
'qualsolid' : 'text/plain',
|
||||
'qualsolexa' : 'text/plain',
|
||||
'qual454' : 'text/plain',
|
||||
'sam' : 'text/plain',
|
||||
'scf' : 'application/octet-stream',
|
||||
'sff' : 'application/octet-stream',
|
||||
'tabular' : 'text/plain',
|
||||
'csv' : 'text/plain',
|
||||
'taxonomy' : 'text/plain',
|
||||
'txt' : 'text/plain',
|
||||
'wig' : 'text/plain',
|
||||
'xml' : 'application/xml',
|
||||
}
|
||||
# super supertype fix for input steps in workflows.
|
||||
if 'data' not in self.datatypes_by_extension:
|
||||
|
||||
@@ -263,8 +263,9 @@ def guess_ext( fname, sniff_order, is_multi_byte=False ):
|
||||
|
||||
>>> fname = get_test_fname('megablast_xml_parser_test1.blastxml')
|
||||
>>> from galaxy.datatypes import registry
|
||||
>>> sample_conf = os.path.join(util.galaxy_directory(), "config", "datatypes_conf.xml.sample")
|
||||
>>> datatypes_registry = registry.Registry()
|
||||
>>> datatypes_registry.load_datatypes()
|
||||
>>> datatypes_registry.load_datatypes(root_dir=util.galaxy_directory(), config=sample_conf)
|
||||
>>> sniff_order = datatypes_registry.sniff_order
|
||||
>>> guess_ext(fname, sniff_order)
|
||||
'xml'
|
||||
@@ -327,7 +328,26 @@ def guess_ext( fname, sniff_order, is_multi_byte=False ):
|
||||
>>> fname = get_test_fname('issue1818.tabular')
|
||||
>>> guess_ext(fname, sniff_order)
|
||||
'tabular'
|
||||
>>> fname = get_test_fname('drugbank_drugs.cml')
|
||||
>>> guess_ext(fname, sniff_order)
|
||||
'cml'
|
||||
>>> fname = get_test_fname('q.fps')
|
||||
>>> guess_ext(fname, sniff_order)
|
||||
'fps'
|
||||
>>> fname = get_test_fname('drugbank_drugs.inchi')
|
||||
>>> guess_ext(fname, sniff_order)
|
||||
'inchi'
|
||||
>>> fname = get_test_fname('drugbank_drugs.mol2')
|
||||
>>> guess_ext(fname, sniff_order)
|
||||
'mol2'
|
||||
>>> fname = get_test_fname('drugbank_drugs.sdf')
|
||||
>>> guess_ext(fname, sniff_order)
|
||||
'sdf'
|
||||
>>> fname = get_test_fname('5e5z.pdb')
|
||||
>>> guess_ext(fname, sniff_order)
|
||||
'pdb'
|
||||
"""
|
||||
file_ext = None
|
||||
for datatype in sniff_order:
|
||||
"""
|
||||
Some classes may not have a sniff function, which is ok. In fact, the
|
||||
@@ -339,9 +359,19 @@ def guess_ext( fname, sniff_order, is_multi_byte=False ):
|
||||
"""
|
||||
try:
|
||||
if datatype.sniff( fname ):
|
||||
return datatype.file_ext
|
||||
file_ext = datatype.file_ext
|
||||
break
|
||||
except:
|
||||
pass
|
||||
# Ugly hack for tsv vs tabular sniffing, we want to prefer tabular
|
||||
# to tsv but it doesn't have a sniffer - is TSV was sniffed just check
|
||||
# if it is an okay tabular and use that instead.
|
||||
if file_ext == 'tsv':
|
||||
if is_column_based( fname, '\t', 1, is_multi_byte=is_multi_byte ):
|
||||
file_ext = 'tabular'
|
||||
if file_ext is not None:
|
||||
return file_ext
|
||||
|
||||
headers = get_headers( fname, None )
|
||||
is_binary = False
|
||||
if is_multi_byte:
|
||||
|
||||
@@ -8,17 +8,16 @@ import gzip
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import tempfile
|
||||
import subprocess
|
||||
|
||||
import tempfile
|
||||
from cgi import escape
|
||||
from json import dumps
|
||||
|
||||
from galaxy import util
|
||||
from galaxy.datatypes import data, metadata
|
||||
from galaxy.util.checkers import is_gzip
|
||||
from galaxy.datatypes.metadata import MetadataElement
|
||||
from galaxy.datatypes.sniff import get_headers
|
||||
from galaxy.util.json import dumps
|
||||
from galaxy.util.checkers import is_gzip
|
||||
|
||||
from . import dataproviders
|
||||
|
||||
|
||||
@@ -0,0 +1,357 @@
|
||||
HEADER DE NOVO PROTEIN, MEMBRANE PROTEIN 09-OCT-15 5E5Z
|
||||
TITLE STRUCTURE OF THE AMYLOID FORMING PEPTIDE LVHSSN (RESIDUES
|
||||
COMPND MOL_ID: 1;
|
||||
COMPND 2 MOLECULE: LVHSSN (RESIDUES 16-21) FROM ISLET AMYLOID POLYPEPTIDE;
|
||||
COMPND 3 CHAIN: A;
|
||||
COMPND 4 ENGINEERED: YES
|
||||
SOURCE MOL_ID: 1;
|
||||
SOURCE 2 SYNTHETIC: YES;
|
||||
SOURCE 3 ORGANISM_SCIENTIFIC: HOMO SAPIENS;
|
||||
SOURCE 4 ORGANISM_TAXID: 9606
|
||||
KEYWDS AMYLOID-LIKE PROTOFIBRIL, DE NOVO PROTEIN, MEMBRANE PROTEIN, PROTEIN
|
||||
KEYWDS 2 FIBRIL
|
||||
EXPDTA X-RAY DIFFRACTION
|
||||
AUTHOR A.B.SORIAGA,D.EISENBERG
|
||||
REVDAT 2 20-JAN-16 5E5Z 1 JRNL
|
||||
REVDAT 1 16-DEC-15 5E5Z 0
|
||||
JRNL AUTH A.B.SORIAGA,S.SANGWAN,R.MACDONALD,M.R.SAWAYA,D.EISENBERG
|
||||
JRNL TITL CRYSTAL STRUCTURES OF IAPP AMYLOIDOGENIC SEGMENTS REVEAL A
|
||||
JRNL TITL 2 NOVEL PACKING MOTIF OF OUT-OF-REGISTER BETA SHEETS.
|
||||
JRNL REF J.PHYS.CHEM.B 2016
|
||||
JRNL REFN ISSN 1089-5647
|
||||
JRNL PMID 26629790
|
||||
JRNL DOI 10.1021/ACS.JPCB.5B09981
|
||||
REMARK 2
|
||||
REMARK 2 RESOLUTION. 1.66 ANGSTROMS.
|
||||
REMARK 3
|
||||
REMARK 3 REFINEMENT.
|
||||
REMARK 3 PROGRAM : PHENIX 1.6.4_486
|
||||
REMARK 3 AUTHORS : PAUL ADAMS,PAVEL AFONINE,VINCENT CHEN,IAN
|
||||
REMARK 3 : DAVIS,KRESHNA GOPAL,RALF GROSSE-KUNSTLEVE,
|
||||
REMARK 3 : LI-WEI HUNG,ROBERT IMMORMINO,TOM IOERGER,
|
||||
REMARK 3 : AIRLIE MCCOY,ERIK MCKEE,NIGEL MORIARTY,
|
||||
REMARK 3 : REETAL PAI,RANDY READ,JANE RICHARDSON,
|
||||
REMARK 3 : DAVID RICHARDSON,TOD ROMO,JIM SACCHETTINI,
|
||||
REMARK 3 : NICHOLAS SAUTER,JACOB SMITH,LAURENT
|
||||
REMARK 3 : STORONI,TOM TERWILLIGER,PETER ZWART
|
||||
REMARK 3
|
||||
REMARK 3 REFINEMENT TARGET : LS_WUNIT_K1
|
||||
REMARK 3
|
||||
REMARK 3 DATA USED IN REFINEMENT.
|
||||
REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 1.66
|
||||
REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 9.46
|
||||
REMARK 3 MIN(FOBS/SIGMA_FOBS) : 0.000
|
||||
REMARK 3 COMPLETENESS FOR RANGE (%) : 89.1
|
||||
REMARK 3 NUMBER OF REFLECTIONS : 391
|
||||
REMARK 3
|
||||
REMARK 3 FIT TO DATA USED IN REFINEMENT.
|
||||
REMARK 3 R VALUE (WORKING + TEST SET) : 0.170
|
||||
REMARK 3 R VALUE (WORKING SET) : 0.167
|
||||
REMARK 3 FREE R VALUE : 0.198
|
||||
REMARK 3 FREE R VALUE TEST SET SIZE (%) : 4.600
|
||||
REMARK 3 FREE R VALUE TEST SET COUNT : 18
|
||||
REMARK 3
|
||||
REMARK 3 FIT TO DATA USED IN REFINEMENT (IN BINS).
|
||||
REMARK 3 BIN RESOLUTION RANGE COMPL. NWORK NFREE RWORK RFREE
|
||||
REMARK 3 1 9.4587 - 1.6644 0.89 373 18 0.1673 0.1983
|
||||
REMARK 3
|
||||
REMARK 3 BULK SOLVENT MODELLING.
|
||||
REMARK 3 METHOD USED : FLAT BULK SOLVENT MODEL
|
||||
REMARK 3 SOLVENT RADIUS : 0.00
|
||||
REMARK 3 SHRINKAGE RADIUS : 0.00
|
||||
REMARK 3 K_SOL : 0.60
|
||||
REMARK 3 B_SOL : 251.4
|
||||
REMARK 3
|
||||
REMARK 3 ERROR ESTIMATES.
|
||||
REMARK 3 COORDINATE ERROR (MAXIMUM-LIKELIHOOD BASED) : 0.310
|
||||
REMARK 3 PHASE ERROR (DEGREES, MAXIMUM-LIKELIHOOD BASED) : 18.270
|
||||
REMARK 3
|
||||
REMARK 3 B VALUES.
|
||||
REMARK 3 FROM WILSON PLOT (A**2) : NULL
|
||||
REMARK 3 MEAN B VALUE (OVERALL, A**2) : NULL
|
||||
REMARK 3 OVERALL ANISOTROPIC B VALUE.
|
||||
REMARK 3 B11 (A**2) : 0.51090
|
||||
REMARK 3 B22 (A**2) : -3.44720
|
||||
REMARK 3 B33 (A**2) : -8.26450
|
||||
REMARK 3 B12 (A**2) : 0.00000
|
||||
REMARK 3 B13 (A**2) : 0.77970
|
||||
REMARK 3 B23 (A**2) : 0.00000
|
||||
REMARK 3
|
||||
REMARK 3 TWINNING INFORMATION.
|
||||
REMARK 3 FRACTION: NULL
|
||||
REMARK 3 OPERATOR: NULL
|
||||
REMARK 3
|
||||
REMARK 3 DEVIATIONS FROM IDEAL VALUES.
|
||||
REMARK 3 RMSD COUNT
|
||||
REMARK 3 BOND : 0.004 46
|
||||
REMARK 3 ANGLE : 0.975 62
|
||||
REMARK 3 CHIRALITY : 0.056 8
|
||||
REMARK 3 PLANARITY : 0.004 8
|
||||
REMARK 3 DIHEDRAL : 10.740 15
|
||||
REMARK 3
|
||||
REMARK 3 TLS DETAILS
|
||||
REMARK 3 NUMBER OF TLS GROUPS : 1
|
||||
REMARK 3 TLS GROUP : 1
|
||||
REMARK 3 SELECTION: ALL
|
||||
REMARK 3 ORIGIN FOR THE GROUP (A): 4.5323 0.1096 3.9760
|
||||
REMARK 3 T TENSOR
|
||||
REMARK 3 T11: -0.1260 T22: -0.0788
|
||||
REMARK 3 T33: -0.0487 T12: 0.0821
|
||||
REMARK 3 T13: -0.0518 T23: 0.0723
|
||||
REMARK 3 L TENSOR
|
||||
REMARK 3 L11: 0.1003 L22: 0.0184
|
||||
REMARK 3 L33: 0.0647 L12: -0.0319
|
||||
REMARK 3 L13: 0.0506 L23: -0.0233
|
||||
REMARK 3 S TENSOR
|
||||
REMARK 3 S11: 0.0084 S12: -0.0300 S13: -0.0565
|
||||
REMARK 3 S21: 0.0231 S22: 0.0090 S23: 0.0127
|
||||
REMARK 3 S31: -0.0046 S32: -0.0049 S33: -0.0009
|
||||
REMARK 3
|
||||
REMARK 3 NCS DETAILS
|
||||
REMARK 3 NUMBER OF NCS GROUPS : NULL
|
||||
REMARK 3
|
||||
REMARK 3 OTHER REFINEMENT REMARKS: NULL
|
||||
REMARK 4
|
||||
REMARK 4 5E5Z COMPLIES WITH FORMAT V. 3.30, 13-JUL-11
|
||||
REMARK 100
|
||||
REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY RCSB ON 09-OCT-15.
|
||||
REMARK 100 THE DEPOSITION ID IS D_1000214421.
|
||||
REMARK 200
|
||||
REMARK 200 EXPERIMENTAL DETAILS
|
||||
REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION
|
||||
REMARK 200 DATE OF DATA COLLECTION : 10-MAR-10
|
||||
REMARK 200 TEMPERATURE (KELVIN) : 291
|
||||
REMARK 200 PH : NULL
|
||||
REMARK 200 NUMBER OF CRYSTALS USED : NULL
|
||||
REMARK 200
|
||||
REMARK 200 SYNCHROTRON (Y/N) : Y
|
||||
REMARK 200 RADIATION SOURCE : APS
|
||||
REMARK 200 BEAMLINE : 24-ID-E
|
||||
REMARK 200 X-RAY GENERATOR MODEL : NULL
|
||||
REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M
|
||||
REMARK 200 WAVELENGTH OR RANGE (A) : 0.979
|
||||
REMARK 200 MONOCHROMATOR : NULL
|
||||
REMARK 200 OPTICS : NULL
|
||||
REMARK 200
|
||||
REMARK 200 DETECTOR TYPE : CCD
|
||||
REMARK 200 DETECTOR MANUFACTURER : ADSC QUANTUM 315
|
||||
REMARK 200 INTENSITY-INTEGRATION SOFTWARE : DENZO
|
||||
REMARK 200 DATA SCALING SOFTWARE : NULL
|
||||
REMARK 200
|
||||
REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 1136
|
||||
REMARK 200 RESOLUTION RANGE HIGH (A) : 1.600
|
||||
REMARK 200 RESOLUTION RANGE LOW (A) : 100.000
|
||||
REMARK 200 REJECTION CRITERIA (SIGMA(I)) : NULL
|
||||
REMARK 200
|
||||
REMARK 200 OVERALL.
|
||||
REMARK 200 COMPLETENESS FOR RANGE (%) : 92.9
|
||||
REMARK 200 DATA REDUNDANCY : 2.900
|
||||
REMARK 200 R MERGE (I) : 0.07600
|
||||
REMARK 200 R SYM (I) : NULL
|
||||
REMARK 200 <I/SIGMA(I)> FOR THE DATA SET : 17.8600
|
||||
REMARK 200
|
||||
REMARK 200 IN THE HIGHEST RESOLUTION SHELL.
|
||||
REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : NULL
|
||||
REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : NULL
|
||||
REMARK 200 COMPLETENESS FOR SHELL (%) : NULL
|
||||
REMARK 200 DATA REDUNDANCY IN SHELL : NULL
|
||||
REMARK 200 R MERGE FOR SHELL (I) : NULL
|
||||
REMARK 200 R SYM FOR SHELL (I) : NULL
|
||||
REMARK 200 <I/SIGMA(I)> FOR SHELL : NULL
|
||||
REMARK 200
|
||||
REMARK 200 DIFFRACTION PROTOCOL: SINGLE WAVELENGTH
|
||||
REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MOLECULAR REPLACEMENT
|
||||
REMARK 200 SOFTWARE USED: PHASER
|
||||
REMARK 200 STARTING MODEL: NULL
|
||||
REMARK 200
|
||||
REMARK 200 REMARK: NULL
|
||||
REMARK 280
|
||||
REMARK 280 CRYSTAL
|
||||
REMARK 280 SOLVENT CONTENT, VS (%): 6.59
|
||||
REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 1.32
|
||||
REMARK 280
|
||||
REMARK 280 CRYSTALLIZATION CONDITIONS: 20 MG/ML IN WATER AND MIXED WITH 0.09
|
||||
REMARK 280 M HEPES PH 7.5, 1.26M TRI-SODIUM CITRATE, AND 10% GLYCEROL,
|
||||
REMARK 280 VAPOR DIFFUSION, HANGING DROP, TEMPERATURE 291K
|
||||
REMARK 290
|
||||
REMARK 290 CRYSTALLOGRAPHIC SYMMETRY
|
||||
REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 1 21 1
|
||||
REMARK 290
|
||||
REMARK 290 SYMOP SYMMETRY
|
||||
REMARK 290 NNNMMM OPERATOR
|
||||
REMARK 290 1555 X,Y,Z
|
||||
REMARK 290 2555 -X,Y+1/2,-Z
|
||||
REMARK 290
|
||||
REMARK 290 WHERE NNN -> OPERATOR NUMBER
|
||||
REMARK 290 MMM -> TRANSLATION VECTOR
|
||||
REMARK 290
|
||||
REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS
|
||||
REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM
|
||||
REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY
|
||||
REMARK 290 RELATED MOLECULES.
|
||||
REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000
|
||||
REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000
|
||||
REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000
|
||||
REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 0.00000
|
||||
REMARK 290 SMTRY2 2 0.000000 1.000000 0.000000 4.80450
|
||||
REMARK 290 SMTRY3 2 0.000000 0.000000 -1.000000 0.00000
|
||||
REMARK 290
|
||||
REMARK 290 REMARK: NULL
|
||||
REMARK 300
|
||||
REMARK 300 BIOMOLECULE: 1
|
||||
REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM
|
||||
REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN
|
||||
REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON
|
||||
REMARK 300 BURIED SURFACE AREA.
|
||||
REMARK 350
|
||||
REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN
|
||||
REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE
|
||||
REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS
|
||||
REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND
|
||||
REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.
|
||||
REMARK 350
|
||||
REMARK 350 BIOMOLECULE: 1
|
||||
REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: DECAMERIC
|
||||
REMARK 350 APPLY THE FOLLOWING TO CHAINS: A
|
||||
REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000
|
||||
REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000
|
||||
REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000
|
||||
REMARK 350 BIOMT1 2 1.000000 0.000000 0.000000 0.00000
|
||||
REMARK 350 BIOMT2 2 0.000000 1.000000 0.000000 -9.60900
|
||||
REMARK 350 BIOMT3 2 0.000000 0.000000 1.000000 0.00000
|
||||
REMARK 350 BIOMT1 3 1.000000 0.000000 0.000000 0.00000
|
||||
REMARK 350 BIOMT2 3 0.000000 1.000000 0.000000 9.60900
|
||||
REMARK 350 BIOMT3 3 0.000000 0.000000 1.000000 0.00000
|
||||
REMARK 350 BIOMT1 4 1.000000 0.000000 0.000000 9.64300
|
||||
REMARK 350 BIOMT2 4 0.000000 1.000000 0.000000 0.00000
|
||||
REMARK 350 BIOMT3 4 0.000000 0.000000 1.000000 0.00000
|
||||
REMARK 350 BIOMT1 5 1.000000 0.000000 0.000000 9.64300
|
||||
REMARK 350 BIOMT2 5 0.000000 1.000000 0.000000 -9.60900
|
||||
REMARK 350 BIOMT3 5 0.000000 0.000000 1.000000 0.00000
|
||||
REMARK 350 BIOMT1 6 1.000000 0.000000 0.000000 9.64300
|
||||
REMARK 350 BIOMT2 6 0.000000 1.000000 0.000000 9.60900
|
||||
REMARK 350 BIOMT3 6 0.000000 0.000000 1.000000 0.00000
|
||||
REMARK 350 BIOMT1 7 -1.000000 0.000000 0.000000 9.64300
|
||||
REMARK 350 BIOMT2 7 0.000000 1.000000 0.000000 -4.80450
|
||||
REMARK 350 BIOMT3 7 0.000000 0.000000 -1.000000 0.00000
|
||||
REMARK 350 BIOMT1 8 -1.000000 0.000000 0.000000 9.64300
|
||||
REMARK 350 BIOMT2 8 0.000000 1.000000 0.000000 4.80450
|
||||
REMARK 350 BIOMT3 8 0.000000 0.000000 -1.000000 0.00000
|
||||
REMARK 350 BIOMT1 9 -1.000000 0.000000 0.000000 19.28600
|
||||
REMARK 350 BIOMT2 9 0.000000 1.000000 0.000000 -4.80450
|
||||
REMARK 350 BIOMT3 9 0.000000 0.000000 -1.000000 0.00000
|
||||
REMARK 350 BIOMT1 10 -1.000000 0.000000 0.000000 19.28600
|
||||
REMARK 350 BIOMT2 10 0.000000 1.000000 0.000000 4.80450
|
||||
REMARK 350 BIOMT3 10 0.000000 0.000000 -1.000000 0.00000
|
||||
REMARK 900
|
||||
REMARK 900 RELATED ENTRIES
|
||||
REMARK 900 RELATED ID: 5E5V RELATED DB: PDB
|
||||
REMARK 900 RELATED ID: 5E5X RELATED DB: PDB
|
||||
REMARK 900 RELATED ID: 5E61 RELATED DB: PDB
|
||||
DBREF 5E5Z A 1 6 PDB 5E5Z 5E5Z 1 6
|
||||
SEQRES 1 A 6 LEU VAL HIS SER SER ASN
|
||||
FORMUL 2 HOH *(H2 O)
|
||||
CRYST1 9.643 9.609 19.029 90.00 101.22 90.00 P 1 21 1 2
|
||||
ORIGX1 1.000000 0.000000 0.000000 0.00000
|
||||
ORIGX2 0.000000 1.000000 0.000000 0.00000
|
||||
ORIGX3 0.000000 0.000000 1.000000 0.00000
|
||||
SCALE1 0.103702 0.000000 0.020579 0.00000
|
||||
SCALE2 0.000000 0.104069 0.000000 0.00000
|
||||
SCALE3 0.000000 0.000000 0.053576 0.00000
|
||||
ATOM 1 N LEU A 1 6.078 -0.306 -5.753 1.00 0.00 N
|
||||
ANISOU 1 N LEU A 1 0 0 0 0 0 0 N
|
||||
ATOM 2 CA LEU A 1 5.166 -0.026 -4.647 1.00 2.42 C
|
||||
ANISOU 2 CA LEU A 1 307 307 307 0 0 0 C
|
||||
ATOM 3 C LEU A 1 5.682 -0.642 -3.356 1.00 3.48 C
|
||||
ANISOU 3 C LEU A 1 435 443 445 1 1 9 C
|
||||
ATOM 4 O LEU A 1 6.056 -1.814 -3.322 1.00 3.52 O
|
||||
ANISOU 4 O LEU A 1 436 449 454 2 2 16 O
|
||||
ATOM 5 CB LEU A 1 3.755 -0.555 -4.967 1.00 1.86 C
|
||||
ANISOU 5 CB LEU A 1 232 237 238 1 1 5 C
|
||||
ATOM 6 CG LEU A 1 2.596 -0.354 -3.975 1.00 6.87 C
|
||||
ANISOU 6 CG LEU A 1 861 873 877 2 2 14 C
|
||||
ATOM 7 CD1 LEU A 1 2.753 -1.182 -2.704 1.00 11.83 C
|
||||
ANISOU 7 CD1 LEU A 1 1481 1504 1512 4 4 27 C
|
||||
ATOM 8 CD2 LEU A 1 2.404 1.122 -3.638 1.00 4.27 C
|
||||
ANISOU 8 CD2 LEU A 1 537 543 544 1 2 7 C
|
||||
ATOM 9 N VAL A 2 5.715 0.161 -2.297 1.00 0.61 N
|
||||
ANISOU 9 N VAL A 2 71 80 82 2 2 11 N
|
||||
ATOM 10 CA VAL A 2 5.968 -0.352 -0.960 1.00 0.12 C
|
||||
ANISOU 10 CA VAL A 2 1 20 24 4 4 22 C
|
||||
ATOM 11 C VAL A 2 4.976 0.281 0.000 1.00 3.40 C
|
||||
ANISOU 11 C VAL A 2 413 437 440 5 5 27 C
|
||||
ATOM 12 O VAL A 2 4.746 1.489 -0.046 1.00 3.22 O
|
||||
ANISOU 12 O VAL A 2 395 414 414 4 5 20 O
|
||||
ATOM 13 CB VAL A 2 7.400 -0.027 -0.475 1.00 3.56 C
|
||||
ANISOU 13 CB VAL A 2 440 456 458 3 3 18 C
|
||||
ATOM 14 CG1 VAL A 2 7.566 -0.421 0.993 1.00 7.93 C
|
||||
ANISOU 14 CG1 VAL A 2 986 1012 1016 5 5 30 C
|
||||
ATOM 15 CG2 VAL A 2 8.429 -0.722 -1.342 1.00 6.71 C
|
||||
ANISOU 15 CG2 VAL A 2 841 853 856 2 2 14 C
|
||||
ATOM 16 N HIS A 3 4.367 -0.537 0.850 1.00 0.22 N
|
||||
ANISOU 16 N HIS A 3 1 38 44 7 8 41 N
|
||||
ATOM 17 CA HIS A 3 3.603 -0.011 1.971 1.00 1.73 C
|
||||
ANISOU 17 CA HIS A 3 189 233 237 10 10 48 C
|
||||
ATOM 18 C HIS A 3 4.003 -0.675 3.280 1.00 1.84 C
|
||||
ANISOU 18 C HIS A 3 194 250 255 12 12 61 C
|
||||
ATOM 19 O HIS A 3 4.208 -1.889 3.338 1.00 0.73 O
|
||||
ANISOU 19 O HIS A 3 47 109 120 11 12 69 O
|
||||
ATOM 20 CB HIS A 3 2.095 -0.177 1.781 1.00 2.62 C
|
||||
ANISOU 20 CB HIS A 3 296 346 351 11 11 54 C
|
||||
ATOM 21 CG HIS A 3 1.324 0.074 3.040 1.00 2.97 C
|
||||
ANISOU 21 CG HIS A 3 335 396 399 14 14 66 C
|
||||
ATOM 22 ND1 HIS A 3 0.950 -0.937 3.900 1.00 4.29 N
|
||||
ANISOU 22 ND1 HIS A 3 491 566 573 16 17 82 N
|
||||
ATOM 23 CD2 HIS A 3 0.921 1.230 3.620 1.00 4.90 C
|
||||
ANISOU 23 CD2 HIS A 3 581 642 639 16 16 64 C
|
||||
ATOM 24 CE1 HIS A 3 0.321 -0.417 4.940 1.00 5.53 C
|
||||
ANISOU 24 CE1 HIS A 3 644 727 729 20 20 89 C
|
||||
ATOM 25 NE2 HIS A 3 0.290 0.896 4.794 1.00 6.02 N
|
||||
ANISOU 25 NE2 HIS A 3 714 790 785 20 19 78 N
|
||||
ATOM 26 N SER A 4 4.099 0.141 4.326 1.00 0.34 N
|
||||
ANISOU 26 N SER A 4 3 63 63 14 14 62 N
|
||||
ATOM 27 CA SER A 4 4.357 -0.330 5.683 1.00 1.49 C
|
||||
ANISOU 27 CA SER A 4 141 213 213 16 16 75 C
|
||||
ATOM 28 C SER A 4 3.814 0.686 6.681 1.00 2.14 C
|
||||
ANISOU 28 C SER A 4 222 299 292 20 19 78 C
|
||||
ATOM 29 O SER A 4 4.008 1.889 6.507 1.00 3.47 O
|
||||
ANISOU 29 O SER A 4 397 465 454 19 18 68 O
|
||||
ATOM 30 CB SER A 4 5.858 -0.513 5.905 1.00 5.61 C
|
||||
ANISOU 30 CB SER A 4 665 734 734 15 15 72 C
|
||||
ATOM 31 OG SER A 4 6.132 -0.771 7.272 1.00 9.89 O
|
||||
ANISOU 31 OG SER A 4 1200 1280 1278 18 18 83 O
|
||||
ATOM 32 N SER A 5 3.138 0.213 7.725 1.00 2.34 N
|
||||
ANISOU 32 N SER A 5 239 330 322 24 23 93 N
|
||||
ATOM 33 CA SER A 5 2.651 1.119 8.765 1.00 0.66 C
|
||||
ANISOU 33 CA SER A 5 24 123 106 28 26 97 C
|
||||
ATOM 34 C SER A 5 3.677 1.311 9.885 1.00 2.66 C
|
||||
ANISOU 34 C SER A 5 275 378 356 30 27 100 C
|
||||
ATOM 35 O SER A 5 3.411 2.024 10.851 1.00 2.02 O
|
||||
ANISOU 35 O SER A 5 193 303 273 35 30 104 O
|
||||
ATOM 36 CB SER A 5 1.318 0.639 9.350 1.00 2.68 C
|
||||
ANISOU 36 CB SER A 5 269 383 365 32 29 113 C
|
||||
ATOM 37 OG SER A 5 1.478 -0.544 10.117 1.00 2.49 O
|
||||
ANISOU 37 OG SER A 5 236 363 349 33 31 128 O
|
||||
ATOM 38 N ASN A 6 4.838 0.672 9.758 1.00 2.94 N
|
||||
ANISOU 38 N ASN A 6 311 412 394 28 25 98 N
|
||||
ATOM 39 CA ASN A 6 5.912 0.838 10.741 1.00 4.68 C
|
||||
ANISOU 39 CA ASN A 6 530 634 613 29 26 100 C
|
||||
ATOM 40 C ASN A 6 6.574 2.203 10.638 1.00 10.84 C
|
||||
ANISOU 40 C ASN A 6 1320 1413 1387 28 24 87 C
|
||||
ATOM 41 O ASN A 6 7.335 2.594 11.519 1.00 13.68 O
|
||||
ANISOU 41 O ASN A 6 1680 1775 1745 30 26 88 O
|
||||
ATOM 42 CB ASN A 6 6.986 -0.243 10.589 1.00 5.08 C
|
||||
ANISOU 42 CB ASN A 6 579 682 668 27 25 102 C
|
||||
ATOM 43 CG ASN A 6 6.592 -1.558 11.236 1.00 8.08 C
|
||||
ANISOU 43 CG ASN A 6 948 1067 1057 28 27 120 C
|
||||
ATOM 44 OD1 ASN A 6 5.576 -1.644 11.923 1.00 8.72 O
|
||||
ANISOU 44 OD1 ASN A 6 1022 1152 1139 32 30 131 O
|
||||
ATOM 45 ND2 ASN A 6 7.409 -2.588 11.030 1.00 9.89 N
|
||||
ANISOU 45 ND2 ASN A 6 1174 1293 1290 25 25 122 N
|
||||
ATOM 46 OXT ASN A 6 6.383 2.933 9.667 1.00 14.02 O
|
||||
ANISOU 46 OXT ASN A 6 1730 1811 1787 25 22 75 O
|
||||
TER 47 ASN A 6
|
||||
HETATM 48 O HOH A 101 8.203 1.052 -4.564 1.00 12.67 O
|
||||
ANISOU 48 O HOH A 101 1605 1605 1605 0 0 0 O
|
||||
MASTER 227 0 0 0 0 0 0 6 47 1 0 1
|
||||
END
|
||||
@@ -0,0 +1,385 @@
|
||||
<?xml version="1.0"?>
|
||||
<cml xmlns="http://www.xml-cml.org/schema">
|
||||
<molecule id="Goserelin">
|
||||
<atomArray>
|
||||
<atom id="a1" elementType="O" x2="12.854800" y2="-2.638200"/>
|
||||
<atom id="a2" elementType="O" x2="13.972600" y2="-2.522600"/>
|
||||
<atom id="a3" elementType="O" x2="10.176600" y2="-3.932700"/>
|
||||
<atom id="a4" elementType="O" x2="11.201900" y2="-0.796100"/>
|
||||
<atom id="a5" elementType="O" x2="8.780000" y2="-1.306400"/>
|
||||
<atom id="a6" elementType="O" x2="16.858900" y2="-3.242100"/>
|
||||
<atom id="a7" elementType="O" x2="10.356200" y2="1.216300"/>
|
||||
<atom id="a8" elementType="O" x2="3.270200" y2="4.834100"/>
|
||||
<atom id="a9" elementType="O" x2="2.350000" y2="8.273400"/>
|
||||
<atom id="a10" elementType="O" x2="3.821300" y2="4.220100"/>
|
||||
<atom id="a11" elementType="O" x2="5.217800" y2="1.593800"/>
|
||||
<atom id="a12" elementType="O" x2="7.896000" y2="2.888300"/>
|
||||
<atom id="a13" elementType="O" x2="7.127100" y2="0.535800"/>
|
||||
<atom id="a14" elementType="O" x2="12.483400" y2="3.124900"/>
|
||||
<atom id="a15" elementType="N" x2="13.149500" y2="-4.036400"/>
|
||||
<atom id="a16" elementType="N" x2="11.240200" y2="-2.978400"/>
|
||||
<atom id="a17" elementType="N" x2="15.208900" y2="-3.239300"/>
|
||||
<atom id="a18" elementType="N" x2="10.138300" y2="-1.750300"/>
|
||||
<atom id="a19" elementType="N" x2="15.622600" y2="-2.525500"/>
|
||||
<atom id="a20" elementType="N" x2="12.380600" y2="-6.389000"/>
|
||||
<atom id="a21" elementType="N" x2="9.292600" y2="0.261900"/>
|
||||
<atom id="a22" elementType="N" x2="3.148500" y2="7.039100"/>
|
||||
<atom id="a23" elementType="N" x2="4.333800" y2="5.788400"/>
|
||||
<atom id="a24" elementType="N" x2="16.861300" y2="-1.813200"/>
|
||||
<atom id="a25" elementType="N" x2="8.190700" y2="1.490000"/>
|
||||
<atom id="a26" elementType="N" x2="5.179500" y2="3.776100"/>
|
||||
<atom id="a27" elementType="N" x2="6.281400" y2="2.548000"/>
|
||||
<atom id="a28" elementType="N" x2="11.317000" y2="-7.343300"/>
|
||||
<atom id="a29" elementType="N" x2="12.675300" y2="-7.787300"/>
|
||||
<atom id="a30" elementType="N" x2="3.859600" y2="0.709800"/>
|
||||
<atom id="a31" elementType="N" x2="6.733500" y2="6.382300"/>
|
||||
<atom id="a32" elementType="N" x2="5.950700" y2="7.463600"/>
|
||||
<atom id="a33" elementType="C" x2="13.970100" y2="-3.951600">
|
||||
<atomParity atomRefs4="a33 a39 a34 a15">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a34" elementType="C" x2="14.304300" y2="-4.705800"/>
|
||||
<atom id="a35" elementType="C" x2="13.690300" y2="-5.256900"/>
|
||||
<atom id="a36" elementType="C" x2="12.976600" y2="-4.843100"/>
|
||||
<atom id="a37" elementType="C" x2="12.598400" y2="-3.422400"/>
|
||||
<atom id="a38" elementType="C" x2="11.791200" y2="-3.592500">
|
||||
<atomParity atomRefs4="a38 a16 a37 a40">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a39" elementType="C" x2="14.383800" y2="-3.237800"/>
|
||||
<atom id="a40" elementType="C" x2="11.534900" y2="-4.376700"/>
|
||||
<atom id="a41" elementType="C" x2="12.085900" y2="-4.990700"/>
|
||||
<atom id="a42" elementType="C" x2="9.881900" y2="-2.534500">
|
||||
<atomParity atomRefs4="a42 a18 a43 a44">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a43" elementType="C" x2="10.433000" y2="-3.148600"/>
|
||||
<atom id="a44" elementType="C" x2="9.074700" y2="-2.704600"/>
|
||||
<atom id="a45" elementType="C" x2="8.818400" y2="-3.488900"/>
|
||||
<atom id="a46" elementType="C" x2="11.829500" y2="-5.775000"/>
|
||||
<atom id="a47" elementType="C" x2="8.011200" y2="-3.659000"/>
|
||||
<atom id="a48" elementType="C" x2="9.369400" y2="-4.102900"/>
|
||||
<atom id="a49" elementType="C" x2="9.587300" y2="-1.136300"/>
|
||||
<atom id="a50" elementType="C" x2="9.843600" y2="-0.352100">
|
||||
<atomParity atomRefs4="a50 a21 a51 a49">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a51" elementType="C" x2="10.650900" y2="-0.182000"/>
|
||||
<atom id="a52" elementType="C" x2="16.447600" y2="-2.526900"/>
|
||||
<atom id="a53" elementType="C" x2="2.975600" y2="6.232400">
|
||||
<atomParity atomRefs4="a53 a64 a58 a22">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a54" elementType="C" x2="12.009100" y2="-0.625900"/>
|
||||
<atom id="a55" elementType="C" x2="8.997900" y2="1.660200">
|
||||
<atomParity atomRefs4="a55 a25 a56 a62">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a56" elementType="C" x2="9.548900" y2="1.046100"/>
|
||||
<atom id="a57" elementType="C" x2="12.124200" y2="-7.173200"/>
|
||||
<atom id="a58" elementType="C" x2="2.154900" y2="6.147500"/>
|
||||
<atom id="a59" elementType="C" x2="4.884800" y2="5.174400">
|
||||
<atomParity atomRefs4="a59 a23 a68 a66">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a60" elementType="C" x2="4.923200" y2="2.992000">
|
||||
<atomParity atomRefs4="a60 a26 a73 a63">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a61" elementType="C" x2="1.820700" y2="6.901900"/>
|
||||
<atom id="a62" elementType="C" x2="9.254200" y2="2.444400"/>
|
||||
<atom id="a63" elementType="C" x2="4.115900" y2="2.821900"/>
|
||||
<atom id="a64" elementType="C" x2="3.526600" y2="5.618300"/>
|
||||
<atom id="a65" elementType="C" x2="2.434800" y2="7.452800"/>
|
||||
<atom id="a66" elementType="C" x2="5.692100" y2="5.344500"/>
|
||||
<atom id="a67" elementType="C" x2="6.832400" y2="1.934000">
|
||||
<atomParity atomRefs4="a67 a27 a74 a80">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a68" elementType="C" x2="4.628500" y2="4.390200"/>
|
||||
<atom id="a69" elementType="C" x2="12.179300" y2="-1.433200"/>
|
||||
<atom id="a70" elementType="C" x2="12.816400" y2="-0.455700"/>
|
||||
<atom id="a71" elementType="C" x2="11.838900" y2="0.181400"/>
|
||||
<atom id="a72" elementType="C" x2="3.859600" y2="2.037600"/>
|
||||
<atom id="a73" elementType="C" x2="5.474200" y2="2.377900"/>
|
||||
<atom id="a74" elementType="C" x2="7.639700" y2="2.104100"/>
|
||||
<atom id="a75" elementType="C" x2="10.061500" y2="2.614500"/>
|
||||
<atom id="a76" elementType="C" x2="3.079000" y2="1.786200"/>
|
||||
<atom id="a77" elementType="C" x2="5.948400" y2="6.128700"/>
|
||||
<atom id="a78" elementType="C" x2="4.341100" y2="1.373700"/>
|
||||
<atom id="a79" elementType="C" x2="3.079000" y2="0.961200"/>
|
||||
<atom id="a80" elementType="C" x2="6.576100" y2="1.149800"/>
|
||||
<atom id="a81" elementType="C" x2="2.364500" y2="2.198700"/>
|
||||
<atom id="a82" elementType="C" x2="10.317800" y2="3.398700"/>
|
||||
<atom id="a83" elementType="C" x2="10.612500" y2="2.000500"/>
|
||||
<atom id="a84" elementType="C" x2="2.364500" y2="0.548700"/>
|
||||
<atom id="a85" elementType="C" x2="5.464600" y2="6.797000"/>
|
||||
<atom id="a86" elementType="C" x2="1.650000" y2="1.786200"/>
|
||||
<atom id="a87" elementType="C" x2="1.650000" y2="0.961200"/>
|
||||
<atom id="a88" elementType="C" x2="11.125100" y2="3.568800"/>
|
||||
<atom id="a89" elementType="C" x2="11.419800" y2="2.170600"/>
|
||||
<atom id="a90" elementType="C" x2="6.734900" y2="7.207300"/>
|
||||
<atom id="a91" elementType="C" x2="11.676100" y2="2.954800"/>
|
||||
</atomArray>
|
||||
<bondArray>
|
||||
<bond atomRefs2="a1 a37" order="2"/>
|
||||
<bond atomRefs2="a2 a39" order="2"/>
|
||||
<bond atomRefs2="a3 a43" order="2"/>
|
||||
<bond atomRefs2="a4 a51" order="1"/>
|
||||
<bond atomRefs2="a4 a54" order="1"/>
|
||||
<bond atomRefs2="a5 a49" order="2"/>
|
||||
<bond atomRefs2="a6 a52" order="2"/>
|
||||
<bond atomRefs2="a7 a56" order="2"/>
|
||||
<bond atomRefs2="a8 a64" order="2"/>
|
||||
<bond atomRefs2="a9 a65" order="2"/>
|
||||
<bond atomRefs2="a10 a68" order="2"/>
|
||||
<bond atomRefs2="a11 a73" order="2"/>
|
||||
<bond atomRefs2="a12 a74" order="2"/>
|
||||
<bond atomRefs2="a13 a80" order="1"/>
|
||||
<bond atomRefs2="a14 a91" order="1"/>
|
||||
<bond atomRefs2="a15 a33" order="1"/>
|
||||
<bond atomRefs2="a15 a36" order="1"/>
|
||||
<bond atomRefs2="a15 a37" order="1"/>
|
||||
<bond atomRefs2="a38 a16" order="1"/>
|
||||
<bond atomRefs2="a16 a43" order="1"/>
|
||||
<bond atomRefs2="a17 a19" order="1"/>
|
||||
<bond atomRefs2="a17 a39" order="1"/>
|
||||
<bond atomRefs2="a42 a18" order="1"/>
|
||||
<bond atomRefs2="a18 a49" order="1"/>
|
||||
<bond atomRefs2="a19 a52" order="1"/>
|
||||
<bond atomRefs2="a20 a46" order="1"/>
|
||||
<bond atomRefs2="a20 a57" order="2"/>
|
||||
<bond atomRefs2="a50 a21" order="1"/>
|
||||
<bond atomRefs2="a21 a56" order="1"/>
|
||||
<bond atomRefs2="a22 a53" order="1"/>
|
||||
<bond atomRefs2="a22 a65" order="1"/>
|
||||
<bond atomRefs2="a59 a23" order="1"/>
|
||||
<bond atomRefs2="a23 a64" order="1"/>
|
||||
<bond atomRefs2="a24 a52" order="1"/>
|
||||
<bond atomRefs2="a55 a25" order="1"/>
|
||||
<bond atomRefs2="a25 a74" order="1"/>
|
||||
<bond atomRefs2="a60 a26" order="1"/>
|
||||
<bond atomRefs2="a26 a68" order="1"/>
|
||||
<bond atomRefs2="a67 a27" order="1"/>
|
||||
<bond atomRefs2="a27 a73" order="1"/>
|
||||
<bond atomRefs2="a28 a57" order="1"/>
|
||||
<bond atomRefs2="a29 a57" order="1"/>
|
||||
<bond atomRefs2="a30 a78" order="1"/>
|
||||
<bond atomRefs2="a30 a79" order="1"/>
|
||||
<bond atomRefs2="a31 a77" order="1"/>
|
||||
<bond atomRefs2="a31 a90" order="1"/>
|
||||
<bond atomRefs2="a32 a85" order="1"/>
|
||||
<bond atomRefs2="a32 a90" order="2"/>
|
||||
<bond atomRefs2="a33 a34" order="1"/>
|
||||
<bond atomRefs2="a33 a39" order="1"/>
|
||||
<bond atomRefs2="a34 a35" order="1"/>
|
||||
<bond atomRefs2="a35 a36" order="1"/>
|
||||
<bond atomRefs2="a37 a38" order="1"/>
|
||||
<bond atomRefs2="a38 a40" order="1"/>
|
||||
<bond atomRefs2="a40 a41" order="1"/>
|
||||
<bond atomRefs2="a41 a46" order="1"/>
|
||||
<bond atomRefs2="a42 a43" order="1"/>
|
||||
<bond atomRefs2="a42 a44" order="1"/>
|
||||
<bond atomRefs2="a44 a45" order="1"/>
|
||||
<bond atomRefs2="a45 a47" order="1"/>
|
||||
<bond atomRefs2="a45 a48" order="1"/>
|
||||
<bond atomRefs2="a49 a50" order="1"/>
|
||||
<bond atomRefs2="a50 a51" order="1"/>
|
||||
<bond atomRefs2="a53 a58" order="1"/>
|
||||
<bond atomRefs2="a53 a64" order="1"/>
|
||||
<bond atomRefs2="a54 a69" order="1"/>
|
||||
<bond atomRefs2="a54 a70" order="1"/>
|
||||
<bond atomRefs2="a54 a71" order="1"/>
|
||||
<bond atomRefs2="a55 a56" order="1"/>
|
||||
<bond atomRefs2="a55 a62" order="1"/>
|
||||
<bond atomRefs2="a58 a61" order="1"/>
|
||||
<bond atomRefs2="a59 a66" order="1"/>
|
||||
<bond atomRefs2="a59 a68" order="1"/>
|
||||
<bond atomRefs2="a60 a63" order="1"/>
|
||||
<bond atomRefs2="a60 a73" order="1"/>
|
||||
<bond atomRefs2="a61 a65" order="1"/>
|
||||
<bond atomRefs2="a62 a75" order="1"/>
|
||||
<bond atomRefs2="a63 a72" order="1"/>
|
||||
<bond atomRefs2="a66 a77" order="1"/>
|
||||
<bond atomRefs2="a67 a74" order="1"/>
|
||||
<bond atomRefs2="a67 a80" order="1"/>
|
||||
<bond atomRefs2="a72 a76" order="1"/>
|
||||
<bond atomRefs2="a72 a78" order="2"/>
|
||||
<bond atomRefs2="a75 a82" order="2"/>
|
||||
<bond atomRefs2="a75 a83" order="1"/>
|
||||
<bond atomRefs2="a76 a79" order="1"/>
|
||||
<bond atomRefs2="a76 a81" order="2"/>
|
||||
<bond atomRefs2="a77 a85" order="2"/>
|
||||
<bond atomRefs2="a79 a84" order="2"/>
|
||||
<bond atomRefs2="a81 a86" order="1"/>
|
||||
<bond atomRefs2="a82 a88" order="1"/>
|
||||
<bond atomRefs2="a83 a89" order="2"/>
|
||||
<bond atomRefs2="a84 a87" order="1"/>
|
||||
<bond atomRefs2="a86 a87" order="2"/>
|
||||
<bond atomRefs2="a88 a91" order="2"/>
|
||||
<bond atomRefs2="a89 a91" order="1"/>
|
||||
</bondArray>
|
||||
</molecule>
|
||||
<molecule id="Desmopressin">
|
||||
<atomArray>
|
||||
<atom id="a1" elementType="N" x2="0.000000" y2="-7.864600"/>
|
||||
<atom id="a2" elementType="C" x2="0.674100" y2="-7.460100"/>
|
||||
<atom id="a3" elementType="C" x2="1.393200" y2="-7.864600"/>
|
||||
<atom id="a4" elementType="N" x2="2.112200" y2="-7.460100"/>
|
||||
<atom id="a5" elementType="C" x2="2.831300" y2="-7.864600"/>
|
||||
<atom id="a6" elementType="C" x2="3.550300" y2="-7.460100">
|
||||
<atomParity atomRefs4="a6 a12 a7 a5">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a7" elementType="N" x2="4.269300" y2="-7.864600"/>
|
||||
<atom id="a8" elementType="C" x2="4.943500" y2="-7.460100"/>
|
||||
<atom id="a9" elementType="O" x2="5.662500" y2="-7.864600"/>
|
||||
<atom id="a10" elementType="O" x2="0.674100" y2="-6.651200"/>
|
||||
<atom id="a11" elementType="O" x2="2.831300" y2="-8.718400"/>
|
||||
<atom id="a12" elementType="C" x2="3.550300" y2="-6.651200"/>
|
||||
<atom id="a13" elementType="C" x2="2.831300" y2="-6.246700"/>
|
||||
<atom id="a14" elementType="C" x2="2.831300" y2="-5.437800"/>
|
||||
<atom id="a15" elementType="N" x2="2.112200" y2="-5.033300"/>
|
||||
<atom id="a16" elementType="C" x2="4.943500" y2="-6.651200">
|
||||
<atomParity atomRefs4="a16 a8 a17 a18">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a17" elementType="C" x2="4.314300" y2="-6.156800"/>
|
||||
<atom id="a18" elementType="N" x2="5.617600" y2="-6.156800"/>
|
||||
<atom id="a19" elementType="C" x2="4.539000" y2="-5.392900"/>
|
||||
<atom id="a20" elementType="C" x2="5.347900" y2="-5.392900"/>
|
||||
<atom id="a21" elementType="C" x2="6.336600" y2="-6.561300"/>
|
||||
<atom id="a22" elementType="C" x2="7.055700" y2="-6.156800">
|
||||
<atomParity atomRefs4="a22 a21 a28 a23">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a23" elementType="N" x2="7.774700" y2="-6.561300"/>
|
||||
<atom id="a24" elementType="C" x2="8.448800" y2="-6.156800"/>
|
||||
<atom id="a25" elementType="C" x2="9.167800" y2="-6.561300">
|
||||
<atomParity atomRefs4="a25 a32 a26 a24">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a26" elementType="N" x2="9.886900" y2="-6.156800"/>
|
||||
<atom id="a27" elementType="O" x2="6.336600" y2="-7.415200"/>
|
||||
<atom id="a28" elementType="C" x2="7.055700" y2="-5.347900"/>
|
||||
<atom id="a29" elementType="S" x2="6.336600" y2="-4.943500"/>
|
||||
<atom id="a30" elementType="S" x2="6.336600" y2="-4.134500"/>
|
||||
<atom id="a31" elementType="O" x2="8.448800" y2="-5.347900"/>
|
||||
<atom id="a32" elementType="C" x2="9.167800" y2="-7.415200"/>
|
||||
<atom id="a33" elementType="C" x2="9.886900" y2="-7.819700"/>
|
||||
<atom id="a34" elementType="O" x2="9.886900" y2="-8.628600"/>
|
||||
<atom id="a35" elementType="N" x2="10.606000" y2="-7.415200"/>
|
||||
<atom id="a36" elementType="C" x2="9.886900" y2="-5.347900"/>
|
||||
<atom id="a37" elementType="C" x2="10.606000" y2="-4.943500">
|
||||
<atomParity atomRefs4="a37 a39 a44 a36">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a38" elementType="O" x2="9.167800" y2="-4.943500"/>
|
||||
<atom id="a39" elementType="C" x2="11.325000" y2="-5.347900"/>
|
||||
<atom id="a40" elementType="C" x2="12.044100" y2="-4.943500"/>
|
||||
<atom id="a41" elementType="C" x2="12.763100" y2="-5.347900"/>
|
||||
<atom id="a42" elementType="N" x2="13.482200" y2="-4.943500"/>
|
||||
<atom id="a43" elementType="O" x2="12.763100" y2="-6.201800"/>
|
||||
<atom id="a44" elementType="N" x2="10.606000" y2="-4.134500"/>
|
||||
<atom id="a45" elementType="C" x2="11.325000" y2="-2.876200"/>
|
||||
<atom id="a46" elementType="C" x2="11.325000" y2="-3.730000"/>
|
||||
<atom id="a47" elementType="C" x2="10.606000" y2="-2.471700"/>
|
||||
<atom id="a48" elementType="C" x2="9.886900" y2="-2.876200">
|
||||
<atomParity atomRefs4="a48 a47 a61 a49">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a49" elementType="C" x2="9.886900" y2="-3.730000"/>
|
||||
<atom id="a50" elementType="C" x2="12.763100" y2="-2.876200"/>
|
||||
<atom id="a51" elementType="C" x2="12.763100" y2="-3.730000"/>
|
||||
<atom id="a52" elementType="C" x2="12.044100" y2="-2.471700"/>
|
||||
<atom id="a53" elementType="C" x2="12.044100" y2="-4.134500"/>
|
||||
<atom id="a54" elementType="N" x2="7.055700" y2="-2.876200"/>
|
||||
<atom id="a55" elementType="C" x2="6.336600" y2="-2.471700"/>
|
||||
<atom id="a56" elementType="C" x2="5.617600" y2="-2.876200"/>
|
||||
<atom id="a57" elementType="C" x2="5.617600" y2="-3.730000"/>
|
||||
<atom id="a58" elementType="C" x2="8.448800" y2="-2.876200"/>
|
||||
<atom id="a59" elementType="O" x2="8.448800" y2="-3.730000"/>
|
||||
<atom id="a60" elementType="C" x2="7.774700" y2="-2.471700">
|
||||
<atomParity atomRefs4="a60 a63 a54 a58">1</atomParity>
|
||||
</atom>
|
||||
<atom id="a61" elementType="N" x2="9.167800" y2="-2.471700"/>
|
||||
<atom id="a62" elementType="O" x2="9.167800" y2="-4.134500"/>
|
||||
<atom id="a63" elementType="C" x2="7.774700" y2="-1.662800"/>
|
||||
<atom id="a64" elementType="C" x2="9.167800" y2="-1.662800"/>
|
||||
<atom id="a65" elementType="C" x2="8.448800" y2="-1.258300"/>
|
||||
<atom id="a66" elementType="C" x2="9.886900" y2="-1.258300"/>
|
||||
<atom id="a67" elementType="C" x2="9.886900" y2="-0.404500"/>
|
||||
<atom id="a68" elementType="C" x2="8.448800" y2="-0.404500"/>
|
||||
<atom id="a69" elementType="C" x2="9.167800" y2="0.000000"/>
|
||||
<atom id="a70" elementType="O" x2="6.336600" y2="-1.662800"/>
|
||||
<atom id="a71" elementType="O" x2="10.606000" y2="0.000000"/>
|
||||
<atom id="a72" elementType="C" x2="1.393200" y2="-5.437800"/>
|
||||
<atom id="a73" elementType="N" x2="1.393200" y2="-6.246700"/>
|
||||
<atom id="a74" elementType="N" x2="0.674100" y2="-5.033300"/>
|
||||
</atomArray>
|
||||
<bondArray>
|
||||
<bond atomRefs2="a1 a2" order="1"/>
|
||||
<bond atomRefs2="a2 a3" order="1"/>
|
||||
<bond atomRefs2="a2 a10" order="2"/>
|
||||
<bond atomRefs2="a3 a4" order="1"/>
|
||||
<bond atomRefs2="a4 a5" order="1"/>
|
||||
<bond atomRefs2="a5 a6" order="1"/>
|
||||
<bond atomRefs2="a5 a11" order="2"/>
|
||||
<bond atomRefs2="a6 a7" order="1"/>
|
||||
<bond atomRefs2="a6 a12" order="1"/>
|
||||
<bond atomRefs2="a7 a8" order="1"/>
|
||||
<bond atomRefs2="a8 a9" order="2"/>
|
||||
<bond atomRefs2="a16 a8" order="1"/>
|
||||
<bond atomRefs2="a12 a13" order="1"/>
|
||||
<bond atomRefs2="a13 a14" order="1"/>
|
||||
<bond atomRefs2="a14 a15" order="1"/>
|
||||
<bond atomRefs2="a15 a72" order="1"/>
|
||||
<bond atomRefs2="a16 a17" order="1"/>
|
||||
<bond atomRefs2="a16 a18" order="1"/>
|
||||
<bond atomRefs2="a17 a19" order="1"/>
|
||||
<bond atomRefs2="a18 a20" order="1"/>
|
||||
<bond atomRefs2="a18 a21" order="1"/>
|
||||
<bond atomRefs2="a19 a20" order="1"/>
|
||||
<bond atomRefs2="a22 a21" order="1"/>
|
||||
<bond atomRefs2="a21 a27" order="2"/>
|
||||
<bond atomRefs2="a22 a23" order="1"/>
|
||||
<bond atomRefs2="a22 a28" order="1"/>
|
||||
<bond atomRefs2="a23 a24" order="1"/>
|
||||
<bond atomRefs2="a24 a25" order="1"/>
|
||||
<bond atomRefs2="a24 a31" order="2"/>
|
||||
<bond atomRefs2="a25 a26" order="1"/>
|
||||
<bond atomRefs2="a25 a32" order="1"/>
|
||||
<bond atomRefs2="a26 a36" order="1"/>
|
||||
<bond atomRefs2="a28 a29" order="1"/>
|
||||
<bond atomRefs2="a29 a30" order="1"/>
|
||||
<bond atomRefs2="a30 a57" order="1"/>
|
||||
<bond atomRefs2="a32 a33" order="1"/>
|
||||
<bond atomRefs2="a33 a34" order="2"/>
|
||||
<bond atomRefs2="a33 a35" order="1"/>
|
||||
<bond atomRefs2="a36 a37" order="1"/>
|
||||
<bond atomRefs2="a36 a38" order="2"/>
|
||||
<bond atomRefs2="a37 a39" order="1"/>
|
||||
<bond atomRefs2="a37 a44" order="1"/>
|
||||
<bond atomRefs2="a39 a40" order="1"/>
|
||||
<bond atomRefs2="a40 a41" order="1"/>
|
||||
<bond atomRefs2="a41 a42" order="1"/>
|
||||
<bond atomRefs2="a41 a43" order="2"/>
|
||||
<bond atomRefs2="a44 a49" order="1"/>
|
||||
<bond atomRefs2="a45 a47" order="1"/>
|
||||
<bond atomRefs2="a45 a52" order="1"/>
|
||||
<bond atomRefs2="a45 a46" order="2"/>
|
||||
<bond atomRefs2="a46 a53" order="1"/>
|
||||
<bond atomRefs2="a48 a47" order="1"/>
|
||||
<bond atomRefs2="a48 a61" order="1"/>
|
||||
<bond atomRefs2="a48 a49" order="1"/>
|
||||
<bond atomRefs2="a49 a62" order="2"/>
|
||||
<bond atomRefs2="a50 a51" order="1"/>
|
||||
<bond atomRefs2="a50 a52" order="2"/>
|
||||
<bond atomRefs2="a51 a53" order="2"/>
|
||||
<bond atomRefs2="a54 a55" order="1"/>
|
||||
<bond atomRefs2="a54 a60" order="1"/>
|
||||
<bond atomRefs2="a55 a56" order="1"/>
|
||||
<bond atomRefs2="a55 a70" order="2"/>
|
||||
<bond atomRefs2="a56 a57" order="1"/>
|
||||
<bond atomRefs2="a58 a59" order="2"/>
|
||||
<bond atomRefs2="a58 a60" order="1"/>
|
||||
<bond atomRefs2="a58 a61" order="1"/>
|
||||
<bond atomRefs2="a60 a63" order="1"/>
|
||||
<bond atomRefs2="a63 a65" order="1"/>
|
||||
<bond atomRefs2="a64 a66" order="2"/>
|
||||
<bond atomRefs2="a64 a65" order="1"/>
|
||||
<bond atomRefs2="a65 a68" order="2"/>
|
||||
<bond atomRefs2="a66 a67" order="1"/>
|
||||
<bond atomRefs2="a67 a69" order="2"/>
|
||||
<bond atomRefs2="a67 a71" order="1"/>
|
||||
<bond atomRefs2="a68 a69" order="1"/>
|
||||
<bond atomRefs2="a72 a73" order="2"/>
|
||||
<bond atomRefs2="a72 a74" order="1"/>
|
||||
</bondArray>
|
||||
</molecule>
|
||||
</cml>
|
||||
@@ -0,0 +1,2 @@
|
||||
InChI=1S/C59H84N18O14/c1-31(2)22-40(49(82)68-39(12-8-20-64-57(60)61)56(89)77-21-9-13-46(77)55(88)75-76-58(62)90)69-54(87)45(29-91-59(3,4)5)74-50(83)41(23-32-14-16-35(79)17-15-32)70-53(86)44(28-78)73-51(84)42(24-33-26-65-37-11-7-6-10-36(33)37)71-52(85)43(25-34-27-63-30-66-34)72-48(81)38-18-19-47(80)67-38/h6-7,10-11,14-17,26-27,30-31,38-46,65,78-79H,8-9,12-13,18-25,28-29H2,1-5H3,(H,63,66)(H,67,80)(H,68,82)(H,69,87)(H,70,86)(H,71,85)(H,72,81)(H,73,84)(H,74,83)(H,75,88)(H4,60,61,64)(H3,62,76,90)/t38-,39-,40-,41-,42-,43-,44-,45+,46-/m0/s1
|
||||
InChI=1S/C46H64N14O12S2/c47-35(62)15-14-29-40(67)58-32(22-36(48)63)43(70)59-33(45(72)60-18-5-9-34(60)44(71)56-28(8-4-17-52-46(50)51)39(66)53-23-37(49)64)24-74-73-19-16-38(65)54-30(21-26-10-12-27(61)13-11-26)41(68)57-31(42(69)55-29)20-25-6-2-1-3-7-25/h1-3,6-7,10-13,28-34,61H,4-5,8-9,14-24H2,(H2,47,62)(H2,48,63)(H2,49,64)(H,53,66)(H,54,65)(H,55,69)(H,56,71)(H,57,68)(H,58,67)(H,59,70)(H4,50,51,52)/t28-,29-,30-,31-,32-,33-,34-/m0/s1
|
||||
@@ -0,0 +1,354 @@
|
||||
@<TRIPOS>MOLECULE
|
||||
Goserelin
|
||||
91 96 0 0 0
|
||||
SMALL
|
||||
GASTEIGER
|
||||
|
||||
@<TRIPOS>ATOM
|
||||
1 O 12.8548 -2.6382 0.0000 O.2 4 UNK4 -0.2730
|
||||
2 O 13.9726 -2.5226 0.0000 O.2 4 UNK4 -0.2699
|
||||
3 O 10.1766 -3.9327 0.0000 O.2 4 UNK4 -0.2715
|
||||
4 O 11.2019 -0.7961 0.0000 O.3 4 UNK4 -0.3562
|
||||
5 O 8.7800 -1.3064 0.0000 O.2 4 UNK4 -0.2714
|
||||
6 O 16.8589 -3.2421 0.0000 O.2 4 UNK4 -0.2457
|
||||
7 O 10.3562 1.2163 0.0000 O.2 4 UNK4 -0.2715
|
||||
8 O 3.2702 4.8341 0.0000 O.2 1 UNK1 -0.2715
|
||||
9 O 2.3500 8.2734 0.0000 O.2 1 UNK1 -0.2733
|
||||
10 O 3.8213 4.2201 0.0000 O.2 2 HIS2 -0.2715
|
||||
11 O 5.2178 1.5938 0.0000 O.2 3 TRP3 -0.2715
|
||||
12 O 7.8960 2.8883 0.0000 O.2 4 UNK4 -0.2714
|
||||
13 O 7.1271 0.5358 0.0000 O.3 4 UNK4 -0.2179
|
||||
14 O 12.4834 3.1249 0.0000 O.3 4 UNK4 -0.2866
|
||||
15 N 13.1495 -4.0364 0.0000 N.am 4 UNK4 -0.2715
|
||||
16 N 11.2402 -2.9784 0.0000 N.am 4 UNK4 -0.1964
|
||||
17 N 15.2089 -3.2393 0.0000 N.am 4 UNK4 -0.0850
|
||||
18 N 10.1383 -1.7503 0.0000 N.am 4 UNK4 -0.1963
|
||||
19 N 15.6226 -2.5255 0.0000 N.am 4 UNK4 -0.0678
|
||||
20 N 12.3806 -6.3890 0.0000 N.pl3 4 UNK4 -0.0865
|
||||
21 N 9.2926 0.2619 0.0000 N.am 4 UNK4 -0.1937
|
||||
22 N 3.1485 7.0391 0.0000 N.am 1 UNK1 -0.1978
|
||||
23 N 4.3338 5.7884 0.0000 N.am 2 HIS2 -0.1959
|
||||
24 N 16.8613 -1.8132 0.0000 N.am 4 UNK4 -0.0665
|
||||
25 N 8.1907 1.4900 0.0000 N.am 4 UNK4 -0.1959
|
||||
26 N 5.1795 3.7761 0.0000 N.am 3 TRP3 -0.1960
|
||||
27 N 6.2814 2.5480 0.0000 N.am 4 UNK4 -0.1936
|
||||
28 N 11.3170 -7.3433 0.0000 N.pl3 4 UNK4 0.1354
|
||||
29 N 12.6753 -7.7873 0.0000 N.pl3 4 UNK4 0.1354
|
||||
30 NE1 3.8596 0.7098 0.0000 N.ar 3 TRP3 -0.2442
|
||||
31 ND1 6.7335 6.3823 0.0000 N.ar 2 HIS2 -0.2267
|
||||
32 NE2 5.9507 7.4636 0.0000 N.ar 2 HIS2 -0.2212
|
||||
33 C 13.9701 -3.9516 0.0000 C.3 4 UNK4 0.1552
|
||||
34 C 14.3043 -4.7058 0.0000 C.3 4 UNK4 0.0311
|
||||
35 C 13.6903 -5.2569 0.0000 C.3 4 UNK4 0.0237
|
||||
36 C 12.9766 -4.8431 0.0000 C.3 4 UNK4 0.0939
|
||||
37 C 12.5984 -3.4224 0.0000 C.2 4 UNK4 0.2458
|
||||
38 C 11.7912 -3.5925 0.0000 C.3 4 UNK4 0.1714
|
||||
39 C 14.3838 -3.2378 0.0000 C.2 4 UNK4 0.2788
|
||||
40 C 11.5349 -4.3767 0.0000 C.3 4 UNK4 0.0347
|
||||
41 C 12.0859 -4.9907 0.0000 C.3 4 UNK4 0.0492
|
||||
42 C 9.8819 -2.5345 0.0000 C.3 4 UNK4 0.1728
|
||||
43 C 10.4330 -3.1486 0.0000 C.2 4 UNK4 0.2616
|
||||
44 C 9.0747 -2.7046 0.0000 C.3 4 UNK4 0.0311
|
||||
45 C 8.8184 -3.4889 0.0000 C.3 4 UNK4 0.0022
|
||||
46 C 11.8295 -5.7750 0.0000 C.3 4 UNK4 0.2205
|
||||
47 C 8.0112 -3.6590 0.0000 C.3 4 UNK4 0.0001
|
||||
48 C 9.3694 -4.1029 0.0000 C.3 4 UNK4 0.0001
|
||||
49 C 9.5873 -1.1363 0.0000 C.2 4 UNK4 0.2642
|
||||
50 C 9.8436 -0.3521 0.0000 C.3 4 UNK4 0.2021
|
||||
51 C 10.6509 -0.1820 0.0000 C.3 4 UNK4 0.1729
|
||||
52 C 16.4476 -2.5269 0.0000 C.2 4 UNK4 0.3786
|
||||
53 C 2.9756 6.2324 0.0000 C.3 1 UNK1 0.1732
|
||||
54 C 12.0091 -0.6259 0.0000 C.3 4 UNK4 0.0931
|
||||
55 C 8.9979 1.6602 0.0000 C.3 4 UNK4 0.1771
|
||||
56 C 9.5489 1.0461 0.0000 C.2 4 UNK4 0.2620
|
||||
57 C 12.1242 -7.1732 0.0000 C.cat 4 UNK4 0.5346
|
||||
58 C 2.1549 6.1475 0.0000 C.3 1 UNK1 0.0407
|
||||
59 CA 4.8848 5.1744 0.0000 C.3 2 HIS2 0.1787
|
||||
60 CA 4.9232 2.9920 0.0000 C.3 3 TRP3 0.1771
|
||||
61 C 1.8207 6.9019 0.0000 C.3 1 UNK1 0.0891
|
||||
62 C 9.2542 2.4444 0.0000 C.3 4 UNK4 0.0574
|
||||
63 CB 4.1159 2.8219 0.0000 C.3 3 TRP3 0.0590
|
||||
64 C 3.5266 5.6183 0.0000 C.2 1 UNK1 0.2616
|
||||
65 C 2.4348 7.4528 0.0000 C.2 1 UNK1 0.2418
|
||||
66 CB 5.6921 5.3445 0.0000 C.3 2 HIS2 0.0785
|
||||
67 C 6.8324 1.9340 0.0000 C.3 4 UNK4 0.2055
|
||||
68 C 4.6285 4.3902 0.0000 C.2 2 HIS2 0.2620
|
||||
69 C 12.1793 -1.4332 0.0000 C.3 4 UNK4 0.0296
|
||||
70 C 12.8164 -0.4557 0.0000 C.3 4 UNK4 0.0296
|
||||
71 C 11.8389 0.1814 0.0000 C.3 4 UNK4 0.0296
|
||||
72 CG 3.8596 2.0376 0.0000 C.ar 3 TRP3 0.0006
|
||||
73 C 5.4742 2.3779 0.0000 C.2 3 TRP3 0.2620
|
||||
74 C 7.6397 2.1041 0.0000 C.2 4 UNK4 0.2643
|
||||
75 C 10.0615 2.6145 0.0000 C.ar 4 UNK4 -0.0198
|
||||
76 CD2 3.0790 1.7862 0.0000 C.ar 3 TRP3 0.0152
|
||||
77 CG 5.9484 6.1287 0.0000 C.ar 2 HIS2 0.0821
|
||||
78 CD1 4.3411 1.3737 0.0000 C.ar 3 TRP3 0.0946
|
||||
79 CE2 3.0790 0.9612 0.0000 C.ar 3 TRP3 0.0810
|
||||
80 C 6.5761 1.1498 0.0000 C.3 4 UNK4 0.2130
|
||||
81 CE3 2.3645 2.1987 0.0000 C.ar 3 TRP3 0.0012
|
||||
82 C 10.3178 3.3987 0.0000 C.ar 4 UNK4 -0.0009
|
||||
83 C 10.6125 2.0005 0.0000 C.ar 4 UNK4 -0.0009
|
||||
84 CZ2 2.3645 0.5487 0.0000 C.ar 3 TRP3 0.0191
|
||||
85 CD2 5.4646 6.7970 0.0000 C.ar 2 HIS2 0.1154
|
||||
86 CZ3 1.6500 1.7862 0.0000 C.ar 3 TRP3 0.0001
|
||||
87 CH2 1.6500 0.9612 0.0000 C.ar 3 TRP3 0.0015
|
||||
88 C 11.1251 3.5688 0.0000 C.ar 4 UNK4 0.0417
|
||||
89 C 11.4198 2.1706 0.0000 C.ar 4 UNK4 0.0417
|
||||
90 CE1 6.7349 7.2073 0.0000 C.ar 2 HIS2 0.1986
|
||||
91 C 11.6761 2.9548 0.0000 C.ar 4 UNK4 0.1957
|
||||
@<TRIPOS>BOND
|
||||
1 1 37 2
|
||||
2 2 39 2
|
||||
3 3 43 2
|
||||
4 4 51 1
|
||||
5 4 54 1
|
||||
6 5 49 2
|
||||
7 6 52 2
|
||||
8 7 56 2
|
||||
9 8 64 2
|
||||
10 9 65 2
|
||||
11 10 68 2
|
||||
12 11 73 2
|
||||
13 12 74 2
|
||||
14 13 80 1
|
||||
15 14 91 1
|
||||
16 15 33 1
|
||||
17 15 36 1
|
||||
18 15 37 am
|
||||
19 38 16 1
|
||||
20 16 43 am
|
||||
21 17 19 1
|
||||
22 17 39 am
|
||||
23 42 18 1
|
||||
24 18 49 am
|
||||
25 19 52 am
|
||||
26 20 46 1
|
||||
27 20 57 2
|
||||
28 50 21 1
|
||||
29 21 56 am
|
||||
30 22 53 1
|
||||
31 22 65 am
|
||||
32 59 23 1
|
||||
33 23 64 am
|
||||
34 24 52 am
|
||||
35 55 25 1
|
||||
36 25 74 am
|
||||
37 60 26 1
|
||||
38 26 68 am
|
||||
39 67 27 1
|
||||
40 27 73 am
|
||||
41 28 57 1
|
||||
42 29 57 1
|
||||
43 30 78 ar
|
||||
44 30 79 ar
|
||||
45 31 77 ar
|
||||
46 31 90 ar
|
||||
47 32 85 ar
|
||||
48 32 90 ar
|
||||
49 33 34 1
|
||||
50 33 39 1
|
||||
51 34 35 1
|
||||
52 35 36 1
|
||||
53 37 38 1
|
||||
54 38 40 1
|
||||
55 40 41 1
|
||||
56 41 46 1
|
||||
57 42 43 1
|
||||
58 42 44 1
|
||||
59 44 45 1
|
||||
60 45 47 1
|
||||
61 45 48 1
|
||||
62 49 50 1
|
||||
63 50 51 1
|
||||
64 53 58 1
|
||||
65 53 64 1
|
||||
66 54 69 1
|
||||
67 54 70 1
|
||||
68 54 71 1
|
||||
69 55 56 1
|
||||
70 55 62 1
|
||||
71 58 61 1
|
||||
72 59 66 1
|
||||
73 59 68 1
|
||||
74 60 63 1
|
||||
75 60 73 1
|
||||
76 61 65 1
|
||||
77 62 75 1
|
||||
78 63 72 1
|
||||
79 66 77 1
|
||||
80 67 74 1
|
||||
81 67 80 1
|
||||
82 72 76 ar
|
||||
83 72 78 ar
|
||||
84 75 82 ar
|
||||
85 75 83 ar
|
||||
86 76 79 ar
|
||||
87 76 81 ar
|
||||
88 77 85 ar
|
||||
89 79 84 ar
|
||||
90 81 86 ar
|
||||
91 82 88 ar
|
||||
92 83 89 ar
|
||||
93 84 87 ar
|
||||
94 86 87 ar
|
||||
95 88 91 ar
|
||||
96 89 91 ar
|
||||
@<TRIPOS>MOLECULE
|
||||
Desmopressin
|
||||
74 77 0 0 0
|
||||
SMALL
|
||||
GASTEIGER
|
||||
|
||||
@<TRIPOS>ATOM
|
||||
1 N 0.0000 -7.8646 0.0000 N.am 1 LIG1 -0.0862
|
||||
2 C 0.6741 -7.4601 0.0000 C.2 1 LIG1 0.2828
|
||||
3 C 1.3932 -7.8646 0.0000 C.3 1 LIG1 0.2031
|
||||
4 N 2.1122 -7.4601 0.0000 N.am 1 LIG1 -0.1939
|
||||
5 C 2.8313 -7.8646 0.0000 C.2 1 LIG1 0.2617
|
||||
6 C 3.5503 -7.4601 0.0000 C.3 1 LIG1 0.1729
|
||||
7 N 4.2693 -7.8646 0.0000 N.am 1 LIG1 -0.1964
|
||||
8 C 4.9435 -7.4601 0.0000 C.2 1 LIG1 0.2598
|
||||
9 O 5.6625 -7.8646 0.0000 O.2 1 LIG1 -0.2715
|
||||
10 O 0.6741 -6.6512 0.0000 O.2 1 LIG1 -0.2697
|
||||
11 O 2.8313 -8.7184 0.0000 O.2 1 LIG1 -0.2715
|
||||
12 C 3.5503 -6.6512 0.0000 C.3 1 LIG1 0.0348
|
||||
13 C 2.8313 -6.2467 0.0000 C.3 1 LIG1 0.0492
|
||||
14 C 2.8313 -5.4378 0.0000 C.3 1 LIG1 0.2205
|
||||
15 N 2.1122 -5.0333 0.0000 N.pl3 1 LIG1 -0.0865
|
||||
16 C 4.9435 -6.6512 0.0000 C.3 1 LIG1 0.1536
|
||||
17 C 4.3143 -6.1568 0.0000 C.3 1 LIG1 0.0310
|
||||
18 N 5.6176 -6.1568 0.0000 N.am 1 LIG1 -0.2715
|
||||
19 C 4.5390 -5.3929 0.0000 C.3 1 LIG1 0.0237
|
||||
20 C 5.3479 -5.3929 0.0000 C.3 1 LIG1 0.0939
|
||||
21 C 6.3366 -6.5613 0.0000 C.2 1 LIG1 0.2467
|
||||
22 C 7.0557 -6.1568 0.0000 C.3 1 LIG1 0.1828
|
||||
23 N 7.7747 -6.5613 0.0000 N.am 1 LIG1 -0.1954
|
||||
24 C 8.4488 -6.1568 0.0000 C.2 1 LIG1 0.2621
|
||||
25 C 9.1678 -6.5613 0.0000 C.3 1 LIG1 0.1819
|
||||
26 N 9.8869 -6.1568 0.0000 N.am 1 LIG1 -0.1958
|
||||
27 O 6.3366 -7.4152 0.0000 O.2 1 LIG1 -0.2730
|
||||
28 C 7.0557 -5.3479 0.0000 C.3 1 LIG1 0.0996
|
||||
29 S 6.3366 -4.9435 0.0000 S.3 1 LIG1 -0.0798
|
||||
30 S 6.3366 -4.1345 0.0000 S.3 1 LIG1 -0.0816
|
||||
31 O 8.4488 -5.3479 0.0000 O.2 1 LIG1 -0.2715
|
||||
32 C 9.1678 -7.4152 0.0000 C.3 1 LIG1 0.1195
|
||||
33 C 9.8869 -7.8197 0.0000 C.2 1 LIG1 0.2630
|
||||
34 O 9.8869 -8.6286 0.0000 O.2 1 LIG1 -0.2716
|
||||
35 N 10.6060 -7.4152 0.0000 N.am 1 LIG1 -0.0877
|
||||
36 C 9.8869 -5.3479 0.0000 C.2 1 LIG1 0.2616
|
||||
37 C 10.6060 -4.9435 0.0000 C.3 1 LIG1 0.1733
|
||||
38 O 9.1678 -4.9435 0.0000 O.2 1 LIG1 -0.2715
|
||||
39 C 11.3250 -5.3479 0.0000 C.3 1 LIG1 0.0408
|
||||
40 C 12.0441 -4.9435 0.0000 C.3 1 LIG1 0.0908
|
||||
41 C 12.7631 -5.3479 0.0000 C.2 1 LIG1 0.2608
|
||||
42 N 13.4822 -4.9435 0.0000 N.am 1 LIG1 -0.0878
|
||||
43 O 12.7631 -6.2018 0.0000 O.2 1 LIG1 -0.2717
|
||||
44 N 10.6060 -4.1345 0.0000 N.am 1 LIG1 -0.1963
|
||||
45 C 11.3250 -2.8762 0.0000 C.ar 1 LIG1 -0.0200
|
||||
46 C 11.3250 -3.7300 0.0000 C.ar 1 LIG1 -0.0042
|
||||
47 C 10.6060 -2.4717 0.0000 C.3 1 LIG1 0.0574
|
||||
48 C 9.8869 -2.8762 0.0000 C.3 1 LIG1 0.1771
|
||||
49 C 9.8869 -3.7300 0.0000 C.2 1 LIG1 0.2619
|
||||
50 C 12.7631 -2.8762 0.0000 C.ar 1 LIG1 -0.0003
|
||||
51 C 12.7631 -3.7300 0.0000 C.ar 1 LIG1 -0.0000
|
||||
52 C 12.0441 -2.4717 0.0000 C.ar 1 LIG1 -0.0042
|
||||
53 C 12.0441 -4.1345 0.0000 C.ar 1 LIG1 -0.0003
|
||||
54 N 7.0557 -2.8762 0.0000 N.am 1 LIG1 -0.1974
|
||||
55 C 6.3366 -2.4717 0.0000 C.2 1 LIG1 0.2427
|
||||
56 C 5.6176 -2.8762 0.0000 C.3 1 LIG1 0.0993
|
||||
57 C 5.6176 -3.7300 0.0000 C.3 1 LIG1 0.0783
|
||||
58 C 8.4488 -2.8762 0.0000 C.2 1 LIG1 0.2620
|
||||
59 O 8.4488 -3.7300 0.0000 O.2 1 LIG1 -0.2715
|
||||
60 C 7.7747 -2.4717 0.0000 C.3 1 LIG1 0.1770
|
||||
61 N 9.1678 -2.4717 0.0000 N.am 1 LIG1 -0.1960
|
||||
62 O 9.1678 -4.1345 0.0000 O.2 1 LIG1 -0.2715
|
||||
63 C 7.7747 -1.6628 0.0000 C.3 1 LIG1 0.0574
|
||||
64 C 9.1678 -1.6628 0.0000 C.ar 1 LIG1 -0.0009
|
||||
65 C 8.4488 -1.2583 0.0000 C.ar 1 LIG1 -0.0198
|
||||
66 C 9.8869 -1.2583 0.0000 C.ar 1 LIG1 0.0417
|
||||
67 C 9.8869 -0.4045 0.0000 C.ar 1 LIG1 0.1957
|
||||
68 C 8.4488 -0.4045 0.0000 C.ar 1 LIG1 -0.0009
|
||||
69 C 9.1678 0.0000 0.0000 C.ar 1 LIG1 0.0417
|
||||
70 O 6.3366 -1.6628 0.0000 O.2 1 LIG1 -0.2733
|
||||
71 O 10.6060 0.0000 0.0000 O.3 1 LIG1 -0.2866
|
||||
72 C 1.3932 -5.4378 0.0000 C.cat 1 LIG1 0.5346
|
||||
73 N 1.3932 -6.2467 0.0000 N.pl3 1 LIG1 0.1354
|
||||
74 N 0.6741 -5.0333 0.0000 N.pl3 1 LIG1 0.1354
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 am
|
||||
2 2 3 1
|
||||
3 2 10 2
|
||||
4 3 4 1
|
||||
5 4 5 am
|
||||
6 5 6 1
|
||||
7 5 11 2
|
||||
8 6 7 1
|
||||
9 6 12 1
|
||||
10 7 8 am
|
||||
11 8 9 2
|
||||
12 16 8 1
|
||||
13 12 13 1
|
||||
14 13 14 1
|
||||
15 14 15 1
|
||||
16 15 72 1
|
||||
17 16 17 1
|
||||
18 16 18 1
|
||||
19 17 19 1
|
||||
20 18 20 1
|
||||
21 18 21 am
|
||||
22 19 20 1
|
||||
23 22 21 1
|
||||
24 21 27 2
|
||||
25 22 23 1
|
||||
26 22 28 1
|
||||
27 23 24 am
|
||||
28 24 25 1
|
||||
29 24 31 2
|
||||
30 25 26 1
|
||||
31 25 32 1
|
||||
32 26 36 am
|
||||
33 28 29 1
|
||||
34 29 30 1
|
||||
35 30 57 1
|
||||
36 32 33 1
|
||||
37 33 34 2
|
||||
38 33 35 am
|
||||
39 36 37 1
|
||||
40 36 38 2
|
||||
41 37 39 1
|
||||
42 37 44 1
|
||||
43 39 40 1
|
||||
44 40 41 1
|
||||
45 41 42 am
|
||||
46 41 43 2
|
||||
47 44 49 am
|
||||
48 45 47 1
|
||||
49 45 52 ar
|
||||
50 45 46 ar
|
||||
51 46 53 ar
|
||||
52 48 47 1
|
||||
53 48 61 1
|
||||
54 48 49 1
|
||||
55 49 62 2
|
||||
56 50 51 ar
|
||||
57 50 52 ar
|
||||
58 51 53 ar
|
||||
59 54 55 am
|
||||
60 54 60 1
|
||||
61 55 56 1
|
||||
62 55 70 2
|
||||
63 56 57 1
|
||||
64 58 59 2
|
||||
65 58 60 1
|
||||
66 58 61 am
|
||||
67 60 63 1
|
||||
68 63 65 1
|
||||
69 64 66 ar
|
||||
70 64 65 ar
|
||||
71 65 68 ar
|
||||
72 66 67 ar
|
||||
73 67 69 ar
|
||||
74 67 71 1
|
||||
75 68 69 ar
|
||||
76 72 73 2
|
||||
77 72 74 1
|
||||
@@ -0,0 +1,491 @@
|
||||
Goserelin
|
||||
Mrv0541 04221219462D
|
||||
|
||||
91 96 0 0 1 0 999 V2000
|
||||
12.8548 -2.6382 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.9726 -2.5226 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.1766 -3.9327 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.2019 -0.7961 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.7800 -1.3064 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.8589 -3.2421 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.3562 1.2163 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.2702 4.8341 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.3500 8.2734 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8213 4.2201 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.2178 1.5938 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.8960 2.8883 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.1271 0.5358 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.4834 3.1249 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.1495 -4.0364 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.2402 -2.9784 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.2089 -3.2393 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.1383 -1.7503 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.6226 -2.5255 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.3806 -6.3890 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.2926 0.2619 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.1485 7.0391 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.3338 5.7884 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.8613 -1.8132 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.1907 1.4900 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.1795 3.7761 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.2814 2.5480 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3170 -7.3433 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.6753 -7.7873 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8596 0.7098 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.7335 6.3823 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.9507 7.4636 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.9701 -3.9516 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
14.3043 -4.7058 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.6903 -5.2569 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.9766 -4.8431 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.5984 -3.4224 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.7912 -3.5925 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
|
||||
14.3838 -3.2378 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.5349 -4.3767 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.0859 -4.9907 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.8819 -2.5345 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
|
||||
10.4330 -3.1486 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.0747 -2.7046 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.8184 -3.4889 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.8295 -5.7750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.0112 -3.6590 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.3694 -4.1029 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.5873 -1.1363 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.8436 -0.3521 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
10.6509 -0.1820 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.4476 -2.5269 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.9756 6.2324 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
12.0091 -0.6259 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.9979 1.6602 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
|
||||
9.5489 1.0461 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.1242 -7.1732 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.1549 6.1475 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.8848 5.1744 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
4.9232 2.9920 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
1.8207 6.9019 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.2542 2.4444 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.1159 2.8219 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.5266 5.6183 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.4348 7.4528 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.6921 5.3445 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.8324 1.9340 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
|
||||
4.6285 4.3902 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.1793 -1.4332 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.8164 -0.4557 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.8389 0.1814 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8596 2.0376 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.4742 2.3779 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.6397 2.1041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.0615 2.6145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.0790 1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.9484 6.1287 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.3411 1.3737 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.0790 0.9612 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.5761 1.1498 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.3645 2.1987 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.3178 3.3987 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6125 2.0005 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.3645 0.5487 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.4646 6.7970 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.6500 1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.6500 0.9612 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.1251 3.5688 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.4198 2.1706 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.7349 7.2073 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.6761 2.9548 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 37 2 0 0 0 0
|
||||
2 39 2 0 0 0 0
|
||||
3 43 2 0 0 0 0
|
||||
4 51 1 0 0 0 0
|
||||
4 54 1 0 0 0 0
|
||||
5 49 2 0 0 0 0
|
||||
6 52 2 0 0 0 0
|
||||
7 56 2 0 0 0 0
|
||||
8 64 2 0 0 0 0
|
||||
9 65 2 0 0 0 0
|
||||
10 68 2 0 0 0 0
|
||||
11 73 2 0 0 0 0
|
||||
12 74 2 0 0 0 0
|
||||
13 80 1 0 0 0 0
|
||||
14 91 1 0 0 0 0
|
||||
15 33 1 0 0 0 0
|
||||
15 36 1 0 0 0 0
|
||||
15 37 1 0 0 0 0
|
||||
38 16 1 6 0 0 0
|
||||
16 43 1 0 0 0 0
|
||||
17 19 1 0 0 0 0
|
||||
17 39 1 0 0 0 0
|
||||
42 18 1 6 0 0 0
|
||||
18 49 1 0 0 0 0
|
||||
19 52 1 0 0 0 0
|
||||
20 46 1 0 0 0 0
|
||||
20 57 2 0 0 0 0
|
||||
50 21 1 6 0 0 0
|
||||
21 56 1 0 0 0 0
|
||||
22 53 1 0 0 0 0
|
||||
22 65 1 0 0 0 0
|
||||
59 23 1 1 0 0 0
|
||||
23 64 1 0 0 0 0
|
||||
24 52 1 0 0 0 0
|
||||
55 25 1 1 0 0 0
|
||||
25 74 1 0 0 0 0
|
||||
60 26 1 6 0 0 0
|
||||
26 68 1 0 0 0 0
|
||||
67 27 1 6 0 0 0
|
||||
27 73 1 0 0 0 0
|
||||
28 57 1 0 0 0 0
|
||||
29 57 1 0 0 0 0
|
||||
30 78 1 0 0 0 0
|
||||
30 79 1 0 0 0 0
|
||||
31 77 1 0 0 0 0
|
||||
31 90 1 0 0 0 0
|
||||
32 85 1 0 0 0 0
|
||||
32 90 2 0 0 0 0
|
||||
33 34 1 0 0 0 0
|
||||
33 39 1 6 0 0 0
|
||||
34 35 1 0 0 0 0
|
||||
35 36 1 0 0 0 0
|
||||
37 38 1 0 0 0 0
|
||||
38 40 1 0 0 0 0
|
||||
40 41 1 0 0 0 0
|
||||
41 46 1 0 0 0 0
|
||||
42 43 1 0 0 0 0
|
||||
42 44 1 0 0 0 0
|
||||
44 45 1 0 0 0 0
|
||||
45 47 1 0 0 0 0
|
||||
45 48 1 0 0 0 0
|
||||
49 50 1 0 0 0 0
|
||||
50 51 1 0 0 0 0
|
||||
53 58 1 0 0 0 0
|
||||
53 64 1 6 0 0 0
|
||||
54 69 1 0 0 0 0
|
||||
54 70 1 0 0 0 0
|
||||
54 71 1 0 0 0 0
|
||||
55 56 1 0 0 0 0
|
||||
55 62 1 0 0 0 0
|
||||
58 61 1 0 0 0 0
|
||||
59 66 1 0 0 0 0
|
||||
59 68 1 0 0 0 0
|
||||
60 63 1 0 0 0 0
|
||||
60 73 1 0 0 0 0
|
||||
61 65 1 0 0 0 0
|
||||
62 75 1 0 0 0 0
|
||||
63 72 1 0 0 0 0
|
||||
66 77 1 0 0 0 0
|
||||
67 74 1 0 0 0 0
|
||||
67 80 1 0 0 0 0
|
||||
72 76 1 0 0 0 0
|
||||
72 78 2 0 0 0 0
|
||||
75 82 2 0 0 0 0
|
||||
75 83 1 0 0 0 0
|
||||
76 79 1 0 0 0 0
|
||||
76 81 2 0 0 0 0
|
||||
77 85 2 0 0 0 0
|
||||
79 84 2 0 0 0 0
|
||||
81 86 1 0 0 0 0
|
||||
82 88 1 0 0 0 0
|
||||
83 89 2 0 0 0 0
|
||||
84 87 1 0 0 0 0
|
||||
86 87 2 0 0 0 0
|
||||
88 91 2 0 0 0 0
|
||||
89 91 1 0 0 0 0
|
||||
M END
|
||||
> <DRUGBANK_ID>
|
||||
DB00014
|
||||
|
||||
> <DRUG_GROUPS>
|
||||
approved
|
||||
|
||||
> <GENERIC_NAME>
|
||||
Goserelin
|
||||
|
||||
> <SALTS>
|
||||
Goserelin acetate
|
||||
|
||||
> <BRANDS>
|
||||
Zoladex
|
||||
|
||||
> <CHEMICAL_FORMULA>
|
||||
C59H84N18O14
|
||||
|
||||
> <MOLECULAR_WEIGHT>
|
||||
1269.4105
|
||||
|
||||
> <EXACT_MASS>
|
||||
1268.641439486
|
||||
|
||||
> <IUPAC_NAME>
|
||||
(2S)-1-[(2S)-2-[(2S)-2-[(2R)-3-(tert-butoxy)-2-[(2S)-2-[(2S)-3-hydroxy-2-[(2S)-2-[(2S)-3-(1H-imidazol-5-yl)-2-{[(2S)-5-oxopyrrolidin-2-yl]formamido}propanamido]-3-(1H-indol-3-yl)propanamido]propanamido]-3-(4-hydroxyphenyl)propanamido]propanamido]-4-methylpentanamido]-5-[(diaminomethylidene)amino]pentanoyl]-N-(carbamoylamino)pyrrolidine-2-carboxamide
|
||||
|
||||
> <INCHI_IDENTIFIER>
|
||||
InChI=1S/C59H84N18O14/c1-31(2)22-40(49(82)68-39(12-8-20-64-57(60)61)56(89)77-21-9-13-46(77)55(88)75-76-58(62)90)69-54(87)45(29-91-59(3,4)5)74-50(83)41(23-32-14-16-35(79)17-15-32)70-53(86)44(28-78)73-51(84)42(24-33-26-65-37-11-7-6-10-36(33)37)71-52(85)43(25-34-27-63-30-66-34)72-48(81)38-18-19-47(80)67-38/h6-7,10-11,14-17,26-27,30-31,38-46,65,78-79H,8-9,12-13,18-25,28-29H2,1-5H3,(H,63,66)(H,67,80)(H,68,82)(H,69,87)(H,70,86)(H,71,85)(H,72,81)(H,73,84)(H,74,83)(H,75,88)(H4,60,61,64)(H3,62,76,90)/t38-,39-,40-,41-,42-,43-,44-,45+,46-/m0/s1
|
||||
|
||||
> <INCHI_KEY>
|
||||
InChIKey=BLCLNMBMMGCOAS-URPVMXJPSA-N
|
||||
|
||||
> <SMILES>
|
||||
CC(C)C[C@H](NC(=O)[C@@H](COC(C)(C)C)NC(=O)[C@H](CC1=CC=C(O)C=C1)NC(=O)[C@H](CO)NC(=O)[C@H](CC1=CNC2=CC=CC=C12)NC(=O)[C@H](CC1=CN=CN1)NC(=O)[C@@H]1CCC(=O)N1)C(=O)N[C@@H](CCCN=C(N)N)C(=O)N1CCC[C@H]1C(=O)NNC(N)=O
|
||||
|
||||
> <JCHEM_ACCEPTOR_COUNT>
|
||||
18
|
||||
|
||||
> <JCHEM_DONOR_COUNT>
|
||||
17
|
||||
|
||||
> <JCHEM_ACIDIC_PKA>
|
||||
9.82
|
||||
|
||||
> <ALOGPS_LOGP>
|
||||
0.3
|
||||
|
||||
> <JCHEM_LOGP>
|
||||
-5.2
|
||||
|
||||
> <ALOGPS_LOGS>
|
||||
-4.7
|
||||
|
||||
> <JCHEM_POLARIZABILITY>
|
||||
131.22
|
||||
|
||||
> <JCHEM_POLAR_SURFACE_AREA>
|
||||
495.89
|
||||
|
||||
> <JCHEM_REFRACTIVITY>
|
||||
325.84
|
||||
|
||||
> <JCHEM_ROTATABLE_BOND_COUNT>
|
||||
33
|
||||
|
||||
> <ALOGPS_SOLUBILITY>
|
||||
2.83e-02 g/l
|
||||
|
||||
$$$$
|
||||
Desmopressin
|
||||
Mrv0541 04221221522D
|
||||
|
||||
74 77 0 0 1 0 999 V2000
|
||||
0.0000 -7.8646 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.6741 -7.4601 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.3932 -7.8646 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.1122 -7.4601 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.8313 -7.8646 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.5503 -7.4601 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
4.2693 -7.8646 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.9435 -7.4601 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.6625 -7.8646 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.6741 -6.6512 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.8313 -8.7184 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.5503 -6.6512 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.8313 -6.2467 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.8313 -5.4378 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.1122 -5.0333 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.9435 -6.6512 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
|
||||
4.3143 -6.1568 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.6176 -6.1568 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.5390 -5.3929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.3479 -5.3929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.3366 -6.5613 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.0557 -6.1568 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
7.7747 -6.5613 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.4488 -6.1568 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.1678 -6.5613 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
9.8869 -6.1568 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.3366 -7.4152 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.0557 -5.3479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.3366 -4.9435 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.3366 -4.1345 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.4488 -5.3479 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.1678 -7.4152 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.8869 -7.8197 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.8869 -8.6286 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6060 -7.4152 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.8869 -5.3479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6060 -4.9435 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
|
||||
9.1678 -4.9435 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3250 -5.3479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.0441 -4.9435 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.7631 -5.3479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.4822 -4.9435 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.7631 -6.2018 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6060 -4.1345 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3250 -2.8762 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3250 -3.7300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6060 -2.4717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.8869 -2.8762 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
9.8869 -3.7300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.7631 -2.8762 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.7631 -3.7300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.0441 -2.4717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.0441 -4.1345 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.0557 -2.8762 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.3366 -2.4717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.6176 -2.8762 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.6176 -3.7300 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.4488 -2.8762 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.4488 -3.7300 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.7747 -2.4717 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
|
||||
9.1678 -2.4717 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.1678 -4.1345 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.7747 -1.6628 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.1678 -1.6628 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.4488 -1.2583 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.8869 -1.2583 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.8869 -0.4045 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.4488 -0.4045 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.1678 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.3366 -1.6628 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6060 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.3932 -5.4378 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.3932 -6.2467 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.6741 -5.0333 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0 0
|
||||
2 3 1 0 0 0 0
|
||||
2 10 2 0 0 0 0
|
||||
3 4 1 0 0 0 0
|
||||
4 5 1 0 0 0 0
|
||||
5 6 1 0 0 0 0
|
||||
5 11 2 0 0 0 0
|
||||
6 7 1 0 0 0 0
|
||||
6 12 1 6 0 0 0
|
||||
7 8 1 0 0 0 0
|
||||
8 9 2 0 0 0 0
|
||||
16 8 1 6 0 0 0
|
||||
12 13 1 0 0 0 0
|
||||
13 14 1 0 0 0 0
|
||||
14 15 1 0 0 0 0
|
||||
15 72 1 0 0 0 0
|
||||
16 17 1 0 0 0 0
|
||||
16 18 1 0 0 0 0
|
||||
17 19 1 0 0 0 0
|
||||
18 20 1 0 0 0 0
|
||||
18 21 1 0 0 0 0
|
||||
19 20 1 0 0 0 0
|
||||
22 21 1 6 0 0 0
|
||||
21 27 2 0 0 0 0
|
||||
22 23 1 0 0 0 0
|
||||
22 28 1 0 0 0 0
|
||||
23 24 1 0 0 0 0
|
||||
24 25 1 0 0 0 0
|
||||
24 31 2 0 0 0 0
|
||||
25 26 1 0 0 0 0
|
||||
25 32 1 1 0 0 0
|
||||
26 36 1 0 0 0 0
|
||||
28 29 1 0 0 0 0
|
||||
29 30 1 0 0 0 0
|
||||
30 57 1 0 0 0 0
|
||||
32 33 1 0 0 0 0
|
||||
33 34 2 0 0 0 0
|
||||
33 35 1 0 0 0 0
|
||||
36 37 1 0 0 0 0
|
||||
36 38 2 0 0 0 0
|
||||
37 39 1 1 0 0 0
|
||||
37 44 1 0 0 0 0
|
||||
39 40 1 0 0 0 0
|
||||
40 41 1 0 0 0 0
|
||||
41 42 1 0 0 0 0
|
||||
41 43 2 0 0 0 0
|
||||
44 49 1 0 0 0 0
|
||||
45 47 1 0 0 0 0
|
||||
45 52 1 0 0 0 0
|
||||
45 46 2 0 0 0 0
|
||||
46 53 1 0 0 0 0
|
||||
48 47 1 1 0 0 0
|
||||
48 61 1 0 0 0 0
|
||||
48 49 1 0 0 0 0
|
||||
49 62 2 0 0 0 0
|
||||
50 51 1 0 0 0 0
|
||||
50 52 2 0 0 0 0
|
||||
51 53 2 0 0 0 0
|
||||
54 55 1 0 0 0 0
|
||||
54 60 1 0 0 0 0
|
||||
55 56 1 0 0 0 0
|
||||
55 70 2 0 0 0 0
|
||||
56 57 1 0 0 0 0
|
||||
58 59 2 0 0 0 0
|
||||
58 60 1 0 0 0 0
|
||||
58 61 1 0 0 0 0
|
||||
60 63 1 1 0 0 0
|
||||
63 65 1 0 0 0 0
|
||||
64 66 2 0 0 0 0
|
||||
64 65 1 0 0 0 0
|
||||
65 68 2 0 0 0 0
|
||||
66 67 1 0 0 0 0
|
||||
67 69 2 0 0 0 0
|
||||
67 71 1 0 0 0 0
|
||||
68 69 1 0 0 0 0
|
||||
72 73 2 3 0 0 0
|
||||
72 74 1 0 0 0 0
|
||||
M END
|
||||
> <DRUGBANK_ID>
|
||||
DB00035
|
||||
|
||||
> <DRUG_GROUPS>
|
||||
approved
|
||||
|
||||
> <GENERIC_NAME>
|
||||
Desmopressin
|
||||
|
||||
> <SYNONYMS>
|
||||
1-Desamino-8-D-arginine vasopressin; Desmopresina [INN-Spanish]; Desmopressine [INN-French]; Desmopressinum [INN-Latin]
|
||||
|
||||
> <SALTS>
|
||||
Desmopressin acetate
|
||||
|
||||
> <BRANDS>
|
||||
Adiuretin; Concentraid; DDAVP; Minirin; Stimate
|
||||
|
||||
> <CHEMICAL_FORMULA>
|
||||
C46H64N14O12S2
|
||||
|
||||
> <MOLECULAR_WEIGHT>
|
||||
1069.217
|
||||
|
||||
> <EXACT_MASS>
|
||||
1068.426954962
|
||||
|
||||
> <IUPAC_NAME>
|
||||
(2S)-2-{[(2S)-1-{[(4R,7S,10S,13S,16S)-13-benzyl-10-(2-carbamoylethyl)-7-(carbamoylmethyl)-16-[(4-hydroxyphenyl)methyl]-6,9,12,15,18-pentaoxo-1,2-dithia-5,8,11,14,17-pentaazacycloicosan-4-yl]carbonyl}pyrrolidin-2-yl]formamido}-5-carbamimidamido-N-(carbamoylmethyl)pentanamide
|
||||
|
||||
> <INCHI_IDENTIFIER>
|
||||
InChI=1S/C46H64N14O12S2/c47-35(62)15-14-29-40(67)58-32(22-36(48)63)43(70)59-33(45(72)60-18-5-9-34(60)44(71)56-28(8-4-17-52-46(50)51)39(66)53-23-37(49)64)24-74-73-19-16-38(65)54-30(21-26-10-12-27(61)13-11-26)41(68)57-31(42(69)55-29)20-25-6-2-1-3-7-25/h1-3,6-7,10-13,28-34,61H,4-5,8-9,14-24H2,(H2,47,62)(H2,48,63)(H2,49,64)(H,53,66)(H,54,65)(H,55,69)(H,56,71)(H,57,68)(H,58,67)(H,59,70)(H4,50,51,52)/t28-,29-,30-,31-,32-,33-,34-/m0/s1
|
||||
|
||||
> <INCHI_KEY>
|
||||
InChIKey=NFLWUMRGJYTJIN-NXBWRCJVSA-N
|
||||
|
||||
> <SMILES>
|
||||
NC(=O)CC[C@@H]1NC(=O)[C@H](CC2=CC=CC=C2)NC(=O)[C@H](CC2=CC=C(O)C=C2)NC(=O)CCSSC[C@H](NC(=O)[C@H](CC(N)=O)NC1=O)C(=O)N1CCC[C@H]1C(=O)N[C@@H](CCCNC(N)=N)C(=O)NCC(N)=O
|
||||
|
||||
> <JCHEM_ACCEPTOR_COUNT>
|
||||
15
|
||||
|
||||
> <JCHEM_DONOR_COUNT>
|
||||
14
|
||||
|
||||
> <JCHEM_ACIDIC_PKA>
|
||||
11.34
|
||||
|
||||
> <ALOGPS_LOGP>
|
||||
-1
|
||||
|
||||
> <JCHEM_LOGP>
|
||||
-6.1
|
||||
|
||||
> <ALOGPS_LOGS>
|
||||
-4
|
||||
|
||||
> <JCHEM_POLARIZABILITY>
|
||||
106.19
|
||||
|
||||
> <JCHEM_POLAR_SURFACE_AREA>
|
||||
435.41
|
||||
|
||||
> <JCHEM_REFRACTIVITY>
|
||||
279.78
|
||||
|
||||
> <JCHEM_ROTATABLE_BOND_COUNT>
|
||||
19
|
||||
|
||||
> <ALOGPS_SOLUBILITY>
|
||||
1.10e-01 g/l
|
||||
|
||||
$$$$
|
||||
@@ -0,0 +1,2 @@
|
||||
O=C(N1[C@@H](CCC1)C(=O)NNC(=O)N)[C@@H](NC(=O)[C@@H](NC(=O)[C@H](NC(=O)[C@@H](NC(=O)[C@@H](NC(=O)[C@@H](NC(=O)[C@@H](NC(=O)[C@H]1NC(=O)CC1)Cc1[nH]cnc1)Cc1c2c([nH]c1)cccc2)CO)Cc1ccc(O)cc1)COC(C)(C)C)CC(C)C)CCCN=C(N)N Goserelin
|
||||
NC(=O)CNC(=O)[C@@H](NC(=O)[C@@H]1CCCN1C(=O)[C@H]1NC(=O)[C@@H](NC(=O)[C@H](CCC(=O)N)NC(=O)[C@H](Cc2ccccc2)NC(=O)[C@@H](NC(=O)CCSSC1)Cc1ccc(cc1)O)CC(=O)N)CCCNC(=N)N Desmopressin
|
||||
@@ -0,0 +1,7 @@
|
||||
#FPS1
|
||||
#num_bits=881
|
||||
#type=CACTVS-E_SCREEN/1.0 extended=2
|
||||
#software=CACTVS/unknown
|
||||
#source=CID_28434379.sdf
|
||||
#date=2012-02-03T13:08:39
|
||||
07ce04000000000000000000000000000080060000000c060000000000001a800f0000780008100000101487e9608c0bed3248000580644626204101b4844805901b041c2e19511e45039b8b2924101609401b13e40800000000000100200000040080000010000002000000000000 28434379
|
||||
@@ -64,7 +64,7 @@ sqlparse
|
||||
six
|
||||
#Parsley
|
||||
nose
|
||||
#SVGFig
|
||||
svgwrite
|
||||
|
||||
# Fabric and dependencies
|
||||
Fabric
|
||||
|
||||
@@ -46,7 +46,8 @@ sqlparse
|
||||
six
|
||||
Parsley
|
||||
nose
|
||||
SVGFig
|
||||
|
||||
svgwrite
|
||||
|
||||
# Fabric and dependencies
|
||||
Fabric
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from galaxy.util.json import loads
|
||||
import logging
|
||||
from json import loads
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
|
||||
+81
-51
@@ -1,13 +1,8 @@
|
||||
"""
|
||||
Support for running a tool in Galaxy via an internal job management system
|
||||
"""
|
||||
from abc import ABCMeta
|
||||
from abc import abstractmethod
|
||||
|
||||
import time
|
||||
import copy
|
||||
import datetime
|
||||
import galaxy
|
||||
import logging
|
||||
import os
|
||||
import pwd
|
||||
@@ -15,20 +10,23 @@ import random
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
from abc import ABCMeta, abstractmethod
|
||||
from json import loads
|
||||
from xml.etree import ElementTree
|
||||
|
||||
import galaxy
|
||||
from galaxy import model, util
|
||||
from galaxy.util.xml_macros import load
|
||||
from galaxy.datatypes import metadata
|
||||
from galaxy.datatypes import metadata, sniff
|
||||
from galaxy.exceptions import ObjectInvalid, ObjectNotFound
|
||||
from galaxy.jobs.actions.post import ActionBox
|
||||
from galaxy.jobs.mapper import JobRunnerMapper
|
||||
from galaxy.jobs.runners import BaseJobRunner, JobState
|
||||
from galaxy.util import safe_makedirs, unicodify
|
||||
from galaxy.util.bunch import Bunch
|
||||
from galaxy.util.expressions import ExpressionContext
|
||||
from galaxy.util.json import loads
|
||||
from galaxy.util import safe_makedirs
|
||||
from galaxy.util import unicodify
|
||||
from galaxy.datatypes import sniff
|
||||
from galaxy.util.xml_macros import load
|
||||
|
||||
from .output_checker import check_output
|
||||
from .datasets import TaskPathRewriter
|
||||
@@ -112,6 +110,15 @@ class JobConfiguration( object ):
|
||||
"""
|
||||
DEFAULT_NWORKERS = 4
|
||||
|
||||
JOB_RESOURCE_CONDITIONAL_XML = """<conditional name="__job_resource">
|
||||
<param name="__job_resource__select" type="select" label="Job Resource Parameters">
|
||||
<option value="no">Use default job resource parameters</option>
|
||||
<option value="yes">Specify job resource parameters</option>
|
||||
</param>
|
||||
<when value="no"/>
|
||||
<when value="yes"/>
|
||||
</conditional>"""
|
||||
|
||||
def __init__(self, app):
|
||||
"""Parse the job configuration XML.
|
||||
"""
|
||||
@@ -354,53 +361,44 @@ class JobConfiguration( object ):
|
||||
|
||||
log.debug('Done loading job configuration')
|
||||
|
||||
def get_tool_resource_parameters( self, tool_id ):
|
||||
def get_tool_resource_xml( self, tool_id, tool_type ):
|
||||
""" Given a tool id, return XML elements describing parameters to
|
||||
insert into job resources.
|
||||
|
||||
:tool id: A tool ID (a string)
|
||||
:tool type: A tool type (a string)
|
||||
|
||||
:returns: List of parameter elements.
|
||||
"""
|
||||
fields = []
|
||||
|
||||
if not tool_id:
|
||||
return fields
|
||||
|
||||
# TODO: Only works with exact matches, should handle different kinds of ids
|
||||
# the way destination lookup does.
|
||||
resource_group = None
|
||||
if tool_id in self.tools:
|
||||
resource_group = self.tools[ tool_id ][ 0 ].get_resource_group()
|
||||
resource_group = resource_group or self.default_resource_group
|
||||
|
||||
if resource_group and resource_group in self.resource_groups:
|
||||
fields_names = self.resource_groups[ resource_group ]
|
||||
fields = [ self.resource_parameters[ n ] for n in fields_names ]
|
||||
|
||||
return fields
|
||||
if tool_id and tool_type is 'default':
|
||||
# TODO: Only works with exact matches, should handle different kinds of ids
|
||||
# the way destination lookup does.
|
||||
resource_group = None
|
||||
if tool_id in self.tools:
|
||||
resource_group = self.tools[ tool_id ][ 0 ].get_resource_group()
|
||||
resource_group = resource_group or self.default_resource_group
|
||||
if resource_group and resource_group in self.resource_groups:
|
||||
fields_names = self.resource_groups[ resource_group ]
|
||||
fields = [ self.resource_parameters[ n ] for n in fields_names ]
|
||||
if fields:
|
||||
conditional_element = ElementTree.fromstring( self.JOB_RESOURCE_CONDITIONAL_XML )
|
||||
when_yes_elem = conditional_element.findall( 'when' )[ 1 ]
|
||||
for parameter in fields:
|
||||
when_yes_elem.append( parameter )
|
||||
return conditional_element
|
||||
|
||||
def __parse_resource_parameters( self ):
|
||||
if not os.path.exists( self.app.config.job_resource_params_file ):
|
||||
return
|
||||
|
||||
resource_param_file = self.app.config.job_resource_params_file
|
||||
try:
|
||||
resource_definitions = util.parse_xml( resource_param_file )
|
||||
except Exception as e:
|
||||
raise config_exception(e, resource_param_file)
|
||||
|
||||
resource_definitions_root = resource_definitions.getroot()
|
||||
# TODO: Also handling conditionals would be awesome!
|
||||
for parameter_elem in resource_definitions_root.findall( "param" ):
|
||||
name = parameter_elem.get( "name" )
|
||||
# Considered prepending __job_resource_param__ here and then
|
||||
# stripping it off when making it available to dynamic job
|
||||
# destination. Not needed because resource parameters are wrapped
|
||||
# in a conditional.
|
||||
# # expanded_name = "__job_resource_param__%s" % name
|
||||
# # parameter_elem.set( "name", expanded_name )
|
||||
self.resource_parameters[ name ] = parameter_elem
|
||||
if os.path.exists( self.app.config.job_resource_params_file ):
|
||||
resource_param_file = self.app.config.job_resource_params_file
|
||||
try:
|
||||
resource_definitions = util.parse_xml( resource_param_file )
|
||||
except Exception as e:
|
||||
raise config_exception( e, resource_param_file )
|
||||
resource_definitions_root = resource_definitions.getroot()
|
||||
# TODO: Also handling conditionals would be awesome!
|
||||
for parameter_elem in resource_definitions_root.findall( "param" ):
|
||||
name = parameter_elem.get( "name" )
|
||||
self.resource_parameters[ name ] = parameter_elem
|
||||
|
||||
def __get_default(self, parent, names):
|
||||
"""
|
||||
@@ -771,6 +769,7 @@ class JobWrapper( object ):
|
||||
if use_persisted_destination:
|
||||
self.job_runner_mapper.cached_job_destination = JobDestination( from_job=job )
|
||||
|
||||
self.__commands_in_new_shell = self.app.config.commands_in_new_shell
|
||||
self.__user_system_pwent = None
|
||||
self.__galaxy_system_pwent = None
|
||||
|
||||
@@ -803,13 +802,19 @@ class JobWrapper( object ):
|
||||
def shell(self):
|
||||
return self.job_destination.shell or getattr(self.app.config, 'default_job_shell', DEFAULT_JOB_SHELL)
|
||||
|
||||
def disable_commands_in_new_shell(self):
|
||||
"""Provide an extension point to disable this isolation,
|
||||
Pulsar builds its own job script so this is not needed for
|
||||
remote jobs."""
|
||||
self.__commands_in_new_shell = False
|
||||
|
||||
@property
|
||||
def strict_shell(self):
|
||||
return self.tool.strict_shell
|
||||
|
||||
@property
|
||||
def commands_in_new_shell(self):
|
||||
return self.app.config.commands_in_new_shell
|
||||
return self.__commands_in_new_shell
|
||||
|
||||
@property
|
||||
def galaxy_lib_dir(self):
|
||||
@@ -1024,6 +1029,7 @@ class JobWrapper( object ):
|
||||
|
||||
self.sa_session.add( job )
|
||||
self.sa_session.flush()
|
||||
self._report_error_to_sentry()
|
||||
# Perform email action even on failure.
|
||||
for pja in [pjaa.post_job_action for pjaa in job.post_job_actions if pjaa.post_job_action.action_type == "EmailAction"]:
|
||||
ActionBox.execute(self.app, self.sa_session, pja, job)
|
||||
@@ -1283,7 +1289,7 @@ class JobWrapper( object ):
|
||||
dataset.extension = 'txt'
|
||||
self.sa_session.add( dataset )
|
||||
if job.states.ERROR == final_job_state:
|
||||
log.debug( "setting dataset state to ERROR" )
|
||||
log.debug( "(%s) setting dataset %s state to ERROR", job.id, dataset_assoc.dataset.dataset.id )
|
||||
# TODO: This is where the state is being set to error. Change it!
|
||||
dataset_assoc.dataset.dataset.state = model.Dataset.states.ERROR
|
||||
# Pause any dependent jobs (and those jobs' outputs)
|
||||
@@ -1392,6 +1398,8 @@ class JobWrapper( object ):
|
||||
self._collect_metrics( job )
|
||||
self.sa_session.flush()
|
||||
log.debug( 'job %d ended (finish() executed in %s)' % (self.job_id, finish_timer) )
|
||||
if job.state == job.states.ERROR:
|
||||
self._report_error_to_sentry()
|
||||
cleanup_job = self.cleanup_job
|
||||
delete_files = cleanup_job == 'always' or ( job.state == job.states.OK and cleanup_job == 'onsuccess' )
|
||||
self.cleanup( delete_files=delete_files )
|
||||
@@ -1741,6 +1749,28 @@ class JobWrapper( object ):
|
||||
return self.tool.requires_setting_metadata
|
||||
return False
|
||||
|
||||
def _report_error_to_sentry( self ):
|
||||
job = self.get_job()
|
||||
tool = self.app.toolbox.get_tool(job.tool_id, tool_version=job.tool_version) or None
|
||||
if self.app.sentry_client and job.state == job.states.ERROR:
|
||||
self.app.sentry_client.capture(
|
||||
'raven.events.Message',
|
||||
message="Galaxy Job Error: %s v.%s" % (job.tool_id, job.tool_version),
|
||||
extra={
|
||||
'info' : job.info,
|
||||
'id' : job.id,
|
||||
'command_line' : job.command_line,
|
||||
'stderr' : job.stderr,
|
||||
'traceback': job.traceback,
|
||||
'exit_code': job.exit_code,
|
||||
'stdout': job.stdout,
|
||||
'handler': job.handler,
|
||||
'user': self.user,
|
||||
'tool_version': job.tool_version,
|
||||
'tool_xml': tool.config_file if tool else None
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class TaskWrapper(JobWrapper):
|
||||
"""
|
||||
|
||||
@@ -6,10 +6,12 @@ immediate_actions listed below. Currently only used in workflows.
|
||||
import datetime
|
||||
import logging
|
||||
import socket
|
||||
from galaxy.util import send_mail
|
||||
from galaxy.util.json import dumps
|
||||
from json import dumps
|
||||
|
||||
from markupsafe import escape
|
||||
|
||||
from galaxy.util import send_mail
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
Module for managing jobs in Pacific Bioscience's SMRT Portal and automatically transferring files
|
||||
produced by SMRT Portal.
|
||||
"""
|
||||
import json
|
||||
import logging
|
||||
import urllib2
|
||||
from string import Template
|
||||
from galaxy.util import json
|
||||
|
||||
from data_transfer import DataTransfer
|
||||
|
||||
|
||||
@@ -186,7 +186,7 @@ class JobHandlerQueue( object ):
|
||||
jobs (either from the database or from its own queue), then iterates
|
||||
over all new and waiting jobs to check the state of the jobs each
|
||||
depends on. If the job has dependencies that have not finished, it
|
||||
it goes to the waiting queue. If the job has dependencies with errors,
|
||||
goes to the waiting queue. If the job has dependencies with errors,
|
||||
it is marked as having errors and removed from the queue. If the job
|
||||
belongs to an inactive user it is ignored.
|
||||
Otherwise, the job is dispatched.
|
||||
|
||||
@@ -278,6 +278,7 @@ class PulsarJobRunner( AsynchronousJobRunner ):
|
||||
compute_tool_directory=remote_tool_directory,
|
||||
compute_job_directory=remote_job_directory,
|
||||
)
|
||||
job_wrapper.disable_commands_in_new_shell()
|
||||
command_line = build_command(
|
||||
self,
|
||||
job_wrapper=job_wrapper,
|
||||
|
||||
@@ -2,13 +2,15 @@
|
||||
Manage transfers from arbitrary URLs to temporary files. Socket interface for
|
||||
IPC with multiple process configurations.
|
||||
"""
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import subprocess
|
||||
import socket
|
||||
import subprocess
|
||||
import threading
|
||||
|
||||
from galaxy.util import listify, json, sleeper
|
||||
from galaxy.util import listify, sleeper
|
||||
from galaxy.util.json import jsonrpc_request, validate_jsonrpc_response
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -83,13 +85,13 @@ class TransferManager( object ):
|
||||
for tj in transfer_jobs:
|
||||
if via_socket and tj.state not in tj.terminal_states and tj.socket:
|
||||
try:
|
||||
request = json.jsonrpc_request( method='get_state', id=True )
|
||||
request = jsonrpc_request( method='get_state', id=True )
|
||||
sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
|
||||
sock.settimeout( 5 )
|
||||
sock.connect( ( 'localhost', tj.socket ) )
|
||||
sock.send( json.dumps( request ) )
|
||||
response = sock.recv( 8192 )
|
||||
valid, response = json.validate_jsonrpc_response( response, id=request['id'] )
|
||||
valid, response = validate_jsonrpc_response( response, id=request['id'] )
|
||||
if not valid:
|
||||
# No valid response received, make some pseudo-json-rpc
|
||||
raise Exception( dict( code=128, message='Did not receive valid response from transfer daemon for state' ) )
|
||||
|
||||
@@ -3,8 +3,8 @@ Mixins for transaction-like objects.
|
||||
"""
|
||||
|
||||
import os
|
||||
from json import dumps
|
||||
|
||||
from galaxy.util.json import dumps
|
||||
from galaxy.util import bunch
|
||||
|
||||
|
||||
|
||||
@@ -5,13 +5,16 @@ Histories are containers for datasets or dataset collections
|
||||
created (or copied) by users over the course of an analysis.
|
||||
"""
|
||||
|
||||
from sqlalchemy import desc, asc
|
||||
from sqlalchemy import desc
|
||||
from sqlalchemy import asc
|
||||
|
||||
from galaxy import model
|
||||
from galaxy import exceptions as glx_exceptions
|
||||
from galaxy.managers import sharable
|
||||
from galaxy.managers import deletable
|
||||
from galaxy.managers import hdas
|
||||
# from galaxy.managers import hdcas
|
||||
from galaxy.managers import history_contents
|
||||
from galaxy.managers import collections_util
|
||||
|
||||
|
||||
@@ -34,6 +37,8 @@ class HistoryManager( sharable.SharableModelManager, deletable.PurgableManagerMi
|
||||
def __init__( self, app, *args, **kwargs ):
|
||||
super( HistoryManager, self ).__init__( app, *args, **kwargs )
|
||||
self.hda_manager = hdas.HDAManager( app )
|
||||
self.contents_manager = history_contents.HistoryContentsManager( app )
|
||||
self.contents_filters = history_contents.HistoryContentsFilters( app )
|
||||
|
||||
def copy( self, history, user, **kwargs ):
|
||||
"""
|
||||
@@ -147,6 +152,19 @@ class HistoryManager( sharable.SharableModelManager, deletable.PurgableManagerMi
|
||||
raise glx_exceptions.RequestParameterInvalidException( 'Unkown order_by', order_by=order_by_string,
|
||||
available=[ 'create_time', 'update_time', 'name', 'size' ])
|
||||
|
||||
def non_ready_jobs( self, history ):
|
||||
"""Return the currently running job objects associated with this history.
|
||||
|
||||
Where running is defined as new, waiting, queued, running, resubmitted,
|
||||
and upload.
|
||||
"""
|
||||
# TODO: defer to jobModelManager (if there was one)
|
||||
# TODO: genericize the params to allow other filters
|
||||
jobs = ( self.session().query( model.Job )
|
||||
.filter( model.Job.history == history )
|
||||
.filter( model.Job.state.in_( model.Job.non_ready_states ) ) )
|
||||
return jobs
|
||||
|
||||
|
||||
class HistorySerializer( sharable.SharableModelSerializer, deletable.PurgableSerializerMixin ):
|
||||
"""
|
||||
@@ -215,7 +233,9 @@ class HistorySerializer( sharable.SharableModelSerializer, deletable.PurgableSer
|
||||
'hdas' : lambda i, k, **c: [ self.app.security.encode_id( hda.id ) for hda in i.datasets ],
|
||||
'state_details' : self.serialize_state_counts,
|
||||
'state_ids' : self.serialize_state_ids,
|
||||
'contents' : self.serialize_contents
|
||||
'contents' : self.serialize_contents,
|
||||
'non_ready_jobs': lambda i, k, **c: [ self.app.security.encode_id( job.id ) for job
|
||||
in self.manager.non_ready_jobs( i ) ],
|
||||
})
|
||||
|
||||
# remove this
|
||||
|
||||
@@ -14,7 +14,6 @@ from galaxy.managers import base
|
||||
from galaxy.managers import deletable
|
||||
from galaxy.managers import containers
|
||||
from galaxy.managers import hdas
|
||||
from galaxy.managers import collections
|
||||
|
||||
import logging
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -31,7 +30,6 @@ class HistoryContentsManager( containers.ContainerManagerMixin ):
|
||||
contained_class_type_name = 'dataset'
|
||||
|
||||
subcontainer_class = model.HistoryDatasetCollectionAssociation
|
||||
# TODO:
|
||||
subcontainer_class_manager_class = None
|
||||
subcontainer_class_type_name = 'dataset_collection'
|
||||
|
||||
@@ -59,7 +57,6 @@ class HistoryContentsManager( containers.ContainerManagerMixin ):
|
||||
def __init__( self, app ):
|
||||
self.app = app
|
||||
self.contained_manager = self.contained_class_manager_class( app )
|
||||
self.subcontainer_manager = collections.DatasetCollectionManager( app )
|
||||
|
||||
# ---- interface
|
||||
def contained( self, container, filters=None, limit=None, offset=None, order_by=None, **kwargs ):
|
||||
@@ -136,15 +133,14 @@ class HistoryContentsManager( containers.ContainerManagerMixin ):
|
||||
def _get_filter_for_contained( self, container, content_class ):
|
||||
return content_class.history == container
|
||||
|
||||
def _union_of_contents( self, container, **kwargs ):
|
||||
def _union_of_contents( self, container, expand_models=True, **kwargs ):
|
||||
"""
|
||||
Returns a limited and offset list of both types of contents, filtered
|
||||
and in some order.
|
||||
"""
|
||||
contents_results = self._union_of_contents_query( container, **kwargs ).all()
|
||||
# import pprint
|
||||
# for result in contents_results:
|
||||
# pprint.pprint( result )
|
||||
if not expand_models:
|
||||
return contents_results
|
||||
|
||||
# partition ids into a map of { component_class names -> list of ids } from the above union query
|
||||
id_map = dict( (( self.contained_class_type_name, [] ), ( self.subcontainer_class_type_name, [] )) )
|
||||
|
||||
@@ -272,7 +272,6 @@ class WorkflowContentsManager(UsesAnnotations):
|
||||
|
||||
def _workflow_from_dict(self, trans, data, name):
|
||||
if isinstance(data, string_types):
|
||||
# If coming from the editor...
|
||||
data = json.loads(data)
|
||||
|
||||
# Create new workflow from source data
|
||||
@@ -294,7 +293,7 @@ class WorkflowContentsManager(UsesAnnotations):
|
||||
missing_tool_tups = []
|
||||
|
||||
for step_dict in self.__walk_step_dicts( data ):
|
||||
module, step = self.__track_module_from_dict( trans, steps, steps_by_external_id, step_dict, secure=False )
|
||||
module, step = self.__track_module_from_dict( trans, steps, steps_by_external_id, step_dict )
|
||||
is_tool = is_tool_module_type( module.type )
|
||||
if is_tool and module.tool is None:
|
||||
# A required tool is not available in the local Galaxy instance.
|
||||
@@ -526,7 +525,7 @@ class WorkflowContentsManager(UsesAnnotations):
|
||||
# eliminate after a few years...
|
||||
'tool_version': step.tool_version,
|
||||
'name': module.get_name(),
|
||||
'tool_state': module.get_state( secure=False ),
|
||||
'tool_state': module.get_state(),
|
||||
'tool_errors': module.get_errors(),
|
||||
'uuid': str(step.uuid),
|
||||
'label': step.label or None,
|
||||
@@ -756,8 +755,8 @@ class WorkflowContentsManager(UsesAnnotations):
|
||||
|
||||
yield step_dict
|
||||
|
||||
def __track_module_from_dict( self, trans, steps, steps_by_external_id, step_dict, secure ):
|
||||
module, step = self.__module_from_dict( trans, step_dict, secure=secure )
|
||||
def __track_module_from_dict( self, trans, steps, steps_by_external_id, step_dict ):
|
||||
module, step = self.__module_from_dict( trans, step_dict )
|
||||
# Create the model class for the step
|
||||
steps.append( step )
|
||||
steps_by_external_id[ step_dict['id' ] ] = step
|
||||
@@ -784,7 +783,7 @@ class WorkflowContentsManager(UsesAnnotations):
|
||||
trans.sa_session.add(m)
|
||||
return module, step
|
||||
|
||||
def __module_from_dict( self, trans, step_dict, secure ):
|
||||
def __module_from_dict( self, trans, step_dict ):
|
||||
""" Create a WorkflowStep model object and corresponding module
|
||||
representing type-specific functionality from the incoming dictionary.
|
||||
"""
|
||||
@@ -803,7 +802,7 @@ class WorkflowContentsManager(UsesAnnotations):
|
||||
)
|
||||
step_dict["subworkflow"] = subworkflow
|
||||
|
||||
module = module_factory.from_dict( trans, step_dict, secure=secure )
|
||||
module = module_factory.from_dict( trans, step_dict )
|
||||
module.save_to_step( step )
|
||||
|
||||
annotation = step_dict[ 'annotation' ]
|
||||
|
||||
@@ -136,6 +136,16 @@ class JobLike:
|
||||
log.info( "stderr for %s %d is greater than %s, only a portion will be logged to database", type(self), self.id, galaxy.util.DATABASE_MAX_STRING_SIZE_PRETTY )
|
||||
self.stderr = stderr
|
||||
|
||||
def log_str(self):
|
||||
extra = ""
|
||||
safe_id = getattr(self, "id", None)
|
||||
if safe_id is not None:
|
||||
extra += "id=%s" % safe_id
|
||||
else:
|
||||
extra += "unflushed"
|
||||
|
||||
return "%s[%s,tool_id=%s]" % (self.__class__.__name__, extra, self.tool_id)
|
||||
|
||||
|
||||
class User( object, Dictifiable ):
|
||||
use_pbkdf2 = True
|
||||
@@ -358,6 +368,15 @@ class Job( object, JobLike, Dictifiable ):
|
||||
terminal_states = [ states.OK,
|
||||
states.ERROR,
|
||||
states.DELETED ]
|
||||
#: job states where the job hasn't finished and the model may still change
|
||||
non_ready_states = [
|
||||
states.NEW,
|
||||
states.RESUBMITTED,
|
||||
states.UPLOAD,
|
||||
states.WAITING,
|
||||
states.QUEUED,
|
||||
states.RUNNING,
|
||||
]
|
||||
|
||||
# Please include an accessor (get/set pair) for any new columns/members.
|
||||
def __init__( self ):
|
||||
@@ -1612,6 +1631,7 @@ class Dataset( StorableObject ):
|
||||
# failed_metadata is only valid as DatasetInstance state currently
|
||||
|
||||
non_ready_states = (
|
||||
states.NEW,
|
||||
states.UPLOAD,
|
||||
states.QUEUED,
|
||||
states.RUNNING,
|
||||
|
||||
@@ -272,7 +272,7 @@ class MetadataType( JSONType ):
|
||||
sz = total_size(v)
|
||||
if sz > app.app.config.max_metadata_value_size:
|
||||
del value[k]
|
||||
log.error('Refusing to bind metadata key %s due to size (%s)' % (k, sz))
|
||||
log.warning('Refusing to bind metadata key %s due to size (%s)' % (k, sz))
|
||||
value = json_encoder.encode(value)
|
||||
return value
|
||||
|
||||
|
||||
@@ -2100,16 +2100,16 @@ mapper( model.Job, model.Job.table, properties=dict(
|
||||
user=relation( model.User ),
|
||||
galaxy_session=relation( model.GalaxySession ),
|
||||
history=relation( model.History ),
|
||||
library_folder=relation( model.LibraryFolder ),
|
||||
parameters=relation( model.JobParameter, lazy=False ),
|
||||
library_folder=relation( model.LibraryFolder, lazy=True ),
|
||||
parameters=relation( model.JobParameter, lazy=True ),
|
||||
input_datasets=relation( model.JobToInputDatasetAssociation ),
|
||||
output_datasets=relation( model.JobToOutputDatasetAssociation ),
|
||||
output_dataset_collection_instances=relation( model.JobToOutputDatasetCollectionAssociation ),
|
||||
output_dataset_collections=relation( model.JobToImplicitOutputDatasetCollectionAssociation ),
|
||||
output_datasets=relation( model.JobToOutputDatasetAssociation, lazy=True ),
|
||||
output_dataset_collection_instances=relation( model.JobToOutputDatasetCollectionAssociation, lazy=True ),
|
||||
output_dataset_collections=relation( model.JobToImplicitOutputDatasetCollectionAssociation, lazy=True ),
|
||||
post_job_actions=relation( model.PostJobActionAssociation, lazy=False ),
|
||||
input_library_datasets=relation( model.JobToInputLibraryDatasetAssociation ),
|
||||
output_library_datasets=relation( model.JobToOutputLibraryDatasetAssociation ),
|
||||
external_output_metadata=relation( model.JobExternalOutputMetadata, lazy=False ),
|
||||
output_library_datasets=relation( model.JobToOutputLibraryDatasetAssociation, lazy=True ),
|
||||
external_output_metadata=relation( model.JobExternalOutputMetadata, lazy=True ),
|
||||
tasks=relation( model.Task )
|
||||
) )
|
||||
|
||||
|
||||
@@ -6,28 +6,25 @@ Galaxy Metadata
|
||||
import copy
|
||||
import cPickle
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
import weakref
|
||||
|
||||
from os.path import abspath
|
||||
|
||||
from six import string_types
|
||||
from sqlalchemy.orm import object_session
|
||||
|
||||
import galaxy.model
|
||||
from galaxy.util import listify
|
||||
from galaxy.util.object_wrapper import sanitize_lists_to_string
|
||||
from galaxy.util import stringify_dictionary_keys
|
||||
from galaxy.util import string_as_bool
|
||||
from galaxy.util import in_directory
|
||||
from galaxy.util import (in_directory, listify, string_as_bool,
|
||||
stringify_dictionary_keys)
|
||||
from galaxy.util.json import safe_dumps
|
||||
from galaxy.util.object_wrapper import sanitize_lists_to_string
|
||||
from galaxy.util.odict import odict
|
||||
from galaxy.web import form_builder
|
||||
|
||||
import logging
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
STATEMENTS = "__galaxy_statements__" # this is the name of the property in a Datatype class where new metadata spec element Statements are stored
|
||||
|
||||
@@ -26,8 +26,11 @@ select * from history where name='Unnamed history'
|
||||
|
||||
import logging
|
||||
import re
|
||||
from json import dumps
|
||||
|
||||
import parsley
|
||||
from sqlalchemy import and_
|
||||
from sqlalchemy.orm import aliased
|
||||
|
||||
from galaxy.model import (HistoryDatasetAssociation, LibraryDatasetDatasetAssociation,
|
||||
History, Library, LibraryFolder, LibraryDataset, StoredWorkflowTagAssociation,
|
||||
@@ -37,10 +40,6 @@ from galaxy.model import (HistoryDatasetAssociation, LibraryDatasetDatasetAssoci
|
||||
Page, PageRevision)
|
||||
from galaxy.model.tool_shed_install import ToolVersion
|
||||
|
||||
from galaxy.util.json import dumps
|
||||
from sqlalchemy import and_
|
||||
from sqlalchemy.orm import aliased
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ class GalaxyQueueWorker(ConsumerMixin, threading.Thread):
|
||||
"""
|
||||
def __init__(self, app, queue=None, task_mapping=control_message_to_task, connection=None):
|
||||
super(GalaxyQueueWorker, self).__init__()
|
||||
log.info("Initalizing %s Galaxy Queue Worker on %s", app.config.server_name, util.mask_password_from_url(app.config.amqp_internal_connection))
|
||||
log.info("Initializing %s Galaxy Queue Worker on %s", app.config.server_name, util.mask_password_from_url(app.config.amqp_internal_connection))
|
||||
self.daemon = True
|
||||
if connection:
|
||||
self.connection = connection
|
||||
|
||||
+54
-240
@@ -2,7 +2,6 @@
|
||||
Classes encapsulating galaxy tools and tool configuration.
|
||||
"""
|
||||
|
||||
import binascii
|
||||
import glob
|
||||
import json
|
||||
import logging
|
||||
@@ -33,8 +32,7 @@ from galaxy.tools.parameters import params_to_incoming, check_param, params_from
|
||||
from galaxy.tools.parameters import output_collect
|
||||
from galaxy.tools.parameters.basic import (BaseURLToolParameter,
|
||||
DataToolParameter, DataCollectionToolParameter, HiddenToolParameter,
|
||||
SelectToolParameter, ToolParameter,
|
||||
contains_workflow_parameter)
|
||||
SelectToolParameter, ToolParameter)
|
||||
from galaxy.tools.parameters.grouping import Conditional, ConditionalWhen, Repeat, Section, UploadDataset
|
||||
from galaxy.tools.parameters.input_translation import ToolInputTranslator
|
||||
from galaxy.tools.test import parse_tests
|
||||
@@ -49,7 +47,6 @@ from galaxy.util import unicodify
|
||||
from galaxy.tools.parameters.meta import expand_meta_parameters
|
||||
from galaxy.util.bunch import Bunch
|
||||
from galaxy.util.expressions import ExpressionContext
|
||||
from galaxy.util.hash_util import hmac_new
|
||||
from galaxy.util.json import json_fix
|
||||
from galaxy.util.odict import odict
|
||||
from galaxy.util.template import fill_template
|
||||
@@ -66,17 +63,6 @@ import galaxy.jobs
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
|
||||
JOB_RESOURCE_CONDITIONAL_XML = """<conditional name="__job_resource">
|
||||
<param name="__job_resource__select" type="select" label="Job Resource Parameters">
|
||||
<option value="no">Use default job resource parameters</option>
|
||||
<option value="yes">Specify job resource parameters</option>
|
||||
</param>
|
||||
<when value="no"></when>
|
||||
<when value="yes">
|
||||
</when>
|
||||
</conditional>"""
|
||||
|
||||
HELP_UNINITIALIZED = threading.Lock()
|
||||
|
||||
|
||||
@@ -137,27 +123,8 @@ class ToolBox( BaseGalaxyToolBox ):
|
||||
tool_type = tool_source.parse_tool_type()
|
||||
ToolClass = tool_types.get( tool_type )
|
||||
else:
|
||||
# Normal tool - only insert dynamic resource parameters for these
|
||||
# tools.
|
||||
root = getattr( tool_source, "root", None )
|
||||
# TODO: mucking with the XML directly like this is terrible,
|
||||
# modify inputs directly post load if possible.
|
||||
if root is not None and hasattr( self.app, "job_config" ): # toolshed may not have job_config?
|
||||
tool_id = root.get( 'id' )
|
||||
parameters = self.app.job_config.get_tool_resource_parameters( tool_id )
|
||||
if parameters:
|
||||
inputs = root.find('inputs')
|
||||
# If tool has not inputs, create some so we can insert conditional
|
||||
if inputs is None:
|
||||
inputs = ElementTree.fromstring( "<inputs></inputs>")
|
||||
root.append( inputs )
|
||||
# Insert a conditional allowing user to specify resource parameters.
|
||||
conditional_element = ElementTree.fromstring( JOB_RESOURCE_CONDITIONAL_XML )
|
||||
when_yes_elem = conditional_element.findall( "when" )[ 1 ]
|
||||
for parameter in parameters:
|
||||
when_yes_elem.append( parameter )
|
||||
inputs.append( conditional_element )
|
||||
|
||||
# Normal tool
|
||||
root = getattr( tool_source, 'root', None )
|
||||
ToolClass = Tool
|
||||
tool = ToolClass( config_file, tool_source, self.app, guid=guid, repository_id=repository_id, **kwds )
|
||||
return tool
|
||||
@@ -225,15 +192,14 @@ class ToolBox( BaseGalaxyToolBox ):
|
||||
class DefaultToolState( object ):
|
||||
"""
|
||||
Keeps track of the state of a users interaction with a tool between
|
||||
requests. The default tool state keeps track of the current page (for
|
||||
multipage "wizard" tools) and the values of all
|
||||
requests.
|
||||
"""
|
||||
def __init__( self ):
|
||||
self.page = 0
|
||||
self.rerun_remap_job_id = None
|
||||
self.inputs = None
|
||||
|
||||
def encode( self, tool, app, secure=True ):
|
||||
def encode( self, tool, app ):
|
||||
"""
|
||||
Convert the data to a string
|
||||
"""
|
||||
@@ -242,26 +208,12 @@ class DefaultToolState( object ):
|
||||
value = params_to_strings( tool.inputs, self.inputs, app )
|
||||
value["__page__"] = self.page
|
||||
value["__rerun_remap_job_id__"] = self.rerun_remap_job_id
|
||||
value = json.dumps( value )
|
||||
# Make it secure
|
||||
if secure:
|
||||
a = hmac_new( app.config.tool_secret, value )
|
||||
b = binascii.hexlify( value )
|
||||
return "%s:%s" % ( a, b )
|
||||
else:
|
||||
return value
|
||||
return json.dumps( value )
|
||||
|
||||
def decode( self, value, tool, app, secure=True ):
|
||||
def decode( self, value, tool, app ):
|
||||
"""
|
||||
Restore the state from a string
|
||||
"""
|
||||
if secure:
|
||||
# Extract and verify hash
|
||||
a, b = value.split( ":" )
|
||||
value = binascii.unhexlify( b )
|
||||
test = hmac_new( app.config.tool_secret, value )
|
||||
assert a == test
|
||||
# Restore from string
|
||||
values = json_fix( json.loads( value ) )
|
||||
self.page = values.pop( "__page__" )
|
||||
if '__rerun_remap_job_id__' in values:
|
||||
@@ -272,13 +224,11 @@ class DefaultToolState( object ):
|
||||
|
||||
def copy( self ):
|
||||
"""
|
||||
WARNING! Makes a shallow copy, *SHOULD* rework to have it make a deep
|
||||
copy.
|
||||
Shallow copy of the state
|
||||
"""
|
||||
new_state = DefaultToolState()
|
||||
new_state.page = self.page
|
||||
new_state.rerun_remap_job_id = self.rerun_remap_job_id
|
||||
# This need to be copied.
|
||||
new_state.inputs = self.inputs
|
||||
return new_state
|
||||
|
||||
@@ -339,6 +289,8 @@ class Tool( object, Dictifiable ):
|
||||
self.lineage_ids = []
|
||||
# populate toolshed repository info, if available
|
||||
self.populate_tool_shed_info()
|
||||
# add tool resource parameters
|
||||
self.populate_resource_parameters( tool_source )
|
||||
# Parse XML element containing configuration
|
||||
try:
|
||||
self.parse( tool_source, guid=guid )
|
||||
@@ -547,8 +499,9 @@ class Tool( object, Dictifiable ):
|
||||
# Handle toolshed guids
|
||||
self_ids = [ self.id.lower(), self.id.lower().rsplit('/', 1)[0], self.old_id.lower() ]
|
||||
self.all_ids = self_ids
|
||||
|
||||
# In the toolshed context, there is no job config.
|
||||
if 'job_config' in dir(self.app):
|
||||
if hasattr( self.app, 'job_config' ):
|
||||
self.job_tool_configurations = self.app.job_config.get_job_tool_configurations(self_ids)
|
||||
|
||||
# Is this a 'hidden' tool (hidden in tool menu)
|
||||
@@ -728,7 +681,8 @@ class Tool( object, Dictifiable ):
|
||||
# Parse the actual parameters
|
||||
# Handle multiple page case
|
||||
for page_source in pages.page_sources:
|
||||
display, inputs = self.parse_input_page( page_source, enctypes )
|
||||
inputs = self.parse_input_elem( page_source, enctypes )
|
||||
display = page_source.parse_display()
|
||||
self.inputs_by_page.append( inputs )
|
||||
self.inputs.update( inputs )
|
||||
self.display_by_page.append( display )
|
||||
@@ -807,17 +761,6 @@ class Tool( object, Dictifiable ):
|
||||
citations.append( citation )
|
||||
return citations
|
||||
|
||||
def parse_input_page( self, page_source, enctypes ):
|
||||
"""
|
||||
Parse a page of inputs. This basically just calls 'parse_input_elem',
|
||||
but it also deals with possible 'display' elements which are supported
|
||||
only at the top/page level (not in groups).
|
||||
"""
|
||||
inputs = self.parse_input_elem( page_source, enctypes )
|
||||
# Display
|
||||
display = page_source.parse_display()
|
||||
return display, inputs
|
||||
|
||||
def parse_input_elem( self, page_source, enctypes, context=None ):
|
||||
"""
|
||||
Parse a parent element whose children are inputs -- these could be
|
||||
@@ -946,6 +889,17 @@ class Tool( object, Dictifiable ):
|
||||
context[ name ].refresh_on_change = True
|
||||
return param
|
||||
|
||||
def populate_resource_parameters( self, tool_source ):
|
||||
root = getattr( tool_source, 'root', None )
|
||||
if root is not None and hasattr( self.app, 'job_config' ) and hasattr( self.app.job_config, 'get_tool_resource_xml' ):
|
||||
resource_xml = self.app.job_config.get_tool_resource_xml( root.get( 'id' ), self.tool_type )
|
||||
if resource_xml is not None:
|
||||
inputs = root.find( 'inputs' )
|
||||
if inputs is None:
|
||||
inputs = ElementTree.fromstring( '<inputs/>' )
|
||||
root.append( inputs )
|
||||
inputs.append( resource_xml )
|
||||
|
||||
def populate_tool_shed_info( self ):
|
||||
if self.repository_id is not None and self.app.name == 'galaxy':
|
||||
repository_id = self.app.security.decode_id( self.repository_id )
|
||||
@@ -1097,7 +1051,7 @@ class Tool( object, Dictifiable ):
|
||||
return self.code_namespace[name]
|
||||
return None
|
||||
|
||||
def visit_inputs( self, value, callback ):
|
||||
def visit_inputs( self, values, callback ):
|
||||
"""
|
||||
Call the function `callback` on each parameter of this tool. Visits
|
||||
grouping parameters recursively and constructs unique prefixes for
|
||||
@@ -1106,13 +1060,8 @@ class Tool( object, Dictifiable ):
|
||||
`callback( level_prefix, parameter, parameter_value )`
|
||||
"""
|
||||
# HACK: Yet another hack around check_values -- WHY HERE?
|
||||
if not self.check_values:
|
||||
return
|
||||
for input in self.inputs.itervalues():
|
||||
if isinstance( input, ToolParameter ):
|
||||
callback( "", input, value[input.name] )
|
||||
else:
|
||||
input.visit_inputs( "", value[input.name], callback )
|
||||
if self.check_values:
|
||||
visit_input_values( self.inputs, values, callback )
|
||||
|
||||
def handle_input( self, trans, incoming, history=None ):
|
||||
"""
|
||||
@@ -1280,87 +1229,24 @@ class Tool( object, Dictifiable ):
|
||||
"""
|
||||
messages = {}
|
||||
request_context = WorkRequestContext( app=trans.app, user=trans.user, history=trans.history, workflow_building_mode=workflow_building_mode )
|
||||
self.check_and_update_param_values_helper( self.inputs, values, request_context, messages, update_values=update_values )
|
||||
return messages
|
||||
|
||||
def check_and_update_param_values_helper( self, inputs, values, trans, messages, context=None, prefix="", update_values=True ):
|
||||
"""
|
||||
Recursive helper for `check_and_update_param_values_helper`
|
||||
"""
|
||||
context = ExpressionContext( values, context )
|
||||
for input in inputs.itervalues():
|
||||
# No value, insert the default
|
||||
if input.name not in values:
|
||||
if isinstance( input, Conditional ):
|
||||
cond_messages = {}
|
||||
if not input.is_job_resource_conditional:
|
||||
cond_messages = { input.test_param.name: "No value found for '%s%s', using default" % ( prefix, input.test_param.label ) }
|
||||
messages[ input.name ] = cond_messages
|
||||
test_value = input.test_param.get_initial_value( trans, context )
|
||||
current_case = input.get_current_case( test_value )
|
||||
self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, cond_messages, context, prefix, update_values=update_values )
|
||||
elif isinstance( input, Repeat ):
|
||||
if input.min:
|
||||
messages[ input.name ] = []
|
||||
for i in range( input.min ):
|
||||
rep_prefix = prefix + '%s %d > ' % ( input.title, i + 1 )
|
||||
rep_dict = dict()
|
||||
messages[ input.name ].append( rep_dict )
|
||||
self.check_and_update_param_values_helper( input.inputs, {}, trans, rep_dict, context, rep_prefix, update_values=update_values )
|
||||
elif isinstance( input, Section ):
|
||||
messages[ input.name ] = {}
|
||||
self.check_and_update_param_values_helper( input.inputs, {}, trans, messages[ input.name ], context, prefix, update_values=update_values )
|
||||
else:
|
||||
messages[ input.name ] = "No value found for '%s%s', using default" % ( prefix, input.label )
|
||||
values[ input.name ] = input.get_initial_value( trans, context )
|
||||
# Value, visit recursively as usual
|
||||
else:
|
||||
if isinstance( input, Repeat ):
|
||||
for i, d in enumerate( values[ input.name ] ):
|
||||
rep_prefix = prefix + '%s %d > ' % ( input.title, i + 1 )
|
||||
self.check_and_update_param_values_helper( input.inputs, d, trans, messages, context, rep_prefix, update_values=update_values )
|
||||
elif isinstance( input, Conditional ):
|
||||
group_values = values[ input.name ]
|
||||
use_initial_value = False
|
||||
if '__current_case__' in group_values:
|
||||
if int( group_values[ '__current_case__' ] ) >= len( input.cases ):
|
||||
use_initial_value = True
|
||||
else:
|
||||
use_initial_value = True
|
||||
if input.test_param.name not in group_values or use_initial_value:
|
||||
# No test param invalidates the whole conditional
|
||||
values[ input.name ] = group_values = input.get_initial_value( trans, context )
|
||||
messages[ input.test_param.name ] = "No value found for '%s%s', using default" % ( prefix, input.test_param.label )
|
||||
current_case = group_values[ '__current_case__' ]
|
||||
for child_input in input.cases[current_case].inputs.itervalues():
|
||||
messages[ child_input.name ] = "Value no longer valid for '%s%s', replacing with default" % ( prefix, child_input.label )
|
||||
else:
|
||||
current = group_values[ '__current_case__' ]
|
||||
self.check_and_update_param_values_helper( input.cases[current].inputs, group_values, trans, messages, context, prefix, update_values=update_values )
|
||||
elif isinstance( input, Section ):
|
||||
messages[ input.name ] = {}
|
||||
self.check_and_update_param_values_helper( input.inputs, values[ input.name ], trans, messages[ input.name ], context, prefix, update_values=update_values )
|
||||
else:
|
||||
# Regular tool parameter, no recursion needed
|
||||
def validate_inputs( input, value, error, parent, context, prefixed_name, prefixed_label, **kwargs ):
|
||||
if not error:
|
||||
value, error = check_param( request_context, input, value, context )
|
||||
if error:
|
||||
if update_values:
|
||||
try:
|
||||
value = values[ input.name ]
|
||||
if not trans.workflow_building_mode:
|
||||
input.value_from_basic( input.value_to_basic( value, trans.app ), trans.app, ignore_errors=False )
|
||||
input.validate( value, trans )
|
||||
else:
|
||||
# skip check if is workflow parameters
|
||||
ck_param = True
|
||||
search = input.type in [ 'text' ]
|
||||
if trans.workflow_building_mode and contains_workflow_parameter( values[ input.name ], search=search ):
|
||||
ck_param = False
|
||||
# this will fail when a parameter's type has changed to a non-compatible one: e.g. conditional group changed to dataset input
|
||||
if ck_param:
|
||||
input.value_from_basic( input.value_to_basic( value, self.app ), self.app, ignore_errors=False )
|
||||
value = input.get_initial_value( request_context, context )
|
||||
if not prefixed_name.startswith( '__' ):
|
||||
messages[ prefixed_name ] = '%s Using default: \'%s\'.' % ( error, value )
|
||||
parent[ input.name ] = value
|
||||
except:
|
||||
log.info( "Parameter validation failed.", exc_info=True )
|
||||
messages[ input.name ] = "Value no longer valid for '%s%s', replacing with default" % ( prefix, input.label )
|
||||
if update_values:
|
||||
values[ input.name ] = input.get_initial_value( trans, context )
|
||||
messages[ prefixed_name ] = 'Attempt to replace invalid value for \'%s\' failed.' % ( prefixed_label )
|
||||
else:
|
||||
messages[ prefixed_name ] = error
|
||||
|
||||
visit_input_values( self.inputs, values, validate_inputs )
|
||||
return messages
|
||||
|
||||
def build_dependency_shell_commands( self, job_directory=None ):
|
||||
"""Return a list of commands to be run to populate the current environment to include this tools requirements."""
|
||||
@@ -1540,7 +1426,7 @@ class Tool( object, Dictifiable ):
|
||||
return output_collect.collect_dynamic_collections( self, output, **kwds )
|
||||
|
||||
def to_archive(self):
|
||||
tool = self.tool
|
||||
tool = self
|
||||
tarball_files = []
|
||||
temp_files = []
|
||||
tool_xml = open( os.path.abspath( tool.config_file ), 'r' ).read()
|
||||
@@ -1703,10 +1589,11 @@ class Tool( object, Dictifiable ):
|
||||
|
||||
# load job parameters into incoming
|
||||
tool_message = ''
|
||||
tool_warnings = ''
|
||||
if job:
|
||||
try:
|
||||
job_params = job.get_param_values( self.app, ignore_errors=True )
|
||||
self.check_and_update_param_values( job_params, request_context, update_values=False )
|
||||
tool_warnings = self.check_and_update_param_values( job_params, request_context, update_values=False )
|
||||
self._map_source_to_history( request_context, self.inputs, job_params )
|
||||
tool_message = self._compare_tool_version( job )
|
||||
params_to_incoming( kwd, self.inputs, job_params, self.app )
|
||||
@@ -1716,68 +1603,6 @@ class Tool( object, Dictifiable ):
|
||||
# create parameter object
|
||||
params = galaxy.util.Params( kwd, sanitize=False )
|
||||
|
||||
# convert value to jsonifiable value
|
||||
def jsonify(v):
|
||||
# check if value is numeric
|
||||
isnumber = False
|
||||
try:
|
||||
float(v)
|
||||
isnumber = True
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# fix hda parsing
|
||||
if isinstance(v, self.app.model.HistoryDatasetAssociation):
|
||||
return {
|
||||
'id' : trans.security.encode_id(v.id),
|
||||
'src' : 'hda'
|
||||
}
|
||||
elif isinstance(v, self.app.model.HistoryDatasetCollectionAssociation):
|
||||
return {
|
||||
'id' : trans.security.encode_id(v.id),
|
||||
'src' : 'hdca'
|
||||
}
|
||||
elif isinstance(v, self.app.model.LibraryDatasetDatasetAssociation):
|
||||
return {
|
||||
'id' : trans.security.encode_id(v.id),
|
||||
'name': v.name,
|
||||
'src' : 'ldda'
|
||||
}
|
||||
elif isinstance(v, bool):
|
||||
if v is True:
|
||||
return 'true'
|
||||
else:
|
||||
return 'false'
|
||||
elif isinstance(v, string_types) or isnumber:
|
||||
return v
|
||||
elif isinstance(v, dict) and hasattr(v, '__class__'):
|
||||
return v
|
||||
else:
|
||||
return None
|
||||
|
||||
# ensures that input dictionary is jsonifiable
|
||||
def sanitize( dict, key='value' ):
|
||||
# get current value
|
||||
value = dict[key] if key in dict else None
|
||||
|
||||
# jsonify by type
|
||||
if dict['type'] in ['data']:
|
||||
if isinstance(value, list):
|
||||
value = [ jsonify(v) for v in value ]
|
||||
else:
|
||||
value = [ jsonify(value) ]
|
||||
if None in value:
|
||||
value = None
|
||||
else:
|
||||
value = { 'values': value }
|
||||
elif isinstance(value, list):
|
||||
value = [ jsonify(v) for v in value ]
|
||||
else:
|
||||
value = jsonify(value)
|
||||
|
||||
# update and return
|
||||
dict[key] = value
|
||||
|
||||
# populates model from state
|
||||
def populate_model( inputs, state_inputs, group_inputs, other_values=None ):
|
||||
other_values = ExpressionContext( state_inputs, other_values )
|
||||
@@ -1794,7 +1619,7 @@ class Tool( object, Dictifiable ):
|
||||
tool_dict = input.to_dict( request_context )
|
||||
if 'test_param' in tool_dict:
|
||||
test_param = tool_dict[ 'test_param' ]
|
||||
test_param[ 'value' ] = jsonify( group_state.get( test_param[ 'name' ], input.test_param.get_initial_value( request_context, other_values ) ) )
|
||||
test_param[ 'value' ] = input.test_param.value_to_basic( group_state.get( test_param[ 'name' ], input.test_param.get_initial_value( request_context, other_values ) ), self.app )
|
||||
test_param[ 'text_value' ] = input.test_param.value_to_display_text( test_param[ 'value' ], self.app )
|
||||
for i in range( len( tool_dict['cases'] ) ):
|
||||
current_state = {}
|
||||
@@ -1807,29 +1632,14 @@ class Tool( object, Dictifiable ):
|
||||
else:
|
||||
try:
|
||||
tool_dict = input.to_dict( request_context, other_values=other_values )
|
||||
tool_dict[ 'value' ] = state_inputs.get( input.name, input.get_initial_value( request_context, other_values ) )
|
||||
tool_dict[ 'value' ] = input.value_to_basic( state_inputs.get( input.name, input.get_initial_value( request_context, other_values ) ), self.app )
|
||||
tool_dict[ 'text_value' ] = input.value_to_display_text( tool_dict[ 'value' ], self.app )
|
||||
except Exception as e:
|
||||
tool_dict = input.to_dict( request_context )
|
||||
log.exception('tools::to_json() - Skipping parameter expansion \'%s\': %s.' % ( input.name, e ) )
|
||||
pass
|
||||
tool_dict[ 'text_value' ] = input.value_to_display_text( tool_dict[ 'value' ], self.app )
|
||||
sanitize( tool_dict, 'value' )
|
||||
group_inputs[ input_index ] = tool_dict
|
||||
|
||||
# sanatizes tool state
|
||||
def sanitize_state( state ):
|
||||
keys = None
|
||||
if isinstance( state, dict ):
|
||||
keys = state
|
||||
elif isinstance( state, list ):
|
||||
keys = range( len( state ) )
|
||||
if keys:
|
||||
for k in keys:
|
||||
if isinstance( state[ k ], dict ) or isinstance( state[ k ], list ):
|
||||
sanitize_state( state[ k ] )
|
||||
else:
|
||||
state[ k ] = jsonify( state[ k ] )
|
||||
|
||||
# expand incoming parameters (parameters might trigger multiple tool executions,
|
||||
# here we select the first execution only in order to resolve dynamic parameters)
|
||||
expanded_incomings, _ = expand_meta_parameters( trans, self, params.__dict__ )
|
||||
@@ -1850,7 +1660,10 @@ class Tool( object, Dictifiable ):
|
||||
populate_model( self.inputs, state_inputs, tool_model[ 'inputs' ] )
|
||||
|
||||
# sanitize tool state
|
||||
sanitize_state( state_inputs )
|
||||
def value_to_basic( input, value, parent, **kwargs ):
|
||||
parent[ input.name ] = input.value_to_basic( value, self.app )
|
||||
|
||||
visit_input_values( self.inputs, state_inputs, value_to_basic )
|
||||
|
||||
# create tool help
|
||||
tool_help = ''
|
||||
@@ -1873,6 +1686,7 @@ class Tool( object, Dictifiable ):
|
||||
'biostar_url' : self.app.config.biostar_url,
|
||||
'sharable_url' : self.tool_shed_repository.get_sharable_url( self.app ) if self.tool_shed_repository else None,
|
||||
'message' : tool_message,
|
||||
'warnings' : tool_warnings,
|
||||
'versions' : tool_versions,
|
||||
'requirements' : [ { 'name' : r.name, 'version' : r.version } for r in self.requirements ],
|
||||
'errors' : state_errors,
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
import json
|
||||
import re
|
||||
from json import dumps
|
||||
|
||||
from six import string_types
|
||||
|
||||
from galaxy import model
|
||||
from galaxy.exceptions import ObjectInvalid
|
||||
from galaxy.model import LibraryDatasetDatasetAssociation
|
||||
from galaxy import model
|
||||
from galaxy.tools.parameters.basic import DataCollectionToolParameter, DataToolParameter
|
||||
from galaxy.tools.parameters.wrapped import WrappedParameters
|
||||
from galaxy.tools.parameters import update_param
|
||||
from galaxy.util import ExecutionTimer
|
||||
from galaxy.util.json import dumps
|
||||
from galaxy.util.none_like import NoneDataset
|
||||
from galaxy.util.odict import odict
|
||||
from galaxy.util.template import fill_template
|
||||
@@ -50,7 +51,7 @@ class DefaultToolAction( object ):
|
||||
current_user_roles = trans.get_current_user_roles()
|
||||
input_datasets = odict()
|
||||
|
||||
def visitor( prefix, input, value, parent=None ):
|
||||
def visitor( input, value, prefix, parent=None, **kwargs ):
|
||||
|
||||
def process_dataset( data, formats=None ):
|
||||
if not data:
|
||||
@@ -98,12 +99,12 @@ class DefaultToolAction( object ):
|
||||
else:
|
||||
raise Exception('A path for explicit datatype conversion has not been found: %s --/--> %s' % ( input_datasets[ prefix + input.name + str( i + 1 ) ].extension, conversion_extensions ) )
|
||||
if parent:
|
||||
parent[input.name][i] = input_datasets[ prefix + input.name + str( i + 1 ) ]
|
||||
parent[ input.name ][ i ] = input_datasets[ prefix + input.name + str( i + 1 ) ]
|
||||
for conversion_name, conversion_data in conversions:
|
||||
# allow explicit conversion to be stored in job_parameter table
|
||||
parent[ conversion_name ][i] = conversion_data.id # a more robust way to determine JSONable value is desired
|
||||
parent[ conversion_name ][ i ] = conversion_data.id # a more robust way to determine JSONable value is desired
|
||||
else:
|
||||
param_values[input.name][i] = input_datasets[ prefix + input.name + str( i + 1 ) ]
|
||||
param_values[ input.name ][ i ] = input_datasets[ prefix + input.name + str( i + 1 ) ]
|
||||
for conversion_name, conversion_data in conversions:
|
||||
# allow explicit conversion to be stored in job_parameter table
|
||||
param_values[ conversion_name ][i] = conversion_data.id # a more robust way to determine JSONable value is desired
|
||||
@@ -143,10 +144,6 @@ class DefaultToolAction( object ):
|
||||
# Skipping implicit conversion stuff for now, revisit at
|
||||
# some point and figure out if implicitly converting a
|
||||
# dataset collection makes senese.
|
||||
|
||||
# if i == 0:
|
||||
# # Allow copying metadata to output, first item will be source.
|
||||
# input_datasets[ prefix + input.name ] = data.dataset_instance
|
||||
input_datasets[ prefix + input.name + str( i + 1 ) ] = data
|
||||
|
||||
tool.visit_inputs( param_values, visitor )
|
||||
@@ -160,7 +157,7 @@ class DefaultToolAction( object ):
|
||||
|
||||
input_dataset_collections = dict()
|
||||
|
||||
def visitor( prefix, input, value, parent=None ):
|
||||
def visitor( input, value, prefix, parent=None, **kwargs ):
|
||||
if isinstance( input, DataToolParameter ):
|
||||
values = value
|
||||
if not isinstance( values, list ):
|
||||
@@ -322,7 +319,7 @@ class DefaultToolAction( object ):
|
||||
metadata_source = output.metadata_source
|
||||
if metadata_source:
|
||||
if isinstance( metadata_source, string_types ):
|
||||
metadata_source = inp_data[metadata_source]
|
||||
metadata_source = inp_data.get( metadata_source )
|
||||
|
||||
if metadata_source is not None:
|
||||
data.init_meta( copy_from=metadata_source )
|
||||
@@ -440,8 +437,9 @@ class DefaultToolAction( object ):
|
||||
else:
|
||||
handle_output_timer = ExecutionTimer()
|
||||
handle_output( name, output )
|
||||
log.info("Handled output %s" % handle_output_timer)
|
||||
log.info("Handled output named %s for tool %s %s" % (name, tool.id, handle_output_timer))
|
||||
|
||||
add_datasets_timer = ExecutionTimer()
|
||||
# Add all the top-level (non-child) datasets to the history unless otherwise specified
|
||||
datasets_to_persist = []
|
||||
for name in out_data.keys():
|
||||
@@ -464,6 +462,8 @@ class DefaultToolAction( object ):
|
||||
child_dataset = out_data[ child_name ]
|
||||
parent_dataset.children.append( child_dataset )
|
||||
|
||||
log.info("Added output datasets to history %s" % add_datasets_timer)
|
||||
job_setup_timer = ExecutionTimer()
|
||||
# Create the job object
|
||||
job, galaxy_session = self._new_job_for_session( trans, tool, history )
|
||||
self._record_inputs( trans, tool, job, incoming, inp_data, inp_dataset_collections, current_user_roles )
|
||||
@@ -512,7 +512,12 @@ class DefaultToolAction( object ):
|
||||
trans.sa_session.add(jtod)
|
||||
except Exception:
|
||||
log.exception('Cannot remap rerun dependencies.')
|
||||
|
||||
log.info("Setup for job %s complete, ready to flush %s" % (job.log_str(), job_setup_timer))
|
||||
|
||||
job_flush_timer = ExecutionTimer()
|
||||
trans.sa_session.flush()
|
||||
log.info("Flushed transaction for job %s %s" % (job.log_str(), job_flush_timer))
|
||||
# Some tools are not really executable, but jobs are still created for them ( for record keeping ).
|
||||
# Examples include tools that redirect to other applications ( epigraph ). These special tools must
|
||||
# include something that can be retrieved from the params ( e.g., REDIRECT_URL ) to keep the job
|
||||
@@ -571,7 +576,7 @@ class DefaultToolAction( object ):
|
||||
first_reduction = False
|
||||
incoming[ name ] = []
|
||||
if reduced:
|
||||
incoming[ name ].append( "__collection_reduce__|%s" % dataset_collection.id )
|
||||
incoming[ name ].append( dataset_collection )
|
||||
# Should verify security? We check security of individual
|
||||
# datasets below?
|
||||
# TODO: verify can have multiple with same name, don't want to loose tracability
|
||||
@@ -600,7 +605,8 @@ class DefaultToolAction( object ):
|
||||
job.add_input_dataset( name, dataset_id=dataset.id )
|
||||
else:
|
||||
job.add_input_dataset( name, None )
|
||||
log.info("Verified access to datasets %s" % access_timer)
|
||||
job_str = job.log_str()
|
||||
log.info("Verified access to datasets for %s %s" % (job_str, access_timer))
|
||||
|
||||
def get_output_name( self, output, dataset, tool, on_text, trans, incoming, history, params, job_params ):
|
||||
if output.label:
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import logging
|
||||
from json import dumps
|
||||
|
||||
from __init__ import ToolAction
|
||||
from galaxy.datatypes.metadata import JobExternalOutputMetadataWrapper
|
||||
from galaxy.util.odict import odict
|
||||
from galaxy.util.json import dumps
|
||||
from galaxy.jobs.datasets import DatasetPath
|
||||
from galaxy.util.odict import odict
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
import pwd
|
||||
import logging
|
||||
import os
|
||||
import pwd
|
||||
import StringIO
|
||||
import subprocess
|
||||
import tempfile
|
||||
from cgi import FieldStorage
|
||||
from json import dumps
|
||||
|
||||
from sqlalchemy.orm import eagerload_all
|
||||
|
||||
from galaxy import datatypes, util
|
||||
from galaxy.util.odict import odict
|
||||
from galaxy.util.json import dumps
|
||||
from galaxy.exceptions import ObjectInvalid
|
||||
from galaxy.util.odict import odict
|
||||
|
||||
import logging
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ class ToolEvaluator( object ):
|
||||
request_context = WorkRequestContext( app=self.app, user=job.history and job.history.user, history=job.history )
|
||||
|
||||
def validate_inputs( input, value, context, **kwargs ):
|
||||
value = input.from_html( value, request_context, context )
|
||||
value = input.from_json( value, request_context, context )
|
||||
input.validate( value, request_context )
|
||||
visit_input_values( self.tool.inputs, incoming, validate_inputs )
|
||||
|
||||
|
||||
@@ -34,16 +34,6 @@ def execute( trans, tool, param_combinations, history, rerun_remap_job_id=None,
|
||||
# Only workflow invocation code gets to set this, ignore user supplied
|
||||
# values or rerun parameters.
|
||||
del params[ '__workflow_invocation_uuid__' ]
|
||||
|
||||
# If this is a workflow, everything has now been connected so we should validate
|
||||
# the state we about to execute one last time. Consider whether tool executions
|
||||
# should run this as well.
|
||||
if workflow_invocation_uuid:
|
||||
messages = tool.check_and_update_param_values( params, trans, update_values=False )
|
||||
if messages:
|
||||
execution_tracker.record_error( messages )
|
||||
return
|
||||
|
||||
job, result = tool.handle_single_execution( trans, rerun_remap_job_id, params, history, collection_info, execution_cache )
|
||||
if job:
|
||||
message = EXECUTION_SUCCESS_MESSAGE % (tool.id, job.id, job_timer)
|
||||
@@ -56,7 +46,8 @@ def execute( trans, tool, param_combinations, history, rerun_remap_job_id=None,
|
||||
burst_at = getattr( config, 'tool_submission_burst_at', 10 )
|
||||
burst_threads = getattr( config, 'tool_submission_burst_threads', 1 )
|
||||
|
||||
if len(execution_tracker.param_combinations) < burst_at or burst_threads < 2:
|
||||
job_count = len(execution_tracker.param_combinations)
|
||||
if job_count < burst_at or burst_threads < 2:
|
||||
for params in execution_tracker.param_combinations:
|
||||
execute_single_job(params)
|
||||
else:
|
||||
@@ -78,7 +69,7 @@ def execute( trans, tool, param_combinations, history, rerun_remap_job_id=None,
|
||||
|
||||
q.join()
|
||||
|
||||
log.debug("Executed all jobs for tool request: %s" % all_jobs_timer)
|
||||
log.debug("Executed %d job(s) for tool %s request: %s" % (job_count, tool.id, all_jobs_timer))
|
||||
if collection_info:
|
||||
history = history or tool.get_default_history_by_trans( trans )
|
||||
execution_tracker.create_output_collections( trans, history, params )
|
||||
|
||||
@@ -4,17 +4,16 @@ import logging
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
from json import dumps, loads
|
||||
|
||||
from sqlalchemy.orm import eagerload, eagerload_all
|
||||
from sqlalchemy.sql import expression
|
||||
|
||||
from galaxy import model
|
||||
from galaxy.exceptions import MalformedContents
|
||||
from galaxy.model.item_attrs import UsesAnnotations
|
||||
from galaxy.util.json import dumps, loads
|
||||
from galaxy.web.framework.helpers import to_unicode
|
||||
|
||||
from sqlalchemy.sql import expression
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user