int main(void)
{

	int g = 2;          //Number of groups
	int n = 9999;       //Timesteps
	double dt=0.0001;   //Duration of timestep
    
	double R[n][g];     //Rate vectors
    
	double R_i[g];      //Initial rates
		R_i[0] = 30; //Excitatory
		R_i[1] = 20; //Inhibitory
        
	double W[g][g];     //Synaptic weights
		W[0][0]=2;		W[0][1]=2.873;	//EE	EI
		W[1][0]=-2.873;	W[1][1]=-2;		//IE	II
        
	double gamma[g];    //External input
		gamma[0] = 10;      //->E cells
		gamma[1] = -10;     //->I cells
        
	double tau[g];      //Time constants
		tau[0] = 0.002; //AMPA (excitatory)
		tau[1] = 0.010;	//GABA_A (inhibitory)
	
    
    //Simulate
	rateN(g, n, R, R_i, W, gamma, tau, dt); //Simulate
	
    //Save data
	char * filename = "single_PING_group.dat";
	asave(n, g, R, filename);
	
	printf("Done!  Data saved as %s\n", filename);

	return 0;

}
Beispiel #2
0
Fenetre::Fenetre(QWidget *parent) : courant(0), QMainWindow(parent)
{
    //*************************
    courant = NULL;
    folder = NULL;
    resize(1200, 512);
    //*************************** Menu ***************************
    QMenu* mFile = menuBar()->addMenu("&File");
    QMenu* mEdit = menuBar()->addMenu("&Edit");
    QMenu* mView = menuBar()->addMenu("&View");


    QMenu* mNouveau = mFile->addMenu("New");
    QAction* mactionAnnuler = mEdit->addAction("Annuler");
    QAction* mactionRefaire = mEdit->addAction("Refaire");
    QAction* mactionSupprimer = mEdit->addAction("Supprimer");
    QMenu* mTag = mEdit->addMenu("Tags");
    QAction* mactionSupprimerTag = mTag->addAction("Supprimer");
    QMenu* mDocument = mEdit->addMenu("Documents");
    QAction* mactionUp = mDocument->addAction("Monter");
    QAction* mactionDown = mDocument->addAction("Descendre");
    QMenu* mExport = mEdit->addMenu("Exporter");
    QAction* mactionOuvrir = mFile->addAction("Ouvrir un espace de travail");
    QAction* mactionNew = mFile->addAction("Nouvel espace de travail");
    QAction* mactionSaveAs = mFile->addAction("Enregistrer sous...");
    QAction* mactionNewArticle = mNouveau->addAction("Article");
    QAction* mactionNewImage = mNouveau->addAction("Image");
    QAction* mactionNewAudio = mNouveau->addAction("Audio");
    QAction* mactionNewVideo = mNouveau->addAction("Video");
    QAction* mactionNewDocument = mNouveau->addAction("Document");

    QAction* mactionExportHTML = mExport->addAction("Html");
    QAction* mactionExportTex = mExport->addAction("Tex");
    QAction* mactionExportTexte = mExport->addAction("Texte");
    QAction* mactionOption=mEdit->addAction("Setting");

    QAction* mactionAddTag = mNouveau->addAction("Tag");

    QAction* mactionSave = mFile->addAction("Sauvegarder");
    mFile->addSeparator();
    QMenu* ouvrirCorbeille = mFile->addMenu("Corbeille");
    QAction* mactionRestaurer = ouvrirCorbeille->addAction("Restaurer");
    QAction* mactionVider = ouvrirCorbeille->addAction("Vider la Corbeille");

    mactionViewEdit = mView->addAction("Onglet Editeur");
    mactionViewHTML = mView->addAction("Onglet Html");
    mactionViewTex = mView->addAction("Onglet Tex");
    mactionViewTexte = mView->addAction("Onglet Texte");

    mFile->addSeparator();
    QAction* actionQuitter = mFile->addAction("&Quitter");
    actionQuitter->setIcon(QIcon("icon/quitter.png"));
    mactionNewArticle->setIcon(QIcon("icon/article.png"));
    mactionNewImage->setIcon(QIcon("icon/image.png"));
    mactionNewAudio->setIcon(QIcon("icon/audio.png"));
    mactionNewVideo->setIcon(QIcon("icon/video.png"));
    mNouveau->setIcon(QIcon("icon/plus.png"));
    mactionDown->setIcon(QIcon("icon/down.png"));
    mactionUp->setIcon(QIcon("icon/up.png"));
    mactionAddTag->setIcon(QIcon("icon/tag.png"));
    mactionSave->setIcon(QIcon("icon/save.png"));

    mactionExportHTML->setIcon(QIcon("icon/html.png"));
    mactionExportTex->setIcon(QIcon("icon/tex.png"));
    mactionExportTexte->setIcon(QIcon("icon/texte.png"));

    mactionAnnuler->setIcon(QIcon("icon/undo.png"));
    mactionRefaire->setIcon(QIcon("icon/redo.png"));
    mactionSupprimer->setIcon(QIcon("icon/cross.png"));
    mactionRestaurer->setIcon(QIcon("icon/corbeille.png"));
    mactionNewDocument->setIcon(QIcon("icon/document.png"));
    mactionOption->setIcon(QIcon("icon/setting.png"));


    mactionOuvrir->setShortcut(QKeySequence("Ctrl+O"));
    actionQuitter->setShortcut(QKeySequence("Ctrl+Q"));
    mactionSave->setShortcut(QKeySequence("Ctrl+S"));

    mactionAnnuler->setShortcut(QKeySequence("Ctrl+Z"));
    mactionRefaire->setShortcut(QKeySequence("Ctrl+Y"));
    mactionSupprimer->setShortcut(tr("Delete"));

    //** VIEW **//
    mactionViewEdit->setCheckable(true);
    mactionViewEdit->setChecked(true);
    mactionViewHTML->setCheckable(true);
    mactionViewTex->setCheckable(true);
    mactionViewTexte->setCheckable(true);


    //Bar de statue
    QStatusBar* statusBar = new QStatusBar;
    statusBar->addWidget(new QLabel("Projet Lo21 - Pauline Crouillère / Emilien Notarianni"));
    this->setStatusBar(statusBar);
    // Création de la barre d'outils
    QToolBar *toolBarFichier = addToolBar("Fichier");

    toolBarFichier->addAction(mactionNewArticle);
    toolBarFichier->addAction(mactionNewImage);
    toolBarFichier->addAction(mactionNewAudio);
    toolBarFichier->addAction(mactionNewVideo);
    toolBarFichier->addAction(mactionNewDocument);
    toolBarFichier->addSeparator();
    toolBarFichier->addAction(mactionAddTag);
    toolBarFichier->addSeparator();
    toolBarFichier->addAction(mactionUp);
    toolBarFichier->addAction(mactionDown);
    toolBarFichier->addSeparator();

    toolBarFichier->addAction(mactionExportHTML);
    toolBarFichier->addAction(mactionExportTex);
    toolBarFichier->addAction(mactionExportTexte);
    toolBarFichier->addSeparator();
    toolBarFichier->addAction(mactionRestaurer);
    toolBarFichier->addSeparator();
    toolBarFichier->addAction(mactionSupprimer);
    toolBarFichier->addSeparator();
    toolBarFichier->addAction(actionQuitter);

    /*************************************************************/
    couche = new QHBoxLayout();
    lw = new LeftWindows();
    ow = new OngletWindows();
    couche->addWidget(lw);
    couche->addWidget(ow);
    couche->setMargin(0);
    couche->setAlignment(Qt::AlignTop);
    centerWindows = new QWidget();
    centerWindows->setLayout(couche);
    setCentralWidget(centerWindows);

    //************************** CONNECT **************************/
    QObject::connect(mactionNewArticle, SIGNAL(triggered()), this, SLOT(newArticle()));
    QObject::connect(mactionNewDocument, SIGNAL(triggered()), this, SLOT(newDocument()));
    QObject::connect(mactionNewImage, SIGNAL(triggered()), this, SLOT(newImage()));
    QObject::connect(mactionNewAudio, SIGNAL(triggered()), this, SLOT(newAudio()));
    QObject::connect(mactionNewVideo, SIGNAL(triggered()), this, SLOT(newVideo()));
    QObject::connect(mactionAddTag, SIGNAL(triggered()), this, SLOT(newTag()));
    QObject::connect(mactionOuvrir,SIGNAL(triggered()),this, SLOT(ouvrirDialogue()));
    QObject::connect(actionQuitter,SIGNAL(triggered()),qApp, SLOT(quit()));

    QObject::connect(mactionUp,SIGNAL(triggered()),this, SLOT(docUp()));
    QObject::connect(mactionDown,SIGNAL(triggered()),this, SLOT(docDown()));

    QObject::connect(mactionRestaurer, SIGNAL(triggered()), this, SLOT(ouvrirCorbeille()));

    QObject::connect(mactionSave, SIGNAL(triggered()), this, SLOT(asave()));

    QObject::connect(mactionExportHTML, SIGNAL(triggered()), this, SLOT(exportHTML()));
    QObject::connect(mactionExportTex, SIGNAL(triggered()), this, SLOT(exportTex()));
    QObject::connect(mactionExportTexte, SIGNAL(triggered()), this, SLOT(exportTexte()));

    QObject::connect(mactionSupprimer, SIGNAL(triggered()), this, SLOT(deleteInCorbeille()));
    QObject::connect(mactionVider, SIGNAL(triggered()), this, SLOT(viderLaCorbeille()));
    //TODO
    QObject::connect(mactionAnnuler, SIGNAL(triggered()), qApp, SLOT(undo()));
    QObject::connect(mactionRefaire, SIGNAL(triggered()), qApp, SLOT(redo()));
    //
    QObject::connect(mactionSaveAs, SIGNAL(triggered()), this, SLOT(copieWorkSpace()));
    QObject::connect(mactionNew, SIGNAL(triggered()), this, SLOT(newWorkSpace()));
    QObject::connect(mactionOption, SIGNAL(triggered()), this, SLOT(setting()));



    QObject::connect(mactionViewEdit, SIGNAL(triggered()), this, SLOT(changeEdit()));
    QObject::connect(mactionViewHTML, SIGNAL(triggered()), this, SLOT(changeHtml()));
    QObject::connect(mactionViewTex,SIGNAL(triggered()),this, SLOT(changeTex()));
    QObject::connect(mactionViewTexte,SIGNAL(triggered()),this, SLOT(changeTexte()));
    QObject::connect(ow, SIGNAL(currentChanged(int)), this, SLOT(changeOnglet(int)));
    QObject::connect(mactionSupprimerTag, SIGNAL(triggered()), this, SLOT(supprimeTag()));

}
int main(void){

    /*********** INITIALIZE STUFF *************/
    int n=100000, no=2; //timesteps and number of oscillators
    int g=2*no; //number of groups
    double dt = 0.0001;
    int rw = 10;  //how often to record syn weights
    int t,i,j;  //counters
    double W_t[n/rw][g][g]; //Weight matrix over time
    double Re[n][no], R_i[no][2];

    //Init weights
    double wW[2][2];    //Within-oscillator synaptic weights
        wW[0][0]=2;         wW[0][1]=2.873; //EE    EI
        wW[1][0]=-2.873;    wW[1][1]=-2;    //IE    II
    double W[4];    //Cross-group
        W[0]=0.2;   W[1]=0.3;   //xEE   xEI
        W[2]=-0.5;  W[3]=0;     //xIE   xII
    int xEE_c=1, xEI_c=0, xIE_c=0, xII_c=0; //Syn weights allowed to change?


    //Find initial rate vector
    int p=1000;
    double lp_rates[p][2];
    get_last_period(&p, lp_rates, wW);

    double R_i_IN[2][2], R_i_OUT[2][2];
    R_i_IN[0][0] = lp_rates[0][0];
    R_i_IN[0][1] = lp_rates[0][1];
    R_i_IN[1][0] = lp_rates[0][0];
    R_i_IN[1][1] = lp_rates[0][1];

    R_i_OUT[0][0] = lp_rates[0][0];
    R_i_OUT[0][1] = lp_rates[0][1];
    R_i_OUT[1][0] = lp_rates[p/2][0];
    R_i_OUT[1][1] = lp_rates[p/2][1];


    //Multithreading stuff
    int pd_res = 100;
    double phdiffs[pd_res];
    pthread_t threads[NUM_THREADS];
    THREAD_DAT_1D t_args[NUM_THREADS];
    int t_divs[NUM_THREADS+1];
    segment_threads(NUM_THREADS, 0, pd_res, t_divs);
    
    //put data in thread args
    for (i=0;i<NUM_THREADS;i++){
        t_args[i].id = i;
        t_args[i].a = t_divs[i];
        t_args[i].b = t_divs[i+1];
        t_args[i].res = pd_res;
        t_args[i].DATA = (double *)&phdiffs;
        t_args[i].DATA_IN = (double *)&W;
    }


    /*********** BEFORE PLASTICITY PD_INIT VS PD_SS PLOT  *************/
    //Run threads
    for (i=0;i<NUM_THREADS;i++){
        pthread_create(&threads[i],NULL,Learned_Synchrony_worker,(void*)&t_args[i]);
    }

    //Wait for threads to finish
    waitfor_threads(NUM_THREADS, threads);

    //Write data to file
    char * fn_pre_pdvpd = "Learned_Synchrony_pre_pdvpd.dat";
    vsave(pd_res, phdiffs, fn_pre_pdvpd);
    printf("Done with PRE - data saved as %s\n", fn_pre_pdvpd);



    /*********** DO PLASTIC RUN STARTING *IN* PHASE ******************/
    //Simulate
    plasticPingRateN_recW(n,no,Re,R_i_IN,W[0],W[1],W[2],W[3],
                            xEE_c,xEI_c,xIE_c,xII_c,wW,dt,W_t);    

    printf("xEE weight after plastic run starting IN-phase: %f\n",W_t[n/rw-1][0][2]);

    //Save data
    char * fn_plasIN_r = "Learned_Synchrony_plas_IN_r.dat";
    asave(n, no, Re, fn_plasIN_r);
    printf("Plastic run, init-IN, rate data saved as %s\n", fn_plasIN_r);

    //Convert weight matrix into storable one
    double output_w_in[n/rw][g*g];
    for (t=0;t<n/rw;t++){ for (i=0;i<g;i++){ for (j=0;j<g;j++){
        output_w_in[t][g*i+j] = W_t[t][i][j];
    }}}

    //And save the final xEE weights for later
    double W_ppIN_SS = W_t[n/rw-1][0][2];

    //Save data
    char * fn_plasIN_w = "Learned_Synchrony_plas_IN_w.dat";
    asave(n/rw, g*g, output_w_in, fn_plasIN_w);
    printf("Plastic run, init-IN, weight data saved as %s\n", fn_plasIN_w);


    /*********** DO PLASTIC RUN STARTING *OUT-OF* PHASE ******************/
    //Simulate
    plasticPingRateN_recW(n,no,Re,R_i_OUT,W[0],W[1],W[2],W[3],
                            xEE_c,xEI_c,xIE_c,xII_c,wW,dt,W_t);    

    printf("xEE weight after plastic run starting OUT-of-phase: %f\n",W_t[n/rw-1][0][2]);

    //Save data
    char * fn_plasOUT_r = "Learned_Synchrony_plas_OUT_r.dat";
    asave(n, no, Re, fn_plasOUT_r);
    printf("Plastic run, init-OUT, rate data saved as %s\n", fn_plasOUT_r);

    //Convert weight matrix into storable one
    double output_w_out[n/rw][g*g];
    for (t=0;t<n/rw;t++){ for (i=0;i<g;i++){ for (j=0;j<g;j++){
        output_w_out[t][g*i+j] = W_t[t][i][j];
    }}}

    //And save the final xEE weights for later
    double W_ppOUT_SS = W_t[n/rw-1][0][2];

    //Save data
    char * fn_plasOUT_w = "Learned_Synchrony_plas_OUT_w.dat";
    asave(n/rw, g*g, output_w_out, fn_plasOUT_w);
    printf("Plastic run, init-OUT, weight data saved as %s\n", fn_plasOUT_w);

 

    /*********** AFTER IN-PLASTICITY PD_INIT VS PD_SS PLOT  *************/
    //Set xEE weight
    W[0] = W_ppIN_SS;

    //Run threads
    for (i=0;i<NUM_THREADS;i++){
        pthread_create(&threads[i],NULL,Learned_Synchrony_worker,(void*)&t_args[i]);
    }

    //Wait for threads to finish
    waitfor_threads(NUM_THREADS, threads);

    //Write data to file
    char * fn_postIN_pdvpd = "Learned_Synchrony_postIN_pdvpd.dat";
    vsave(pd_res, phdiffs, fn_postIN_pdvpd);
    printf("Done with POST-IN - data saved as %s\n", fn_postIN_pdvpd);


    /*********** AFTER OUT-PLASTICITY PD_INIT VS PD_SS PLOT  *************/
    //Set xEE weight
    W[0] = W_ppOUT_SS;

    //Run threads
    for (i=0;i<NUM_THREADS;i++){
        pthread_create(&threads[i],NULL,Learned_Synchrony_worker,(void*)&t_args[i]);
    }

    //Wait for threads to finish
    waitfor_threads(NUM_THREADS, threads);

    //Write data to file
    char * fn_postOUT_pdvpd = "Learned_Synchrony_postOUT_pdvpd.dat";
    vsave(pd_res, phdiffs, fn_postOUT_pdvpd);
    printf("Done with POST-OUT - data saved as %s\n", fn_postOUT_pdvpd);


    return 0;

}
int main(void){
	
	int n=29999, no=2;
	double dt = 0.0001;
	double Re[n][no], R_i[no][2];
	double xEE_IN=0.15, xEI_IN=0, xIE_IN=0, xII_IN=0;	//SS in-phase
	double xEE_OUT=0, xEI_OUT=1, xIE_OUT=0, xII_OUT=0; //SS out
	//double xEE_OUT=0, xEI_OUT=0.3, xIE_OUT=-0.3, xII_OUT=0; //SS out
	double wW[2][2];     //within-oscillator synaptic weights
		wW[0][0]=2;			wW[0][1]=2.873;	//EE	EI
		wW[1][0]=-2.873;	wW[1][1]=-2;		//IE	II
	
	//Get init rate vector
	int p=400;
	double lp_rates[p][2];
	get_last_period(&p, lp_rates, wW);
	
	double R_i_IN[2][2], R_i_OUT[2][2];
	R_i_IN[0][0]=lp_rates[0][0];
	R_i_IN[0][1]=lp_rates[0][1];
	R_i_IN[1][0]=lp_rates[0][0];
	R_i_IN[1][1]=lp_rates[0][1];

	R_i_OUT[0][0]=lp_rates[0][0];
	R_i_OUT[0][1]=lp_rates[0][1];
	R_i_OUT[1][0]=lp_rates[p/2][0];
	R_i_OUT[1][1]=lp_rates[p/2][1];
	
	
	
	/*************INIT IN, SS IN *****************/
	pingRateN(n,no,Re,R_i_IN,xEE_IN,xEI_IN,xIE_IN,xII_IN,wW,dt);
	
	//Save data
	char * filename1 = "pingRateN_tester_iIN_ssIN.dat";
	asave(n, no, Re, filename1);
	printf("Data saved as %s\n", filename1);
	
	
	/*************INIT IN, SS OUT *****************/
	pingRateN(n,no,Re,R_i_IN,xEE_OUT,xEI_OUT,xIE_OUT,xII_OUT,wW,dt);
	
	//Save data
	char * filename2 = "pingRateN_tester_iIN_ssOUT.dat";
	asave(n, no, Re, filename2);
	printf("Data saved as %s\n", filename2);


	/*************INIT OUT, SS IN *****************/
	pingRateN(n,no,Re,R_i_OUT,xEE_IN,xEI_IN,xIE_IN,xII_IN,wW,dt);
	
	//Save data
	char * filename3 = "pingRateN_tester_iOUT_ssIN.dat";
	asave(n, no, Re, filename3);
	printf("Data saved as %s\n", filename3);


	/*************INIT OUT, SS OUT *****************/
	pingRateN(n,no,Re,R_i_OUT,xEE_OUT,xEI_OUT,xIE_OUT,xII_OUT,wW,dt);
	
	//Save data
	char * filename4 = "pingRateN_tester_iOUT_ssOUT.dat";
	asave(n, no, Re, filename4);
	printf("Data saved as %s\n", filename4);


	return 0;
	
}