<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Paul, <br>
      <br>
      Sorry to have given such an off target answer! Your idea about
      checking the dot product as you progress makes sense. That's how
      VTK's a hyper stream tracer handles the issue. I wonder if you can
      make use of it? Bringing VTK classes into PV isn't too hard but
      parallelizing them can be challenging.<br>
      <br>
      Burlen<br>
      <br>
      On 08/24/2013 12:27 PM, Burlen Loring wrote:<br>
    </div>
    <blockquote cite="mid:52190928.6080600@lbl.gov" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      <div class="moz-cite-prefix">in the case of the glyphing algorithm
        it's the surface normals of the transformed glyph that have the
        relation to the sign determinant of the transform matrix. this
        transformation matrix is constructed from the eigenvectors
        directly. at any rate, good luck.<br>
        <br>
        On 08/23/2013 06:35 PM, pwhiteho wrote:<br>
      </div>
      <blockquote
cite="mid:072E56E27FBC094398260E491A664E8F53FF36C9@DM2PRD0112MB671.prod.exchangelabs.com"
        type="cite">
        <meta http-equiv="Content-Type" content="text/html;
          charset=ISO-8859-1">
        <style id="owaParaStyle" type="text/css"><!--P {margin-top:0;margin-bottom:0;}--></style>
        <div style="direction: ltr;font-family: Tahoma;color:
          #000000;font-size: 10pt;">Burlen, you had me hoping, but alas
          ... there is no direct correlation between the determinant (
          a.k.a. the 3rd tensor invariant ) and the orientation of the
          computed eigenvectors. You did get me thinking there may be
          other possibilities. I'm sure I can use the dot product in a
          marching cube scheme to enforce a consistent orientation
          progression and generate a "vector" field ParaView will handle
          well. It'll just have to be robust enough to handle a true
          change near some sharp topological feature.<br>
          <br>
          Thanks,<br>
          Paul<br>
          <br>
          <div style="font-family: Times New Roman; color: #000000;
            font-size: 16px">
            <hr tabindex="-1">
            <div style="direction: ltr;" id="divRpF964985"><font
                color="#000000" face="Tahoma" size="2"><b>From:</b>
                Burlen Loring [<a moz-do-not-send="true"
                  class="moz-txt-link-abbreviated"
                  href="mailto:bloring@lbl.gov">bloring@lbl.gov</a>]<br>
                <b>Sent:</b> Friday, August 23, 2013 4:31 PM<br>
                <b>To:</b> Andy Bauer; pwhiteho<br>
                <b>Cc:</b> <a moz-do-not-send="true"
                  class="moz-txt-link-abbreviated"
                  href="mailto:paraview@paraview.org">paraview@paraview.org</a><br>
                <b>Subject:</b> Re: [Paraview] Stream Tracer in
                eigenvector field<br>
              </font><br>
            </div>
            <div>
              <div class="moz-cite-prefix">Eigenvectors are unique up to
                a constant<span style="color:rgb(0,0,0);
                  font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;
                  font-size:13px; font-style:normal;
                  font-variant:normal; font-weight:normal;
                  letter-spacing:normal; line-height:normal;
                  orphans:auto; text-align:start; text-indent:0px;
                  text-transform:none; white-space:normal; widows:auto;
                  word-spacing:0px; background-color:rgb(255,255,255);
                  display:inline!important; float:none"></span> so if
                you took any eigenvector and multiplied it by -1 it's
                still an eigenvector. You could see it in the
                definition,<br>
                <br>
                M x=\lambda x<br>
                <br>
                eigenvector x appears in both sides of the eqn.<br>
                <br>
                I had a similar problem with tensor glyphs in ParaView.
                In that case I was able to solve by looking at the sign
                of the determinant of the transformation matrix (see bug
                report, patch and mail list posts below). I wonder if
                you could adapt/build on this solution there to solve
                your issue here?<br>
                <br>
                <a moz-do-not-send="true"
                  href="http://vtk.org/Bug/view.php?id=12179"
                  target="_blank">http://vtk.org/Bug/view.php?id=12179</a><br>
                <a moz-do-not-send="true"
href="http://vtk.1045678.n5.nabble.com/tensor-glyph-inward-pointing-surface-normals-td4388361.html"
                  target="_blank">http://vtk.1045678.n5.nabble.com/tensor-glyph-inward-pointing-surface-normals-td4388361.html</a><br>
                <br>
                Burlen<br>
                <br>
                <br>
                On 08/23/2013 01:10 PM, Andy Bauer wrote:<br>
              </div>
              <blockquote type="cite">
                <div dir="ltr">
                  <div>
                    <div>
                      <div>Hi Paul,<br>
                        <br>
                      </div>
                      Apologies as my math is a bit rusty but isn't the
                      sign of the eigenvector related to the sign of its
                      corresponding eigenvalue? In that case if you make
                      sure that all of the eigenvalues are positive then
                      all of their corresponding eigenvectors should be
                      aligned properly. If that's the case and you have
                      access to the eigenvalues of the eigenvectors you
                      could use the calculator or python calculator to
                      properly orient the eigenvectors.<br>
                      <br>
                    </div>
                    In any case, if you can come up with an algorithm
                    that properly orients the eigenvectors you should be
                    able to do that in the python calculator or
                    calculator filters. If not, then things could get a
                    bit hairy as far as computationally figuring out
                    which is the "proper" direction your eigenvalues
                    should have.<br>
                    <br>
                  </div>
                  Regards,<br>
                  Andy<br>
                </div>
                <div class="gmail_extra"><br>
                  <br>
                  <div class="gmail_quote">On Fri, Aug 23, 2013 at 3:38
                    PM, pwhiteho <span dir="ltr"> &lt;<a
                        moz-do-not-send="true"
                        href="mailto:pwhiteho@masonlive.gmu.edu"
                        target="_blank">pwhiteho@masonlive.gmu.edu</a>&gt;</span>
                    wrote:<br>
                    <blockquote class="gmail_quote" style="margin:0 0 0
                      .8ex; border-left:1px #ccc solid;
                      padding-left:1ex">
                      <div>
                        <div style="direction:ltr; font-size:10pt;
                          font-family:Tahoma">The term "eigenvector",
                          used to describe the principal directions of a
                          tensor, is a bit of a misnomer since it's not
                          a "vector" as interpreted by the Stream Tracer
                          filter - it's more accurately bi-directional
                          like tension/compression and could be termed
                          "eigenaxis/eigenaxes". When interpreted as a
                          vector, there is an inherent sign ambiguity in
                          each eigenvector - the sign is indeterminate
                          and one is free to choose + or -, and that is
                          exactly what Mathematica does ( likely true
                          for other routines also ).<br>
                          <br>
                          I've been using Mathematica to prototype
                          computations for the investigation of tensor
                          topology which I then visualize in ParaView.
                          Eigen-decomposition of a tensor field at each
                          grid point returns an orthonormal set of
                          eigenvectors, uncorrelated with any neighbors.
                          Taken separately, each eigenvector field
                          exhibits large regions of smoothly varying
                          orientation, but there are systematic and
                          random reversals of orientation that confound
                          the Stream Tracer filter, sending streamlines
                          wandering around the field. What is needed is
                          a true tangent curve ( tensor line )
                          integrator that would avoid "doubling back" as
                          the "streamline" propagates, similar to the
                          scheme of Weinstein, et. al., ( IEEE VIS'99 )
                          which computes the dot product of the incoming
                          propagation vector with the eigenvector; and
                          if near -1, negate the outgoing propagation
                          vector. This can also be fancied-up to
                          accommodate noisy initial tensor data as in
                          Weinstein.<br>
                          <br>
                          I think I would be taking on too much at this
                          point in learning to write my own filter so
                          have been exploring ways to pre-process the
                          eigenvector fields before visualizing in
                          Paraview, but I ask:<br>
                          1. Have I missed something in existing filters
                          that would handle this?<br>
                          2. Can the existing Stream Tracer be modified?<br>
                          3. Does the eigenvector routine in ParaView
                          yield the same sign ambiguity among
                          uncorrelated computations?<br>
                          <br>
                          Thanks,<br>
                          Paul W<br>
                          <br>
                        </div>
                      </div>
                      <br>
                      _______________________________________________<br>
                      Powered by <a moz-do-not-send="true"
                        href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
                      <br>
                      Visit other Kitware open-source projects at <a
                        moz-do-not-send="true"
                        href="http://www.kitware.com/opensource/opensource.html"
                        target="_blank">
                        http://www.kitware.com/opensource/opensource.html</a><br>
                      <br>
                      Please keep messages on-topic and check the
                      ParaView Wiki at: <a moz-do-not-send="true"
                        href="http://paraview.org/Wiki/ParaView"
                        target="_blank">
                        http://paraview.org/Wiki/ParaView</a><br>
                      <br>
                      Follow this link to subscribe/unsubscribe:<br>
                      <a moz-do-not-send="true"
                        href="http://www.paraview.org/mailman/listinfo/paraview"
                        target="_blank">http://www.paraview.org/mailman/listinfo/paraview</a><br>
                      <br>
                    </blockquote>
                  </div>
                  <br>
                </div>
                <br>
                <fieldset class="mimeAttachmentHeader" target="_blank"></fieldset>
                <br>
                <pre>_______________________________________________
Powered by <a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="http://www.kitware.com" target="_blank">www.kitware.com</a>

Visit other Kitware open-source projects at <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a>

Please keep messages on-topic and check the ParaView Wiki at: <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://paraview.org/Wiki/ParaView" target="_blank">http://paraview.org/Wiki/ParaView</a>

Follow this link to subscribe/unsubscribe:
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.paraview.org/mailman/listinfo/paraview" target="_blank">http://www.paraview.org/mailman/listinfo/paraview</a>
</pre>
              </blockquote>
              <br>
            </div>
          </div>
        </div>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>