DigiFlow News ----- Version 3.0 Build date: 24 June 2008 ----- New dfc functions: capture_frame_number(..) Indicates the number of frames DigiFlow has acquired (but not necessarily saved) to date. camera_frames_captured(..) Indicates the number of frames DigiFlow has captured. camera_is_capturing(..) Indicates if DigiFlow is currently capturing video frames. coord_system_units(..) Retrieves the units for the specified coordinate system. draw_get_axes(..) Retrieves the last axes specified by draw_set_axes(..). draw_get_font_height(..) Retrieves the nominal height of the current font. draw_get_status(..) Retrieves status information. draw_image_scale(..) draw_image_scale_vertical(..) Macro functions to help drawing a scale for a scalar field. draw_polygon(..) Draws a polygon. draw_rectangle(..) Draws a rectangle. draw_vector_scale(..) draw_vector_scale_vertical(..) Macro functions to help drawing a scale for a vector field. nice_number(..) Generate a 'nice' number close to the specified value. power_spectrum_1d(..) Compute the azimuthally averaged 1D spectrum from a 2D array. power_spectrum_2d(..) Compute the 2D power spectrum from a 2D array. remove_trailing_zeros(..) Remove trailing zeros from a string, but leave one after a decimal point. New macros: New features: Other changes: camera_wait_for_frame(..) camera_wait_for_preprocess(..) camera_wait_for_sync(..) The return value of these functions has changed. The return if the function timed out is now a null, whereas an integer is returned if successful, with the integer representing the total number of frames acquired (or preprocessed) to date. This allows detection of the condition if a frame has been skipped since the last call. Bug fixes: Non-consequitive array spans in dfc code. Previously statements like a := b[:,2,:] would return a as a three-dimensional array with y_size(a) equal to 1, whereas a:=b[:,:,3] or a:=b[9,:,:] would return a as a two-dimensional array. Similarly, non-consequitive on the left-hand side of an assignment statement would require a higher-dimensional source than expected. (The work-around for this problem was the use of make_array(..) or make_like(..) to reshape the array.) This limitation has now been fixed, so that statements like this[:,3,:] := that[:,1,2,:]; are now valid. In this case, the two-dimensional sub-array is copied from that[..] to this[..]. DigiFlow News ----- Version 3.0 Build date: 8 June 2008 Minor update to fix bug with the licence request generation mechanism. No significant changes in functionality since the main 28 May 2008 release. ----- DigiFlow News ----- Version 3.0 Build date: 28 May 2008 ----- New dfc functions: solve_linear(..) solve_svd(..) singular_value_decomposition(..) identity_matrix(..) New functions in support of linear algebra. jpeg_get_comments(..) New function for reading comments and data embedded in jpeg image files. rgb_from_bayer(..) bayer_from_rgb(..), hsi_from_rgb(..) hue_from_rgb(..) saturation_from_rgb(..) intensity_from_rgb(..) grey_from_rgb(..) red_from_rgb(..) green_from_rgb(..) blue_from_rgb(..) cyan_from_rgb(..) magenta_from_rgb(..) yellow_from_rgb(..) cmy_from_rgb(..) cmyk_from_rgb(..) rgb_from_hsi(..) New colour space conversion functions. list_file_details(..) Provides a list of files (or directories) along with other key information such as dates, times and sizes. list_names(..) Returns a list of the names in a compound variable. camera_save_cache(..) Takes a copy of the valid contents of the camera cache file. camera_cache_file_name(..) Returns the name of the camera cache file. camera_override_sync(..) Overrides the GPOut outputs used for the sync line process. density_from_gradient(..) Invert the density gradient by integrating it in a leas squares framework wait_for_file(..) Efficiently waits for a specified file to become available. where_is(..) Returns an array containing indices identifying the location of non-zero (true) values in the passed array. Index arrays DigiFlow now supports index arrays, i.e. the use of an array to simultaneously specify multiple indices. For example, x := x_index(10); y := [1 4 5]; x[y] := 0; # Zero some elements z := x[y+1]; # Extract some elements will yield x as [0 0 2 3 0 0 6 7 8 9] and z as [2 0 6]. If the index array is two-dimensional then the index array can be used to access multidimensional arrays. In such cases the second index of the index array selects between the indices of the source/target array. For example, x := x_index(10,10) + y_index(10,10)/10; y := make_array(0,3,2); y[0,:] := [5 2]; y[1,:] := [3 6]; y[2,:] := [9 4]; z := x[y]; gives z as [5.2 3.6 9.4]. Multiple index arrays and mixes of index arrays and more normal indices and spans is also possible. registry_list_keys(..) Returns a list of the subkeys found in the registry for a given key. compiler_supplier(..) Returns the compiler type/supplier used to build this version of DigiFlow. compiler_version(..) Returns the version of the compiler used to build this version of DigiFlow. is_openmp(..) Indicates if this version of DigiFlow supports OpenMP parallelisation. reverse_polish(..) New expression interpreter using reverse polish notation. This is in the development stage and the syntax of the interpreter is liable to change. The long-term goal is to tie this in with the standard dfc interpreter to provide an improved performance of code that has been pre-processed by the compile(..) command. New macros: PhotosToWeb.dfc This macro provides an easy way of generating web pages of photos. Produces two pages: a thumb-nail linked to a medium-resolution picture, and a slideshow. The input is all the .jpg files in the current directory. The output is a subdirectory containing the reduced resolution images and the two .htm files. Any comments embedded in the jpeg files are used to generate titles for the pages. The pictures are sorted into creation date order. New features: AVI files DigiFlow is now able to read images from and write images to a broad range of standard avi files. These may also be used as the input to any process. File: Export AVI New facility intended to provide a convenient and efficient method of exporting images and drawings from DigiFlow to standard avi files. (Output direct to avi files is also possible, although it is generally more convenient to output to a sequence of dfi files and then later export to an avi file.) Analyse: Synthetic Schlieren: Pattern Matching The facility to calculate density has been reactivated (commercial licences only) with a new algorithm which is capable of coping with missing data and masked regions. Analyse: Particle Tracking New options have been implemented for conveniently removing background variations in the intensity without needing to create intermediate sequences. Analyse: PTV Basic Statistics New facility for calculating basic statistics from particle tracking data. Other changes: BitFlow SDK5.00 DigiFlow now supports version 5.00 of the BitFlow SDK that is used to drive the optional BitFlow framegrabber. BitFlow models supported include RoadRunner/R2, R3, R64, R64e, Karbon and Neon. Library updates DigImage support for the FreeImage, zlib and GhostScript libraries has been brought up to date with versions 3.10, 1.2.3 and 8.60, respectively. Memory requirements There has been a modest decrease in the memory requirements for many operations within DigiFlow. 3GB support DigiFlow can now make use of up to 3GB of virtual memory if the /3GB switch is set in the startup line in c:\boot.ini. Note that on some systems this may cause problems with some drivers, so it is best to make this a boot-time option rather than the only boot option. Consult the User Guide and Windows documentation for further details. 3D View The orientation of the 3D slave view (View: Slaves: 3D View) can now be changed using the middle button of the mouse. Dragging horizontally or vertically rotates about the corresponding vertical or horizontal axis (respectively), while the mouse wheel rotates in the plane of the screeen. Two new buttons have also been added: one to toggle the display of axes, and the second to reset the settings. Harmonic analysis This can now compute the zero frequency (mean) component. A tool is provided in the Spectral group of Tools: Recipes for computing the Hilbert Transform of this, thus allowing waves propagating in different directions to be separated. Tools: Transform Intensity This now provides the options for the code to return the black and white levels, plus the colour scheme. PIV Improvements to the algorithm reduce the noise component for flows with very low velocities. LaTeX Significant improvements to LaTeX-like formatting. eps output The psfrag option with Encapsulated PostScript output can now generate a LaTeX file recording the appropriate \psfrag[..][..]{..}{..} macro definitions, including a new algorithm providing for improved consistency of placement. dfcConsole Improvements include prevention of the display jumping around while matching brackets. compile(..) While performance of the dfc interpreter has improved overall, a more dramatic improvement has been realised using the compile(..) command (commercial licences only). read_image_details(..) read_compound_image(..) Now returns user comments and the creation process. view_rgb(..) Will now display Bayer filtered images in full colour. view(..) draw_on_view(..) These functions will now automatically call draw_end(..) prior to rendering the drawing if this has not alread been done. jpeg Comments stored in jpeg files are now available as user comments. Colour schemes A range of new standard colour schemes has been added. Of course, it remains possible to import or construct your own colour schemes. Bug fixes: Assignment Assignment of a unit length sub-array is now handled as a sub-array rather than a scalar. For example, in a := x_index(10,1); b := a[5,:]; c := a[6,0]; d := a[7,0:0]; e := a[5]; then b and d are arrays containing exactly one element each, while c and e are scalars. Previously, b, c, d and e were all assigned as scalars. Assignments of the form test := make_array(0,100,100); test.im := test; no longer leak memory. Assignments of the form test.im := make_array(0,100,100); test := test.im; no longer lose the contents of the array. DigiFlow News ----- Version 2.0 Build date: 28 November 2007 ----- New dfc functions: draw_skip_points(..) Allows points to be skipped in draw_lineto(..) and draw_mark(..). draw_set_axes(..) Now accepts decreasing axes. New features: Analyse: Time: Harmonic Analysis New facility fo performing harmonic analysis. Other changes: Open and Save Image dialogs As before, the "Numbers as ####" check box in the Open and Save image dialog boxes converts a string of numbers into hashes to allow easy selection of sequences of images. However, numbers found between parentheses "(123)" or square brackets "[123]" are no longer converted. This allows numeric data (e.g. parameters) to be incorporated more readily within a file name. The dialog now contains a "Set current directory" check box. If checked, then the directory currently selected when Open or Save is clicked will be made the current directory. If not checked, then opening a file in a different directory does not affect the current directory. Bug fixes: PIV & Synthetic Schlieren The flags used in the State plane in the Quality output image now coincide with the values described in the manual. DigiFlow News ----- Version 2.0 Build date: 7 November 2007 ----- New dfc functions: erf(..), erfc(..) Calculate the error function or complementary error function of a scalar or 1-d array. inverse_gradient(..) Direct least-squares inversion of a vector field to determine the corresponding scalar potential. This understands masking. multigrid(..) A generalisation of the multigrid routine used in solve_poisson(..) to allow the use of different templates. New features: Other changes: PIV and Synthetic Schlieren The memory requirement for these processes has been reduced by up to around 30%, thus enabling larger images to be processed. Bug fixes: LaTeX The LaTex-like formatting for use in plots and drawings has been improved. psfrag The psfrag output option for plots and drawings when generating eps has been changed to provide better integration with psfrag on a range of implementations. DigiFlow News ----- Version 2.0 Build date: 18 September 2007 ----- New dfc functions: fit_as_text(..) Returns a 'pretty' text version of a fitted expression. dfc_as_latex(..) Produces a LaTeX-friendly formatted version of a dfc code string. find_root_bisection(..) find_root_secant(..) Root finding utilities. move_file(..) Moves or renames a file or directory. is_file_local(..) Indicates if the file is local or on a network drive. computer_for_file(..) Retrieves the name of the computer providing a particular file. camera_gpout(..) Set specific gpout ports on the framgrabber. New features: Most process dialogs now have a 'Close' button that will cancel the dialog, but save the state of the controls. Rather than always having to save the entire image when capturing from video, DigiFlow now supports capture of a smaller region. (Note: if the target area is very nearly the entire field of view, then it is probably more efficient and reliable to capture the entire field if you are close to the bandwidth limits of your computer.) Other changes: camera_set_strobe(..) camera_set_sync_line(..) The 'zero' point for the timing of these functions has been adjusted. Previously, a value of 4096 represented the start of the transfer of data to the framegrabber. Now, a value of zero is the start of the transfer, with values greater than the height of the image representing the period between the end of the transfer and the start of the next frame. This change has been made to allow a more consistent interface between R2/R3 and R64 versions of the framegrabber. psfrag The format of the text produced by the psfrag option when exporting Encapsulated PostScript files has been changed to allow greater compatibility between implementations of the psfrag LaTeX package. The first sixty two text labels are now single characters, and LaTeX-like formatted strings now appear as a single psfrag label. BitFlow SDK4.00 Support for this older version of the BitFlow framegrabber drivers is being phased out. Some new DigiFlow features are only available when using SDK4.50. Bug fixes: PIV and Synthetic Schlieren A minor problem with the median filtering (part of the validation process) for both PIV velocity vectors and Synthetic Schlieren density gradients meant that the measurements were sometimes slightly inconsistent. In almost all cases this error was negligible. A new control has also been added to the Interrogation tab of both these facilities to force an even greater degree of consistency, although it will be rare that the use of this control is desirable. DigiFlow News ----- Version 2.0 Build date: 7 May 2007 ----- DigiFlow website The DigiFlow website has moved to www.dalzielresearch.com/digiflow/ This change will allow significant additional functionality and resources. While it will take some time for the full range to become available, users with a commercial or site licence may benefit immediately with the automatic downloading of updates (see below). New dfc functions: compile(..) Compiles dfc code to an intermediate code that can dramatically improve the speed of execution of loops, etc. open_binary_file(..) Opens a binary file. read_binary_file(..) Reads a value or array from a binary file. write_binary_file(..) Writes a value or array to a binary file. set_file_pointer(..) Sets the location (file pointer) within a binary file. set_file_end(..) Sets the end of file marker for a binary file. set_dfc_path(..) Sets the search path for dfc files. get_dfc_path(..) Retrieves the search path for dfc files. add_image_reader_macro(..) Provides the ability to read unsupported image formats through a user-defined macro. ask_file(..) Browse for a file. ask_directory(..) Browse for a directory. component_names(..) Return the names of all components in a compound value. get_component(..) Retrieve a particular named component from a compound variable. draw_clip_box(..) Allows adjustment of the clipping region when creating a drawing. ftp_open(..) ftp_close(..) ftp_current_directory(..) ftp_change_directory(..) ftp_create_directory(..) ftp_remove_directory(..) ftp_list_files(..) ftp_get_file(..) ftp_put_file(..) ftp_rename_file(..) ftp_delete_file(..) New family of functions for handling ftp transfers from within DigiFlow. Note: these functions are not available for free licences. enable_timing(..) Turns on or off timing output for certain DigiFlow facilities. command_line_arguments(..) Retrieve the command line arguments used to start DigiFlow. camera_set_frame_rate(..) Where the CameralLink interface allows it, use the interface to set the frame rate. camera_wait_for_capture_ready(..) Causes DigiFlow to wait until the setup of the capture file has been completed. view_vector_colour(..) view_vector_remove_mean(..) view_vector_scale(..) view_vector_spacing(..) view_scalar_colour(..) view_scalar_range(..) New family of functions for manipulating the appearance of an image containing vector and background fields in a view. view_toggle_colour(..) Switch between colour and monochrome for the specified view. get_region(..) Retrieve details of a region. New features: Parallel execution Some DigiFlow algorithms are now able to make use of multiple processors to achieve a substantial increase in performance with commercial and site licences (support for multiple processors is disabled in the free version of DigiFlow). The use of multiple processors is controlled by a new double-arrow button towards the right-hand end of the toolbar and by the "View: In Parallel" menu option. This may be turned on and off interactively while a facility is running. The in_parallel(..) dfc function provides similar control from a dfc macro. Reworking of other parts of the code to improve vectorisation on modern cpu's has led to significant speed improvements, even when operating on a single processor. Automatic ftp update. For DigiFlow installations with a commercial or site licence, DigiFlow can be configured to automatically check on the web to determine if there is an update available for download and installation. If you wish to change the manner through which DigiFlow is updated, edit DigiFlow_LocalData.dfc in the installation directory and look for the key DigiFlow.Update.Type := xxx; where xxx may be one of "manual", "ftp" and "site". Note: This feature is not available for free licences. dfc File Filters It is now possible to write dfc macros to either provide handlers to read otherwise unsupported image formats into DigiFlow, or to provide preprocessing of of images. To invoke this feature, place the name of the macro within braces in front of the file name. This macro is passed the name of the file to be opened in the variable File. For example, suppose an image format consists of two integer values specifying the resolution, followed by the pixel values, in four-byte real (binary). A suitable macro (MyReader.dfc) to read this would be: hF := open_binary_file(File,"old"); nx := read_binary(hF,"i2"); ny := read_binary(hF,"i2"); img := read_binary(hF,"r4",nx,ny); close_file(hF); img; To invoke this macro to read a sequence of files "MyFile##.dat", specify {MyReader.dfc}MyFile##.dat Other changes: .mov files To reduce the potential for confusion, the DigImage/DigiFlow movie file format, previously given the extension .mov, has been given the new extension .dfm. While .mov continues to be useable, it is recommended that .dfm is used for any new files of this format. The VideoCapture cache file will be renamed automatically the first time DigiFlow is started. dfc interpreter The internal workings of the dfc interpreter have undergone a major reworking to improve performance. While you will see relatively little difference when manipulating images and large arrays in their entirety, explicit loops and other scalar-intensive operations are handled far more efficiently with a speed increase in excess of a factor of two. dfc Console Improved help functionality. Double click on list of possible functions to view their help. Double click on the function form in the help to have this inserted in your code. New Open Last button. Automatic reloading of last macro if console was not terminated cleanly. Current directory The current directory when running the interpreter and menu-based processes is now local to a given task. This means, for example, that interactively changing the directory will not have any undesirable side effects on tasks already running. PIV and Synthetic Schlieren NOTE ON PARALLELISING To effectively parallelise the pattern matching, there has been a change from a Gauss-Seidel like iteration to a Jacobi-like iteration in that only values from the previous iteration at other points are used to determine the values at the target point. The net result of this change is that there are small differences in the displacement fields computed with the parallel algorithm compared with the original serial algorithm. View Appearances Now gives the option of removing the vector mean when displaying vector fields. Capture Video It is now possible to specify that only a region within the image captured by the camera be saved. Dalsa 4M60 Dalsa 4M30 Support for two new cameras added. Bug fixes: DigiFlow News ----- Version 1.2 Build date: 31 October 2006 ----- New dfc functions: <> A new method of defining compound variables has been introduced. This method is particularly useful when defining lists of components, or for passing compound values to functions without first creating the compound value. A statement of the form this := <>; is equivalent to this.one := 1; this.two := "two"; The values specified within the << >> pair may be separated either by semicolons, or commas. The final semicolon before the closing >> is optional. Multiple << >> pairs may be nested. draw_install_latex_macro(..) Used to install a macro for the latex-like text formatting. Note that the syntax of used to define these macros differs from the latex standard, although their invokation is similar. draw_enable_latex(..) Used to turn on or off the latex-like text formatting. This is turned on by default. var ?= expression; New conditional assignment statement, useful for setting default values. The statement this ?= default; is equivalent to tmp := default; if (not(exists("this"))) { this := tmp; }; Note that the expression is always evaluated, even if its result is not used. x_accumulate(..) y_accumulate(..) Accumulates data in the supplied arrays. New features: Latex formatting DigiFlow now supports latex-like formatting of strings in text labels on plots and drawings. Other changes: Synthetic Schlieren The ability to project the apparent displacement field onto an irrotational space has been added to the validation tab. This projection is appropriate since the apparent displacement should be able to be expressed as the gradient of a scalar (i.e. the density) for a rectangular tank. This feature is not available under a free licence. PIV The ability to project the apparent displacement field onto either a solenoidal or an an irrotational space has been added to the validation tab. Projection onto a soloenoidal space may be appropriate when dealing with two-dimensional incompressible flows. Projection onto an irrotational space will be less generally valid. Bug fixes: Particle tracking A minor problem with the particle location routine has been fixed. This should result in cleaner and more robust tracking. Note that the number of particles located might appear reduced, this is because the bug caused some particles to be double-counted previously. DigiFlow News ----- Version 1.2 Build date: October 2006 ----- New dfc functions: read_array(..) Simplied reading of array data from files. get_local_variables(..) Return snapshot of local variables. get_user_variables(..) Return snapshot of all user variables. get_file_variables(..) Execute a dfc file, returning all the local variables produced. x_transition_index(..) Find the x (for each y) for the first point in an image to pass through a threshold. y_transition_index(..) Find the y (for each x) for the first point in an image to pass through a threshold. camera_set_mode(..) Now supports externally triggered modes. camera_switch_mode(..) New macro to simplify switching between continuous, oneshot and externally triggered modes. view_icon(..) move_icon(..) New functions for displaying and relocating cursor-like icons. view_counter(..) Provides a mechanism for detecting if the contents of a view have changed. max_string_length(..) Returns the maximum length for standard DigiFlow strings. (Longer strings should be specified as memos or code.) rotate_clockwise(..) rotate_anticlockwise(..) Provides a more efficient method of rotating an image through 90 degrees than that provided by rotate_image(..). registry_get_value(..) registry_set_value(..) registry_create_key(..) New functions for manipulation of the registry. New features: Synthetic Schlieren New differential mode to calculate rate of change of density gradient. Other changes: directdraw_trigger(..) The return value of this function has changed to provide additional timing information. x_index(..), y_index(..) etc. This group of functions now also accepts integer parameters to directly produce index arrays of the desired size. FreeImage DigiFlow now uses version 3.91 of FreeImage for reading and writing some of the standard image types. Note: the FreeImage library is used by DigiFlow under the terms and conditions of that licence. Bug fixes: EPS files Problems with detecting the EPS printer on some systems has been cured. DigiFlow News ----- Version 1.1 Build date: 9 May 2006 ----- New dfc functions: camera_grab(..) Grab a single or multiple images from a live view. camera_wait_for_capture(..) camera_wait_for_preprocess(..) New synchronisation functions. draw_line_colour(..) Now allows for an index into the current colour scheme set by draw_colour_scheme(..). time_interval(..) High resolution timer for determining how long processes take. List variables Individual list variable elements containing arrays or compound variables may now be accessed more directly. For example, if list := make_list(null,32); list[5] := make_array(0,10,10); cmp.a := "a"; cmp.b := 1; list[6] := cmp; then the following are permitted: list[5][3,:] := pi; list[5][::2,3] := list[5][::2,3]^2; list[5][5] += 1; list[6].a := list[6].b; New features: Tools: Slave Process New facility providing a broad range of semi-interactive processing that works on the output of other processes, image sequences and live video capture. For example, the LiveView:Setup:Focus slave process provides a convenient aid to focusing a camera. Changes: Preview code creating windows. The behaviour of dfc code in tools such as Transform Intensity that offers a Preview facility has changed so that if the code creates a window (view) in preview mode, then the window will be floating so that it can be accessed by the user for things such as get_mouse_rect(..). The normal behaviour will be used when the tool is finally invoked. PIV distorted passes The interpolation used for constructing the images used in the distorted passes has been reworked to provide improved performance when masking is used. A new User Interpolation tab allows user-specified interpolation to be used in place of the DigiFlow default for extending the velocity field from the interrogation points to the entire image plane. PIV coordinates DigiFlow can now optionally save the world coordinates as additional data planes in the output dfi file. New hardware: Bug fixes: Synthetic Schlieren An error in the relationship between the apparent displacement of the mask and the density perturbation has been fixed. This applies to both the interpolative and pattern matching variants. Live Video BitFlow errors recorded in the System Log have been cured. DigiFlow News ----- Version 1.1 Build date: 5 April 2006 ----- New dfc functions: camera_serial(..) Serial communications with a CameraLink camera. camera_set_gain(..) Set the gain for a CameraLink camera. camera_shutter_speed(..) Set the shutter speed for a CameraLink camera. change_directory(..) Changes the current working directory. current_directory(..) Retrieve the name of the current working directory. hsi_from_rgb(..) hue_from_rgb(..) saturation_from_rgb(..) intensity_from_rgb(..) grey_from_rgb(..) rgb_from_hsi(..) New colour space conversion functions. follow_optical_flow(..) Basic building block for extracting velocity data using the idea of the 'advection' of light. See also the new Optical Flow: Follow feature below. draw_* and plot_* Many of the draw_* functions can now take a zero or null as the first parameter, in place of a drawing handle, to indicate the drawing created with the Simple Plot (plot*) family of functions. fractal_box_count(..) New (optional) parameters have been added New features: Analyse: Optical Flow: Follow New method of extracting velocity or displacement information from images using the idea of the 'advection' of light. File: Live Video: Show Live File: Live Video: Capture Camera gain and shutter speed can now be controlled from the parent dialog for some supported CameraLink cameras. File: LiveVideo: Setup New facility for controlling the configuration of the V:\Cache\CaptureVideo.mov cache file. Changes: Analyse: Particles: PIV New check box (Mask zeros) on Inputs tab to control whether or not DigiFlow should ignore pixels with an identically zero intensity. (Not available with a free licence.) Analyse: Synthetic Schlieren: Pattern Matching New check box (Mask zeros) on Inputs tab to control whether or not DigiFlow should ignore pixels with an identically zero intensity. (Not available with a free licence.) Control of gain and shutter speed DigiFlow can now control directly the gain and shutter speed of some CameraLink cameras (in particular the Jai CVM4+CL and UniqVision UP1830-12B) when installed with version 4.50 of BitFlow's framegrabber drivers. Note that the switches on the rear panel of the cameras must be configured to activate serial communications over the CameraLink cable. For the CVM4+CL this means that switch 10 must be set to 'on', while the UP1830-12B's mode switch must be set to 'NR'. Tools: Recipes A number of new recipes have been added and some existing ones have been improved or extended. New hardware: R64 and R64e framegrabbers DigiFlow now supports the BitFlow R64 and R64e framegrabbers. BitFlow SDK4.50 DigiFlow now supports version 4.50 of BitFlow's SDK drivers. Note that this is achieved through a new DLL: DigiBit.dll, which will be loaded in preference to RoadRunner.dll when DigiFlow detects the newer SDK. Cameras: DigiFlow now supports the UniqVision UP1830-12B CameraLink camera. DigiFlow can also support dual camera configurations using the R64 and R64e versions of the framegrabber. Bug fixes: Assignment A bug associated with a self-assignment statement of the form A:=A; for arrays has been fixed. Analyse: Ensemble mean Now correctly stores and retrieves the members of the ensemble. Intermittent errors A class of random intermittent errors (typically access violations) has been identified and fixed. Drawing and plotting Some problems associated with axes have been fixed. Creation of eps files Problems causing DigiFlow to sometimes crash when creating Encapsulated PostScript (.eps) files have been fixed. DigiFlow News ----- Version 1.0 Build date: 5 December 2005 ----- New dfc functions: filter_median(..) New filter function returning the median of pixels in the template. filter_centile(..) New filter function returning the requested centile of pixels in the template. filter_std_dev(..) New filter function returning the standard deviation of pixels in the template. ghostscript(..) ghostscript_start(..) ghostscript_execute(..) ghostscript_end(..) ghostscript_get_image(..) ghostscript_show_image(..) ghostscript_get_output(..) New family of functions providing the ability to translate PostScript (.ps), Encapsulated PostScript (.eps) and Acrobat (.pdf) into image for processing by DigiFlow. These function is available only if DigiFlow detects a copy of GhostScript installed on the computer (it must be accessible on the PATH and the GS_LIB environment variable must be set). NOTE: GhostScript is not supplied with DigiFlow and is not used as an integral part of DigiFlow. GhostScript is subject to its own licence and the terms contained therein must be adhered to. draw_bottom_axis(..) draw_top_axis(..) draw_left_axis(..) draw_right_axis(..) New functions for drawing axes that can be independent of the current coordinate system. New features: Weighted Time Average New facility in the Analyse: Time menu to simplifying the calculation of weighted or conditional time averages. Ensemble mean New facility in the Analyse: Ensemble menu that allows simplified calculation of ensemble mean images and velocity fields. PIV Now allows automatic rescaling of images to reduce the effect of variations in the intensity of the light source. This feature is available in the Mean Differences group on the Interrogation tab. New 'Compact' output option. This will cause DigiFlow to store the velocity field only for the nominal location of each interrogation window. When reloaded, DigiFlow will attempt to reconstruct the full velocity field. The effective resolution of this will be very close to that achieved by storing the full velocity field initially. Note that Synthetic Schlieren Now allows automatic rescaling of images to reduce the effect of variations in the intensity of the light source. This feature is available in the Mean Differences group on the Interrogation tab. New 'Compact' output option. This will cause DigiFlow to store the gradient field only for the nominal location of each interrogation window. When reloaded, DigiFlow will attempt to reconstruct the full gradient field. The effective resolution of this will be very close to that achieved by storing the full velocity field initially. Encapsulated PostScript Encapsulated PostScript (.eps) files may now be specified for output streams. A new button in the Options dialog allows configuration of the .eps format. If DigiFlow detects a copy of GhostScript installed on the computer (it must be accessible on the PATH and the GS_LIB environment variable must be set), then DigiFlow can also read Encapsulated PostScript images, converting them into bitmaps. NOTE: GhostScript is not supplied with DigiFlow and is not used as an integral part of DigiFlow. GhostScript is subject to its own licence and the terms contained therein must be adhered to. DigiFlow can also Changes: pixel_contour(..) The manner in which the ret.array is marked has been changed. The new scheme provides additional information on the location of the contour which allows better resolution of marking contours when these are almost touching. Bug fixes: DigiFlow News ----- Version 1.0 Build date: 31 October 2005 ----- New dfc functions: randomise(..) Randomises the order of a list or array. sort(..) Sorts a list or array. read_file(..) Now implemented. Returns list of values. extract(..) May now be used to extract an array of numeric values from a list structure. New features: Export to EPS The EPS generation facility can now make use of a Windows printer driver to generate EPS files of both bitmaps and vector graphics. To make use of this facility you need to create a printer (using a PostScript driver) named "EPS". This printer should use the "File:" port. In the Advanced dialog of the Printing Preferences you should specify "Encapsulated PostScript" for the "PostScript Output Option" under "PostScript Options". Refer to Section 2.2 of the user manual for further information. Bug fixes: DigiFlow News ----- Version 1.0 Build date: 3 August 2005 ----- New dfc functions: plot(..) Plots a series of points. plot_line(..) Plots a line. plot_vectors(..) Produce a vector map. plot_image(..) Add an image to a plot. plot_fit(..) Perform and plot a least squares fit. plot_axes(..) Explicitly specify the limits for the axes. plot_titles(..) Specify the titles for the axes. plot_new(..) Start a new plot. plot_view_handle(..) Return the handle for the view window displayingthe plot. plot_drawing(..) Return a handle to the base plot. This does not include information about the axes. plot_update_view(..) Cause the view to be updated. New family of simplified plot functions. New features: Bug fixes: DigiFlow News ----- Version 1.0 Build date: 23 June 2005 ----- New dfc functions: for i := array {..}; for i := list {..}; Executes the code for each of the items in the first dimension of the specified array or list. function User defined functions can now have optional parameters. A parameter may be made optional by including an assignment statement in the function declaration, with the assigned value being the default. For example, function example(x,y:=1) { x^2 + y; }; has a mandatory parameter (x) and an optional parameter (y). If y is not specified, then it will default to the integer value 1. Note that the assignment in the declaration, which may include expressions, is evaluated at the time the declaration is made, not at the time the function is invoked. b_spline_2d(..) New function for explicitly interpolating data using b-splines. rescale_image(..) B-spline interpolation has been added and the default interpolation technique is now a 3rd order b-spline. Additional optional parameters allow control over the order of the interpolation. write_image(..) The write_image(..) command now accepts compound images (in image) containing multiple image planes and display hints, such as are used for velocity fields. The components of the compound variable are a superset of those provided by read_compound_image(..) and provided in the various DigiFlow facilities that require a code segment (e.g. Tools: Transform Intensity and Analyse: Time Series: Extract). streamline(..) Follows instantaneous streamlines for a velocity field. make_like(..) New optional third argument for make_like(..) which allows replication of an array value into a larger array. This facilitates constructing a 2D array from 1D data, for example. bessel(..) Compute the bessel function of the first or second kind for the scalar or array x. pixel_coordinate(..) world_coordinate(..) New variants on the pixel_coordinate(..) and world_coordinate(..) functions now accept coordinate information in the compound variable Q such as that provided by read_compound_image(..) and provided in the various DigiFlow facilities that require a code segment (e.g. Tools: Transform Intensity and Analyse: Time Series: Extract). camera_wait_for_capture(..) Will pause the execution of the dfc code until the current video capture (e.g. initiated by camera_start_capture(..)) is complete. camera_set_strobe(..) Allows the strobe signal produced by the framegrabber card to be adjusted whilst the camera is running. (The DigiFlow_Cameras.dfc file contains the default strobe settings; multiple strobes can now be triggered within a given frame.) atan(..) atan_rad(..) The arc tangent functions now have two parameter versions. is_drawing(..) Function to test whether or not a variable contains a valid drawing handle. New features: Variables button DigiFlow facilities that require a code segment to manipulate image data (e.g. Tools: Transform Intensity and Analyse: Time Series: Extract) now include a Variables... button that will display all the variables supplied to the code segment. This list is more extensive than that provided in the associated list box, and the new list provides the ability to preview the values of these variables. Open Image/Save Image dialog The Open Image and Save Image dialog boxes now have the option of producing a more compact file list by summarising numbered sequences using the hash (#) syntax. Analyse: Time Series: Summarise Automatic determination of the range for the y axis is now possible. Analyse: PIV The initial search space may now be biased with new x Bias and y Bias controls on the input tab. These are of particular value if processing images with a significant mean flow component. Note: this feature is only available with a Commercial licence. The PIV facility now has the ability to employ a user-developed vector filter. This filter, which must be written in dfc code, can be used to control the acceptance or rejection of individual velocity vectors. Note: this feature is only available with a Commercial licence. An optional output 'image' containining information of the quality of the associated velocity vectors can now be produced using the Commercial version of DigiFlow. This image include information on the calculated difference between the interrogation regions, the curvature of the fit in the neighbourhood of the optimal fit and DigiFlow's classification of the vectors. Note: this feature is only available with a Commercial licence. The ability to identify particles entering or leaving the illuminated volume has been added, along with the option of excluding the affected pixels from the pattern matching process. Note: this feature is only available with a Commercial licence. The interpolation scheme used to extend the velocity vectors from the interrogation windows to the entire image may now be selected explicitly from the Interrogation tab. The option of cubic and quintic b-splines has been introduced alongside the previously used b-linear and bi-cubic schemes. There have been some changes to the default schemes when using automatic interrogation. Note: this feature is only available with a Commercial licence. Analyse: Particle Tracking Particle Tracking Velocimetry (PTV) can now make use of velocity information from a sequence of .dfi files to provide the prediction for the motion of particles without a matching history. These .dfi files can come from either PIV measurements, or a previous PTV run. Note: this feature is only available with a Commercial licence. Analyse: Synthetic Schlieren The interpolation scheme used to extend the apparent displacement vectors from the interrogation windows to the entire image may now be selected explicitly from the Interrogation tab. The option of cubic and quintic b-splines has been introduced alongside the previously used b-linear and bi-cubic schemes. There have been some changes to the default schemes when using automatic interrogation. Note: this feature is only available with a Commercial licence. DlgResponses.log The DigiFlow build date is now included in the DlgResponses.log file. dfc Function Help. The dfc Function Help now has a 'General items' category that flags the latest developments, options for specifying selectors, etc. Bug fixes: Velocity background recipes The recipes to provide differential fields (e.g. vorticity or divergence) as the background for a velocity field have been improved. The interpreter now correctly calculates expressions of the form -a^2 or -(a)^2. Previously the unary negative had a higher precedence than squaring. DigiFlow News ----- Version 1.0 Build date: 31 March 2005 ----- New dfc functions: mem_spectrum_row(..) mem_spectrum_column(..) Compute the power spectrum using the maximum entropy method. New features: Edit: Process Again... Opens and initialises the dialog that was used to create the current (active) .dfi, .dft or .dfd image. Bug fixes: Change reading and writing of image files to allow for much larger image sizes without running out of stack space. Fix bug with displaying velocity .dfi files (where the source could be updated/changed/deleted before the display process was complete). Fix bug whereby the conversion of vector graphics to raster images eventually failed. Bug with minimising/restoring dfcConsole fixed. 16 March 2005 First build of DigiFlow version 1.0 released.