create_table :categories do |t| t.string :name, :null => false t.text :description t.boolean :user_defined t.timestamps end add_index :categories, :name create_table :cat_values do |t| t.string :name, :null => false t.text :description t.boolean :user_defined t.references :category t.timestamps end add_index :cat_values, :category_id add_index :cat_values, :name create_table :subjects do |t| t.string :subject_tag, :null => false t.references :specimen, :null => false t.string :sex t.text :conditions t.float :age t.timestamps end add_index :subjects, :subject_tag add_index :subjects, :specimen_id create_table :experiments do |t| t.string :name, :null => false t.text :description t.date :exp_date t.references :tracer t.references :user, :null => false t.references :machine t.references :subject, :null => false t.boolean :is_gated t.string :data_description t.integer :data_compression t.integer :data_encode t.string :type_of_data t.integer :num_images t.string :image_data_format t.integer :num_energy_window t.boolean :flood_corrected t.boolean :decay_corrected t.integer :num_angle_steps t.integer :angle_start t.integer :total_angle_rotation t.integer :angle_direction t.integer :num_projections t.integer :extent_rotation t.string :process_status t.integer :time_per_projection t.integer :study_duration t.string :patient_orientation t.references :modality, :null => false t.string :type t.text :search_field t.timestamps end add_index :experiments, :modality_id add_index :experiments, :user_id add_index :experiments, :subject_id add_index :experiments, :machine_id add_index :experiments, :tracer_id add_index :experiments, :exp_date create_table :collimators do |t| t.integer :dect_number, :null => false t.references :experiment, :null => false t.string :collimator_type t.string :material t.float :radius t.float :length t.timestamps end add_index :collimators, :experiment_id create_table :files do |t| t.string :filename, :null => false t.string :filetype, :null => false t.float :file_size t.text :location, :null => false t.text :description t.string :file_checksum t.integer :num_bytes_per_pixel t.string :image_byte_order t.timestamps end create_table :file_associations, :id => false do |t| t.references :experiment, :null => false t.references :file_1, :null => false t.references :file_2 t.text :tags t.timestamps end add_index :file_associations, :experiment_id create_table :vnvgeometries do |t| t.references :experiment, :null => false t.integer :NumVoxel_X t.integer :NumVoxel_Y t.integer :NumVoxel_Z t.integer :AttnZCount t.float :Voxel_Xwidth t.float :Voxel_Ywidth t.float :Voxel_Zwidth t.text :description t.timestamps end add_index :vnvgeometries, :experiment_id create_table :machines do |t| t.string :name, :null => false t.string :company t.references :location, :null => false t.timestamps end add_index :machines, :name add_index :machines, :location_id create_table :detector_heads do |t| t.references :machine, :null => false t.timestamps end add_index :detector_heads, :machine_id create_table :experiment_detectors do |t| t.references :experiment, :null => false t.references :detector_head, :null => false t.decimal :energy_window_lower_level t.decimal :energy_window_upper_level t.string :dect_material t.timestamps end add_index :experiment_detectors, :experiment_id add_index :experiment_detectors, :detector_head_id create_table :users do |t| t.string :username, :null => false t.string :firstname t.string :lastname t.string :email, :null => false t.string :department t.string :institution t.string :position t.string :crypted_password t.string :password_salt t.string :persistence_token t.timestamps end add_index :users, :username create_table :roles do |t| t.string :name, :null => false t.string :description t.timestamps end add_index :roles, :name create_table :user_roles, :id => false do |t| t.references :user, :null => false t.references :role, :null => false t.timestamps end execute "ALTER TABLE user_roles ADD UNIQUE INDEX user_id_role_id (user_id, role_id)" create_table :experiment_approvals, :id => false do |t| t.references :experiment, :null => false t.references :user t.timestamps end add_index :experiment_approvals, :experiment_id add_index :experiment_approvals, :user_id