<div dir="ltr"><div><div><div><div>Hi Tim,<br><br></div>Thanks for sharing that link! <br><br></div>If you take a stab at writing your own MS Complex and want help contributing back to VTK, I'd be more than willing to help on that. <br><br></div>Best regards,<br></div>Andy<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 6, 2015 at 6:04 PM, Tim Gallagher <span dir="ltr"><<a href="mailto:tim.gallagher@gatech.edu" target="_blank">tim.gallagher@gatech.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-family:times new roman,new york,times,serif;font-size:12pt;color:#000000">Hi Andy,<br><br>Thanks for the tip on the MS Complex, I had never heard of this but it looks very interesting. <br><br>If I have time, I may try to write my own code to do it and if I can figure out the algorithms in our own research code, I could take a stab at getting them in a VTK filter. In the meantime, I found this:<br><br><a href="http://vgl.serc.iisc.ernet.in/mscomplex/pyms3dEx.html" target="_blank">http://vgl.serc.iisc.ernet.in/mscomplex/pyms3dEx.html</a><br><br>which shows examples using paraview to call the library that group wrote. It's done through the python programmable filter -- it might be pretty easy to generate an in-situ proof of concept using their library. <br><br>Tim<br><br><hr><div style="color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt"><span class=""><b>From: </b>"Andy Bauer" <<a href="mailto:andy.bauer@kitware.com" target="_blank">andy.bauer@kitware.com</a>><br><b>To: </b>"tim gallagher" <<a href="mailto:tim.gallagher@gatech.edu" target="_blank">tim.gallagher@gatech.edu</a>><br><b>Cc: </b>"ParaView list" <<a href="mailto:paraview@paraview.org" target="_blank">paraview@paraview.org</a>><br></span><b>Sent: </b>Tuesday, October 6, 2015 1:55:34 PM<div><div class="h5"><br><b>Subject: </b>Re: [Paraview] Finding center points/lines of a scalar field<br><br><div dir="ltr"><div><div><div><div>Hi Tim,<br><br></div>The connectivity filter would be an option for separating islands but it looks like it doesn't take any domain decomposition into account (i.e. each process computes its own connectivity only). <br><br></div>If you look at Morse-Smale complex, that's probably quite close to what you want. Unfortunately there's not an implementation for that in ParaView yet. I'd like to do that eventually for in situ as it would be useful for many feature detection algorithms but there aren't any current plans to do that.<br><br></div>Cheers,<br></div>Andy<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 6, 2015 at 11:48 AM, Tim Gallagher <span dir="ltr"><<a href="mailto:tim.gallagher@gatech.edu" target="_blank">tim.gallagher@gatech.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-family:times new roman,new york,times,serif;font-size:12pt;color:#000000">Hi Andy,<br><br>Thanks for the response. Just to further complicate things, let's say there is more than one feature and so my threshold results in multiple "islands" of data. Is there a filter or a way that I can loop over the discrete lumps of data to run the integration filter over each one? <br><br>Alternatively, from the entire scalar field, I might also be interested in finding all of the local maxima, which may be an easier problem than thresholding and finding the center of mass of the independent volumes. <br><br>I can already foresee issues trying to locate a center point/line when features merge/collide but I'm not going to worry about that one quite yet. <br><br>I'm starting to get the feeling this might turn into a pretty big undertaking -- but maybe if I can figure something out I can send a filter upstream for others to use.<br><br>Tim<br><br><hr><div style="color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt"><b>From: </b>"Andy Bauer" <<a href="mailto:andy.bauer@kitware.com" target="_blank">andy.bauer@kitware.com</a>><br><b>To: </b>"tim gallagher" <<a href="mailto:tim.gallagher@gatech.edu" target="_blank">tim.gallagher@gatech.edu</a>><br><b>Cc: </b>"ParaView list" <<a href="mailto:paraview@paraview.org" target="_blank">paraview@paraview.org</a>><br><b>Sent: </b>Tuesday, October 6, 2015 10:19:01 AM<br><b>Subject: </b>Re: [Paraview] Finding center points/lines of a scalar field<div><div><br><br><div dir="ltr"><div><div><div><div><div>Hi Tim,<br><br></div>For 2D where you're just looking for a point, after you've done your threshold you can use the integrate variables to get the center point of the extracted domain. It should be the returned point location. This will also work in 3D for a center point. At this point in your Catalyst script you can just get the results from the integration and write your own csv file with the values (just have process 0 do this since in parallel I believe that only process 0 will have any data here). <br><br></div>For 3D and looking for an arbitrarily shaped center line that's not known a priori, that's a tough one. The best I can think of here is after the threshold to compute some distance function over the thresholded domain, then maybe take the gradient of that, find the maximum point(s) and then follow the maximum gradient vector from those points to find your lines. As for doing this in ParaView, I can't think of any existing filter to compute the distance function so this would probably have to be a custom filter. For the lines from gradients, you can probably use the Python calculator or Python programmable filter to compute the maximum gradient vector at each point and then maybe use streamlines with custom inputs for the points to compute the lines you want. <br><br></div>This sounds like a really interesting problem though so if you figure out how to do this, I'd be very interested in seeing your results.<br><br></div>Cheers,<br></div>Andy<br><div><div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Oct 3, 2015 at 8:25 PM, Tim Gallagher <span dir="ltr"><<a href="mailto:tim.gallagher@gatech.edu" target="_blank">tim.gallagher@gatech.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi everybody,<br>
<br>
I'm working on some flow feature identification and I want to track the (x,y,t) or (x,y,z,t) centers of the features I want to identify. I can come up with a scalar field, \phi, and a criterion for my feature, say \phi >= 1. I would like to find the center point of the feature if in 2D or the center-line of the feature if in 3D.<br>
<br>
This can be done for a variety of different features using different scalar fields, but for sake of argument, let's say I am looking at a vortex. In 2D, the vortex core is a point. In 3D, it may for a vortex sheet, or vortex tube, it may be arbitrary in shape (horseshoe, hairpin, etc.) and so there is no center point but really a center line for the core. I suppose this line may be composed of the center point of planes spanned by two of the principle components and the center line is oriented along the third, but I am not positive.<br>
<br>
At any rate, given a 2D or 3D scalar field and a threshold, what are the filters I should have in my pipeline to extract this information? I plan on doing this online with Catalyst. I would imagine that it would look like:<br>
<br>
MyData -> Threshold -> <Some filter I don't know to find the center points/lines> -> <Output each center point/line in a spreadsheet form><br>
<br>
I'm not adverse to programming custom filters as needed, but I feel like this is something that a filter or set of filters may already exist to make this work. I don't want to reinvent the wheel because anything I come up with won't be as efficient as what is already there!<br>
<br>
Thanks,<br>
<br>
Tim<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the ParaView Wiki at: <a href="http://paraview.org/Wiki/ParaView" rel="noreferrer" target="_blank">http://paraview.org/Wiki/ParaView</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=ParaView" rel="noreferrer" target="_blank">http://markmail.org/search/?q=ParaView</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/paraview" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/paraview</a><br>
</blockquote></div><br></div></div></div></div></div></div>
</div></div></div><br></div></div></blockquote></div><br></div>
</div></div></div><br></div></div></blockquote></div><br></div>