Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
gdat
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SPC
gdat
Commits
9ce002a7
Commit
9ce002a7
authored
1 year ago
by
Olivier Sauter
Browse files
Options
Downloads
Patches
Plain Diff
rm xtomo_geometry.m obsolete
parent
ff216d04
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!142
Fix 900000 shots
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
matlab/TCV/xtomo_geometry.m
+0
-402
0 additions, 402 deletions
matlab/TCV/xtomo_geometry.m
with
0 additions
and
402 deletions
matlab/TCV/xtomo_geometry.m
deleted
100644 → 0
+
0
−
402
View file @
ff216d04
function
[
fans
,
vangle
,
xchord
,
ychord
,
aomega
,
angfact
]
=
xtomo_geometry
(
i_detec
,
fans
)
% ----[anton.public]
%
% function
%
% [fans,vangle,xchord,ychord,aomega,angfact]=xtomo_geometry(i_detec,fans);
%
% inputs:
%
% i_detec: =2: Xtomo prototype cameras (shot# < 6768)
% =1: Xtomo 9-cameras (shot# > 682x)
%
% outputs:
%
% fans: camera switch, 1=on,0=off (1x10)
% vangle: angle between detect. surface normal and pos. x-axis (1x10)
% xchord: two x-coordinates (2xnl) and
% ychord: two y-coord. for each line (2xnl), they specify start + end points
% aomega: etendue in mm^2 x steradians
% angfact: angular factors, inverse of relative etendue (throughput) (20x10)
%
% uses:
% AOMEGA=etendue_n2(b1x,b1y,b1z,b2x,b2y,b2z,z01,z02,X0,cw);
% angular_fact_*.mat , '*'=i_detec
%
%
%---------------- M.Anton 14/3/95 -------------------------------------------
disp
(
'*----------------------------*'
)
disp
(
'| this is xtomo_geometry |'
)
disp
(
'*----------------------------*'
)
global
xap
yap
xdet
ydet
global
ae
da
% ======== tokamak parameters ================================================
load
tcv_vesc1
xcont
=
rzvin
(:,
1
);
ycont
=
rzvin
(:,
2
);
xmin
=
min
(
xcont
);
ymin
=
min
(
ycont
);
xmax
=
max
(
xcont
);
ymax
=
max
(
ycont
);
xedge
=
100
;
yedge
=
60
;
% ========= detector parameters =============================================
if
i_detec
==
2
cw
=
1
;
% detector numbers cw=1:clockwise cw=0:ccw
if
nargin
<
2
fans
=
[
0
0
0
0
0
0
1
0
1
0
];
% camera switch
end
vangle
=
[
90
90
90
0
0
0
0
-
90
-
90
-
90
];
% angle of detector surface normal
xpos
=
[
0
0
0
0
0
0
118.05
0
87.84
0
];
% x position of the diaphragmas in [cm]
ypos
=
[
0
0
0
0
0
0
-
46
0
-
80.45
0
];
% y position of the diaphragmas in [cm]
ae
=
[
0
0
0
0
0
0
-
2.5
0
-
0.1
0
]/
10
;
%excentricity array/diaphragm in [cm]
da
=
[
0
0
0
0
0
0
10.1
0
-
11.7
0
]/
10
;
% diaphragma-array distance in [cm]
da2
=
da
;
d1
=
0.950
;
% detector width in mm
d2
=
4.050
;
% detector length in mm
b1
=
1.000
;
% aperture width in mm
b2
=
4.000
*
ones
(
1
,
10
);
% aperture length in mm
b3x
=
0
;
% aperture thickness in mm
b3y
=
0
;
elseif
i_detec
==
1
cw
=
1
;
% detector numbers cw=1:clockwise cw=0:ccw
if
nargin
<
2
fans
=
[
1
1
1
1
1
1
1
1
0
1
];
% camera switch
end
vangle
=
[
90
90
90
0
0
0
0
-
90
-
90
-
90
];
% angle of detector surface normal
xpos
=
[
71.5
87.7
103.9
123.1
123.1
123.1
123.1
104.04
87.84
71.64
];
% x position of the diaphragmas in [cm]
ypos
=
[
80.35
80.35
80.35
48.1
1.95
-
2.45
-
48.6
-
80.35
-
80.35
-
80.35
];
% y position of the diaphragmas in [cm]
ae
=
[
-
8
0
8
5
9
-
9
-
5
8
0
-
8
]/
10
;
%excentricity array/diaphragm [cm]
ae
=
ae
+
[
-
0.0915
0
0.1361
0.2123
0.0923
-
0.0994
...
0.0872
-
0.1520
0
0.9410
]/
10
;
ae
(
1
)
=
ae
(
1
)
+
0.1
/
10
;
ae
(
3
)
=
8
/
10
+
0.14
/
10
;
ae
(
4
)
=
4.9
/
10
;
ae
(
5
)
=
9
/
10
+
0.2
/
10
;
ae
(
6
)
=
ae
(
6
)
-
0.2
/
10
;
ae
(
7
)
=-
4.9
/
10
;
ae
(
10
)
=-
7.1
/
10
;
da
=
[
12.4
9.9
12.4
9.9
13.4
13.4
9.9
-
12.4
-
9.9
-
12.4
]/
10
;
% diaphragma-array distance in [cm] (poloidal)
da2
=
[
37
34.4
37
55.9
59.4
59.4
55.9
37
34.4
37
]/
10
;
% dist to diaphragm in toroidal direction [cm];
deltada
=
[
-
0.0311
0
-
0.0458
-
0.1179
-
0.0615
-
0.1105
...
-
0.0510
-
0.0515
0
-
0.3223
]/
10
;
deltada
(
4
)
=
0
;
deltada
(
6
)
=
0
;
da
=
da
+
deltada
;
da2
=
da2
+
deltada
;
d1
=
0.90
;
% detector width in mm
d2
=
4.0
;
% detector length in mm
b1
=
0.800
;
% aperture width in mm (pol.)
b2
=
[
8
8
8
15
15
15
15
8
8
8
];
% aperture length in mm (tor.)
b3x
=
0.020
;
% aperture thickness in mm (poloidal)
b3y
=
0
;
% aperture thickness in mm (toroidal)
end
%======== calculation of the chords of view ===================================
nact
=
sum
(
fans
);
iact
=
find
(
fans
);
ndet
=
20
;
ncam
=
10
;
% ---- apertures: ------------------
xap
=
ones
(
ndet
,
1
)
*
xpos
(
iact
);
xap
=
xap
(:)
'
;
yap
=
ones
(
ndet
,
1
)
*
ypos
(
iact
);
yap
=
yap
(:)
'
;
% ---- detectors: ------------------
vorz
(
find
(
vangle
==
90
))
=
(
-
1
)
^
(
cw
+
1
)
*
ones
(
size
(
find
(
vangle
==
90
)));
vorz
(
find
(
vangle
==
0
))
=
(
-
1
)
^
cw
*
ones
(
size
(
find
(
vangle
==
0
)));
vorz
(
find
(
vangle
==-
90
))
=
(
-
1
)
^
cw
*
ones
(
size
(
find
(
vangle
==-
90
)));
dete
=
(
-
9.025
:
0.950
:
9.025
)
'
/
10
*
vorz
(
iact
)
+
ones
(
ndet
,
1
)
*
ae
(
iact
);
dum_ae
=
dete
(:)
'
;
dum_vangle
=
ones
(
ndet
,
1
)
*
vangle
(
iact
);
dum_vangle
=
dum_vangle
(:)
'
;
ivert
=
find
(
dum_vangle
==
90
|
dum_vangle
==-
90
);
ihori
=
find
(
dum_vangle
==
0
);
dum_da
=
ones
(
ndet
,
1
)
*
da
(
iact
);
dum_da
=
dum_da
(:)
'
;
dxd
=
zeros
(
1
,
ndet
*
nact
);
dyd
=
zeros
(
1
,
ndet
*
nact
);
dxd
(
ivert
)
=
dum_ae
(
ivert
);
dxd
(
ihori
)
=
dum_da
(
ihori
);
dyd
(
ivert
)
=
dum_da
(
ivert
);
dyd
(
ihori
)
=
dum_ae
(
ihori
);
xdet
=
xap
+
dxd
;
ydet
=
yap
+
dyd
;
%plot_vessel(rzvin,rzvout)
%hold on
% plot(xap,yap,'.g',xdet,ydet,'.m')
% ---- calculate the equations of lines of sight
m
=
(
ydet
-
yap
)
.
/(
xdet
-
xap
);
b
=
ydet
-
m
.*
xdet
;
nl
=
length
(
xdet
);
xchord
=
zeros
(
2
,
nl
);
ychord
=
zeros
(
2
,
nl
);
xchord
(
1
,:)
=
xdet
;
ychord
(
1
,:)
=
ydet
;
iup
=
find
(
dum_vangle
==
90
);
isi
=
find
(
dum_vangle
==
0
);
ido
=
find
(
dum_vangle
==-
90
);
if
~
isempty
(
iup
)
ychord
(
2
,
iup
)
=
ymin
*
ones
(
size
(
iup
));
xchord
(
2
,
iup
)
=
(
ychord
(
2
,
iup
)
-
b
(
iup
))
.
/
m
(
iup
);
end
if
~
isempty
(
ido
)
ychord
(
2
,
ido
)
=
ymax
*
ones
(
size
(
ido
));
xchord
(
2
,
ido
)
=
(
ychord
(
2
,
ido
)
-
b
(
ido
))
.
/
m
(
ido
);
end
if
~
isempty
(
isi
)
xchord
(
2
,
isi
)
=
xmin
*
ones
(
size
(
isi
));
ychord
(
2
,
isi
)
=
m
(
isi
)
.*
xchord
(
2
,
isi
)
+
b
(
isi
);
end
ileft
=
find
(
xchord
(
2
,:)
<
xmin
);
if
~
isempty
(
ileft
)
xchord
(
2
,
ileft
)
=
xmin
*
ones
(
size
(
ileft
));
ychord
(
2
,
ileft
)
=
m
(
ileft
)
.*
xchord
(
2
,
ileft
)
+
b
(
ileft
);
end
irig
=
find
(
xchord
(
2
,:)
>
xmax
);
if
~
isempty
(
irig
)
xchord
(
2
,
irig
)
=
xmax
*
ones
(
size
(
irig
));
ychord
(
2
,
irig
)
=
m
(
irig
)
.*
xchord
(
2
,
irig
)
+
b
(
irig
);
end
%======== prepare output ======================================================
vangle
=
vangle
(
iact
);
%======== calculation of angular correction factors, if necessary =============
if
i_detec
==
2
&
exist
(
'angular_fact_2.mat'
)
==
2
disp
(
'loading angular_fact_2'
)
load
angular_fact_2
elseif
i_detec
==
1
&
exist
(
'angular_fact_1.mat'
)
==
2
disp
(
'loading angular_fact_1'
)
load
angular_fact_1
else
aomega
=
zeros
(
ndet
,
ncam
);
angfact
=
ones
(
ndet
,
ncam
);
for
l
=
1
:
sum
(
fans
)
% Z0X=abs(da(iact(l))*10)
% Z0Y=abs(da2(iact(l))*10)
% X0=ae(iact(l))*10 % back to mm, sorry about that...
% X0=X0*vorz(iact(l))
% B2=b2(iact(l))
% AOMEGA=etendue_n(b1,B2,b3x,b3y,Z0X,Z0Y,X0,cw);
b1x
=
0.8
;
b1y
=
6
;
b1z
=
0.02
;
b2x
=
10000000
;
b2y
=
b2
(
iact
(
l
));
b2z
=
0
;
z01
=
abs
(
da
(
iact
(
l
))
*
10
);
z02
=
abs
(
da2
(
iact
(
l
))
*
10
);
X0
=
ae
(
iact
(
l
))
*
10
*
vorz
(
iact
(
l
));
keyboard
AOMEGA
=
etendue_n2
(
b1x
,
b1y
,
b1z
,
b2x
,
b2y
,
b2z
,
z01
,
z02
,
X0
,
cw
);
aomega
(:,
iact
(
l
))
=
AOMEGA
(:,
1
);
end
indm
=
min
(
find
(
aomega
==
max
(
aomega
(:))));
aomegan
=
aomega
/
aomega
(
indm
);
nonz
=
find
(
aomega
);
angfact
(
nonz
)
=
ones
(
size
(
nonz
))
.
/
aomegan
(
nonz
);
angfact
=
round
(
1000
*
angfact
)/
1000
;
unitstring
=
'units aomega: mm^2 * sterad'
;
if
i_detec
==
1
save
angular_fact_1
angfact
aomega
unitstring
elseif
i_detec
==
2
save
angular_fact_2
angfact
aomega
unitstring
end
end
return
th
=
atan
(
diff
(
ychord
)
.
/
diff
(
xchord
));
thp
=
th
;
neg
=
find
(
thp
<
0
);
thp
(
neg
)
=
180
+
thp
(
neg
);
thdet
=
ones
(
1
,
20
*
sum
(
fans
));
for
k
=
1
:
sum
(
fans
)
thdet
((
k
-
1
)
*
20
+
1
:
k
*
20
)
=
vangle
(
k
)
*
ones
(
1
,
20
);
end
angles
=
thdet
-
thp
;
mist
=
find
(
angles
<
0
&
abs
(
angles
)
>
90
);
angles
(
mist
)
=
angles
(
mist
)
+
180
;
th_inc
=
angles
*
pi
/
180
;
% ---- correct for the edges of tcv ( some chords may be too long )
down
=
find
(
xcont
>
xedge
&
ycont
<-
yedge
);
up
=
find
(
xcont
>
xedge
&
ycont
>
yedge
);
cd
=
polyfit
(
xcont
(
down
),
ycont
(
down
),
1
);
cu
=
polyfit
(
xcont
(
up
),
ycont
(
up
),
1
);
iu1
=
find
(
xchord
(
1
,:)
>
xedge
&
ychord
(
1
,:)
>
0
&
dum_vangle
==-
90
);
if
~
isempty
(
iu1
)
xchord
(
1
,
iu1
)
=-
(
b
(
iu1
)
-
cu
(
2
))
.
/(
m
(
iu1
)
-
cu
(
1
)
+
eps
);
ychord
(
1
,
iu1
)
=
m
(
iu1
)
.*
xchord
(
1
,
iu1
)
+
b
(
iu1
);
end
iu2
=
find
(
xchord
(
2
,:)
>
xedge
&
ychord
(
2
,:)
>
0
&
ychord
(
1
,:)
&
...
.
dum_vangle
==-
90
);
if
~
isempty
(
iu2
)
xchord
(
2
,
iu2
)
=-
(
b
(
iu2
)
-
cu
(
2
))
.
/(
m
(
iu2
)
-
cu
(
1
)
+
eps
);
ychord
(
2
,
iu2
)
=
m
(
iu2
)
.*
xchord
(
2
,
iu2
)
+
b
(
iu2
);
end
id1
=
find
(
xchord
(
1
,:)
>
xedge
&
ychord
(
1
,:)
<
0
&
dum_vangle
==
90
);
if
~
isempty
(
id1
)
xchord
(
1
,
id1
)
=-
(
b
(
id1
)
-
cd
(
2
))
.
/(
m
(
id1
)
-
cd
(
1
)
+
eps
);
ychord
(
1
,
id1
)
=
m
(
id1
)
.*
xchord
(
1
,
id1
)
+
b
(
id1
);
end
id2
=
find
(
xchord
(
2
,:)
>
xedge
&
ychord
(
2
,:)
<
0
&
dum_vangle
==
90
);
if
~
isempty
(
id2
)
xchord
(
2
,
id2
)
=-
(
b
(
id2
)
-
cd
(
2
))
.
/(
m
(
id2
)
-
cd
(
1
)
+
eps
);
ychord
(
2
,
id2
)
=
m
(
id2
)
.*
xchord
(
2
,
id2
)
+
b
(
id2
);
end
ilow
=
find
(
ychord
(
1
,:)
<
ymin
);
ihig
=
find
(
ychord
(
1
,:)
>
ymax
);
ilef
=
find
(
xchord
(
1
,:)
<
xmin
);
irig
=
find
(
xchord
(
1
,:)
>
xmax
);
if
~
isempty
(
ilow
)
ychord
(
1
,
ilow
)
=
ymin
*
ones
(
size
(
ilow
));
xchord
(
1
,
ilow
)
=
ymin
.
/
m
(
ilow
)
-
b
(
ilow
)
.
/
m
(
ilow
);
end
if
~
isempty
(
ihig
)
ychord
(
1
,
ihig
)
=
ymax
*
ones
(
size
(
ihig
));
xchord
(
1
,
ihig
)
=
ymax
.
/
m
(
ihig
)
-
b
(
ihig
)
.
/
m
(
ihig
);
end
if
~
isempty
(
ilef
)
xchord
(
1
,
ilef
)
=
xmin
*
ones
(
size
(
ilef
));
ychord
(
1
,
ilef
)
=
m
(
ilef
)
*
xmin
+
b
(
ilef
);
end
if
~
isempty
(
irig
)
xchord
(
1
,
irig
)
=
xmax
*
ones
(
size
(
irig
));
ychord
(
1
,
irig
)
=
m
(
irig
)
*
xmax
+
b
(
irig
);
end
ilow
=
find
(
ychord
(
2
,:)
<
ymin
);
ihig
=
find
(
ychord
(
2
,:)
>
ymax
);
ilef
=
find
(
xchord
(
2
,:)
<
xmin
);
irig
=
find
(
xchord
(
2
,:)
>
xmax
);
if
~
isempty
(
ilow
)
ychord
(
2
,
ilow
)
=
ymin
*
ones
(
size
(
ilow
));
xchord
(
2
,
ilow
)
=
ymin
.
/
m
(
ilow
)
-
b
(
ilow
)
.
/
m
(
ilow
);
end
if
~
isempty
(
ihig
)
ychord
(
2
,
ihig
)
=
ymax
*
ones
(
size
(
ihig
));
xchord
(
2
,
ihig
)
=
ymax
.
/
m
(
ihig
)
-
b
(
ihig
)
.
/
m
(
ihig
);
end
if
~
isempty
(
ilef
)
xchord
(
2
,
ilef
)
=
xmin
*
ones
(
size
(
ilef
));
ychord
(
2
,
ilef
)
=
m
(
ilef
)
*
xmin
+
b
(
ilef
);
end
if
~
isempty
(
irig
)
xchord
(
2
,
irig
)
=
xmax
*
ones
(
size
(
irig
));
ychord
(
2
,
irig
)
=
m
(
irig
)
*
xmax
+
b
(
irig
);
end
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment