In topic “Is genBSDF applicable to generate BSDF for micro-prism film?”, I asked a question about how to generate BSDF compatible with radiance. Now I have an idea is following the workflow working from goniophotometer data. I want to generate a data set whose format is the same as goniophotometer data and then use pabopto2bsdf, bsdf2klems tools to generate tabulated BSDF. I downloaded a sample of goniophotometer data whose head is shown below:
* * #pgII DSF data read from database by pab Ltd “mountain” #seehttp://bsdf.pab.eu for pgII gonio-photometer and BSDF details #mountain-version “pab mountain V3.2.2” #database-host pgdb #database-name pabpg #measured_at “2018-12-04 12:41:38” #data_read_from_db “2019-01-18 18:57:51” #database_id 11216 #datapoints_in_db 247100 #database_reference_id 11079 #integrated_value 0.4 6.3 #sample_label “LCPED001” #sample_name “solartran” #lamp “halogen” #beamshape “det,f=200,a=1” #filterlamp “IRcutoff” #filterdet “none” #comment “Laser cut panels for Chantal Basurto.|Visible light, halogen, hot-mirror, focus on detector.|Half Klems, front and back.” #mcomment “$Id: do_meas_batch.c,v 1.35 2017/08/30 14:27:44 apian Exp apian $daq serial[1]=“008” (channel minimum)|phirot2 place=1|optfile=BIMSOL_AutoRAutoT_High|userdata=$Header: /usr/local/pab_pg/etc/RCS/userdata.pgII-hslu,v 1.13 2017/03/29 13:03:56 pgadmin Exp pgadmin $|cxtcounter=yes|bl_armB=0|daq_ss=100|speedbend=(0,0)|pawait=150|minspacing=-1|lamp_cycles=76 poweron=63737 [h] last_change=5440 [min]” #dbfilter “” #column daq #dump-host pgII-hslu #incident_angle110 67.5 #intheta110 #inphi67.5 #rear_integral 0.398 #incident_and_rear_integral110 67.5 0.398 #mountain_minimum_angle 0.0014 [deg] #datapoints_in_file240660 #format: theta phi DSF * *
As my understanding, the theta, phi, and data points in bold are used by pabopto2bsdf, and they should be revised case by case, but I am not quite sure whether other information is unused and it will not affect the resulted BSDF.
It should be possible to apply pabopto2bsdf with bsdf2ttree as you surmised. The header variables that are used are indicated in the pabopto2bsdf man page in ray/doc/man/man1/pabopto2bsdf.1 in the distribution. (I can send you a PDF, but I can only attach single-page JPEG’s in discourse.) It doesn’t look at the #datapoints_in_file or #incident_and_rear_integral settings, for instance, but it does care about #format:
Also, there are subtleties about what points you include in the data to succeed. In general, pabopto2bsdf will ingest anything, but it can fail if there aren’t enough measurements in the peak regions.
followed by the data points. As a first test, you can set all of these to a constant value multiplied with the corresponding theta in the first column.
What is really important is to get the meaning of the angles theta and phi right, and to note that the last header line indicates that the third column shall be interpreted as DSF, not BSDF.
@Lars_Grobe@Greg_Ward
Thanks for your response!
I have generated goniophotometer data, but when I use pabopto2bsdf to convert it to sir file, it reported warnings:
pabopto2bsdf: Duplicate incident measurement ignored at (180.0,315.0)
pabopto2bsdf: Duplicate incident measurement ignored at (180.0,202.5)
pabopto2bsdf: Duplicate incident measurement ignored at (180.0,90.0)
Finally, subprocesses were killed, maybe this is because there aren’t enough measurements in the peak regions as Greg pointed out.However I want to kown if these warnings will caused the failure and what will cause these warnings.
The warnings mean that two or more of your input files to pabopto2bsdf had the same #incident_angle specifications. I don’t know about your subprocesses being killed, but if you share your data, I can try running it on my end.
Hi, Greg, I checked my data and found no duplicate incident data. According to the warnings, the repeat theta is 180 degrees, but It was strange that no data corresponding to incident theta of 180 degrees was measured in my dataset.
I shared my data at Google Drive: Sign-in
In addition, I failed to generate sir file fail using pabopto2bsdf. I didn’t know if it was because my data wasn’t correct.
Your google drive link doesn’t let me access the files. I sent a request, but haven’t heard back (unless I missed it in my burgeoning in-box).
The points are probably marked as duplicates because at theta=180°, you are at the pole and any phi will be in the same direction as any other phi. Same issue at theta=0°
OK, this download worked. I didn’t get the “duplicate incident measurement” error, but I can tell from looking at the measurements that the normalization is not as it should be. Are these BSDF measurements, or DSF measurements? The difference is that the latter is BSDF*cos(in_theta), which has closer correspondence to most goniophotometer measurements, but if your system has already converted to BSDF values, then the final line in your header should be:
#format: theta phi BSDF
rather than what you have. Even changing this specification in the header, I get integrated transmission values that are hundreds of times what they should be, indicating that something is amiss with the measurement process or data interpretation.
I don’t know whether this is calling pabopto2bsdf to stall or its interpolation subprocesses to fail, but I finally gave up waiting for it to finish after an hour or two on 4 processors, figuring something was wrong. It was at that point that I looked at a single incident file (btdf80_90.txt) that had an integrated transmission of 732, when the maximum should be 1.0. Changing the “DSF” to “BSDF”, it only went down to 699, so clearly something more is wrong.
Here is a simple python script that might be helpful. You can use it to compute integration from pgII style data with Delaunay triangulation.
To get normal incidence hemispherical transmission, you can run:
If the data is in BSDF instead of DSF, use the -cos flag. You can also change -ha flag to ask for a specific cone angle instead of the entire hemisphere. The script read the header of each file in the directory to find the one with the specified incident angles.