<HTML>
<HEAD>
<TITLE>Re: [Paraview] Problem with custom time-aware reader</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>I don&#8217;t know why you are getting the FooReader warning. &nbsp;It sounds like an object named FooReader is being defined twice in the server manager XML, but I don&#8217;t know where.<BR>
<BR>
The calling of RequestInformation is a little tricky to explain. &nbsp;In general, RequestInformation should <I>not</I> be called when the time changes. &nbsp;However, when the time changes, the file series reader changes the filename to the internal reader (in this case, the foo reader). &nbsp;The correct behavior for the pipeline is to re-call RequestInformation if the the algorithm object gets modified (e.g. an ivar like FileName changes). &nbsp;Thus, if the time changes then the file series reader will call RequestInformation on the foo reader from within the RequestData pipeline pass. &nbsp;I would not be surprised if this was the same behavior in both the GUI and Python. &nbsp;It might just be that the progress monitoring is slightly different.<BR>
<BR>
-Ken<BR>
<BR>
<BR>
On 9/6/09 3:24 PM, &quot;Karl K&ouml;nig&quot; &lt;<a href="kkoenig11@web.de">kkoenig11@web.de</a>&gt; wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Hi Ken,<BR>
<BR>
Thank you very much for taking the time to look into my problem again.<BR>
As a matter of fact I had worked out a solution using its own<BR>
bookkeeping of files by means of a &quot;vtkStringArray *FileNames&quot;.<BR>
But you are right, your solution is minimal and avoids re-implementing<BR>
features already provided by<BR>
ParaView3/Servers/Filters/vtkFileSeriesReader.cxx, features I haven't<BR>
been aware of because I simply followed the instructions to use the<BR>
class without actually studying it.<BR>
<BR>
I hope you don't mind that I still have a few questions about the<BR>
prototypical time-aware reader FooReader for files series with one time<BR>
step value per file and no meta file.<BR>
<BR>
1) I opened the file series file*.foo from the tarball attached to my<BR>
initial posting and opened the Python shell from within ParaView 3.6.1<BR>
(having successfully loaded the plugin by setting PV_PLUGIN_PATH). I get<BR>
a warning I cannot make any sense of:<BR>
<BR>
Python 2.5.2 (r252:60911, Jan &nbsp;4 2009, 18:00:02)<BR>
[GCC 4.3.2] on linux2<BR>
&gt;&gt;&gt; from paraview.simple import *<BR>
Warning: FooReader is being overwritten. This may point to an issue in<BR>
the ParaView configuration files<BR>
&gt;&gt;&gt;<BR>
<BR>
Deleting ~/.config/ParaView/ParaView3.6.ini does not remove the warning.<BR>
&nbsp;I wonder what's wrong with this reader plugin as for the other reader<BR>
plugin that comes with ParaView 3.6.1, the VisIt Reader, there is no<BR>
such warning.<BR>
I get the same message for a cvs build (paraview version 3.7.0, Date:<BR>
2009-09-05).<BR>
<BR>
2) Despite the warning, using the reader works from Python<BR>
&gt;&gt;&gt; view = GetActiveView(); view.ViewTime;<BR>
0.0<BR>
&gt;&gt;&gt; reader = GetActiveSource(); reader.TimestepValues<BR>
[0.0, 0.10000000000000001, 0.20000000000000001, 0.29999999999999999,<BR>
0.40000000000000002, 0.5, 0.59999999999999998, 0.69999999999999996,<BR>
0.80000000000000004, 0.90000000000000002]<BR>
&gt;&gt;&gt; view.ViewTime = -1.2; Render()<BR>
=&gt; on standard output I can see that RequestData is invoked and the<BR>
first file, file0.foo, is loaded, i.e. clamping provided by<BR>
FileSeriesReader works for FooReader. Same for snapping to files for<BR>
non-existent time step values works:<BR>
&gt;&gt;&gt; view.ViewTime = 0.19; Render()<BR>
=&gt; second file, file1.foo, is loaded.<BR>
<BR>
But I noticed from the standard output that only RequestData is called.<BR>
When using the VCR controls from the GUI to step to the next file,<BR>
ParaView behaves differently: first RequestInformation is called, then<BR>
RequestData, then again RequestInformation. If both RequestInformation<BR>
and RequestData contained a call to MyReadFile, that would be three<BR>
times parsing the same file.<BR>
a) Could someone please elaborate on the need to calling<BR>
RequestInformation twice?<BR>
b) Would I run into trouble (e.g. when using some kind of filter) if I<BR>
kept book of the file read last and skipping RequestInformation if<BR>
this-&gt;FileName hasn't changed since called last time? That would<BR>
eliminate the overhead of the trailing RequestInformation call.<BR>
c) Would I run into trouble if I kept book of all files read initially<BR>
(i.e. after pressing ok in the open file dialog) and completely skipped<BR>
later calls of RequestInformation, e.g. via<BR>
<BR>
int vtkFooReader::RequestInformation(vtkInformation *request,<BR>
vtkInformationVector **inputVector, vtkInformationVector *outputVector)<BR>
{<BR>
&nbsp;&nbsp;if (this-&gt;FileNames-&gt;LookupValue(this-&gt;FileName) &lt; 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;...<BR>
&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;FileNames-&gt;InsertNextValue(this-&gt;FileName);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;...<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;return 1;<BR>
}<BR>
<BR>
I tried b) and c) and applying a couple of filters I did not notice any<BR>
unwanted side effects. I couldn't test all of them, so did I miss a<BR>
combination where skipping RequestInformation before and after calling<BR>
RequestData - but still having run RequestInformation once for all files<BR>
initially - does make a difference?<BR>
<BR>
Thank you very much in advance.<BR>
<BR>
Karl<BR>
<BR>
<BR>
<BR>
<BR>
----- Original Message -----<BR>
From: &quot;Moreland, Kenneth&quot; &lt;<a href="kmorel@sandia.gov">kmorel@sandia.gov</a>&gt;<BR>
To: Karl K&ouml;nig &lt;<a href="kkoenig11@web.de">kkoenig11@web.de</a>&gt;<BR>
CC: &quot;<a href="paraview@paraview.org">paraview@paraview.org</a>&quot; &lt;<a href="paraview@paraview.org">paraview@paraview.org</a>&gt;<BR>
Sent: Sonntag, 6. September 2009 18:20:26<BR>
Subject: [Paraview] Problem with custom time-aware reader<BR>
&gt; OOPS! &nbsp;STOP! &nbsp;BACK UP! &nbsp;I looked at your code too quickly, misunderstood<BR>
&gt; what you were doing, and gave totally the wrong advise. &nbsp;Please ignore<BR>
&gt; everything I said before.<BR>
&gt;<BR>
&gt; If you are using the file series reader, then your reader should be<BR>
&gt; completely ignorant of any file series. &nbsp;It should read in only the file<BR>
&gt; it is given, and if that file changes then it should ignore whatever<BR>
&gt; file it was previously given. &nbsp;Therefore, the problem with your reader<BR>
&gt; is that it is trying to collect time information over all the files.<BR>
&gt; &nbsp;That is the job of the file series reader and as a result it is fouling<BR>
&gt; up the operation of the file series reader.<BR>
&gt;<BR>
&gt; So, what your reader should do is read in the time value in the file it<BR>
&gt; is given, set the TIME_STEPS key to ONLY that time value and set the<BR>
&gt; TIME_RANGE to be only that range. &nbsp;Attached is a modified version of<BR>
&gt; your reader example that has all that time series management stripped<BR>
&gt; out. &nbsp;The resulting code is much smaller and actually works.<BR>
&gt;<BR>
&gt; Specifically what was happening was that by the time RequestInformation<BR>
&gt; was called on the last time step, your reader had collected information<BR>
&gt; about all the time steps and returned all the time steps in all the<BR>
&gt; files. &nbsp;The file series reader thought you meant that the last file<BR>
&gt; contained all those time steps (some file formats do contain multiple<BR>
&gt; time steps in a single file). &nbsp;Because your reader said that the last<BR>
&gt; file contained all the time steps, the file series reader was using that<BR>
&gt; last file for all the time steps.<BR>
&gt;<BR>
&gt; -Ken<BR>
&gt;<BR>
&gt;<BR>
&gt; On 9/3/09 11:24 PM, &quot;Karl K&ouml;nig&quot; &lt;<a href="kkoenig11@web.de">kkoenig11@web.de</a>&gt; wrote:<BR>
&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;Hi Ken,<BR>
&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;Thanks again for your input.<BR>
&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; You have the basic idea. &nbsp;The seg fault is probably happening because<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; the destructor of you class is trying to free the pointer you set<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;to it,<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; which is probably actually pointing to some spot on the stack.<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; You are probably not seeing this mapping/lookup in the VTK IO classes<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; because you are looking at classes that do not directly support time<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; (such as the legacy readers and XML readers). &nbsp;Those readers read<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; exactly one file with one time step in it. &nbsp;ParaView has a magic meta<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; reader called a FileSeriesReader that takes a real reader and a<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; collection of files and multiplexes the files to the reader based<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;on the<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; time.<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; In retrospect, this is probably an easier way to go (assuming your<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;final<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; reader is a file series like this). &nbsp;Documentation on using the<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; FileSeriesReader is on the Wiki at<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&gt; &nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.paraview.org/Wiki/Restarted_Simulation_Readers#Customized_Restart_Reader">http://www.paraview.org/Wiki/Restarted_Simulation_Readers#Customized_Restart_Reader</a><BR>
&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;I've been aware of that page. In fact, FooReader.xml and<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;FooReaderGUI.xml of the tarball I posted already did make use of the<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;FileSeriesReader. Together with calling<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outInfo-&gt;Set(vtkStreamingDemandDrivenPipeline::TIME_STEPS(), ...)<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outInfo-&gt;Set(vtkStreamingDemandDrivenPipeline::TIME_RANGE(), ...)<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;in RequestInformation it is responsible for inspecting all files of the<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;series between selecting them in the file open dialog and appearing of<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;the Apply button.<BR>
&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;Anyway, I'll try to use again the mapping time step value -&gt; file name<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;and iron out the segfault on deletion of the reader object.<BR>
&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;I'll post the solution in case I can work it out and someone is<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;interested.<BR>
&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;Karl<BR>
&gt;<BR>
&gt;<BR>
&gt;<BR>
&gt;<BR>
&gt;<BR>
&gt; &nbsp;&nbsp;&nbsp;**** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kenneth Moreland<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;*** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sandia National Laboratories<BR>
&gt; *********** <BR>
&gt; *** *** *** &nbsp;email: <a href="kmorel@sandia.gov">kmorel@sandia.gov</a><BR>
&gt; ** &nbsp;*** &nbsp;** &nbsp;phone: (505) 844-8919<BR>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;*** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;web: &nbsp;&nbsp;<a href="http://www.cs.unm.edu/~kmorel">http://www.cs.unm.edu/~kmorel</a><BR>
&gt;<BR>
<BR>
<BR>
<BR>
<BR>
</SPAN></FONT></BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
</SPAN></FONT><FONT SIZE="2"><FONT FACE="Consolas, Courier New, Courier"><SPAN STYLE='font-size:10pt'><BR>
&nbsp;&nbsp;&nbsp;**** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kenneth Moreland<BR>
&nbsp;&nbsp;&nbsp;&nbsp;*** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sandia National Laboratories<BR>
*********** &nbsp;<BR>
*** *** *** &nbsp;email: <a href="kmorel@sandia.gov">kmorel@sandia.gov</a><BR>
** &nbsp;*** &nbsp;** &nbsp;phone: (505) 844-8919<BR>
&nbsp;&nbsp;&nbsp;&nbsp;*** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;web: &nbsp;&nbsp;<a href="http://www.cs.unm.edu/~kmorel">http://www.cs.unm.edu/~kmorel</a><BR>
</SPAN></FONT></FONT><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
</SPAN></FONT>
</BODY>
</HTML>