Overblog Suivre ce blog
Administration Créer mon blog

Convertir un pdf en TIF pour JACS

25 Mai 2010 , Rédigé par Roger Bunivot

JACS demande lors de la soumission des articles un 'TOC' qui est un dessin au format TIF avec des dimensions et une résolution bien précisée:

 

"The TOC graphic may be no wider than 9.0 cm and no taller than 3.5 cm. The
graphic will be reproduced at 100% of the submission size. A surrounding margin will
be added to this width and height during Journal production."

 

Pour réaliser la figure, on peut utiliser openoffice Draw, (pour choisir la taille de la figure,

menu format, puis page).

créer un pdf, puis le convertir à l'aide de imagemagick en tiff à la bonne résolution:

 

convert -density 300 -units PixelsPerInch -depth 8 toc.pdf toc.tiff

             pour controler

  identify -format "%x x %y" toc.tiff

Lire la suite

Une courbe d'iso-intensité avec matplotlib (chapitre 4)

2 Mai 2010 , Rédigé par Roger Bunivot Publié dans #source

Extraire une ligne ou une colonne

Après avoir créé une figure où l'on a tracé des courbes d'iso-intensité, (contours plot), puis avoir ajouté la possibilité de varier les contours intéractivement, Nous allons extraire des lignes ou des colonnes.


  Si l'on a besoin de comparer deux courbes d'iso-intensité il est souvent plus facile de les comparer ligne par ligne ou colonne par colonne.

  On peut aussi vouloir extraire des lignes ou des colonnes afin d'appliquer une correction aux données. Par exemple pour les spectres de résonance magnétique nulcéaire (RMN) il commun d'appliquer une correction de phase.


 On va dans un premier temps activer les boutons "radio" de gauche, "no", "extract", "phase".

Le bouton "no" va permettre de désactiver l'extraction des lignes et des colonnes.

Le bouton "phase" va permettre d'extraire une, deux ou trois  ligne(s) ou colonne de les corriger, puis d'appliquer la correction sur la courbe d'iso-intensitée.

 

Tout d'abord on va définir une fonction qui permet de choisir entre ces trois options.

 

param ={}

def select(label):

  # définir une variable globale qui permettra de rendre le graphique actif.

  global cird

  # definition d'un compteur (pourquoi ne pas utiliser une liste :-)

   # a chaque appel de la fonction select on l'incrémente
  param['compteur'] = param['compteur'] + 1

  # on test ensuite quel bouton est activé et le stock dans la liste
  if label == 'extract':
    param['plot1D'] = label
  elif label == 'phase':
    param['plot1D'] = label
  elif label == 'no':
    param['plot1D'] = label

    # on déconnecte la figure des boutons de la souris
    fig_.canvas.mpl_disconnect(cird)

    # et on réinitialise le compteur
    param['compteur'] = 0

  # on connecte la figure aux boutons de la souris
  if param['compteur'] >= 1:
    cird = fig_.canvas.mpl_connect('button_press_event', onclick)
  return

# initialisation du compteur

param['compteur'] = 0

# appel de la fonction "select" lors du click sur le bouton radio

radio.on_clicked(select)

Lire la suite

Une courbe d'iso-intensité avec matplotlib (chapitre 3)

1 Mai 2010 , Rédigé par Roger Bunivot

Activer le bouton reset

suite des épisodes précédents, ou l'on avait créé une figure, avec des courbes d'iso-intensité, des curseurs, et des boutons. Au chapitre 2 on avait activé les curseurs afin de changer intérativement les niveaux des contours.

Le but ici va être d'activé le bouton reset afin de retrouver les valeurs initiales des contours.

pour cela on va définir la fonction qui va être appelé par le bouton.

 

#definition de la fonction

def reset(event):

  # et on reset les valeurs des cursors
  sct.reset()
  sct_factor.reset()
  sct_max.reset()

#puis on appelle la fonction au click

button.on_clicked(reset)


La question qui vient alors à l'esprit est quels sont ces valeurs?

Revenons sur la définition des curseurs:

par exemple celui définissant les contours:


sct = Slider(ax_ct, 'nb contours', 1, 20, valinit=6)

 

on fait appelle à Slider qui prend au moins 5 arguments:

ax_ct                    définit la position

'nb contours'        définit le texte du curseur

1                            valeur minimale du curseur

20                          valeur maximale

valinit=6                valeur initiale.

 

attention dans l'exemple présenté on a 6 contours positifs et 6 négatifs.

Lire la suite

Une courbe d'iso-intensité avec matplotlib (chapitre 2)

1 Mai 2010 , Rédigé par Roger Bunivot Publié dans #source

Changer intéractivement les contours:

Après avoir créé la figure, il est temps d'attribuer des actions aux boutons définis précédemment


Commençont par définir une fonction pour changer intéractivement les contours.

La solution la plus simple et efficace que j'ai trouvé pour choisir les contours consiste à choisir la valeur du contour maximum (bigS), le nombre de contours (ct_tmpS) affiché ainsi que l'écart entre les contours (factorS).

 

#definition de la fonction update qui permet de changer les contours

#la fonction prend un argument (les valeurs des curseurs).

 

def update(val):
  # attention en python les indentations (espace en début de ligne)
  # définisse les blocs, comme ici une fonction.
  # récupérer les valeurs des curseurs (sliders)
  # un coefficient pour le choix du contour maximum
  bigS = float(sct_max.val)
  # le nombre de contours
  ct_tmpS = int(sct.val)
  # choix de l'écart entre les coutours
  factorS = float(sct_factor.val)
  # attention on peut avoir des contours positif ou négatifs
  # on va considérer que l'on a autant de chaque et donc ne définir un nombre
  #qui sera la moitié du nombre total.
  # déterminer le maximum:
  # le maximum est-il positif?
  if np.abs(Z.max()) > np.abs(Z.min()):
      val_ct = np.abs(Z.max())
  else:
      val_ct = np.abs(Z.min())
  # initialisation d'une liste de contours:
  mes_contours = []
  # afficher le maximum n'affichera qu'un point pas très joli
  val_tmp = val_ct * bigS
  # creation des contours
  for i in range(ct_tmpS):
    mes_contours.append(val_tmp)
    mes_contours.append(val_tmp*-1)
    val_tmp = val_tmp/factorS
  # je ne pense pas que ce soit important mais c'est plus joli
  #si on range les contours dans l'ordre
  mes_contours.sort()

  #Si on a fait un zoom et que l'on veut le garder

  #on récupère les limites du graphique

  X_zoom = ax.get_xlim()
  Y_zoom = ax.get_ylim()

  # effacer le graph pour tracer le nouveau avec les nouvelles valeurs

  ax.clear()
  CS = ax.contour(X,Y,Z, mes_contours)

  #Retrouver le zoom
  ax.set_xlim(X_zoom)
  ax.set_ylim(Y_zoom)

  plt.draw()
# la fonction est terminée, maintenant il faut relier les boutons à la fonction.
sct.on_changed(update)
sct_factor.on_changed(update)
sct_max.on_changed(update)

 

Normalement le copier coller devrait fonctionné, bien sur il est nécessaire d'exécuter le code de création de la figure d'abord.

 

En jouant sur les curseurs on il est alors facile de choisir le contour que l'on veut:

contour_plot2.png

Remarque,  dans ce script on retrace entièrement le contour plot, on ne fait pas qu'un changement des valeurs des contours. Pour les courbes du type y =plot(data), il est possible de ne changer que les de y. On en verra une utilisation plus tard.

Il reste a attribué les boutons set levels et reset, ce sera pour une prochaine fois.

Lire la suite