From cf480361ee9e36593479c8b773a582d7f1237ee6 Mon Sep 17 00:00:00 2001
From: Victor Poughon <victor.poughon@cnes.fr>
Date: Fri, 1 Mar 2019 10:55:47 +0100
Subject: [PATCH] DOC: migrate developer's guide to the cookbook

---
 .../Art/C++/CompositeExamplePipeline.png      | Bin 0 -> 15366 bytes
 .../Art/C++/CompositeFilterStages.png         | Bin 0 -> 15570 bytes
 .../Cookbook/Art/C++/DataPipeline.png         | Bin 0 -> 29314 bytes
 .../Art/C++/DataPipelineOneConnection.png     | Bin 0 -> 8416 bytes
 .../Cookbook/Art/C++/DataPipelineUpdate.png   | Bin 0 -> 28270 bytes
 .../Cookbook/Art/C++/IteratorFigure1.png      | Bin 0 -> 12168 bytes
 .../Art/C++/NeighborhoodIteratorFig1.png      | Bin 0 -> 22692 bytes
 .../Art/C++/NeighborhoodIteratorFig2.png      | Bin 0 -> 55215 bytes
 .../Cookbook/Scripts/migrate_sg_tex.py        |  62 ++
 .../Scripts/otbGenerateExamplesRstDoc.py      |   8 +-
 .../Scripts/otbGenerateWrappersRstDoc.py      |   4 +-
 Documentation/Cookbook/rst/C++.rst            |   8 +
 .../Cookbook/rst/C++/AddingNewModules.rst     | 326 +++++++
 Documentation/Cookbook/rst/C++/Filters.rst    | 589 ++++++++++++
 Documentation/Cookbook/rst/C++/Iterators.rst  | 624 ++++++++++++
 .../Cookbook/rst/C++/PersistentFilters.rst    | 258 +++++
 .../rst/C++/StreamingAndThreading.rst         |  68 ++
 .../Cookbook/rst/C++/SystemOverview.rst       | 358 +++++++
 .../Cookbook/rst/C++/WriteAnApplication.rst   | 383 ++++++++
 Documentation/Cookbook/rst/conf.py.in         |   6 +
 .../Cookbook/rst/templates/example.rst        |   2 +-
 .../SoftwareGuide/Latex/Applications.tex      |  17 -
 .../SoftwareGuide/Latex/CMakeLists.txt        |   4 -
 .../Latex/DataRepresentation.tex              |  80 --
 .../SoftwareGuide/Latex/Hyperspectral.tex     |   4 -
 .../SoftwareGuide/Latex/Iterators.tex         | 891 ------------------
 .../SoftwareGuide/Latex/Persistent.tex        | 262 -----
 .../SoftwareGuide/Latex/SoftwareGuide.tex     |  18 -
 .../Latex/StreamingAndThreading.tex           |  81 --
 .../SoftwareGuide/Latex/SystemOverview.tex    | 389 --------
 .../Latex/WriteACompositeFilter.tex           |  77 --
 .../SoftwareGuide/Latex/WriteAFilter.tex      | 584 ------------
 .../Latex/WriteAnApplication.tex              | 288 ------
 .../SoftwareGuide/Latex/WriteModules.tex      | 294 ------
 34 files changed, 2691 insertions(+), 2994 deletions(-)
 create mode 100644 Documentation/Cookbook/Art/C++/CompositeExamplePipeline.png
 create mode 100644 Documentation/Cookbook/Art/C++/CompositeFilterStages.png
 create mode 100644 Documentation/Cookbook/Art/C++/DataPipeline.png
 create mode 100644 Documentation/Cookbook/Art/C++/DataPipelineOneConnection.png
 create mode 100644 Documentation/Cookbook/Art/C++/DataPipelineUpdate.png
 create mode 100644 Documentation/Cookbook/Art/C++/IteratorFigure1.png
 create mode 100644 Documentation/Cookbook/Art/C++/NeighborhoodIteratorFig1.png
 create mode 100644 Documentation/Cookbook/Art/C++/NeighborhoodIteratorFig2.png
 create mode 100644 Documentation/Cookbook/Scripts/migrate_sg_tex.py
 create mode 100644 Documentation/Cookbook/rst/C++/AddingNewModules.rst
 create mode 100644 Documentation/Cookbook/rst/C++/Filters.rst
 create mode 100644 Documentation/Cookbook/rst/C++/Iterators.rst
 create mode 100644 Documentation/Cookbook/rst/C++/PersistentFilters.rst
 create mode 100644 Documentation/Cookbook/rst/C++/StreamingAndThreading.rst
 create mode 100644 Documentation/Cookbook/rst/C++/SystemOverview.rst
 create mode 100644 Documentation/Cookbook/rst/C++/WriteAnApplication.rst
 delete mode 100644 Documentation/SoftwareGuide/Latex/Applications.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/Hyperspectral.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/Iterators.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/Persistent.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/StreamingAndThreading.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/SystemOverview.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/WriteACompositeFilter.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/WriteAFilter.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/WriteAnApplication.tex
 delete mode 100644 Documentation/SoftwareGuide/Latex/WriteModules.tex

diff --git a/Documentation/Cookbook/Art/C++/CompositeExamplePipeline.png b/Documentation/Cookbook/Art/C++/CompositeExamplePipeline.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e27d3901b4f22a5ccb183abe15e8fb0fda962a8
GIT binary patch
literal 15366
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

literal 0
HcmV?d00001

diff --git a/Documentation/Cookbook/Art/C++/CompositeFilterStages.png b/Documentation/Cookbook/Art/C++/CompositeFilterStages.png
new file mode 100644
index 0000000000000000000000000000000000000000..776c86e88647dbac299ffddbbba9973e74eb7e30
GIT binary patch
literal 15570
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
Rj)MGAQ_@tdlDGK${{Zx||84*P

literal 0
HcmV?d00001

diff --git a/Documentation/Cookbook/Art/C++/DataPipeline.png b/Documentation/Cookbook/Art/C++/DataPipeline.png
new file mode 100644
index 0000000000000000000000000000000000000000..904402e6373b688cb31486632d38147039251b0a
GIT binary patch
literal 29314
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

literal 0
HcmV?d00001

diff --git a/Documentation/Cookbook/Art/C++/DataPipelineOneConnection.png b/Documentation/Cookbook/Art/C++/DataPipelineOneConnection.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c919ad3fad0664a75560bee9268948507cd3d1a
GIT binary patch
literal 8416
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
CS44>b

literal 0
HcmV?d00001

diff --git a/Documentation/Cookbook/Art/C++/DataPipelineUpdate.png b/Documentation/Cookbook/Art/C++/DataPipelineUpdate.png
new file mode 100644
index 0000000000000000000000000000000000000000..5031190104951ff6670448d73689bfcdda51189e
GIT binary patch
literal 28270
zcmY&<Wmucb7A{VTTOqi+LtEV4-HKZ&?i4641quYW7I$|j?heITpv5g%C=xu_P4_<M
z+<SlU@Z`(P`ex0tH*4mN(NtH!#vsE$KtRA&Qk2z3KtLKnKtSXGpuwN?nR`#c|GjWi
zH1b41z#01chnU8WLymwzgP<fUrR$6Mr`!C1QR(ac!WvN{7vIl&h?JRB`iIJln}NyN
zldms{i#zd%%!w;bpz?LcTne^Xa@B<{skTXl${F}C(~qQOiF`Uc(YntoJ5i-vTdTgb
z<6CAP<z7jn6<5XDW*McnJO*u(XgqE2j!&idspon^XKq3Tvq(vUb8qEkM+9=?;x6`P
zB%U8W4FiCP^cE;_A^1E<@_m46%Fu6%I3bg+|9kS!*OGlhzy9?7|3d+Ygw_Jc|Ib|b
zNE#H?xHYW*3j2>_JRV*j{(q$Z-&aY)1%9{C26Wx+eWjidOTJe+*+1@?2ohi_sZQhl
zyOMv#5=ZuZU9WZ4x@ylHkc`mF{Matpt0@xLojK4>^WQOXeGK^Z!@kK2Rwc?Ps-IO}
z1-PJ;CWJ7x23_z!Iy8QQk9$SqR?|OY_TL%T@{%dP>t5bD;@iwe3rJA=C3gxGgW9xF
zGHogkzU_*qb>>>;2M03W$OazWAMXz;0y2RKD8(s4oJjtLXCc1axP7h%u-00m@CObm
zA|Wi?H0)qggF>Fuqir#v`TMu-e!rZQIBQPnHflnC7ZLZoUTeL*7C=&wkqjJ}EJ)X{
z;F_7kAG3~U&Qef-u_1Gpv<(c{@k>fZq!=`tD=*~jp6o+NgnQXXJ9bH+9}RE{AJndc
z^LJDpyj2S?ARgw2VZKvs?i*vLF(C5foutu7immM(NpTESYP59x-Ka<`)Afvx#yB|u
zlBPgEqyJh1OQA1iYAX{v#xnLCubJZd7{K$9xIZFWI-udQhrRbJ3sdj|&36s3IQK&X
znM@e%81*<Up234_5);*D+@$WZ9s0W@^q@o|z_lIpp5xw9FNjs)srW{jD`w!LBleZw
zRhn!N1?}W+a2{qXzM%+GyDR0xB05Fd;(=>WW6=4?xNG3zx`pY}0*yuNxkIJD5GwY3
zC4tz|-409EbRO7q%;PXGy6%K`Eb{CvNd~~pcaL6$TUvZ^{8Nd*KCaNn^GDN+Np6}|
z?<)RciqKcaaebBecv}?U8eAG_Gq8N{MbWFrMZ1L>FSE#*$9%F4ufVTwI1J)#g{IPj
zyNfYK$(J<1(dON@&H#mt*vrZ;$X1(v8=sTo7d7{ptq*@FvV=A0-I!3=!r1v@!L5z!
zd+3rnQGsQ024iow{LUi0v!amwL^b_6=2#f3=a<rMAka@U@qJ(LH1DY)HMsThPkRc1
zOK=^3(%6~kx9E*fjF7FTj|khqP+WQ2M-4ASL2)`=4MTYXIUML+Mr7Vz-+v908;tOS
zOq#mRFe6uhGrOa|6o61V(Zi%sPoaoYxA|MPV5Y3NBHojR=EQTiM(Uj}z$zaOh@2#4
zs#K!-eGNsrITce$KrN=Q&stv8h$Gq^of{tH{`E6mv_^agzUK3-Ss*S=>pINl*&&7~
z^g!cx?>a82le@EP&_M6`_k{W4nIEox7lf9i#}Y~Gs8z3K5OYZuB08`(J?Y&XP&|6`
z*QDcUyYzasRz`54FkP3Wd1=&h212~VZ(O)fuaO|qlDP5Y9s!!8)ueRflRR%i5+#tC
zC;5E4hx&jJQqp`#I5YJ!?Nl}=JoMrc5D4d$JvP9&Ap{kA)RDU*C@mOeDYXI;5h{WD
z=Z8zXp(UK+wUI<JpR!OSGM+!-K%0P}O|*E<<`_<Dd`;Sc>BI!7FPONPqHiNpt>5l2
z=pd4^ACiNi(o9)R#&3Pql;J)>hHt?XD1)1Jxn)LzfYn2W<;T-iLr+P$h1>~4MycW-
zK=(V8>GnzshK9fjwqGZo@m0^@DoFY+)x@gB@MZD<4d2Cu9QjuZNJv$}-D%`cf8~ud
z0)g?1oouekZ?s1`_o{p`gNEbe1s=)m4MZ|G%-zkiLx!(yj7X4<>b*>a-Ew}tK`J<#
z@})lN?~iL!u`)uXCJC%O^Y)k`tAic4vx{v^0*G*pd~l?~`b^AB#p6_}<Zn+!+5Yfh
zF$gV=M+W~C5lNbTH?eerKQhWsliyJ^owdu?uM}SQP#CXEHunKM^OahhrK1coDm?!Q
z*fl925d_gG*h_g$mmkysQ!0%)Co_JUny3bKocEJ0wF5{#5`*<XqaGOP3X&FnVnbgz
zcGDls!TqVBDd?ywECY=|6xPTss=~9nmrU3_9RY<GhMiNJf#?#EhjJq?ee~$6X;^<U
zD~!ERKzWb}Yxcluoam-@T)Mq#MPWbX!`;?4zcM&IkZCK<*gkl5C~1sg>T8|oRm_Rk
z=i!Ai5_GZiO<bXl&yGh9<x=&6f!|=Ng;hV%`z<$8R&hPL8(k4;3^y3}u5a1j6laos
zpku>uP!}d+^<q-&fwn}+<95ayA0?fqIBEe9s}o=&BU;-)W%YvVY7Sh&B6ckxx4|H6
z_ZxK|&xHbs)Wvi(Te|u{;TENTsBu)tFe+jp2lnYqTY{W05g@pz<xT8&t*i~>4~Ynu
zERtAiPSQ<ZMN`c1kZgU=T<6^!7a>`T&cxQu^c7=<-*V||-h0d-2*0+NP}XmnO{I6W
zY=k?%n}2(=d{M#(*J)X-DA=vua!!5|Jf<WjW>&+e**GnTCIfiw2>R_@NZ}+Dg&-BA
z9E#_Po&OnAD5(5n0AqlzwgDUeu;&(nR>XsJ*x=FU%AZO<`Bexjg*W$78NbCh20E2j
z@##!s3N54W+lMg(Z)>WH!-fj6(W>y5!zQws(A!NlecYA}%)rq_-FH$Fhr}uGdar(e
zdq?4_4=Df6-+Er{5Llars(mY`!ME`<JfEX(2A&C6@Me(_2*T4U&clV)qAsOsA&{6@
z-9=9}QQx+(7lbhp@t{Onj#E4-4rq6V5X&)LF)o*bOj8!cab@Z%cP3C*-z!H)e7WzL
z>Be<pc%Ctu1(`FY96eGZurdHb=xPC&xz<s2X{UZ_ZqnEloS(*fYJk=bB)uW#UA9Sa
z>bk2aQSk+YZ@^yB+V!T;Xga1G4@rxRX3DHQDV>PiIR~iLevH{158jda+!36Frer1i
z8624{^JP+8fx0jlpXo5)dIu_9VtlPJzxjvsa4pH&ev4uB`vQTr9xyGOobKu19pEiL
zZq*wCTm&>(;j45OEM(!E9mIy0?+&TjxurY|{iX9TCRuP*p3`b2%T-3=lw|Fd%CG}z
zZ_<`^c4Vt_L3M<@iZdRT`f3~z+`sf)gS@c)ED}c+^6v3`VXzU&oSo{YngqAQ)VM1-
z8JZ&+@pn#brfOyrAFF}}^^x%R2Qpd@mEIwEgzX&1G?1zJv%IT*FABiz_r0C7Jj@>@
zs-`)Ai>r;tz*<er^mA19S<!yKHF7xfnyAV8=+!c*v(wTSIaH%u8z-8<sfR=J=8t39
z5<Elz89Cqi5%KgQ=TP<;yk(QdxTE(%2#8w{0SU3Q$v=tX2-*ZIK$&(0<26Qb=C7B;
z^WRhsFuUBP6-n;2xTXzm(Aa3*BJv(g>bSX!PYhm<XN&SqzmyxcFp^ppKB%4cB)x}z
za4jUmE>q>mD>9e@MIDS)p_+wCa&QpJ&@2hmr2z5D4US^a`SiP$deD+x6!0zkLjZn*
zd=!R~pVZb-1`MsTN2Q^Blv{@a5~#(bxJ*|Z9~{W5qVb7unXGYdlIE1`U7n?;xjozY
z<j=4$iVSjemxLq}_vgH^N)~-}A31`Og-ESTywHT%P*SX4J-k0tqx5o3{#Yq*ni|hB
zxD2H1$_~AtDU9n1`xMYFgNZWfhp%~GLM{Etb#hKz?Gx$%tL!fsq`q#KtbH}q8M#Ru
z6uwVbd!n8O7kdiecUUElLmrgV;kxq)q}GCTO@W<R5P^x8JC3QZqb0y`eEdCpt)GUo
zpvL|*G}Q*Y<D!_n#BHMa2yGRE@^&ToKa7|)0!ntIw7r~!y$zy9I*y(5aHLm~?&%V#
z!we@6tMD-D0{>vH;}3xMQ3z9i3FCRJwp~90e$NPx$E{gyJd_7mDh^=8H828bQ<&3f
zd1^~>i+{cwAmFG2s|0~~Yd=Mbju>K42hfk`r+`6BN%wQx%vsFzBken%7Q#b`3&Lw#
z2boZWgUE!vC<S^4PWooPUCYpX>rBRzn71HHFL@;JuAalwe6%pMxIqIz*@cem^d|jv
z_w-_y5q3f6A*KL94>f9A)hlv^&{@WI++mb3fu9y*HeoR+)P2%VJkodV%rwg5&aMq9
zsuTXNtV|$n)hfG|I4??fto+_CRO{JN$wjbJ0w+CwClQuHJr$@>!QM>CEBbg=%Rko|
z(9yvCo*{^=#c#QW_^pp0=u)gHO1Oto1>V~ErQ33-B_?RK6RPkpy`BkJZ-o60j(~05
zr8LxNyfG9eCbo@kvfTp2DaUyZZtI!<cDKI1ibTT`sKh7N4Kn0AWD)UD74H)1i#FsI
zVr`-4V05yU>y6yC45dgrX2qSynO7qRU!6pn7}}4W>VWStDVe!R`Ky&5UfzyS6_n|V
zOQ5SJYG6OSfa<LA-3{Ok2zwSY*k965CgF_*X7B5($`7=S66fskD+~l;jDw`(Jog_J
zQ48_Uk3v7~JgUI`s^nnoLn?O!a^rak+Q~xiyO(e9dhvQ2#uRsZzQU@y<e7(TibNIj
z5OYHx=vzkPmr^={HJ)&Hfxa$BPrK*=hjFzU;Ci6U?F^R@vm1&A;3xCEGw%o>E#aI|
zoS?`=bfbP(tm+%<-FJOm_1raJCXYW2FvAy=AZ(<@dS51h)c(k;v}N>3lN*@N^xUPq
z41+)WNND|<z)WN)iUx}yk^95?`Yg48#kpGvA%C={L{$qNW&%(XqCYW=T^;x~{Vacm
z&nQ2z`6*N>ueoD@g&G=C&g&a6EB})SC-zr{$2V1khyg@84qAN+rQRqCZmZ2{=QrtF
zJWr{v6UkEYwt*bazm>SiWixrxU`5lJn#+8wc%@90+__)9t!bVc74w>=C_?*(46(xy
zv0@oU>v1}zRGVpc(YbOm(YeB3q!-UDgbLMa^D!CbS=GF;@q2B4TlIj|Whi2gYv`6>
z6{9U)66spTXt<TtMKSD9<7L3u9xnr;O;!yczF$<d#iqw5<XMIuIPRqFX)!>i$<fJq
zKw)R@gq+J%0nt7{v~oFB`GnYYFP&4hI8S5?v`Gs)$e9<US&x5#)_asABZ>zZfV_7k
zQt$SnYOfkiZ(+ki%g8T8=5yYp)aQhETbgEg{Lmd-r}`7`&jT{Qs)7wa_x+|0i%R=w
z9i!hfI)tWVEHaVc7J>VF8Oj?~Ai<NVbsAAo|I1r~K)((5Wx_2vUGT(wxhE;l{-8qC
z2H3OuQ{66$U5N&%-B|m4Tx<M!*!Z~>qcs&_kCKL$r|D=T$#OzQ*Y_^lN_D@*xl!NR
zv%Ro4zHZd|!s$Bn`JZ=olJuDafi}KvPaIKl`)jplJxd_4ZoL+zG+MdJQEErG_{+8F
zk|>^#u`}KU4UYhn#bxF_e+}^Gpg6tj1F%j|bKTF8>v0Wtzw23bYw77ena6qtmcu&F
zBWxryaFORWub@_5S}-S$@!KS-K-w+7&7dJ#Y`M+>?IjU!rml!_`vW!7cBbysQqY08
za<8ti1)@t)iBY<r!#<l`v!@#+>LBkVOHN@e$$d2`VO@Jk2@KpWE#dP>JToG+V7<Rt
z{uvy4gpq3xK5>YyG^U#MGCR7xu03;X<EF6E6no((`m&Ubq%O<ShPlEHJlGWe;Pz4N
z6%nqqYCv_PR76owedFTen<Le8I;S;i>9;pK;ZusPOM%h6D1vF++wQ5C^FmR!2#f@Q
zXJ*Ak7c^5Jw}=l@6-r{J@pec`p0#K6)R|O8m+FUnK%QkCdESjuR&-bHQ~m~~7Xi`x
zxR15|pD6jw%f!^pgH>L(GIs4H?QE$s@4cQm1)L4nYONqyFjBRv2P+KQcAsbb6!Pv(
z-WDL%$*f;b05jc0pzgX{7kWq%_$oGe?NK;R3iuSTAf~zG{cT<db>_8ATbe<l9Y5pF
ztr)!DNu1ZtW!ZRtpK}vw$<g`it#kp(9LbV`-2m+|*d*xH^<BvaSXpg=|1ZRxG^9T;
z`Os6#7<IwciAe%pGsg{mKZtjr$9MicJceD$Lk06VSnuW4sTE$nONI5(TTsu<0vT*g
zo6Rj2SOu-Ea@!c=Jv)mOq~>cwzA1ON9L-05krhuwnTb1Be&Omto~cGUqOY4NN#)LH
zL?-ezr8onUti)yfHf<NeaJR4OTl(s=m(?G3WW{Rl1jp)t#3=JI#^kK~Mc`xX<v|tq
z?)<KTUx<e2zR#K~2WGCaHCB#H!eYR6dy@NutUC$+A!I-bY`ZP}HTcWDl)+iin$EiF
zrLXm%;Y8+_<qJbnw#V^!k<mq^!<*dW=0mz*Ca}WmAk8HYRmC4~TqhC)l<hL&Uci5M
zhPFM+fgmziICk7ih8RwG)}aFkXsml<i^^)mNe$4GG>{ie6DN#-m=VMcuIF&ieP<<{
zTO*zJ!NGzJukPgJlI_<J61d}urt0-a57m!}JN-8j<8$W?$~b-iX&SCwD%I-BPn8$1
z6!JyOQa#Rsdlg0k+!k3XzuD+5s=<8m4o2$5#KNOx8vTNPGD~)zoKEclgioiMG!U*l
znF11rjk+lba_91%Yp0_w_oLX@o!Mcb>Ke?=$YA2)w)2{*fmB!33HMq^w!6E>&NQ#L
z_HwF_C8KKA@dxD$t`3EbsA8!8!$I<>0f29&u_@Ua{47v1`b;|-flc8StOx3W_U_*c
zn>LgWR9+c`g<@EDuk4D~r>J**vJx}9+rmbHH$psIn_v4eas^H|Q61Db_%vv&vPLF7
zc@Zr4*(~m14=Z#$Qwkkz=k3z(Z@pJofc>m(e#x~MGVKwVd0FPFdD3)g2cDEodic=F
z7-<<o=d=*)g@a$(Ga)`RnC+&Qb0GRq+4j@%Yw%CM9t~sWvqjIk(Z^!X;*5*q5>K2-
z+4!!itM9L$<Dsc{6dtt?zAj-9`JSj^zp1wQl+cG6@E6#HL}IYr{o-Ta9Rmb{j0q-x
ztn)O{7F_1O(rP`NH5zx0n-fiWU&UGtN*dK#R?hmcabXQ9zWm`?k|6HfF_tHe&@RsE
z5-GmGU!x&3f>HGFELmGYeNMr)cAAj3Pw~S~#e!kH3D}A;pe_1IkEu*_nU+Jjj$ZC?
zT$t+JmZ2{mhXj`De&W2e59mQ*oPS9yeaEJPnsJVhsSswzG-VO0`{y3Y_bC04_0sd0
z$P!<L4cPXMk&PNR=rSl9a!CP0cd5QuEi>nH<BhSbIe1Ud!D5<A?nJL37H;4#QV;1F
z@E+IlI+<`g5KH@N$Kr~&u4B~jPF=s4Iwj#*@q~Nq_0@haLoml!P2HlN*?It<`f8F$
zj3RZe6!43o_}qKeTGoL@Gm(v1HZ12BRoBlu(+%Ea$wAhJTYwK1ofDflEk}aWCD5W1
z-&{)}kh{a_)cYHcGpcz=zzBgp=_ABL?XkRe@Rao-QK0(jwy8%Q0kKk<*H*g=a~B%g
zm~wWk?DXem!7mFa1(KL{-f>Et6#^Ry%k1wjSUNr)t#2e1_NK2aoRiu-N99ItU(I(a
zlW%(wXqj1yCLYY#e}^cgx{NX4BFzb)cXyDWiSAZFGVug<HT@n9bFM@xqFcS<UWZ`i
z@5UT=1d~=?i)ik@J^o>~Cq7NHW|uX|GBH;R7QT1ON*b_YJy{`n5{W!LD#AN9vuCAT
zb`bTXp)fs6XUo{<W#v?I^6M21u7HJ{U8l{w<XLvu5X2F{M}d0cOHVf@1}^IxB`<Zf
z(QpbaJN<TnIPdmy(q9WccZv;g@QoR_>sAMD)iIa7XQe{*CCjI1s+vY`I*|$U1)g9m
zv3F~l9sa?}8)Von^SqRdk`Yla=Q+q+86f#AyCPU7YOrVN7g29PX%#3GZlI?ijQ%ZH
zfor*0T?CwGkiBt=Rq&M*ok~3B{Ru|!!J`SzV)qE_t}+h!$DTFr(dnx6z2$6KP>)u7
z>sZXg`<-(<++^~I%$AZ0>Vq*9agOkBUOBMO4`Bg6TxrdRV%`+39LjV8CSM0u)uMZ=
z8q4^s^<t$x%gWlzQBxLr7SDNMaeO(6KfI|S*vSII60&@B-Zqafikrxf31c_B<Ns}I
zwaV0tpWA=s?~0M980%s(HV5)uzcgE_uD5&<@GI4KjhnEf;{)XNOmVB=ga}N<y8B2R
zSlrX6<zgK-esdp}LcT+KzD%^(t)4UCi$R`JCjU5DueKj}mC&|JvhO}+k0PI%vaehv
zE)-zVnr2pPOr;lGeW6fTV`7H=peOu*kC%RG&cf!}>#KtQr<GyiIp*QHa24;)Iqi?`
zOd+j*4g&|OowL%uFejpUjhy&s`{l~paG?JI6>gm&byG`_?u~EXyaj;7QmJnFA;(kb
z0idu0YB4c(421?R3eA<jQ2AmC^WMw*L1VrMO2Rpm_fzjcW8(p{Y;E<86PMby>Ess0
zQrw0JL7=m^tMeUA0hGV~2tS33cd)COCAhYPi@V=o7d^ZWzTzuHw>_=KT`S|%xlXCA
zIA&w-7?YzeSTB^=R(RBEb%<xQS1PRYkOI!<_sVtad(-v$|2p{EjCrDG56SMDr5$ji
z?!6Qp+c&)_nu($sQZs}YE){9nMHacDQl-Y*p<Kz|HkumTlYiLiJQV}Wt>-ve+^BVO
z=0an|Rmr1+$ej@=`p_tzVoWSn_iy)|{kFLgm-=UPhGSq{kVs+I<5*~!Syk)r5}lRq
zY&$kj<4lv%1Keg23SYF+19ImtZaLO*Cm%pM1yKW961!5AS{W7JNp3zK5^Z@3DaO8<
z6j!?YcBB$iv5|W2Nw#aOK@T%b0}Vt>zbI2wc-mF#PUb#uV^YN^vyQaGXRfDlx-?zp
zJ9pRX!Dj}ortCQPYqh1#%L^Q(@;$bjIA|b)p6dpvuI@am8>zq4PUHwr?g|8E<i2W*
z2NgP^CI4jgb_(d5%tPxuPg24!b7+R{6iC6q2xRsKva&b!PUKtVC`v<h^HWbE7X~I1
zQpijNx;T{MQG9u6t1Q7(Xy{_QQLnVYsKlb1u#Vo+`e2n41)($YUD!eCtBS8hVtqb`
z`Ca`HKDq=is1}<ws74l0>fU=w{87H4xS7+dtzMaa(LTTztry6bk<g=cHO`_SR$VLL
z7USl=+e6XeRFZaa*hPK#Goe_aqolW%+?#7Kd&k6ouGA-p!cTQARl;{+<whJ?D6qFh
z?2zga92KxDN)cG@lw!IctY#T(e$tzSIiPzb=azidr1dOwP9LPMptTaCgO5X5`2sW@
zzR74+<hbks0m_)P=j_;UQQI$#wzJiqM4sdb%e50xJ$&OyF+b=`BiW)4TCBKft8Qx+
zIHQ^I7cRiuag)RFrt(b(rl4)HJ$k7x7spBndbNxKzFv-<mwMsw)=ubecVAvOvI(XU
z*3o$j`)#Gkk=Ycpb~HVN8<-!<EH}^QMp09LNk!T!{&CJj!vz)YEPXY`{GgQJ9pgQ9
zAXsdWk#omhv&5#uVQty;Y?v`pHR_28e)tw^z-AF@obn*^GJPqu`KwH%kF4>ELiA{3
zM6mvefk$uBJ;Wnesw3%SBg2|*kiA7B^=tO*Vu^0|Y4cIVSt>is41>A%fSvsO$kNk{
z+;So|pjR)$^k%Yo;-Z6UHO0JW+O~^7M~7NeXY~DwHBo5ClTN$&WP_+xxyf<#nQ_O=
zt(LMMb`~j{C@!hSIvxoBh8t4c;w+bspAZ+!>ypSpNTs+gVltavV%*$c!z+J7;}JNb
zl-$Xsu*~bTozW`FK+V<Ybwm{EWfN!PH-=``5ya6=bwD*K#xw0CivIaF`<g0)p0Y$K
z=n97O*w2zKlK8am@iNy}Q9K<vR$0;bFpS?BBX_pa6GvtBS@Q%}NGNO;hZOhe^J*^-
z&!Z!TM!NwsQGkoIU1#0MXt*eVEEoe1yMrxZVD`Yi4cBXWxm8=6IaNZxWU08~tDZuJ
z1a@bD1$35PVxEIqvcriu@-!#d6C>sPk<fl1+|KDR!0mW~V+kMF%Y8%M9_(O{z5Ez#
z(&^G^lP{n7P#nr+8h<0xx$N6_tqObA67;%Hqp;r$GCs*mx>xWZrk_O*4KA0I`T~oP
z&<Da!>vrGw-X~hgRV~JNt~21(cVpwU*x~FT2ZDO86+GftpTDgJvkAPE>Q(=3ogH@E
zK%A*082o-v*nsIcuw<TfXZ#9{m5Tr-y${R=_Ew#@w@LV#aP8m-Zfui$UU@^Tnf{)<
zX2{Ss!S0DVYzx8kZTLG;YgMeLP@H0kRN!;g<(C1^f|jn)4tKQ|W%5DQSfETU>Z=DD
z1>^v>QE$_>sN(65e#?(lpX8W}`-9mPit^nfWush<81PF)ai)9YM3X!xW{&+*K_3;f
zbOkmO#HT{6Td8uMdXqO!$GaJq44#&95edhM(7Ksq#ePr_aY&r4>o82<pjk+X1aOUR
z_E$~mDqu`9FfHe*bIRuvhDzwK*fUV(G~jeq_+aqnbMiNU6~C6K{Q%i7J@>#1kc1x2
zb^_h&$60Jj{1Md4qP%mbRT|vSH=WRD%Jz0eQFa(8rTJy9+|Z7UWp3=y8u~rv@SkLH
zdmPG)PAIv@sVC~5npAUa^hZ->;EGRtR-9$vfLw>Mf~Cf9*GV~Qx>F!w1v3+;34iD<
zKjl-0$p$Y}f_|M0`~^d8e-9$JIN;=U#)>S>oH|XdsPL|)3&Vy}^>ORThfBsQdy$S+
z+_D}3%~x5py_@@`9D@#suS>X`?$xj=!zqI5n3+7jTse_)5B%?4fN|aNE9q|NSpjHS
zSj-#hI{w&dVqWm)1|J%@#=L20sp~R<d98*kYL)`+bA;5{J8u|v2<FJqOZEyWt>}Mc
z;$HS{wqF+TlcAv@%}aHDyY>9}0r11%DV!2fsj6m1S1XNs26aq6j{HEO>)=D@8J$U0
zq|Qw#Q}_t$0zSAm%Y7g*;@)s6>H&RV7%^X#ydW?~^?eoFg|+RNHtr&Q(<QR$`<=iM
z)sYsNc+O^>Win^4Z~(+#rg&o`F{n4mt{D=4KRo<g=IJ{dY;s$3bjkTrJX)SE+>@=_
zYv1yvP3DLaJu7MzH*^kcd10{i`!nOV<mWp;8D^Ak`TW`aSmMKd@rNUxib30Kjhqj=
zH_FVSuSlI-lruh*(+j1~%=)ApWJg`~W^;d_Jh**s-#-2_rywlg9R_cC6kd-JD+h%1
zYZr)kq$a&lZ!bFTd}>BEooua9iN${}i%_*tu}C5#=+`;ghlO7%@hlDcQ~G83)yyC9
z$()0koVp9YMRqLsCtF)9(wVOUB`cgl9ECHxzSGA9V>lZOlE8f$_%@}n<FoT<ZTY?t
zPeI;5_mE-C-4eY~EK(~^c|$79^{s^emxQ(C-A4LTvup0}W|D`ua+db7n~EYU#;LfE
zOe2x;ybX+6M~+KvHxlfs8x75jU;RGzrY%Gf@$JNBEjcO64JJ0u0rD0n@UTO!G}Ulf
zh54Gq$yjWoBD}{v*LM5IWa@B*PSS!6KJ9m8xZBJYJ7=ru_I5cqkP8Z2Y70^&2BPUu
z(F9x5d)%N3p1s>9lD@aXW{5!C?h9Gn4>dR}Ju8;V`}L92HZ4<wI94*~la#zV-=R*Y
zjr59Kgh0K%q2iBTrcqB)=n50oZv03BowUCh`*&X^l5cM`UVeI7l>I4y+-kzg^_buu
zBjJ`gm`RrD1xk@~XWvPhSiVFTlAArz*=CpBo$+ktiu=C#dqF-5G<hX@-J|~~?R2*!
zo%>^pMW<@_O@Es*IRtCv%UG^JD)kQQ4$>p)s`d7GlH<tRXtB&XeF9!$z?7T4uT!7I
z0w^HKu|i40%vkcX@0h`JeHwcPI?;eZlW4i2PpCI(;UKZet0|hH27IB#H_={(DL?XF
z>|Sm!px+fo)quRr-pv3GM`hq!a|=H%eH@RzMBj1U?HO~n=Ii*QEen$dJPWn=GT+#>
zoCTXNdBHYn?!KA5<9Kgye&&KLGJ<`W?jt&PK8sG6-cTC)4(m1Z*H1_6kK+no!#bz~
zJ2=O_Jdn~fG*c}vf<9$=6>Xe<9}T7@nK>Lwu=}tP`Vbf?rbI0-bokxZZ7g$wpE+ik
zV@KudtN18qOY%q0#~V^+`lninKGI4;!#T9O@*WO>!&!5Qik3OdyJ3Y7_M_OQ@M0J9
z6)Xm_&2=x@YSTmiJSvE*(N^WzhRXG1Q;v_kHk#Lv)_Sjb!a*nMci(S#t1)@5A3?tq
zmq&~!HK?rqo+s9FC4I5`hVHlmG#@!KT3x-mkpOX!kn&2J-JH$AH0#v8KXuQ2q{lvS
zJ;pV`lo9q)gn|SY%z9etS2ZBn-V9V7-X)YUJxijeTnc+xvxAkkZ$}O8%;rK9T7Ojh
zjztr)dM2bge|^-@8ZO~t>Ye#ODRVf5AoH>Edb>I*3)*t|u5ZhaD9~ytsYltg%+2=q
z?r8TBsph&dr2Q;9NWAJg>8ez`?xsd0GTx_w_uXZDu%aONyKmn`^HOG|+fPjAG{Lz&
zQu5XjlsjJe;WnvT-3+y-RrY~o7ae~+>bbxHr}z{L+5+=r?!Z?t;vi8^e~9jOrSDJt
zl)G0xkZ7)5EwN5-^-OIAD935Wjb`fY0rH!Lw(5)7EFQsmT9bni^8uaFT0VE&9QquX
zyEWE#doA(HqqQKF?0}$QgM=7Ve$<7zlJ{?9<bqSUC1$&q?gFl(Oj>Vr6Ajo%7Qvia
zKq_Ut`H99vJKwILU;f~Nk6!huREHn7h65x2Oa-eH5Pr0wBr$rvm&}4>pi}Et{Qh2C
zA`wm-j;g{(w(=m}mdyv6=#!N0-EFb%N~_SF4Ls3O=voJ-9q9;FpQu^tyzMY>ep6Ln
zMYJ`t87CF-Ix05ZL_hb3ozdIWi?STPQuPjM<)!r<UHt2OXMxEP0r@Y=MK^6Gdt#TO
zkco?z3Xkd1#xl5A4td~uDr1!hrhp!)xVa|%(5`_@FNIv5)+TMWt7#`v?NAN}Z7-u@
z%ieZsNvdBrUQ4iH%a}Z#=84eP5gm~fGcJYfkF?!bJn=(@PohorCMAq4Cf}5b87baG
zH$0I3^bIGhOIb-ajOd-1l*D=098>e+nGPchlQ*(a8GVeYINE0f2Ch*u)?bPurOo%Z
z4X_AwFPf9R@pIAI|M`q81Y15D)wksF^Q)>YV9V-Hah@$7A`vz87_CLWx<dL-&+{ZL
zTja#H8%ooeX#EJwX1q*Ln#rD=FBNeVY9Pi<e{iyfo?UN_@yF#up%a+`FMwj{>Yual
zwDrd(e@{$gvPIeEzAmYjvi+#5m||NB*o74ZN(HP$;C2NYfEprR%yGmMI!78eJ`?kn
z*0<AJGY+29Jkm;NdOH|lAi-P0nttUwJ=6^xCAT%;G2Ct%+@_|+bkrhloo^n8ML(eH
z1k)8&4_%c<tV<iy+pMeJs8-rz2%{)Tbx@(Y2p*5~{*#ezK<Z%e$Dxd!9kcn|R7GYq
zcP2%{4e}b36zy9C+s}<q_brBX6dSSI9o+Pz^HE?x-<n)Cj%1%!LL34iXRZ(sXJ^nq
zm)hjHhhnnz>1De_dN|%aXJ|-f>??vDO>qg)tV8H9b57>;F^B@;`=uhKcE-;N3U8HB
z(@V+U-zp<i0xpLQI%E4}!4^V9xbLWzRm0L5?6Xu{exxQK#<Z>}Z0j*w`qegYor!Vb
zmArIp-dJKJwq4IZ$5JgeP(YIwKeF^tT5qOY?~-h7AW)NUoW8snxmrrm@<Nf*)n698
z3eh!=H8sn<F$lzm@Cwf@zV|dtuop@Bs+dDkVZUE1905cZ*v{&23RBv5-Sx$xIfjPx
zA3C|Rb1j^mYN80o@WxbVAC6&FzCwxsO<|4Kg>ju{ey=;iawJ9;+C^02H#)k7dUW>=
zpia^ZAqM#VNdqit<7xTTf7#01lwRFqvYd;I+xBHt3rr*QHq*;k%CRM4QVrN9$5>1*
z6Dx|5g$eW2H{7@^=jkqOj(Tz{o_gl|$e?*GRqm&5h5w-MLV#qZjRFO6RGOL-A3_bl
zapJ0-(FRK?42%vshK=^@i8j#>8qIb>)12^|dRL<iDX?&AOAA=qDmVD4^kE~ZN_;yb
z&sH9A%rK%wtjC9p-ef|C6pout$iaf8nfnJ#lTbukpdD17zgaGV_7Uxo29@v!toaB)
zjYc1h{EOqdCFAHTy5M7mxUrGAw-|bXi|<ov?c3%2MqWkUesV`1D`+1>MQXh)bFAhx
zHw-Vh0E1LzMv0R7yjAKdjuErFH*x1aREc1iV7FkO&Dwv2b^RFT=E8scgMyHF%-t}_
z{v!PaUB2+=XVGW@T@r0V2v4xZAj&eIHA*e^LJp`}&`Ba0kUmW+>HBghJflX*Du1>F
zYyv13r@>ClPiVsV`PCd^!^0<TIDax0st2h>7n-2Mxin9sRAH`ry!An7d=(}Bm7~L!
zQSk%QZmPAeR!1}Dd{Dk8Op`UnH|3jKc(jH#hEwJxFMjDWx4f=64Bn+U!pw4})_>$l
z@=u4v$B_I1wH)0xQJ)kZY1n=#DHlJ`Xchsf@>Nj#&TKPfvn@H;^6=smd&u-54fih0
zCS{#lNxe&aGyxgNc>>)^j`(DM@f*c}Cj0tn%(|(}<XLanBkL{ChL!<amW_Q$*DvG)
z3VOe^DjP+ji_Gv;l+4V_zq11;PS=%uG<4TXor~xR51BM1KA0rZIAd3x%>$zVTqTKr
zw0Z`j<Aa_i^Mt<F=5kfpU1YrBq=s!<r=@xD)i!!1eIrTaNk8y)dI=~?T+Jwtx&aIF
zxkMzz!0I{hLLIGBm2$E^X}?X%`eP;cj(8Y3wm)`Swd`A5M95i5%DfS600r#`Z)}UV
zp#>4r8$7gS8baaa9S6I+c5bLaX%|Lu9dt7aFpWWY_z_EGd1U~p;QN$3^djVH2FPYL
z@U7X7EAU1dRKnlnP&MzDSRU|mYpK#;V(KDC++P9oq}&ZnPY1hK1*KO!6veoe%!I#&
z^g^tUn4$a$_yCm*M{8mpiSmOX!=$26sb$}_apC&RtqX_u`1}vN=a3ZmwW}sHe4Ik`
z^zp*_%l<-Kc{R%jl`mbd*NmI;-1_<C?)&|xmgU_BkiNa2Zz!7H85FAaHXbqtmb|Fo
z`4TbA0wIjJP4hB4Hm0-e0YYv-Zw%M;vuOL9TYj$VZt%8BuLE5hSbmrvjsgoZUsdBU
zr+usk2#jc+Va2+|Rj3O4GWpNb;w>^25$q6%daDXM$jSdiP>~*8W);5o6cXmqXBRhf
zw<E@*ZBbW=3e*5ek!Je>rlERum#wOR(A85Hu=s>zr%#ybhV=Xi$v~Mph_*mgc7_dp
zhK(u}Jr^m_n7Njm*%T%?IHfnr+sgFkLa_f9qaBl;=my9Pv?g^7=c)4;_<E1A!z|AT
zQ&Z*g`f^q<(}d!sH+jU;WlJ7fgummje>C-~>(%D2JQ*eFz-W~O$AoOvhj##e%8w26
zv-XF5n_-&QnUXxfdp(?TLwN-nSot!2peGwj79y4<4}|_Q=W^*9dnP_M;Plf8s#FM1
zy{F8PYy0tPxW#tDYmg~&Jzdcx<-_OO4$+$3eL1CQ+LOd>ISFQsSZIKUPB;I%?d08S
zd~1MnMyr}}sd?(ocmh=UJXKy5?Zq2otveR>$836)LcuUOQ3)32$FCmN_-3NLnxve_
z_`W)nRu-u{D6R)nSEQziGDPLV&C|>q^|6g`Eb~i{TZA*GC3{Pw$BAg5Q5EH<OE`^Z
zL_m(y5-Iq*4Jl;WxgBrJVTZ4}nth89arQiGb>F||yhI`pN7{J3h=W(lE{Dl7(E%NO
z*m^TgaMfB8%!zG3N*$8uG9=eql=SX!kU!~Epbw3gwr8lnR}63LPgLt?+pN}z*w(5a
z49)HoC|~FYiW4CQ4)-q+_eUxiZniMN=>2lRD39$Uy%iJ(%A~U!lPV}-CDceMv?I<(
zdpJ_)`TVml1QmeQDls_m=3Zv$?`8LE2S!2+{jfxn)UUdf5W6#T=;xHqF#~^KKMqY%
zbo>5l`+>$Mu1*lTy52zZ<HY`(lyFg=n)WHJGMLXrO%^=EA2kj!Qk0s0wg%(U?zI!#
zu1It6aO}|J`^c|!Bo=kw(B>w&$Jx1mPjYv5T;)V2+TS&xrf)YTi~GFEx~3?SE3qIL
zeDKTc-R{K|9gm+?SCzxhg7APh-tP;)dDojN;kM6&BdBm|ixXLucHeTBbH|=+Fw!U9
zlM%1hC!;Bed`a^f_iat9p&7K~#m#OAK_`75>k>@w_6h|9$#hRj#5tJ<@AcYXg3otf
zqYR(`dobZT21Z^sLg;V8oj_h~bk|1MwUWzZ<xl41L0~8&?W|-nty4f3R5jet&?{Yc
zw<x_N6iWu!lW2XY__o7c7d5*LUl0+=Z}kf3k5rvA`~;{@2QJa-MA?cJaGHBt1URGk
z(B$`o+XC467H!ryC6oQax5e~PrBiI^rgpQJ7B@%R$Ll5QIY<y&K8ibZ*kYb}Kzv^?
z^7Br&9N=_D>>cxElZUD%s|=uPeL5Rn+Ki{3$uT~)-p_NlG$Q#p;}N$swK*WWZEXB0
zGR$@kP)=QsiA7!SuQXfe=)WEb7jw0bBXau5=}%cq2<+t$uy87>g5n#X;DPvR*q4hR
z{O*r!>a#F7RfWM&q1E)25FQ@!Uy?#!Dx8OqtL<z^LSK)BB1=I#mME{tx2U5?A7-1y
z2&AA*YT(={7B@?KIw1ESC3#3iC5Xcey|u#Mvo1W9jp)7>PCTFc%SzzUf|DGW-}35D
z0;*qxs;0Ag1Z?5VbtUcqks7ej{ctLRhsEDJwuBwX`%}myoMDR5T+tR_DqO}m7d^OZ
z(d-ueWm;IggL4XIst2lT@eRq5P~C^gCX=x^T1#w+6_p1ju4uzbZuF86ib<g4#K%%Y
zor<Gn|B@GY-2cAZOiF(S01Vv%M5``kynfKGc&PGt_7;21>HZ#;66ViiPW}(4qYneF
zvY8ZPXSBS<AHZ%2*>Uvw-g1N6U3_0Vo~FcQEzv&G#@)62X3aV+2~{EvI|&3pV)m9~
z22hQIm@fZ|udBo1Ln!kn1eM%dpFS%Trr5rgaR(p&;Z;kGgm%wYNX$|+uJQWM`6mp1
zB82cwW<#NZ#9hIN>3NJ$x>D&3)Pfd{>c*K@bZavIrI!HVcll^QeIGEFE*S1bm5JJw
zslEKZ<GW7Bu84~vAaa+CZB}SCZ1s>YBF2wv!7r}<LmP>U3{l)D^U&B0;-Xl}OZPi~
zeOje&&)WsuCqwwAdiIs~b18ydXMEy5T&vkl`L;Vzlh})=<z<8shfsJp#Gcb02-W`Q
z{fP8#x+t=++xH1z5U~DjhAb;Z#9hoP_sA=+mxto|9XDxDzhyf#dr0PYnzUcs1y?|#
zpmv=~lZb#{RsjgUAcz0)VpP!(7r8IEQ>=R*#e7YhquKTUe2k(gxi#!JUs7^czaXUS
z)y-^f-cAfyq*@yC{lnP@7C>T`lnfv4^f1iffSWV>1>#jdu7>35gv7p(j*>vrciWM|
z`|G`&Cj*PJS;HafH^UPtp>`b#@D?}Rkkgwv<%3k3dVkl@hX|;bBSMaavv)!-X!~|A
zyLIevdDA+jdMLn#0s+Rga~+?9do<c|96!9EAN4<|IfK&Ua&#BVbg1IInP-TjfH@5t
zWaFi41~d$ksRQSGDU$*yKp`>bFW=c6)*Jl3pMndfr#myT|5mFeYSp8@4FAken>fxy
z{1Z-3IU)<2Q1GHSf0hdJPM$#dlJJLX*RXC9{X;zD^GgzG%nxnsqaK*60?_dMPl;x9
z;JY!;@-GxD9Fy#``+-6n6WoeAwRC@kqYjeM{98UNdLD#`r;FjYwc2$t%3EJNk9UU|
z(amzD;0wM+`aQ8NaVz-xY<dPj1kVMzmwC)-8~jPi0LCGL8vrHWVMJWxE5xt|5XGX6
zBA@I{`oQqTw&PufY(_q9G2(g606PZ?$t1U5V4inhf?IWPtzzpyqJ(>uQs=|&6`IXm
zs7VB)_`F>Wzhyny2F)|kq(nGg{jlJm++ga(Qg-;41mu5XDFi?B6%uc)#1CMekH>5h
z?yrG~$$1O_8`50l6dJ2~F3jHe+x^=cH#L-3)k8`0Kaw7fipi}&5$f4ddS3<1I~gWc
zn4eAUYoI+b=WJDLk#GLPajN%6xi!T0L&vNF8G1vCGw<W+kOIv?HCqI{`eb;&Xd2?(
z2XrjQW5ERQLyGyBU9b2wAZ6|(ce+k-3CRRH!MXt(yVnK)=R-{2Yh=s+c_%RRCEb~`
z)?R%*4s9N52Y_SIG~GIpir853l<Nf&cKf>ANI1=@@{bz@$v)y8d`T|?xI?OvBXV$i
z1fo^hlMF4BhI-TCO(KtQ1uBJwmtQj#_?OmWh2w6!d|s7y8$?=DnEBPg3Gg$>E-fK5
z-D<ztsYU47hzp5v=jXb94Nq`JfHO9}#S_jd8?Jc#%oj*>NgN~qBw<+yjUR~!os>gV
z;@B)BM>m6n4bt~zYjKYiJCf*n{b1QrZ+vxo%x}l$Tnpvs&Yj|mHiewM!?$07`<0^k
zgIuM&ZU19_fua$LJxSV~C&W1#j!9N+ExU`xWSIJnuM>Sha1*W6(^#XfD}kD*@E`^r
z_lg{O7U(fhnNG!6Q`WFm`7D?PiA^5V@ET5TyTxb@6gk$z5a)-lJQ+~`N#ms0SWb-q
zz;25&9ouJZD=}2~wOMb25yu_>>Do7(0zw9HSYDH|43{<k)B}qQ(Vt}S!U?s({MO9)
zWn1d=kJ^{Q$qIC%!pR0sUq|xXQ0#G}DT0AvICv)WvMz_hiVk=yUO7M7G&5O#5Z;L;
z$4cB;_>D}OxXgd%ySmE<eX~C9lk(&ENOM-&w?e-REu3Z1t7MjwF)^bxrTZ`Cj$e)@
z;YXqdz{Svn72D>FKYl~X;v5e3@Qk8acawcBBZr?0wowj$+AdE5x%$KhXd{AIZgfvD
z+w17m7nuj7WhIh!fU>}xc|Od@$YV6E9`<M10Y`fl#V>+RH3s^E(a#@0e@Ky3E95EG
z5MSt-P}@3QiiaCmK)lECe~t#n*{TQ)ZA|z^97-O(WkmyMyg}7&Hy2mzIp|XB0BRCj
z!5nh~U%+Yl0Tr?BBB_D!7;e~v**N*)dG_9g|J&lav&4J-ZjVfAqEEPwZ|2j?2_j!q
z-HAKq(q}DDtHl{?pkV!{3;;uI=@Q3Th*xFf_Dv>Ch^xOFQy(8v*-%tnqkC_Q?epcy
ze5m6UM?aeW@&7Otk@4`hhS|PPQ;qXcXz{bYdl9YV9^%nAH*|||MzH`-Yko9+eY7Ny
zr@eyamRE4|W1$$9hScv`UekF@E!&9Ws5*Z2E;jkFJJYc}0;X!>zKp@#EFmIwd(E{-
z>s<3F<Q^y}0yhaLMDk=K;MGnJD=4Hc<rPvOyu$7}KBoi%OCRbB8&zZzt$ac^g*0o>
z7h8q_PBa!)*;|6%QETO>=5SB}uS!3ANr6URzg;cBwD^6t;o+zY@XfBtKO2w0hbRBE
z9UPG@eTRkrvibhbL4soe4TQ#~zj$ID@P2zrST5c8T*Jtzi#iyE=QPad<G-%*OLB90
zB#ryushja+_@D5~0+qaNoVQhEZ2q<6q%1rQ*e+J7*usko0*VjbmTMYOFzeb~6asRi
zr{=$MGFgzAMhI(wReuNh0&KP?H!4c&=F}oa2NzjM|3Z%R2zU)icKBfnr*P)uBjQ`8
z%hV_EJ_D~LK_&QqVVHVsUmlCdQ$*o8cf3Z`XHR~l?*QL;_YpZ{=J371UM^=B7I^l+
zlnTK<drn_fYwzVimwIZU7|@Q9Nd8EB69qpzwLlq>3vo}cAykVS9bTx2kN#V>G7VF?
zYPka6!55~DH>SceA#rm{UF3v4$@UZ<kYG!aX!}en83HcC7eqk3dJX$og`DiBOYi3O
z7pBNm<4j8Iik`FQ7JU=4vp`{rmqgYA*^)@5O5A)cQ8Fk<gJ*?4z%ktS&(~*#3gJ+~
zQ8GW2rAa38S;`eV?UauUk-lCSZVUqhFjxKmkOmxdN)jTuzV=&&gSEfA^IzLlV<Qso
zv@EnuI-=-DhosA_j&0yq*I#lq{yX(ju5YM~TN}p?u1q$*MQr&;Pp%Me0VGcaN%%1b
z_!r{DUnm9-#9Fcszs6g&*x#XyNQMOJP$wiM{`dzl0Ykxbn}Kl|#^1QI;4(==yReHs
zB)i4(AnnU-rZ)x$nZ3;J#6OVl>(utz+3AEU_kY*NF4d>Ps;@oARr>!aB7kJ3JQtsE
z3Re|wMNmkO-==jxMCUF_?9fw8GEu#5XI0^^ihc9&^66{;`Unaa$pb{h@6`b3j-4+A
z2-Zq)68`XBzE&H}^JvQuhJJt+MbCFI-$=)Fr*`ry7osyIPu{qz?^V?9a5v(r{+{~>
z{{4{YbBrr9U|t-9hiVc&UY2!id7aIlfF^eP$b03R7n2*}7X_L{EdPOVt@*_E68g(_
zj~1F8nj?Qv9D;O^`O!ncLl33|b-W}s%1@t6S#hlu%M4&FekKD_D{$YTU~u9bHgEOU
zKEEOnkncZ`Z6-8SZ_>>7d8(dlihcECs*I~s(ax5-lO5&u?tN>P^ccv4)QOjG>Yu$9
znS7e}5^hiS+cnF&`m-#2Ln0))4~8KkHNzi?ZWpNBL1c_6dK?|D)X7Qn{SF|#2TQRW
zQBq%~U}ys{lok+B)0YAfkipojpH%3h-Y{Kg5IKHH{7)g$K;aYW#tVHg+cz9_nY2Xx
zl<jJi>FFEIV(Ev|@_C@K=SEDZx~15F({Ak00?at&X_~TE#TQq*QNC}`s{wqW!qW48
zUSO@eYX)|-f`P2m3JlEwl-D$KX)KfeMvUu=`HOUr)uPg>(6R`(PMzTT8v>9LWreEC
zCC1klgc#Bi4g|NK!yn#=oBVjaoAwvx`97WXuPt_1MRszH!uC5o5}p3SyuME;?R#X&
z*e^n54GPb?NM-VF!1ZjsG^XtiMiJAr&>@97`MD-OFG=dyzg}g*3otQORWiZ*$74wG
z@r(kPv|kiN7;aOIYna7&Ny{63fs^MHa3(n!NE;`MMLCAeCwmz>QRJd=;gF7vVmIBC
zV{HFETOugJ`tbs-UtbW)9Aw*)lGn8!!Xc3udsZAO8PpkZPt6ujzPs^q_U50^^OS-o
zx%Qu_SAWwy4q(W*%#JSBo*A9;E`*b#I{=6-B}dbVw@foUt|Ou5_`xVF)R8Vf@myRw
z$a@}}S3#P2da$w^Qunc_I`D$o`Cm=u;lJZFI{d4%;d)uqgy`wuSox~Qw6vY(ClK{F
z8Z!^a!(v3?mu?)}WaC~^L&;EDdDRaq&US}AV$g-{4rM($42HdF{(Bc-L^%$pS_uRu
zvcHRjhDF~bO(3l?*AM;^ouzSoEv)QzYyYT1Pm6$WJ1)sV0%ZLyH6CCbfy3@-4$Uh3
z+-3FKmKDw3vLW*9I*Dcu@7UBv6yTBPML7bvln;54h4ce$$64mI4d*?IdSnRa2&uid
zAu;kbrH#6t#PldU#@z9IOKg1br9FiALQIo4X)3!F%X8HXyY7G|rHZISbk#Els|r^4
ztu(u)?qAX!y&|6*Af>0Ip-6}$zhbwS%j7LQ{%%RFa&_Y0EujyIRIZ(2f2Q&4L~{lF
z(L^G(5v=YeYC5&a_8tw`Z9V0}v#fcFR)x^bf3GD8;E7J1e9aZu5u6~Dbuj(=!~Q3P
zK)0pktM;^U7#9{i%&IWFqq^aAd3lQ(Km_BpX>~It&FWnDty>NKuMtk4kBXfN2LPeI
zusFuH6bd^rngzq|o3#4$rdZj#0@LErS|Ta8B9l%gbg4@<FC;l?5&YSqT6gZ#X~iCU
z6!pLG6>XLBdWdu8H)$xmUA~X7I6rFi`ah6w(qZ}cU&tqrhJy5#Gi6qYfgslD?M`)D
z;&!uRBxpBftO2x30?GePLi$WIl=!~YP6mC<+0fVZFW^gD_Tqg0r5^uKXri(EtO&YP
zN?;`8_WbP)lTUU0Kb@UtSW`{6_XVN^QAj|F5=aP5dQqeZq4#Qo(7T8zO+e`&B}nfI
zf}nzQ2t}GSk&XhQROt|rA{|0AoE=c_`#I;i-Vd*S3fI2&o|!$f)^GjSn%Pf-)1o(r
zd;-gf8>JZolmPByxf^~ll=6t^87WCZU-v!smUs9tqP`yUzGrjv%zBs^M;Li*aH_n(
z6DB?M0i4G)M%&~~T|@^anp6P{ltAT<GPsyQxfW@s5U<kPozEa6wC$3WIBVn*Ryt+C
z;$B>X8&*i{+uH_Hh{F}`Wi94PMZ6kZ-sER~EnPdyQ9I5f%`K%qsF!sDzfw;DpeKkF
zgSN!6V;;KQ+(EQP({20KkM9|M=aENof0#e0nU?nyQzW3{4Q!3)5i($&eRju!hu!ni
zj%wshRPP=8DVbdl$t6(R-&Bo!Axqelm3QBht%;#9V?YNh@Th8@5_#ZPM5HWd7~1TM
zSzTnBZzjX;4@v0EYWj@u)05#Ft>j+om<X%Sgp4PTdP)igb}xfxuk?#sT#Y={-2z@x
z2E4^3<ppd(^*6Lm6%z_`<PZ61Nn%a;z8pYROQ~+CrzwOPL|I%vgGhP_#%^LN>5lXY
z&4}W>kS#CHR{cjiAHjSS0dqVbi=sPPFA8cvVw9vb6r&8%Keh#UXR0JGw@16R7->jf
zEC-$_>))a0ty#mC<H!Vv8$>dED7~57K}AquX|Y0Bo3I)QujN%39%kDU4F<2AY!4}4
zZYA#VxiZS2bPC>FKL&tS18e{ul)|#uD>BNbqI^F?<qw*hA0aZR9R5NBW55&On%dV$
zcZdZ+E9`8SmBt(9+}#SIJ^kaq8*c)rSkxc!#OW-=?8s9e84G1|4q!><zfuaZQUm#I
zboPOXP3e;L7n3}=1e+jT#n2H>nV;WUxPD}4q8>NCeVr-Uptx(vyxTCllbvnWB^Tqz
zjn8)BOWa|TAk05G>dS^KqTb&&{2~e~y?|=n@NYJ}0E|Ee#eylkI$gzRu0{_)qFWoK
z$T~d?PSA8Xak?S86(LhE(3Wz>fDk#l(y=C}i%vsypkD(SO?3hh?cM~R01XdJ+x0(r
zYXB#W$YxmNt<aF-B4XNLlIm)Yq>W$q!22@gg!xH`EiEqMCH0@qk3f1EJCj0|#;pUd
zGpTONTm@LQ`t(-|)|x;<UTMHZnd=x^1@9xH{dc%N5+y-{U;`7PANm_*%pg_=oa5Z`
z{@nTZ7@86lyZris!v7fYSl|{Y8m#sJ@Dk?{87m~?iB|a+iI1_B_jmM|9lA04-)N2h
z)lTC8Kpc&`5ObH#7t?>IU@P<XY0C8T0a>h#={uu_hA)j-jvL3w5MV#UDYp1^s6m{-
zVLx!PWF2VWJ!HoHb7o!HZqe(Xdh10<l_wbim1HlSE1IO>3yhA$aqtRHsy3kJ5V7rd
zM~c9YxLb_vyFLFX8%HxJA`HOW94ATPzZVjhWi`<Pd`bBta6xQ#JS}YR-g{aH9!Udg
zHVAmOV%~(C6aqh1=>XcNol!<tNQ+{9dGLzMb4|{_?9LkwLIzY^WICYR9D_E`6uJ`!
zq^lX!XR=1q6#6dkItWa(Nz`T6yf|Y4&yUcy-3COh1ibJIAJLi<50w2&<d<7hyUfR)
zM*GXucexdGcV>8)nSJsdy!BH8mXuvgSK+qL6&xre6T7cOK-TjP%i+Vy;k-Zh1Ch}%
z^l$uAH9W>Y$&!dw)P(>mwu~!k>A%$P_nEc8neJsff((H;?ZBYYAs6n6c}5?x<l_sv
zCtROLc1oK7GUwYhrSQonKk-d5l0VZY<_Afz&Hgy+lZ&XN)j=LBrLYH{=|6U|miOUN
zR3t;rDhmDq=<du%mle}uphJ`aZDDS!J8$*7qpU%mNT)*EDpAl?WlS1Shm?%9>>u+Q
zD7ySi)tv4y&2z?FBxAp4R)?ifZ_88ak9_L_?HzI&5KHY+8sK1}1;#hxJNMOloNpL9
zH@woy#uqAJWp@e;jp)C_Sdi*N+9LVbf)yKSjse5IZ|LrrFHL<KRdY3*WBN8#p1wHg
z;IkGKEeu+F-%pI%`fS|~4q!L>JLdsZw*%JLbWlH;TEd60z4%d+GzHz=&?q*7OuOUE
z2T>CR<K3Ys8<rSjRMoc>H(uB~d93zc5saM)A9;Yt$pXD^rG6EuRJpg}8Eorua<5hp
zUolGAmzbZV^aF;}G2Xm;E_SMy#OKJ^|DKD_q(}!ji>Dr+Yj)xJZ}hi(c2^;e^&PJ5
zGys3v?iAYIs*ZGeQ;5nXOF0yzU#ygBhc-#Hm#*W8{@xzQ`L27Cl^)0nG||A->`Y%=
zA-EhWWI3~~JD#!8`PZ!0JV9a<p<_l-Qa+X3Zn<|yO9f?4sUZk&k<*2?FXL<U%}^vB
zMU)ysPFmJ<BI7FU#o9Gi;rYE!T$}QKd8@p-Hc-F2qS{><+2{+-(W&EQxbM-R2<tjt
zWAxF)z|8V&3i?Vuj?^}97ahJI<r<)A*<Tnxt=zBpV)*W{xaZw&4;g9|&*H)jisJk-
z9wceAXWJJv|7i4_ZRFwy_OU?LP}dDI_CfB9Y)&AMKmzA|z>-8XCIfb^iT67G!zF;&
z_gS3^&9JwE)HUdD_L(Yfs)l+SWisgv)X!d0>Q^A|63`G<r3}A6fzge*1Kt)m^BBSF
z0fap#Ni`XVJz9?<9$@ij&;bKt^wO>l+C^qa26KAN{$B2;SFA47GRb^ZcvK5&1W-)+
ze%=R+yDDV8EC2h%8{CCYtb#s%OEvRe%9BIj92qP-_dq-R>Q!JxMaYtoE(9Lr4hekF
zP|)-`AMge6?WrX!y%vG9Yj-O&5akLK)-hAq?KoevaKXi>-S+zvCWt1(U(n<MrOf9h
zf;;9A?x*&~d#;Bp4@5qvl^qA2$CEXK3$W|b0X&a`Ig+A1Y6|inp0oYYhFaS8w+WYe
z(PbgmN;687{9+aW$xr>`w1K^e?;VEu5?&?9=*7XJ4mpTVr{zBfOhq(i0xpvUEsZS1
z87lpY^H^y|D_~bp+c#jU?DWH%HTur1Eo=H+zZtJM=$P^59be!uR59PMtK)rcF*iN*
zgQRzHmj!0w_Co3HE3vTovN0x&%ckE;X=OOc-=Xqm*reSjGWd=XQosF;<^__0eNDsn
zxjf{~2@WwjNt!`#>D*WY(<ufK#XGlNJ%SkU6~$;whtSa<V!{|QZ#=aVv|6`-PeGbw
z61;fu!K3=k9eax6p+C4>U>|D2wfjZFHQfXGCi?3DHE;f+r{R^7Kae-BMcS`~S7RbV
zo-y@|{l6Cl1z=yu?Ad5#3kuZ~&uPTL#`~{L1v1L$4ejrG&Il&wH@2vq*Pa`sW9WOw
zy55%ZQF2C|d{<6)n9IYy?t%7(hcthmJ`C)eZz}PT`t*l3UoAUKe=Tz6w7oE?tsJ7#
zjWc#0Zr}YX=#nTYuZrw1p`VEpmv0xqE-?7X1D<uRQ~VYtlEiSB(^BeXg%CQCsP8es
zmpb4gQA+z{W8aXgftOrBY)%N$&nub{)S$l4kw6wC2fiLQ;s~W~?7bEp?LWw9X7N!Z
zC~~VwztVdk$Y1qTk{toeZh)bPR}<DFiMKpaqDe|JlBc%Dp4X&az(mp-vBP<LOtoq=
zUTJc~TJ&n2rT3$Xx9pSPyI4&U0}utn@Xi_gR2VJgfXYPdL{aqm#fIMprs)Oww}sH%
z+Kvcc$U4VWAQh{^m%DThn#m~AUDI|~Yn7tkS?@mp;v_I{PcotaY5Wg<0MWJ}si{@%
zc+JC(KdG)GKYbeDCQ2c1VxC6?+AG3II0(to{5xj~fzhgzpJ4*-!v`iA*lL4M^5vif
z!l2KnNmEh@d~K!xNdXBs&4>s6RUfn~A`OMvgiev-%&MbfU;NRBP9i6Nj?klX1>yiw
zc@Dla#}Mi~Gg0msvY80{K}FHOP%0fR?89{*L`77IU}s*^{);n#mXiW{P)U%X>-m5A
z5Od<i%{%7cv_C9$Wa%4eh-pZ9{+cuY>bejqIh(nqw@{Ea5i@ex8tJbsNnLW2E=-4_
zMM$gRre-eZO)7SQYf=|=nYUv{BX{+4HU2V89N3$qaQu1ZZM{ygHPF@K6w>F1&l%08
zrY^Bz*+E0du)<eFUz185P@K4xzhSeI8rkRos*PTwQ(ngEqlt)rn&hX|f#Jzl(L_He
zPD{Fgd6D{p!prs>oMgpn6wZqQWP*RaD<NW!Cp+Cf|3{DafENC@YdKpfi;NjQ0e#Z|
z4LOIT*+yV~b7O!2(B5~wYtq2#OM2XRmM$pG_Nb{8BwE@Hab9@M;j2b$y_CRuJQFXu
z*y94<mj4t0JoFh8={+dUg!{Xm{lG&zuu!WhU!kr*Pbp;8{eD-T&eK-lVW&XlT3;Wo
zZ|hw<J2cb<PKA){A-uwXbFr+Uz*W_EOW*EzjIX$s(%o+Pk8VT-0`%wX^uM6@5>b4!
z)w9qW{5L>OiUTtcPOhK*PcjskwnCSHZmHx573$P?U%)k)L|fw?vUU3yQ;~j^$eLoD
z>*5|;SAQk>%8yW68&|EUY>ooY`l2JFH$IQ16cLS&@wa`~A=n%*$67qhk7YG>)TElB
z2J>MhI5kUFw#plT$|(Nzrn;{ZQTEvV>rqbeUZLt-3tKa<RCRE3brO`a#0BFIy(8<t
zwqAG25AZu3K)~dEi!M;IAhefOiG#{Zr2h37pF`(Z;=bxK^RABoJ{Lx>6wgTlMS7#i
zcum^sOU(ie+#Nd)X{%RohzuEUL&t%zLJ|IHf?Q4A%NctKPDN_t9)yU2MfgR4tcMp$
zEQvED!0zZl)G?O<WXujdAvc7mTZ-HZ2!*mcD9qx~ED$N{Sf&(8a>DJ0u6;a9_3`fn
zM^UOjo*;PPoJg-O#u}cp3(Uw=RcEd93m16tvwWkX()u2`lCQ@tkrnD^jPI~HIe@;B
z4^wpgS{<dEI=D*A2(0FmjmHK4a1RTmJ{+aBUZrjE7^9cNznC9K!by`)_~x$Hjp-2-
zem(F3N!&J2nnYck7k2%$)ouO5;>P!CX59(%fBC`NL=}Bi-HPJG<6957V)exN(v9eC
zX#BAqV@dD02CGJq7&ZL51SnQKGN}W0TQy~chica`Gu!@v_B;;equ_!r$lhtgV2muz
z72SwdEna*kOhx%K@D26{*Tc}F!nN=NEZQ%Y!fC3`S)CEJUQ;)<Ncq?Mn9~Cjin{m>
zLb{IcJ>+UNza`&#&=#%BZaqv-A0@u8E&#pB%<74Tf5G?|(<)QFiaZp9>dmRS*70ho
zGR^)Zmq_ALO!*P3%4OGC;+{fr!gHoQ{1GeqljAI9RKZvQDo1xnTiT_T6@zW!q+x+l
z_rJCE<`nuWfm=F=5gEMnsAZP>=GIYh$B}_~Mn-z!<F0>u5&5Y+9WbjAY6>;RAU56U
zbE|bwbT+{i9^BB)YP};DwL(XLw47yjt-GWZ9N?;8$fh-IJ|7I8;PjyYJ&UIfKaj6v
zI_sNQFG0|j4!hj`wDt-%bRQ>-VY`=@-c8-_cIV)9{PoK9)KY5`-h$43luS>VvYY(3
z2?M{P^o_64&SJ|BWDaCE?8qt@?aN1RR1`GEM)5_Uy-M0!^{i!_nelG3wdIX2l=8u{
zd<v#>@pE^DygxFmd!Q`v;W24;JZJmDaq!HJWeB?5!0gi=I!LJM&3bU+GpGBdH=-*-
zy>{Sv_7giLnn7u2-PI<)k>{J(?Ghe=SC!fJh92cgasY40lP$wJrt;OA)KBIflE_AG
zXq9{C$2X}A%zArcn2XzAH$08RvtkFDd9?UGN`Vj=d;ybhrF@%hyo&dD@#Rtqgh4u%
zz5z}qyt4WwT;i5y&GgIi&kcit_cW#BL_W#Lgy30g;#&Q8?2_A~Bq`obx39;UcHKul
zj#g2cOkAAF*^zVxcFU2pHiV-{01Y#hXcl>A0ZY*r);ThXEj7(5^=LIWeu_wrSuF|u
z^207{*0Q=4`Ku5Xe{yx0<MpCkNOG#mxDoABX}8EtRX=?LBQCjHNL2D=(gpi+CQe?W
zU+u=6a71-EZ+fSQ+p_gO29^Sy(3zC9;!e>jUqKqB?C+wx^~If5US&QrW_I3gR}52l
z;GQKR$yxLrulQv+Nqnp?OW#dC$$eO#stL>C4XSc9c-?J(*UeNf>1VetpezD*2~9!j
z>8tO^rhna<;Xw$vR#YJ^`jtqKhJ)1;c@5=)mr6rn_uww!C+Vjq`YIId-tdoBIJkO6
zBy(myqi$R1lByA{s=fM#g<EO0SM3MQ5Jmv=L;Zr!3>PKFl_LDn?1bBB>Ai<1w~1cm
z*s@O^5LZ<J8B}?Ix{W5(hcM4KUFv2C$e?%DWw{j8`Y+n4!$VQCE4MCQS``mtiM8cy
znfP&`4xP=se;)Jpp`!_Tk|=7V20SJiCHLa$1j@A;&;QTeHG#XYkV_4i0voIz56y^~
zZt3URTql32kT<w6%)@+DQ|g+ydvT~tlX?2+)6-@4XZ13l)4;j4`cBKI5*Ct0+U3TF
zuTWKIEh2p7=)b%@ct0t>+*``g_k80db>|-1=1hKxKs+pO(GlmmmmoS2hc|fLiSg`l
zNt@;K{s%>F2l$_ITCu3*I+bS*W&_3ka$|MA_r7(}_h88Dnf_L!S9WK*Q!^$0`kbAh
z#eyQ~R7Cj~RBO#`0}_uohJb~ArWN&g=?FG~HHwCk35RXUG}ZJ2MBNmgeI(+bvpmly
z4cDMS-R{1`3Y(A9%Os~a$J8(NejZYGEB<JUEh3wFy%K)KBuw(PRHWND-5@??@e!Z#
zO|D#-$ix?4BpiIsPuNU%m0c^^N?!IfyIt2)XgZ;2q475I0z7rgz_ykox!^fOk1v?D
zIHCKY^JjOy>8;ZfN!s%=z+MhAUj877BxUoKV03NLM2M&nLFz|^6O%%8sqy_e%)*G6
zuRsrV-^^|1z+Np2L{H34joa17JC8U)H^s_t5LCZ^x|BP4FS2m~sw)%Zgmv^4ttenQ
zM<yge<ibRN3ybb+YroViT3&crzcrP)EbRP<2OqFZ{lZwQ2upcGb?bw5bj^nT8fCr_
zgDnckM5pPP6dK$B-1Po3)_(caudX8ZCJ{(MYvL`mZ;WM<o457#QMkrmW)czw9+a)e
zHekCB4h3%*5=>$z+axPFT-HTzpZr6+n+iat6Ru4~%qJ&9+UY$Aqb(XYyKj<r19BRW
zQ>6#)F?jupKsNLlHz~4pNxX@?$h)^w<?4jX<!kh(e<Lv?G5vOJ%9ZGgVPpZd-oZYZ
z20fpy(`SlZ(>o}C5Yb-V5Yo`x-Ed5Ez5YOiPIhq{5X;O*z-Kr*C2A|}pS!;`d>71?
z;oGj#xfI+`@^h{!{O9y1V#dMPVgY-Q+zRNQg53pFg~UoS$J({0pr+zk-{fe?+O=#K
zKP0{qN8qUT(<dv%3)2GyhfY+W%iW&vnFl9Uq{vyF?(6=rA^*O$1aDu<JCglsAv@vM
zpW<kwz7RB{7AKOtG@{ZJ2o<Vp4cV`ci@H|P2Hy<5QNXzg)PNw>jo78ri5{3nD4Qd}
zISume$sfl*suT^seRUx2IM<-VQ~NtEiI5Ejx_2^I2QUK9ct|;$ZWNwh1jZLIK=eQa
za?FW*R3x#}3_RyFQtv@cjepk29#afaf-l^|UIBi6g+PSs`2`7+A2itR4(;?E^It2F
znSNv}m6igG0j;9!?1k_RwpjaZ`HG{k1$f3CMSsBxetB84IgE>UzXK3wn|pwbb5y+x
z9>%OjwD+8T!NAmW#$<ye!$uCQJ8=$Ul`5F?h)Xa`=)hok()W=|OWIT(5G~Z_Icy92
zt}OJ~0&M}JoQhD({G7U=_r_7SAU~Z?>F2!JAL=g$A2{!n(2vAHA)LT5OtFDyg1vGd
zzy>F`vtU!4wh1xXU+3GDf`LlF$_>5~Yq?M~5<vJ^`&-mfj#Bl_^vfdW1IVDgWm8Y$
zc5X(AcEjx?T3b;C$H%xK9*Wh`8(utz^nRvm&T&v<+==v4{mv|bRbp8njK@FiVsG93
z<VKL+^VWNF@lderh3SeZ>6Z=TozGM+C<h0nUyDD3ic0|LW!v`tYsu_b^1P!L6a(p%
zjp`RtT_g8Yz87Oj+CeRXr<kKjy2qy;^!}_w`(X}p6u`q`MVWRAnd>M``RycO*IO69
z?%K~+$c2?%|9VMpxx=6ef9hutG?+V{Eq<ETa=9P`2tuS_m)ZckXnqnLdSE_wT7E}u
z(7(v5=bXDU?IKX26Ibt3z{B8<HVcH66(EJ+2{^`@?~=C2O)U4u=&2lgp%UVPlLZzW
z!|$l@HKOr?C8+Cmy8awmrjoA{a;5s43x4*(V9s};c~cYyL6iMiB>BS`wGERN*2Bn6
z*GNC)>(uPN@98l5MQ*~{=P5nL;Ki@6HOqcV%`nj$CS~2D*y~_^Wp96gyu>$PW=(4R
z$T5{BM0D;R+a2Oeu>d@ZV1c{|3~(~a3W!i0K@Fi<ZHGX{a4CylLB{ohnEpiS?)o?l
z&@GivmVvg-Yw*FK*g)%<L#?2G4;qsdb=tmD9{X}pIEq+KPxd~w6qkZu!3VD|Mb(Bf
zJZ?EquAgkzd)QCjdHP$fN|e|vL~ls3iEa92&2~gjH|<w3fCfWF28AEBG#}Go00$yN
zyZeH~RjbJ>lUJ}qS2Aox*>$38e0yrZI<RV;{Z`%&P@U!c6!>hy<>4C=Q-u$}=Y3;l
zyn<yEo!R_MRy1!|AjV<_RO7|bo~%ukYG$M)-)BD{8+v~#2byI$Mm5}sMxI^gC_c+K
z?d$Pz3T%YS-cWF3zR=K=`L$3go6lhIbpCpM&-4BBTRgTOJyDp^sFZJ?OPotu&~@ix
z-=64FN2>@(|2ithx`SqcX8cGFXnAU@a!+NOc5oNf)<+sH7IZoQ9a7uP<y~mD+_~zp
z?Z-vBP<2TwOU|=oGw`xZ{D%}Dji{{>u!R#7y@P}5o)r1R1?S|i7aNXT3?Hq>xWZy%
zCAFS(oRJoU^Iq#c(SGTk$EMG-M^rwiP<3VWU)F_jC~y(A3Ofjd)mozYxz~61I{p`Z
zT8oxSAtkB`1&EjU4be50AGL%|Y5q?!hi<{a<!?J$>tg#fJzl=nc2Y~YQbR8MvHlZA
zc<W9#>n?#2PxU$R@~LK>E=BjRYB_W&Nl!No@6tl`d_np8ylssw>EeJX)29o{YR%j^
zO$}sAMA>vvlxR3CY2b?HLZDB~$9<%s6*T+vmvbF0E|E%mMiK=XkOLEu8W!tk9UimH
z^utx(38)&XClit+c{FPsa^M_6p;#<qfErP7$mcSm<1{hQ>jpx*FNln}_jsgbjFsvB
z^2UN#h1fSP2P0M$jT<%!f&)TjUy%moxHeEmbi^AK{xSq^LL>XGh;v2}WTD<Ba<3@2
z-^0M5;;O<fv6`k#ZnALr&RwM=_m{2Y?^X`}7JHVX3T+N0NP21{n2vDKy%PdHC~!dh
zMnKd3Mdix2XLj<yX8FAOkFSjayWUwX#9jwcrv(WFc>Qn*Ez0~X=Ig0}Flj=v>^@|!
z<ojk4;6p47pC{UbUy?^>-=~t0!~z6}!MXfsNK=xk(B_pX508`T?a;k0s-DtE9!I_F
zMb~*oD(aQWY_i&#SdFsaz@0YVR*RowMuP!1k<@I0@|96mF>@&Rf*bpc5nzxtiS<jl
z{h?dLRqF~usJggmSf_hqcS`FSk<F-vwVH-7UYUZl7)kazLx$>^57k2!(-a<EEpQ90
z&ay@@_n<Isr9kZM^}jfH{ud6ha*qi!+UEvoK!nd55)uyopEwwcHz4o&7Y>?3!8ulf
z?km@yesWs`R;w&ijO-8B8aPWBrCktv9HU~?{UOB2PRXHA@nYq6Ln7QFly*6*`-^Fl
zfgsp6^ZB;$fT-g0gLcfLtzVH3vpT4*LZ9vgO$=SVvLCFSspCt*#=Pc7gPyO|%pdt;
zKzO(5f3J<DDVD)b$rCsv@kbXGbEH-5a^mip0bqy3rqAa$8rN(SZ1d~iP4BYAWL4OV
z8jjR_Q{A{U`L(K6EhK4E>9Q=g$F`R9GEw>A1CbbTmZ*;3IxMQV_$~X6I(c8%TcO#+
zz5@Y)lqjXtG>hlcV!M&Cw_8C?#?l+J<k$T88_wES9I$@!&cSfh#tCoc&@75e+#IZ5
zd*I<4!y~rH802}H%p;_Eu<#qSxs4tal-4#(e{V^enTUTT0RClPGbC2*M*uqkdeM#S
z{%T(bF!42Q%~QFf<XdV@)thNI>d${Gq!>u;G&cb<a8K6O7l$~G6|n#kaA;%68Bo5n
z4PAHUGaF`jVeGm519Yc{)oS7BpnbC}uA<;XK&76pGQ*#!TGkOLyB|6qn5K$8guSyG
zjg{&8c_k@+Q`?n5VnEv+$IkctU~8AMdM77=Lz$ip3kIOaR8h1B0*ucQU1$gTgM~HJ
z(JoEtO-@0KWdkp^7Ah_R2LgKoV#o`}F@pzxViQ}HM#bHwTjnQ~6#-mP6iQ0~*4`II
zSu!y_{tBfs;BHPVAS~x$!03e0noGh4V#W9v(N2=zE=&k(8&6~Uc8<TQT_6RDW+U|>
z)LKMVRee;Rgn)c=+r@Cc{B0tXMTfDlE?$CaR9*fdI;w+PMYXgAtVsjpQ69VvW%TlE
zQM+;ts2!#Pgzo2}F)Mb{izK^F;%QBtP+h-iHmUI@*$@erPbyC~i_uoKZyPG7<sw${
z;SOW*fW8b!)Bts!UB<@WiPmd6?mcIye`|YraN5m9tspM+nS5)IJCK>JrA3neiG{EZ
zpwcyPzEi%^qcL#xriL8QcW%*nmp^EBbR8_n|8Q~!u>%`EzU^_OXwFUayjh$kRKO4#
zLVN8enOv5nto~$4dV$QaGw<bkpcbX^F=R4-cN1Sv$rB%L3A!D8Vle?X)cxsiirZ}<
z9k(-bgt+TKAraCezXI2vuW?xr#Aqe>J*)Js2@~nyfS&nNKv4|XVvWITZKZn^6fc-e
z+p)^Ry-_zg&KLHfW|eB^7QQUStc5I(^;RD~%RgaDkqw;4nYu`b%vrgS@QHqgHvzwZ
z)&ESa`1~z4m$M>VHnt#-*{*NCg!!FbkB3cw|6<}=v1bw~$<%u8D6PbJ5ax&z&G7&y
zK6BMn&!pYjbAI{t#%|g@il|C^-WYr?Fk_A<o|7*~G3bRVCE;d}U&p>`kmm=Uf_?8x
ztFly<4{zXqIeL=5I%m<G`54EmshTHtJK1_XR%QoD?RL0^oA>a00Bp-er6;DeA9fYY
zeO?@<pP}(c|0nHkt0c<~4!4MzrdEu*qAJ{JgT$-pxyCLg1(Us-k05-;V)wO|>#_TY
z8NBMQ5Omn6wfB~t?n-giw^Q8R>emL*)zJ=9SA@skofjuor5?9fh?5kFLW>8U@kPcZ
z4A6)HClmC{Hnd0Iy+qQizUO{pxNViz_csSR!4nPu4)nAYIpRR797iFEJV4x~Gvxv*
zPa4lbdKK^{5~jR{z#sz(c?`VTgkEL<!iE;zuf5W?UTt%YlVm;a9sfg}BIn4vRPoEW
z2VkW0g{_YkA(<Uzm;<rCFQSAe5iU{ntP*?!Hx9VTs_qBJnq{-ZnhpwE!2l?Ha}RI~
z{|5?B@i{o|M0s0SrjpS0`baLduU?e^=B9Q~WAOTW8e(<vq&HYd!pBi%Th7zd;4!Pa
zi%~P$N^(G_9k=g-Hrbtw@JXPR>xaI=Yzg}ewTW8H0@mM;*23+D;^4c!AQjnh-xw<o
z`OGIQPh8{Pz{G_}WF281P{APE{z&ilv0Lxy9R3R>f<h#-Q`6wrzk8l4ekK*1H^Y($
zwRh8730eSD`U{kmCo2PRZ%MZ9pHjd($}H;345V%BR@kRzMSmBHXiHzt=XJ)_^UN$>
za8a*`ZZeyLh#Vl=@TdJkr$eY}#*^PPt)>Q)E2lKS@1um)Ywgj1g}C}RROenY8TDjc
zG2FSe_kHK;*2O-A+4@K$a`|Z+EDC$eS5oHY;L9~$P4%(P2c2<lg;<`IXlIA;5=eK`
z(&jDWojbsLbb<7Kh@+PDG{{K0arbF6Sd)@uOU}J%;Tv^jLF2Ux28<=!ma&nA?Y`5J
z%Zu$Eb^$p0Kis$!Zv4Nw@!*IXU;W`mEgU7U@YINPHp_h|eidj<{hC#>YPxh0*#rvx
z^V+P~cvXdd!Aa#;Qvz7@QND>dPXi>7PIX##k%M+x1?@ugw^ivt2^^5xq_$|_G%iy=
z+zZv}gD>eSka{JAYhpygZFRxLWY-o2yVrh@59i+ewAGXzS&uo4c3y#)s9DJ#lxr$Z
zi8)bA8%8-*)W;Vjv8U8&MLc&dDgL`GoD4zgygc@SA38_gD19*+M<nBw%3G1zud})1
z!f_YEH!EGxa;%&0tX-wsh2l5bukw{TfBNO)%1qPXMst(HrHNKBOPqD6yYsK*yrV3u
zNN)+7eKetuE2$f<UwfXw#IF^rxy|{V?GhmYv|b;6@N^I0!sMLpzyv=tZBDAMbn;`B
z1=r?8-%1MdcDdW;NIRr3u8^d>2CTG@AZXKnd}qYdbi~Mr4a);UD}-a|hEcQhlzdGS
zDvoNt^sAr8Am=Y>p_XPol<bK_qxK?lRXVAqTxn`R+b_ESAys)|=Lw_6Q*5XT!K979
z%Uyqx6|WhA$-rTOG5<(MGJtJq6MMiPxOIiJOj))W^RrK~BO1)Mh_Rw*Mjg7+I}b}1
z9`p)ey)xooX5LM>oJFmezTR-!<`j#{XSVeORLr#FY;U;RNJ+YL>2{~%kwp076GP{N
zr;7XY8!yL;$}g-uXB2C))B#p2eaH#2YiD>Uc~iozK(_-=6ff<^zzgd5g#AG!ZH~1I
zgSaf~--03Xp?4$Qza&G74;sP4TMMW@j{7Ji6Ps4tKceA>$37Z^atDw3-q`PwyJM30
zlf+{LAL$OX@mQfF-I8Z@P5gMXzhoDbq-OSTf*B=V;3PW?BD{5{#|J+%R-OIlKkV(<
z(E8Q9dOV@*G^IrlqO?JPJ&J!wl}u)v<@+t4neobXF4!87aPk<@U>s))a8e$zgIk$c
z$#LkcBXxcJW=!l#G0x2#1U-*3vmc6kv*hz<8@S$g&Fa6o^>dN$(8N>L(~5dZ^=Ua$
z8hhgErVS>l)pM{;B>jC2RYY{X;D{^tLd5#z0T2CAR{YQnT@UmhPez;!(jaVsIxkTg
zY&NM653jI-7VGa+xT+rt_uagJwo69bbSwct(6(Xg7zCG|MD*AE9}x6Ts0xtF$rg&S
zRrMaLVU|;tNMVd7eNFqvwI6B4LkuKPGft9+O5T;I)UVQ<RKPc&a&&06KNa(j8{HRM
z`d{Ay(+=<l3(~uydNq@#+AqZe(jP4CTzocvYd~%Eu?PCCK-(%IjG`v!uK5-`NJ=wT
zDkAW&4s|9o!kH|HMIw#EP;hu4OOa2#C+c0j-fzn54)lL|J(c|7+)+RYt<rTbFgqeP
zPS9n!UlK-SJ(&SzqNMKt<{OWURUnR(A84mjV*4=F&(4_i7y-pk13HiMIdodi-_=hf
z-BIGs1P9UEK7ZuLBQ%O4%Kg{O-Cq4i+aCbR<p1}zA0Z_7`?pn>ThH98?BoSLb@oUp
z@#m|5)nhh-%h`bZ`$)+e^KpxheRlvI>*^s{zTM@^gN@$1CxCxyO4^D=^5&2K2j*z!
AXaE2J

literal 0
HcmV?d00001

diff --git a/Documentation/Cookbook/Art/C++/IteratorFigure1.png b/Documentation/Cookbook/Art/C++/IteratorFigure1.png
new file mode 100644
index 0000000000000000000000000000000000000000..15467337fdb04ec4bbeb333cf5bba5f405151100
GIT binary patch
literal 12168
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

literal 0
HcmV?d00001

diff --git a/Documentation/Cookbook/Art/C++/NeighborhoodIteratorFig1.png b/Documentation/Cookbook/Art/C++/NeighborhoodIteratorFig1.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2e5bd58dfd2207b06a2ab90fea2c69c94bfb6f5
GIT binary patch
literal 22692
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
K{Z7j^;{O0fXv&uW

literal 0
HcmV?d00001

diff --git a/Documentation/Cookbook/Art/C++/NeighborhoodIteratorFig2.png b/Documentation/Cookbook/Art/C++/NeighborhoodIteratorFig2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7aaa43dc3bae0efcf42364cbee3a5ea48f78bc4d
GIT binary patch
literal 55215
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
Z+><ta$o>=W{F?y?JYD@<);T3K0RRI>Dv<yH

literal 0
HcmV?d00001

diff --git a/Documentation/Cookbook/Scripts/migrate_sg_tex.py b/Documentation/Cookbook/Scripts/migrate_sg_tex.py
new file mode 100644
index 0000000000..a4faa2d1ac
--- /dev/null
+++ b/Documentation/Cookbook/Scripts/migrate_sg_tex.py
@@ -0,0 +1,62 @@
+import argparse
+import re
+import os
+import os.path
+from os.path import join
+import subprocess
+
+def sed(content, regex, repl):
+    return re.sub(regex, repl, content, flags = re.MULTILINE | re.DOTALL)
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(usage="migrate sg tex file")
+    parser.add_argument("filename", help="")
+    parser.add_argument("output_dir", help="")
+    args = parser.parse_args()
+
+    input = args.filename
+    output = join(args.output_dir, os.path.basename(args.filename).replace(".tex", ".rst"))
+
+    content = open(input).read()
+
+    content = sed(content,
+            r"\\doxygen\{otb\}\{(.*?)\}",
+            r":doxygen:`\1`")
+
+    content = sed(content,
+            r"\\doxygen\{itk\}\{(.*?)\}",
+            r":doxygen-itk:`\1`")
+
+    content = sed(content,
+            r"\\code\{(.*?)\}",
+            r"\\texttt{\1}")
+
+    content = sed(content,
+            r"cmakecode",
+            r"verbatim")
+
+    content = sed(content,
+            r"cppcode",
+            r"verbatim")
+
+    content = sed(content,
+            r"\\input\{(.*?)\}",
+            r"See example :ref:`\1`")
+
+    content = sed(content,
+            r"\\input (\w+)\n",
+            r"See example \1\n")
+
+    content = sed(content,
+            r"\\begin\{figure\}",
+            r"\\begin{verbatim}\\begin{figure}")
+
+    content = sed(content,
+            r"\\end\{figure\}",
+            r"\\end{figure}\\end{verbatim}")
+
+    open(output, "w").write(content)
+
+    subprocess.check_call("pandoc -f latex -t rst -o {} {}".format(output, output), shell=True)
+    subprocess.check_call(['sed', '-i', "s ‘ ` g", output])
+    print(output)
diff --git a/Documentation/Cookbook/Scripts/otbGenerateExamplesRstDoc.py b/Documentation/Cookbook/Scripts/otbGenerateExamplesRstDoc.py
index 934c0e7ba3..025f836a85 100644
--- a/Documentation/Cookbook/Scripts/otbGenerateExamplesRstDoc.py
+++ b/Documentation/Cookbook/Scripts/otbGenerateExamplesRstDoc.py
@@ -95,9 +95,10 @@ def render_example(filename, otb_root):
         rst_description = ""
 
     # Render the template
+    name = os.path.basename(filename)
     template_example = open("templates/example.rst").read()
     output_rst = template_example.format(
-        label="example-" + root,
+        label=name,
         heading=rst_section(name, "="),
         description=rst_description,
         usage=example_usage,
@@ -108,7 +109,7 @@ def render_example(filename, otb_root):
 
     return output_rst
 
-if __name__ == "__main__":
+def main():
     parser = argparse.ArgumentParser(usage="Export examples to rst")
     parser.add_argument("rst_dir", help="Directory where rst files are generated")
     parser.add_argument("otb_root", help="OTB repository root")
@@ -130,3 +131,6 @@ if __name__ == "__main__":
         os.makedirs(join(args.rst_dir, "C++", "Examples", tag), exist_ok=True)
         with open(join(args.rst_dir, "C++", "Examples", tag, root + ".rst"), "w") as output_file:
             output_file.write(render_example(filename, args.otb_root))
+
+if __name__ == "__main__":
+    main()
diff --git a/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py b/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
index c6c0cc4fb9..e8f486fedf 100755
--- a/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
+++ b/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
@@ -360,7 +360,7 @@ def multireplace(string, replacements):
 def make_links(text, allapps):
     "Replace name of applications by internal rst links"
 
-    rep = {appname: ":ref:`{}`".format("app-" + appname) for appname in allapps}
+    rep = {appname: ":ref:`{}`".format(appname) for appname in allapps}
     return multireplace(text, rep)
 
 def render_application(appname, allapps):
@@ -374,7 +374,7 @@ def render_application(appname, allapps):
     application_documentation_warnings(app)
 
     output = template_application.format(
-        label="app-" + appname,
+        label=appname,
         heading=rst_section(app.GetName(), '='),
         description=app.GetDescription(),
         longdescription=make_links(app.GetDocLongDescription(), allapps),
diff --git a/Documentation/Cookbook/rst/C++.rst b/Documentation/Cookbook/rst/C++.rst
index 4898c812bd..c170944cc0 100644
--- a/Documentation/Cookbook/rst/C++.rst
+++ b/Documentation/Cookbook/rst/C++.rst
@@ -4,5 +4,13 @@ C++ API
 =======
 
 .. toctree::
+    :maxdepth: 2
 
+    C++/SystemOverview.rst
+    C++/Iterators.rst
+    C++/Filters.rst
+    C++/StreamingAndThreading.rst
+    C++/PersistentFilters.rst
+    C++/WriteAnApplication.rst
+    C++/AddingNewModules.rst
     C++/Examples.rst
diff --git a/Documentation/Cookbook/rst/C++/AddingNewModules.rst b/Documentation/Cookbook/rst/C++/AddingNewModules.rst
new file mode 100644
index 0000000000..36dbdcb2c0
--- /dev/null
+++ b/Documentation/Cookbook/rst/C++/AddingNewModules.rst
@@ -0,0 +1,326 @@
+Adding New Modules
+==================
+
+This chapter is concerned with the creation of new modules. The
+following sections give precise instructions about:
+
+-  the organization of directories
+
+-  the included files
+
+-  what they must contain
+
+-  ...
+
+How to Write a Module
+---------------------
+
+There is a template of OTB remote module which help you start developing
+a remote module: `External Module
+Template <https://gitlab.orfeo-toolbox.org/remote_modules/remote-module-template>`__.
+
+Each module is made of different components, described in the
+following sections.
+
+The otb-module.cmake file
+-------------------------
+
+This file is mandatory. It follows the CMake syntax, and has two
+purposes:
+
+-  Declare dependencies to other modules,
+
+-  Provide a short description of the module purpose.
+
+These purposes are fulfilled by a single CMake Macro call:
+
+.. code-block:: cmake
+
+    otb_module(TheModuleName DEPENDS OTBModule1 OTBModule2 ... OTBModuleN DESCRIPTION "A description string")
+
+**Note**: You can use the keyword ``TESTDEPENDS`` to declare module
+dependencies that only applies to the tests.
+
+The CMakeLists.txt file
+-----------------------
+
+The ``CMakeLists.txt`` file is mandatory. It contains only a few things.
+First, it declares a new CMake project with the name of the module:
+
+.. code-block:: cmake
+
+    project(TheModuleName)
+
+Second, if the module contain a library (see src folder section below),
+it initializes the TheModuleNameLIBRARIES CMake variable (if your module
+only contains headers or template code, skip this line):
+
+.. code-block:: cmake
+
+    set(TheModuleName_LIBRARIES OTBTheModuleName)
+
+You can build your remote modules inside the OTB source tree by copying
+your source inside the directory ``Module/Remote`` or against an existing
+OTB build tree (note that it does not work with an install version of
+OTB).
+
+The configuration below will handle both cases and take care of all the
+CMake plumbing of the module:
+
+.. code-block:: cmake
+
+    if(NOT OTB_SOURCE_DIR)
+      find_package(OTB REQUIRED)
+      list(APPEND CMAKE_MODULE_PATH ${OTB_CMAKE_DIR})
+      include(OTBModuleExternal)
+    else()
+      otb_module_impl()
+    endif()
+
+The overall file should look like this:
+
+.. code-block:: cmake
+
+    cmake_minimum_required(VERSION 2.8.9)
+    project(TheModuleName)
+    set(ExternalTemplate_LIBRARIES OTBTheModuleName)
+
+    if(NOT OTB_SOURCE_DIR)
+      find_package(OTB REQUIRED)
+      list(APPEND CMAKE_MODULE_PATH ${OTB_CMAKE_DIR})
+      include(OTBModuleExternal)
+    else()
+      otb_module_impl()
+    endif()
+
+The include folder
+------------------
+
+The include folder will contain all your headers (``*.h`` files) and
+template method files (``*.hxx`` or ``*.hxx``). It does not require any
+additional file (in particular, no CMakeLists.txt file is required).
+
+The src folder
+--------------
+
+The src folder contains the internal implementation of your module:
+
+-  It typically contains cxx source files that will be compiled into a
+   library.
+
+-  It can contain header files for classes used only within the
+   implementation files of your module. Any header file present in the
+   src folder will not be installed, and will not be available to other
+   modules depending on your module.
+
+If your modules is made of template only code, you do not need a src
+folder at all.
+
+If present, the src folder requires a CMakeLists.txt file.
+
+The first part of the CMakeLists.txt file is classical, as it builds the
+library and links it:
+
+.. code-block:: cmake
+
+    set(OTBTheModuleName_SRC
+        sourceFile1.cxx
+        sourceFile2.cxx
+        sourceFile3.cxx
+        ...
+        sourceFileN.cxx)
+
+    add_library(OTBTheModuleName ${OTBTheModuleName_SRC})
+
+    target_link_libraries(OTBTheModuleName ${OTBModule1_LIBRARIES} ${OTBModule2_LIBRARIES} ... ${OTBModuleN_LIBRARIES})
+
+**Notes**:
+
+-  Library name should match the one declared in the root CMakeLists.txt
+   when setting CMake variable TheModuleNameLIBRARIES,
+
+-  Linked libraries should match the dependencies of your module
+   declared in the root otb-module.cmake file.
+
+The last line of CMake code takes care of installation instructions:
+
+.. code-block:: cmake
+
+    otb_module_target(TBTheModuleName)
+
+The overall CMakeLists.txt file should look like:
+
+.. code-block:: cmake
+
+    set(OTBTheModuleName_SRC
+        sourceFile1.cxx
+        sourceFile2.cxx
+        sourceFile3.cxx
+        ...
+        sourceFileN.cxx)
+
+    add_library(OTBTheModuleName ${OTBTheModuleName_SRC})
+
+    target_link_libraries(OTBTheModuleName ${OTBModule1_LIBRARIES} ${OTBModule2_LIBRARIES} ... ${OTBModuleN_LIBRARIES})
+
+    otb_module_target(TBTheModuleName)
+
+The app folder
+--------------
+
+The app folder contains the code of applications shipped with your
+module. If your module has no application, you do not need the app
+folder.
+
+**Notes**: If your module contains application (and an app folder), do
+not forget to add the ApplicationEngine in the dependencies listed in
+the otb-module.cmake file.
+
+In addition to the applications source code, the app folder should
+contain a CMakeLists.txt file as follows.
+
+For each application, a single call otbcreateapplication is required:
+
+.. code-block:: cmake
+
+    otb_create_application(
+      NAME           TheModuleApplication1
+      SOURCES        TheModuleApplication1.cxx
+      LINK_LIBRARIES ${OTBModule1_LIBRARIES} ${OTBModule2_LIBRARIES} ... ${OTBModuleN_LIBRARIES})
+
+The test folder
+---------------
+
+This folder contains tests of the module. If your module has no test in
+it (which is not recommended, you do not need it).
+
+The test folder should contain the source files of tests, as well as a
+CMakeLists.txt file. This file will contain the following.
+
+First, indicate that this folder contains tests.
+
+.. code-block:: cmake
+
+    otb_module_test()
+
+Then, build the test driver:
+
+.. code-block:: cmake
+
+    set(OTBTheModuleNameTests
+        testFile1.cxx
+        testFile2.cxx
+        ...
+        testFileN.cxx)
+
+    add_executable(otbTheModuleNameTestDriver ${OTBTheModuleNameTests})
+
+    target_link_libraries(otbTheModuleNameTestDriver ${OTBTheModuleName-Test_LIBRARIES})
+
+    otb_module_target_label(otbTheModuleNameTestDriver)
+
+Finally, you can add your tests:
+
+.. code-block:: cmake
+
+    otb_add_test(NAME nameOfTheTest COMMAND otbTheModuleNameTestDriver
+                 --compare-image ${EPSILON_8} ... # baseline comparison if needed
+                 nameOfTheTestFunction
+                 testParameters)
+
+If your module contains one or more application in the app folder, you
+should also write tests for them, in the test folder. Running an
+application test is easily done with the helper macro
+otbtestapplication:
+
+.. code-block:: cmake
+
+    otb_test_application(NAME   nameofApplication1Test1
+                          APP  TheModuleApplication1
+                          OPTIONS -in1 ${INPUTDATA}/input1.tif
+                                  -in2 ${INPUTDATA}/input2.tif
+                                  -out ${TEMP}/nameofApplication1Test1_result.tif
+                          VALID   --compare-image ${EPSILON_8}
+                                  ${BASELINE}/nameofApplication1Test1_result.tif
+                                  ${TEMP}/nameofApplication1Test1_result.tif)
+
+Overall CMakeLists.txt should look like:
+
+.. code-block:: cmake
+
+    otb_module_test()
+
+    set(OTBTheModuleNameTests
+        testFile1.cxx
+        testFile2.cxx
+        ...
+        testFileN.cxx)
+
+    add_executable(otbTheModuleNameTestDriver ${OTBTheModuleNameTests})
+
+    target_link_libraries(otbTheModuleNameTestDriver ${OTBTheModuleName-Test_LIBRARIES})
+
+    otb_module_target_label(otbTheModuleNameTestDriver)
+
+    otb_add_test(NAME nameOfTheTest COMMAND otbTheModuleNameTestDriver
+                 --compare-image ${EPSILON_8} ... # baseline comparison if needed
+                 nameOfTheTestFunction
+                 testParameters)
+
+Including a remote module in OTB
+--------------------------------
+
+*  Local build of a remote module
+
+Your remote module can be build inside the OTB source tree or outside as
+a external CMake project with an existing OTB. Please note in that case
+that you’ll have to set OTBDIR CMake option.
+
+If OTBDIR is an OTB build tree, there are two ways of compiling:
+
+-  Build as a module, in which case build files will be written to the
+   OTB build tree as other modules. Main benefit is that this will
+   enrich the current OTB build with your new module, but you need to
+   have write access to the build directory.
+
+-  Build as a standalone CMake project, in which case build files will
+   remain in the module build folder. This build is fully independent
+   from the build (or install) directory, but the module will not be
+   recognized as an OTB module (still you will be able to use its
+   binaries and libraries).
+
+This behaviour is controlled by the ``OTB_BUILD_MODULE_AS_STANDALONE``, which is
+OFF by default (hence first behaviour).
+
+Note that when dealing with an installed OTB, only the second behaviour
+(build as standalone) is available.
+
+Optionally, you can build your new remote module inside the OTB source
+tree by simply copy the folder containing the module component to
+Modules/Remote, then run CMake configuration. you should see a new CMake
+option named MODULETheModuleName. Simply turn this option to ON, and
+finish CMake configuration. Your module will be built with the rest of
+the OTB project.
+
+*  Sharing your remote module
+
+To make your remote module available to others when building OTB, you
+should provide a CMake file named TheModuleName.remote.cmake file for
+inclusion in the Modules/Remote folder in OTB source tree.
+
+This file should contain the following:
+
+.. code-block:: cmake
+
+    # Contact: Author name <author email address>
+
+    otb_fetch_module(TheModuleName
+      "A description of the module, to appear during CMake configuration step"
+
+      GIT_REPOSITORY http_link_to_a_git_repository_hosting the module
+      GIT TAG the git revision to checkout
+    )
+
+This file should be provided along with your remote module inclusion
+proposal email to the otb community list. Please refer to the
+contributors guidelines for more information.
diff --git a/Documentation/Cookbook/rst/C++/Filters.rst b/Documentation/Cookbook/rst/C++/Filters.rst
new file mode 100644
index 0000000000..9345cac935
--- /dev/null
+++ b/Documentation/Cookbook/rst/C++/Filters.rst
@@ -0,0 +1,589 @@
+.. _Filters:
+
+Filters
+=======
+
+This purpose of this chapter is help developers create their own filter
+(process object). This chapter is divided into four major parts. An
+initial definition of terms is followed by an overview of the filter
+creation process. Next, data streaming is discussed. The way data is
+streamed in ITK must be understood in order to write correct filters.
+Finally, a section on multithreading describes what you must do in order
+to take advantage of shared memory parallel processing.
+
+Terminology
+-----------
+
+The following is some basic terminology for the discussion that follows.
+Chapter :ref:`SystemOverview` provides additional background
+information.
+
+-  The **data processing pipeline** is a directed graph of **process**
+   and **data objects**. The pipeline inputs, operators on, and outputs
+   data.
+
+-  A **filter**, or **process object**, has one or more inputs, and one
+   or more outputs.
+
+-  A **source**, or source process object, initiates the data processing
+   pipeline, and has one or more outputs.
+
+-  A **mapper**, or mapper process object, terminates the data
+   processing pipeline. The mapper has one or more outputs, and may
+   write data to disk, interface with a display system, or interface to
+   any other system.
+
+-  A **data object** represents and provides access to data. In ITK, the
+   data object (ITK class :doxygen-itk:`DataObject`) is typically of
+   type :doxygen:`Image` or :doxygen-itk:`Mesh`.
+
+-  A **region** (ITK class :doxygen-itk:`Region`) represents a piece, or
+   subset of the entire data set.
+
+-  An **image region** (ITK class :doxygen-itk:`ImageRegion`) represents
+   a structured portion of data. ImageRegion is implemented using the
+   :doxygen-itk:`Index` and :doxygen-itk:`Size` classes
+
+-  A **mesh region** (ITK class :doxygen-itk:`MeshRegion`) represents an
+   unstructured portion of data.
+
+-  The **LargestPossibleRegion** is the theoretical single, largest
+   piece (region) that could represent the entire dataset. The
+   LargestPossibleRegion is used in the system as the measure of the
+   largest possible data size.
+
+-  The **BufferedRegion** is a contiguous block of memory that is less
+   than or equal to in size to the LargestPossibleRegion. The buffered
+   region is what has actually been allocated by a filter to hold its
+   output.
+
+-  The **RequestedRegion** is the piece of the dataset that a filter is
+   required to produce. The RequestedRegion is less than or equal in
+   size to the BufferedRegion. The RequestedRegion may differ in size
+   from the BufferedRegion due to performance reasons. The
+   RequestedRegion may be set by a user, or by an application that needs
+   just a portion of the data.
+
+-  The **modified time** (represented by ITK class
+   :doxygen-itk:`TimeStamp`) is a monotonically increasing integer value
+   that characterizes a point in time when an object was last modified.
+
+-  **Downstream** is the direction of dataflow, from sources to mappers.
+
+-  **Upstream** is the opposite of downstream, from mappers to sources.
+
+-  The **pipeline modified time** for a particular data object is the
+   maximum modified time of all upstream data objects and process
+   objects.
+
+-  The term **information** refers to metadata that characterizes data.
+   For example, index and dimensions are information characterizing an
+   image region.
+
+Overview of Filter Creation
+---------------------------
+
+.. figure:: /Art/C++/DataPipelineOneConnection.png
+    :align: center
+
+Filters are defined with respect to the type of data they input (if
+any), and the type of data they output (if any). The key to writing a
+ITK filter is to identify the number and types of input and output.
+Having done so, there are often superclasses that simplify this task via
+class derivation. For example, most filters in ITK take a single image
+as input, and produce a single image on output. The superclass
+:doxygen-itk:`ImageToImageFilter` is a convenience class that provide
+most of the functionality needed for such a filter.
+
+Some common base classes for new filters include:
+
+-  ``ImageToImageFilter``: the most common filter base for segmentation
+   algorithms. Takes an image and produces a new image, by default of
+   the same dimensions. Override ``GenerateOutputInformation`` to
+   produce a different size.
+
+-  ``UnaryFunctorImageFilter``: used when defining a filter that applies
+   a function to an image.
+
+-  ``BinaryFunctorImageFilter``: used when defining a filter that
+   applies an operation to two images.
+
+-  ``ImageFunction``: a functor that can be applied to an image,
+   evaluating :math:`f(x)` at each point in the image.
+
+-  ``MeshToMeshFilter``: a filter that transforms meshes, such as
+   tessellation, polygon reduction, and so on.
+
+-  ``LightObject``: abstract base for filters that don’t fit well
+   anywhere else in the class hierarchy. Also useful for “calculator”
+   filters; ie. a sink filter that takes an input and calculates a
+   result which is retrieved using a ``Get()`` method.
+
+Once the appropriate superclass is identified, the filter writer
+implements the class defining the methods required by most all ITK
+objects: ``New()``, ``PrintSelf()``, and protected constructor, copy
+constructor, delete, and operator=, and so on. Also, don’t forget
+standard typedefs like ``Self``, ``Superclass``, ``Pointer``, and
+``ConstPointer``. Then the filter writer can focus on the most important
+parts of the implementation: defining the API, data members, and other
+implementation details of the algorithm. In particular, the filter
+writer will have to implement either a ``GenerateData()`` (non-threaded)
+or ``ThreadedGenerateData()`` method. (See Section [sec:MultiThreading]
+for an overview of multi-threading in ITK.)
+
+An important note: the GenerateData() method is required to allocate
+memory for the output. The ThreadedGenerateData() method is not. In
+default implementation (see :doxygen-itk:`ImageSource`, a superclass of
+:doxygen-itk:`ImageToImageFilter`) ``GenerateData()`` allocates memory
+and then invokes ``ThreadedGenerateData()``.
+
+One of the most important decisions that the developer must make is
+whether the filter can stream data; that is, process just a portion of
+the input to produce a portion of the output. Often superclass behavior
+works well: if the filter processes the input using single pixel access,
+then the default behavior is adequate. If not, then the user may have to
+a) find a more specialized superclass to derive from, or b) override one
+or more methods that control how the filter operates during pipeline
+execution. The next section describes these methods.
+
+.. _StreamingLargeData:
+
+Streaming Large Data
+--------------------
+
+The data associated with multi-dimensional images is large and becoming
+larger. This trend is due to advances in scanning resolution, as well as
+increases in computing capability. Any practical segmentation and
+registration software system must address this fact in order to be
+useful in application. ITK addresses this problem via its data streaming
+facility.
+
+In ITK, streaming is the process of dividing data into pieces, or
+regions, and then processing this data through the data pipeline. Recall
+that the pipeline consists of process objects that generate data
+objects, connected into a pipeline topology. The input to a process
+object is a data object (unless the process initiates the pipeline and
+then it is a source process object). These data objects in turn are
+consumed by other process objects, and so on, until a directed graph of
+data flow is constructed. Eventually the pipeline is terminated by one
+or more mappers, that may write data to storage, or interface with a
+graphics or other system. This is illustrated in figures
+[fig:DataPipeLineOneConnection] and [fig:DataPipeLine].
+
+A significant benefit of this architecture is that the relatively
+complex process of managing pipeline execution is designed into the
+system. This means that keeping the pipeline up to date, executing only
+those portions of the pipeline that have changed, multithreading
+execution, managing memory allocation, and streaming is all built into
+the architecture. However, these features do introduce complexity into
+the system, the bulk of which is seen by class developers. The purpose
+of this chapter is to describe the pipeline execution process in detail,
+with a focus on data streaming.
+
+Overview of Pipeline Execution
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The pipeline execution process performs several important functions.
+
+.. figure:: /Art/C++/DataPipeline.png
+    :align: center
+
+    The Data Pipeline
+
+#. It determines which filters, in a pipeline of filters, need to
+   execute. This prevents redundant execution and minimizes overall
+   execution time.
+
+#. It initializes the (filter’s) output data objects, preparing them for
+   new data. In addition, it determines how much memory each filter must
+   allocate for its output, and allocates it.
+
+#. The execution process determines how much data a filter must process
+   in order to produce an output of sufficient size for downstream
+   filters; it also takes into account any limits on memory or special
+   filter requirements. Other factors include the size of data
+   processing kernels, that affect how much data input data (extra
+   padding) is required.
+
+#. It subdivides data into subpieces for multithreading. (Note that the
+   division of data into subpieces is exactly same problem as dividing
+   data into pieces for streaming; hence multithreading comes for free
+   as part of the streaming architecture.)
+
+#. It may free (or release) output data if filters no longer need it to
+   compute, and the user requests that data is to be released. (Note: a
+   filter’s output data object may be considered a “cache”. If the cache
+   is allowed to remain (``ReleaseDataFlagOff()``) between pipeline
+   execution, and the filter, or the input to the filter, never changes,
+   then process objects downstream of the filter just reuse the filter’s
+   cache to re-execute.)
+
+To perform these functions, the execution process negotiates with the
+filters that define the pipeline. Only each filter can know how much
+data is required on input to produce a particular output. For example, a
+shrink filter with a shrink factor of two requires an image twice as
+large (in terms of its x-y dimensions) on input to produce a particular
+size output. An image convolution filter would require extra input
+(boundary padding) depending on the size of the convolution kernel. Some
+filters require the entire input to produce an output (for example, a
+histogram), and have the option of requesting the entire input. (In this
+case streaming does not work unless the developer creates a filter that
+can request multiple pieces, caching state between each piece to
+assemble the final output.)
+
+.. figure:: /Art/C++/DataPipelineUpdate.png
+    :align: center
+
+    Sequence of the Data Pipeline updating mechanism
+
+Ultimately the negotiation process is controlled by the request for data
+of a particular size (i.e., region). It may be that the user asks to
+process a region of interest within a large image, or that memory
+limitations result in processing the data in several pieces. For
+example, an application may compute the memory required by a pipeline,
+and then use :doxygen-itk:`StreamingImageFilter` to break the data
+processing into several pieces. The data request is propagated through
+the pipeline in the upstream direction, and the negotiation process
+configures each filter to produce output data of a particular size.
+
+The secret to creating a streaming filter is to understand how this
+negotiation process works, and how to override its default behavior by
+using the appropriate virtual functions defined in
+:doxygen-itk:`ProcessObject`. The next section describes the specifics
+of these methods, and when to override them. Examples are provided along
+the way to illustrate concepts.
+
+Details of Pipeline Execution
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Typically pipeline execution is initiated when a process object receives
+the ``ProcessObject::Update()`` method invocation. This method is simply
+delegated to the output of the filter, invoking the
+``DataObject::Update()`` method. Note that this behavior is typical of
+the interaction between ProcessObject and DataObject: a method invoked
+on one is eventually delegated to the other. In this way the data
+request from the pipeline is propagated upstream, initiating data flow
+that returns downstream.
+
+The ``DataObject::Update()`` method in turn invokes three other methods:
+
+-  ``DataObject::UpdateOutputInformation()``
+
+-  ``DataObject::PropagateRequestedRegion()``
+
+-  ``DataObject::UpdateOutputData()``
+
+UpdateOutputInformation()
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The ``UpdateOutputInformation()`` method determines the pipeline
+modified time. It may set the RequestedRegion and the
+LargestPossibleRegion depending on how the filters are configured. (The
+RequestedRegion is set to process all the data, i.e., the
+LargestPossibleRegion, if it has not been set.) The
+UpdateOutputInformation() propagates upstream through the entire
+pipeline and terminates at the sources.
+
+During ``UpdateOutputInformation()``, filters have a chance to override
+the ``ProcessObject::GenerateOutputInformation()`` method
+(``GenerateOutputInformation()`` is invoked by
+``UpdateOutputInformation()``). The default behavior is for the
+``GenerateOutputInformation()`` to copy the metadata describing the
+input to the output (via ``DataObject::CopyInformation()``). Remember,
+information is metadata describing the output, such as the origin,
+spacing, and LargestPossibleRegion (i.e., largest possible size) of an
+image.
+
+A good example of this behavior is :doxygen-itk:`ShrinkImageFilter`.
+This filter takes an input image and shrinks it by some integral value.
+The result is that the spacing and LargestPossibleRegion of the output
+will be different to that of the input. Thus,
+``GenerateOutputInformation()`` is overloaded.
+
+PropagateRequestedRegion()
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The ``PropagateRequestedRegion()`` call propagates upstream to satisfy a
+data request. In typical application this data request is usually the
+LargestPossibleRegion, but if streaming is necessary, or the user is
+interested in updating just a portion of the data, the RequestedRegion
+may be any valid region within the LargestPossibleRegion.
+
+The function of ``PropagateRequestedRegion()`` is, given a request for
+data (the amount is specified by RequestedRegion), propagate upstream
+configuring the filter’s input and output process object’s to the
+correct size. Eventually, this means configuring the BufferedRegion,
+that is the amount of data actually allocated.
+
+The reason for the buffered region is this: the output of a filter may
+be consumed by more than one downstream filter. If these consumers each
+request different amounts of input (say due to kernel requirements or
+other padding needs), then the upstream, generating filter produces the
+data to satisfy both consumers, that may mean it produces more data than
+one of the consumers needs.
+
+The ``ProcessObject::PropagateRequestedRegion()`` method invokes three
+methods that the filter developer may choose to overload.
+
+-  ``EnlargeOutputRequestedRegion(DataObject *output)`` gives the
+   (filter) subclass a chance to indicate that it will provide more data
+   than required for the output. This can happen, for example, when a
+   source can only produce the whole output (i.e., the
+   LargestPossibleRegion).
+
+-  ``GenerateOutputRequestedRegion(DataObject *output)`` gives the
+   subclass a chance to define how to set the requested regions for each
+   of its outputs, given this output’s requested region. The default
+   implementation is to make all the output requested regions the same.
+   A subclass may need to override this method if each output is a
+   different resolution. This method is only overridden if a filter has
+   multiple outputs.
+
+-  ``GenerateInputRequestedRegion()`` gives the subclass a chance to
+   request a larger requested region on the inputs. This is necessary
+   when, for example, a filter requires more data at the “internal”
+   boundaries to produce the boundary values - due to kernel operations
+   or other region boundary effects.
+
+:doxygen-itk:`RGBGibbsPriorFilter` is an example of a filter that needs
+to invoke ``EnlargeOutputRequestedRegion()``. The designer of this
+filter decided that the filter should operate on all the data. Note that
+a subtle interplay between this method and
+``GenerateInputRequestedRegion()`` is occurring here. The default
+behavior of ``GenerateInputRequestedRegion()`` (at least for
+:doxygen-itk:`ImageToImageFilter`) is to set the input RequestedRegion
+to the output’s ReqestedRegion. Hence, by overriding the method
+``EnlargeOutputRequestedRegion()`` to set the output to the
+LargestPossibleRegion, effectively sets the input to this filter to the
+LargestPossibleRegion (and probably causing all upstream filters to
+process their LargestPossibleRegion as well. This means that the filter,
+and therefore the pipeline, does not stream. This could be fixed by
+reimplementing the filter with the notion of streaming built in to the
+algorithm.)
+
+:doxygen-itk:`GradientMagnitudeImageFilter` is an example of a filter
+that needs to invoke ``GenerateInputRequestedRegion()``. It needs a
+larger input requested region because a kernel is required to compute
+the gradient at a pixel. Hence the input needs to be “padded out” so the
+filter has enough data to compute the gradient at each output pixel.
+
+UpdateOutputData()
+^^^^^^^^^^^^^^^^^^
+
+``UpdateOutputData()`` is the third and final method as a result of the
+``Update()`` method. The purpose of this method is to determine whether
+a particular filter needs to execute in order to bring its output up to
+date. (A filter executes when its ``GenerateData()`` method is invoked.)
+Filter execution occurs when a) the filter is modified as a result of
+modifying an instance variable; b) the input to the filter changes; c)
+the input data has been released; or d) an invalid RequestedRegion was
+set previously and the filter did not produce data. Filters execute in
+order in the downstream direction. Once a filter executes, all filters
+downstream of it must also execute.
+
+``DataObject::UpdateOutputData()`` is delegated to the DataObject’s
+source (i.e., the ProcessObject that generated it) only if the
+DataObject needs to be updated. A comparison of modified time, pipeline
+time, release data flag, and valid requested region is made. If any one
+of these conditions indicate that the data needs regeneration, then the
+source’s ``ProcessObject::UpdateOutputData()`` is invoked. These calls
+are made recursively up the pipeline until a source filter object is
+encountered, or the pipeline is determined to be up to date and valid.
+At this point, the recursion unrolls, and the execution of the filter
+proceeds. (This means that the output data is initialized, StartEvent is
+invoked, the filters ``GenerateData()`` is called, EndEvent is invoked,
+and input data to this filter may be released, if requested. In
+addition, this filter’s InformationTime is updated to the current time.)
+
+The developer will never override ``UpdateOutputData()``. The developer
+need only write the ``GenerateData()`` method (non-threaded) or
+``ThreadedGenerateData()`` method. A discussion of threading follows in
+the next section.
+
+.. _ThreadedFilterExecution:
+
+Threaded Filter Execution
+-------------------------
+
+Filters that can process data in pieces can typically multi-process
+using the data parallel, shared memory implementation built into the
+pipeline execution process. To create a multithreaded filter, simply
+define and implement a ``ThreadedGenerateData()`` method. For example, a
+:doxygen-itk:`ImageToImageFilter` would create the method:
+
+.. code-block:: cpp
+
+    void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId)
+
+The key to threading is to generate output for the output region given
+(as the first parameter in the argument list above). In ITK, this is
+simple to do because an output iterator can be created using the region
+provided. Hence the output can be iterated over, accessing the
+corresponding input pixels as necessary to compute the value of the
+output pixel.
+
+Multi-threading requires caution when performing I/O (including using
+``cout`` or ``cerr``) or invoking events. A safe practice is to allow
+only thread id zero to perform I/O or generate events. (The thread id is
+passed as argument into ``ThreadedGenerateData()``). If more than one
+thread tries to write to the same place at the same time, the program
+can behave badly, and possibly even deadlock or crash.
+
+Filter Conventions
+------------------
+
+In order to fully participate in the ITK pipeline, filters are expected
+to follow certain conventions, and provide certain interfaces. This
+section describes the minimum requirements for a filter to integrate
+into the ITK framework.
+
+The class declaration for a filter should include the macro
+``ITK_EXPORT``, so that on certain platforms an export declaration can
+be included.
+
+A filter should define public types for the class itself (``Self``) and
+its ``Superclass``, and ``const`` and non-\ ``const`` smart pointers,
+thus:
+
+.. code-block:: cpp
+
+    typedef ExampleImageFilter                Self;
+    typedef ImageToImageFilter<TImage,TImage> Superclass;
+    typedef SmartPointer<Self>                Pointer;
+    typedef SmartPointer<const Self>          ConstPointer;
+
+The ``Pointer`` type is particularly useful, as it is a smart pointer
+that will be used by all client code to hold a reference-counted
+instantiation of the filter.
+
+Once the above types have been defined, you can use the following
+convenience macros, which permit your filter to participate in the
+object factory mechanism, and to be created using the canonical
+``::New()``:
+
+.. code-block:: cpp
+
+   /** Method for creation through the object factory. */
+   itkNewMacro(Self);
+
+   /** Run-time type information (and related methods). */
+   itkTypeMacro(ExampleImageFilter, ImageToImageFilter);
+
+The default constructor should be ``protected``, and provide sensible
+defaults (usually zero) for all parameters. The copy constructor and
+assignment operator should be declared ``private`` and not implemented,
+to prevent instantiating the filter without the factory methods (above).
+
+Finally, the template implementation code (in the ``.hxx`` file) should
+be included, bracketed by a test for manual instantiation, thus:
+
+.. code-block:: cpp
+
+    #ifndef ITK_MANUAL_INSTANTIATION
+    #include "itkExampleFilter.hxx"
+    #endif
+
+Optional
+~~~~~~~~
+
+A filter can be printed to an ``std::ostream`` (such as ``std::cout``)
+by implementing the following method:
+
+.. code-block:: cpp
+
+    void PrintSelf(std::ostream& os, Indent indent) const;
+
+and writing the name-value pairs of the filter parameters to the
+supplied output stream. This is particularly useful for debugging.
+
+Useful Macros
+~~~~~~~~~~~~~
+
+Many convenience macros are provided by ITK, to simplify filter coding.
+Some of these are described below:
+
+itkStaticConstMacro
+    Declares a static variable of the given type, with the specified
+    initial value.
+
+itkGetMacro
+    Defines an accessor method for the specified scalar data member. The
+    convention is for data members to have a prefix of ``m_``.
+
+itkSetMacro
+    Defines a mutator method for the specified scalar data member, of
+    the supplied type. This will automatically set the ``Modified``
+    flag, so the filter stage will be executed on the next ``Update()``.
+
+itkBooleanMacro
+    Defines a pair of ``OnFlag`` and ``OffFlag`` methods for a boolean
+    variable ``m_Flag``.
+
+itkGetObjectMacro, itkSetObjectMacro
+    Defines an accessor and mutator for an ITK object. The Get form
+    returns a smart pointer to the object.
+
+Much more useful information can be learned from browsing the source in
+``Code/Common/itkMacro.h`` and for the :doxygen-itk:`Object` and
+:doxygen-itk:`LightObject` classes.
+
+Composite filters
+-----------------
+
+In general, most ITK/OTB filters implement one particular algorithm,
+whether it be image filtering, an information metric, or a segmentation
+algorithm. In the previous section, we saw how to write new filters from
+scratch. However, it is often very useful to be able to make a new
+filter by combining two or more existing filters, which can then be used
+as a building block in a complex pipeline. This approach follows the
+Composite pattern, whereby the composite
+filter itself behaves just as a regular filter, providing its own
+(potentially higher level) interface and using other filters (whose
+detail is hidden to users of the class) for the implementation. This
+composite structure is shown in Figure [fig:CompositeFilterStages],
+where the various ``Stage-n`` filters are combined into one by the
+``Composite`` filter. The ``Source`` and ``Sink`` filters only see the
+interface published by the ``Composite``. Using the Composite pattern, a
+composite filter can encapsulate a pipeline of arbitrary complexity.
+These can in turn be nested inside other pipelines.
+
+.. figure:: /Art/C++/CompositeFilterStages.png
+    :align: center
+
+    A Composite filter encapsulates a number of other filters.
+
+There are a few considerations to take into account when implementing a
+composite filter. All the usual requirements for filters apply (as
+discussed above), but the following guidelines should be considered:
+
+#. The template arguments it takes must be sufficient to instantiate all
+   of the component filters. Each component filter needs a type supplied
+   by either the implementor or the enclosing class. For example, an
+   ``ImageToImageFilter`` normally takes an input and output image type
+   (which may be the same). But if the output of the composite filter is
+   a classified image, we need to either decide on the output type
+   inside the composite filter, or restrict the choices of the user when
+   she/he instantiates the filter.
+
+#. The types of the component filters should be declared in the header,
+   preferably with ``protected`` visibility. This is because the
+   internal structure normally should not be visible to users of the
+   class, but should be to descendent classes that may need to modify or
+   customize the behavior.
+
+#. The component filters should be private data members of the composite
+   class, as in ``FilterType::Pointer``.
+
+#. The default constructor should build the pipeline by creating the
+   stages and connect them together, along with any default parameter
+   settings, as appropriate.
+
+#. The input and output of the composite filter need to be grafted on to
+   the head and tail (respectively) of the component filters.
+
+.. figure:: /Art/C++/CompositeExamplePipeline.png
+    :align: center
+
+    Example of a typical composite filter. Note that the output of the last filter in the internal pipeline must be grafted into the output of the composite filter.
+
+See example :ref:`CompositeFilterExample.cxx`
diff --git a/Documentation/Cookbook/rst/C++/Iterators.rst b/Documentation/Cookbook/rst/C++/Iterators.rst
new file mode 100644
index 0000000000..dc78ceb904
--- /dev/null
+++ b/Documentation/Cookbook/rst/C++/Iterators.rst
@@ -0,0 +1,624 @@
+Iterators
+=========
+
+This chapter introduces the *image iterator*, an important generic
+programming construct for image processing in ITK. An iterator is a
+generalization of the familiar C programming language pointer used to
+reference data in memory. ITK has a wide variety of image iterators,
+some of which are highly specialized to simplify common image processing
+tasks.
+
+Introduction
+------------
+
+Generic programming models define functionally independent components
+called *containers* and *algorithms*. Container objects store data and
+algorithms operate on data. To access data in containers, algorithms use
+a third class of objects called *iterators*. An iterator is an
+abstraction of a memory pointer. Every container type must define its
+own iterator type, but all iterators are written to provide a common
+interface so that algorithm code can reference data in a generic way and
+maintain functional independence from containers.
+
+The iterator is so named because it is used for *iterative*, sequential
+access of container values. Iterators appear in ``for`` and ``while``
+loop constructs, visiting each data point in turn. A C pointer, for
+example, is a type of iterator. It can be moved forward (incremented)
+and backward (decremented) through memory to sequentially reference
+elements of an array. Many iterator implementations have an interface
+similar to a C pointer.
+
+In ITK we use iterators to write generic image processing code for
+images instantiated with different combinations of pixel type, pixel
+container type, and dimensionality. Because ITK image iterators are
+specifically designed to work with *image* containers, their interface
+and implementation is optimized for image processing tasks. Using the
+ITK iterators instead of accessing data directly through the
+:doxygen:`Image` interface has many advantages. Code is more compact and
+often generalizes automatically to higher dimensions, algorithms run
+much faster, and iterators simplify tasks such as multithreading and
+neighborhood-based image processing.
+
+Programming Interface
+---------------------
+
+This section describes the standard ITK image iterator programming
+interface. Some specialized image iterators may deviate from this
+standard or provide additional methods.
+
+Creating Iterators
+~~~~~~~~~~~~~~~~~~
+
+All image iterators have at least one template parameter that is the
+image type over which they iterate. There is no restriction on the
+dimensionality of the image or on the pixel type of the image.
+
+An iterator constructor requires at least two arguments, a smart pointer
+to the image to iterate across, and an image region. The image region,
+called the *iteration region*, is a rectilinear area in which iteration
+is constrained. The iteration region must be wholly contained within the
+image. More specifically, a valid iteration region is any subregion of
+the image within the current ``BufferedRegion``.
+
+There is a const and a non-const version of most ITK image iterators. A
+non-const iterator cannot be instantiated on a non-const image pointer.
+Const versions of iterators may read, but may not write pixel values.
+
+Here is a simple example that defines and constructs a simple image
+iterator for an :doxygen:`Image`.
+
+.. code-block:: cpp
+
+    typedef otb::Image<float, 3> ImageType;
+    typedef itk::ImageRegionConstIterator<ImageType> ConstIteratorType;
+    typedef itk::ImageRegionIterator<ImageType>      IteratorType;
+
+    ImageType::Pointer image = SomeFilter->GetOutput();
+
+    ConstIteratorType constIterator(image, image->GetRequestedRegion());
+    IteratorType      iterator(image, image->GetRequestedRegion());
+
+Moving Iterators
+~~~~~~~~~~~~~~~~
+
+An iterator is described as *walking* its iteration region. At any time,
+the iterator will reference, or “point to”, one pixel location in the
+N-dimensional (ND) image. *Forward iteration* goes from the beginning of
+the iteration region to the end of the iteration region. *Reverse
+iteration*, goes from just past the end of the region back to the
+beginning. There are two corresponding starting positions for iterators,
+the *begin* position and the *end* position. An iterator can be moved
+directly to either of these two positions using:
+
+-  ``GoToBegin()`` Points the iterator to the first valid data
+   element in the region.
+
+-  ``GoToEnd()`` Points the iterator to *one position past* the last
+   valid element in the region.
+
+Note that the end position is not actually located within the iteration
+region. This is important to remember because attempting to dereference
+an iterator at its end position will have undefined results.
+
+ITK iterators are moved back and forth across their iterations using the
+decrement and increment operators:
+
+-  ``operator++()`` Increments the iterator one position in the
+   positive direction. Only the prefix increment operator is defined for
+   ITK image iterators.
+
+-  ``operator–()`` Decrements the iterator one position in the
+   negative direction. Only the prefix decrement operator is defined for
+   ITK image iterators.
+
+The figure below illustrates typical iteration over an image
+region. Most iterators increment and decrement in the direction of the
+fastest increasing image dimension, wrapping to the first position in
+the next higher dimension at region boundaries. In other words, an
+iterator first moves across columns, then down rows, then from slice to
+slice, and so on.
+
+.. figure:: /Art/C++/IteratorFigure1.png
+    :align: center
+
+    Normal path of an iterator through a
+    2D image.  The iteration region is shown in a darker shade.  An arrow denotes
+    a single iterator step, the result of one ++ operation.
+
+In addition to sequential iteration through the image, some iterators
+may define random access operators. Unlike the increment operators,
+random access operators may not be optimized for speed and require some
+knowledge of the dimensionality of the image and the extent of the
+iteration region to use properly.
+
+-  ``operator+=(OffsetType)`` Moves the iterator to the pixel
+   position at the current index plus specified :doxygen-itk:`Offset`.
+
+-  ``operator-=(OffsetType)`` Moves the iterator to the pixel
+   position at the current index minus specified Offset.
+
+-  ``SetPosition(IndexType)`` Moves the iterator to the given
+   :doxygen-itk:`Index` position.
+
+The ``SetPosition()`` method may be extremely slow for more complicated
+iterator types. In general, it should only be used for setting a
+starting iteration position, like you would use ``GoToBegin()`` or
+``GoToEnd()``.
+
+Some iterators do not follow a predictable path through their iteration
+regions and have no fixed beginning or ending pixel locations. A
+conditional iterator, for example, visits pixels only if they have
+certain values or connectivities. Random iterators, increment and
+decrement to random locations and may even visit a given pixel location
+more than once.
+
+An iterator can be queried to determine if it is at the end or the
+beginning of its iteration region.
+
+-  ``bool IsAtEnd()`` True if the iterator points to *one position
+   past* the end of the iteration region.
+
+-  ``bool IsAtBegin()`` True if the iterator points to the first
+   position in the iteration region. The method is typically used to
+   test for the end of reverse iteration.
+
+An iterator can also report its current image index position.
+
+-  ``IndexType GetIndex()`` Returns the Index of the image pixel
+   that the iterator currently points to.
+
+For efficiency, most ITK image iterators do not perform bounds checking.
+It is possible to move an iterator outside of its valid iteration
+region. Dereferencing an out-of-bounds iterator will produce undefined
+results.
+
+Accessing Data
+~~~~~~~~~~~~~~
+
+ITK image iterators define two basic methods for reading and writing
+pixel values.
+
+-  ``PixelType Get()`` Returns the value of the pixel at the
+   iterator position.
+
+-  ``void Set(PixelType)`` Sets the value of the pixel at the
+   iterator position. Not defined for const versions of iterators.
+
+The ``Get()`` and ``Set()`` methods are inlined and optimized for speed
+so that their use is equivalent to dereferencing the image buffer
+directly. There are a few common cases, however, where using ``Get()``
+and ``Set()`` do incur a penalty. Consider the following code, which
+fetches, modifies, and then writes a value back to the same pixel
+location:
+
+.. code-block:: cpp
+
+      it.Set(it.Get() + 1);
+
+As written, this code requires one more memory dereference than is
+necessary. Some iterators define a third data access method that avoids
+this penalty.
+
+-  ``PixelType & Value()`` Returns a reference to the pixel at the
+   iterator position.
+
+The ``Value()`` method can be used as either an lval or an rval in an
+expression. It has all the properties of ``operator*``. The ``Value()``
+method makes it possible to rewrite our example code more efficiently:
+
+.. code-block:: cpp
+
+      it.Value()++;
+
+Consider using the ``Value()`` method instead of ``Get()`` or ``Set()``
+when a call to ``operator=`` on a pixel is non-trivial, such as when
+working with vector pixels, and operations are done in-place in the
+image.
+
+Iteration Loops
+~~~~~~~~~~~~~~~
+
+Using the methods described in the previous sections, we can now write a
+simple example to do pixel-wise operations on an image. The following
+code calculates the squares of all values in an input image and writes
+them to an output image.
+
+.. code-block:: cpp
+
+    ConstIteratorType in(inputImage, inputImage->GetRequestedRegion());
+    IteratorType      out(outputImage, inputImage->GetRequestedRegion());
+
+    for (in.GoToBegin(), out.GoToBegin(); !in.IsAtEnd(); ++in, ++out)
+    {
+      out.Set(in.Get() * in.Get());
+    }
+
+Notice that both the input and output iterators are initialized over the
+same region, the ``RequestedRegion`` of ``inputImage``. This is good
+practice because it ensures that the output iterator walks exactly the
+same set of pixel indices as the input iterator, but does not require
+that the output and input be the same size. The only requirement is that
+the input image must contain a region (a starting index and size) that
+matches the ``RequestedRegion`` of the output image.
+
+Equivalent code can be written by iterating through the image in
+reverse. The syntax is slightly more awkward because the *end* of the
+iteration region is not a valid position and we can only test whether
+the iterator is strictly *equal* to its beginning position. It is often
+more convenient to write reverse iteration in a ``while`` loop.
+
+.. code-block:: cpp
+
+    in.GoToEnd();
+    out.GoToEnd();
+    while (!in.IsAtBegin())
+    {
+      --in;
+      --out;
+      out.Set(in.Get() * in.Get());
+    }
+
+Image Iterators
+---------------
+
+This section describes iterators that walk rectilinear image regions and
+reference a single pixel at a time. The
+:doxygen-itk:`ImageRegionIterator` is the most basic ITK image iterator
+and the first choice for most applications. The rest of the iterators in
+this section are specializations of ImageRegionIterator that are
+designed make common image processing tasks more efficient or easier to
+implement.
+
+* ImageRegionIterator: See example :ref:`ImageRegionIterator.cxx`
+
+* ImageRegionIteratorWithIndex: See example :ref:`ImageRegionIteratorWithIndex.cxx`
+
+* ImageLinearIteratorWithIndex: See example :ref:`ImageLinearIteratorWithIndex.cxx`
+
+Neighborhood Iterators
+----------------------
+
+In ITK, a pixel neighborhood is loosely defined as a small set of pixels
+that are locally adjacent to one another in an image. The size and shape
+of a neighborhood, as well the connectivity among pixels in a
+neighborhood, may vary with the application.
+
+Many image processing algorithms are neighborhood-based, that is, the
+result at a pixel :math:`i` is computed from the values of pixels in the
+ND neighborhood of :math:`i`. Consider finite difference operations in
+2D. A derivative at pixel index :math:`i = (j, k)`, for example, is
+taken as a weighted difference of the values at :math:`(j+1, k)` and
+:math:`(j-1, k)`. Other common examples of neighborhood operations
+include convolution filtering and image morphology.
+
+This section describes a class of ITK image iterators that are designed
+for working with pixel neighborhoods. An ITK neighborhood iterator walks
+an image region just like a normal image iterator, but instead of only
+referencing a single pixel at each step, it simultaneously points to the
+entire ND neighborhood of pixels. Extensions to the standard iterator
+interface provide read and write access to all neighborhood pixels and
+information such as the size, extent, and location of the neighborhood.
+
+Neighborhood iterators use the same operators defined in
+Section [sec:IteratorsInterface] and the same code constructs as normal
+iterators for looping through an image.
+Figure [fig:NeighborhoodIteratorFig1] shows a neighborhood iterator
+moving through an iteration region. This iterator defines a :math:`3x3`
+neighborhood around each pixel that it visits. The *center* of the
+neighborhood iterator is always positioned over its current index and
+all other neighborhood pixel indices are referenced as offsets from the
+center index. The pixel under the center of the neighborhood iterator
+and all pixels under the shaded area, or *extent*, of the iterator can
+be dereferenced.
+
+.. figure:: /Art/C++/NeighborhoodIteratorFig1.png
+    :align: center
+
+    Path of a ``3x3`` neighborhood iterator through a 2D image region. The extent
+    of the neighborhood is indicated by the hashing around the iterator
+    position. Pixels that lie within this extent are accessible through the
+    iterator. An arrow denotes a single iterator step, the result of one ++
+    operation.
+
+In addition to the standard image pointer and iteration region
+(Section [sec:IteratorsInterface]), neighborhood iterator constructors
+require an argument that specifies the extent of the neighborhood to
+cover. Neighborhood extent is symmetric across its center in each axis
+and is given as an array of :math:`N` distances that are collectively
+called the *radius*. Each element :math:`d` of the radius, where
+:math:`0 < d < N` and :math:`N` is the dimensionality of the
+neighborhood, gives the extent of the neighborhood in pixels for
+dimension :math:`N`. The length of each face of the resulting ND
+hypercube is :math:`2d + 1` pixels, a distance of :math:`d` on either
+side of the single pixel at the neighbor center.
+Figure [fig:NeighborhoodIteratorFig2] shows the relationship between the
+radius of the iterator and the size of the neighborhood for a variety of
+2D iterator shapes.
+
+The radius of the neighborhood iterator is queried after construction by
+calling the ``GetRadius()`` method. Some other methods provide some
+useful information about the iterator and its underlying image.
+
+.. figure:: /Art/C++/NeighborhoodIteratorFig2.png
+    :align: center
+    :figwidth: 75%
+
+    Several possible 2D neighborhood iterator shapes are shown along with their
+    radii and sizes. A neighborhood pixel can be dereferenced by its integer
+    index (top) or its offset from the center (bottom). The center pixel of each
+    iterator is shaded.
+
+-  ``SizeType GetRadius()`` Returns the ND radius of the
+   neighborhood as an :doxygen-itk:`Size`.
+
+-  ``const ImageType *GetImagePointer()`` Returns the pointer to the
+   image referenced by the iterator.
+
+-  ``unsigned long Size()`` Returns the size in number of pixels of
+   the neighborhood.
+
+The neighborhood iterator interface extends the normal ITK iterator
+interface for setting and getting pixel values. One way to dereference
+pixels is to think of the neighborhood as a linear array where each
+pixel has a unique integer index. The index of a pixel in the array is
+determined by incrementing from the upper-left-forward corner of the
+neighborhood along the fastest increasing image dimension: first column,
+then row, then slice, and so on. In
+Figure [fig:NeighborhoodIteratorFig2], the unique integer index is shown
+at the top of each pixel. The center pixel is always at position
+:math:`n/2`, where :math:`n` is the size of the array.
+
+-  ``PixelType GetPixel(const unsigned int i)`` Returns the value of
+   the pixel at neighborhood position ``i``.
+
+-  ``void SetPixel(const unsigned int i, PixelType p)`` Sets the
+   value of the pixel at position ``i`` to ``p``.
+
+Another way to think about a pixel location in a neighborhood is as an
+ND offset from the neighborhood center. The upper-left-forward corner of
+a :math:`3x3x3` neighborhood, for example, can be described by offset
+:math:`(-1, -1, -1)`. The bottom-right-back corner of the same
+neighborhood is at offset :math:`(1, 1, 1)`. In
+Figure [fig:NeighborhoodIteratorFig2], the offset from center is shown
+at the bottom of each neighborhood pixel.
+
+-  ``PixelType GetPixel(const OffsetType &o)`` Get the value of the
+   pixel at the position offset ``o`` from the neighborhood center.
+
+-  ``void SetPixel(const OffsetType &o, PixelType p)`` Set the value
+   at the position offset ``o`` from the neighborhood center to the
+   value ``p``.
+
+The neighborhood iterators also provide a shorthand for setting and
+getting the value at the center of the neighborhood.
+
+-  ``PixelType GetCenterPixel()`` Gets the value at the center of
+   the neighborhood.
+
+-  ``void SetCenterPixel(PixelType p)`` Sets the value at the center
+   of the neighborhood to the value ``p``
+
+There is another shorthand for setting and getting values for pixels
+that lie some integer distance from the neighborhood center along one of
+the image axes.
+
+-  ``PixelType GetNext(unsigned int d)`` Get the value immediately
+   adjacent to the neighborhood center in the positive direction along
+   the ``d`` axis.
+
+-  ``void SetNext(unsigned int d, PixelType p)`` Set the value
+   immediately adjacent to the neighborhood center in the positive
+   direction along the ``d`` axis to the value ``p``.
+
+-  ``PixelType GetPrevious(unsigned int d)`` Get the value
+   immediately adjacent to the neighborhood center in the negative
+   direction along the ``d`` axis.
+
+-  ``void SetPrevious(unsigned int d, PixelType p)`` Set the value
+   immediately adjacent to the neighborhood center in the negative
+   direction along the ``d`` axis to the value ``p``.
+
+-  ``PixelType GetNext(unsigned int d, unsigned int s)`` Get the
+   value of the pixel located ``s`` pixels from the neighborhood center
+   in the positive direction along the ``d`` axis.
+
+-  ``void SetNext(unsigned int d, unsigned int s, PixelType p)`` Set
+   the value of the pixel located ``s`` pixels from the neighborhood
+   center in the positive direction along the ``d`` axis to value ``p``.
+
+-  ``PixelType GetPrevious(unsigned int d, unsigned int s)`` Get the
+   value of the pixel located ``s`` pixels from the neighborhood center
+   in the positive direction along the ``d`` axis.
+
+-  ``void SetPrevious(unsigned int d, unsigned int s, PixelType p)``
+   Set the value of the pixel located ``s`` pixels from the neighborhood
+   center in the positive direction along the ``d`` axis to value ``p``.
+
+It is also possible to extract or set all of the neighborhood values
+from an iterator at once using a regular ITK neighborhood object. This
+may be useful in algorithms that perform a particularly large number of
+calculations in the neighborhood and would otherwise require multiple
+dereferences of the same pixels.
+
+-  ``NeighborhoodType GetNeighborhood()`` Return a
+   :doxygen-itk:`Neighborhood` of the same size and shape as the
+   neighborhood iterator and contains all of the values at the iterator
+   position.
+
+-  ``void SetNeighborhood(NeighborhoodType &N)`` Set all of the
+   values in the neighborhood at the iterator position to those
+   contained in Neighborhood ``N``, which must be the same size and
+   shape as the iterator.
+
+Several methods are defined to provide information about the
+neighborhood.
+
+-  ``IndexType GetIndex()`` Return the image index of the center
+   pixel of the neighborhood iterator.
+
+-  ``IndexType GetIndex(OffsetType o)`` Return the image index of
+   the pixel at offset ``o`` from the neighborhood center.
+
+-  ``IndexType GetIndex(unsigned int i)`` Return the image index of
+   the pixel at array position ``i``.
+
+-  ``OffsetType GetOffset(unsigned int i)`` Return the offset from
+   the neighborhood center of the pixel at array position ``i``.
+
+-  ``unsigned long GetNeighborhoodIndex(OffsetType o)`` Return the
+   array position of the pixel at offset ``o`` from the neighborhood
+   center.
+
+-  ``std::slice GetSlice(unsigned int n)`` Return a ``std::slice``
+   through the iterator neighborhood along axis ``n``.
+
+A neighborhood-based calculation in a neighborhood close to an image
+boundary may require data that falls outside the boundary. The iterator
+in Figure [fig:NeighborhoodIteratorFig1], for example, is centered on a
+boundary pixel such that three of its neighbors actually do not exist in
+the image. When the extent of a neighborhood falls outside the image,
+pixel values for missing neighbors are supplied according to a rule,
+usually chosen to satisfy the numerical requirements of the algorithm. A
+rule for supplying out-of-bounds values is called a *boundary
+condition*.
+
+ITK neighborhood iterators automatically detect out-of-bounds
+dereferences and will return values according to boundary conditions.
+The boundary condition type is specified by the second, optional
+template parameter of the iterator. By default, neighborhood iterators
+use a Neumann condition where the first derivative across the boundary
+is zero. The Neumann rule simply returns the closest in-bounds pixel
+value to the requested out-of-bounds location. Several other common
+boundary conditions can be found in the ITK toolkit. They include a
+periodic condition that returns the pixel value from the opposite side
+of the data set, and is useful when working with periodic data such as
+Fourier transforms, and a constant value condition that returns a set
+value :math:`v` for all out-of-bounds pixel dereferences. The constant
+value condition is equivalent to padding the image with value :math:`v`.
+
+Bounds checking is a computationally expensive operation because it
+occurs each time the iterator is incremented. To increase efficiency, a
+neighborhood iterator automatically disables bounds checking when it
+detects that it is not necessary. A user may also explicitly disable or
+enable bounds checking. Most neighborhood based algorithms can minimize
+the need for bounds checking through clever definition of iteration
+regions. These techniques are explored in
+Section [sec:NeighborhoodExample3].
+
+-  ``void NeedToUseBoundaryConditionOn()`` Explicitly turn bounds
+   checking on. This method should be used with caution because
+   unnecessarily enabling bounds checking may result in a significant
+   performance decrease. In general you should allow the iterator to
+   automatically determine this setting.
+
+-  ``void NeedToUseBoundaryConditionOff()`` Explicitly disable
+   bounds checking. This method should be used with caution because
+   disabling bounds checking when it is needed will result in
+   out-of-bounds reads and undefined results.
+
+-  ``void OverrideBoundaryCondition(BoundaryConditionType *b)``
+   Overrides the templated boundary condition, using boundary condition
+   object ``b`` instead. Object ``b`` should not be deleted until it has
+   been released by the iterator. This method can be used to change
+   iterator behavior at run-time.
+
+-  ``void ResetBoundaryCondition()`` Discontinues the use of any
+   run-time specified boundary condition and returns to using the
+   condition specified in the template argument.
+
+-  ``void SetPixel(unsigned int i, PixelType p, bool status)`` Sets
+   the value at neighborhood array position ``i`` to value ``p``. If the
+   position ``i`` is out-of-bounds, ``status`` is set to ``false``,
+   otherwise ``status`` is set to ``true``.
+
+The following sections describe the two ITK neighborhood iterator
+classes, :doxygen-itk:`NeighborhoodIterator` and
+:doxygen-itk:`ShapedNeighborhoodIterator`. Each has a const and a
+non-const version. The shaped iterator is a refinement of the standard
+NeighborhoodIterator that supports an arbitrarily-shaped
+(non-rectilinear) neighborhood.
+
+NeighborhoodIterator
+~~~~~~~~~~~~~~~~~~~~
+
+The standard neighborhood iterator class in ITK is the
+:doxygen-itk:`NeighborhoodIterator`. Together with its ``const``
+version, :doxygen-itk:`ConstNeighborhoodIterator`, it implements the
+complete API described above. This section provides several examples to
+illustrate the use of NeighborhoodIterator.
+
+* Basic neighborhood techniques: edge detection. See example :ref:`NeighborhoodIterators1.cxx`
+
+* Convolution filtering: Sobel operator. See example :ref:`NeighborhoodIterators2.cxx`
+
+* Optimizing iteration speed. See example :ref:`NeighborhoodIterators3.cxx`
+
+* Separable convolution: Gaussian filtering. See example :ref:`NeighborhoodIterators4.cxx`
+
+* Random access iteration: See example :ref:`NeighborhoodIterators6.cxx`
+
+ShapedNeighborhoodIterator
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This section describes a variation on the neighborhood iterator called a
+*shaped* neighborhood iterator. A shaped neighborhood is defined like a
+bit mask, or *stencil*, with different offsets in the rectilinear
+neighborhood of the normal neighborhood iterator turned off or on to
+create a pattern. Inactive positions (those not in the stencil) are not
+updated during iteration and their values cannot be read or written. The
+shaped iterator is implemented in the class
+:doxygen-itk:`ShapedNeighborhoodIterator`, which is a subclass of
+:doxygen-itk:`NeighborhoodIterator`. A const version,
+:doxygen-itk:`ConstShapedNeighborhoodIterator`, is also available.
+
+Like a regular neighborhood iterator, a shaped neighborhood iterator
+must be initialized with an ND radius object, but the radius of the
+neighborhood of a shaped iterator only defines the set of *possible*
+neighbors. Any number of possible neighbors can then be activated or
+deactivated. The shaped neighborhood iterator defines an API for
+activating neighbors. When a neighbor location, defined relative to the
+center of the neighborhood, is activated, it is placed on the *active
+list* and is then part of the stencil. An iterator can be “reshaped” at
+any time by adding or removing offsets from the active list.
+
+-  ``void ActivateOffset(OffsetType &o)`` Include the offset ``o``
+   in the stencil of active neighborhood positions. Offsets are relative
+   to the neighborhood center.
+
+-  ``void DeactivateOffset(OffsetType &o)`` Remove the offset ``o``
+   from the stencil of active neighborhood positions. Offsets are
+   relative to the neighborhood center.
+
+-  ``void ClearActiveList()`` Deactivate all positions in the
+   iterator stencil by clearing the active list.
+
+-  ``unsigned int GetActiveIndexListSize()`` Return the number of
+   pixel locations that are currently active in the shaped iterator
+   stencil.
+
+Because the neighborhood is less rigidly defined in the shaped iterator,
+the set of pixel access methods is restricted. Only the ``GetPixel()``
+and ``SetPixel()`` methods are available, and calling these methods on
+an inactive neighborhood offset will return undefined results.
+
+For the common case of traversing all pixel offsets in a neighborhood,
+the shaped iterator class provides an iterator through the active
+offsets in its stencil. This *stencil iterator* can be incremented or
+decremented and defines ``Get()`` and ``Set()`` for reading and writing
+the values in the neighborhood.
+
+-  ``ShapedNeighborhoodIterator::Iterator Begin()`` Return a const
+   or non-const iterator through the shaped iterator stencil that points
+   to the first valid location in the stencil.
+
+-  ``ShapedNeighborhoodIterator::Iterator End()`` Return a const or
+   non-const iterator through the shaped iterator stencil that points
+   *one position past* the last valid location in the stencil.
+
+The functionality and interface of the shaped neighborhood iterator is
+best described by example. We will use the ShapedNeighborhoodIterator to
+implement some binary image morphology algorithms.
+The examples that follow implement erosion and dilation.
+
+For shaped neighborhoods morphological operations, see also examples
+:ref:`ShapedNeighborhoodIterators1.cxx` and :ref:`ShapedNeighborhoodIterators2.cxx`.
diff --git a/Documentation/Cookbook/rst/C++/PersistentFilters.rst b/Documentation/Cookbook/rst/C++/PersistentFilters.rst
new file mode 100644
index 0000000000..2c7b6073bb
--- /dev/null
+++ b/Documentation/Cookbook/rst/C++/PersistentFilters.rst
@@ -0,0 +1,258 @@
+Persistent filters
+==================
+
+Introduction
+------------
+
+As presented in chapter :ref:`StreamingAndThreading`, OTB has two main mechanisms
+to handle large data: streaming allows to process image piece-wise, and
+multi-threading allows to process concurrently several pieces of one streaming
+block. Using these concepts, one can easily write pixel-wise or
+neighborhood-based filters and insert them into a pipeline which will be
+scalable with respect to the input image size.
+
+Yet, sometimes we need to compute global features on the whole image.
+One example is to determine image mean and variance of the input image
+in order to produce a centered and reduced image. The operation of
+centering and reducing each pixel is fully compliant with streaming and
+threading, but one has to first estimate the mean and variance of the
+image. This first step requires to walk the whole image once, and
+traditional streaming and multi-threading based filter architecture is
+of no help here.
+
+This is because there is a fundamental difference between these two
+operations: one supports streaming, and the other needs to perform
+streaming. In fact we would like to stream the whole image piece by
+piece through some filter that will collect and keep mean and variance
+cumulants, and then synthetize theses cumulants to compute the final
+mean and variance once the full image as been streamed. Each stream
+would also benefit from parallel processing. This is exactly what
+persistent filters are for.
+
+Architecture
+------------
+
+There are two main objects in the persistent filters framework. The
+first is the :doxygen:`PersistentImageFilter`, the second is the
+:doxygen:`PersistentFilterStreamingDecorator`.
+
+The persistent filter class
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The :doxygen:`PersistentImageFilter` class is a regular
+:doxygen-itk:`ImageToImageFilter`, with two additional pure virtual
+methods: the ``Synthetize()`` and the ``Reset()`` methods.
+
+Imagine that the ``GenerateData()`` or ``ThreadedGenerateData()``
+progressively computes some global feature of the whole image, using
+some member of the class to store intermediate results. The
+``Synthetize()`` is an additional method which is designed to be called
+one the whole image has been processed, in order to compute the final
+results from the intermediate results. The ``Reset()`` method is
+designed to allow the reset of the intermediate results members so as to
+start a fresh processing.
+
+Any sub-class of the :doxygen:`PersistentImageFilter` can be used as a
+regular :doxygen-itk:`ImageToImageFilter` (provided that both
+``Synthetize()`` and ``Reset()`` have been implemented, but the real
+interest of these filters is to be used with the streaming decorator
+class presented in the next section.
+
+The streaming decorator class
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The :doxygen:`PersistentFilterStreamingDecorator` is a class designed to
+be templated with subclasses of the :doxygen:`PersistentImageFilter`. It
+provides the mechanism to stream the whole image through the templated
+filter, using a third class called
+:doxygen:`StreamingImageVirtualWriter`. When the ``Update()`` method is
+called on a :doxygen:`PersistentFilterStreamingDecorator`, a pipeline
+plugging the templated subclass of the :doxygen:`PersistentImageFilter`
+to an instance of :doxygen:`StreamingImageVirtualWriter` is created. The
+latter is then updated, and acts like a regular
+:doxygen:`ImageFileWriter` but it does not actually write anything to
+the disk : streaming pieces are requested and immediately discarded. The
+:doxygen:`PersistentFilterStreamingDecorator` also calls the ``Reset()``
+method at the beginning and the ``Synthetize()`` method at the end of
+the streaming process. Therefore, it packages the whole mechanism for
+the use of a :doxygen:`PersistentImageFilter`:
+
+#. Call the ``Reset()`` method on the filter so as to reset any
+   temporary results members,
+
+#. Stream the image piece-wise through the filter,
+
+#. Call the ``Synthetize()`` method on the filter so as to compute the
+   final results.
+
+There are some methods that allows to tune the behavior of the
+:doxygen:`StreamingImageVirtualWriter`, allowing to change the image
+splitting methods (tiles or strips) or the size of the streams with
+respect to some target available amount of memory. Please see the class
+documentation for details. The instance of the
+:doxygen:`StreamingImageVirtualWriter` can be retrieved from the
+:doxygen:`PersistentFilterStreamingDecorator` through the
+``GetStreamer()`` method.
+
+Though the internal filter of the
+:doxygen:`PersistentFilterStreamingDecorator` can be accessed through
+the ``GetFilter()`` method, the class is often derived to package the
+streaming-decorated filter and wrap the parameters setters and getters.
+
+An end-to-end example
+---------------------
+
+This is an end-to-end example to compute the mean over a full image,
+using a streaming and threading-enabled filter. Please note that only
+specific details are explained here. For more general information on how
+to write a filter, please refer to section :ref:`Filters`.
+
+First step: writing a persistent filter
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The first step is to write a persistent mean image filter. We need to
+include the appropriate header :
+
+.. code-block:: cpp
+
+    #include "otbPersistentImageFilter.h"
+
+Then, we declare the class prototype as follows:
+
+.. code-block:: cpp
+
+    template<class TInputImage>
+    class ITK_EXPORT PersistentMeanImageFilter :
+      public PersistentImageFilter<TInputImage, TInputImage>
+
+Since the output image will only be used for streaming purpose, we do
+not need to declare different input and output template types.
+
+In the *private* section of the class, we will declare a member which
+will be used to store temporary results, and a member which will be used
+to store the final result.
+
+.. code-block:: cpp
+
+    private:
+      // Temporary results container
+      std::vector<PixelType> m_TemporarySums;
+
+      // Final result member
+      double m_Mean;
+
+Next, we will write the ``Reset()`` method implementation in the
+*protected* section of the class. Proper allocation of the temporary
+results container with respect to the number of threads is handled here.
+
+.. code-block:: cpp
+
+    protected:
+      virtual void Reset()
+      {
+        // Retrieve the number of threads
+        unsigned int numberOfThreads = this->GetNumberOfThreads();
+
+        // Reset the temporary results container
+        m_TemporarySums = std::vector<PixelType>(numberOfThreads, itk::NumericTraits<PixelType>::Zero);
+
+        // Reset the final result
+        m_Mean = 0.;
+      }
+
+Now, we need to write the ``ThreadedGenerateData()`` methods (also in
+the *protected* section), were temporary results will be computed for
+each piece of stream.
+
+.. code-block:: cpp
+
+    virtual void ThreadedGenerateData(const RegionType&
+                                      outputRegionForThread,
+                                      itk::ThreadIdType threadId)
+    {
+      // Enable progress reporting
+      itk::ProgressReporter(this,threadId,outputRegionForThread.GetNumberOfPixels());
+
+      // Retrieve the input pointer
+      InputImagePointer inputPtr = const_cast<TInputImage *>(this->GetInput());
+
+      // Declare an iterator on the region
+      itk::ImageRegionConstIteratorWithIndex<TInputImage> it(inputPtr,
+      outputRegionForThread);
+
+      // Walk the region of the image with the iterator
+      for (it.GoToBegin(); !it.IsAtEnd(); ++it, progress.CompletedPixel())
+      {
+        // Retrieve pixel value
+        const PixelType& value = it.Get();
+
+        // Update temporary results for the current thread
+        m_TemporarySums[threadId]+= value;
+      }
+    }
+
+Last, we need to define the ``Synthetize()`` method (still in the
+*protected* section), which will yield the final results:
+
+.. code-block:: cpp
+
+    virtual void Synthetize()
+    {
+      // For each thread
+      for(unsigned int threadId = 0; threadId <this->GetNumberOfThreads();++threadId)
+      {
+        // Update final result
+        m_Mean+=m_TemporarySums[threadId];
+      }
+
+      // Complete calculus by dividing by the total number of pixels
+      unsigned int nbPixels = this->GetInput()->GetLargestPossibleRegion().GetNumberOfPixels();
+
+      if(nbPixels != 0)
+      {
+        m_Mean /= nbPixels;
+      }
+    }
+
+Second step: Decorating the filter and using it
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Now, to use the filter, one only has to decorate it with the
+:doxygen:`PersistentFilterStreamingDecorator`. First step is to include
+the appropriate header:
+
+.. code-block:: cpp
+
+    #include "otbPersistentMeanImageFilter.h"
+    #include "otbPersistentFilterStreamingDecorator.h"
+
+Then, we decorate the filter with some typedefs:
+
+.. code-block:: cpp
+
+    typedef otb::PersistentMeanImageFilter<ImageType> PersitentMeanFilterType;
+    typedef otb::PersistentFilterStreamingDecorator <PersitentMeanFilterType> StreamingMeanFilterType;
+
+Now, the decorated filter can be used like any standard filter:
+
+.. code-block:: cpp
+
+    StreamingMeanFilterType::Pointer filter = StreamingMeanFilterType::New();
+
+    filter->SetInput(reader->GetOutput());
+    filter->Update();
+
+Third step: one class to rule them all
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+It is often convenient to avoid the few typedefs of the previous section
+by deriving a new class from the decorated filter:
+
+.. code-block:: cpp
+
+    template<class TInputImage>
+    class ITK_EXPORT StreamingMeanImageFilter :
+      public PersistentFilterStreamingDecorator<PersistentImageFilter<TInputImage, TInputImage>>
+
+This also allows to redefine setters and getters for parameters,
+avoiding to call the ``GetFilter()`` method to set them.
diff --git a/Documentation/Cookbook/rst/C++/StreamingAndThreading.rst b/Documentation/Cookbook/rst/C++/StreamingAndThreading.rst
new file mode 100644
index 0000000000..0d7d29f4be
--- /dev/null
+++ b/Documentation/Cookbook/rst/C++/StreamingAndThreading.rst
@@ -0,0 +1,68 @@
+.. _StreamingAndThreading:
+
+Streaming and Threading
+=======================
+
+Streaming and threading are two
+different things even if they are linked to a certain extent. In OTB:
+
+-  Streaming describes the ability to combine the processing of several
+   portion of a big image and to make the output identical as what you
+   would have got if the whole image was processed at once. Streaming is
+   compulsory when you’re processing gigabyte images.
+
+-  Threading is the ability to process simultaneously different parts of
+   the image. Threading will give you some benefits only if you have a
+   fairly recent processor.
+
+To sum up: streaming is good if you have big images, threading is good
+if you have several processing units.
+
+However, these two properties are not unrelated. Both rely on the filter
+ability to process parts of the image and combine the result, that's what
+the ``ThreadedGenerateData()`` method can do.
+
+Streaming and threading in OTB
+------------------------------
+
+For OTB, streaming is pipeline related while threading is filter
+related. If you build a pipeline where one filter is not streamable, the
+whole pipeline is not streamable: at one point, you would hold the
+entire image in memory. Whereas you will benefit from a threaded filter
+even if the rest of the pipeline is made of non-threadable filters (the
+processing time will be shorter for this particular filter).
+
+Even if you use a non streamed writer, each filter which has a
+``ThreadedGenerateData()`` will split the image into two and send each part
+to one thread and you will notice two calls to the function.
+
+If you have some particular requirement and want to use only one thread,
+you can call the ``SetNumberOfThreads()`` method on each of your filter.
+
+When you are writing your own filter, you have to follow some rules to
+make your filter streamable and threadable. Some details are provided in
+sections :ref:`StreamingLargeData` and :ref:`ThreadedFilterExecution`.
+
+Division strategies
+-------------------
+
+The division of the image occurs generally at the writer level.
+Different strategies are available and can be specified explicitly. In
+OTB, these are referred as *splitter*. Several available splitters are:
+
+-  :doxygen-itk:`ImageRegionSplitter`
+
+-  :doxygen-itk:`ImageRegionMultidimensionalSplitter`
+
+-  :doxygen:`ImageRegionNonUniformMultidimensionalSplitter`
+
+You can add your own strategies based on these examples.
+
+To change the splitting strategy of the writer, you can use the
+following model:
+
+.. code-block:: cpp
+
+    typedef otb::ImageRegionNonUniformMultidimensionalSplitter<3> splitterType;
+    splitterType::Pointer splitter=splitterType::New() ;
+    writer->SetRegionSplitter(splitter);
diff --git a/Documentation/Cookbook/rst/C++/SystemOverview.rst b/Documentation/Cookbook/rst/C++/SystemOverview.rst
new file mode 100644
index 0000000000..7eafff2e0b
--- /dev/null
+++ b/Documentation/Cookbook/rst/C++/SystemOverview.rst
@@ -0,0 +1,358 @@
+.. _SystemOverview:
+
+System Overview
+===============
+
+The purpose of this chapter is to provide you with an overview of the
+*ORFEO Toolbox* system. We recommend that you read this chapter to gain
+an appreciation for the breadth and area of application of OTB. In this
+chapter, we will make reference either to *OTB features* or *ITK
+features* without distinction. Bear in mind that OTB uses ITK as its
+core element, so all the fundamental elements of OTB come from ITK. OTB
+extends the functionalities of ITK for the remote sensing image
+processing community. We benefit from the Open Source development
+approach chosen for ITK, which allows us to provide an impressive set of
+functionalities with much less effort than would have been the case in a
+closed source universe!
+
+System Organization
+-------------------
+
+The Orfeo Toolbox consists of several subsystems:
+
+Essential System Concepts
+    Like any software system, OTB is built around some core design
+    concepts. OTB uses those of ITK. Some of the more important concepts
+    include generic programming, smart pointers for memory management,
+    object factories for adaptable object instantiation, event
+    management using the command/observer design paradigm, and
+    multithreading support.
+
+Numerics
+    OTB, as ITK uses VXL’s VNL numerics libraries. These are easy-to-use
+    C++ wrappers around the Netlib Fortran numerical analysis routines
+    (http://www.netlib.org).
+
+Data Representation and Access
+    Two principal classes are used to represent data: the
+    :doxygen:`Image` and :doxygen-itk:`Mesh` classes. In addition,
+    various types of iterators and containers are used in ITK to hold
+    and traverse the data. Other important but less popular classes are
+    also used to represent data such as histograms.
+
+ITK’s Data Processing Pipeline
+    The data representation classes (known as *data objects*) are
+    operated on by *filters* that in turn may be organized into data
+    flow *pipelines*. These pipelines maintain state and therefore
+    execute only when necessary. They also support multi-threading, and
+    are streaming capable (i.e., can operate on pieces of data to
+    minimize the memory footprint).
+
+IO Framework
+    Associated with the data processing pipeline are *sources*, filters
+    that initiate the pipeline, and *mappers*, filters that terminate
+    the pipeline. The standard examples of sources and mappers are
+    *readers* and *writers* respectively. Readers input data (typically
+    from a file), and writers output data from the pipeline. *Viewers*
+    are another example of mappers.
+
+Spatial Objects
+    Geometric shapes are represented in OTB using the ITK spatial object
+    hierarchy. These classes are intended to support modeling of
+    anatomical structures in ITK. OTB uses them in order to model
+    cartographic elements. Using a common basic interface, the spatial
+    objects are capable of representing regions of space in a variety of
+    different ways. For example: mesh structures, image masks, and
+    implicit equations may be used as the underlying representation
+    scheme. Spatial objects are a natural data structure for
+    communicating the results of segmentation methods and for
+    introducing geometrical priors in both segmentation and registration
+    methods.
+
+ITK’s Registration Framework
+    A flexible framework for registration supports four different types
+    of registration: image registration, multiresolution registration,
+    PDE-based registration, and FEM (finite element method)
+    registration.
+
+FEM Framework
+    ITK includes a subsystem for solving general FEM problems, in
+    particular non-rigid registration. The FEM package includes mesh
+    definition (nodes and elements), loads, and boundary conditions.
+
+Level Set Framework
+    The level set framework is a set of classes for creating filters to
+    solve partial differential equations on images using an iterative,
+    finite difference update scheme. The level set framework consists of
+    finite difference solvers including a sparse level set solver, a
+    generic level set segmentation filter, and several specific
+    subclasses including threshold, Canny, and Laplacian based methods.
+
+Wrapping
+    ITK uses a unique, powerful system for producing interfaces (i.e.,
+    “wrappers”) to interpreted languages such as Tcl and Python. The
+    GCC\_XML tool is used to produce an XML description of arbitrarily
+    complex C++ code; CSWIG is then used to transform the XML
+    description into wrappers using the `SWIG <http://www.swig.org/>`__
+    package. OTB does not use this system at present.
+
+Essential System Concepts
+-------------------------
+
+This section describes some of the core concepts and implementation
+features found in ITK and therefore also in OTB.
+
+Generic Programming
+~~~~~~~~~~~~~~~~~~~
+
+Generic programming is a method of organizing libraries consisting of
+generic—or reusable—software components. The idea is to make software
+that is capable of “plugging together” in an efficient, adaptable
+manner. The essential ideas of generic programming are *containers* to
+hold data, *iterators* to access the data, and *generic algorithms* that
+use containers and iterators to create efficient, fundamental algorithms
+such as sorting. Generic programming is implemented in C++ with the
+*template* programming mechanism and the use of the STL Standard
+Template Library.
+
+C++ templating is a programming technique allowing users to write
+software in terms of one or more unknown types ``T``. To create
+executable code, the user of the software must specify all types ``T``
+(known as *template instantiation*) and successfully process the code
+with the compiler. The ``T`` may be a native type such as ``float`` or
+``int``, or ``T`` may be a user-defined type (e.g., ``class``). At
+compile-time, the compiler makes sure that the templated types are
+compatible with the instantiated code and that the types are supported
+by the necessary methods and operators.
+
+ITK uses the techniques of generic programming in its implementation.
+The advantage of this approach is that an almost unlimited variety of
+data types are supported simply by defining the appropriate template
+types. For example, in OTB it is possible to create images consisting of
+almost any type of pixel. In addition, the type resolution is performed
+at compile-time, so the compiler can optimize the code to deliver
+maximal performance. The disadvantage of generic programming is that
+many compilers still do not support these advanced concepts and cannot
+compile OTB. And even if they do, they may produce completely
+undecipherable error messages due to even the simplest syntax errors.
+
+Include Files and Class Definitions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In ITK and OTB classes are defined by a maximum of two files: a header
+``.h`` file and an implementation file—\ ``.cxx`` if a non-templated
+class, and a ``.hxx`` if a templated class. The header files contain
+class declarations and formatted comments that are used by the Doxygen
+documentation system to automatically produce HTML manual pages.
+
+In addition to class headers, there are a few other important ITK header
+files.
+
+``itkMacro.h``
+    defines standard system-wide macros (such as ``Set/Get``, constants,
+    and other parameters).
+
+``itkNumericTraits.h``
+    defines numeric characteristics for native types such as its maximum
+    and minimum possible values.
+
+``itkWin32Header.h``
+    is used to define operating system parameters to control the
+    compilation process.
+
+Object Factories
+~~~~~~~~~~~~~~~~
+
+Most classes in OTB are instantiated through an *object factory*
+mechanism. That is, rather than using the standard C++ class constructor
+and destructor, instances of an OTB class are created with the static
+class ``New()`` method. In fact, the constructor and destructor are
+``protected:`` so it is generally not possible to construct an OTB
+instance on the heap. (Note: this behavior pertains to classes that are
+derived from :doxygen-itk:`LightObject`. In some cases the need for
+speed or reduced memory footprint dictates that a class not be derived
+from LightObject and in this case instances may be created on the heap.
+An example of such a class is :doxygen-itk:`EventObject`.)
+
+The object factory enables users to control run-time instantiation of
+classes by registering one or more factories with
+:doxygen-itk:`ObjectFactoryBase`. These registered factories support the
+method ``CreateInstance(classname)`` which takes as input the name of a
+class to create. The factory can choose to create the class based on a
+number of factors including the computer system configuration and
+environment variables. For example, in a particular application an OTB
+user may wish to deploy their own class implemented using specialized
+image processing hardware (i.e., to realize a performance gain). By
+using the object factory mechanism, it is possible at run-time to
+replace the creation of a particular OTB filter with such a custom
+class. (Of course, the class must provide the exact same API as the one
+it is replacing.) To do this, the user compiles their class (using the
+same compiler, build options, etc.) and inserts the object code into a
+shared library or DLL. The library is then placed in a directory
+referred to by the ``OTB_AUTOLOAD_PATH`` environment variable. On
+instantiation, the object factory will locate the library, determine
+that it can create a class of a particular name with the factory, and
+use the factory to create the instance. (Note: if the
+``CreateInstance()`` method cannot find a factory that can create the
+named class, then the instantiation of the class falls back to the usual
+constructor.)
+
+In practice object factories are used mainly (and generally
+transparently) by the OTB input/output (IO) classes. For most users the
+greatest impact is on the use of the ``New()`` method to create a class.
+Generally the ``New()`` method is declared and implemented via the macro
+``itkNewMacro()`` found in ``Modules/Core/Common/include/itkMacro.h``.
+
+Smart Pointers and Memory Management
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+By their nature object-oriented systems represent and operate on data
+through a variety of object types, or classes. When a particular class
+is instantiated to produce an instance of that class, memory allocation
+occurs so that the instance can store data attribute values and method
+pointers (i.e., the vtable). This object may then be referenced by other
+classes or data structures during normal operation of the program.
+Typically during program execution all references to the instance may
+disappear at which point the instance must be deleted to recover memory
+resources. Knowing when to delete an instance, however, is difficult.
+Deleting the instance too soon results in program crashes; deleting it
+too late and memory leaks (or excessive memory consumption) will occur.
+This process of allocating and releasing memory is known as memory
+management.
+
+In ITK, memory management is implemented through reference counting.
+This compares to another popular approach—garbage collection—used by
+many systems including Java. In reference counting, a count of the
+number of references to each instance is kept. When the reference goes
+to zero, the object destroys itself. In garbage collection, a background
+process sweeps the system identifying instances no longer referenced in
+the system and deletes them. The problem with garbage collection is that
+the actual point in time at which memory is deleted is variable. This is
+unacceptable when an object size may be gigantic (think of a large 3D
+volume gigabytes in size). Reference counting deletes memory immediately
+(once all references to an object disappear).
+
+Reference counting is implemented through a ``Register()``/``Delete()``
+member function interface. All instances of an OTB object have a
+``Register()`` method invoked on them by any other object that
+references an them. The ``Register()`` method increments the instances’
+reference count. When the reference to the instance disappears, a
+``Delete()`` method is invoked on the instance that decrements the
+reference count—this is equivalent to an ``UnRegister()`` method. When
+the reference count returns to zero, the instance is destroyed.
+
+This protocol is greatly simplified by using a helper class called a
+:doxygen-itk:`SmartPointer`. The smart pointer acts like a regular
+pointer (e.g. supports operators ``->`` and ``*``) but automagically
+performs a ``Register()`` when referring to an instance, and an
+``UnRegister()`` when it no longer points to the instance. Unlike most
+other instances in OTB, SmartPointers can be allocated on the program
+stack, and are automatically deleted when the scope that the
+SmartPointer was created is closed. As a result, you should *rarely if
+ever call Register() or Delete()* in OTB. For example:
+
+.. code-block:: cpp
+
+    void MyRegistrationFunction()
+    { // Start of scope
+      // here an interpolator is created and associated to the
+      // SmartPointer "interp".
+      InterpolatorType::Pointer interp = InterpolatorType::New();
+    } // End of scope
+
+In this example, reference counted objects are created (with the
+``New()`` method) with a reference count of one. Assignment to the
+SmartPointer ``interp`` does not change the reference count. At the end
+of scope, ``interp`` is destroyed, the reference count of the actual
+interpolator object (referred to by ``interp``) is decremented, and if
+it reaches zero, then the interpolator is also destroyed.
+
+Note that in ITK SmartPointers are always used to refer to instances of
+classes derived from :doxygen-itk:`LightObject`. Method invocations and
+function calls often return “real” pointers to instances, but they are
+immediately assigned to a SmartPointer. Raw pointers are used for
+non-LightObject classes when the need for speed and/or memory demands a
+smaller, faster class.
+
+Data Representation
+-------------------
+
+:doxygen:`Image` represents an *n*-dimensional, regular sampling of
+data. The sampling direction is parallel to each of the coordinate axes,
+and the origin of the sampling, inter-pixel spacing, and the number of
+samples in each direction (i.e., image dimension) can be specified. The
+sample, or pixel, type in OTB is arbitrary—a template parameter
+``TPixel`` specifies the type upon template instantiation. (The
+dimensionality of the image must also be specified when the image class
+is instantiated.) The key is that the pixel type must support certain
+operations (for example, addition or difference) if the code is to
+compile in all cases (for example, to be processed by a particular
+filter that uses these operations). In practice the OTB user will use a
+C++ simple type (e.g., ``int``, ``float``) or a pre-defined pixel type
+and will rarely create a new type of pixel class.
+
+One of the important ITK concepts regarding images is that rectangular,
+continuous pieces of the image are known as *regions*. Regions are used
+to specify which part of an image to process, for example in
+multithreading, or which part to hold in memory. In ITK there are three
+common types of regions:
+
+#. ``LargestPossibleRegion`` —the image in its entirety.
+
+#. ``BufferedRegion`` —the portion of the image retained in memory.
+
+#. ``RequestedRegion`` —the portion of the region requested by a filter
+   or other class when operating on the image.
+
+The :doxygen:`Image` class extends the functionalities of the
+:doxygen-itk:`Image` in order to take into account particular remote
+sensing features as geographical projections, etc.
+
+Data Processing Pipeline
+------------------------
+
+While data objects (e.g., images) are used to represent data, *process
+objects* are classes that operate on data objects and may produce new
+data objects. Process objects are classed as *sources*, *filter
+objects*, or *mappers*. Sources (such as readers) produce data, filter
+objects take in data and process it to produce new data, and mappers
+accept data for output either to a file or some other system. Sometimes
+the term *filter* is used broadly to refer to all three types.
+
+The data processing pipeline ties together data objects (e.g., images)
+and process objects. The pipeline supports an automatic updating
+mechanism that causes a filter to execute if and only if its input or
+its internal state changes. Further, the data pipeline supports
+*streaming*, the ability to automatically break data into smaller
+pieces, process the pieces one by one, and reassemble the processed data
+into a final result.
+
+Typically data objects and process objects are connected together using
+the ``SetInput()`` and ``GetOutput()`` methods as follows:
+
+.. code-block:: cpp
+
+    typedef otb::Image<float,2> FloatImage2DType;
+
+    itk::RandomImageSource<FloatImage2DType>::Pointer random;
+    random = itk::RandomImageSource<FloatImage2DType>::New();
+    random->SetMin(0.0);
+    random->SetMax(1.0);
+
+    itk::ShrinkImageFilter<FloatImage2DType,FloatImage2DType>::Pointer shrink;
+    shrink = itk::ShrinkImageFilter<FloatImage2DType,FloatImage2DType>::New();
+    shrink->SetInput(random->GetOutput());
+    shrink->SetShrinkFactors(2);
+
+    otb::ImageFileWriter::Pointer<FloatImage2DType> writer;
+    writer = otb::ImageFileWriter::Pointer<FloatImage2DType>::New();
+    writer->SetInput (shrink->GetOutput());
+    writer->SetFileName("test.raw");
+    writer->Update();
+
+In this example the source object :doxygen-itk:`RandomImageSource` is
+connected to the :doxygen-itk:`ShrinkImageFilter`, and the shrink filter
+is connected to the mapper :doxygen:`ImageFileWriter`. When the
+``Update()`` method is invoked on the writer, the data processing
+pipeline causes each of these filters in order, culminating in writing
+the final data to a file on disk.
diff --git a/Documentation/Cookbook/rst/C++/WriteAnApplication.rst b/Documentation/Cookbook/rst/C++/WriteAnApplication.rst
new file mode 100644
index 0000000000..7bf160f4e8
--- /dev/null
+++ b/Documentation/Cookbook/rst/C++/WriteAnApplication.rst
@@ -0,0 +1,383 @@
+How to write an application
+===========================
+
+This chapter presents the different steps to write your own application,
+and the framework surrounding it.
+
+Application design
+------------------
+
+The first logical step is to define the role of your application:
+
+-  What is the function of your application? Try to draw a box diagram
+   to describe the design of your application. Note that you don’t have
+   to worry about opening and saving images (or vector data) files, this
+   is handled by the framework.
+
+-  What variables (or data objects) must be exposed outside the
+   application? Try to make a list of the inputs, outputs and
+   parameters of your application.
+
+Then you should have a good vision of your application pipeline.
+Depending on the different filters used, the application can be streamed
+and threaded. The threading capabilities can be different between the
+filters so there is no overall threading parameter (by default, each
+filter has its own threading settings).
+
+It is a different story for streaming. Since the image writers are
+handled within the framework and outside the reach of the developer, the
+default behaviour is to use streaming. If one of the filters doesn’t
+support streaming, it will enlarge the requested output region to the
+largest possible region and the entire image will be processed at once.
+As a result, the developer doesn’t have to handle streaming nor
+threading. However, there is a way to choose the number of streaming
+divisions (see section :ref:`appParam`).
+
+Architecture of the class
+-------------------------
+
+Every application derives from the class `otb::Wrapper::Application <https://www.orfeo-toolbox.org/doxygen/classotb_1_1Wrapper_1_1Application.html>`_. An application can’t be
+templated. It must contain the standard class typedefs and a call to the
+``OTB_APPLICATION_EXPORT`` macro.
+
+You need also to define standard macros ``itk::NewMacro`` and
+``itk::TypeMacro``.
+
+It is also mandatory to implement three methods in a new application:
+
+-  ``DoInit()``
+
+-  ``DoUpdateParameters()``
+
+-  ``DoExecute()``
+
+DoInit()
+~~~~~~~~
+
+This method is called once, when the application is instantiated. It
+should contain the following actions:
+
+-  Set the name and the description of the application
+
+-  Fill the documentation and give an example
+
+-  Declare all the parameters
+
+-  Define the documentation link: using for contrib application use ``SetDocLink("docLink")``, for official application use ``SetOfficialDocLink()``.
+
+DoUpdateParameters()
+~~~~~~~~~~~~~~~~~~~~
+
+This method is called after every modification of a parameter value.
+With the command line launcher, it is called each time a parameter is
+loaded. With the Qt launcher, it is called each time a parameter field
+is modified. It can be used to maintain consistency and relationship
+between parameters (e.g. in ExtractROI: when changing the input image,
+maybe the ROI size has to be updated).
+
+DoExecute()
+~~~~~~~~~~~
+
+This method contains the real action of the application. This is where
+the pipeline must be set up. The application framework provides
+different methods to get a value or an object associated to a parameter:
+
+-  ``GetParameterInt(key)`` : get the integer value of a parameter
+
+-  ``GetParameterFloat(key)`` : get the float value of a parameter
+
+-  ``GetParameterString(key)`` : get the string value of a parameter
+
+-  ``GetParameterImage(key)`` : get a pointer to an image object, read
+   from the file name given in input
+
+-  …
+
+where ``key`` refers to parameter key, defined using ``AddParameter()``
+method in ``DoInit()`` method.
+
+Similar methods exist for binding a data object to an output parameter:
+
+-  ``SetParameterOutputImage(key,data)`` : link the image object to the
+   given output parameter
+
+-  ``SetParameterComplexOutputImage(key,data)`` : link the complex image
+   object to the given output parameter
+
+-  ``SetParameterOutputVectorData(key,data)`` : link the vector data
+   object to the given output parameter
+
+If possible, no filter update should be called inside this function. The
+update will be automatically called afterwards : for every image or
+vector data output, a writer is created and updated.
+
+.. _appParam:
+
+Parameters selection
+~~~~~~~~~~~~~~~~~~~~
+
+In the new application framework, every input, output or parameter
+derive from `otb::Wrapper::Parameter <https://www.orfeo-toolbox.org/doxygen/classotb_1_1Wrapper_1_1Parameter.html>`_. The application engine supplies the following types of
+parameters:
+
+-  ``ParameterType_Bool`` : parameter storing a boolean.
+
+-  ``ParameterType_Int`` : parameter storing an integer.
+
+-  ``ParameterType_Radius`` : parameter storing a radius.
+
+-  ``ParameterType_Float`` : parameter storing a float.
+
+-  ``ParameterType_String`` : parameter storing character string.
+
+-  ``ParameterType_StringList`` : parameter storing a list of character
+   string.
+
+-  ``ParameterType_InputFilename`` : parameter storing an input file
+   name.
+
+-  ``ParameterType_InputFilenameList`` : parameter storing a list of
+   input file names.
+
+-  ``ParameterType_Directory`` : parameter storing a folder name.
+
+-  ``ParameterType_Group`` : parameter storing children parameters.
+
+-  ``ParameterType_Choice`` : parameter storing a list of choices
+   (doesn’t support multi-choice). It also allows to create specific
+   sub-parameters for each available choice.
+
+-  ``ParameterType_ListView`` : parameter storing a list of choices
+   (support multi-choice and single-choice).
+
+-  ``ParameterType_InputImage`` : parameter storing an input image.
+
+-  ``ParameterType_InputImageList`` : parameter storing a list of input
+   image.
+
+-  ``ParameterType_ComplexInputImage`` : parameter storing a complex
+   input image.
+
+-  ``ParameterType_InputVectorData`` : parameter storing input vector
+   data.
+
+-  ``ParameterType_InputVectorDataList`` : parameter storing a list of
+   input vector data.
+
+-  ``ParameterType_InputProcessXML`` : parameter storing an input XML
+   file name.
+
+-  ``ParameterType_OutputFilename`` : parameter storing an output file
+   name.
+
+-  ``ParameterType_OutputImage`` : parameter storing an output image.
+
+-  ``ParameterType_ComplexOutputImage`` : parameter storing a complex
+   output image.
+
+-  ``ParameterType_OutputVectorData`` : parameter storing an output
+   vector data.
+
+-  ``ParameterType_OutputProcessXML`` : parameter storing an output XML
+   file name.
+
+-  ``ParameterType_RAM`` : parameter storing the maximum amount of RAM
+   to be used.
+
+Parameters description
+~~~~~~~~~~~~~~~~~~~~~~
+
+Each created parameter has a unique key and several boolean flags to
+represent its state. These flags can be used to set a parameter optional
+or test if the user has modified the parameter value. The parameters are
+created in the ``DoInit()`` method, then the framework will set their
+value (either by parsing the command line or reading the graphical user
+interface). The ``DoExecute()`` method is called when all mandatory
+parameters have been given a value, which can be obtained with “Get”
+methods defined in `otb::Wrapper::Application <https://www.orfeo-toolbox.org/doxygen/classotb_1_1Wrapper_1_1Application.html>`_. Parameters are set mandatory (or not) using
+``MandatoryOn(key)`` method (``MandatoryOff(key)``).
+
+Some functions are specific to numeric parameters, such as
+``SetMinimumParameterIntValue(key,value)`` or
+``SetMaximumParameterFloatValue(key,value)``. By default, numeric
+parameters are treated as inputs. If your application outputs a number,
+you can use a numeric parameter and change its role by calling
+``SetParameterRole(key,Role_Output)``.
+
+The input types ``InputImage``, ``InputImageList``,
+``ComplexInputImage``, ``InputVectorData`` and ``InputVectorDataList``
+store the name of the files to load, but they also encapsulate the
+readers needed to produce the input data.
+
+The output types ``OutputImage``, ``ComplexOutputImage`` and
+``OutputVectorData`` store the name of the files to write, but they also
+encapsulate the corresponding writers.
+
+Composite application
+---------------------
+
+The application framework has been extended to allow the implementation
+of composite applications : **applications that use other
+applications**. The concept is simple : you have two applications A and
+B that you want to chain in order to build a third application C. Rather
+than writing C by copying the code of A and B, you would like to re-use
+applications A and B. This plain example will be re-used in this section
+for explanations.
+
+A dedicated class `otb::Wrapper::CompositeApplication <https://www.orfeo-toolbox.org/doxygen/classotb_1_1Wrapper_1_1CompositeApplication.html>`_ exists to create such applications. If you
+derive this class to implement application C, you will be able to create
+a composite application.
+
+Creating internal applications
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Like with standard applications, you have to write a ``DoInit()``
+function. In this function, you should first clean any internal
+application with the function ``ClearApplications()`` (the ``DoInit()``
+function is called twice in some cases). Then you can instantiate the
+internal applications that you want to use (for instance A and B). The
+function ``AddApplication()`` will do that, based on :
+
+-  The application type (i.e. its official name, such as ExtractROI,
+   BandMath, …)
+
+-  An identifier : like with parameter keys, you have to specify an
+   identifier to refer to this internal application. Use the same naming
+   conventions as parameters.
+
+-  A description : give a small description of the role of this internal
+   application.
+
+Using the function ``GetInternalApplication()``, you can get a pointer
+to the internal application corresponding to a given identifier.
+
+In the example given in introduction, we assume that :
+
+-  An internal application of type A has been added with identifier
+   ``a``
+
+-  An internal application of type B has been added with identifier
+   ``b``
+
+Connecting parameters
+~~~~~~~~~~~~~~~~~~~~~
+
+Once you have internal applications, you may want to setup their
+parameters. There are typically 3 cases.
+
+You may want to expose a parameter of an internal application as a
+parameter of your composite application. Let say you want to expose
+parameter ``io.in`` from application ``a`` into your composite
+application C with the key ``input``. You can call the function :
+
+``ShareParameter(input,a.io.in)``
+
+As a result, the parameters ``input`` in application C and ``io.in`` in
+application ``a`` will point to the same object. Under the two parameter
+keys, there is a unique value. These two parameters can be considered as
+synchronized.
+
+This leads to the second case : you may want to synchronize two
+parameters from internal applications. Let say you want to synchronize
+parameter ``field`` from application ``a`` with parameter ``fname`` from
+application ``b``. You can call the function :
+
+``Connect(a.field,b.fname)``
+
+Note that the functions ``ShareParameter()`` and ``Connect()`` :
+
+-  Use the same syntax to access internal parameters (“application
+   identifier” dot “parameter key”).
+
+-  Shall be used in the DoInit() function, after the internal
+   applications have been added.
+
+In this synchronization, the two parameters should have the same type,
+or have a similar interface, such as input and output filenames that are
+both accessed using ``GetParameterString()`` and
+``SetParameterString()``.
+
+This type of connection is a transition to the third case : you may want
+to connect the output of an internal application to the input of an
+other internal application. Here the difficulty is that the two
+parameters to connect probably have different types. Let say you want to
+connect parameter ``a.out`` to parameter ``b.in``. The “Connect()”
+function may work in favorable cases (see previous paragraph), but for
+images, you have two options :
+
+-  Explicitly copy the image pointer from the output image parameter in
+   the input image parameter (with functions
+   ``SetParameterInputImage()`` and ``GetParameterOutputImage()``). It
+   will connect the pipelines in applications A and B, to form an
+   “in-memory” connexion. This has to be done between the calls to
+   ``DoExecute()`` of application A and B.
+
+-  Use a temporary filename to store the output image ``a.out`` and read
+   it with ``b.in``. In this case, you have to manually call the writers
+   of parameter ``a.out``.
+
+At the moment, the in-memory connexion of vector data parameters is not
+supported.
+
+Orchestration
+~~~~~~~~~~~~~
+
+In the ``DoUpdateParameters()`` of your composite application, you can
+call the same function on an internal application with the function
+``UpdateInternalParameters()``. This is needed only if your internal
+applications have a specific behaviour during parameter update.
+
+In the ``DoExecute()`` of your composite application, you have to call
+``ExecuteInternal()`` in order to launch each internal application. The
+order should be compatible with image parameter connexions. If you want
+to do “in-memory” connexions, you can do it between two calls to
+``ExecuteInternal()``, for instance :
+
+.. code-block:: cpp
+
+    ExecuteInternal("a");
+    GetInternalApplication("b")->SetParameterInputImage("in", GetInternalApplication("a")->GetParameterOutputImage("out"));
+    ExecuteInternal("b");
+
+The application :ref:`BundleToPerfectSensor` is a simple example of composite
+applications. For a more complex example, you can check the application
+TrainImagesClassifier.
+
+Compile your application
+------------------------
+
+In order to compile your application you must call the macro
+``OTB_CREATE_APPLICATION`` in the *CMakelists.txt* file. This macro
+generates the lib *otbapp\_XXX.so*, in
+(OTB\_BINARY\_DIR/lib/otb/applications), where *XXX* refers to the class
+name.
+
+Execute your application
+------------------------
+
+There are different ways to launch applicatons :
+
+CommandLine :
+    The command line option is invoked using
+    *otbApplicationLauncherCommandLine* executable followed by the
+    classname, the application dir and the application parameters.
+
+QT :
+    Application can be encapsuled in Qt framework using
+    *otbApplicationLauncherQt* executable followed by the classname and
+    the application dir.
+
+Python :
+    A Python wrapper is also available.
+
+Testing your application
+------------------------
+
+It is possible to write application tests. They are quite similar to
+filters tests. The macro ``OTB_TEST_APPLICATION`` makes it easy to
+define a new test.
+
+Application Example
+-------------------
+
+See example :ref:`ApplicationExample.cxx`
diff --git a/Documentation/Cookbook/rst/conf.py.in b/Documentation/Cookbook/rst/conf.py.in
index 828b4a8087..8b9c33a394 100644
--- a/Documentation/Cookbook/rst/conf.py.in
+++ b/Documentation/Cookbook/rst/conf.py.in
@@ -38,6 +38,7 @@ extensions = [
     'sphinx.ext.todo',
     'sphinx.ext.imgmath',
     'sphinx.ext.viewcode',
+    'sphinx.ext.extlinks',
 ]
 
 imgmath_latex='@LATEX_COMMAND@'
@@ -281,3 +282,8 @@ texinfo_documents = [
 
 # If true, do not generate a @detailmenu in the "Top" node's menu.
 #texinfo_no_detailmenu = False
+
+extlinks = {
+    'doxygen': ("http://www.orfeo-toolbox.org/doxygen/classotb_1_1%s.html", "otb::"),
+    'doxygen-itk': ("http://www.itk.org/Doxygen/html/classitk_1_1%s.html", "itk::")
+}
diff --git a/Documentation/Cookbook/rst/templates/example.rst b/Documentation/Cookbook/rst/templates/example.rst
index 9153a7e2d3..ed844cd239 100644
--- a/Documentation/Cookbook/rst/templates/example.rst
+++ b/Documentation/Cookbook/rst/templates/example.rst
@@ -6,7 +6,7 @@
 
 {usage}
 
-Example source code (`{link_name} <{link_href}>`_):
+Example source code (`{link_name} <{link_href}>`__):
 
 .. code-block:: cpp
 
diff --git a/Documentation/SoftwareGuide/Latex/Applications.tex b/Documentation/SoftwareGuide/Latex/Applications.tex
deleted file mode 100644
index 45587a8a0b..0000000000
--- a/Documentation/SoftwareGuide/Latex/Applications.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\chapter{Applications}
-\label{sec:Applications}
-
-This chapter introduces a set of ready-to-use applications. 
-These applications were designed to perform  simple remote sensing tasks, 
-more complex than simple examples, to demonstrate the use of the OTB 
-functions. They were previously known as the OTB-Applications 
-package but are now part of the OTB library. The new framework is 
-slightly different from before but they can be used pretty much the 
-same way: each application has its set of inputs, outputs, parameters. 
-The applications can be launched as a command line interface but also
-via a Qt GUI. In addition, they can be wrapped for SWIG and PyQt. For a 
-complete list of these applications, please refer to the 
-\href{http://orfeo-toolbox.org/Applications}{applications documentation}.
-
-\section{Example of use}
-\label{sec:appExample}
diff --git a/Documentation/SoftwareGuide/Latex/CMakeLists.txt b/Documentation/SoftwareGuide/Latex/CMakeLists.txt
index 9036226ef3..c47c266da0 100644
--- a/Documentation/SoftwareGuide/Latex/CMakeLists.txt
+++ b/Documentation/SoftwareGuide/Latex/CMakeLists.txt
@@ -105,14 +105,12 @@ ${SoftwareGuide_BINARY_DIR}/SoftwareGuideConfiguration.tex
 )
 
 SET( Tex_SRCS
-  Applications.tex
   DataRepresentation.tex
   Filtering.tex
   GUI.tex
   ImageInterpolators.tex
   Infrastructure.tex
   IO.tex
-  Iterators.tex
   Numerics.tex
   Registration.tex
   StereoReconstruction.tex
@@ -121,14 +119,12 @@ SET( Tex_SRCS
   SoftwareProcess.tex
   SpatialObjects.tex
   Statistics.tex
-  SystemOverview.tex
   Visualization.tex
   Watersheds.tex
   Fusion.tex
   Radiometry.tex
   FeatureExtraction.tex
   ObjectBasedImageAnalysis.tex
-  Hyperspectral.tex
 )
 
 
diff --git a/Documentation/SoftwareGuide/Latex/DataRepresentation.tex b/Documentation/SoftwareGuide/Latex/DataRepresentation.tex
index ce255b864a..5e626c4047 100644
--- a/Documentation/SoftwareGuide/Latex/DataRepresentation.tex
+++ b/Documentation/SoftwareGuide/Latex/DataRepresentation.tex
@@ -48,86 +48,6 @@ a file.
 \label{sec:AccessingImageMetadata}
 \input{MetadataExample}
 
-\subsection{RGB Images}
-
-The term RGB (Red, Green, Blue) stands for a color representation commonly used
-in digital imaging. RGB is a representation of the human physiological
-capability to analyze visual light using three spectral-selective
-sensors~\cite{Malacara2002,Wyszecki2000}. The human retina possess different
-types of light sensitive cells. Three of them, known as \emph{cones}, are
-sensitive to color~\cite{Gray2003} and their regions of sensitivity loosely
-match regions of the spectrum that will be perceived as red, green and blue
-respectively. The \emph{rods} on the other hand provide no color discrimination
-and favor high resolution and high sensitivity\footnote{The human eye is
-capable of perceiving a single isolated photon.}.  A fifth type of receptors,
-the \emph{ganglion cells}, also known as circadian\footnote{The term
-\emph{Circadian} refers to the cycle of day and night, that is, events that are
-repeated with 24 hours intervals.} receptors are sensitive to the lighting
-conditions that differentiate day from night.  These receptors evolved as a
-mechanism for synchronizing the physiology with the time of the day. Cellular
-controls for circadian rythms are present in every cell of an organism and are
-known to be exquisitively precise~\cite{Lodish2000}.
-
-The RGB space has been constructed as a representation of a physiological
-response to light by the three types of \emph{cones} in the human eye. RGB is
-not a Vector space. For example, negative numbers are not appropriate in a
-color space because they will be the equivalent of ``negative stimulation'' on
-the human eye.  In the context of colorimetry, negative color values are used
-as an artificial construct for color comparison in the sense that
-
-\begin{equation}
-\label{eqn:ColorSubtraction}
-         ColorA = ColorB - ColorC
-\end{equation}
-
-just as a way of saying that we can produce $ColorB$ by combining $ColorA$ and
-$ColorC$.  However, we must be aware that (at least in emitted light) it is not
-possible to \emph{subtract light}. So when we mention
-Equation~\ref{eqn:ColorSubtraction} we actually mean
-
-\begin{equation}
-\label{eqn:ColorAddition}
-         ColorB = ColorA + ColorC
-\end{equation}
-
-On the other hand, when dealing with printed color and with paint, as opposed
-to emitted light like in computer screens, the physical behavior of color
-allows for subtraction. This is because strictly speaking the objects that we
-see as red are those that absorb all light frequencies except those in the red
-section of the spectrum~\cite{Wyszecki2000}.
-
-The concept of addition and subtraction of colors has to be carefully
-interpreted. In fact, RGB has a different definition regarding whether we are
-talking about the channels associated to the three color sensors of the human
-eye, or to the three phosphors found in most computer monitors or to the color
-inks that are used for printing reproduction.  Color spaces are usually non
-linear and do not even from a Group. For example, not all visible colors can be
-represented in RGB space~\cite{Wyszecki2000}.
-
-ITK introduces the \doxygen{itk}{RGBPixel} type as a support for representing the
-values of an RGB color space. As such, the RGBPixel class embodies a different
-concept from the one of an \doxygen{itk}{Vector} in space. For this reason, the
-RGBPixel lack many of the operators that may be naively expected from it. In
-particular, there are no defined operations for subtraction or addition.
-
-When you anticipate to perform the operation of ``Mean'' on a RGB type you are
-assuming that in the color space provides the action of finding a color in the
-middle of two colors, can be found by using a linear operation between their
-numerical representation. This is unfortunately not the case in  color spaces
-due to the fact that they are based on a human physiological
-response~\cite{Malacara2002}.
-
-If you decide to interpret RGB images as simply three independent channels then
-you should rather use the \doxygen{itk}{Vector} type as pixel type. In this way, you
-will have access to the set of operations that are defined in Vector spaces.
-The current implementation of the RGBPixel in ITK presumes that RGB color
-images are intended to be used in applications where a formal interpretation of
-color is desired, therefore only the operations that are valid in a color space
-are available in the RGBPixel class.
-
-The following example illustrates how RGB images can be represented in OTB.
-
-
 \subsection{Vector Images}
 \label{sec:DefiningVectorImages}
 
diff --git a/Documentation/SoftwareGuide/Latex/Hyperspectral.tex b/Documentation/SoftwareGuide/Latex/Hyperspectral.tex
deleted file mode 100644
index dbab164ba8..0000000000
--- a/Documentation/SoftwareGuide/Latex/Hyperspectral.tex
+++ /dev/null
@@ -1,4 +0,0 @@
-\chapter{Hyperspectral}
-
-\input{HyperspectralUnmixingExample}
-
diff --git a/Documentation/SoftwareGuide/Latex/Iterators.tex b/Documentation/SoftwareGuide/Latex/Iterators.tex
deleted file mode 100644
index 3746d0857a..0000000000
--- a/Documentation/SoftwareGuide/Latex/Iterators.tex
+++ /dev/null
@@ -1,891 +0,0 @@
-\chapter{Iterators}
-\label{sec:ImageIteratorsChapter}
-\index{Iterators!image|(}
-\index{Generic Programming}
-This chapter introduces the \emph{image iterator}, an important generic
-programming construct for image processing in ITK.  An iterator is a
-generalization of the familiar C programming language pointer used to
-reference data in memory.  ITK has a wide variety of image iterators, some of
-which are highly specialized to simplify common image processing tasks.
-
-The next section is a brief introduction that defines iterators in the context
-of ITK.  Section \ref{sec:IteratorsInterface} describes the programming
-interface common to most ITK image iterators.
-Sections~\ref{sec:ImageIterators}--\ref{sec:NeighborhoodIterators} document
-specific ITK iterator types and provide examples of how they are used.
-
-\section{Introduction}
-\label{sec:IteratorsIntroduction}
-% Further define iterators in the context of generic programming.
-\index{generic programming}
-\index{Iterators!definition of}
-Generic programming models define functionally independent components called
-\emph{containers} and \emph{algorithms}.  Container objects store data and
-algorithms operate on data.  To access data in containers, algorithms use a
-third class of objects called \emph{iterators}.  An iterator is an
-abstraction of a memory pointer.  Every container type must define its own
-iterator type, but all iterators are written to provide a common interface so
-that algorithm code can reference data in a generic way and maintain
-functional independence from containers.
-
-The iterator is so named because it is used for \emph{iterative}, sequential
-access of container values.  Iterators appear in \code{for} and
-\code{while} loop constructs, visiting each data point in turn.  
-A C pointer, for example, is a type of iterator.  It can be moved
-forward (incremented) and backward (decremented) through memory to
-sequentially reference elements of an array. Many iterator implementations
-have an interface similar to a C pointer.
-
-\index{Iterators!advantages of}
-In ITK we use iterators to write generic image processing code for images
-instantiated with different combinations of pixel type, pixel
-container type, and dimensionality.  Because ITK image iterators are
-specifically designed to work with \emph{image} containers, their interface and
-implementation is optimized for image processing tasks.  Using the ITK
-iterators instead of accessing data directly through the
-\doxygen{otb}{Image} interface has many advantages. Code is more
-compact and often generalizes automatically to higher dimensions, algorithms
-run much faster, and iterators simplify tasks such as multithreading and
-neighborhood-based image processing.
-
-
-\section{Programming Interface}
-\label{sec:IteratorsInterface}
-
-\index{Iterators!programming interface|(}
-%Creating iterators
-This section describes the standard ITK image iterator programming interface.
-Some specialized image iterators may deviate from this standard or provide
-additional methods.
-
-\subsection{Creating Iterators}
-\label{sec:CreatingIterators}
-
-\index{Iterators!construction of}
-All image iterators have at least one template parameter that is the image
-type over which they iterate.  There is no restriction on the dimensionality
-of the image or on the pixel type of the image.
-
-\index{Iterators!and image regions}
-
-An iterator constructor requires at least two arguments, a smart pointer to the
-image to iterate across, and an image region. The image region, called the
-\emph{iteration region}, is a rectilinear area in which iteration is
-constrained.  The iteration region must be wholly contained within the image.
-More specifically, a valid iteration region is any subregion of the image
-within the current \code{BufferedRegion}.  See Section~\ref{sec:ImageSection}
-for more information on image regions.
-
-\index{Iterators!const}
-There is a const and a non-const version of most ITK image iterators. A
-non-const iterator cannot be instantiated on a non-const image pointer.
-Const versions of iterators may read, but may not write pixel values.
-
-Here is a simple example that defines and constructs a simple image iterator
-for an \doxygen{otb}{Image}.
-
-\small
-\begin{verbatim}
-  typedef otb::Image<float, 3> ImageType;
-  typedef itk::ImageRegionConstIterator< ImageType > ConstIteratorType;
-  typedef itk::ImageRegionIterator< ImageType > IteratorType;
-
-  ImageType::Pointer image = SomeFilter->GetOutput();
-
-  ConstIteratorType constIterator( image, image->GetRequestedRegion() );
-  IteratorType iterator( image, image->GetRequestedRegion() );
-\end{verbatim}
-\normalsize
-
-\subsection{Moving Iterators}
-\label{sec:MovingIterators}
-An iterator is described as \emph{walking} its iteration region.  At any
-time, the iterator will reference, or ``point to'', one pixel location in the
-N-dimensional (ND) image.  \emph{Forward iteration} goes from the beginning
-of the iteration region to the end of the iteration region.  \emph{Reverse
-iteration}, goes from just past the end of the region back to the beginning.
-There are two corresponding starting positions for iterators, the
-\emph{begin} position and the \emph{end} position.  An iterator can be moved
-directly to either of these two positions using the following methods.
-
-\index{forward iteration}
-\index{reverse iteration}
-\index{iteration region}
-\index{Iterators!GoToBegin()}
-
-\begin{itemize}
-\item \textbf{\code{GoToBegin()}} Points the iterator to the first valid
-data element in the region.
-
-\index{Iterators!GoToEnd()}
-\item \textbf{\code{GoToEnd()}} Points the iterator to \emph{one position past}
-the last valid element in the region.
-\end{itemize}
-
-Note that the end position is not actually located within the iteration region.  This is
-important to remember because attempting to dereference an iterator at its end
-position will have undefined results.
-
-%Moving iteators
-ITK iterators are moved back and forth across their iterations using the 
-decrement and increment operators.
-
-\index{Iterators!operator++()}
-\begin{itemize}
-\item \textbf{\code{operator++()}} Increments the iterator one position in the
-positive direction.  Only the prefix increment operator is defined for ITK image
-iterators.
-
-\index{Iterators!operator--}
-\item \textbf{\code{operator--()}} Decrements the iterator one position in the
-negative direction.  Only the prefix decrement operator is defined for ITK
-image iterators. 
-\end{itemize}
-
-Figure~\ref{fig:WalkingIterator} illustrates typical iteration over
-an image region.  Most iterators increment and decrement in the direction of
-the fastest increasing image dimension, wrapping to the first position in the
-next higher dimension at region boundaries.  In other words, an
-iterator first moves across columns, then down rows, then from slice to slice,
-and so on.
-
-\begin{figure}
-\centering
-\includegraphics[width=0.4\textwidth]{IteratorFigure1.eps}
-\itkcaption[ITK image iteration]{Normal path of an iterator through a 
-2D image.  The iteration region is shown in a darker shade.  An arrow denotes
-a single iterator step, the result of one \code{++} operation.}
-\protect\label{fig:WalkingIterator}
-\end{figure}
-
-In addition to sequential iteration through the image, some iterators may define
-random access operators.  Unlike the increment operators, random access
-operators may not be optimized for speed and require some knowledge of the
-dimensionality of the image and the extent of the iteration region to use properly.
-
-\begin{itemize}
-\index{Iterators!operator+=()}
-\item \textbf{\code{operator+=( OffsetType )}} Moves the iterator to the pixel
-position at the current index plus specified \doxygen{itk}{Offset}.
-
-\index{Iterators!operator-=()}
-\item \textbf{\code{operator-=( OffsetType )}} Moves the iterator to 
-the pixel position at the current index minus specified Offset.
-
-\index{Iterators!SetPosition()}
-\item \textbf{\code{SetPosition( IndexType )}} Moves the iterator to the given
-\doxygen{itk}{Index} position.
-\end{itemize}
-
-The \code{SetPosition()} method may be extremely slow for more complicated
-iterator types. In general, it should only be used for setting a starting
-iteration position, like you would use \code{GoToBegin()} or \code{GoToEnd()}.
-
-Some iterators do not follow a predictable path through their
-iteration regions and have no fixed beginning or ending pixel
-locations.  A conditional iterator, for example, visits pixels only if
-they have certain values or connectivities.  Random iterators,
-increment and decrement to random locations and may even visit a given
-pixel location more than once.
-
-%Testing for location
-An iterator can be queried to determine if it is at the end or the beginning of
-its iteration region. 
-
-\begin{itemize}
-\index{Iterators!IsAtEnd()}
-\item \textbf{\code{bool IsAtEnd()}} True if the iterator points to \emph{one
-position past} the end of the iteration region.
-
-\index{Iterators!IsAtBegin()}
-\item \textbf{\code{bool IsAtBegin()}} True if the iterator points to the first
-position in the iteration region.  The method is typically used to test for the
-end of reverse iteration.
-
-\end{itemize}
-
-An iterator can also report its current image index position.
-
-\begin{itemize}
-\index{Iterators!GetIndex()}
-\item \textbf{\code{IndexType GetIndex()}} Returns the Index
-of the image pixel that the iterator currently points to.
-\end{itemize}
-
-% A note on bounds checking
-\index{Iterators!and bounds checking}
-For efficiency, most ITK image iterators do not perform bounds checking.  It is
-possible to move an iterator outside of its valid iteration region.
-Dereferencing an out-of-bounds iterator will produce undefined results.
-
-\subsection{Accessing Data}
-\label{sec:AccessingData}
-ITK image iterators define two basic methods for reading and writing pixel
-values.
-
-\begin{itemize}
-\index{Iterators!Get()}
-\item \textbf{\code{PixelType Get()}} Returns the value of the pixel at the
-iterator position.
-
-\index{Iterators!Set()}
-\item \textbf{\code{void Set( PixelType )}} Sets the value of the pixel at the
-iterator position.  Not defined for const versions of iterators.
-\end{itemize}
-
-% Describe efficiency due to inlining for all cases
-The \code{Get()} and \code{Set()} methods are inlined and optimized
-for speed so that their use is equivalent to dereferencing the image
-buffer directly.  There are a few common cases, however, where using
-\code{Get()} and \code{Set()} do incur a penalty. Consider the
-following code, which fetches, modifies, and then writes a value back
-to the same pixel location.
-
-\small
-\begin{verbatim}
-  it.Set( it.Get() + 1 );
-\end{verbatim}
-\normalsize
-
-As written, this code requires one more memory dereference than is necessary.
-Some iterators define a third data access method that avoids this penalty.
-
-\begin{itemize}
-\index{Iterators!Value()}
-\item \textbf{\code{PixelType \& Value()}} Returns a reference to the pixel at
-the iterator position.
-\end{itemize}
-
-The \code{Value()} method can be used as either an lval or an rval in an
-expression.  It has all the properties of \code{operator*}.  The
-\code{Value()} method makes it possible to rewrite our example code more
-efficiently.
-
-\small
-\begin{verbatim}
-  it.Value()++;
-\end{verbatim}
-\normalsize
-
-Consider using the \code{Value()} method instead of \code{Get()} or
-\code{Set()} when a call to \code{operator=} on a pixel is non-trivial, such as
-when working with vector pixels, and operations are done in-place in the
-image.
-
-\subsection{Iteration Loops}
-\label{sec:IterationExample}
-% Now give a pseudo code example for putting all of this together.
-Using the methods described in the previous sections, we can now write a simple
-example to do pixel-wise operations on an image.  The following code calculates
-the squares of all values in an input image and writes them to an output image.
-
-\small
-\begin{verbatim}
-  ConstIteratorType in( inputImage,   inputImage->GetRequestedRegion() );
-  IteratorType out( outputImage, inputImage->GetRequestedRegion() );
-
-  for ( in.GoToBegin(), out.GoToBegin(); !in.IsAtEnd(); ++in, ++out )
-    {
-    out.Set( in.Get() * in.Get() );
-    }
-\end{verbatim}
-\normalsize
-
-\index{Iterators!and image regions}
-Notice that both the input and output iterators are initialized over the same
-region, the \code{RequestedRegion} of \code{inputImage}.  This is good
-practice because it ensures that the output iterator walks exactly the same set
-of pixel indices as the input iterator, but does not require that the output
-and input be the same size. The only requirement is that the input image
-must contain a region (a starting index and size) that matches the
-\code{RequestedRegion} of the output image.
-
-\index{reverse iteration}
-Equivalent code can be written by iterating through the image in reverse.
-The syntax is slightly more awkward because the \emph{end} of the
-iteration region is not a valid position and we can only test whether the
-iterator is strictly \emph{equal} to its beginning position.  It is often more
-convenient to write reverse iteration in a \code{while} loop.
-
-\small
-\begin{verbatim}
-  in.GoToEnd();
-  out.GoToEnd();
-  while ( ! in.IsAtBegin() )
-    {
-    --in;
-    --out;
-    out.Set( in.Get() * in.Get() );
-    }
-\end{verbatim}
-\normalsize
-
-%\begin{itemize}
-%\item \textbf{\code{operator==}}
-%\item \textbf{\code{operator<}} 
-%\item \textbf{\code{operator<=}}
-%\item \textbf{\code{operator>}}
-%\item \textbf{\code{operator>=}}
-%\end{itemize}
-
-%operator +=, -=, etc
-
-% SetIndex()
-
-% operator <, operator >, etc.
-
-\index{Iterators!programming interface|)}
-\section{Image Iterators}
-\label{sec:ImageIterators}
-%Introduction and overview
-This section describes iterators that walk rectilinear image regions and
-reference a single pixel at a time.  The \doxygen{itk}{ImageRegionIterator} is the
-most basic ITK image iterator and the first choice for most applications. The
-rest of the iterators in this section are specializations of
-ImageRegionIterator that are designed make common image processing
-tasks more efficient or easier to implement.
-
-% Each of the iterators has a const and non-const version
-
-\subsection{ImageRegionIterator}
-\index{itk::ImageRegionIterator|(}
-\label{sec:itkImageRegionIterator}
-\input{ImageRegionIterator.tex}
-\index{itk::ImageRegionIterator|)}
-
-\subsection{ImageRegionIteratorWithIndex}
-\label{sec:itkImageRegionIteratorWithIndex}
-\index{itk::ImageRegionIteratorWithIndex|(}
-\input{ImageRegionIteratorWithIndex.tex}
-\index{itk::ImageRegionIteratorWithIndex|)}
-
-\subsection{ImageLinearIteratorWithIndex}
-\label{sec:itkImageLinearIteratorWithIndex}
-\index{itk::ImageLinearIteratorWithIndex|(}
-\input{ImageLinearIteratorWithIndex.tex}
-%\input{ImageLinearIteratorWithIndex2.tex}
-\index{itk::ImageLinearIteratorWithIndex|)}
-
-%% \subsection{ImageSliceIteratorWithIndex}
-%% \label{sec:itkImageSliceIteratorWithIndex}
-%% \index{itk::ImageSliceIteratorWithIndex|(}
-%% \input{ImageSliceIteratorWithIndex.tex}
-%% \index{itk::ImageSliceIteratorWithIndex|)}
-
-%% \subsection{ImageRandomConstIteratorWithIndex}
-%% \label{sec:itkImageRandomConstIteratorWithIndex}
-%% \index{itk::Image\-Random\-Const\-Iterator\-With\-Index|(}
-%% \input{ImageRandomConstIteratorWithIndex}
-%% \index{itk::Image\-Random\-Const\-Iterator\-With\-Index|)}
-
-%\section{Conditional Iterators}
-%\index{Iterators!conditional|(}
-%\label{sec:ConditionalIterators}
-%This section describes iterators that walk only pixels in an image region whose
-%values satisfy a specified condition.  The condition is usually based on some
-%function of the image values, such as comparing to a threshold.  When the
-%condition function returns \code{true} at a pixel location, the iterator
-%includes that location in its path.  The biggest use of these iterators is for
-%walking non-rectilinear regions of interest, such as might be defined by
-%implicit geometric shape functions or connected component regions.
-
-%./Common/itkConditionalConstIterator.h (BaseClass)
-%./Common/itkConditionalIterator.h (BaseClass)
-%./Common/itkFloodFilledFunctionConditionalConstIterator.h (BaseClass)
-%./Common/itkFloodFilledFunctionConditionalIterator.h (BaseClass)
-
-%[ here are all classes where these filters are used:
-% ./BasicFilters/itkConfidenceConnectedImageFilter.hxx (ImageFunction)
-% ./BasicFilters/itkConnectedThresholdImageFilter.hxx (ImageFunction)
-% ./BasicFilters/itkIsolatedConnectedImageFilter.hxx (ImageFunction)
-% ./BasicFilters/itkNeighborhoodConnectedImageFilter.hxx (ImageFunction)
-%
-% ./Common/itkBinaryBallStructuringElement.hxx (SpatialFunction)
-% ./Common/itkBloxCoreAtomImage.hxx (SpatialFunction)
-% ./BasicFilters/itkBloxBoundaryPointToCoreAtomImageFilter.hxx (SpatialFunction)
-% ./BasicFilters/itkBloxBoundaryPointImageToBloxBoundaryProfileImageFilter.hxx (SpatialFunction)
-%]
-
-%\subsection{itk::FloodFilledImageFunctionConditionalIterator}
-%\label{itk::FloodFilledImageFunctionConditionalIterator}
-%\index{itk::FloodFilledImageFunctionConditionalIterator|(}
-%./Common/itkFloodFilledImageFunctionConditionalConstIterator.h
-%./Common/itkFloodFilledImageFunctionConditionalIterator.h
-%\index{itk::FloodFilledImageFunctionConditionalIterator|)}
-
-%\subsection{itk::FloodFilledSpatialFunctionConditionalIterator}
-%\label{itk::FloodFilledSpatialFunctionConditionalIterator}
-%\index{itk::FloodFilledSpatialFunctionConditionalIterator|(}
-%./Common/itkFloodFilledSpatialFunctionConditionalConstIterator.h
-%./Common/itkFloodFilledSpatialFunctionConditionalIterator.h
-%\index{itk::FloodFilledImageFunctionConditionalIterator|)}
-%\index{Iterators!conditional|)}
-
-\section{Neighborhood Iterators}
-\label{sec:NeighborhoodIterators}
-\index{Iterators!neighborhood|(}
-In ITK, a pixel neighborhood is loosely defined as a small set of pixels that
-are locally adjacent to one another in an image.  The size and shape
-of a neighborhood, as well the connectivity among pixels in a neighborhood,
-may vary with the application.
-
-Many image processing algorithms are neighborhood-based, that is, the result at
-a pixel $i$ is computed from the values of pixels in the ND neighborhood of
-$i$. Consider finite difference operations in 2D.  A derivative at pixel index
-$i = (j, k)$, for example, is taken as a weighted difference of the values
-at $(j+1, k)$ and $(j-1, k)$. Other common examples of neighborhood operations
-include convolution filtering and image morphology.
-
-This section describes a class of ITK image iterators that are designed for
-working with pixel neighborhoods. An ITK neighborhood iterator walks an image
-region just like a normal image iterator, but instead of only referencing a
-single pixel at each step, it simultaneously points to the entire ND
-neighborhood of pixels.  Extensions to the standard iterator interface provide
-read and write access to all neighborhood pixels and information
-such as the size, extent, and location of the neighborhood.
-
-Neighborhood iterators use the same operators defined in
-Section~\ref{sec:IteratorsInterface} and the same code constructs as normal
-iterators for looping through an
-image. Figure~\ref{fig:NeighborhoodIteratorFig1} shows a neighborhood iterator
-moving through an iteration region.  This iterator defines a $3x3$ neighborhood
-around each pixel that it visits. The \emph{center} of the neighborhood
-iterator is always positioned over its current index and all other neighborhood
-pixel indices are referenced as offsets from the center index.  The pixel
-under the center of the neighborhood iterator and all pixels under the shaded
-area, or \emph{extent}, of the iterator can be dereferenced.
-
-
-
-\begin{figure}
-\centering
-\includegraphics[width=0.6\textwidth]{NeighborhoodIteratorFig1.eps}
-\itkcaption[Neighborhood iterator]{Path of a $3x3$ neighborhood
-iterator through a 2D image region.  The extent of the neighborhood is
-indicated by the hashing around the iterator position. Pixels that lie within
-this extent are accessible through the iterator.  An arrow denotes a single
-iterator step, the result of one \code{++} operation.}
-\protect\label{fig:NeighborhoodIteratorFig1}
-\end{figure}
-
-\index{Neighborhood iterators!construction of}
-\index{Neighborhood iterators!radius of}
-
-In addition to the standard image pointer and iteration region
-(Section~\ref{sec:IteratorsInterface}), neighborhood iterator constructors
-require an argument that specifies the extent of the neighborhood to cover.
-Neighborhood extent is symmetric across its center in each
-axis and is given as an array of $N$ distances that are collectively called the
-\emph{radius}. Each element $d$ of the radius, where $0 < d < N$ and
-$N$ is the dimensionality of the neighborhood, gives the extent of the
-neighborhood in pixels for dimension $N$.  The length of each face of the
-resulting ND hypercube is $2d + 1$ pixels, a distance of $d$ on either side of
-the single pixel at the neighbor center.
-Figure~{\ref{fig:NeighborhoodIteratorFig2} shows the relationship between the
-radius of the iterator and the size of the neighborhood for a variety of 2D
-iterator shapes.
-
-The radius of the neighborhood iterator is queried after construction
-by calling the \code{GetRadius()} method.  Some other methods provide
-some useful information about the iterator and its underlying image.
-
-\begin{figure}
-\centering
-\includegraphics[width=0.9\textwidth]{NeighborhoodIteratorFig2.eps}
-\itkcaption[Some possible neighborhood iterator shapes]{Several possible 2D
-neighborhood iterator shapes are shown along with their radii and sizes.  A
-neighborhood pixel can be dereferenced by its integer index (top) or its
-offset from the center (bottom).  The center pixel of each iterator is
-shaded.}
-\protect\label{fig:NeighborhoodIteratorFig2}
-\end{figure}
-
-\begin{itemize}
-
-\index{NeighborhoodIterator!GetRadius()}
-\item \textbf{\code{SizeType GetRadius()}} Returns the ND radius of the
-neighborhood as an \doxygen{itk}{Size}.
-
-\index{NeighborhoodIterator!GetImagePointer()}
-\item \textbf{\code{const ImageType *GetImagePointer()}} Returns the pointer to
-the image referenced by the iterator.
-
-\index{NeighborhoodIterator!Size()}
-\item \textbf{\code{unsigned long Size()}} Returns the size in number of 
-pixels of the neighborhood.
-
-\end{itemize}
-
-The neighborhood iterator interface extends the normal ITK iterator interface
-for setting and getting pixel values.  One way to dereference pixels is to
-think of the neighborhood as a linear array where each pixel has a unique
-integer index. The index of a pixel in the array is determined by incrementing
-from the upper-left-forward corner of the neighborhood along the fastest
-increasing image dimension: first column, then row, then slice, and so on.  In
-Figure~\ref{fig:NeighborhoodIteratorFig2}, the unique integer index is shown
-at the top of each pixel.  The center pixel is always at position $n/2$, where
-$n$ is the size of the array.
-
-\begin{itemize}
-
-\index{NeighborhoodIterator!GetPixel()}
-\item \textbf{\code{PixelType GetPixel(const unsigned int i)}} Returns the 
-value of the pixel at neighborhood position \code{i}.
-
-\index{NeighborhoodIterator!SetPixel()}
-\item \textbf{\code{void SetPixel(const unsigned int i, PixelType p)}} 
-Sets the value of the pixel at position \code{i} to \code{p}.
-
-\end{itemize}
-
-Another way to think about a pixel location in a neighborhood is as an
-ND offset from the neighborhood center.  The upper-left-forward corner
-of a $3x3x3$ neighborhood, for example, can be described by offset
-$(-1, -1, -1)$.  The bottom-right-back corner of the same neighborhood
-is at offset $(1, 1, 1)$.  In
-Figure~\ref{fig:NeighborhoodIteratorFig2}, the offset from center is
-shown at the bottom of each neighborhood pixel.
-
-\begin{itemize}
-
-\index{NeighborhoodIterator!GetPixel()}
-\item \textbf{\code{PixelType GetPixel(const OffsetType \&o)}} Get the value of
-the pixel at the position offset \code{o} from the neighborhood center.
-
-\index{NeighborhoodIterator!SetPixel()}
-\item \textbf{\code{void SetPixel(const OffsetType \&o, PixelType p)}} Set
-the value at the position offset \code{o} from the neighborhood center to
-the value \code{p}.
-
-\end{itemize}
-
-The neighborhood iterators also provide a shorthand for setting and getting the
-value at the center of the neighborhood.
-
-\index{NeighborhoodIterators!}
-\begin{itemize}
-
-\index{NeighborhoodIterator!GetCenterPixel()}
-\item \textbf{\code{PixelType GetCenterPixel()}} Gets the value at the center
-of the neighborhood.
-
-\index{NeighborhoodIterator!SetCenterPixel()}
-\item \textbf{\code{void SetCenterPixel(PixelType p)}} Sets the value at the
-center of the neighborhood to the value \code{p}
-
-\end{itemize}
-
-There is another shorthand for setting and getting values for pixels that
-lie some integer distance from the neighborhood center along one of the image
-axes.
-
-\index{NeighborhoodIterators!}
-\begin{itemize}
-
-\index{NeighborhoodIterator!GetNext()}
-\item \textbf{\code{PixelType GetNext(unsigned int d)}} Get the value
-immediately adjacent to the neighborhood center in the positive direction along
-the \code{d} axis.
-
-\index{NeighborhoodIterator!SetNext()}
-\item \textbf{\code{void SetNext(unsigned int d, PixelType p)}} Set the value
-immediately adjacent to the neighborhood center in the positive direction along
-the \code{d} axis to the value \code{p}.
-
-\index{NeighborhoodIterator!GetPrevious()}
-\item \textbf{\code{PixelType GetPrevious(unsigned int d)}} Get the value
-immediately adjacent to the neighborhood center in the negative direction along
-the \code{d} axis.
-
-\index{NeighborhoodIterator!SetPrevious()}
-\item \textbf{\code{void SetPrevious(unsigned int d, PixelType p)}}
-Set the value immediately adjacent to the neighborhood center in the
-negative direction along the \code{d} axis to the value \code{p}.
-
-\item \textbf{\code{PixelType GetNext(unsigned int d, unsigned int
-s)}} Get the value of the pixel located \code{s} pixels from the
-neighborhood center in the positive direction along the \code{d} axis.
-
-\item \textbf{\code{void SetNext(unsigned int d, unsigned int s, PixelType p)}}
-Set the value of the pixel located \code{s} pixels from the neighborhood center
-in the positive direction along the \code{d} axis to value \code{p}.
-
-\item \textbf{\code{PixelType GetPrevious(unsigned int d, unsigned int
-s)}} Get the value of the pixel located \code{s} pixels from the
-neighborhood center in the positive direction along the \code{d} axis.
- 
-\item \textbf{\code{void SetPrevious(unsigned int d, unsigned int s,
-PixelType p)}} Set the value of the pixel located \code{s} pixels from
-the neighborhood center in the positive direction along the \code{d}
-axis to value \code{p}.
-
-\end{itemize}
-
-It is also possible to extract or set all of the neighborhood values
-from an iterator at once using a regular ITK neighborhood object.
-This may be useful in algorithms that perform a particularly large
-number of calculations in the neighborhood and would otherwise require
-multiple dereferences of the same pixels.
-
-\begin{itemize}
-
-\index{NeighborhoodIterator!GetNeighborhood()}
-\index{NeighborhoodIterator!SetNeighborhood()}
-\item \textbf{\code{NeighborhoodType GetNeighborhood()}} Return a
-\doxygen{itk}{Neighborhood} of the same size and shape as the neighborhood
-iterator and contains all of the values at the iterator position.
-
-\item \textbf{\code{void SetNeighborhood(NeighborhoodType \&N)}} Set all
-of the values in the neighborhood at the iterator position to those contained
-in Neighborhood \code{N}, which must be the same size and shape as the
-iterator.
-
-\end{itemize}
-
-Several methods are defined to provide information about the neighborhood.
-
-\index{NeighborhoodIterators!}
-\begin{itemize}
-
-\index{NeighborhoodIterator!GetIndex()}
-\item \textbf{\code{IndexType GetIndex()}} Return the image
-index of the center pixel of the neighborhood iterator.
-
-\item \textbf{\code{IndexType GetIndex(OffsetType o)}} Return the
-image index of the pixel at offset \code{o} from the neighborhood 
-center.
-
-\item \textbf{\code{IndexType GetIndex(unsigned int i)}} Return the
-image index of the pixel at array position \code{i}.
-
-\index{NeighborhoodIterator!GetOffset()}
-\item \textbf{\code{OffsetType GetOffset(unsigned int i)}}  Return the offset
-from the neighborhood center of the pixel at array position \code{i}.
-
-\index{NeighborhoodIterator!GetNeighborhoodIndex()}
-\item \textbf{\code{unsigned long GetNeighborhoodIndex(OffsetType o)}}
-Return the array position of the pixel at offset \code{o} from the
-neighborhood center.
-
-\index{NeighborhoodIterator!GetSlice()}
-\item \textbf{\code{std::slice GetSlice(unsigned int n)}} Return a
-\code{std::slice} through the iterator neighborhood along axis \code{n}.
-
-\end{itemize}
-
-\index{Neighborhood iterators!boundary conditions}
-\index{Neighborhood iterators!bounds checking}
-A neighborhood-based calculation in a neighborhood close to an image
-boundary may require data that falls outside the boundary.  The
-iterator in Figure~\ref{fig:NeighborhoodIteratorFig1}, for example, is
-centered on a boundary pixel such that three of its neighbors actually
-do not exist in the image.  When the extent of a neighborhood falls
-outside the image, pixel values for missing neighbors are supplied
-according to a rule, usually chosen to satisfy the numerical
-requirements of the algorithm.  A rule for supplying out-of-bounds
-values is called a \emph{boundary condition}.
- 
-ITK neighborhood iterators automatically detect out-of-bounds dereferences and
-will return values according to boundary conditions.  The boundary condition
-type is specified by the second, optional template parameter of the iterator.
-By default, neighborhood iterators use a Neumann condition where the first
-derivative across the boundary is zero.  The Neumann rule simply returns the
-closest in-bounds pixel value to the requested out-of-bounds location.  Several
-other common boundary conditions can be found in the ITK toolkit.  They include
-a periodic condition that returns the pixel value from the opposite side of the
-data set, and is useful when working with periodic data such as Fourier
-transforms, and a constant value condition that returns a set value $v$ for all
-out-of-bounds pixel dereferences.  The constant value condition is equivalent
-to padding the image with value $v$.
-
-Bounds checking is a computationally expensive operation because it occurs each
-time the iterator is incremented.  To increase efficiency, a neighborhood
-iterator automatically disables bounds checking when it detects that it is
-not necessary.  A user may also explicitly disable or enable bounds checking.
-Most neighborhood based algorithms can minimize the need for bounds checking
-through clever definition of iteration regions.  These techniques are explored
-in Section~\ref{sec:NeighborhoodExample3}.
-
-\begin{itemize}
-
-\index{NeighborhoodIterator!NeedToUseBoundaryConditionOn()}
-\item \textbf{\code{void NeedToUseBoundaryConditionOn()}} Explicitly turn
-bounds checking on.  This method should be used with caution because
-unnecessarily enabling bounds checking may result in a significant performance
-decrease. In general you should allow the iterator to automatically determine
-this setting.
-
-\index{NeighborhoodIterator!NeedToUseBoundaryConditionOff()}
-\item \textbf{\code{void NeedToUseBoundaryConditionOff()}} Explicitly disable
-bounds checking. This method should be used with caution because disabling
-bounds checking when it is needed will result in out-of-bounds reads and
-undefined results.
-
-\index{NeighborhoodIterator!OverrideBoundaryCondition()}
-\item \textbf{\code{void OverrideBoundaryCondition(BoundaryConditionType *b)}} 
-Overrides the templated boundary condition, using boundary condition
-object \code{b} instead. Object \code{b} should not be deleted until
-it has been released by the iterator.  This method can be used to
-change iterator behavior at run-time.
-
-\index{NeighborhoodIterator!ResetBoundaryCondition()}
-\item \textbf{\code{void ResetBoundaryCondition()}} Discontinues the use of any
-run-time specified boundary condition and returns to using the condition
-specified in the template argument.
-
-\index{NeighborhoodIterator!SetPixel()}
-\item \textbf{\code{void SetPixel(unsigned int i, PixelType p, bool
-status)}} Sets the value at neighborhood array position \code{i} to value
-\code{p}.  If the position \code{i} is out-of-bounds, \code{status} is set to
-\code{false}, otherwise \code{status} is set to \code{true}.
-\end{itemize}
-
-The following sections describe the two ITK neighborhood iterator classes,
-\doxygen{itk}{NeighborhoodIterator} and \doxygen{itk}{ShapedNeighborhoodIterator}.
-Each has a const and a non-const version.  The shaped iterator is a refinement
-of the standard NeighborhoodIterator that supports an
-arbitrarily-shaped (non-rectilinear) neighborhood.
-
-\subsection{NeighborhoodIterator}
-\label{sec:itkNeighborhoodIterator}
-
-\index{NeighborhoodIterator!examples}
-\index{Neighborhood iterators!examples}
-The standard neighborhood iterator class in ITK is the
-\doxygen{itk}{NeighborhoodIterator}.  Together with its \code{const} version,
-\doxygen{itk}{ConstNeighborhoodIterator}, it implements the complete API
-described above.  This section provides several examples to illustrate the use
-of NeighborhoodIterator.
-
-\index{edge detection}
-\index{Sobel operator}
-\subsubsection{Basic neighborhood techniques: edge detection}
-\label{sec:NeighborhoodExample1}
-\input{NeighborhoodIterators1.tex}
-
-\index{convolution filtering}
-\index{Sobel operator}
-\subsubsection{Convolution filtering: Sobel operator}
-\label{sec:NeighborhoodExample2}
-\input{NeighborhoodIterators2.tex}
-
-\subsubsection{Optimizing iteration speed}
-\label{sec:NeighborhoodExample3}
-\input{NeighborhoodIterators3.tex}
-
-\index{Gaussian blurring}
-\subsubsection{Separable convolution: Gaussian filtering}
-\label{sec:NeighborhoodExample4}
-\input{NeighborhoodIterators4.tex}
-
-%% \subsubsection{Slicing the neighborhood}
-%% \label{sec:NeighborhoodExample5}
-%% \input{NeighborhoodIterators5.tex}
-
-\subsubsection{Random access iteration}
-\label{sec:NeighborhoodExample6}
-\input{NeighborhoodIterators6.tex}
-
-%./Common/itkConstNeighborhoodIterator.h
-%./Common/itkNeighborhoodIterator.h
-
-% Example1: Edge detection using ``hand-coded'' Sobel operator
-% Example2: Sobel edge detection using convolution filtering and Sobel operator
-% Example3: Improving boundary condition efficiency
-% Example4: gaussian filtering, separable convolution
-% Example5: Slicing the neighborhood: gaussian filtering, separable convolution
-% Example6: Advanced Neighborhood Techniques: local minima, local maxima
-
-\subsection{ShapedNeighborhoodIterator}
-\label{sec:itkShapedNeighborhoodIterator}
-\index{ShapedNeighborhoodIterator}
-\index{Neighborhood iterators!shaped}
-\index{Neighborhood iterators!as stencils}
-This section describes a variation on the neighborhood iterator called a
-\emph{shaped} neighborhood iterator.  A shaped neighborhood is defined like
-a bit mask, or \emph{stencil}, with different offsets in the rectilinear
-neighborhood of the normal neighborhood iterator turned off or on to create a
-pattern.  Inactive positions (those not in the stencil) are not updated during
-iteration and their values cannot be read or written.  The shaped iterator is
-implemented in the class \doxygen{itk}{ShapedNeighborhoodIterator}, which is a
-subclass of
-\doxygen{itk}{NeighborhoodIterator}.  A const version,
-\doxygen{itk}{ConstShapedNeighborhoodIterator}, is also available.
-
-\index{Neighborhood iterators!active neighbors}
-\index{Neighborhood iterators!inactive neighbors}
-Like a regular neighborhood iterator, a shaped neighborhood iterator must be
-initialized with an ND radius object, but the radius of the neighborhood of a
-shaped iterator only defines the set of \emph{possible} neighbors.  Any number
-of possible neighbors can then be activated or deactivated.  The shaped
-neighborhood iterator defines an API for activating neighbors.  When a neighbor
-location, defined relative to the center of the neighborhood, is activated, it
-is placed on the \emph{active list} and is then part of the stencil.  An
-iterator can be ``reshaped'' at any time by adding or removing offsets from the
-active list.
-
-\begin{itemize}
-
-\index{ShapedNeighborhoodIterator!ActivateOffset()}
-\item \textbf{\code{void ActivateOffset(OffsetType \&o)}} Include the offset
-\code{o} in the stencil of active neighborhood positions.  Offsets are relative
-to the neighborhood center.
-
-\index{ShapedNeighborhoodIterator!DeactivateOffset()}
-\item \textbf{\code{void DeactivateOffset(OffsetType \&o)}} Remove the offset
-\code{o} from the stencil of active neighborhood positions.  Offsets are
-relative to the neighborhood center. 
-
-\index{ShapedNeighborhoodIterator!ClearActiveList()}
-\item \textbf{\code{void ClearActiveList()}} Deactivate all positions in the
-iterator stencil by clearing the active list.
-
-\index{ShapedNeighborhoodIterator!GetActiveIndexListSize()}
-\item \textbf{\code{unsigned int GetActiveIndexListSize()}} Return the number
-of pixel locations that are currently active in the shaped iterator stencil.
-
-\end{itemize}
-
-Because the neighborhood is less rigidly defined in the shaped iterator, the
-set of pixel access methods is restricted.  Only the \code{GetPixel()} and
-\code{SetPixel()} methods are available, and calling these methods on an 
-inactive neighborhood offset will return undefined results.
-
-For the common case of traversing all pixel offsets in a neighborhood, the
-shaped iterator class provides an iterator through the active offsets in its
-stencil.   This \emph{stencil iterator} can be incremented or decremented and
-defines \code{Get()} and \code{Set()} for reading and writing the values in the
-neighborhood.
-
-\begin{itemize}
-\index{ShapedNeighborhoodIterator!Iterator::Begin()}
-\item \textbf{\code{ShapedNeighborhoodIterator::Iterator Begin()}} Return a
-const or non-const iterator through the shaped iterator stencil that points to
-the first valid location in the stencil.
-
-\index{ShapedNeighborhoodIterator!Iterator::End()}
-\item \textbf{\code{ShapedNeighborhoodIterator::Iterator End()}} Return a
-const or non-const iterator through the shaped iterator stencil that points
-\emph{one position past} the last valid location in the stencil.
-\end{itemize}
-
-The functionality and interface of the shaped neighborhood iterator is best
-described by example.  We will use the ShapedNeighborhoodIterator to
-implement some binary image morphology algorithms (see \cite{Gonzalez1993},
-\cite{Castleman1996}, et al.).  The examples that follow implement erosion and
-dilation.
-
-\index{ShapedNeighborhoodIterator!examples of}
-\subsubsection{Shaped neighborhoods: morphological operations}
-\label{sec:ShapedNeighborhoodExample}
-\input{ShapedNeighborhoodIterators1.tex}
-\input{ShapedNeighborhoodIterators2.tex}
-
-%./Common/itkConstShapedNeighborhoodIterator.h
-%./Common/itkShapedNeighborhoodIterator.h
-
-\index{Iterators!neighborhood|)}
-
-% ADD A SECTION WITH TIPS, SUGGESTIONS ON USING ITERATORS?  EXTENDING ITERATORS?
-% USING ITERATORS FOR MULTITHREADING EXAMPLE?
-\index{Iterators!image|)}
diff --git a/Documentation/SoftwareGuide/Latex/Persistent.tex b/Documentation/SoftwareGuide/Latex/Persistent.tex
deleted file mode 100644
index 5474815669..0000000000
--- a/Documentation/SoftwareGuide/Latex/Persistent.tex
+++ /dev/null
@@ -1,262 +0,0 @@
-\chapter{Persistent filters}
-\label{chapter:PersistentFilters}
-
-\section{Introduction}
-
-As presented in chapter~\ref{sec:StreamingAndThreading}, OTB has two
-main mechanisms to handle efficiently large data: streaming allows to
-process image piece-wise, and multi-threading allows to process
-concurrently several pieces of one streaming block. Using these
-concepts, one can easily write pixel-wise or neighborhood-based
-filters and insert them into a pipeline which will be scalable with
-respect to the input image size.
-
-Yet, sometimes we need to compute global features on the whole image. One
-example is to determine image mean and variance of the input image in
-order to produce a centered and reduced image. The operation of
-centering and reducing each pixel is fully compliant with streaming and
-threading, but one has to first estimate the mean and variance of the
-image. This first step requires to walk the whole image once, and
-traditional streaming and multi-threading based filter architecture is
-of no help here. 
-
-This is because there is a fundamental difference between these two
-operations: one supports streaming, and the other needs to perform
-streaming. In fact we would like to stream the whole image piece by
-piece through some filter that will collect and keep mean and variance
-cumulants, and then synthetize theses cumulants to compute the final
-mean and variance once the full image as been streamed. Each
-stream would also benefit from parallel processing. This is exactly
-what persistent filters are for.
-
-\section{Architecture}
-
-There are two main objects in the persistent filters framework. The
-first is the \doxygen{otb}{PersistentImageFilter}, the second is the
-\doxygen{otb}{PersistentFilterStreamingDecorator}.
-
-\subsection{The persistent filter class}
-
-The \doxygen{otb}{PersistentImageFilter} class is a regular
-\doxygen{itk}{ImageToImageFilter}, with two additional pure virtual
-methods: the \verb?Synthetize()? and the \verb?Reset()? methods.
-
-Imagine that the \verb?GenerateData()? or
-\verb?ThreadedGenerateData()? progressively computes some global
-feature of the whole image, using some member of the class to store
-intermediate results. The \verb?Synthetize()? is an additional method
-which is designed to be called one the whole image has been processed,
-in order to compute the final results from the intermediate
-results. The \verb?Reset()? method is designed to allow the reset of
-the intermediate results members so as to start a fresh processing.
-
-Any sub-class of the \doxygen{otb}{PersistentImageFilter} can be used
-as a regular \doxygen{itk}{ImageToImageFilter} (provided that both
-\verb?Synthetize()? and \verb?Reset()? have been implemented, but the
-real interest of these filters is to be used with the streaming
-decorator class presented in the next section.
-
-\subsection{The streaming decorator class}
-
-The \doxygen{otb}{PersistentFilterStreamingDecorator} is a class
-designed to be templated with subclasses of the
-\doxygen{otb}{PersistentImageFilter}. It provides the mechanism to
-stream the whole image through the templated filter, using a third
-class called \doxygen{otb}{StreamingImageVirtualWriter}. When the
-\verb?Update()? method is called on a
-\doxygen{otb}{PersistentFilterStreamingDecorator}, a pipeline
-plugging the templated subclass of the
-\doxygen{otb}{PersistentImageFilter} to an instance of
-\doxygen{otb}{StreamingImageVirtualWriter} is created. The latter is
-then updated, and acts like a regular
-\doxygen{otb}{ImageFileWriter} but it does not actually write
-anything to the disk : streaming pieces are requested and immediately
-discarded. The \doxygen{otb}{PersistentFilterStreamingDecorator}
-also calls the \verb?Reset()? method at the beginning and the
-\verb?Synthetize()? method at the end of the streaming
-process. Therefore, it packages the whole mechanism for the use of a
-\doxygen{otb}{PersistentImageFilter}:
-\begin{enumerate}
-\item Call the \verb?Reset()? method on the filter so as to reset any temporary
-  results members,
-\item Stream the image piece-wise through the filter,
-\item Call the \verb?Synthetize()? method on the filter so as to
-  compute the final results.
-\end{enumerate}
-
-There are some methods that allows to tune the behavior of the
-\doxygen{otb}{StreamingImageVirtualWriter}, allowing to change the
-image splitting methods (tiles or strips) or the size of the streams
-with respect to some target available amount of memory. Please see the
-class documentation for details. The instance of the
-\doxygen{otb}{StreamingImageVirtualWriter} can be retrieved from the
-\doxygen{otb}{PersistentFilterStreamingDecorator} through the
-\verb?GetStreamer()? method.
-
-Though the internal filter of the
-\doxygen{otb}{PersistentFilterStreamingDecorator} can be accessed
-through the \verb?GetFilter()? method, the class is often derived to
-package the streaming-decorated filter and wrap the parameters setters
-and getters.
-
-\section{An end-to-end example}
-
-This is an end-to-end example to compute the mean over a full image,
-using a streaming and threading-enabled filter. Please note that only
-specific details are explained here. For more general information on
-how to write a filter, please refer to
-section~\ref{chapter:WriteAFilter}, page~\pageref{chapter:WriteAFilter}.
-
-\subsection{First step: writing a persistent filter}
-
-The first step is to write a persistent mean image filter. We need to
-include the appropriate header :
-
-\begin{cppcode}
-#include "otbPersistentImageFilter.h"
-\end{cppcode}
-
-Then, we declare the class prototype as follows:
-
-\begin{cppcode}
-template<class TInputImage >
-  class ITK_EXPORT PersistentMeanImageFilter :
-    public PersistentImageFilter<TInputImage, TInputImage>
-\end{cppcode}
-
-Since the output image will only be used for streaming purpose, we do
-not need to declare different input and output template types.
-
-In the \emph{private} section of the class, we will declare a member which
-will be used to store temporary results, and a member which will be
-used to store the final result.
-
-\begin{cppcode}
-private:
-  // Temporary results container
-  std::vector<PixelType> m_TemporarySums;
-
-  // Final result member
-  double m_Mean;
-\end{cppcode}
-
-Next, we will write the \verb?Reset()? method implementation in the
-\emph{protected} section of the class. Proper allocation of the
-temporary results container with respect to the number of threads is
-handled here.
-
-
-\begin{cppcode}
-protected:
-  virtual void Reset()
-  {
-  // Retrieve the number of threads
-  unsigned int numberOfThreads = this->GetNumberOfThreads();
-
-  // Reset the temporary results container
-  m_TemporarySums = std::vector<PixelType>(numberOfThreads,
-                                           itk::NumericTraits<PixelType>::Zero);
-
-  // Reset the final result
-  m_Mean = 0.;
-  }
-\end{cppcode}
-
-Now, we need to write the \verb?ThreadedGenerateData()? methods (also
-in the \emph{protected} section), were
-temporary results will be computed for each piece of stream.
-
-\begin{cppcode}
-virtual void ThreadedGenerateData(const RegionType&
-                                  outputRegionForThread, itk::ThreadIdType threadId)
-{
-// Enable progress reporting
-itk::ProgressReporter(this,threadId,outputRegionForThread.GetNumberOfPixels());
-
-// Retrieve the input pointer
-InputImagePointer inputPtr = const_cast<TInputImage *>(this->GetInput());
-
-// Declare an iterator on the region
-itk::ImageRegionConstIteratorWithIndex<TInputImage> it(inputPtr,
-outputRegionForThread);
-
-// Walk the region of the image with the iterator
-for (it.GoToBegin(); !it.IsAtEnd(); ++it, progress.CompletedPixel())
-  {
-  // Retrieve pixel value
-  const PixelType& value = it.Get();
-
-  // Update temporary results for the current thread
-  m_TemporarySums[threadId]+= value;
-}
-
-\end{cppcode}
-
-Last, we need to define the \verb?Synthetize()? method (still in the
-\emph{protected} section), which will yield the final results:
-
-\begin{cppcode}
-virtual void Synthetize()
-{
-// For each thread
-for(unsigned int threadId = 0; threadId <this->GetNumberOfThreads();++threadId)
-  {
-  // Update final result
-  m_Mean+=m_TemporarySums[threadId];
-} 
-
-// Complete calculus by dividing by the total number of pixels:
-unsigned int nbPixels =
-this->GetInput()->GetLargestPossibleRegion().GetNumberOfPixels();
-
-if(nbPixels!=0)
-  {
-  m_Mean/=nbPixels;
-  }  
-}
-\end{cppcode}
-
-\subsection{Second step: Decorating the filter and using it}
-
-Now, to use the filter, one only has to decorate it with the
-\doxygen{otb}{PersistentFilterStreamingDecorator}. First step is
-to include the appropriate header:
-
-\begin{cppcode}
-#include "otbPersistentMeanImageFilter.h"
-#include "otbPersistentFilterStreamingDecorator.h"
-\end{cppcode}
-
-Then, we decorate the filter with some typedefs:
-
-\begin{cppcode}
-typedef otb::PersistentMeanImageFilter<ImageType>
-  PersitentMeanFilterType;
-typedef otb::PersistentFilterStreamingDecorator
-  < PersitentMeanFilterType> StreamingMeanFilterType;
-\end{cppcode}
-
-Now, the decorated filter can be used like any standard filter:
-
-\begin{cppcode}
-StreamingMeanFilterType::Pointer filter =
-  StreamingMeanFilterType::New();
-
-filter->SetInput(reader->GetOutput());
-filter->Update();
-\end{cppcode}
-
-\subsection{Third step: one class to rule them all}
-
-It is often convenient to avoid the few typedefs of the previous
-section by deriving a new class from the decorated filter:
-
-\begin{cppcode}
-template<class TInputImage >
-  class ITK_EXPORT StreamingMeanImageFilter :
-    public PersistentFilterStreamingDecorator<
-           PersistentImageFilter<TInputImage, TInputImage> >
-\end{cppcode}
-
-This also allows to redefine setters and getters for parameters,
-avoiding to call the \verb?GetFilter()? method to set them.
diff --git a/Documentation/SoftwareGuide/Latex/SoftwareGuide.tex b/Documentation/SoftwareGuide/Latex/SoftwareGuide.tex
index bad44d644e..3413ce8174 100644
--- a/Documentation/SoftwareGuide/Latex/SoftwareGuide.tex
+++ b/Documentation/SoftwareGuide/Latex/SoftwareGuide.tex
@@ -211,15 +211,10 @@ colorlinks,linkcolor={blue},citecolor={blue},urlcolor={blue},
 
 \mainmatter
 
-\part{Introduction}\label{part:introduction}
-
-\input{SystemOverview.tex}
-
 \part{Tutorials}\label{part:tutorials}
 
 \input{Tutorial.tex}
 
-
 \part{User's guide}\label{part:userguide}
 
 \input{DataRepresentation.tex}
@@ -237,21 +232,8 @@ colorlinks,linkcolor={blue},citecolor={blue},urlcolor={blue},
 \input{Classification.tex}
 \input{ObjectBasedImageAnalysis.tex}
 \input{ChangeDetection.tex}
-\input{Hyperspectral.tex}
 \input{Visualization.tex}
 
-%%% \input{Applications.tex}
-
-
-
-\part{Developer's guide}\label{part:developerguide}
-\input{Iterators.tex}
-\input{StreamingAndThreading.tex}
-\input{WriteAFilter.tex}
-\input{Persistent.tex}
-\input{WriteAnApplication.tex}
-\input{WriteModules.tex}
-
 \backmatter
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/Documentation/SoftwareGuide/Latex/StreamingAndThreading.tex b/Documentation/SoftwareGuide/Latex/StreamingAndThreading.tex
deleted file mode 100644
index 760e4e285c..0000000000
--- a/Documentation/SoftwareGuide/Latex/StreamingAndThreading.tex
+++ /dev/null
@@ -1,81 +0,0 @@
-\chapter{Streaming and Threading}
-\label{sec:StreamingAndThreading}
-
-\index{Streaming}\index{Threading}
-
-Streaming and threading are a complex issue in computing in general. This
-chapter provides the keys to help you understand how it is working so you can
-make the right choices later.
-
-\section{Introduction}
-
-First, you have to be aware that streaming and threading are two different
-things even if they are linked to a certain extent. In OTB:
-
-\begin{itemize}
-\item Streaming describes the ability to combine the processing of several
-portion of a big image and to make the output identical as what you would have
-got if the whole image was processed at once. Streaming is compulsory when
-you're processing gigabyte images. 
-\item Threading is the ability to process simultaneously different parts of the
-image. Threading will give you some benefits only if you have a fairly recent
-processor (dual, quad core and some older P4).
-\end{itemize}
-
-
-
-To sum up: streaming is good if you have big images, threading is good if you
-have several processing units.
-
-However, these two properties are not unrelated. Both rely on the filter ability
-to process parts of the image and combine the result, that what the
-ThreadedGenerateData() method can do.
-
-\section{Streaming and threading in OTB}
-
-For OTB, streaming is pipeline related while threading is filter related. If you
-build a pipeline where one filter is not streamable, the whole pipeline is not
-streamable: at one point, you would hold the entire image in memory. Whereas you
-will benefit from a threaded filter even if the rest of the pipeline is made of
-non-threadable filters (the processing time will be shorter for this particular
-filter).
-
-
-Even if you use a non streamed writer, each filter which has a
-ThreadedGenerateData() will split the image into two and send each part to one
-thread and you will notice two calls to the function.
-
-If you have some particular requirement and want to use only one thread, you can
-call the SetNumberOfThreads() method on each of your filter. 
-
-When you are writing your own filter, you have to follow some rules to make your
-filter streamable and threadable. Some details are provided in sections 
-\ref{sec:StreamingLargeData} and \ref{sec:ThreadedFilterExecution}.
-
-
-\section{Division strategies}\label{sec:Splitters}
-%  TODO
-% Add details on the splitting strategies...
-%
-
-The division of the image occurs generally at the writer level. Different 
-strategies are available and can be specified explicitly. In OTB, these are 
-referred as {\em splitter}. Several available splitters are:
-
-\begin{itemize}
-\item \doxygen{itk}{ImageRegionSplitter}
-\item \doxygen{itk}{ImageRegionMultidimensionalSplitter}
-\item \doxygen{otb}{ImageRegionNonUniformMultidimensionalSplitter}
-\end{itemize}
-
-You can add your own strategies based on these examples.
-
-To change the splitting strategy of the writer, you can use the following model:
-
-\begin{verbatim}
-  typedef otb::ImageRegionNonUniformMultidimensionalSplitter<3> splitterType;
-  splitterType::Pointer splitter=splitterType::New() ;
-  writer->SetRegionSplitter(splitter);
-\end{verbatim}
-
-
diff --git a/Documentation/SoftwareGuide/Latex/SystemOverview.tex b/Documentation/SoftwareGuide/Latex/SystemOverview.tex
deleted file mode 100644
index 67715ffe09..0000000000
--- a/Documentation/SoftwareGuide/Latex/SystemOverview.tex
+++ /dev/null
@@ -1,389 +0,0 @@
-\chapter{System Overview}
-\label{chapter:SystemOverview}
-
-The purpose of this chapter is to provide you with an overview of the
-\emph{ORFEO Toolbox} system. We recommend that you read this chapter to
-gain an appreciation for the breadth and area of application of
-OTB. In this chapter, we will make reference either to \emph{OTB
-  features} or \emph{ITK features} without distinction. Bear in mind
-that OTB uses ITK as its core element, so all the fundamental elements
-of OTB come from ITK. OTB extends the functionalities of ITK for the
-remote sensing image processing community. We benefit from the Open
-Source development approach chosen for ITK, which allows us to provide
-an impressive set of functionalities with much less effort than
-would have been the case in a closed source universe!
-
-\section{System Organization}
-\label{sec:SystemOrganization}
-
-The Orfeo Toolbox consists of several subsystems:
-
-\begin{description}
-	\item[Essential System Concepts.] Like any software system, OTB is
-        built around some core design concepts. OTB uses those of
-        ITK. Some of the more important
-        concepts include generic programming, smart pointers for memory
-        management, object factories for adaptable object instantiation,
-        event management using the command/observer design paradigm, and
-        multithreading support.
-
-	\item[Numerics] OTB, as ITK uses VXL's VNL numerics libraries. These are
-        easy-to-use C++ wrappers around the Netlib Fortran numerical 
-        analysis routines (\url{http://www.netlib.org}).
-
-	\item[Data Representation and Access.]  Two principal classes
-        are used to represent data: the \doxygen{otb}{Image} and
-        \doxygen{itk}{Mesh} classes.  In addition, various types of
-        iterators and containers are used in ITK to hold and traverse
-        the data. Other important but less popular classes are also
-        used to represent data such as histograms.
-
-	\item[ITK's Data Processing Pipeline.]  The data representation
-	classes (known as \emph{data objects}) are operated on by
-	\emph{filters} that in turn may be organized into data flow
-	\emph{pipelines}. These pipelines maintain state and therefore
-	execute only when necessary.  They also support
-	multi-threading, and are streaming capable (i.e., can operate
-	on pieces of data to minimize the memory footprint).
-
-        \item[IO Framework.] Associated with the data processing
-        pipeline are \emph{sources}, filters that initiate the
-        pipeline, and \emph{mappers}, filters that terminate the
-        pipeline.  The standard examples of sources and mappers are
-        \emph{readers} and \emph{writers} respectively.  Readers
-        input data (typically from a file), and writers output data
-        from the pipeline. \emph{Viewers} are another example of mappers.
-
-	\item[Spatial Objects.] Geometric shapes are represented in
-        OTB using the ITK spatial object hierarchy.  These classes are
-        intended to support modeling of anatomical structures in
-        ITK. OTB uses them in order to model cartographic elements. Using a
-        common basic interface, the spatial objects are capable of
-        representing regions of space in a variety of different
-        ways. For example: mesh structures, image masks, and implicit
-        equations may be used as the underlying representation scheme.
-        Spatial objects are a natural data structure for communicating
-        the results of segmentation methods and for introducing
-        geometrical priors in both segmentation and registration
-        methods.
-
-	\item[ITK's Registration Framework.] A flexible framework for
-        registration supports four different types of registration:
-        image registration, multiresolution registration, PDE-based
-        registration, and FEM (finite element method) registration.
-
-	\item[FEM Framework.] ITK includes a subsystem for solving general
-        FEM problems, in particular non-rigid registration. The FEM package
-        includes mesh definition (nodes and elements), loads, and boundary
-        conditions.
-
-	\item[Level Set Framework.] The level set framework is a set of
-        classes for creating filters to solve partial differential equations
-        on images using an iterative, finite difference update scheme. The
-        level set framework consists of finite difference solvers including a
-        sparse level set solver, a generic level set segmentation filter, and
-        several specific subclasses including threshold, Canny, and Laplacian
-        based methods.
-
-	\item[Wrapping.] ITK uses a unique, powerful system for
-	producing interfaces (i.e., ``wrappers'') to interpreted
-	languages such as Tcl and Python. The GCC\_XML tool is used to
-	produce an XML description of arbitrarily complex C++ code;
-	CSWIG is then used to transform the XML description into
-	wrappers using the \href{http://www.swig.org/}{SWIG}
-	package. OTB does not use this system at present.
-
-%% 	\item[Auxiliary / Utilities] Several auxiliary subsystems are 
-%%         available to supplement other classes in the system. For example,
-%%         calculators are classes that perform specialized operations in
-%%         support of filters (e.g., MeanCalculator computes the mean of a
-%%         sample). Other utilities include GDAL format file
-%%         support, png, zlib, FLTK / Qt image viewers, and interfaces to the
-%%         Visualization Toolkit (VTK) system.
-        
-\end{description}
-
-
-\section{Essential System Concepts}
-\label{sec:EssentialSystemConcepts}
-
-This section describes some of the core concepts and implementation features
-found in ITK and therefore also in OTB.
-
-\subsection{Generic Programming}
-\label{sec:GenericProgramming}
-
-\index{generic programming}
-\index{template}
-
-Generic programming is a method of organizing libraries consisting of
-generic---or reusable---software components. The idea is to
-make software that is capable of ``plugging together'' in an efficient,
-adaptable manner. The essential ideas of generic programming are
-\emph{containers} to hold data, \emph{iterators} to access the data, and 
-\emph{generic algorithms} that use containers and iterators to create 
-efficient, fundamental algorithms such as sorting. Generic programming is
-implemented in C++ with the \emph{template} programming mechanism and the 
-use of the STL Standard Template Library.
-
-C++ templating is a programming technique allowing users to write software in
-terms of one or more unknown types \code{T}. To create executable code, the
-user of the software must specify all types \code{T} (known as \emph{template
-instantiation}) and successfully process the code with the compiler. The
-\code{T} may be a native type such as
-\code{float} or \code{int}, or \code{T} may be a user-defined type (e.g.,
-\code{class}). At compile-time, the compiler makes sure that the templated 
-types are compatible with the instantiated code and that the types are
-supported by the necessary methods and operators.
-
-ITK uses the techniques of generic programming in its implementation. The
-advantage of this approach is that an almost unlimited variety of data types
-are supported simply by defining the appropriate template types. For example,
-in OTB it is possible to create images consisting of almost any type of
-pixel. In addition, the type resolution is performed at compile-time, so the
-compiler can optimize the code to deliver maximal performance. The
-disadvantage of generic programming is that many compilers still do not
-support these advanced concepts and cannot compile OTB. And even if they do,
-they may produce completely undecipherable error messages due to even the
-simplest syntax errors.
-
-\subsection{Include Files and Class Definitions}
-\label{sec:IncludeFiles}
-
-In ITK and OTB classes are defined by a maximum of two files: a header \code{.h} file
-and an implementation file---\code{.cxx} if a non-templated class, and a
-\code{.hxx} if a templated class.
-The header files contain class declarations
-and formatted comments that are used by the Doxygen documentation
-system to automatically produce HTML manual pages.
-
-In addition to class headers, there are a few other important ITK header files.
-\begin{description}
-        \item[\code{itkMacro.h}] defines standard system-wide macros (such as \code{Set/Get},
-        constants, and other parameters).
-
-        \item[\code{itkNumericTraits.h}] defines numeric characteristics for native types such
-        as its maximum and minimum possible values.
-
-        \item[\code{itkWin32Header.h}] is used to define operating system parameters to control
-        the compilation process.
-\end{description}
-
-\subsection{Object Factories}
-\label{sec:ObjectFactories}
-
-\index{object factory}
-\index{factory}
-
-Most classes in OTB are instantiated through an \emph{object factory}
-mechanism. That is, rather than using the standard C++ class constructor and
-destructor, instances of an OTB class are created with the static class
-\code{New()} method. In fact, the constructor and destructor are
-\code{protected:} so it is generally not possible to construct an OTB
-instance on the heap. (Note: this behavior pertains to classes that are
-derived from \doxygen{itk}{LightObject}. In some cases the need for speed or
-reduced memory footprint dictates that a class not be derived from
-LightObject and in this case instances may be created on the heap. An
-example of such a class is \doxygen{itk}{EventObject}.)
-
-The object factory enables users to control run-time instantiation of classes
-by registering one or more factories with \doxygen{itk}{ObjectFactoryBase}. These
-registered factories support the method \code{CreateInstance(classname)}
-which takes as input the name of a class to create. The factory can choose to
-create the class based on a number of factors including the computer system
-configuration and environment variables. For example, in a particular
-application an OTB user may wish to deploy their own class implemented using
-specialized image processing hardware (i.e., to realize a performance
-gain). By using the object factory mechanism, it is possible at run-time to
-replace the creation of a particular OTB filter with such a custom class. (Of
-course, the class must provide the exact same API as the one it is
-replacing.) To do this, the user compiles their class (using the same compiler,
-build options, etc.) and inserts the object code into a shared library or
-DLL. The library is then placed in a directory referred to by the
-\code{OTB\_AUTOLOAD\_PATH} environment variable. On instantiation, the object
-factory will locate the library, determine that it can create a class of a
-particular name with the factory, and use the factory to create the
-instance. (Note: if the \code{CreateInstance()} method cannot find a factory
-that can create the named class, then the instantiation of the class falls
-back to the usual constructor.)
-
-In practice object factories are used mainly (and generally transparently) by
-the OTB input/output (IO) classes. For most users the greatest impact is on
-the use of the \code{New()} method to create a class. Generally the
-\code{New()} method is declared and implemented via the macro
-\code{itkNewMacro()} found in \code{Modules/Core/Common/include/itkMacro.h}.
-
-
-\subsection{Smart Pointers and Memory Management}
-\label{sec:SmartPointers}
-
-\index{smart pointer}
-
-By their nature object-oriented systems represent and operate on data through
-a variety of object types, or classes. When a particular class is
-instantiated to produce an instance of that class, memory allocation occurs
-so that the instance can store data attribute values and method pointers
-(i.e., the vtable). This object may then be referenced by other classes or
-data structures during normal operation of the program. Typically during
-program execution all references to the instance may disappear at which point
-the instance must be deleted to recover memory resources. Knowing when to
-delete an instance, however, is difficult. Deleting the instance too soon
-results in program crashes; deleting it too late and memory leaks (or
-excessive memory consumption) will occur. This process of allocating and
-releasing memory is known as memory management.
-
-In ITK, memory management is implemented through reference counting. This
-compares to another popular approach---garbage collection---used
-\index{garbage collection} by many
-systems including Java. In reference counting, a count of the number of
-references to each instance is kept. When the reference goes to zero, the
-object destroys itself. In garbage collection, a background process sweeps
-the system identifying instances no longer referenced in the system and
-deletes them. The problem with garbage collection is that the actual point in
-time at which memory is deleted is variable. This is unacceptable when an
-object size may be gigantic (think of a large 3D volume gigabytes in
-size). Reference counting deletes memory immediately (once all references to
-an object disappear).
-
-Reference counting is implemented through a \code{Register()}/\code{Delete()}
-member function interface.  All instances of an OTB object have a
-\code{Register()} method invoked on them by any other object that references
-an them. The \code{Register()} method increments the instances' reference
-count. When the reference to the instance disappears, a \code{Delete()}
-method is invoked on the instance that decrements the reference count---this
-is equivalent to an \code{UnRegister()} method. When the reference count
-returns to zero, the instance is destroyed.
-
-This protocol is greatly simplified by using a helper class called a
-\doxygen{itk}{SmartPointer}. The smart pointer acts like a regular pointer
-(e.g. supports operators \code{->} and \code{*}) but automagically performs a
-\code{Register()} when referring to an instance, and an \code{UnRegister()}
-when it no longer points to the instance.  Unlike most other instances in
-OTB, SmartPointers can be allocated on the program stack, and are
-automatically deleted when the scope that the SmartPointer was created
-is closed. As a result, you should \emph{rarely if ever call Register() or
-Delete()} in OTB. For example:
-
-\small
-\begin{verbatim}
-  MyRegistrationFunction()
-    { <----- Start of scope
-
-    // here an interpolator is created and associated to the
-    // SmartPointer "interp".
-    InterpolatorType::Pointer interp = InterpolatorType::New();
-
-    } <------ End of scope
-\end{verbatim}
-\normalsize
-
-In this example, reference counted objects are created (with the \code{New()}
-method) with a reference count of one. Assignment to the SmartPointer
-\code{interp} does not change the reference count. At the end of scope,
-\code{interp} is destroyed, the reference count of the actual interpolator
-object (referred to by \code{interp}) is decremented, and if it reaches zero,
-then the interpolator is also destroyed.
-
-Note that in ITK SmartPointers are always used to refer to instances of
-classes derived from \doxygen{itk}{LightObject}. Method invocations and function
-calls often return ``real'' pointers to instances, but they are immediately
-assigned to a SmartPointer. Raw pointers are used for non-LightObject classes when
-the need for speed and/or memory demands a smaller, faster class.
-
-
-\section{Data Representation}
-\label{sec:DataRepresentationAndAccess}
-
-\index{data object} 
-
-\index{otb::Image}
-
-\doxygen{otb}{Image} represents an \emph{n}-dimensional, regular sampling of
-data. The sampling direction is parallel to each of the coordinate axes, and
-the origin of the sampling, inter-pixel spacing, and the number of samples in
-each direction (i.e., image dimension) can be specified. The sample, or
-pixel, type in OTB is arbitrary---a template parameter \code{TPixel}
-specifies the type upon template instantiation. (The dimensionality of the
-image must also be specified when the image class is instantiated.) The key
-is that the pixel type must support certain operations (for example, addition
-or difference) if the code is to compile in all cases (for example, to be
-processed by a particular filter that uses these operations). In practice the
-OTB user will use a C++ simple type (e.g., \code{int}, \code{float}) or a pre-defined pixel
-type and will rarely create a new type of pixel class.
-
-One of the important ITK concepts regarding images is that rectangular,
-continuous pieces of the image are known as \emph{regions}. Regions are used
-to specify which part of an image to process, for example in multithreading,
-or which part to hold in memory. In ITK there are three common types of
-regions:
-\begin{enumerate}
-\item \code{LargestPossibleRegion}---the image in its entirety.
-\item \code{BufferedRegion}---the portion of the image retained in memory.
-\item \code{RequestedRegion}---the portion of the region requested by a 
-filter or other class when operating on the image.
-\end{enumerate}
-
-The \doxygen{otb}{Image} class extends the functionalities of the
-\doxygen{itk}{Image} in order to take into account particular remote
-sensing features as geographical projections, etc.
-
-\section{Data Processing Pipeline}
-\label{sec:DataProcessingPipeline}
-
-\index{data processing pipeline}
-
-\index{process object} 
-\index{source}
-\index{reader} 
-\index{filter} 
-\index{mapper} 
-
-While data objects (e.g., images) are used to represent data,
-\emph{process objects} are classes that operate on data objects and may
-produce new data objects. Process objects are classed as
-\emph{sources}, \emph{filter objects}, or \emph{mappers}.  Sources (such as
-readers) produce data, filter objects take in data and process it to produce
-new data, and mappers accept data for output either to a file or
-some other system.  Sometimes the term \emph{filter} is used broadly
-to refer to all three types.
-
-\index{streaming}
-
-The data processing pipeline ties together data objects (e.g., images)
-and process objects. The pipeline supports an automatic updating
-mechanism that causes a filter to execute if and only if its input 
-or its internal state changes. Further, the data pipeline supports
-\emph{streaming}, the ability to automatically break data into smaller
-pieces, process the pieces one by one, and reassemble the processed data into
-a final result.
-
-Typically data objects and process objects are connected together using the
-\code{SetInput()} and \code{GetOutput()} methods as follows:
-
-\small
-\begin{verbatim}
-  typedef otb::Image<float,2> FloatImage2DType;
-
-  itk::RandomImageSource<FloatImage2DType>::Pointer random;
-  random = itk::RandomImageSource<FloatImage2DType>::New();
-  random->SetMin(0.0);
-  random->SetMax(1.0);
-
-  itk::ShrinkImageFilter<FloatImage2DType,FloatImage2DType>::Pointer shrink;
-  shrink = itk::ShrinkImageFilter<FloatImage2DType,FloatImage2DType>::New();
-  shrink->SetInput(random->GetOutput());
-  shrink->SetShrinkFactors(2);
-
-  otb::ImageFileWriter::Pointer<FloatImage2DType> writer;
-  writer = otb::ImageFileWriter::Pointer<FloatImage2DType>::New();
-  writer->SetInput (shrink->GetOutput());
-  writer->SetFileName( ``test.raw'' );
-  writer->Update();
-\end{verbatim}
-\normalsize 
-
-In this example the source object \doxygen{itk}{RandomImageSource} is connected
-to the \doxygen{itk}{ShrinkImageFilter}, and the shrink filter is connected to
-the mapper \doxygen{otb}{ImageFileWriter}. When the \code{Update()} method is
-invoked on the writer, the data processing pipeline causes each of these
-filters in order, culminating in writing the final data to a file on disk.
diff --git a/Documentation/SoftwareGuide/Latex/WriteACompositeFilter.tex b/Documentation/SoftwareGuide/Latex/WriteACompositeFilter.tex
deleted file mode 100644
index 7642389965..0000000000
--- a/Documentation/SoftwareGuide/Latex/WriteACompositeFilter.tex
+++ /dev/null
@@ -1,77 +0,0 @@
-
-\section{How To Write A Composite Filter}
-
-In general, most ITK/OTB filters implement one particular algorithm,
-whether it be image filtering, an information metric, or a
-segmentation algorithm.  In the previous section, we saw how to write
-new filters from scratch.  However, it is often very useful to be able
-to make a new filter by combining two or more existing filters, which
-can then be used as a building block in a complex pipeline.  This
-approach follows the Composite pattern \cite{Gamma1995}, whereby the
-composite filter itself behaves just as a regular filter, providing
-its own (potentially higher level) interface and using other filters
-(whose detail is hidden to users of the class) for the implementation.
-This composite structure is shown in
-Figure~\ref{fig:CompositeFilterStages}, where the various
-\code{Stage-n} filters are combined into one by the \code{Composite}
-filter.  The \code{Source} and \code{Sink} filters only see the
-interface published by the \code{Composite}.  Using the Composite
-pattern, a composite filter can encapsulate a pipeline of arbitrary
-complexity.  These can in turn be nested inside other pipelines.
-
-\begin{figure}
-  \centering
-  \includegraphics[width=0.9\textwidth]{CompositeFilterStages.eps}
-  \itkcaption[Composite Filter Concept]{A Composite filter encapsulates a number of other filters.} 
-  \label{fig:CompositeFilterStages}
-\end{figure}
-
-\subsection{Implementing a Composite Filter}
-
-There are a few considerations to take into account when implementing a
-composite filter.  All the usual requirements for filters apply (as
-discussed above), but the following guidelines should be considered:
-
-\begin{enumerate}
-
-\item The template arguments it takes must be sufficient to instantiate all of
-the component filters.  Each component filter needs a type supplied by either
-the implementor or the enclosing class.  For example, an
-\code{ImageToImageFilter} normally takes an input and output image type (which
-may be the same).  But if the output of the composite filter is a classified
-image, we need to either decide on the output type inside the composite filter,
-or restrict the choices of the user when she/he instantiates the filter.
-
-\item The types of the component filters should be declared in the header,
-  preferably with \code{protected} visibility.  This is because the
-  internal structure normally should not be visible to users of the class,
-  but should be to descendent classes that may need to modify or customize
-  the behavior. 
-
-\item The component filters should be private data members of the composite
-  class, as in \code{FilterType::Pointer}. 
-
-\item The default constructor should build the pipeline by creating the
-  stages and connect them together, along with any default parameter
-  settings, as appropriate. 
-
-\item The input and output of the composite filter need to be grafted on to
-  the head and tail (respectively) of the component filters. 
-
-\end{enumerate}
-
-This grafting process is illustrated in Figure~\ref{fig:CompositeExamplePipeline}. 
-
-
-\subsection{A Simple Example}
-
-\begin{figure}
-  \centering
-  \includegraphics[width=0.9\textwidth]{CompositeExamplePipeline.eps}
-  \itkcaption[Composite Filter Example]{Example of a typical composite filter. Note that the output of the last filter in the internal pipeline must be grafted into the output of the composite filter.} 
-  \label{fig:CompositeExamplePipeline}
-\end{figure}
-
-\input{CompositeFilterExample.tex}
-
-%---------------------------------------------------------------------------
diff --git a/Documentation/SoftwareGuide/Latex/WriteAFilter.tex b/Documentation/SoftwareGuide/Latex/WriteAFilter.tex
deleted file mode 100644
index c210051ca6..0000000000
--- a/Documentation/SoftwareGuide/Latex/WriteAFilter.tex
+++ /dev/null
@@ -1,584 +0,0 @@
-\chapter{How To Write A Filter}
-\label{chapter:WriteAFilter}
-
-This purpose of this chapter is help developers create their own
-filter (process object).  This chapter is divided into four major
-parts. An initial definition of terms is followed by an overview of
-the filter creation process. Next, data streaming is discussed. The
-way data is streamed in ITK must be understood in order to write
-correct filters. Finally, a section on multithreading describes what
-you must do in order to take advantage of shared memory parallel
-processing.
-
-\section{Terminology}
-\label{sec:Terminology}
-
-The following is some basic terminology for the discussion that follows.
-Chapter \ref{chapter:SystemOverview} provides additional background
-information.
-
-\begin{itemize}
-        \item The \textbf{data processing pipeline} is a directed graph of
-        \textbf{process} and \textbf{data objects}. The pipeline inputs,
-        operators on, and outputs data.
-        \index{data processing pipeline}
-        \index{process object}
-        \index{data object}
-
-        \item A \textbf{filter}, or \textbf{process object}, has one or more
-        inputs, and one or more outputs.
-        \index{filter}
-
-        \item A \textbf{source}, or source process object, initiates the data
-        processing pipeline, and has one or more outputs.
-        \index{source}
-
-        \item A \textbf{mapper}, or mapper process object, terminates the
-        data processing pipeline. The mapper has one or more outputs, and may
-        write data to disk, interface with a display system, or interface to
-        any other system.
-        \index{mapper}
-
-        \item A \textbf{data object} represents and provides access to
-        data. In ITK, the data object (ITK class \doxygen{itk}{DataObject}) is 
-        typically of type \doxygen{otb}{Image} or \doxygen{itk}{Mesh}.
-        \index{data object}
-
-        \item A \textbf{region} (ITK class \doxygen{itk}{Region}) represents a 
-        piece, or subset of the entire data set.
-        \index{region}
-
-        \item An \textbf{image region} (ITK class \doxygen{itk}{ImageRegion})
-        represents a structured portion of data. ImageRegion is implemented
-        using the \doxygen{itk}{Index} and \doxygen{itk}{Size} classes
-        \index{image region}
-
-        \item A \textbf{mesh region} (ITK class \doxygen{itk}{MeshRegion}) 
-        represents an unstructured portion of data.
-        \index{mesh region}
-
-        \item The \textbf{LargestPossibleRegion} is the theoretical single,
-        largest piece (region) that could represent the entire dataset. The
-        LargestPossibleRegion is used in the system as the measure of the
-        largest possible data size.
-        \index{LargestPossibleRegion}
-
-        \item The \textbf{BufferedRegion} is a contiguous block of memory
-        that is less than or equal to in size to the
-        LargestPossibleRegion. The buffered region is what has actually been
-        allocated by a filter to hold its output.
-        \index{BufferedRegion}
-
-        \item The \textbf{RequestedRegion} is the piece of the dataset that a
-        filter is required to produce. The RequestedRegion is less than or
-        equal in size to the BufferedRegion. The RequestedRegion may differ
-        in size from the BufferedRegion due to performance reasons. The
-        RequestedRegion may be set by a user, or by an application that needs
-        just a portion of the data.
-        \index{RequestedRegion}
-
-        \item The \textbf{modified time} (represented by ITK class
-        \doxygen{itk}{TimeStamp}) is a monotonically increasing integer value that
-        characterizes a point in time when an object was last modified.
-        \index{modified time}
-
-        \item \textbf{Downstream} is the direction of dataflow, from sources
-        to mappers.
-        \index{pipeline!downstream}
-
-        \item \textbf{Upstream} is the opposite of downstream, from mappers
-        to sources.
-        \index{pipeline!upstream}
-
-        \item The \textbf{pipeline modified time} for a particular data
-        object is the maximum modified time of all upstream data objects and
-        process objects.
-        \index{pipeline!modified time}
-
-        \item The term \textbf{information} refers to metadata that
-        characterizes data. For example, index and dimensions are information
-        characterizing an image region.
-        \index{pipeline!information}
-\end{itemize}
-
-\section{Overview of Filter Creation}
-\label{sec:OverviewFilterCreation}
-\index{filter!overview of creation}
-
-\itkpiccaption[Relationship between DataObjects and ProcessObjects]
-{Relationship between DataObject and ProcessObject.
-\label{fig:DataPipeLineOneConnection}}
-\parpic(7cm,2.5cm)[r]{\includegraphics[width=6cm]{DataPipelineOneConnection.eps}}
-
-
-Filters are defined with respect to the type of data they input (if
-any), and the type of data they output (if any). The key to writing a
-ITK filter is to identify the number and types of input and
-output. Having done so, there are often superclasses that simplify
-this task via class derivation. For example, most filters in ITK take
-a single image as input, and produce a single image on output. The
-superclass \doxygen{itk}{ImageToImageFilter} is a convenience class that
-provide most of the functionality needed for such a filter.
-
-Some common base classes for new filters include:
-
-\begin{itemize}
-
-  \item \code{ImageToImageFilter}: the most common filter base for
-    segmentation algorithms.  Takes an image and produces a new image, by
-    default of the same dimensions.  Override
-    \code{GenerateOutputInformation} to produce a different size.
-
-  \item \code{UnaryFunctorImageFilter}: used when defining a filter that
-  applies a function to an image.
-
-  \item \code{BinaryFunctorImageFilter}: used when defining a filter that
-  applies an operation to two images.
-
-  \item \code{ImageFunction}: a functor that can be applied to an image,
-  evaluating $f(x) $ at each point in the image.
-
-  \item \code{MeshToMeshFilter}: a filter that transforms meshes, such as
-  tessellation, polygon reduction, and so on.
-
-  \item \code{LightObject}: abstract base for filters that don't fit well
-  anywhere else in the class hierarchy.  Also useful for ``calculator''
-  filters; ie. a sink filter that takes an input and calculates a result
-  which is retrieved using a \code{Get()} method.
-
-\end{itemize}
-
-Once the appropriate superclass is identified, the filter writer
-implements the class defining the methods required by most all ITK
-objects: \code{New()}, \code{PrintSelf()}, and protected constructor,
-copy constructor, delete, and operator=, and so on. Also, don't forget
-standard typedefs like \code{Self}, \code{Superclass}, \code{Pointer}, and
-\code{ConstPointer}. Then the filter writer can focus on the most important
-parts of the implementation: defining the API, data members, and other
-implementation details of the algorithm. In particular, the filter writer
-will have to implement either a \code{GenerateData()} (non-threaded) or
-\code{ThreadedGenerateData()} method. (See Section~\ref{sec:MultiThreading}
-for an overview of multi-threading in ITK.)
-
-An important note: the GenerateData() method is required to allocate memory
-for the output. The ThreadedGenerateData() method is not. In default
-implementation (see \doxygen{itk}{ImageSource}, a superclass of
-\doxygen{itk}{ImageToImageFilter})
-\code{GenerateData()} allocates memory and then invokes
-\code{ThreadedGenerateData()}.
-
-One of the most important decisions that the developer must make is whether
-the filter can stream data; that is, process just a portion of the input to
-produce a portion of the output. Often superclass behavior works well: if the
-filter processes the input using single pixel access, then the default
-behavior is adequate. If not, then the user may have to a) find a more
-specialized superclass to derive from, or b) override one or more methods
-that control how the filter operates during pipeline execution. The next
-section describes these methods.
-
-
-
-\section{Streaming Large Data}
-\label{sec:StreamingLargeData}
-\index{pipeline!streaming large data}
-
-The data associated with multi-dimensional images is large and becoming larger.
-This trend is due to advances in scanning resolution, as well as increases in
-computing capability. Any practical segmentation and registration software
-system must address this fact in order to be useful in application. ITK
-addresses this problem via its data streaming facility.
-
-In ITK, streaming is the process of dividing data into pieces, or regions,
-and then processing this data through the data pipeline. Recall that the
-pipeline consists of process objects that generate data objects, connected
-into a pipeline topology. The input to a process object is a data object
-(unless the process initiates the pipeline and then it is a source process
-object). These data objects in turn are consumed by other process objects,
-and so on, until a directed graph of data flow is constructed. Eventually the
-pipeline is terminated by one or more mappers, that may write data to
-storage, or interface with a graphics or other system. This is illustrated in 
-figures \ref{fig:DataPipeLineOneConnection} and \ref{fig:DataPipeLine}.
-
-A significant benefit of this architecture is that the relatively complex
-process of managing pipeline execution is designed into the system. This
-means that keeping the pipeline up to date, executing only those portions of
-the pipeline that have changed, multithreading execution, managing memory
-allocation, and streaming is all built into the architecture. However, these
-features do introduce complexity into the system, the bulk of which is seen
-by class developers. The purpose of this chapter is to describe the pipeline
-execution process in detail, with a focus on data streaming.
-
-
-\subsection{Overview of Pipeline Execution}
-\label{sec:OverviewPipelineExecution}
-\index{pipeline!overview of execution}
-
-The pipeline execution process performs several important functions.
-
-\begin{figure}
-  \par\centering
-  \resizebox{5in}{!}{ \includegraphics{DataPipeline.eps}} 
-  \itkcaption[The Data Pipeline]{The Data Pipeline}
-  \label{fig:DataPipeLine}
-  \par
-\end{figure}
-
-\begin{enumerate}
-        \item It determines which filters, in a pipeline of filters, need to
-        execute. This prevents redundant execution and minimizes overall
-        execution time.
-
-        \item It initializes the (filter's) output data objects, preparing
-        them for new data.  In addition, it determines how much memory each
-        filter must allocate for its output, and allocates it.
-
-        \item The execution process determines how much data a filter must
-        process in order to produce an output of sufficient size for
-        downstream filters; it also takes into account any limits on memory
-        or special filter requirements. Other factors include the size of
-        data processing kernels, that affect how much data input data 
-        (extra padding) is required.
-
-        \item It subdivides data into subpieces for multithreading. (Note
-        that the division of data into subpieces is exactly same problem as
-        dividing data into pieces for streaming; hence multithreading comes
-        for free as part of the streaming architecture.)
-
-        \item It may free (or release) output data if filters no longer need
-        it to compute, and the user requests that data is to be
-        released. (Note: a filter's output data object may be considered a
-        ``cache''. If the cache is allowed to remain (\code{ReleaseDataFlagOff()}) 
-        between pipeline execution, and the filter, or the input to the 
-        filter, never changes, then process objects downstream of the filter 
-        just reuse the filter's cache to re-execute.)
-\end{enumerate}
-
-To perform these functions, the execution process negotiates with the
-filters that define the pipeline. Only each filter can know how much data is
-required on input to produce a particular output. For example, a shrink
-filter with a shrink factor of two requires an image twice as large (in terms
-of its x-y dimensions) on input to produce a particular size output. An
-image convolution filter would require extra input (boundary padding)
-depending on the size of the convolution kernel. Some filters require the
-entire input to produce an output (for example, a histogram), and have the
-option of requesting the entire input. (In this case streaming does not work
-unless the developer creates a filter that can request multiple pieces,
-caching state between each piece to assemble the final output.)
-
-
-\begin{figure}
-  \par\centering
-  \resizebox{5in}{!}{ \includegraphics{DataPipelineUpdate.eps}} 
-  \itkcaption[Sequence of the Data Pipeline updating mechanism]{Sequence of the
-Data Pipeline updating mechanism}
-  \label{fig:DataPipeLineUpdate}
-  \par
-\end{figure}
-
-
-Ultimately the negotiation process is controlled by the request for data of a
-particular size (i.e., region). It may be that the user asks to process a
-region of interest within a large image, or that memory limitations result in
-processing the data in several pieces. For example, an application may
-compute the memory required by a pipeline, and then use
-\doxygen{itk}{StreamingImageFilter} to break the data processing into several pieces.
-The data request is propagated through the pipeline in the upstream
-direction, and the negotiation process configures each filter to produce
-output data of a particular size.
-
-The secret to creating a streaming filter is to understand how this
-negotiation process works, and how to override its default behavior by using
-the appropriate virtual functions defined in \doxygen{itk}{ProcessObject}. The next
-section describes the specifics of these methods, and when to override
-them. Examples are provided along the way to illustrate concepts.
-
-
-\subsection{Details of Pipeline Execution}
-\label{sec:DetailsPipelineExecution}
-\index{pipeline!execution details}
-
-Typically pipeline execution is initiated when a process object
-receives the \code{ProcessObject::Update()} method invocation. This
-method is simply delegated to the output of the filter, invoking the
-\code{DataObject::Update()} method. Note that this behavior is typical
-of the interaction between ProcessObject and DataObject: a method
-invoked on one is eventually delegated to the other. In this way the
-data request from the pipeline is propagated upstream, initiating data
-flow that returns downstream.
-
-The \code{DataObject::Update()} method in turn invokes three other methods:
-
-\begin{itemize}
-        \item \code{DataObject::UpdateOutputInformation()}
-        \item \code{DataObject::PropagateRequestedRegion()}
-        \item \code{DataObject::UpdateOutputData()}
-\end{itemize}
-
-\subsubsection{UpdateOutputInformation()}
-\label{sec:UpdateOutputInformation}
-\index{pipeline!UpdateOutputInformation}
-
-The \code{UpdateOutputInformation()} method determines the pipeline modified
-time. It may set the RequestedRegion and the LargestPossibleRegion depending
-on how the filters are configured. (The RequestedRegion is set to process all
-the data, i.e., the LargestPossibleRegion, if it has not been set.) The
-UpdateOutputInformation() propagates upstream through the entire pipeline and
-terminates at the sources.
-
-During \code{UpdateOutputInformation()}, filters have a chance to override the
-\code{ProcessObject::GenerateOutputInformation()} method
-(\code{GenerateOutputInformation()} is invoked by
-\code{UpdateOutputInformation()}). The default behavior is for the
-\code{GenerateOutputInformation()} to copy the metadata describing the input
-to the output (via \code{DataObject::CopyInformation()}). Remember, information
-is metadata describing the output, such as the origin, spacing,
-and LargestPossibleRegion (i.e., largest possible size) of an image.
-
-A good example of this behavior is \doxygen{itk}{ShrinkImageFilter}. This filter
-takes an input image and shrinks it by some integral value. The result is that
-the spacing and LargestPossibleRegion of the output will be different to that 
-of the input. Thus, \code{GenerateOutputInformation()} is overloaded.
-
-\subsubsection{PropagateRequestedRegion()}
-\label{sec:PropagateRequestedRegion}
-\index{pipeline!PropagateRequestedRegion}
-
-The \code{PropagateRequestedRegion()} call propagates upstream to 
-satisfy a data request. In typical application this data request is usually the
-LargestPossibleRegion, but if streaming is necessary, or the user is
-interested in updating just a portion of the data, the RequestedRegion may be
-any valid region within the LargestPossibleRegion.
-
-The function of \code{PropagateRequestedRegion()} is, given a request
-for data (the amount is specified by RequestedRegion), propagate
-upstream configuring the filter's input and output process object's to
-the correct size. Eventually, this means configuring the
-BufferedRegion, that is the amount of data actually allocated.
-
-The reason for the buffered region is this: the output of a filter may be
-consumed by more than one downstream filter. If these consumers each request
-different amounts of input (say due to kernel requirements or other padding
-needs), then the upstream, generating filter produces the data to satisfy
-both consumers, that may mean it produces more data than one of the
-consumers needs.
-
-The \code{ProcessObject::PropagateRequestedRegion()} method invokes
-three methods that the filter developer may choose to overload.
-
-\begin{itemize}
-        \item \code{EnlargeOutputRequestedRegion(DataObject *output)} gives the
-        (filter) subclass a chance to indicate that it will provide more data
-        than required for the output. This can happen, for example, when a
-        source can only produce the whole output (i.e., the
-        LargestPossibleRegion).
-
-        \item \code{GenerateOutputRequestedRegion(DataObject *output)} gives 
-        the subclass a chance to define how to set the requested regions for 
-        each of its outputs, given this output's requested region.  The default
-        implementation is to make all the output requested regions the same.
-        A subclass may need to override this method if each output is a
-        different resolution. This method is only overridden if a filter has
-        multiple outputs.
-
-        \item \code{GenerateInputRequestedRegion()} gives the subclass a 
-        chance to
-        request a larger requested region on the inputs. This is necessary
-        when, for example, a filter requires more data at the ``internal''
-        boundaries to produce the boundary values - due to kernel operations
-        or other region boundary effects.
-\end{itemize}
-
-\doxygen{itk}{RGBGibbsPriorFilter} is an example of a filter that needs to
-invoke \code{EnlargeOutputRequestedRegion()}. The designer of this
-filter decided that the filter should operate on all the data. Note
-that a subtle interplay between this method and
-\code{GenerateInputRequestedRegion()} is occurring here. The default
-behavior of \code{GenerateInputRequestedRegion()} (at least for
-\doxygen{itk}{ImageToImageFilter}) is to set the input RequestedRegion to
-the output's ReqestedRegion. Hence, by overriding the method
-\code{EnlargeOutputRequestedRegion()} to set the output to the
-LargestPossibleRegion, effectively sets the input to this filter to
-the LargestPossibleRegion (and probably causing all upstream filters
-to process their LargestPossibleRegion as well. This means that the
-filter, and therefore the pipeline, does not stream. This could be
-fixed by reimplementing the filter with the notion of streaming built
-in to the algorithm.)
-
-\doxygen{itk}{GradientMagnitudeImageFilter} is an example of a filter that needs to
-invoke \code{GenerateInputRequestedRegion()}. It needs a larger input requested
-region because a kernel is required to compute the gradient at a pixel. Hence
-the input needs to be ``padded out'' so the filter has enough data to compute
-the gradient at each output pixel.
-
-\subsubsection{UpdateOutputData()}
-\label{sec:UpdateOutputData}
-\index{pipeline!UpdateOutputData}
-
-\code{UpdateOutputData()} is the third and final method as a result of the
-\code{Update()} method. The purpose of this method is to determine whether a
-particular filter needs to execute in order to bring its output up to date. (A
-filter executes when its \code{GenerateData()} method is invoked.) Filter
-execution occurs when a) the filter is modified as a result of modifying an
-instance variable; b) the input to the filter changes; c) the input data has
-been released; or d) an invalid RequestedRegion was set previously and the
-filter did not produce data. Filters execute in order in the downstream
-direction.  Once a filter executes, all filters downstream of it must also
-execute.
-
-\code{DataObject::UpdateOutputData()} is delegated to the DataObject's source
-(i.e., the ProcessObject that generated it) only if the DataObject needs to be
-updated. A comparison of modified time, pipeline time, release data flag, and
-valid requested region is made. If any one of these conditions indicate that
-the data needs regeneration, then the source's
-\code{ProcessObject::UpdateOutputData()} is invoked. These calls are made
-recursively up the pipeline until a source filter object is encountered, or the
-pipeline is determined to be up to date and valid. At this point, the recursion
-unrolls, and the execution of the filter proceeds. (This means that the output
-data is initialized, StartEvent is invoked, the filters \code{GenerateData()}
-is called, EndEvent is invoked, and input data to this filter may be released,
-if requested. In addition, this filter's InformationTime is updated to the
-current time.)
-
-The developer will never override \code{UpdateOutputData()}. The developer need
-only write the \code{GenerateData()} method (non-threaded) or
-\code{ThreadedGenerateData()} method. A discussion of threading follows in the
-next section.
-
-
-\section{Threaded Filter Execution}
-\label{sec:ThreadedFilterExecution}
-\index{pipeline!ThreadedFilterExecution}
-
-Filters that can process data in pieces can typically multi-process
-using the data parallel, shared memory implementation built into the
-pipeline execution process. To create a multithreaded filter, simply
-define and implement a \code{ThreadedGenerateData()} method. For
-example, a \doxygen{itk}{ImageToImageFilter} would create the method:
-
-\small
-\begin{verbatim}
-    void ThreadedGenerateData(const OutputImageRegionType& 
-                              outputRegionForThread, itk::ThreadIdType threadId)
-\end{verbatim}
-\normalsize
-
-The key to threading is to generate output for the output region given (as
-the first parameter in the argument list above). In ITK, this is simple to do
-because an output iterator can be created using the region provided. Hence
-the output can be iterated over, accessing the corresponding input pixels as
-necessary to compute the value of the output pixel.
-
-Multi-threading requires caution when performing I/O (including using
-\code{cout} or \code{cerr}) or invoking events. A safe practice is to allow 
-only thread id zero to perform I/O or generate events. (The thread id is
-passed as argument into \code{ThreadedGenerateData()}).  If more than one
-thread tries to write to the same place at the same time, the program can
-behave badly, and possibly even deadlock or crash.
-
-
-\section{Filter Conventions}
-\label{sec:FilterConventions}
-\index{pipeline!filter conventions}
-
-In order to fully participate in the ITK pipeline, filters are expected to
-follow certain conventions, and provide certain interfaces.  This section
-describes the minimum requirements for a filter to integrate into the ITK
-framework.
-
-The class declaration for a filter should include the macro
-\code{ITK\_EXPORT}, so that on certain platforms an export declaration can be
-included. 
-
-A filter should define public types for the class itself (\code{Self}) and
-its \code{Superclass}, and \code{const} and non-\code{const} smart pointers,
-thus:
-
-\begin{verbatim}
-  typedef ExampleImageFilter                Self;
-  typedef ImageToImageFilter<TImage,TImage> Superclass;
-  typedef SmartPointer<Self>                Pointer;
-  typedef SmartPointer<const Self>          ConstPointer;
-\end{verbatim}
-
-The \code{Pointer} type is particularly useful, as it is a smart pointer
-that will be used by all client code to hold a reference-counted
-instantiation of the filter. 
-
-Once the above types have been defined, you can use the following
-convenience macros, which permit your filter to participate in the object
-factory mechanism, and to be created using the canonical \code{::New()}:
-
-\begin{verbatim}
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);  
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(ExampleImageFilter, ImageToImageFilter);
-\end{verbatim}
-
-The default constructor should be \code{protected}, and provide sensible
-defaults (usually zero) for all parameters.  The copy constructor and
-assignment operator should be declared \code{private} and not implemented,
-to prevent instantiating the filter without the factory methods (above). 
-
-Finally, the template implementation code (in the \code{.hxx} file) should
-be included, bracketed by a test for manual instantiation, thus:
-
-\begin{verbatim}
-#ifndef ITK_MANUAL_INSTANTIATION
-#include "itkExampleFilter.hxx"
-#endif
-\end{verbatim}
-
-\subsection{Optional}
-\label{sec:FilterPrinting}
-\index{pipeline!printing a filter}
-
-A filter can be printed to an \code{std::ostream} (such as \code{std::cout})
-by implementing the following method:
-
-\begin{verbatim}
-  void PrintSelf( std::ostream& os, Indent indent ) const;
-\end{verbatim}
-
-\noindent and writing the name-value pairs of the filter parameters to the
-supplied output stream.  This is particularly useful for debugging.
-
-\subsection{Useful Macros}
-\label{sec:UsefulMacros}
-\index{pipeline!useful macros}
-
-Many convenience macros are provided by ITK, to simplify filter coding. 
-Some of these are described below:
-
-\begin{description}
-\item [itkStaticConstMacro] Declares a static variable of the given type,
-  with the specified initial value. 
-\item [itkGetMacro] Defines an accessor method for the specified scalar data
-  member.  The convention is for data members to have a prefix of
-  \code{m\_}. 
-\item [itkSetMacro] Defines a mutator method for the specified scalar data
-  member, of the supplied type.  This will automatically set the
-  \code{Modified} flag, so the filter stage will be executed on the next
-  \code{Update()}. 
-\item [itkBooleanMacro] Defines a pair of \code{OnFlag} and \code{OffFlag}
-  methods for a boolean variable \code{m\_Flag}.
-\item [itkGetObjectMacro, itkSetObjectMacro] Defines an accessor and mutator
-  for an ITK object.  The Get form returns a smart pointer to the object.
-\end{description}
-
-Much more useful information can be learned from browsing the source in
-\code{Code/Common/itkMacro.h} and for the \doxygen{itk}{Object} and
-\doxygen{itk}{LightObject} classes. 
-
-
-
-%
-% Section on how to write composite filters
-%
-\input{WriteACompositeFilter.tex}
-
-
-%
-% TODO: include useful tips from mailing list as flagged
-%
diff --git a/Documentation/SoftwareGuide/Latex/WriteAnApplication.tex b/Documentation/SoftwareGuide/Latex/WriteAnApplication.tex
deleted file mode 100644
index 0ff0c7c2ac..0000000000
--- a/Documentation/SoftwareGuide/Latex/WriteAnApplication.tex
+++ /dev/null
@@ -1,288 +0,0 @@
-\chapter{How to write an application}
-\label{sec:writeAnApplication}
-
-This chapter presents the different steps to write your own application.
-It also contains a description of the framework surrounding the applications.
-
-\section{Application design}
-\label{sec:appDesign}
-The first logical step is to define the role of your application:
-\begin{itemize}
-  \item What is the function of your application ? Try to draw a box diagram to 
-  describe the design of your application. Note that you don't have to worry 
-  about opening and saving image (or vector data) files, this is handled by the 
-  framework.
-  \item What variables (or data objects) must be exposed outside the application ?
-  Try to make a list of the inputs, outputs and parameters of your application.
-\end{itemize}
-Then you should have a good vision of your application pipeline. Depending on the 
-different filters used, the application can be streamed and threaded. The threading
-capabilities can be different between the filters so there is no overall threading 
-parameter (by default, each filter has its own threading settings). 
-
-It is a different story for streaming. Since the image writers are handled within 
-the framework and outside the reach of the developer, the default behaviour is to 
-use streaming. If one of the filters doesn't support streaming, it will enlarge 
-the requested output region to the largest possible region and the entire image 
-will be processed at once. As a result, the developer doesn't have to handle  
-streaming nor threading. However, there is a way to choose the number of streaming 
-divisions (see section \ref{sec:appParam}).
-
-\section{Architecture of the class}
-\label{sec:appArchitecture}
-Every application derive from the class \subdoxygen{otb}{Wrapper}{Application}. An 
-application can't be templated. It must contain the standard class typedefs and
-a call to the \code{OTB\_APPLICATION\_EXPORT} macro.
-
-You need also to define standard macros \doxygen{itk}{NewMacro} and
-\doxygen{itk}{TypeMacro}.
- 
-It is also mandatory to implement three methods in a new application:
-\begin{itemize}
-  \item \code{DoInit()}
-  \item \code{DoUpdateParameters()}
-  \item \code{DoExecute()}
-\end{itemize}
-
-\subsection{DoInit()}
-\label{sec:appDoInit}
-This method is called once, when the application is instantiated. It should 
-contain the following actions:
-\begin{itemize}
-  \item Set the name and the description of the application
-  \item Fill the documentation and give an example
-  \item Declare all the parameters
-  \item Define the documentation link:
-    \item for contrib application use SetDocLink("\textit{docLink}") function defined in \subdoxygen{otb}{Wrapper}{Application}
-    \item for official application use SetOfficialDocLink() function defined in \subdoxygen{otb}{Wrapper}{Application}
-\end{itemize}
-
-
-\subsection{DoUpdateParameters()}
-\label{sec:appDoUpdateParameters}
-This method is called after every modification of a parameter value. With the command 
-line launcher, it is called each time a parameter is loaded. With the Qt launcher, it
-is called each time a parameter field is modified. It can be used to maintain consistency and relationship
-between parameters (e.g. in ExtractROI: when changing the input image, maybe the ROI size 
-has to be updated).
-
-\subsection{DoExecute()}
-\label{sec:appDoExecute}
-This method contains the real action of the application. This is where the pipeline 
-must be set up. The application framework provides different methods to get a value 
-or an object associated to a parameter:
-\begin{itemize}
-  \item \code{GetParameterInt(key)} : get the integer value of a parameter
-  \item \code{GetParameterFloat(key)} : get the float value of a parameter
-  \item \code{GetParameterString(key)} : get the string value of a parameter
-  \item \code{GetParameterImage(key)} : get a pointer to an image object, read from the
-  file name given in input
-  \item \dots
-\end{itemize}
-
-where \code{key} refers to parameter key, defined using \code{AddParameter()} method in \code{DoInit()} method.
-
-Similar methods exist for binding a data object to an output parameter:
-\begin{itemize}
-  \item \code{SetParameterOutputImage(key,data)} : link the image object to the given output parameter
-  \item \code{SetParameterComplexOutputImage(key,data)} : link the complex image object to the given output parameter
-  \item \code{SetParameterOutputVectorData(key,data)} : link the vector data object to the given
-  output parameter
-\end{itemize}
-
-If possible, no filter update should be called inside this function. The update will be 
-automatically called afterwards : for every image or vector data output, a writer is 
-created and updated.
-
-\subsection{Parameters selection}
-\label{sec:appParam}
-In the new application framework, every input, output or parameter derive from 
-\subdoxygen{otb}{Wrapper}{Parameter}. The application engine supplies the following 
-types of parameters:
-\begin{itemize}
-  \item \code{ParameterType\_Bool} : parameter storing a boolean. 
-  \item \code{ParameterType\_Int} : parameter storing an integer.
-  \item \code{ParameterType\_Radius} : parameter storing a radius.
-  \item \code{ParameterType\_Float} : parameter storing a float.
-  \item \code{ParameterType\_String} : parameter storing character string.
-  \item \code{ParameterType\_StringList} : parameter storing a list of character string.
-  \item \code{ParameterType\_InputFilename} : parameter storing an input file name.
-  \item \code{ParameterType\_InputFilenameList} : parameter storing a list of input file names.
-  \item \code{ParameterType\_Directory} : parameter storing a folder name.
-  \item \code{ParameterType\_Group} : parameter storing children parameters.
-  \item \code{ParameterType\_Choice} : parameter storing a list of choices (doesn't support
-  multi-choice). It also allows to create specific sub-parameters for each available choice.
-  \item \code{ParameterType\_ListView} : parameter storing a list of choices (support 
-  multi-choice and single-choice).
-  \item \code{ParameterType\_InputImage} : parameter storing an input image.
-  \item \code{ParameterType\_InputImageList} : parameter storing a list of input image.
-  \item \code{ParameterType\_ComplexInputImage} : parameter storing a complex input image.
-  \item \code{ParameterType\_InputVectorData} : parameter storing input vector data.
-  \item \code{ParameterType\_InputVectorDataList} : parameter storing a list of input vector data.
-  \item \code{ParameterType\_InputProcessXML} : parameter storing an input XML file name.
-  \item \code{ParameterType\_OutputFilename} : parameter storing an output file name.
-  \item \code{ParameterType\_OutputImage} : parameter storing an output image.
-  \item \code{ParameterType\_ComplexOutputImage} : parameter storing a complex output image.
-  \item \code{ParameterType\_OutputVectorData} : parameter storing an output vector data.
-  \item \code{ParameterType\_OutputProcessXML} : parameter storing an output XML file name.
-  \item \code{ParameterType\_RAM} : parameter storing the maximum amount of RAM to be used.
-\end{itemize}
-\textbf{Note :} The former \code{ParameterType\_Empty} is \textbf{deprecated} and shall be replaced by \code{ParameterType\_Bool}.
-
-\subsection{Parameters description}
-
-Each created parameter has a unique key and several boolean flags to represent its state. These flags
-can be used to set a parameter optional or test if the user has modified the parameter value. The parameters
-are created in the \code{DoInit()} method, then the framework will set their value (either by parsing the 
-command line or reading the graphical user interface). The \code{DoExecute()} method is called when all 
-mandatory parameters have been given a value, which can be obtained with "Get" methods defined in 
-\subdoxygen{otb}{Wrapper}{Application}. Parameters are set mandatory (or not) using \code{MandatoryOn(key)} method (\code{MandatoryOff(key)}).
-
-Some functions are specific to numeric parameters, such as \code{SetMinimumParameterIntValue(key,value)}
-or \code{SetMaximumParameterFloatValue(key,value)}. By default, numeric parameters are treated as inputs.
-If your application outputs a number, you can use a numeric parameter and change its role by calling 
-\code{SetParameterRole(key,Role\_Output)}.
-
-The input types \code{InputImage}, \code{InputImageList}, \code{ComplexInputImage}, \code{InputVectorData}
-and \code{InputVectorDataList} store the name of the files to load, but they also encapsulate the 
-readers needed to produce the input data.
-
-The output types \code{OutputImage}, \code{ComplexOutputImage} and \code{OutputVectorData} store the 
-name of the files to write, but they also encapsulate the corresponding writers.
-
-\section{Composite application}
-
-The application framework has been extended to allow the implementation of composite applications :
-\textbf{applications that use other applications}. The concept is simple : you have two applications A and B
-that you want to chain in order to build a third application C. Rather than writing C by copying
-the code of A and B, you would like to re-use applications A and B. This plain example will be
-re-used in this section for explanations.
-
-A dedicated class \subdoxygen{otb}{Wrapper}{CompositeApplication} has been added to create such applications.
-If you derive this class to implement application C, you will be able to create a composite application.
-
-\subsection{Creating internal applications}
-
-Like with standard applications, you have to write a \code{DoInit()} function. In this function,
-you should first clean any internal application with the function \code{ClearApplications()}
-(the \code{DoInit()} function is called twice in some cases). Then you can
-instantiate the internal applications that you want to use (for instance A and B).
-The function \code{AddApplication()} will do that, based on :
-\begin{itemize}
-\item The application type (i.e. its official name, such as ExtractROI, BandMath, \dots)
-\item An identifier : like with parameter keys, you have to specify an identifier
-to refer to this internal application. Use the same naming conventions as parameters.
-\item A description : give a small description of the role of this internal application.
-\end{itemize}
-
-Using the function \code{GetInternalApplication()}, you can get a pointer to the
-internal application corresponding to a given identifier.
-
-In the example given in introduction, we assume that :
-\begin{itemize}
-\item An internal application of type A has been added with identifier \code{a}
-\item An internal application of type B has been added with identifier \code{b}
-\end{itemize}
-
-\subsection{Connecting parameters}
-
-Once you have internal applications, you may want to setup their parameters. There
-are typically 3 cases.
-
-You may want to expose a parameter of an internal application as a parameter of
-your composite application. Let say you want to expose parameter \code{io.in} from application
-\code{a} into your composite application C with the key \code{input}. You can call the function :
-
-\code{ShareParameter("input","a.io.in")}
-
-As a result, the parameters \code{input} in application C and \code{io.in} in application \code{a}
-will point to the same object. Under the two parameter keys, there is a unique value.
-These two parameters can be considered as synchronized.
-
-This leads to the second case : you may want to synchronize two parameters from internal
-applications. Let say you want to synchronize parameter \code{field} from application
-\code{a} with parameter \code{fname} from application \code{b}. You can call the function :
-
-\code{Connect("a.field","b.fname")}
-
-Note that the functions \code{ShareParameter()} and \code{Connect()} :
-\begin{itemize}
-\item Use the same syntax to access internal parameters ("application identifier"
-dot "parameter key").
-\item Shall be used in the DoInit() function, after the internal applications
-have been added.
-\end{itemize}
-
-In this synchronization, the two parameters should have the same type, or have a
-similar interface, such as input and output filenames that are both accessed using
-\code{GetParameterString()} and \code{SetParameterString()}.
-
-This type of connection is a transition to the third case : you may want to connect
-the output of an internal application to the input of an other internal application.
-Here the difficulty is that the two parameters to connect probably have different
-types. Let say you want to connect parameter \code{a.out} to parameter \code{b.in}.
-The "Connect()" function may work in favorable cases (see previous paragraph),
-but for images, you have two options :
-\begin{itemize}
-\item Explicitly copy the image pointer from the output image parameter in the input
-image parameter (with functions \code{SetParameterInputImage()} and
-\code{GetParameterOutputImage()}). It will connect the pipelines in applications
-A and B, to form an "in-memory" connexion. This has to be done between the calls
-to \code{DoExecute()} of application A and B.
-\item Use a temporary filename to store the output image \code{a.out} and read it
-with \code{b.in}. In this case, you have to manually call the writers of parameter
-\code{a.out}.
-\end{itemize}
-
-At the moment, the in-memory connexion of vector data parameters is not supported.
-
-\subsection{Orchestration}
-
-In the \code{DoUpdateParameters()} of your composite application, you can call
-the same function on an internal application with the function \code{UpdateInternalParameters()}.
-This is needed only if your internal applications have a specific behaviour during
-parameter update.
-
-In the \code{DoExecute()} of your composite application, you have to call \code{ExecuteInternal()}
-in order to launch each internal application. The order should be compatible with
-image parameter connexions. If you want to do "in-memory" connexions, you can do it between
-two calls to \code{ExecuteInternal()}, for instance :
-
-\begin{cppcode}
-ExecuteInternal("a");
-GetInternalApplication("b")->SetParameterInputImage("in",
-  GetInternalApplication("a")->GetParameterOutputImage("out"));
-ExecuteInternal("b");
-\end{cppcode}
-
-The application BundleToPerfectSensor is a simple example of composite applications.
-For a more complex example, you can check the application TrainImagesClassifier.
-
-\section{Compile your application}
-
-In order to compile your application you must call the macro \code{OTB\_CREATE\_APPLICATION} in the \emph{CMakelists.txt} file. 
-This macro generates the lib \emph{otbapp\_XXX.so}, in (OTB\_BINARY\_DIR/lib/otb/applications), where \emph{XXX} refers to the class name.
-
-\section{Execute your application}
-
-There are different ways to launch applicatons :
-
-\begin{description}
-\item[CommandLine :] The command line option is invoked using \emph{otbApplicationLauncherCommandLine} executable followed by the classname, the application dir and the application parameters.
-\item[QT :] Application can be encapsuled in Qt framework using \emph{otbApplicationLauncherQt} executable followed by the classname and the application dir.
-\item[Python :] A Python wrapper is also available.
-\end{description}
-
-
-\section{Testing your application}
-\label{sec:appTesting}
-It is possible to write application tests. They are quite similar to filters tests.
-The macro \code{OTB\_TEST\_APPLICATION} makes it easy to define a new test.
-
-
-\section{Application Example}
-\label{sec:ApplicationExample}
-\ifitkFullVersion
-\input{ApplicationExample.tex}
-\fi
-
diff --git a/Documentation/SoftwareGuide/Latex/WriteModules.tex b/Documentation/SoftwareGuide/Latex/WriteModules.tex
deleted file mode 100644
index accf14c369..0000000000
--- a/Documentation/SoftwareGuide/Latex/WriteModules.tex
+++ /dev/null
@@ -1,294 +0,0 @@
-\chapter{Adding New Modules}
-\label{chapter:newModules}
-
-This chapter is concerned with the creation of new modules.
-The following sections give precise instructions about :
-\begin{itemize}
-	\item the organization of your directories
-	\item the files you need to include
-	\item what they must contain
-	\item ...
-\end{itemize}
-
-\section{How to Write a Module}
-\label{sec:writemodule}
-
-There is a template of OTB remote module which help you  start developing you're
-remote module: \href{https://gitlab.orfeo-toolbox.org/remote_modules/remote-module-template}{External Module Template}
-
-Each module is made of different components, which are described in the following sections.
-
-\section{The otb-module.cmake file}
-
-This file is mandatory. It follows the CMake syntax, and has two purposes:
-
-\begin{itemize}
-       \item Declare dependencies to other modules,
-       \item Provide a short description of the module purpose.
-\end{itemize}
-
-These purposes are fulfilled by a single CMake Macro call:
-
-\begin{verbatim}
-otb_module(TheModuleName DEPENDS OTBModule1 OTBModule2 ... OTBModuleN DESCRIPTION "A description string")
-\end{verbatim}
-
-\textbf{Note}: You can use the keyword TEST\textunderscore DEPENDS to declare module dependencies that only applies to the tests.
-
-\section{The CMakeLists.txt file}
-
-The CMakeLists.txt file is mandatory. It contains only a few things.
-First, it declares a new CMake project with the name of the module.
-
-\begin{verbatim}
-project(TheModuleName)
-\end{verbatim}
-
-Second, if the module contain a library (see src folder section below), it initializes the TheModuleName\textunderscore LIBRARIES CMake variable (if your module only contains headers or template code, skip this line):
-
-\begin{verbatim}
-set(TheModuleName_LIBRARIES OTBTheModuleName)
-\end{verbatim}
-
-You can build your remote modules inside the OTB source tree by copying your
-source inside the directory \textit{Module/Remote} or against an existing OTB
-build tree (note that it does not work with an install version of OTB).
-
-The configuration below will handle both cases and take care of all the CMake
-plumbing of the module:
-
-\begin{verbatim}
-  if(NOT OTB_SOURCE_DIR)
-    find_package(OTB REQUIRED)
-    list(APPEND CMAKE_MODULE_PATH ${OTB_CMAKE_DIR})
-    include(OTBModuleExternal)
-  else()
-    otb_module_impl()
-  endif()
-\end{verbatim}
-
-The overall file should look like this:
-
-\begin{verbatim}
-cmake_minimum_required(VERSION 2.8.9)
-project(TheModuleName)
-set(ExternalTemplate_LIBRARIES OTBTheModuleName)
-
-if(NOT OTB_SOURCE_DIR)
-    find_package(OTB REQUIRED)
-    list(APPEND CMAKE_MODULE_PATH ${OTB_CMAKE_DIR})
-    include(OTBModuleExternal)
-  else()
-    otb_module_impl()
-  endif()
-\end{verbatim}
-
-\section{The include folder}
-
-The include folder will contain all your headers (*.h files) and template method boy files (*.hxx or *.hxx). It does not require any additional file (in particular, no CMakeLists.txt file is required).
-
-\section{The src folder }
-
-The src folder contains the internal implementation of your module :
-
-\begin{itemize}
-       \item  It typically contains cxx source files that will be compiled into a library.
-       \item  It can contain header files for classes used only within the implementation files of your module. Any header file present in the src folder will not be installed, and will not be available to other modules depending on your module.
-\end{itemize}
-
-If your modules is made of template only code, you do not need a src folder at all.
-
-If present, the src folder requires a CMakeLists.txt file.
-
-The first part of the CMakeLists.txt file is classical, as it builds the library and links it:
-
-\begin{verbatim}
-set(OTBTheModuleName_SRC
-    sourceFile1.cxx
-    sourceFile2.cxx
-    sourceFile3.cxx
-    ...
-    sourceFileN.cxx)
-
-add_library(OTBTheModuleName ${OTBTheModuleName_SRC})
-
-target_link_libraries(OTBTheModuleName ${OTBModule1_LIBRARIES} ${OTBModule2_LIBRARIES} ... ${OTBModuleN_LIBRARIES})
-\end{verbatim}
-
-\textbf{Notes}:
-
-\begin{itemize}
-       \item  Library name should match the one declared in the root CMakeLists.txt when setting CMake variable TheModuleName\textunderscore LIBRARIES,
-       \item  Linked libraries should match the dependencies of your module declared in the root otb-module.cmake file.
-\end{itemize}
-
-The last line of CMake code takes care of installation instructions:
-\begin{verbatim}
-otb_module_target(TBTheModuleName)
-\end{verbatim}
-
-The overall CMakeLists.txt file should look like:
-
-\begin{verbatim}
-set(OTBTheModuleName_SRC
-    sourceFile1.cxx
-    sourceFile2.cxx
-    sourceFile3.cxx
-    ...
-    sourceFileN.cxx)
-
-add_library(OTBTheModuleName ${OTBTheModuleName_SRC})
-
-target_link_libraries(OTBTheModuleName ${OTBModule1_LIBRARIES} ${OTBModule2_LIBRARIES} ... ${OTBModuleN_LIBRARIES})
-
-otb_module_target(TBTheModuleName)
-\end{verbatim}
-
-\section{The app folder}
-
-The app folder contains the code of applications shipped with your module. If your module has no application, you do not need the app folder.
-
-\textbf{Notes}: If your module contains application (and an app folder), do not forget to add the ApplicationEngine in the dependencies listed in the otb-module.cmake file.
-
-In addition to the applications source code, the app folder should contain a CMakeLists.txt file as follows.
-
-For each application, a single call otb\textunderscore create\textunderscore application is required:
-
-\begin{verbatim}
-otb_create_application(
- NAME           TheModuleApplication1
- SOURCES        TheModuleApplication1.cxx
- LINK_LIBRARIES ${OTBModule1_LIBRARIES} ${OTBModule2_LIBRARIES} ... ${OTBModuleN_LIBRARIES})
-
-\end{verbatim}
-
-\section{The test folder}
-
-This folder contains tests of the module. If your module has no test in it (which is not recommended, you do not need it).
-
-The test folder should contain the source files of tests, as well as a CMakeLists.txt file. This file will contain the following.
-
-First, indicate that this folder contains tests.
-
-\begin{verbatim}
-otb_module_test()
-\end{verbatim}
-
-Then, build the test driver:
-
-\begin{verbatim}
-set(OTBTheModuleNameTests
-    testFile1.cxx
-    testFile2.cxx
-    ...
-    testFileN.cxx)
-
-add_executable(otbTheModuleNameTestDriver ${OTBTheModuleNameTests})
-
-target_link_libraries(otbTheModuleNameTestDriver ${OTBTheModuleName-Test_LIBRARIES})
-
-otb_module_target_label(otbTheModuleNameTestDriver)
-\end{verbatim}
-
-Finally, you can add your tests:
-
-\begin{verbatim}
-otb_add_test(NAME nameOfTheTest COMMAND otbTheModuleNameTestDriver
-             --compare-image ${EPSILON_8} ... # baseline comparison if needed
-             nameOfTheTestFunction
-             testParameters)
-\end{verbatim}
-
-If your module contains one or more application in the app folder, you should
-also write tests for them, in the test folder. Running an application test is
-easily done with the helper macro otb\textunderscore test\textunderscore
-application:
-
-\begin{verbatim}
-otb_test_application(NAME   nameofApplication1Test1
-                      APP  TheModuleApplication1
-                      OPTIONS -in1 ${INPUTDATA}/input1.tif
-                              -in2 ${INPUTDATA}/input2.tif
-                              -out ${TEMP}/nameofApplication1Test1_result.tif
-                      VALID   --compare-image ${EPSILON_8}
-                              ${BASELINE}/nameofApplication1Test1_result.tif
-                              ${TEMP}/nameofApplication1Test1_result.tif)
-\end{verbatim}
-
-ToDo: Add instructions for test naming and input/baseline data inclusion.
-
-You overall CMakeLists.txt file should look like:
-
-\begin{verbatim}
-otb_module_test()
-
-set(OTBTheModuleNameTests
-    testFile1.cxx
-    testFile2.cxx
-    ...
-    testFileN.cxx)
-
-add_executable(otbTheModuleNameTestDriver ${OTBTheModuleNameTests})
-
-target_link_libraries(otbTheModuleNameTestDriver ${OTBTheModuleName-Test_LIBRARIES})
-
-otb_module_target_label(otbTheModuleNameTestDriver)
-
-otb_add_test(NAME nameOfTheTest COMMAND otbTheModuleNameTestDriver
-             --compare-image ${EPSILON_8} ... # baseline comparison if needed
-             nameOfTheTestFunction
-             testParameters)
-\end{verbatim}
-
-\section{Including a remote module in OTB}
-\begin{itemize}
-       \item Local build of a remote module
-\end{itemize}
-
-Your remote module can be build inside the OTB source tree or outside as a
-external CMake project with an existing OTB. Please note in that case
-that you'll have to set OTB\textunderscore DIR CMake option.
-
-If OTB\textunderscore DIR is an OTB build tree, there are two ways of compiling:
-\begin{itemize}
-  \item Build as a module, in which case build files will be written
-    to the OTB build tree as other modules. Main benefit is that this
-    will enrich the current OTB build with your new module, but you
-    need to have write access to the build directory.
-  \item Build as a standalone CMake project, in which case build files
-    will remain in the module build folder. This build is fully
-    independent from the build (or install) directory, but the module
-    will not be recognized as an OTB module (still you will be able to
-    use its binaries and libraries).
-\end{itemize}
-
-This behaviour is controlled by the OTB\textunderscore BUILD\textunderscore MODULE\textunderscore AS\textunderscore STANDALONE, which is OFF by default (hence first behaviour).
-
-Note that when dealing with an installed OTB, only the second behaviour (build as standalone) is available.
-
-Optionally, you can build your new remote module inside the OTB source tree by simply copy
-the folder containing the module component to Modules/Remote, then run CMake
-configuration. you should see a new CMake option named MODULE\textunderscore
-TheModuleName. Simply turn this option to ON, and finish CMake
-configuration. Your module will be built with the rest of the OTB project.
-
-\begin{itemize}
-       \item  Sharing your remote module
-\end{itemize}
-
-To make your remote module available to others when building OTB, you should
-provide a CMake file named TheModuleName.remote.cmake file for inclusion in the
-Modules/Remote folder in OTB source tree.
-
-This file should contain the following:
-
-\begin{verbatim}
-#Contact: Author name <author email address>
-
-otb_fetch_module(TheModuleName
-  "A description of the module, to appear during CMake configuration step"
-  GIT\textunderscore REPOSITORY http\textunderscore link\textunderscore to\textunderscore a\textunderscore git\textunderscore repository\textunderscore hosting\textunderscore the\textunderscore module
-  GIT\textunderscore TAG the\textunderscore git\textunderscore revision\textunderscore to\textunderscore checkout
-  )
-\end{verbatim}
-This file should be provided along with your remote module inclusion proposal email to the otb-developers list. Please refer to the contributors guidelines for more information (next section).
-- 
GitLab