|
@@ -21,6 +21,24 @@ import pdb
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
+'''
|
|
|
+This file generates the needed information and images to
|
|
|
+render a volume.
|
|
|
+For that, the volume has to be located in the local filesystem.
|
|
|
+
|
|
|
+The workflow to preprocess volume data is as follows:
|
|
|
+1. read volume data from filesystem
|
|
|
+2. make each slice in the volume to be square by cutting
|
|
|
+ the edges
|
|
|
+3. if float image, normalize it, and covert it to int16
|
|
|
+4. save this data as rawframes to volume, to access it later
|
|
|
+5. convert image to ubyte for first preview slice maps
|
|
|
+6. generate slice maps
|
|
|
+7. save slice maps to volume
|
|
|
+8. save json information to volume
|
|
|
+
|
|
|
+'''
|
|
|
+
|
|
|
def sliceGenerator(request, volumeId):
|
|
|
data = request.POST
|
|
|
sliceFrom = data['sliceFrom']
|
|
@@ -33,7 +51,6 @@ def sliceGenerator(request, volumeId):
|
|
|
|
|
|
frames = []
|
|
|
try:
|
|
|
- #check for tif(f) file
|
|
|
if volume.imageSequence is True:
|
|
|
logger.debug('reading imagesequence')
|
|
|
frames = tiffPreparer.prepareImageSequence(volume.path)
|
|
@@ -53,11 +70,10 @@ def sliceGenerator(request, volumeId):
|
|
|
return
|
|
|
|
|
|
try:
|
|
|
- sliceFrom, sliceTo = __defineSliceBorders(frames, sliceFrom, sliceTo)
|
|
|
+ sliceFrom, sliceTo = __defineSliceRange(frames, sliceFrom, sliceTo)
|
|
|
except Exception:
|
|
|
logger.error('please provide integers or "" for "sliceFrom" and "sliceTo"')
|
|
|
- volume.generateSlicesStatus = 'generation failed, please read the logs'
|
|
|
- volume.save()
|
|
|
+ Volume.objects(id=volume.id).update_one(set__generateSlicesStatus = 'generation failed, please read the logs')
|
|
|
return
|
|
|
|
|
|
if len(frames.shape) is not 4:
|
|
@@ -95,8 +111,7 @@ def sliceGenerator(request, volumeId):
|
|
|
if fileChanged or len(volume.rawFrames) == 0:
|
|
|
if settings.REDUCE_HARDDISK_ACCESS_FOR_DEV is False:
|
|
|
logger.debug('deleting rawframes from volume')
|
|
|
- for rawFrame in volume.rawFrames:
|
|
|
- volume.remove_frame(rawFrame.frameNumber)
|
|
|
+ volume.remove_frames()
|
|
|
else:
|
|
|
logger.debug('not deleting rawframes from volume --> reducing harddisk access')
|
|
|
|
|
@@ -116,8 +131,7 @@ def sliceGenerator(request, volumeId):
|
|
|
logger.debug('memory freed, croppedFrames deleted, keeping ubyte frames')
|
|
|
except Exception as e:
|
|
|
logger.error(str(e))
|
|
|
- volume.generateSlicesStatus = str(e)
|
|
|
- volume.save()
|
|
|
+ Volume.objects(id=volume.id).update_one(set__generateSlicesStatus = str(e))
|
|
|
return
|
|
|
|
|
|
logger.debug('converting ended')
|
|
@@ -138,40 +152,27 @@ def sliceGenerator(request, volumeId):
|
|
|
infoObject = spriteMaker.generateInfo(sprites, 0, len(framesUByte) - 1, sliceFrom, sliceTo)
|
|
|
except Exception as e:
|
|
|
logger.error(str(e))
|
|
|
- volume.generateSlicesStatus = str(e)
|
|
|
- volume.save()
|
|
|
+ Volume.objects(id=volume.id).update_one(set__generateSlicesStatus = str(e))
|
|
|
return
|
|
|
|
|
|
+ try:
|
|
|
+ logger.debug('save sprites in volume')
|
|
|
+ for key in sprites:
|
|
|
+ volume.add_slice_maps(int(key), sprites[key], originalSize, infoObject)
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(str(e))
|
|
|
+ Volume.objects(id=volume.id).update_one(set__generateSlicesStatus = str(e))
|
|
|
+ return
|
|
|
|
|
|
- for texture in volume.textures:
|
|
|
- volume.remove_texture(texture.size)
|
|
|
-
|
|
|
- # in future, put this in models.Volume for better modularization
|
|
|
- for key in sprites:
|
|
|
- textureSize = int(key)
|
|
|
-
|
|
|
- texture = Texture()
|
|
|
- texture.sprites = []
|
|
|
- texture.info = TextureInfo.from_info_object(infoObject)
|
|
|
- texture.contenttype = None
|
|
|
- texture.originalSize = originalSize
|
|
|
-
|
|
|
- texture.size = textureSize
|
|
|
-
|
|
|
- for sprite in sprites[key]:
|
|
|
- if texture.contenttype is None:
|
|
|
- texture.contenttype = sprite.contenttype
|
|
|
-
|
|
|
- texture.addSpriteBuffers(sprite.buffers)
|
|
|
-
|
|
|
- volume.insert_texture(texture)
|
|
|
-
|
|
|
- volume.generateSlicesStatus = 'generation successful'
|
|
|
+ Volume.objects(id=volume.id).update_one(set__generateSlicesStatus = 'generation successful')
|
|
|
logger.debug('generation successful')
|
|
|
- volume.save()
|
|
|
|
|
|
|
|
|
-def __defineSliceBorders(frames, sliceFrom, sliceTo):
|
|
|
+'''
|
|
|
+ This method returns the range of slices, that
|
|
|
+ shall be generated
|
|
|
+'''
|
|
|
+def __defineSliceRange(frames, sliceFrom, sliceTo):
|
|
|
if sliceFrom != '':
|
|
|
sliceFrom = int(sliceFrom)
|
|
|
else:
|