- Timestamp:
- Mar 10, 2016, 9:40:57 PM (9 years ago)
- Location:
- trunk/src
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/series/extract_rdvision.m
r929 r930 153 153 end 154 154 t=xmltree; 155 %%% A REMETTREE %%%%%%%%%%%%%%%%%%%%% 155 156 156 save(t,fullfile(RootPath,'Running.xml'))%create an xml file to indicate that processing takes place 157 157 … … 194 194 return 195 195 end 196 [XmlData,errormsg]=imadoc2struct(filexml);196 197 197 newxml=fullfile(RootPath,Param.InputTable{iview,3}); 198 198 newxml=regexprep(newxml,'_Master_Dalsa_4M180$','');%suppress '_Master_Dalsa_4M180' 199 199 newxml=[newxml '.xml']; 200 200 201 [success,errormsg] = copyfile(filexml,newxml); %copy the xml file in the upper folder 202 203 nbfield2=size(XmlData.Time,2)-1; 204 if nbfield2>1 205 NomTypeNew='_1_1'; 206 else 207 NomTypeNew='_1'; 208 end 201 %copyfile_modif(filexml,newxml); %copy the xml file in the upper folder 202 203 %[XmlData,errormsg]=imadoc2struct(newxml); 204 % nbfield2=size(XmlData.Time,2)-1; 205 % if nbfield2>1 206 % NomTypeNew='_1_1'; 207 % else 208 % NomTypeNew='_1'; 209 % end 209 210 %% get the names of .seq and .sqb files 210 211 switch Param.InputTable{iview,5} … … 212 213 filename_seq=fullfile(RootPath,Param.InputTable{iview,2},[Param.InputTable{iview,3} '.seq']); 213 214 filename_sqb=fullfile(RootPath,Param.InputTable{iview,2},[Param.InputTable{iview,3} '.sqb']); 214 logdir=[Param. InputTable{1,2} .extract];215 logdir=[Param.OutputSubDir Param.OutputDirExt]; 215 216 [success,errormsg] = copyfile(filename_seq,[fullfile(RootPath,logdir,Param.InputTable{iview,3}) '.seq']); %copy the seq file in the upper folder 216 217 [success,errormsg] = copyfile(filename_sqb,[fullfile(RootPath,logdir,Param.InputTable{iview,3}) '.sqb']); %copy the sqb file in the upper folder … … 240 241 SeqData.binrepertoire=[SeqData.binrepertoire DirExt]; 241 242 end 242 243 %% checking consistency with the xml file 244 [npi,npj]=size(XmlData.Time); 245 if ~isequal(SeqData.nb_frames,(npi-1)*(npj-1)) 246 disp_uvmat('ERRROR',['inconsistent number of images ' num2str(SeqData.nb_frames) ' with respect to the xml file: ' num2str((npi-1)*(npj-1))] ,checkrun); 247 return 248 end 243 249 244 250 245 %% reading the .sqb file … … 273 268 for ii=1: numel(m.Data) 274 269 timestamp(ii)=m.Data(ii).timestamp; 275 j1=1; 276 if ~isequal(nbfield2,1) 277 j1=mod(ii-1,nbfield2)+1; 278 end 279 i1=floor((ii-1)/nbfield2)+1; 280 diff_time(i1,j1)= timestamp(ii)-XmlData.Time(i1+1,j1+1); 281 end 282 time_diff_max=max(diff_time'); 283 time_diff_min=min(diff_time'); 284 if max(time_diff_max)>0.005 285 disp(['WARNING:timestamps exceeds xml time by' num2str(max(time_diff_max))]) 286 checkpreserve=1; 287 elseif min(time_diff_min)<-0.005 288 disp(['timestamps is lower than xml time by' num2str(min(time_diff_min))]) 289 checkpreserve=1; 270 % j1=1; 271 % if ~isequal(nbfield2,1) 272 % j1=mod(ii-1,nbfield2)+1; 273 % end 274 % i1=floor((ii-1)/nbfield2)+1; 275 %diff_time(i1,j1)= timestamp(ii)-XmlData.Time(i1+1,j1+1); 276 end 277 [nbfield2,msg]=copyfile_modif(filexml,timestamp,newxml); %copy the xml file in the upper folder 278 [XmlData,errormsg]=imadoc2struct(newxml);% check reading of the new xml file 279 if ~isempty(errormsg) 280 disp(errormsg) 281 return 282 end 283 difftime=XmlData.Time(2:end,2:end)-(reshape(timestamp,nbfield2,[]))'; 284 disp(['time from xml and timestamp differ by ' num2str(max(max(abs(difftime))))]) 285 if max(abs(difftime))>0.01 286 checkpreserve=1;% will not erase the initial files, possibility of error 287 end 288 if nbfield2>1 289 NomTypeNew='_1_1'; 290 290 else 291 disp('CONFIRMATION:time from xml file correct within better than 5 ms') 292 end 293 if checkpreserve 294 disp( 'max and min of timestamp-xml time for each index i:') 295 disp(time_diff_max) 296 disp(time_diff_min) 297 end 291 NomTypeNew='_1'; 292 end 293 298 294 [BinList,errormsg]=binread_rdv_series(RootPath,SeqData,m.Data,nbfield2,NomTypeNew); 299 295 if ~isempty(errormsg) … … 301 297 return 302 298 end 299 303 300 % check the existence of the expected output image files (from the xml) 304 301 FileDir=SeqData.sequencename; … … 314 311 %% remove binary files if transfer OK 315 312 if ~checkpreserve 316 for ibin=1:numel(BinList) 317 delete(BinList{ibin}) 313 for iview=1:size(Param.InputTable,1) 314 fullfile(RootPath,Param.InputTable{iview,2}) 315 316 [SUCCESS,MESSAGE]=rmdir(fullfile(RootPath,Param.InputTable{iview,2}),'s') 318 317 end 319 rmdir(fullfile(RootPath,Param.InputTable{iview,2}))320 318 end 321 319 delete(fullfile(RootPath,'Running.xml'))%delete the xml file to indicate that processing is finished … … 323 321 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 324 322 %--------- reads a series of bin files 323 325 324 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 326 325 function [BinList,errormsg]=binread_rdv_series(PathDir,SeqData,SqbData,nbfield2,NomTypeNew) … … 349 348 fid=0; 350 349 errormsg=''; 350 BinList={}; 351 351 352 classname=sprintf('uint%d',SeqData.bytesperpixel*8); 352 353 … … 424 425 425 426 426 % for ifile=1:nbfield 427 % update_waitbar(WaitbarHandle,ifile/nbfield) 428 % if ~isempty(RUNHandle) && ~strcmp(get(RUNHandle,'BusyAction'),'queue') 429 % disp('program stopped by user') 430 % break 431 % end 432 % [A,FileInfo,timestamps]=read_rdvision(filename,ifile); 433 % if ifile==1 434 % classA=class(A); 435 % if strcmp(classA,'uint8') 436 % BitDepth=8; 437 % else 438 % BitDepth=16; 439 % end 440 % end 441 % j1=[]; 442 % if ~isequal(nbfield2,1) 443 % j1=mod(ifile-1+first_label,nbfield2)+1; 444 % end 445 % i1=floor((ifile-1+first_label)/nbfield2)+1; 446 % OutputFile=fullfile_uvmat(RootPath{1},OutputDir,'img','.png',NomTypeNew,i1,[],j1); 447 % try 448 % imwrite(A,OutputFile,'BitDepth',BitDepth) % case of 16 bit images 449 % disp([OutputFile ' written']); 450 % [s,errormsg] = fileattrib(OutputFile,'-w','a'); %set images to read only '-w' for all users ('a') 451 % if ~s 452 % disp_uvmat('ERROR',errormsg,checkrun); 453 % return 454 % end 455 % catch ME 456 % disp_uvmat('ERROR',ME.message,checkrun); 457 % return 458 % end 459 % 460 % end 461 462 %'imadoc2struct_special': reads the xml file for image documentation 463 %------------------------------------------------------------------------ 464 % function [s,errormsg]=imadoc2struct_special(ImaDoc,option) 465 % 466 % OUTPUT: 467 % s: structure representing ImaDoc 468 % s.Heading: information about the data hierarchical structure 469 % s.Time: matrix of times 470 % s.TimeUnit 471 % s.GeometryCalib: substructure containing the parameters for geometric calibration 472 % errormsg: error message 473 % 474 % INPUT: 475 % ImaDoc: full name of the xml input file with head key ImaDoc 476 % option: ='GeometryCalib': read the data of GeometryCalib, including source point coordinates 477 478 function [s,errormsg]=imadoc2struct_special(ImaDoc,option) 479 480 %% default input and output 481 if ~exist('option','var') 482 option='*'; 483 end 484 errormsg=[];%default 485 s.Heading=[];%default 486 s.Time=[]; %default 487 s.TimeUnit=[]; %default 488 s.GeometryCalib=[]; 489 tsai=[];%default 490 491 %% opening the xml file 492 if exist(ImaDoc,'file')~=2, errormsg=[ ImaDoc ' does not exist']; return;end;%input file does not exist 493 try 494 t=xmltree(ImaDoc); 495 catch 496 errormsg={[ImaDoc ' is not a valid xml file']; lasterr}; 497 display(errormsg); 498 return 499 end 500 uid_root=find(t,'/ImaDoc'); 501 if isempty(uid_root), errormsg=[ImaDoc ' is not an image documentation file ImaDoc']; return; end;%not an ImaDoc .xml file 502 503 504 %% Heading 505 uid_Heading=find(t,'/ImaDoc/Heading'); 506 if ~isempty(uid_Heading), 507 uid_Campaign=find(t,'/ImaDoc/Heading/Campaign'); 508 uid_Exp=find(t,'/ImaDoc/Heading/Experiment'); 509 uid_Device=find(t,'/ImaDoc/Heading/Device'); 510 uid_Record=find(t,'/ImaDoc/Heading/Record'); 511 uid_FirstImage=find(t,'/ImaDoc/Heading/ImageName'); 512 s.Heading.Campaign=get(t,children(t,uid_Campaign),'value'); 513 s.Heading.Experiment=get(t,children(t,uid_Exp),'value'); 514 s.Heading.Device=get(t,children(t,uid_Device),'value'); 515 if ~isempty(uid_Record) 516 s.Heading.Record=get(t,children(t,uid_Record),'value'); 517 end 518 s.Heading.ImageName=get(t,children(t,uid_FirstImage),'value'); 519 end 520 521 %% Camera and timing 522 if strcmp(option,'*') || strcmp(option,'Camera') 523 uid_Camera=find(t,'/ImaDoc/Camera'); 524 if ~isempty(uid_Camera) 525 uid_ImageSize=find(t,'/ImaDoc/Camera/ImageSize'); 526 if ~isempty(uid_ImageSize); 527 ImageSize=get(t,children(t,uid_ImageSize),'value'); 528 xindex=findstr(ImageSize,'x'); 529 if length(xindex)>=2 530 s.Npx=str2double(ImageSize(1:xindex(1)-1)); 531 s.Npy=str2double(ImageSize(xindex(1)+1:xindex(2)-1)); 532 end 533 end 534 uid_TimeUnit=find(t,'/ImaDoc/Camera/TimeUnit'); 535 if ~isempty(uid_TimeUnit) 536 s.TimeUnit=get(t,children(t,uid_TimeUnit),'value'); 537 end 538 uid_BurstTiming=find(t,'/ImaDoc/Camera/BurstTiming'); 539 if ~isempty(uid_BurstTiming) 540 for k=1:length(uid_BurstTiming) 541 subt=branch(t,uid_BurstTiming(k));%subtree under BurstTiming 542 % reading Dtk 543 Frequency=get_value(subt,'/BurstTiming/FrameFrequency',1); 544 Dtj=get_value(subt,'/BurstTiming/Dtj',[]); 545 Dtj=Dtj/Frequency;%Dtj converted from frame unit to TimeUnit (e.g. 's') 546 NbDtj=get_value(subt,'/BurstTiming/NbDtj',[]); 547 %%%% correction RDvision %%%% 548 % NbDtj=NbDtj/numel(Dtj); 549 % s.NbDtj=NbDtj; 550 % %%%% 551 Dti=get_value(subt,'/BurstTiming/Dti',[]); 552 NbDti=get_value(subt,'/BurstTiming/NbDti',1); 553 %%%% correction RDvision %%%% 554 if isempty(Dti)% series 555 Dti=Dtj; 556 NbDti=NbDtj; 557 Dtj=[]; 558 s.Dti=Dti; 559 s.NbDti=NbDti; 560 else 561 % NbDtj=NbDtj/numel(Dtj);%bursts 562 if ~isempty(NbDtj) 563 s.NbDtj=NbDtj/numel(Dtj);%bursts; 564 else 565 s.NbDtj=1; 566 end 567 end 568 %%%% %%%% 569 Dti=Dti/Frequency;%Dtj converted from frame unit to TimeUnit (e.g. 's') 570 571 Time_val=get_value(subt,'/BurstTiming/Time',0);%time in TimeUnit 572 if ~isempty(Dti) 573 Dti=reshape(Dti'*ones(1,NbDti),NbDti*numel(Dti),1); %concatene Dti vector NbDti times 574 Time_val=[Time_val;Time_val(end)+cumsum(Dti)];%append the times defined by the intervals Dti 575 end 576 if ~isempty(Dtj) 577 Dtj=reshape(Dtj'*ones(1,s.NbDtj),1,s.NbDtj*numel(Dtj)); %concatene Dtj vector NbDtj times 578 Dtj=[0 Dtj]; 579 Time_val=Time_val*ones(1,numel(Dtj))+ones(numel(Time_val),1)*cumsum(Dtj);% produce a time matrix with Dtj 580 end 581 % reading Dtk 582 Dtk=get_value(subt,'/BurstTiming/Dtk',[]); 583 NbDtk=get_value(subt,'/BurstTiming/NbDtk',1); 584 %%%% correction RDvision %%%% 585 if ~isequal(NbDtk,1) 586 NbDtk=-1+(NbDtk+1)/(NbDti+1); 587 end 588 s.NbDtk=NbDtk; 589 %%%%% 590 if isempty(Dtk) 591 s.Time=[s.Time;Time_val]; 592 else 593 for kblock=1:NbDtk+1 594 Time_val_k=Time_val+(kblock-1)*Dtk; 595 s.Time=[s.Time;Time_val_k]; 596 end 597 end 598 end 599 end 600 end 601 end 602 603 %% motor 604 if strcmp(option,'*') || strcmp(option,'GeometryCalib') 605 uid_subtree=find(t,'/ImaDoc/TranslationMotor'); 606 if length(uid_subtree)==1 607 subt=branch(t,uid_subtree);%subtree under GeometryCalib 608 [s.TranslationMotor,errormsg]=read_subtree(subt,{'Nbslice','ZStart','ZEnd'},[1 1 1],[1 1 1]); 609 end 610 end 611 %% geometric calibration 612 if strcmp(option,'*') || strcmp(option,'GeometryCalib') 613 uid_GeometryCalib=find(t,'/ImaDoc/GeometryCalib'); 614 if ~isempty(uid_GeometryCalib) 615 if length(uid_GeometryCalib)>1 616 errormsg=['More than one GeometryCalib in ' filecivxml]; 617 return 618 end 619 subt=branch(t,uid_GeometryCalib);%subtree under GeometryCalib 620 cont=get(subt,1,'contents'); 621 if ~isempty(cont) 622 uid_CalibrationType=find(subt,'/GeometryCalib/CalibrationType'); 623 if isequal(length(uid_CalibrationType),1) 624 tsai.CalibrationType=get(subt,children(subt,uid_CalibrationType),'value'); 625 end 626 uid_CoordUnit=find(subt,'/GeometryCalib/CoordUnit'); 627 if isequal(length(uid_CoordUnit),1) 628 tsai.CoordUnit=get(subt,children(subt,uid_CoordUnit),'value'); 629 end 630 uid_fx_fy=find(subt,'/GeometryCalib/fx_fy'); 631 focal=[];%default fro old convention (Reg Wilson) 632 if isequal(length(uid_fx_fy),1) 633 tsai.fx_fy=str2num(get(subt,children(subt,uid_fx_fy),'value')); 634 else %old convention (Reg Wilson) 635 uid_focal=find(subt,'/GeometryCalib/focal'); 636 uid_dpx_dpy=find(subt,'/GeometryCalib/dpx_dpy'); 637 uid_sx=find(subt,'/GeometryCalib/sx'); 638 if ~isempty(uid_focal) && ~isempty(uid_dpx_dpy) && ~isempty(uid_sx) 639 dpx_dpy=str2num(get(subt,children(subt,uid_dpx_dpy),'value')); 640 sx=str2num(get(subt,children(subt,uid_sx),'value')); 641 focal=str2num(get(subt,children(subt,uid_focal),'value')); 642 tsai.fx_fy(1)=sx*focal/dpx_dpy(1); 643 tsai.fx_fy(2)=focal/dpx_dpy(2); 644 end 645 end 646 uid_Cx_Cy=find(subt,'/GeometryCalib/Cx_Cy'); 647 if ~isempty(uid_Cx_Cy) 648 tsai.Cx_Cy=str2num(get(subt,children(subt,uid_Cx_Cy),'value')); 649 end 650 uid_kc=find(subt,'/GeometryCalib/kc'); 651 if ~isempty(uid_kc) 652 tsai.kc=str2double(get(subt,children(subt,uid_kc),'value')); 653 else %old convention (Reg Wilson) 654 uid_kappa1=find(subt,'/GeometryCalib/kappa1'); 655 if ~isempty(uid_kappa1)&& ~isempty(focal) 656 kappa1=str2double(get(subt,children(subt,uid_kappa1),'value')); 657 tsai.kc=-kappa1*focal*focal; 658 end 659 end 660 uid_Tx_Ty_Tz=find(subt,'/GeometryCalib/Tx_Ty_Tz'); 661 if ~isempty(uid_Tx_Ty_Tz) 662 tsai.Tx_Ty_Tz=str2num(get(subt,children(subt,uid_Tx_Ty_Tz),'value')); 663 end 664 uid_R=find(subt,'/GeometryCalib/R'); 665 if ~isempty(uid_R) 666 RR=get(subt,children(subt,uid_R),'value'); 667 if length(RR)==3 668 tsai.R=[str2num(RR{1});str2num(RR{2});str2num(RR{3})]; 669 end 670 end 671 672 %look for laser plane definitions 673 uid_Angle=find(subt,'/GeometryCalib/PlaneAngle'); 674 uid_Pos=find(subt,'/GeometryCalib/SliceCoord'); 675 if isempty(uid_Pos) 676 uid_Pos=find(subt,'/GeometryCalib/PlanePos');%old convention 677 end 678 if ~isempty(uid_Angle) 679 tsai.PlaneAngle=str2num(get(subt,children(subt,uid_Angle),'value')); 680 end 681 if ~isempty(uid_Pos) 682 for j=1:length(uid_Pos) 683 tsai.SliceCoord(j,:)=str2num(get(subt,children(subt,uid_Pos(j)),'value')); 684 end 685 uid_DZ=find(subt,'/GeometryCalib/SliceDZ'); 686 uid_NbSlice=find(subt,'/GeometryCalib/NbSlice'); 687 if ~isempty(uid_DZ) && ~isempty(uid_NbSlice) 688 DZ=str2double(get(subt,children(subt,uid_DZ),'value')); 689 NbSlice=get(subt,children(subt,uid_NbSlice),'value'); 690 if isequal(NbSlice,'volume') 691 tsai.NbSlice='volume'; 692 NbSlice=NbDtj+1; 693 else 694 tsai.NbSlice=str2double(NbSlice); 695 end 696 tsai.SliceCoord=ones(NbSlice,1)*tsai.SliceCoord+DZ*(0:NbSlice-1)'*[0 0 1]; 697 end 698 end 699 tsai.SliceAngle=get_value(subt,'/GeometryCalib/SliceAngle',[0 0 0]); 700 tsai.VolumeScan=get_value(subt,'/GeometryCalib/VolumeScan','n'); 701 tsai.InterfaceCoord=get_value(subt,'/GeometryCalib/InterfaceCoord',[0 0 0]); 702 tsai.RefractionIndex=get_value(subt,'/GeometryCalib/RefractionIndex',1); 703 704 if strcmp(option,'GeometryCalib') 705 tsai.PointCoord=get_value(subt,'/GeometryCalib/SourceCalib/PointCoord',[0 0 0 0 0]); 706 end 707 s.GeometryCalib=tsai; 708 end 709 end 710 end 711 712 %-------------------------------------------------- 713 % read a subtree 714 % INPUT: 715 % t: xltree 716 % head_element: head elelemnt of the subtree 717 % Data, structure containing 718 % .Key: element name 719 % .Type: type of element ('charg', 'float'....) 720 % .NbOccur: nbre of occurrence, NaN for un specified number 721 function [s,errormsg]=read_subtree(subt,Data,NbOccur,NumTest) 722 %-------------------------------------------------- 723 s=[];%default 724 errormsg=''; 725 head_element=get(subt,1,'name'); 726 cont=get(subt,1,'contents'); 727 if ~isempty(cont) 728 for ilist=1:length(Data) 729 uid_key=find(subt,[head_element '/' Data{ilist}]); 730 if ~isequal(length(uid_key),NbOccur(ilist)) 731 errormsg=['wrong number of occurence for ' Data{ilist}]; 732 return 733 end 734 for ival=1:length(uid_key) 735 val=get(subt,children(subt,uid_key(ival)),'value'); 736 if ~NumTest(ilist) 737 eval(['s.' Data{ilist} '=val;']); 738 else 739 eval(['s.' Data{ilist} '=str2double(val);']) 740 end 741 end 742 end 743 end 744 745 746 %-------------------------------------------------- 747 % read an xml element 748 function val=get_value(t,label,default) 749 %-------------------------------------------------- 750 val=default; 751 uid=find(t,label);%find the element iud(s) 752 if ~isempty(uid) %if the element named label exists 753 uid_child=children(t,uid);%find the children 754 if ~isempty(uid_child) 755 data=get(t,uid_child,'type');%get the type of child 756 if iscell(data)% case of multiple element 757 for icell=1:numel(data) 758 val_read=str2num(get(t,uid_child(icell),'value')); 759 if ~isempty(val_read) 760 val(icell,:)=val_read; 761 end 762 end 763 % val=val'; 764 else % case of unique element value 765 val_read=str2num(get(t,uid_child,'value')); 766 if ~isempty(val_read) 767 val=val_read; 768 else 769 val=get(t,uid_child,'value');%char string data 770 end 771 end 772 end 773 end 774 775 776 777 427 function [nbfield2,msg]=copyfile_modif(filexml,timestamp,newxml) 428 msg=''; 429 t=xmltree(filexml); 430 431 %% correct NbDtj 432 uid_NbDtj=find(t,'ImaDoc/Camera/BurstTiming/NbDtj'); 433 uid_content=get(t,uid_NbDtj,'contents'); 434 t=set(t,uid_content,'value','1');% set NbDtj to 1 (correct error in the xml file) 435 436 %% check Dtj 437 uid_Dtj=find(t,'ImaDoc/Camera/BurstTiming/Dtj'); 438 uid_content=get(t,uid_Dtj,'contents'); 439 Dtj=str2num(get(t,uid_content,'value')); 440 nbfield2=numel(Dtj)+1; 441 timestamp=(reshape(timestamp,nbfield2,[]))'; 442 diff_Dtj=diff(timestamp(1,:))-Dtj; 443 if max(abs(diff_Dtj))>min(Dtj)/1000 444 disp(['Dtj from xml file differs from time stamp by ' num2str(max(abs(diff_Dtj))) ', '])%' 445 else 446 disp('Dtj OK'); 447 end 448 449 %% correct NbDti 450 NbDti=size(timestamp,1); %default for series or burst 451 uid_motor_nbslice=find(t,'ImaDoc/TranslationMotor/Nbslice'); 452 if ~isempty(uid_motor_nbslice) 453 uid_content=get(t,uid_motor_nbslice,'contents'); 454 NbSlice=str2num(get(t,uid_content,'value')); 455 NbDti=NbSlice-1; 456 uid_NbDti=find(t,'ImaDoc/Camera/BurstTiming/NbDti'); 457 uid_content=get(t,uid_NbDti,'contents'); 458 t=set(t,uid_content,'value',num2str(NbDti)); 459 end 460 461 %% adjust Dti 462 uid_Dti=find(t,'ImaDoc/Camera/BurstTiming/Dti'); 463 uid_content=get(t,uid_Dti,'contents'); 464 Dti=str2num(get(t,uid_content,'value')); 465 Dti_stamp=(timestamp(1+NbDti,1)-timestamp(1,1))/NbDti; 466 if abs(Dti_stamp-Dti)>Dti/1000 467 disp([msg 'Dti from xml file corrected by ' num2str(Dti_stamp-Dti) ', ']);%' 468 else 469 disp('Dti OK') 470 end 471 t=set(t,uid_content,'value',num2str(Dti_stamp)); 472 473 %% adjust Dtk 474 uid_Dtk=find(t,'ImaDoc/Camera/BurstTiming/Dtk'); 475 if ~isempty(uid_Dtk) 476 uid_content_Dtk=get(t,uid_Dtk,'contents'); 477 Dtk=str2num(get(t,uid_content_Dtk,'value')); 478 uid_NbDtk=find(t,'ImaDoc/Camera/BurstTiming/NbDtk'); 479 uid_content_NbDtk=get(t,uid_NbDtk,'contents'); 480 NbDtk=str2num(get(t,uid_content_NbDtk,'value')); 481 Dtk_stamp=(timestamp(end-NbDti,1)-timestamp(1,1))/NbDtk; 482 if abs(Dtk_stamp-Dtk)>Dtk/1000 483 disp([msg 'Dtk from xml file corrected by ' num2str(Dtk_stamp-Dtk)]); 484 else 485 disp('Dtk OK') 486 end 487 t=set(t,uid_content_Dtk,'value',num2str(Dtk_stamp)); 488 end 489 490 save(t,newxml) 491 492 493 494 -
trunk/src/struct2nc.m
r924 r930 35 35 %======================================================================= 36 36 37 function errormsg=struct2nc(flname,Data) 38 if ~ischar(flname) 39 errormsg='invalid input for the netcf file name'; 40 return 41 end 37 function [errormsg,nc]=struct2nc(flname,Data,action) 38 nc=[]; 39 % if ~ischar(flname) 40 % errormsg='invalid input for the netcf file name'; 41 % return 42 % end 42 43 if ~exist('Data','var') 43 44 errormsg='no data input for the netcdf file'; 44 45 return 45 46 end 46 FilePath=fileparts(flname); 47 if ~strcmp(FilePath,'') && ~exist(FilePath,'dir') 48 errormsg=['directory ' FilePath ' needs to be created']; 49 return 50 end 47 if ~exist('action','var') 48 action='one_input'; %fill the file with data and close it 49 end 50 51 51 52 52 %% check the validity of the input field structure … … 59 59 60 60 %% create the netcdf file with name flname in format NETCDF4 61 cmode = netcdf.getConstant('NETCDF4'); 62 cmode = bitor(cmode, netcdf.getConstant('CLASSIC_MODEL')); 63 cmode = bitor(cmode, netcdf.getConstant('CLOBBER')); 64 nc = netcdf.create(flname, cmode); 61 if ischar(flname) 62 FilePath=fileparts(flname); 63 if ~strcmp(FilePath,'') && ~exist(FilePath,'dir') 64 errormsg=['directory ' FilePath ' needs to be created']; 65 return 66 end 67 cmode = netcdf.getConstant('NETCDF4'); 68 cmode = bitor(cmode, netcdf.getConstant('CLASSIC_MODEL')); 69 cmode = bitor(cmode, netcdf.getConstant('CLOBBER')); 70 nc = netcdf.create(flname, cmode); 71 else 72 nc=flname; 73 end 65 74 66 75 %% write global constants … … 159 168 end 160 169 end 170 if strcmp(action,'one_input') 161 171 netcdf.close(nc) 162 172 end 163 173 164 174 %'check_field_structure': check the validity of the field struture representation consistant with the netcdf format -
trunk/src/xml2struct.m
r924 r930 13 13 14 14 %======================================================================= 15 % Copyright 2008-2016, LEGI UMR 5519 / CNRS UGA G-INP, Grenoble, France 15 % Copyright 2008-2016, LEGI UMR 5519 / CNRS UGA G-INP, Grenoble, France/.fsnet/project/coriolis/2016/16CIRCUMPOLAR/EXP07/2016-03-08T 16 16 17 % http://www.legi.grenoble-inp.fr 17 18 % Joel.Sommeria - Joel.Sommeria (A) legi.cnrs.fr
Note: See TracChangeset
for help on using the changeset viewer.