// Ce code source est rgi par la licence CeCILL V2.1 soumise au droit franais et 
//respectant les principes de diffusion des logiciels libres. Il est autoris de modifier 
//et/ou redistribuer ce code sous les conditions de la licence CeCILL V2.1. Le texte complet
// de la licence CeCILL V2.1 est dans le fichier `LICENSE`.

// fonction : calcule la contribution de la variable serie a partir de la serie mainf qui doit deja
// avoir t cre et a partir d'une periode de debut
// la fonction n'a t teste que sur donnes annuelles 
// il faudra peut-tre l'adapter pour des donnees trimestrielles 



addfun main ;
procedure main(serie,serie_mainf) 
{
debut=startdate(serie) ; /* date de debut de la serie */
fin=enddate(serie) ; /* date de fin de la serie */

sortie=c.() ; /* initialisation   blanc de sortie */

while (not namask(datint(serie,na))) /* cette boucle elimine les na et ce qui les precede ;*/
{
   if ((debut+datint(serie,na)-1)==fin) 
      {
      print("***** erreur : votre serie se termine par des NA ******");
      exit() ;
      }
   serie=subrange(serie,debut+datint(serie,na),fin) ;
   debut=startdate(serie) ; /*date de debut de la nouvelle serie */
}   

i=debut;

while (i<=fin)  /* bouclage jusqu' la date de fin de la serie en entre */
{
   nbret0=mins(i-debut+1,100) ; 
   deb=maxs(debut,i-99) ;
// nombre de retards sur lequel peut tre calcule la contrib, compte tenu de la date de dpart de la srie et du nombre 
// de la date i sur laquelle est calcule cette contrib
   
   serie_mainf_souspart=rev.(serie_mainf[1::nbret0]) ;
// extraction de la partie du mainf dont on a besoin et inversion

   serie_souspart=reshape(subrange(serie,deb,i));
// extraction de la partie de la srie dont on a besoin
 
   serie_calcul=matmult(transp(serie_souspart),serie_mainf_souspart) ;
// multiplication de la structure de mainf par la structure de retard de la srie
 
   sortie=c.(sortie,serie_calcul) ;/* ajout aux calculs prcdents */
   i=i+1;
}   
contrib=reshape(sortie,debut) ;/* reformatage de la srie pour la ramener a la date voulue */
return(contrib) ;
}
