source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_HDF5_Read.ipf @ 1129

Last change on this file since 1129 was 1114, checked in by srkline, 4 years ago

bug fixes for:

RealTime? updating at VSANS
Mask loading at SANS

added highResGain field for VSANS R/W

File size: 64.9 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method and strict wave access.
2
3
4//////////// READ (GET) FUNCTIONS ////////////////////
5
6
7//////////////////////////////////////////////
8//////////////////////////////////
9// for TESTING of the get functions - to quickly access and se if there are errors
10//
11// -- not sure how to test the string functions -- can't seem to get a FUNCREF to a string function
12// to work -- maybe it's not alllowed?
13//
14// -- also, now I have get_functions that take a detStr input with the detector information, so that the
15//    functions didn't need to be repeated
16//
17//      -- Not sure how to test the "write" functions. writing the wrong data type to the wrong data field will be a disaster
18//    Writing odd, dummy values will also be a mess - no way to know if I'm doing anything correctly
19//
20Function proto_V_get_FP(str)
21        String str
22        return(0)
23end
24
25Function proto_V_get_FP2(str,str2)
26        String str,str2
27        return(0)
28end
29
30Function/S proto_V_get_STR(str)
31        String str
32        return("")
33end
34
35Proc Dump_V_getFP(fname)
36        String fname
37       
38        Test_V_get_FP("V_get*",fname)
39end
40
41Function Test_V_get_FP(str,fname)
42        String str,fname
43       
44        Variable ii,num
45        String list,item
46       
47       
48        list=FunctionList(str,";","NPARAMS:1,VALTYPE:1") //,VALTYPE:1 gives real return values, not strings
49//      Print list
50        num = ItemsInlist(list)
51       
52       
53        for(ii=0;ii<num;ii+=1)
54                item = StringFromList(ii, list , ";")
55                FUNCREF proto_V_get_FP f = $item
56                Print item ," = ", f(fname)
57        endfor
58       
59        return(0)
60end
61
62Proc Dump_V_getFP_Det(fname,detStr)
63        String fname,detStr="FL"
64       
65        Test_V_get_FP2("V_get*",fname,detStr)
66end
67
68Function Test_V_get_FP2(str,fname,detStr)
69        String str,fname,detStr
70       
71        Variable ii,num
72        String list,item
73       
74       
75        list=FunctionList(str,";","NPARAMS:2,VALTYPE:1") //,VALTYPE:1 gives real return values, not strings
76//      Print list
77        num = ItemsInlist(list)
78       
79       
80        for(ii=0;ii<num;ii+=1)
81                item = StringFromList(ii, list , ";")
82                FUNCREF proto_V_get_FP2 f = $item
83                Print item ," = ", f(fname,detStr)
84        endfor
85       
86        return(0)
87end
88
89
90Proc Dump_V_getSTR(fname)
91        String fname
92       
93        Test_V_get_STR("V_get*",fname)
94end
95
96Function Test_V_get_STR(str,fname)
97        String str,fname
98       
99        Variable ii,num
100        String list,item,strToEx
101       
102       
103        list=FunctionList(str,";","NPARAMS:1,VALTYPE:4")
104//      Print list
105        num = ItemsInlist(list)
106       
107       
108        for(ii=0;ii<num;ii+=1)
109                item = StringFromList(ii, list , ";")
110        //      FUNCREF proto_V_get_STR f = $item
111                printf "%s = ",item
112                sprintf strToEx,"Print %s(\"%s\")",item,fname
113                Execute strToEx
114//              print strToEx
115//              Print item ," = ", f(fname)
116        endfor
117       
118        return(0)
119end
120
121Proc Dump_V_getSTR_Det(fname,detStr)
122        String fname,detStr="FL"
123       
124        Test_V_get_STR2("V_get*",fname,detStr)
125end
126
127Function Test_V_get_STR2(str,fname,detStr)
128        String str,fname,detStr
129       
130        Variable ii,num
131        String list,item,strToEx
132       
133       
134        list=FunctionList(str,";","NPARAMS:2,VALTYPE:4")
135//      Print list
136        num = ItemsInlist(list)
137       
138       
139        for(ii=0;ii<num;ii+=1)
140                item = StringFromList(ii, list , ";")
141        //      FUNCREF proto_V_get_STR f = $item
142                printf "%s = ",item
143                sprintf strToEx,"Print %s(\"%s\",\"%s\")",item,fname,detStr
144                Execute strToEx
145//              print strToEx
146//              Print item ," = ", f(fname)
147        endfor
148       
149        return(0)
150end
151///////////////////////////////////////
152
153
154//////////////////////////////////////////////
155
156
157///////////////////////
158//
159// *These are the specific bits of information to retrieve (or write) to the data file
160// *These functions use the path to the file as input, and each has the specific
161//   path to the variable srting, or wave hard-coded into the access function
162// *They call the generic worker functions to get the values, either from the local copy if present,
163//   or the full file is loaded.
164//
165// *Since the path is the important bit, these are written as get/write pairs to make it easier to
166//   keep up with any changes in path
167//
168//
169// TODO -- verify the paths, and add more as needed
170// TODO -- for all of the String functions -- "num" does nothing right now -
171//         -- if it ever does, or needs to, a lot of locations will need to be corrected
172//
173
174
175//////// TOP LEVEL
176//////// TOP LEVEL
177//////// TOP LEVEL
178
179//// nexus version used for definitions
180//Function/S V_getNeXus_version(fname)
181//      String fname
182//     
183//      String path = "entry:NeXus_version"     
184//      Variable num=60
185//      return(V_getStringFromHDF5(fname,path,num))
186//End
187
188// TODO -- not mine, added somewhere by Nexus writer?
189// data collection time (! this is the true counting time??)
190Function V_getCollectionTime(fname)
191        String fname
192       
193        String path = "entry:collection_time"   
194        return(V_getRealValueFromHDF5(fname,path))
195End
196
197// data directory where data files are stored (for user access, not archive)
198Function/S V_getData_directory(fname)
199        String fname
200       
201        String path = "entry:data_directory"   
202        Variable num=60
203        return(V_getStringFromHDF5(fname,path,num))
204End
205
206// Base class of Nexus definition (=NXsas)
207Function/S V_getNexusDefinition(fname)
208        String fname
209       
210        String path = "entry:definition"       
211        Variable num=60
212        return(V_getStringFromHDF5(fname,path,num))
213End
214
215// TODO -- not mine, added somewhere by Nexus writer?
216// data collection duration (may include pauses, other "dead" time)
217Function V_getDataDuration(fname)
218        String fname
219       
220        String path = "entry:duration" 
221        return(V_getRealValueFromHDF5(fname,path))
222End
223
224// TODO -- not mine, added somewhere by Nexus writer?
225// data collection end time
226Function/S V_getDataEndTime(fname)
227        String fname
228       
229        String path = "entry:end_time" 
230        Variable num=60
231        return(V_getStringFromHDF5(fname,path,num))
232End
233
234// experiment description
235Function/S V_getExperiment_description(fname)
236        String fname
237       
238        String path = "entry:experiment_description"   
239        Variable num=60
240        return(V_getStringFromHDF5(fname,path,num))
241End
242
243// experiment identifier? used only by NICE?
244Function/S V_getExperiment_identifier(fname)
245        String fname
246       
247        String path = "entry:experiment_identifier"     
248        Variable num=60
249        return(V_getStringFromHDF5(fname,path,num))
250End
251
252// name of facility = NCNR
253Function/S V_getFacility(fname)
254        String fname
255       
256        String path = "entry:facility" 
257        Variable num=60
258        return(V_getStringFromHDF5(fname,path,num))
259End
260
261// **cut in JUNE 2017
262////  x- should be the file name as saved on disk, currently it's not
263//Function/S V_getFile_name(fname)
264//      String fname
265//     
266//      String path = "entry:file_name"
267//      Variable num=60
268//      return(V_getStringFromHDF5(fname,path,num))
269//End
270
271// **cut in JUNE 2017           
272////
273//Function/S V_getHDF_version(fname)
274//      String fname
275//     
276//      String path = "entry:hdf_version"       
277//      Variable num=60
278//      return(V_getStringFromHDF5(fname,path,num))
279//End
280
281// TODO -- not mine, added somewhere by Nexus writer?
282Function/S V_getProgram_name(fname)
283        String fname
284       
285        String path = "entry:program_name"     
286        Variable num=60
287        return(V_getStringFromHDF5(fname,path,num))
288End
289
290// TODO -- not mine, added somewhere by Nexus writer?
291// data collection start time
292Function/S V_getDataStartTime(fname)
293        String fname
294       
295        String path = "entry:start_time"       
296        Variable num=60
297        return(V_getStringFromHDF5(fname,path,num))
298End
299               
300// title of experiment
301Function/S V_getTitle(fname)
302        String fname
303       
304        String path = "entry:title"     
305        Variable num=60
306        return(V_getStringFromHDF5(fname,path,num))
307end
308       
309       
310               
311////////// USER
312////////// USER
313////////// USER
314
315// list of user names
316//  x- currently not written out to data file??
317Function/S V_getUserNames(fname)
318        String fname
319       
320        String path = "entry:user:name"
321        Variable num=60
322        return(V_getStringFromHDF5(fname,path,num))
323end
324
325
326//////// CONTROL
327//////// CONTROL
328//////// CONTROL
329
330// TODO -- for the control section, document each of the fields
331
332// **cut in JUNE 2017
333//Function/S V_getCount_end(fname)
334//      String fname
335//     
336//      Variable num
337//      String path = "entry:control:count_end"
338//      return(V_getStringFromHDF5(fname,path,num))
339//end
340
341// **cut in JUNE 2017
342//
343//Function/S V_getCount_start(fname)
344//      String fname
345//     
346//      Variable num
347//      String path = "entry:control:count_start"       
348//      return(V_getStringFromHDF5(fname,path,num))
349//end
350
351
352Function V_getCount_time(fname)
353        String fname
354       
355        String path = "entry:control:count_time"       
356        return(V_getRealValueFromHDF5(fname,path))
357end
358
359
360Function V_getCount_time_preset(fname)
361        String fname
362       
363        String path = "entry:control:count_time_preset"
364        return(V_getRealValueFromHDF5(fname,path))
365end
366
367
368Function V_getDetector_counts(fname)
369        String fname
370       
371        String path = "entry:control:detector_counts"   
372        return(V_getRealValueFromHDF5(fname,path))
373end
374
375
376Function V_getDetector_preset(fname)
377        String fname
378       
379        String path = "entry:control:detector_preset"   
380        return(V_getRealValueFromHDF5(fname,path))
381end
382
383// **cut in JUNE 2017
384//
385//Function V_getIntegral(fname)
386//      String fname
387//     
388//      String path = "entry:control:integral" 
389//      return(V_getRealValueFromHDF5(fname,path))
390//end
391
392// control mode for data acquisition, "timer"
393// TODO - what are the enumerated types for this?
394Function/S V_getControlMode(fname)
395        String fname
396       
397        String path = "entry:control:mode"     
398        Variable num=60
399        return(V_getStringFromHDF5(fname,path,num))
400End
401
402//monitor count
403// TODO - verify that this is the correct monitor
404Function V_getControlMonitorCount(fname)
405        String fname
406       
407        String path = "entry:control:monitor_counts"   
408        return(V_getRealValueFromHDF5(fname,path))
409end
410
411Function V_getControlMonitor_preset(fname)
412        String fname
413       
414        String path = "entry:control:monitor_preset"   
415        return(V_getRealValueFromHDF5(fname,path))
416end
417
418// **cut in JUNE 2017
419//  - what are the enumerated types for this?
420//Function/S V_getPreset(fname)
421//      String fname
422//     
423//      Variable num
424//      String path = "entry:control:preset"   
425//      return(V_getStringFromHDF5(fname,path,num))
426//end
427
428
429
430
431
432//////// INSTRUMENT
433//////// INSTRUMENT
434//////// INSTRUMENT
435
436// x- this does not appear to be written out
437Function/S V_getLocalContact(fname)
438        String fname
439
440        String path = "entry:instrument:local_contact"
441        Variable num=60
442        return(V_getStringFromHDF5(fname,path,num))
443End
444
445Function/S V_getInstrumentName(fname)
446        String fname
447
448        String path = "entry:instrument:name"
449        Variable num=60
450        return(V_getStringFromHDF5(fname,path,num))
451End
452
453Function/S V_getInstrumentType(fname)
454        String fname
455
456        String path = "entry:instrument:type"
457        Variable num=60
458        return(V_getStringFromHDF5(fname,path,num))
459End
460
461////// INSTRUMENT/ATTENUATOR
462// TODO - be sure of the definition of these terms
463//
464
465// transmission value for the attenuator in the beam
466// use this, but if something wrong, the tables are present
467Function V_getAttenuator_transmission(fname)
468        String fname
469       
470        Print "Atten read - diverted to calculation"
471        return(V_CalculateAttenuationFactor(fname))
472       
473//      String path = "entry:instrument:attenuator:attenuator_transmission"     
474//      return(V_getRealValueFromHDF5(fname,path))
475
476end
477
478// transmission value (error) for the attenuator in the beam
479// use this, but if something wrong, the tables are present
480Function V_getAttenuator_trans_err(fname)
481        String fname
482       
483        Print "Atten_err read - diverted to calculation"
484        return(V_CalculateAttenuationError(fname))
485       
486//      String path = "entry:instrument:attenuator:attenuator_transmission_error"       
487//      return(V_getRealValueFromHDF5(fname,path))
488       
489end
490
491// desired thickness
492Function V_getAtten_desired_thickness(fname)
493        String fname
494       
495        String path = "entry:instrument:attenuator:desired_thickness"   
496        return(V_getRealValueFromHDF5(fname,path))
497end
498
499
500// distance from the attenuator to the sample (units??)
501Function V_getAttenDistance(fname)
502        String fname
503       
504        String path = "entry:instrument:attenuator:distance"   
505        return(V_getRealValueFromHDF5(fname,path))
506end
507
508
509
510// table of the attenuation factor error
511Function/WAVE V_getAttenIndex_error_table(fname)
512        String fname
513       
514        String path = "entry:instrument:attenuator:index_error_table"
515        WAVE w = V_getRealWaveFromHDF5(fname,path)
516       
517        return w
518end
519
520// table of the attenuation factor
521Function/WAVE V_getAttenIndex_table(fname)
522        String fname
523       
524        String path = "entry:instrument:attenuator:index_table"
525        WAVE w = V_getRealWaveFromHDF5(fname,path)
526
527        return w
528end
529
530//
531//// status "in or out"
532//Function/S V_getAttenStatus(fname)
533//      String fname
534//
535//      String path = "entry:instrument:attenuator:status"
536//      Variable num=60
537//      return(V_getStringFromHDF5(fname,path,num))
538//End
539
540//// this is the "number" of attenuators dropped in the beam - and should be
541// what I can use to lookup the actual attenuator transmission
542Function V_getAtten_number(fname)
543        String fname
544       
545        String path = "entry:instrument:attenuator:num_atten_dropped"   
546        return(V_getRealValueFromHDF5(fname,path))
547end
548
549// thickness of the attenuator (PMMA) - units??
550Function V_getAttenThickness(fname)
551        String fname
552       
553        String path = "entry:instrument:attenuator:thickness"   
554        return(V_getRealValueFromHDF5(fname,path))
555end
556
557
558// type of material for the atteunator
559Function/S V_getAttenType(fname)
560        String fname
561
562        String path = "entry:instrument:attenuator:type"
563        Variable num=60
564        return(V_getStringFromHDF5(fname,path,num))
565End
566
567
568////// INSTRUMENT/BEAM
569// instrument/beam/analyzer (data folder)
570// this is the He3 analyzer, after the sample (but first alphabetically)
571// TODO -- document what all of the fields represent, and what are the most important to "key" on to read
572//
573Function V_getAnalyzer_depth(fname)
574        String fname
575       
576        String path = "entry:instrument:beam:analyzer:depth"   
577        return(V_getRealValueFromHDF5(fname,path))
578end
579
580Function/S V_getAnalyzer_direction(fname)
581        String fname
582
583        String path = "entry:instrument:beam:analyzer:direction"
584        Variable num=60
585        return(V_getStringFromHDF5(fname,path,num))
586End
587
588Function V_getAnalyzer_height(fname)
589        String fname
590       
591        String path = "entry:instrument:beam:analyzer:height"   
592        return(V_getRealValueFromHDF5(fname,path))
593end
594
595// ?? TODO is this equivalent to "status" -- ?? 0|1
596Function V_getAnalyzer_inBeam(fname)
597        String fname
598       
599        String path = "entry:instrument:beam:analyzer:inBeam"   
600        return(V_getRealValueFromHDF5(fname,path))
601end
602
603Function V_getAnalyzer_innerDiameter(fname)
604        String fname
605       
606        String path = "entry:instrument:beam:analyzer:innerDiameter"   
607        return(V_getRealValueFromHDF5(fname,path))
608end
609
610// one of the most important
611Function/S V_getAnalyzer_name(fname)
612        String fname
613
614        String path = "entry:instrument:beam:analyzer:name"
615        Variable num=60
616        return(V_getStringFromHDF5(fname,path,num))
617End
618
619Function V_getAnalyzer_opacityAt1Ang(fname)
620        String fname
621       
622        String path = "entry:instrument:beam:analyzer:opacityAt1Ang"   
623        return(V_getRealValueFromHDF5(fname,path))
624end
625
626Function V_getAnalyzer_opacityAt1Ang_err(fname)
627        String fname
628       
629        String path = "entry:instrument:beam:analyzer:opacityAt1AngStd"
630        return(V_getRealValueFromHDF5(fname,path))
631end
632
633Function V_getAnalyzer_outerDiameter(fname)
634        String fname
635       
636        String path = "entry:instrument:beam:analyzer:outerDiameter"   
637        return(V_getRealValueFromHDF5(fname,path))
638end
639
640Function/S V_getAnalyzer_shape(fname)
641        String fname
642
643        String path = "entry:instrument:beam:analyzer:shape"
644        Variable num=60
645        return(V_getStringFromHDF5(fname,path,num))
646End
647
648Function V_getAnalyzer_tE(fname)
649        String fname
650       
651        String path = "entry:instrument:beam:analyzer:tE"       
652        return(V_getRealValueFromHDF5(fname,path))
653end
654
655Function V_getAnalyzer_tE_err(fname)
656        String fname
657       
658        String path = "entry:instrument:beam:analyzer:tEStd"   
659        return(V_getRealValueFromHDF5(fname,path))
660end
661
662Function/S V_getAnalyzer_type(fname)
663        String fname
664
665        String path = "entry:instrument:beam:analyzer:type"
666        Variable num=60
667        return(V_getStringFromHDF5(fname,path,num))
668End
669
670
671Function V_getAnalyzer_width(fname)
672        String fname
673       
674        String path = "entry:instrument:beam:analyzer:width"   
675        return(V_getRealValueFromHDF5(fname,path))
676end
677
678
679// instrument/beam/chopper (data folder)
680Function V_getChopperAngular_opening(fname)
681        String fname
682       
683        String path = "entry:instrument:beam:chopper:angular_opening"   
684        return(V_getRealValueFromHDF5(fname,path))
685end
686
687Function V_getChopDistance_from_sample(fname)
688        String fname
689       
690        String path = "entry:instrument:beam:chopper:distance_from_sample"     
691        return(V_getRealValueFromHDF5(fname,path))
692end
693
694Function V_getChopDistance_from_source(fname)
695        String fname
696       
697        String path = "entry:instrument:beam:chopper:distance_from_source"     
698        return(V_getRealValueFromHDF5(fname,path))
699end
700
701Function V_getChopperDuty_cycle(fname)
702        String fname
703       
704        String path = "entry:instrument:beam:chopper:duty_cycle"       
705        return(V_getRealValueFromHDF5(fname,path))
706end
707
708Function V_getChopperRotation_speed(fname)
709        String fname
710       
711        String path = "entry:instrument:beam:chopper:rotation_speed"   
712        return(V_getRealValueFromHDF5(fname,path))
713end
714
715Function V_getChopperSlits(fname)
716        String fname
717       
718        String path = "entry:instrument:beam:chopper:slits"     
719        return(V_getRealValueFromHDF5(fname,path))
720end
721
722Function/S V_getChopperStatus(fname)
723        String fname
724
725        String path = "entry:instrument:beam:chopper:status"
726        Variable num=60
727        return(V_getStringFromHDF5(fname,path,num))
728End
729
730Function/S V_getChopperType(fname)
731        String fname
732
733        String path = "entry:instrument:beam:chopper:type"
734        Variable num=60
735        return(V_getStringFromHDF5(fname,path,num))
736End
737
738
739// instrument/beam/flipperPolarizer (data folder)
740// this is upstream, after the supermirror but before the sample
741
742Function/S V_getflipperPolarizer_Direction(fname)
743        String fname
744
745        String path = "entry:instrument:beam:flipperPolarizer:direction"
746        Variable num=60
747        return(V_getStringFromHDF5(fname,path,num))
748End
749
750Function V_getflipperPolarizer_inBeam(fname)
751        String fname
752       
753        String path = "entry:instrument:beam:flipperPolarizer:inBeam"   
754        return(V_getRealValueFromHDF5(fname,path))
755end
756
757Function/S V_getflipperPolarizer_Type(fname)
758        String fname
759
760        String path = "entry:instrument:beam:flipperPolarizer:type"
761        Variable num=60
762        return(V_getStringFromHDF5(fname,path,num))
763End
764
765
766
767//Function V_getFlipperDriving_current(fname)
768//      String fname
769//     
770//      String path = "entry:instrument:beam:flipper:driving_current"   
771//      return(V_getRealValueFromHDF5(fname,path))
772//end
773//
774//Function V_getFlipperFrequency(fname)
775//      String fname
776//     
777//      String path = "entry:instrument:beam:flipper:frequency"
778//      return(V_getRealValueFromHDF5(fname,path))
779//end
780//
781//Function/S V_getFlipperstatus(fname)
782//      String fname
783//
784//      String path = "entry:instrument:beam:flipper:status"
785//      Variable num=60
786//      return(V_getStringFromHDF5(fname,path,num))
787//End
788//
789//Function V_getFlipperTransmitted_power(fname)
790//      String fname
791//     
792//      String path = "entry:instrument:beam:flipper:transmitted_power"
793//      return(V_getRealValueFromHDF5(fname,path))
794//end
795//
796//Function/S V_getFlipperWaveform(fname)
797//      String fname
798//
799//      String path = "entry:instrument:beam:flipper:waveform"
800//      Variable num=60
801//      return(V_getStringFromHDF5(fname,path,num))
802//End
803
804
805
806// instrument/beam/monochromator (data folder)
807Function/S V_getMonochromatorType(fname)
808        String fname
809
810        String path = "entry:instrument:beam:monochromator:type"
811        Variable num=60
812        return(V_getStringFromHDF5(fname,path,num))
813End
814
815Function V_getWavelength(fname)
816        String fname
817       
818        String path = "entry:instrument:beam:monochromator:wavelength" 
819        return(V_getRealValueFromHDF5(fname,path))
820end
821
822Function V_getWavelength_spread(fname)
823        String fname
824       
825        String path = "entry:instrument:beam:monochromator:wavelength_spread"   
826        return(V_getRealValueFromHDF5(fname,path))
827end
828
829// instrument/beam/monochromator/crystal (data folder)
830Function V_getCrystalDistance(fname)
831        String fname
832       
833        String path = "entry:instrument:beam:monochromator:crystal:distance"   
834        return(V_getRealValueFromHDF5(fname,path))
835end
836
837Function V_getCrystalEnergy(fname)
838        String fname
839       
840        String path = "entry:instrument:beam:monochromator:crystal:energy"     
841        return(V_getRealValueFromHDF5(fname,path))
842end
843
844Function V_getCrystalHorizontal_aperture(fname)
845        String fname
846       
847        String path = "entry:instrument:beam:monochromator:crystal:horizontal_aperture"
848        return(V_getRealValueFromHDF5(fname,path))
849end
850
851Function V_getCrystalHoriz_curvature(fname)
852        String fname
853       
854        String path = "entry:instrument:beam:monochromator:crystal:horizontal_curvature"       
855        return(V_getRealValueFromHDF5(fname,path))
856end
857
858Function V_getCrystalLattice_parameter(fname)
859        String fname
860       
861        String path = "entry:instrument:beam:monochromator:crystal:lattice_parameter"   
862        return(V_getRealValueFromHDF5(fname,path))
863end
864
865Function V_getCrystalReflection(fname)
866        String fname
867       
868        String path = "entry:instrument:beam:monochromator:crystal:reflection" 
869        return(V_getRealValueFromHDF5(fname,path))
870end
871
872Function V_getCrystalRotation(fname)
873        String fname
874       
875        String path = "entry:instrument:beam:monochromator:crystal:rotation"   
876        return(V_getRealValueFromHDF5(fname,path))
877end
878
879Function/S V_getCrystalStatus(fname)
880        String fname
881
882        String path = "entry:instrument:beam:monochromator:crystal:status"
883        Variable num=60
884        return(V_getStringFromHDF5(fname,path,num))
885End
886
887Function V_getCrystalVertical_aperture(fname)
888        String fname
889       
890        String path = "entry:instrument:beam:monochromator:crystal:vertical_aperture"   
891        return(V_getRealValueFromHDF5(fname,path))
892end
893
894Function V_getCrystalVertical_curvature(fname)
895        String fname
896       
897        String path = "entry:instrument:beam:monochromator:crystal:vertical_curvature" 
898        return(V_getRealValueFromHDF5(fname,path))
899end
900
901Function V_getCrystalWavelength(fname)
902        String fname
903       
904        String path = "entry:instrument:beam:monochromator:crystal:wavelength" 
905        return(V_getRealValueFromHDF5(fname,path))
906end
907
908Function V_getCrystalWavelength_spread(fname)
909        String fname
910       
911        String path = "entry:instrument:beam:monochromator:crystal:wavelength_spread"   
912        return(V_getRealValueFromHDF5(fname,path))
913end
914
915Function V_getCrystalWavevector(fname)
916        String fname
917       
918        String path = "entry:instrument:beam:monochromator:crystal:wavevector" 
919        return(V_getRealValueFromHDF5(fname,path))
920end
921
922// instrument/beam/monochromator/velocity_selector (data folder)
923Function V_getVSDistance(fname)
924        String fname
925       
926        String path = "entry:instrument:beam:monochromator:velocity_selector:distance" 
927        return(V_getRealValueFromHDF5(fname,path))
928end
929
930Function V_getVSRotation_speed(fname)
931        String fname
932       
933        String path = "entry:instrument:beam:monochromator:velocity_selector:rotation_speed"   
934        return(V_getRealValueFromHDF5(fname,path))
935end
936
937Function/S V_getVelSelStatus(fname)
938        String fname
939
940        String path = "entry:instrument:beam:monochromator:velocity_selector:status"
941        Variable num=60
942        return(V_getStringFromHDF5(fname,path,num))
943End
944
945Function/WAVE V_getVSTable_parameters(fname)
946        String fname
947       
948        String path = "entry:instrument:beam:monochromator:velocity_selector:table_parameters" 
949        WAVE w = V_getRealWaveFromHDF5(fname,path)
950
951        return w
952end
953
954//// DONE - this does not exist for VSANS - per JGB 4/2016
955//Function V_getVS_tilt(fname)
956//      String fname
957//     
958//      String path = "entry:instrument:beam:monochromator:velocity_selector:vs_tilt"   
959//      return(V_getRealValueFromHDF5(fname,path))
960//end
961
962Function V_getVSWavelength(fname)
963        String fname
964       
965        String path = "entry:instrument:beam:monochromator:velocity_selector:wavelength"       
966        return(V_getRealValueFromHDF5(fname,path))
967end
968
969Function V_getVSWavelength_spread(fname)
970        String fname
971       
972        String path = "entry:instrument:beam:monochromator:velocity_selector:wavelength_spread"
973        return(V_getRealValueFromHDF5(fname,path))
974end
975
976// instrument/beam/monochromator/white_beam (data folder)
977Function/S V_getWhiteBeamStatus(fname)
978        String fname
979
980        String path = "entry:instrument:beam:monochromator:white_beam:status"
981        Variable num=60
982        return(V_getStringFromHDF5(fname,path,num))
983End
984
985Function V_getWhiteBeamWavelength(fname)
986        String fname
987       
988        String path = "entry:instrument:beam:monochromator:white_beam:wavelength"       
989        return(V_getRealValueFromHDF5(fname,path))
990end
991
992Function V_getWhiteBeamWavelength_spread(fname)
993        String fname
994       
995        String path = "entry:instrument:beam:monochromator:white_beam:wavelength_spread"       
996        return(V_getRealValueFromHDF5(fname,path))
997end
998
999// instrument/beam/superMirror (data folder)
1000// This is the upstream polarizer. There are no other choices for polarizer on VSANS
1001Function/S V_getPolarizerComposition(fname)
1002        String fname
1003
1004        String path = "entry:instrument:beam:superMirror:composition"
1005        Variable num=60
1006        return(V_getStringFromHDF5(fname,path,num))
1007End
1008
1009Function V_getPolarizerEfficiency(fname)
1010        String fname
1011       
1012        String path = "entry:instrument:beam:superMirror:efficiency"   
1013        return(V_getRealValueFromHDF5(fname,path))
1014end
1015
1016Function/S V_getPolarizerState(fname)
1017        String fname
1018
1019        String path = "entry:instrument:beam:superMirror:state"
1020        Variable num=60
1021        return(V_getStringFromHDF5(fname,path,num))
1022End
1023
1024//Function/S V_getPolarizerType(fname)
1025//      String fname
1026//
1027//      String path = "entry:instrument:beam:polarizer:type"
1028//      Variable num=60
1029//      return(V_getStringFromHDF5(fname,path,num))
1030//End
1031
1032//// instrument/beam/polarizer_analyzer (data folder)
1033//Function V_getPolAnaCell_index(fname)
1034//      String fname
1035//
1036//      String path = "entry:instrument:beam:polarizer_analyzer:cell_index"
1037//      return(V_getRealValueFromHDF5(fname,path))
1038//End
1039//
1040//Function/S V_getPolAnaCell_name(fname)
1041//      String fname
1042//
1043//      String path = "entry:instrument:beam:polarizer_analyzer:cell_name"
1044//      Variable num=60
1045//      return(V_getStringFromHDF5(fname,path,num))
1046//End
1047//
1048//Function/WAVE V_getPolAnaCell_parameters(fname)
1049//      String fname
1050//
1051//      String path = "entry:instrument:beam:polarizer_analyzer:cell_parameters"
1052//      WAVE w = V_getRealWaveFromHDF5(fname,path)
1053//
1054//      return w
1055//End
1056//
1057//Function V_getPolAnaGuideFieldCur_1(fname)
1058//      String fname
1059//
1060//      String path = "entry:instrument:beam:polarizer_analyzer:guide_field_current_1"
1061//      return(V_getRealValueFromHDF5(fname,path))
1062//End
1063//
1064//Function V_getPolAnaGuideFieldCur_2(fname)
1065//      String fname
1066//
1067//      String path = "entry:instrument:beam:polarizer_analyzer:guide_field_current_2"
1068//      return(V_getRealValueFromHDF5(fname,path))
1069//End
1070//
1071//Function V_getPolAnaSolenoid_current(fname)
1072//      String fname
1073//
1074//      String path = "entry:instrument:beam:polarizer_analyzer:solenoid_current"
1075//      return(V_getRealValueFromHDF5(fname,path))
1076//End
1077//
1078//Function/S V_getPolAnaStatus(fname)
1079//      String fname
1080//
1081//      String path = "entry:instrument:beam:polarizer_analyzer:status"
1082//      Variable num=60
1083//      return(V_getStringFromHDF5(fname,path,num))
1084//End
1085
1086                                       
1087/////// INSTRUMENT/BEAM MONITORS
1088
1089//beam_monitor_low (data folder)
1090Function V_getBeamMonLowData(fname)
1091        String fname
1092
1093        String path = "entry:instrument:beam_monitor_low:data"
1094        return(V_getRealValueFromHDF5(fname,path))
1095End
1096
1097Function V_getBeamMonLowDistance(fname)
1098        String fname
1099
1100        String path = "entry:instrument:beam_monitor_low:distance"
1101        return(V_getRealValueFromHDF5(fname,path))
1102End
1103
1104Function V_getBeamMonLowEfficiency(fname)
1105        String fname
1106
1107        String path = "entry:instrument:beam_monitor_low:efficiency"
1108        return(V_getRealValueFromHDF5(fname,path))
1109End
1110
1111Function V_getBeamMonLowSaved_count(fname)
1112        String fname
1113
1114        String path = "entry:instrument:beam_monitor_low:saved_count"
1115        return(V_getRealValueFromHDF5(fname,path))
1116End
1117
1118Function/S V_getBeamMonLowType(fname)
1119        String fname
1120
1121        String path = "entry:instrument:beam_monitor_low:type"
1122        Variable num=60
1123        return(V_getStringFromHDF5(fname,path,num))
1124End
1125
1126//beam_monitor_norm (data folder)
1127Function V_getBeamMonNormData(fname)
1128        String fname
1129
1130        String path = "entry:instrument:beam_monitor_norm:data"
1131        return(V_getRealValueFromHDF5(fname,path))
1132End
1133
1134Function V_getBeamMonNormDistance(fname)
1135        String fname
1136
1137        String path = "entry:instrument:beam_monitor_norm:distance"
1138        return(V_getRealValueFromHDF5(fname,path))
1139End
1140
1141Function V_getBeamMonNormEfficiency(fname)
1142        String fname
1143
1144        String path = "entry:instrument:beam_monitor_norm:efficiency"
1145        return(V_getRealValueFromHDF5(fname,path))
1146End
1147
1148Function V_getBeamMonNormSaved_count(fname)
1149        String fname
1150
1151        String path = "entry:instrument:beam_monitor_norm:saved_count"
1152        return(V_getRealValueFromHDF5(fname,path))
1153End
1154
1155Function/S V_getBeamMonNormType(fname)
1156        String fname
1157
1158        String path = "entry:instrument:beam_monitor_norm:type"
1159        Variable num=60
1160        return(V_getStringFromHDF5(fname,path,num))
1161End
1162
1163//beam_stop C2 (data folder)
1164Function/S V_getBeamStopC2Description(fname)
1165        String fname
1166
1167        String path = "entry:instrument:beam_stop_C2:description"
1168        Variable num=60
1169        return(V_getStringFromHDF5(fname,path,num))
1170End
1171
1172Function V_getBeamStopC2Dist_to_det(fname)
1173        String fname
1174
1175        String path = "entry:instrument:beam_stop_C2:distance_to_detector"
1176        return(V_getRealValueFromHDF5(fname,path))
1177End
1178
1179//TODO -- not sure what this really means
1180Function V_getBeamStopC2num_beamstops(fname)
1181        String fname
1182
1183        String path = "entry:instrument:beam_stop_C2:num_beamstops"
1184        return(V_getRealValueFromHDF5(fname,path))
1185End
1186
1187Function V_getBeamStopC2_x_pos(fname)
1188        String fname
1189
1190        String path = "entry:instrument:beam_stop_C2:x_pos"
1191        return(V_getRealValueFromHDF5(fname,path))
1192End
1193
1194Function V_getBeamStopC2_y_pos(fname)
1195        String fname
1196
1197        String path = "entry:instrument:beam_stop_C2:y_pos"
1198        return(V_getRealValueFromHDF5(fname,path))
1199End
1200
1201// beam stop shape parameters
1202Function V_getBeamStopC2_height(fname)
1203        String fname
1204
1205        String path = "entry:instrument:beam_stop_C2:shape:height"
1206        return(V_getRealValueFromHDF5(fname,path))
1207End
1208
1209Function/S V_getBeamStopC2_shape(fname)
1210        String fname
1211
1212        Variable num=60
1213        String path = "entry:instrument:beam_stop_C2:shape:shape"
1214        return(V_getStringFromHDF5(fname,path,num))
1215End
1216
1217// == diameter if shape = CIRCLE
1218// value is expected in [mm] diameter
1219Function V_getBeamStopC2_size(fname)
1220        String fname
1221
1222        String path = "entry:instrument:beam_stop_C2:shape:size"
1223        return(V_getRealValueFromHDF5(fname,path))
1224End
1225
1226Function V_getBeamStopC2_width(fname)
1227        String fname
1228
1229        String path = "entry:instrument:beam_stop_C2:shape:width"
1230        return(V_getRealValueFromHDF5(fname,path))
1231End
1232
1233
1234
1235//beam_stop C3 (data folder)
1236Function/S V_getBeamStopC3Description(fname)
1237        String fname
1238
1239        String path = "entry:instrument:beam_stop_C3:description"
1240        Variable num=60
1241        return(V_getStringFromHDF5(fname,path,num))
1242End
1243
1244Function V_getBeamStopC3Dist_to_det(fname)
1245        String fname
1246
1247        String path = "entry:instrument:beam_stop_C3:distance_to_detector"
1248        return(V_getRealValueFromHDF5(fname,path))
1249End
1250
1251//TODO -- not sure what this really means
1252Function V_getBeamStopC3num_beamstops(fname)
1253        String fname
1254
1255        String path = "entry:instrument:beam_stop_C3:num_beamstops"
1256        return(V_getRealValueFromHDF5(fname,path))
1257End
1258
1259Function V_getBeamStopC3_x_pos(fname)
1260        String fname
1261
1262        String path = "entry:instrument:beam_stop_C3:x_pos"
1263        return(V_getRealValueFromHDF5(fname,path))
1264End
1265
1266Function V_getBeamStopC3_y_pos(fname)
1267        String fname
1268
1269        String path = "entry:instrument:beam_stop_C3:y_pos"
1270        return(V_getRealValueFromHDF5(fname,path))
1271End
1272
1273// beam stop shape parameters
1274Function V_getBeamStopC3_height(fname)
1275        String fname
1276
1277        String path = "entry:instrument:beam_stop_C3:shape:height"
1278        return(V_getRealValueFromHDF5(fname,path))
1279End
1280
1281Function/S V_getBeamStopC3_shape(fname)
1282        String fname
1283
1284        Variable num=60
1285        String path = "entry:instrument:beam_stop_C3:shape:shape"
1286        return(V_getStringFromHDF5(fname,path,num))
1287End
1288
1289// == diameter if shape = CIRCLE
1290Function V_getBeamStopC3_size(fname)
1291        String fname
1292
1293        String path = "entry:instrument:beam_stop_C3:shape:size"
1294        return(V_getRealValueFromHDF5(fname,path))
1295End
1296
1297Function V_getBeamStopC3_width(fname)
1298        String fname
1299
1300        String path = "entry:instrument:beam_stop_C3:shape:width"
1301        return(V_getRealValueFromHDF5(fname,path))
1302End
1303
1304
1305
1306
1307//// INSTRUMENT/COLLIMATOR
1308//collimator (data folder)
1309
1310// this is now defined as text, due to selections from GUI
1311Function/S V_getNumberOfGuides(fname)
1312        String fname
1313
1314        Variable num=60
1315        String path = "entry:instrument:collimator:number_guides"
1316        return(V_getStringFromHDF5(fname,path,num))
1317End
1318
1319//                              geometry (data folder)
1320//                                      shape (data folder)
1321Function/S V_getGuideShape(fname)
1322        String fname
1323
1324        String path = "entry:instrument:collimator:geometry:shape:shape"
1325        Variable num=60
1326        return(V_getStringFromHDF5(fname,path,num))
1327End
1328
1329Function V_getGuideSize(fname)
1330        String fname
1331
1332        String path = "entry:instrument:collimator:geometry:shape:size"
1333        return(V_getRealValueFromHDF5(fname,path))
1334End
1335
1336
1337//                      converging_pinholes (data folder)
1338Function/S V_getConvPinholeStatus(fname)
1339        String fname
1340
1341        String path = "entry:instrument:converging_pinholes:status"
1342        Variable num=60
1343        return(V_getStringFromHDF5(fname,path,num))
1344End
1345
1346//                      converging_slits (not used)
1347
1348////// INSTRUMENT/DETECTORS
1349//                      detector_B (data folder)
1350//
1351// only defined for the "B" detector, and may not be necessary?
1352// DONE -- write to return an ARRAY
1353Function/WAVE V_getDet_cal_x(fname,detStr)
1354        String fname,detStr
1355
1356        if(cmpstr(detStr,"B") == 0)
1357                String path = "entry:instrument:detector_"+detStr+":cal_x"
1358                WAVE w = V_getRealWaveFromHDF5(fname,path)
1359
1360                return w
1361        else
1362                return $""
1363        endif
1364End
1365
1366// only defined for the "B" detector, and may not be necessary?
1367// TODO -- write to return an ARRAY
1368Function/WAVE V_getDet_cal_y(fname,detStr)
1369        String fname,detStr
1370
1371        if(cmpstr(detStr,"B") == 0)
1372                String path = "entry:instrument:detector_"+detStr+":cal_y"
1373                WAVE w = V_getRealWaveFromHDF5(fname,path)
1374       
1375                return w
1376        else
1377                return $""
1378        endif
1379End
1380
1381//  Pixels are not square
1382// so the FHWM will be different in each direction. May need to return
1383// "dummy" value for "B" detector if pixels there are square
1384Function V_getDet_pixel_fwhm_x(fname,detStr)
1385        String fname,detStr
1386
1387        String path = "entry:instrument:detector_"+detStr+":pixel_fwhm_x"
1388
1389        return(V_getRealValueFromHDF5(fname,path))
1390End
1391
1392// Pixels are not square
1393// so the FHWM will be different in each direction. May need to return
1394// "dummy" value for "B" detector if pixels there are square
1395Function V_getDet_pixel_fwhm_y(fname,detStr)
1396        String fname,detStr
1397
1398        String path = "entry:instrument:detector_"+detStr+":pixel_fwhm_y"
1399
1400        return(V_getRealValueFromHDF5(fname,path))
1401End
1402
1403Function V_getDet_pixel_num_x(fname,detStr)
1404        String fname,detStr
1405
1406        String path = "entry:instrument:detector_"+detStr+":pixel_num_x"
1407        return(V_getRealValueFromHDF5(fname,path))
1408End
1409
1410Function V_getDet_pixel_num_y(fname,detStr)
1411        String fname,detStr
1412
1413        String path = "entry:instrument:detector_"+detStr+":pixel_num_y"
1414        return(V_getRealValueFromHDF5(fname,path))
1415End
1416
1417//// only defined for the "B" detector, and only to satisfy NXsas
1418//Function V_getDet_azimuthalAngle(fname,detStr)
1419//      String fname,detStr
1420//
1421//      if(cmpstr(detStr,"B") == 0)
1422//              String path = "entry:instrument:detector_"+detStr+":azimuthal_angle"
1423//              return(V_getRealValueFromHDF5(fname,path))
1424//      else
1425//              return(0)
1426//      endif
1427//End
1428
1429Function V_getDet_beam_center_x(fname,detStr)
1430        String fname,detStr
1431
1432        String path = "entry:instrument:detector_"+detStr+":beam_center_x"
1433        return(V_getRealValueFromHDF5(fname,path))
1434End
1435
1436Function V_getDet_beam_center_y(fname,detStr)
1437        String fname,detStr
1438
1439        String path = "entry:instrument:detector_"+detStr+":beam_center_y"
1440        return(V_getRealValueFromHDF5(fname,path))
1441End
1442
1443
1444//TODO
1445//
1446// x and y center in mm is currently not part of the Nexus definition
1447//  does it need to be?
1448// these lookups will fail if they have not been generated locally!
1449Function V_getDet_beam_center_x_mm(fname,detStr)
1450        String fname,detStr
1451
1452        String path = "entry:instrument:detector_"+detStr+":beam_center_x_mm"
1453        return(V_getRealValueFromHDF5(fname,path))
1454End
1455
1456//TODO
1457//
1458// x and y center in mm is currently not part of the Nexus definition
1459//  does it need to be?
1460// these lookups will fail if they have not been generated locally!
1461Function V_getDet_beam_center_y_mm(fname,detStr)
1462        String fname,detStr
1463
1464        String path = "entry:instrument:detector_"+detStr+":beam_center_y_mm"
1465        return(V_getRealValueFromHDF5(fname,path))
1466End
1467
1468//TODO
1469//
1470// x and y center in pix is currently not part of the Nexus definition
1471//  does it need to be?
1472// these lookups will fail if they have not been generated locally!
1473Function V_getDet_beam_center_x_pix(fname,detStr)
1474        String fname,detStr
1475
1476        String path = "entry:instrument:detector_"+detStr+":beam_center_x_pix"
1477        return(V_getRealValueFromHDF5(fname,path))
1478End
1479
1480//TODO
1481//
1482// x and y center in pix is currently not part of the Nexus definition
1483//  does it need to be?
1484// these lookups will fail if they have not been generated locally!
1485Function V_getDet_beam_center_y_pix(fname,detStr)
1486        String fname,detStr
1487
1488        String path = "entry:instrument:detector_"+detStr+":beam_center_y_pix"
1489        return(V_getRealValueFromHDF5(fname,path))
1490End
1491
1492Function/WAVE V_getDetectorDataW(fname,detStr)
1493        String fname,detStr
1494
1495        String path = "entry:instrument:detector_"+detStr+":data"
1496        WAVE w = V_getRealWaveFromHDF5(fname,path)
1497
1498        return w
1499End
1500
1501// NOTE - this is not part of the file as written
1502// it is generated when the RAW data is loaded (when the error wave is generated)
1503Function/WAVE V_getDetectorLinearDataW(fname,detStr)
1504        String fname,detStr
1505
1506        String path = "entry:instrument:detector_"+detStr+":linear_data"
1507        WAVE w = V_getRealWaveFromHDF5(fname,path)
1508
1509        return w
1510End
1511
1512//
1513// TODO -- this does not exist in the raw data, but does in the processed data
1514// !!! how to handle this?? Binning routines need the error wave
1515//
1516Function/WAVE V_getDetectorLinearDataErrW(fname,detStr)
1517        String fname,detStr
1518
1519        String path = "entry:instrument:detector_"+detStr+":linear_data_error"
1520        WAVE w = V_getRealWaveFromHDF5(fname,path)
1521
1522        return w
1523End
1524
1525
1526//
1527// TODO -- this does not exist in the raw data, but does in the processed data
1528// !!! how to handle this?? Binning routines need the error wave
1529//
1530Function/WAVE V_getDetectorDataErrW(fname,detStr)
1531        String fname,detStr
1532
1533        String path = "entry:instrument:detector_"+detStr+":data_error"
1534        WAVE w = V_getRealWaveFromHDF5(fname,path)
1535
1536        return w
1537End
1538
1539// TODO -- write this function to return a WAVE with the data
1540// either as a wave reference, or as an input parameter
1541// ALSO -- the "B" deadtime will be a single value (probably)
1542//  but the tube banks will be 1D arrays of values, one per tube
1543Function/WAVE V_getDetector_deadtime(fname,detStr)
1544        String fname,detStr
1545
1546        String path = "entry:instrument:detector_"+detStr+":dead_time"
1547        if(cmpstr(detStr,"B") == 0)
1548                return $""
1549        else   
1550                WAVE w = V_getRealWaveFromHDF5(fname,path)
1551                return w
1552        endif
1553End
1554
1555// for "B" only
1556Function V_getDetector_deadtime_B(fname,detStr)
1557        String fname,detStr
1558
1559        String path = "entry:instrument:detector_"+detStr+":dead_time"
1560        if(cmpstr(detStr,"B") == 0)
1561                return(V_getRealValueFromHDF5(fname,path))
1562        else   
1563                return(0)
1564        endif
1565End
1566
1567// for "B" only
1568Function V_getDetector_highResGain(fname,detStr)
1569        String fname,detStr
1570
1571        String path = "entry:instrument:detector_"+detStr+":highResGain"
1572        if(cmpstr(detStr,"B") == 0)
1573                return(V_getRealValueFromHDF5(fname,path))
1574        else   
1575                return(0)
1576        endif
1577End
1578
1579Function/S V_getDetDescription(fname,detStr)
1580        String fname,detStr
1581
1582        String path = "entry:instrument:detector_"+detStr+":description"
1583        Variable num=60
1584        return(V_getStringFromHDF5(fname,path,num))
1585End
1586
1587// return value in [cm]
1588Function V_getDet_NominalDistance(fname,detStr)
1589        String fname,detStr
1590
1591        String path = "entry:instrument:detector_"+detStr+":distance"
1592        return(V_getRealValueFromHDF5(fname,path))
1593End
1594
1595//this is a DERIVED distance, since the nominal sdd is for the carriage (=LR panels)
1596// return value in [cm]
1597Function V_getDet_ActualDistance(fname,detStr)
1598        String fname,detStr
1599
1600        Variable sdd
1601        sdd = V_getDet_NominalDistance(fname,detStr)            //[cm]
1602        sdd += V_getDet_TBSetback(fname,detStr)         // written [cm], returns 0 for L/R/B panels
1603               
1604        return(sdd)
1605End
1606
1607//// only defined for the "B" detector, and only to satisfy NXsas
1608//Function V_getDet_equatorial_angle(fname,detStr)
1609//      String fname,detStr
1610//
1611//      if(cmpstr(detStr,"B") == 0)
1612//              String path = "entry:instrument:detector_"+detStr+":equatorial_angle"
1613//              return(V_getRealValueFromHDF5(fname,path))
1614//      else
1615//              return(0)
1616//      endif
1617//End
1618
1619Function/S V_getDetEventFileName(fname,detStr)
1620        String fname,detStr
1621
1622        String path = "entry:instrument:detector_"+detStr+":event_file_name"
1623        Variable num=60
1624        return(V_getStringFromHDF5(fname,path,num))
1625End
1626
1627Function V_getDet_IntegratedCount(fname,detStr)
1628        String fname,detStr
1629
1630        String path = "entry:instrument:detector_"+detStr+":integrated_count"
1631        return(V_getRealValueFromHDF5(fname,path))
1632End
1633
1634// only return value for B and L/R detectors. everything else returns zero
1635Function V_getDet_LateralOffset(fname,detStr)
1636        String fname,detStr
1637
1638        if(cmpstr(detStr,"FT") == 0 || cmpstr(detStr,"FB") == 0)
1639                return(0)
1640        endif
1641        if(cmpstr(detStr,"MT") == 0 || cmpstr(detStr,"MB") == 0)
1642                return(0)
1643        endif   
1644       
1645        String path = "entry:instrument:detector_"+detStr+":lateral_offset"
1646        return(V_getRealValueFromHDF5(fname,path))
1647End
1648
1649// only return values for T/B. everything else returns zero
1650Function V_getDet_VerticalOffset(fname,detStr)
1651        String fname,detStr
1652
1653        if(cmpstr(detStr,"B") == 0)
1654                return(0)
1655        endif
1656        if(cmpstr(detStr,"FR") == 0 || cmpstr(detStr,"FL") == 0)
1657                return(0)
1658        endif
1659        if(cmpstr(detStr,"MR") == 0 || cmpstr(detStr,"ML") == 0)
1660                return(0)
1661        endif   
1662       
1663        String path = "entry:instrument:detector_"+detStr+":vertical_offset"
1664        return(V_getRealValueFromHDF5(fname,path))
1665End
1666
1667// TODO -DONE be sure this is defined correctly (with correct units-- this is now 41.0 cm)
1668// -- only returns for T/B detectors
1669Function V_getDet_TBSetback(fname,detStr)
1670        String fname,detStr
1671
1672        if(cmpstr(detStr,"B") == 0)
1673                return(0)
1674        endif
1675        if(cmpstr(detStr,"FR") == 0 || cmpstr(detStr,"FL") == 0)
1676                return(0)
1677        endif
1678        if(cmpstr(detStr,"MR") == 0 || cmpstr(detStr,"ML") == 0)
1679                return(0)
1680        endif   
1681       
1682        String path = "entry:instrument:detector_"+detStr+":setback"
1683        return(V_getRealValueFromHDF5(fname,path))
1684       
1685       
1686End
1687
1688// gap when panels are "touching"
1689// units are mm
1690// returns gap value for RIGHT and LEFT (they are the same)
1691// returns gap value for TOP and BOTTOM (they are the same)
1692// returns 0 for BACK, (no such field for this detector)
1693//
1694Function V_getDet_panel_gap(fname,detStr)
1695        String fname,detStr
1696
1697        if(cmpstr(detStr,"B") == 0)
1698                return(0)
1699        endif
1700//      if(cmpstr(detStr,"FB") == 0 || cmpstr(detStr,"FL") == 0)
1701//              return(0)
1702//      endif
1703//      if(cmpstr(detStr,"MB") == 0 || cmpstr(detStr,"ML") == 0)
1704//              return(0)
1705//      endif   
1706       
1707        String path = "entry:instrument:detector_"+detStr+":panel_gap"
1708        return(V_getRealValueFromHDF5(fname,path))
1709       
1710       
1711End
1712
1713Function/S V_getDetSettings(fname,detStr)
1714        String fname,detStr
1715
1716        String path = "entry:instrument:detector_"+detStr+":settings"
1717        Variable num=60
1718        return(V_getStringFromHDF5(fname,path,num))
1719End
1720
1721
1722Function V_getDet_x_pixel_size(fname,detStr)
1723        String fname,detStr
1724
1725        String path = "entry:instrument:detector_"+detStr+":x_pixel_size"
1726        return(V_getRealValueFromHDF5(fname,path))
1727End
1728
1729Function V_getDet_y_pixel_size(fname,detStr)
1730        String fname,detStr
1731
1732        String path = "entry:instrument:detector_"+detStr+":y_pixel_size"
1733        return(V_getRealValueFromHDF5(fname,path))
1734End
1735
1736/////////                       detector_FB (data folder) + ALL other PANEL DETECTORS
1737
1738Function V_getDet_numberOfTubes(fname,detStr)
1739        String fname,detStr
1740
1741        String path = "entry:instrument:detector_"+detStr+":number_of_tubes"
1742        if(cmpstr(detStr,"B") == 0)
1743                return(0)
1744        else
1745                return(V_getRealValueFromHDF5(fname,path))
1746        endif
1747End
1748
1749
1750// DONE -- write this function to return a WAVE with the data
1751// either as a wave reference, or as an input parameter
1752Function/WAVE V_getDetTube_spatialCalib(fname,detStr)
1753        String fname,detStr
1754
1755        String path = "entry:instrument:detector_"+detStr+":spatial_calibration"
1756        if(cmpstr(detStr,"B") == 0)
1757                return $("")    // return should be null
1758        else
1759                WAVE w = V_getRealWaveFromHDF5(fname,path)
1760                return w
1761        endif
1762End
1763
1764
1765Function/S V_getDet_tubeOrientation(fname,detStr)
1766        String fname,detStr
1767
1768        String path = "entry:instrument:detector_"+detStr+":tube_orientation"
1769        Variable num=60
1770        if(cmpstr(detStr,"B") == 0)
1771                return("")
1772        else
1773                return(V_getStringFromHDF5(fname,path,num))
1774        endif
1775End
1776
1777// TODO -- be clear on how this is defined. Units?
1778Function V_getDet_tubeWidth(fname,detStr)
1779        String fname,detStr
1780
1781        String path = "entry:instrument:detector_"+detStr+":tube_width"
1782        if(cmpstr(detStr,"B") == 0)
1783                return(0)
1784        else
1785                return(V_getRealValueFromHDF5(fname,path))
1786        endif
1787End
1788
1789//////////////////////
1790
1791// INSTRUMENT/LENSES
1792//  lenses (data folder)
1793
1794Function V_getLensCurvature(fname)
1795        String fname
1796
1797        String path = "entry:instrument:lenses:curvature"
1798        return(V_getRealValueFromHDF5(fname,path))
1799End
1800
1801Function/S V_getLensesFocusType(fname)
1802        String fname
1803
1804        String path = "entry:instrument:lenses:focus_type"
1805        Variable num=60
1806        return(V_getStringFromHDF5(fname,path,num))
1807End
1808
1809Function V_getLensDistance(fname)
1810        String fname
1811
1812        String path = "entry:instrument:lenses:lens_distance"
1813        return(V_getRealValueFromHDF5(fname,path))
1814End
1815
1816Function/S V_getLensGeometry(fname)
1817        String fname
1818
1819        String path = "entry:instrument:lenses:lens_geometry"
1820        Variable num=60
1821        return(V_getStringFromHDF5(fname,path,num))
1822End
1823
1824Function/S V_getLensMaterial(fname)
1825        String fname
1826
1827        String path = "entry:instrument:lenses:lens_material"
1828        Variable num=60
1829        return(V_getStringFromHDF5(fname,path,num))
1830End
1831
1832Function V_getNumber_of_Lenses(fname)
1833        String fname
1834
1835        String path = "entry:instrument:lenses:number_of_lenses"
1836        return(V_getRealValueFromHDF5(fname,path))
1837End
1838
1839Function V_getNumber_of_prisms(fname)
1840        String fname
1841
1842        String path = "entry:instrument:lenses:number_of_prisms"
1843        return(V_getRealValueFromHDF5(fname,path))
1844End
1845
1846Function V_getPrism_distance(fname)
1847        String fname
1848
1849        String path = "entry:instrument:lenses:prism_distance"
1850        return(V_getRealValueFromHDF5(fname,path))
1851End
1852
1853Function/S V_getPrismMaterial(fname)
1854        String fname
1855
1856        String path = "entry:instrument:lenses:prism_material"
1857        Variable num=60
1858        return(V_getStringFromHDF5(fname,path,num))
1859End
1860
1861// status of lens/prism = lens | prism | both | out
1862Function/S V_getLensPrismStatus(fname)
1863        String fname
1864
1865        String path = "entry:instrument:lenses:status"
1866        Variable num=60
1867        return(V_getStringFromHDF5(fname,path,num))
1868End
1869       
1870
1871
1872
1873///////  sample_aperture (1) (data folder)
1874// this is the INTERNAL sample aperture
1875//
1876Function/S V_getSampleAp_Description(fname)
1877        String fname
1878
1879        String path = "entry:instrument:sample_aperture:description"
1880        Variable num=60
1881        return(V_getStringFromHDF5(fname,path,num))
1882End
1883
1884Function V_getSampleAp_distance(fname)
1885        String fname
1886
1887        String path = "entry:instrument:sample_aperture:distance"
1888        return(V_getRealValueFromHDF5(fname,path))
1889End
1890
1891//      shape (data folder)
1892Function V_getSampleAp_height(fname)
1893        String fname
1894
1895        String path = "entry:instrument:sample_aperture:shape:height"
1896        return(V_getRealValueFromHDF5(fname,path))
1897End
1898
1899Function/S V_getSampleAp_shape(fname)
1900        String fname
1901
1902        String path = "entry:instrument:sample_aperture:shape:shape"
1903        Variable num=60
1904        return(V_getStringFromHDF5(fname,path,num))
1905End
1906
1907// this returns TEXT, due to GUI input, == to diameter if CIRCLE
1908Function/S V_getSampleAp_size(fname)
1909        String fname
1910
1911        String path = "entry:instrument:sample_aperture:shape:size"
1912        Variable num=60
1913        return(V_getStringFromHDF5(fname,path,num))
1914End
1915
1916Function V_getSampleAp_width(fname)
1917        String fname
1918
1919        String path = "entry:instrument:sample_aperture:shape:width"
1920        return(V_getRealValueFromHDF5(fname,path))
1921End
1922
1923
1924
1925///////  sample_aperture_2 (data folder)
1926// sample aperture (2) is the external aperture, which may or may not be present
1927
1928Function/S V_getSampleAp2_Description(fname)
1929        String fname
1930
1931        String path = "entry:instrument:sample_aperture_2:description"
1932        Variable num=60
1933        return(V_getStringFromHDF5(fname,path,num))
1934End
1935
1936Function V_getSampleAp2_distance(fname)
1937        String fname
1938
1939        String path = "entry:instrument:sample_aperture_2:distance"
1940        return(V_getRealValueFromHDF5(fname,path))
1941End
1942
1943//      shape (data folder)
1944// height and width are reported in [cm]
1945Function V_getSampleAp2_height(fname)
1946        String fname
1947
1948        String path = "entry:instrument:sample_aperture_2:shape:height"
1949        return(V_getRealValueFromHDF5(fname,path))
1950End
1951
1952Function/S V_getSampleAp2_shape(fname)
1953        String fname
1954
1955        String path = "entry:instrument:sample_aperture_2:shape:shape"
1956        Variable num=60
1957        return(V_getStringFromHDF5(fname,path,num))
1958End
1959
1960// this returns REAL, DIFFERENT than SampleAp1
1961Function V_getSampleAp2_size(fname)
1962        String fname
1963
1964        String path = "entry:instrument:sample_aperture_2:shape:size"
1965        return(V_getRealValueFromHDF5(fname,path))
1966End
1967
1968Function V_getSampleAp2_width(fname)
1969        String fname
1970
1971        String path = "entry:instrument:sample_aperture_2:shape:width"
1972        return(V_getRealValueFromHDF5(fname,path))
1973End
1974
1975       
1976//////  sample_table (data folder)
1977// location  = "CHAMBER" or HUBER
1978Function/S V_getSampleTableLocation(fname)
1979        String fname
1980
1981        String path = "entry:instrument:sample_table:location"
1982        Variable num=60
1983        return(V_getStringFromHDF5(fname,path,num))
1984End
1985
1986// TODO - verify the meaning
1987//      offset_distance (?? for center of sample table vs. sample position)
1988Function V_getSampleTableOffset(fname)
1989        String fname
1990
1991        String path = "entry:instrument:sample_table:offset_distance"
1992        return(V_getRealValueFromHDF5(fname,path))
1993End     
1994       
1995//  source (data folder)
1996//name "NCNR"
1997Function/S V_getSourceName(fname)
1998        String fname
1999
2000        String path = "entry:instrument:source:name"
2001        Variable num=60
2002        return(V_getStringFromHDF5(fname,path,num))
2003End
2004
2005//      power -- nominal only, not connected to any real number
2006Function V_getReactorPower(fname)
2007        String fname
2008
2009        String path = "entry:instrument:source:power"
2010        return(V_getRealValueFromHDF5(fname,path))
2011End     
2012
2013//probe (wave) "neutron"
2014Function/S V_getSourceProbe(fname)
2015        String fname
2016
2017        String path = "entry:instrument:source:probe"
2018        Variable num=60
2019        return(V_getStringFromHDF5(fname,path,num))
2020End
2021
2022//type (wave) "Reactor Neutron Source"
2023Function/S V_getSourceType(fname)
2024        String fname
2025
2026        String path = "entry:instrument:source:type"
2027        Variable num=60
2028        return(V_getStringFromHDF5(fname,path,num))
2029End
2030
2031       
2032///////  source_aperture (data folder)
2033
2034Function/S V_getSourceAp_Description(fname)
2035        String fname
2036
2037        String path = "entry:instrument:source_aperture:description"
2038        Variable num=60
2039        return(V_getStringFromHDF5(fname,path,num))
2040End
2041
2042Function V_getSourceAp_distance(fname)
2043        String fname
2044
2045        String path = "entry:instrument:source_aperture:distance"
2046        return(V_getRealValueFromHDF5(fname,path))
2047End
2048
2049//      shape (data folder)
2050Function V_getSourceAp_height(fname)
2051        String fname
2052
2053        String path = "entry:instrument:source_aperture:shape:height"
2054        return(V_getRealValueFromHDF5(fname,path))
2055End
2056
2057Function/S V_getSourceAp_shape(fname)
2058        String fname
2059
2060        String path = "entry:instrument:source_aperture:shape:shape"
2061        Variable num=60
2062        return(V_getStringFromHDF5(fname,path,num))
2063End
2064
2065// this returns TEXT, due to GUI input, == to diameter if CIRCLE
2066Function/S V_getSourceAp_size(fname)
2067        String fname
2068
2069        String path = "entry:instrument:source_aperture:shape:size"
2070        Variable num=60
2071        return(V_getStringFromHDF5(fname,path,num))
2072End
2073
2074Function V_getSourceAp_width(fname)
2075        String fname
2076
2077        String path = "entry:instrument:source_aperture:shape:width"
2078        return(V_getRealValueFromHDF5(fname,path))
2079End
2080
2081
2082//////// SAMPLE
2083//////// SAMPLE
2084//////// SAMPLE
2085
2086//Sample position in changer (returned as TEXT)
2087Function/S V_getSamplePosition(fname)
2088        String fname
2089       
2090        String path = "entry:sample:changer_position"   
2091        Variable num=60
2092        return(V_getStringFromHDF5(fname,path,num))
2093end
2094
2095// sample label
2096Function/S V_getSampleDescription(fname)
2097        String fname
2098
2099        String path = "entry:sample:description"
2100        Variable num=60
2101        return(V_getStringFromHDF5(fname,path,num))
2102End
2103
2104// for a z-stage??
2105Function V_getSampleElevation(fname)
2106        String fname
2107       
2108        String path = "entry:sample:elevation" 
2109        return(V_getRealValueFromHDF5(fname,path))
2110end
2111
2112//no meaning to this...
2113Function V_getSample_equatorial_ang(fname)
2114        String fname
2115       
2116        String path = "entry:sample:equatorial_angle"   
2117        return(V_getRealValueFromHDF5(fname,path))
2118end
2119
2120// group ID !!! very important for matching up files
2121Function V_getSample_GroupID(fname)
2122        String fname
2123       
2124        String path = "entry:sample:group_id"   
2125        return(V_getRealValueFromHDF5(fname,path))
2126end
2127
2128
2129//Sample Rotation Angle
2130Function V_getSampleRotationAngle(fname)
2131        String fname
2132       
2133        String path = "entry:sample:rotation_angle"     
2134        return(V_getRealValueFromHDF5(fname,path))
2135end
2136
2137//?? this is huber/chamber??
2138// TODO -- then where is the description of 10CB, etc...
2139Function/S V_getSampleHolderDescription(fname)
2140        String fname
2141
2142        String path = "entry:sample:sample_holder_description"
2143        Variable num=60
2144        return(V_getStringFromHDF5(fname,path,num))
2145End
2146
2147Function V_getSampleTemperature(fname)
2148        String fname
2149       
2150        String path = "entry:sample:temperature"       
2151        return(V_getRealValueFromHDF5(fname,path))
2152end
2153
2154Function V_getSampleTempSetPoint(fname)
2155        String fname
2156       
2157        String path = "entry:sample:temperature_setpoint"       
2158        return(V_getRealValueFromHDF5(fname,path))
2159end
2160
2161
2162//Sample Thickness
2163// TODO -- somehow, this is not set correctly in the acquisition, so NaN results
2164Function V_getSampleThickness(fname)
2165        String fname
2166       
2167        String path = "entry:sample:thickness" 
2168        return(V_getRealValueFromHDF5(fname,path))
2169end
2170
2171Function V_getSampleTranslation(fname)
2172        String fname
2173       
2174        String path = "entry:sample:translation"       
2175        return(V_getRealValueFromHDF5(fname,path))
2176end
2177
2178// sample transmission
2179Function V_getSampleTransmission(fname)
2180        String fname
2181       
2182        String path = "entry:sample:transmission"       
2183        return(V_getRealValueFromHDF5(fname,path))
2184end
2185
2186//transmission error (one sigma)
2187Function V_getSampleTransError(fname)
2188        String fname
2189       
2190        String path = "entry:sample:transmission_error"
2191        return(V_getRealValueFromHDF5(fname,path))
2192end
2193
2194
2195
2196//
2197// TODO -- this is all a big mess with the changes in the data file structure
2198//  in JUNE 2017, which completely wrecks what was decided in 2016.
2199// Now, I'm not sure at all what I'll get...or what the field will be called... or what they mean...
2200//
2201//
2202//// SAMPLE / DATA LOGS
2203// write this generic , call with the name of the environment log desired
2204//
2205//
2206// shear_field
2207// pressure
2208// magnetic_field
2209// electric_field
2210//
2211//////// (for example) electric_field (data folder)
2212
2213Function/S V_getLog_attachedTo(fname,logStr)
2214        String fname,logStr
2215
2216        String path = "entry:sample:"+logstr+":attached_to"
2217        Variable num=60
2218        return(V_getStringFromHDF5(fname,path,num))
2219End
2220
2221
2222Function/S V_getLog_measurement(fname,logStr)
2223        String fname,logStr
2224
2225        String path = "entry:sample:"+logstr+":measurement"
2226        Variable num=60
2227        return(V_getStringFromHDF5(fname,path,num))
2228End
2229
2230
2231Function/S V_getLog_Name(fname,logStr)
2232        String fname,logStr
2233
2234        String path = "entry:sample:"+logstr+":name"
2235        Variable num=60
2236        return(V_getStringFromHDF5(fname,path,num))
2237End
2238
2239
2240
2241// for temperature only, logStr = "temperature_env"
2242Function/S V_getTemp_ControlSensor(fname,logStr)
2243        String fname,logStr
2244
2245        String path = "entry:sample:"+logstr+":control_sensor"
2246        Variable num=60
2247        return(V_getStringFromHDF5(fname,path,num))
2248End
2249
2250// for temperature only, logStr = "temperature_env"
2251Function/S V_getTemp_MonitorSensor(fname,logStr)
2252        String fname,logStr
2253
2254        String path = "entry:sample:"+logstr+":monitor_sensor"
2255        Variable num=60
2256        return(V_getStringFromHDF5(fname,path,num))
2257End
2258
2259       
2260
2261//// TODO -- this may not exist if it is not a "controlling" sensor, but there still may be logged data present
2262//// TODO -- it may also have different names for each sensor (setpoint_1, setpoint_2, etc. which will be a big hassle)
2263//Function V_getLog_setPoint(fname,logStr)
2264//      String fname,logStr
2265//     
2266//      String path = "entry:sample:"+logstr+":setpoint_1"
2267//      return(V_getRealValueFromHDF5(fname,path))
2268//end
2269//
2270//Function/S V_getLog_startTime(fname,logStr)
2271//      String fname,logStr
2272//
2273//      String path = "entry:sample:"+logstr+":start"
2274//      Variable num=60
2275//      return(V_getStringFromHDF5(fname,path,num))
2276//End
2277//
2278//
2279//// TODO -- this may only exist for electric field and magnetic field...
2280//// or may be eliminated altogether
2281//Function V_getLog_nomValue(fname,logStr)
2282//      String fname,logStr
2283//     
2284//      String path = "entry:sample:"+logstr+":value"
2285//      return(V_getRealValueFromHDF5(fname,path))
2286//end
2287
2288
2289
2290///////////
2291// for temperature, the "attached_to", "measurement", and "name" fields
2292// are one level down farther than before, and down deeper than for other sensors
2293//
2294//
2295// read the value of V_getTemp_MonitorSensor/ControlSensor to get the name of the sensor level .
2296//
2297
2298Function/S V_getTempLog_attachedTo(fname,logStr)
2299        String fname,logStr
2300
2301        String path = "entry:sample:temperature_env:"+logstr+":attached_to"
2302        Variable num=60
2303        return(V_getStringFromHDF5(fname,path,num))
2304End
2305
2306Function V_getTempLog_highTrip(fname,logStr)
2307        String fname,logStr
2308       
2309        String path = "entry:sample:temperature_env:"+logstr+":high_trip_value"
2310        return(V_getRealValueFromHDF5(fname,path))
2311end
2312
2313Function V_getTempLog_holdTime(fname,logStr)
2314        String fname,logStr
2315       
2316        String path = "entry:sample:temperature_env:"+logstr+":hold_time"
2317        return(V_getRealValueFromHDF5(fname,path))
2318end
2319
2320Function V_getTempLog_lowTrip(fname,logStr)
2321        String fname,logStr
2322       
2323        String path = "entry:sample:temperature_env:"+logstr+":low_trip_value"
2324        return(V_getRealValueFromHDF5(fname,path))
2325end
2326
2327Function/S V_getTempLog_measurement(fname,logStr)
2328        String fname,logStr
2329
2330        String path = "entry:sample:temperature_env:"+logstr+":measurement"
2331        Variable num=60
2332        return(V_getStringFromHDF5(fname,path,num))
2333End
2334
2335
2336Function/S V_getTempLog_Model(fname,logStr)
2337        String fname,logStr
2338
2339        String path = "entry:sample:temperature_env:"+logstr+":model"
2340        Variable num=60
2341        return(V_getStringFromHDF5(fname,path,num))
2342End
2343
2344Function/S V_getTempLog_Name(fname,logStr)
2345        String fname,logStr
2346
2347        String path = "entry:sample:temperature_env:"+logstr+":name"
2348        Variable num=60
2349        return(V_getStringFromHDF5(fname,path,num))
2350End
2351
2352Function V_getTempLog_runControl(fname,logStr)
2353        String fname,logStr
2354       
2355        String path = "entry:sample:temperature_env:"+logstr+":run_control"
2356        return(V_getRealValueFromHDF5(fname,path))
2357end
2358
2359Function V_getTempLog_Setpoint(fname,logStr)
2360        String fname,logStr
2361       
2362        String path = "entry:sample:temperature_env:"+logstr+":setpoint"
2363        return(V_getRealValueFromHDF5(fname,path))
2364end
2365
2366Function/S V_getTempLog_ShortName(fname,logStr)
2367        String fname,logStr
2368
2369        String path = "entry:sample:temperature_env:"+logstr+":short_name"
2370        Variable num=60
2371        return(V_getStringFromHDF5(fname,path,num))
2372End
2373
2374Function V_getTempLog_Timeout(fname,logStr)
2375        String fname,logStr
2376       
2377        String path = "entry:sample:temperature_env:"+logstr+":timeout"
2378        return(V_getRealValueFromHDF5(fname,path))
2379end
2380
2381Function V_getTempLog_Tolerance(fname,logStr)
2382        String fname,logStr
2383       
2384        String path = "entry:sample:temperature_env:"+logstr+":tolerance"
2385        return(V_getRealValueFromHDF5(fname,path))
2386end
2387
2388Function V_getTempLog_ToleranceBand(fname,logStr)
2389        String fname,logStr
2390       
2391        String path = "entry:sample:temperature_env:"+logstr+":tolerance_band_time"
2392        return(V_getRealValueFromHDF5(fname,path))
2393end
2394
2395Function V_getTempLog_Value(fname,logStr)
2396        String fname,logStr
2397       
2398        String path = "entry:sample:temperature_env:"+logstr+":value"
2399        return(V_getRealValueFromHDF5(fname,path))
2400end
2401
2402
2403
2404
2405
2406
2407//
2408// temperature_env:temp_Internal_1:value_log
2409//
2410////            value_log (data folder)
2411//
2412// TODO:
2413// -- be sure that the calling function properly calls for temperture
2414// logs which are down an extra layer:
2415//      for example, logStr = "temperature_env:temp_Internal_1"
2416//
2417// read the value of V_getTemp_MonitorSensor to get the name of the sensor the next level down.
2418//
2419Function V_getLog_avgValue(fname,logStr)
2420        String fname,logStr
2421       
2422        String path = "entry:sample:"+logstr+":value_log:average_value"
2423        return(V_getRealValueFromHDF5(fname,path))
2424end
2425
2426Function V_getLog_avgValue_err(fname,logStr)
2427        String fname,logStr
2428       
2429        String path = "entry:sample:"+logstr+":value_log:average_value_error"
2430        return(V_getRealValueFromHDF5(fname,path))
2431end
2432
2433Function V_getLog_maximumValue(fname,logStr)
2434        String fname,logStr
2435       
2436        String path = "entry:sample:"+logstr+":value_log:maximum_value"
2437        return(V_getRealValueFromHDF5(fname,path))
2438end
2439
2440Function V_getLog_medianValue(fname,logStr)
2441        String fname,logStr
2442       
2443        String path = "entry:sample:"+logstr+":value_log:median_value"
2444        return(V_getRealValueFromHDF5(fname,path))
2445end
2446
2447Function V_getLog_minimumValue(fname,logStr)
2448        String fname,logStr
2449       
2450        String path = "entry:sample:"+logstr+":value_log:minimum_value"
2451        return(V_getRealValueFromHDF5(fname,path))
2452end
2453
2454// DONE -- this needs to be a WAVE reference
2455// DONE -- verify that the field is really read in as "time0"
2456Function V_getLog_timeWave(fname,logStr,outW)
2457        String fname,logStr
2458        Wave outW
2459       
2460        String path = "entry:sample:"+logstr+":value_log:time0"
2461        WAVE w = V_getRealWaveFromHDF5(fname,path)
2462
2463        outW = w
2464        return(0)
2465end
2466
2467// DONE -- this needs to be a WAVE reference
2468Function V_getLog_ValueWave(fname,logStr,outW)
2469        String fname,logStr
2470        Wave outW
2471       
2472        String path = "entry:sample:"+logstr+":value_log:value"
2473        WAVE w = V_getRealWaveFromHDF5(fname,path)
2474
2475        outW = w
2476        return(0)
2477end
2478
2479
2480
2481
2482
2483
2484
2485///////// REDUCTION
2486///////// REDUCTION
2487///////// REDUCTION
2488
2489
2490Function/WAVE V_getAbsolute_Scaling(fname)
2491        String fname
2492       
2493        String path = "entry:reduction:absolute_scaling"       
2494        WAVE w = V_getRealWaveFromHDF5(fname,path)
2495       
2496        return w
2497end
2498
2499Function/S V_getBackgroundFileName(fname)
2500        String fname
2501
2502        String path = "entry:reduction:background_file_name"   
2503        Variable num=60
2504        return(V_getStringFromHDF5(fname,path,num))
2505End
2506
2507// THIS IS A NON-NICE ENTERED FIELD
2508// -- this is the panel string where the box coordinates refer to (for the open beam and transmission)
2509Function/S V_getReduction_BoxPanel(fname)
2510        String fname
2511
2512        String path = "entry:reduction:box_panel"       
2513        Variable num=60
2514        return(V_getStringFromHDF5(fname,path,num))
2515End
2516
2517Function/WAVE V_getBoxCoordinates(fname)
2518        String fname
2519       
2520        String path = "entry:reduction:box_coordinates"
2521        WAVE w = V_getRealWaveFromHDF5(fname,path)
2522
2523        return w
2524end
2525
2526//box counts
2527Function V_getBoxCounts(fname)
2528        String fname
2529       
2530        String path = "entry:reduction:box_count"       
2531        return(V_getRealValueFromHDF5(fname,path))
2532end
2533
2534//box counts error
2535Function V_getBoxCountsError(fname)
2536        String fname
2537       
2538        String path = "entry:reduction:box_count_error"
2539        return(V_getRealValueFromHDF5(fname,path))
2540end
2541
2542Function/S V_getReductionComments(fname)
2543        String fname
2544
2545        String path = "entry:reduction:comments"       
2546        Variable num=60
2547        return(V_getStringFromHDF5(fname,path,num))
2548End
2549
2550
2551Function/S V_getEmptyBeamFileName(fname)
2552        String fname
2553
2554        String path = "entry:reduction:empty_beam_file_name"   
2555        Variable num=60
2556        return(V_getStringFromHDF5(fname,path,num))
2557End
2558
2559Function/S V_getEmptyFileName(fname)
2560        String fname
2561
2562        String path = "entry:reduction:empty_file_name"
2563        Variable num=60
2564        return(V_getStringFromHDF5(fname,path,num))
2565End
2566
2567// this is purpose is used for all files, and has different meaning
2568// if polarization is used. need the "intent" also to be able to fully decipher what a file
2569//  is really being used for. GUI controls this, not me.
2570Function/S V_getReduction_purpose(fname)
2571        String fname
2572
2573        String path = "entry:reduction:file_purpose"   
2574        Variable num=60
2575        return(V_getStringFromHDF5(fname,path,num))
2576End
2577
2578////group ID
2579//// DONE
2580//// x- is this duplicated?
2581//// x- yes, this is a duplicated field in the /entry/sample block (and is probably more appropriate there)
2582//// x- so pick a single location, rather than needing to duplicate.
2583//// x- REPLACE with a single function V_getSample_GroupID()
2584////
2585//Function V_getSample_group_ID(fname)
2586//      String fname
2587//
2588//// do not use the entry/reduction location
2589////    String path = "entry:reduction:group_id"
2590//      String path = "entry:sample:group_id"   
2591//
2592//      return(V_getRealValueFromHDF5(fname,path))
2593//end
2594
2595Function/S V_getReduction_intent(fname)
2596        String fname
2597
2598        String path = "entry:reduction:intent" 
2599        Variable num=60
2600        return(V_getStringFromHDF5(fname,path,num))
2601End
2602
2603Function/S V_getMaskFileName(fname)
2604        String fname
2605
2606        String path = "entry:reduction:mask_file_name" 
2607        Variable num=60
2608        return(V_getStringFromHDF5(fname,path,num))
2609End
2610
2611Function/S V_getLogFileName(fname)
2612        String fname
2613
2614        String path = "entry:reduction:sans_log_file_name"     
2615        Variable num=60
2616        return(V_getStringFromHDF5(fname,path,num))
2617End
2618
2619Function/S V_getSensitivityFileName(fname)
2620        String fname
2621
2622        String path = "entry:reduction:sensitivity_file_name"   
2623        Variable num=60
2624        return(V_getStringFromHDF5(fname,path,num))
2625End
2626
2627Function/S V_getTransmissionFileName(fname)
2628        String fname
2629
2630        String path = "entry:reduction:transmission_file_name" 
2631        Variable num=60
2632        return(V_getStringFromHDF5(fname,path,num))
2633End
2634
2635//whole detector trasmission
2636Function V_getSampleTransWholeDetector(fname)
2637        String fname
2638       
2639        String path = "entry:reduction:whole_trans"     
2640        return(V_getRealValueFromHDF5(fname,path))
2641end
2642
2643//whole detector trasmission error
2644Function V_getSampleTransWholeDetErr(fname)
2645        String fname
2646       
2647        String path = "entry:reduction:whole_trans_error"       
2648        return(V_getRealValueFromHDF5(fname,path))
2649end
2650
2651// this is a NON NICE entered field
2652// so I need to catch the error if it's not there
2653Function/WAVE V_getReductionProtocolWave(fname)
2654        String fname
2655       
2656        String path = "entry:reduction:protocol"       
2657        WAVE/T/Z tw = V_getTextWaveFromHDF5(fname,path)
2658       
2659        if(waveExists(tw))
2660                return tw
2661        else
2662                Make/O/T/N=0 nullTextWave
2663                return nullTextWave
2664        endif
2665       
2666end
2667
2668// this is a NON NICE entered field
2669// so if it's not there, it returns -999999
2670//
2671// this is a flag to mark the file as "flipped" so it prevents a 2nd flip
2672// if the flip has been done, the field is written with a value of 1 (= true)
2673//
2674Function V_getLeftRightFlipDone(fname)
2675        String fname
2676       
2677        String path = "entry:reduction:left_right_flip"
2678        return(V_getRealValueFromHDF5(fname,path))
2679end     
2680
2681
2682
2683// these have all been moved elsewhere                 
2684///////                 pol_sans (data folder)
2685//
2686//Function/S V_getPolSANS_cellName(fname)
2687//      String fname
2688//
2689//      String path = "entry:reduction:pol_sans:cell_name"     
2690//      Variable num=60
2691//      return(V_getStringFromHDF5(fname,path,num))
2692//End
2693//
2694//
2695//Function/WAVE V_getPolSANS_cellParams(fname)
2696//      String fname
2697//     
2698//      String path = "entry:reduction:pol_sans:cell_parameters"       
2699//      WAVE w = V_getRealWaveFromHDF5(fname,path)
2700//
2701//      return w
2702//end
2703//
2704//Function/S V_getPolSANS_PolSANSPurpose(fname)
2705//      String fname
2706//
2707//      String path = "entry:reduction:pol_sans:pol_sans_purpose"       
2708//      Variable num=60
2709//      return(V_getStringFromHDF5(fname,path,num))
2710//End
2711
2712                               
2713//////// TOP LEVEL DATA REPRESENTATION
2714//
2715// note that here the data is (supposed to be) a link, not the actual data
2716// Igor HDf implementation cannot follow links properly, as far as I know.
2717// so ignore them here, and focus on the image that may be possible to read
2718//
2719
2720//              data_B (data folder)
2721//                      data (wave) 1           //ignore this, it's a link
2722//                      variables (wave) 320
2723//                      thumbnail (data folder)
2724
2725////data (wave) "binary"
2726//// TODO -- this will need to be completely replaced with a function that can
2727//// read the binary image data. should be possible, but I don't know the details on either end...
2728//Function/S V_getDataImage(fname,detStr)
2729//      String fname,detStr
2730//
2731//      String path = "entry:data_"+detStr+":thumbnail:data"   
2732//      Variable num=60
2733//      return(V_getStringFromHDF5(fname,path,num))
2734//End
2735//
2736//Function/S V_getDataImageDescription(fname,detStr)
2737//      String fname,detStr
2738//
2739//      String path = "entry:data_"+detStr+":thumbnail:description"     
2740//      Variable num=60
2741//      return(V_getStringFromHDF5(fname,path,num))
2742//End
2743//                                                             
2744//Function/S V_getDataImageType(fname,detStr)
2745//      String fname,detStr
2746//
2747//      String path = "entry:data_"+detStr+":thumbnail:type"   
2748//      Variable num=60
2749//      return(V_getStringFromHDF5(fname,path,num))
2750//End
2751//
2752//
2753
2754
Note: See TracBrowser for help on using the repository browser.