%\begin{figure}[H]
  % Define the layers to draw the diagram
  \pgfdeclarelayer{tomgombackground}
  \pgfdeclarelayer{tombackground}
  \pgfsetlayers{tomgombackground,tombackground,main}

  % Define a new shape: page with a folded corner 
  \makeatletter
  \pgfdeclareshape{flippedpage}{
    \inheritsavedanchors[from=rectangle] % this is nearly a rectangle
    \inheritanchorborder[from=rectangle]
    \inheritanchor[from=rectangle]{center}
    \inheritanchor[from=rectangle]{north}
    \inheritanchor[from=rectangle]{south}
    \inheritanchor[from=rectangle]{west}
    \inheritanchor[from=rectangle]{east}
    % ... and possibly more
    \backgroundpath{% this is new
    % store lower left in xa/ya and upper right in xb/yb
    \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
    \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
    % compute corner of ``flipped page''
    \pgf@xc=\pgf@xb \advance\pgf@xc by-5pt % this should be a parameter
    \pgf@yc=\pgf@yb \advance\pgf@yc by-5pt
    % diagonal path of the corner 
    \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
    \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
    \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yb}}
    \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}
    \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
    \pgfpathclose
    % add little corner
    \pgfpathmoveto{\pgfpoint{\pgf@xc}{\pgf@yb}}
    \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
    \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}
    \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
    }
  }

  % Define block styles
  \tikzstyle{compiler}=[draw, fill=blue!20, text width=6em, text centered, minimum height=2.5em, rounded corners]
  %\tikzstyle{compiler2}=[diamond, aspect=2, draw, fill=blue!20, text centered, rounded corners=1]
  \tikzstyle{compiler2}=[diamond, aspect=2, draw, text centered, rounded
  corners=1, text width=5.8em]
  %\tikzstyle{code}=[draw,shape=flippedpage,text width=2.7em, text centered, minimum height=3.7em,fill=white]
  \tikzstyle{code}=[draw,shape=flippedpage,text width=3em, text centered,
  minimum height=4.2em,fill=white]
  \tikzstyle{texttitle}=[fill=white, rounded corners, draw=black!50, dashed]
  \tikzstyle{background}=[fill=yellow!20, rounded corners, draw=black!50, dashed]

%  \begin{center}
  %\begin{tikzpicture}[>=latex, node distance=3cm, on grid, auto]
  \begin{tikzpicture}[>=latex, on grid, auto, node distance=2.3cm]

    % Draw diagram elements
    \node (tomcomp) [compiler2] {\figcode{\textbf{Compilateur {\tom}}}};
    \node (tomcode) [code, left of=tomcomp,xshift=-1.0cm] {\figcode{Tom \\ + \\ Java}};

    \node (mapping) [code, above of=tomcomp] {\figcode{Ancrages algébriques}};
    \node (gomcomp) [compiler2, above of=mapping] {\figcode{\textbf{{\gom}}}};
    \node (gomsig) [code, left of=gomcomp,xshift=-1.0cm] {\figcode{Signature} \\ \figcode{Gom}};
    \node (datastruct) [code, right of=gomcomp,xshift=1.0cm] {\figcode{Structures \\ de \\ données \\ Java}};
    
    \node (emfmapping) [code, below of=tomcomp] {\figcode{Ancrages algébriques}};
    \node (emf) [compiler2, below of=emfmapping] {\figcode{\textbf{{\emf}}}};

%%%I should probably make a new shape
    \node (ecore) [left of=emf,xshift=-1.5cm,text width=3em, text centered] {\figcode{MM .ecore}};

\node (mm1)[rectangle, minimum width=0.5cm, minimum height=0.5cm,draw,left of=ecore,yshift=0.8cm,xshift=2.2cm]{};
\node (mm2)[rectangle, minimum width=0.5cm, minimum height=0.5cm,draw,below of=mm1,yshift=1.4cm,xshift=-0.6cm]{};
\node (mm3)[rectangle, minimum width=0.5cm, minimum height=0.5cm,draw,right of=mm1,yshift=-0.3cm,xshift=-1.5cm]{};
\path[draw] (mm1) -- (mm2);
\path[draw] (mm1) -- (mm3);
%%%%

    %\node (tomemf) [compiler2, below of=emfmapping] {\figcode{\textbf{{\tomemf}}}};
    \node (tomemf) [compiler2, right of=emfmapping, xshift=1.0cm] {\figcode{\textbf{{\tomemf}}}};
    %\node (emfstruct) [code, left of=tomemf,xshift=-1.0cm] {\figcode{Java EMF (MM)}};
    \node (emfstruct) [code, below of=tomemf] {\figcode{Java EMF (MM)}};

    \node (javacode) [code, right of=tomcomp,xshift=1.0cm] {\figcode{Code Java}};
    \node (javacomp) [compiler2, right of=javacode,xshift=0.5cm] {\figcode{\textbf{Compilateur {\java}}}};
    \node (bytecode) [code, right of=javacomp,xshift=0.5cm] {\figcode{110010}\\\figcode{101110}\\\figcode{010100}};
    \path[->] (javacomp) edge (bytecode);

    % Draw arrows between elements
    \path[->] (gomsig) edge (gomcomp);
    \path[->] (gomcomp) edge (mapping);
    \path[->] (mapping) edge (tomcomp);
    \path[->] (tomemf) edge (emfmapping);
    \path[->] (emfmapping) edge (tomcomp);
    \path[->] (gomcomp.east) edge (datastruct);
    %\path [draw, ->] (datastruct.east) -- ++(3,0) -- node [below] {} (javacomp);
    \draw[->] (datastruct) -- ++(2.8,0) -- (javacomp);
    \path[->] (emfstruct) edge (tomemf);
    \path[->] (tomcode) edge (tomcomp);
    \path[->] (tomcomp) edge (javacode);
    \path[->] (javacode) edge (javacomp);
    \path[->] (emf) edge (emfstruct);
    \path[->] (ecore) edge (emf);
    %\draw[->] (emfstruct) -- ++(0,-1) -- ++(10.5,0) -- (javacomp);
    \draw[->] (emfstruct) -- ++(2.8,0) -- (javacomp);

  \end{tikzpicture}
%  \end{center}
%  \caption{Diagramme d'activité décrivant le processus de compilation d'un programme {\tom}}
%\label{fig:wholeTomProcess}
%\end{figure}
