source: MML/trunk/mml/@AccObj/times.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 10 years ago

Initial import--MML version from SOLEIL@2013

File size: 2.2 KB
Line 
1function AccObj1 = times(AccObj1, AccObj2)
2%TIMES - Point wise multiplication (A .* B) for AccObj class
3%
4%  1. AccObj multiplication (just like *)
5%     Multiplying 2 AccObj returns an AccObj
6%
7%  2. Vector multiplication
8%     c.*x or x.*c, where x is an AccObj and c
9%     is a vector returns an AccObj
10%
11%  Written by Greg Portmann
12
13
14
15if isnumeric(AccObj2)
16    Families = fieldnames(AccObj1);
17
18    d = [];
19    for i = 1:length(Families)
20        d = [d; AccObj1.(Families{i}).Data];
21    end
22
23    d = d .* AccObj2(:);
24
25    for i = 1:length(Families)
26        AccObj1.(Families{i}).Data = d(1:size(AccObj1.(Families{i}).Data,1));
27        d(1:size(AccObj1.(Families{i}).Data,1)) = [];
28    end
29
30elseif isnumeric(AccObj1)
31    Families = fieldnames(AccObj2);
32
33    d = [];
34    for i = 1:length(Families)
35        d = [d; AccObj2.(Families{i}).Data];
36    end
37   
38    d = AccObj1(:) .* d;
39   
40    for i = 1:length(Families)
41        AccObj2.(Families{i}).Data = d(1:size(AccObj2.(Families{i}).Data,1));
42        d(1:size(AccObj2.(Families{i}).Data,1)) = [];
43    end
44   
45    AccObj1 = AccObj2;
46
47
48else
49    % Combine the lists
50    %error('There is a device in one BPM object that is not is the other.');
51
52    Families = fieldnames(AccObj1);
53
54    for i = 1:length(Families)
55        if ~isempty(AccObj1.(Families{i})) & ~isempty(AccObj2.(Families{i}))
56            [DeviceList, i1, i2] = union(AccObj1.(Families{i}).DeviceList, AccObj2.(Families{i}).DeviceList, 'rows');
57            Data1 = zeros(size(DeviceList,1),1);
58            Data2 = Data1;
59
60            j = findrowindex(AccObj1.(Families{i}).DeviceList, DeviceList);
61            Data1(j) = AccObj1.(Families{i}).Data;
62
63            j = findrowindex(AccObj2.(Families{i}).DeviceList, DeviceList);
64            Data2(j) = AccObj2.(Families{i}).Data;
65
66            Data = Data1 .* Data2;
67
68            AccObj1.(Families{i}).Data = Data;
69            AccObj1.(Families{i}).DeviceList = DeviceList;
70
71        elseif ~isempty(AccObj2.(Families{i}))
72            % Move family in AccObj2 to AccObj1  ???
73            AccObj1.(Families{i}) = AccObj2.(Families{i});
74            AccObj1.(Families{i}).Data = AccObj1.(Families{i}).Data;
75        end
76    end
77   
78    d = AccObj1;
79end
80
81
Note: See TracBrowser for help on using the repository browser.