#ifndef  NBGENE_H_SEEN  
#define  NBGENE_H_SEEN  

  
#ifdef __cplusplus

#ifdef  FLAG_MAIN_NBSREAD
#define  EXTERN 
#else
#define  EXTERN  extern
#endif

#else

#define  EXTERN 

#endif

/* structure de definition du montecarlo */
struct  montecarlo {
  /* flag montecarlo et tailles finies */
  int montecar,Taille_Finie,Blending;
  /* initialisation aleatoire */
  int_4 iseed1,iseed2,iseed3;
  /* nbre engendre, nbre a engendrer par etoile */
  int NGene,NGenStar;
  /* nbre points amplifies, nombre points amplifies avec taille finie */
  int NPoints_ampli,NPoints_ampli_tf,Net_ampli_tf;
  /* ampli maxi ponctuelle, tf, coupure en amplification (apres=1.), blend */
  float A0MaxPt,A0Max,Usu0_Cut,A0Max_blend[NCOULMX];
  /* u0 initialisation, bornes min et max, simule */
  float U0SimI,U0MinI,U0MaxI,U0Sim;
  float (*TireU0)(float x);
  /* t0 initialisation, bornes min et max, simule */
  double T0SimI,T0MaxI,T0MinI,T0Sim;
  double T0MaxI_eff,T0MinI_eff;
  float (*TireT0)(float x);
  /* tau initialisation, bornes min et max, simule (cas ponctuel) */
  float TauSimI,TauMinI,TauMaxI,TauSim;
  float (*TireTau)(float x);
  /* U initialisation, bornes min et max, simule (cas ponctuel) */
  float USimI,UMinI,UMaxI,USim;
  float (*TireU)(float x);
  /* cas du blending 1ere et 2sd etoiles */
     /* fct de generation des parametres du blending */
  void (*Get_Par_Blending)(void);
     /* flux, coeff de blending et calib etoile principale */
  float fmc1[NCOULMX],coeff_Arec1[NCOULMX];
  STARCALU starcal1;
     /* flux, coeff de blending et calib etoile secondaire */
  float fmc2[NCOULMX],coeff_Arec2[NCOULMX];
  STARCALU starcal2;
     /* type (SP ou GR) des etoiles du couple blending */
  int type1,type2;
};
typedef struct montecarlo MONTECARLO;

EXTERN MONTECARLO mc;
EXTERN int ANNEE_OBS;

#ifdef __cplusplus
extern "C" {
#endif
int Give_Annee_Obs(int lp);
float Rayon_SP_Th(float magv);
void AMPLML(int io);
double ampli_ponct(double u);
double ampli_tf(double u,double U,int Nseq);
double u0_ponct(double A);
double u0_tf(double A,double U,double prec,int *niter,double *Afinal);
#ifdef __cplusplus
}
#endif

#endif
