示例#1
0
文件: main.cpp 项目: nishbo/hem_v7.0
int maass()
{
/*
зависимость выходной частоты от тока в первом эксперименте
зависимость порога от характера сигнала
зависимость порога от реализации
зависимость частоты выходного сигнала от порога
использовать сигнал кости
*/

    srand(time(NULL));

    double timeMax = 50.0;
    double dt = 0.01;
    double dumpPeriod = 10.0;

    Node::dt = dt;

    std::vector<Node *> generators;
    std::vector<Synapse *> synapses1;
    std::vector<Synapse *> synapses2;

    std::cout<<"Creating neurons..."<<std::endl;

    Node node1 = Node("leaky iaf");
    node1.I_stim = genran::uniform(14.5, 15.5);
    node1.addPsWaveType(PsWave(3.0), "current", 1.0); // exc input
    node1.addPsWaveType(PsWave(6.0), "current", -1.0); // inh input
    node1.initialiseSpikeBuffer(dt);

    Node node2 = Node("leaky iaf");
    node2.I_stim = node1.I_stim;
    node2.addPsWaveType(PsWave(3.0), "current", 1.0); // exc input
    node2.addPsWaveType(PsWave(6.0), "current", -1.0); // inh input
    node2.initialiseSpikeBuffer(dt);

    std::cout<<"Creating generators..."<<std::endl;

    for (int i=0; i < 90; i++){
        generators.push_back(new Node("poisson generator"));
        Synapse* synapse1 = new Synapse("stdp and tm", &node1, "hard boundaries");
        synapse1->setPreset(0); // excitatory constants
        synapse1->control(0); // disable stdp and shuffle tm
        synapse1->reset();
        topology::connectN2N(generators.back(), &node1, synapse1);
        synapses1.push_back(synapse1);

        Synapse* synapse2 = synapse1->duplicate(&node2); //copy everything
        synapse2->control(1); // enable stdp with gamma, don't touch tm
        synapse2->reset();
        topology::connectN2N(generators.back(), &node2, synapse2);
        synapses2.push_back(synapse2);

        std::cout<<"\t\t generators created: "<< i << "%\r";
    }

    for (int i=0; i < 10; i++){
        generators.push_back(new Node("poisson generator"));

        Synapse* synapse1 = new Synapse("stdp and tm", &node1, "hard boundaries");
        synapse1->setPreset(2); // inhibitory constants
        synapse1->control(0); // disable stdp and shuffle tm
        synapse1->reset();
        synapse1->waveType = 1; // inhibitory
        topology::connectN2N(generators.back(), &node1, synapse1);
        // synapses1.push_back(synapse1);

        Synapse* synapse2 = synapse1->duplicate(&node2); //copy everything
        topology::connectN2N(generators.back(), &node2, synapse2);
        // synapses2.push_back(synapse2);

        std::cout<<"\t\t generators created: "<< i+90 << "%\r";
    }
    std::cout<<std::endl;

    std::cout<<"Start output..."<<std::endl;

    Output output;
    output.openSpikeFile();

    output.openSynapticWeightFile("data/target.txt");
    output.synapses = synapses1;
    output.printSynapticWeights(0.0);
    output.closeSynapticWeightFile();

    output.openSynapticWeightFile("data/start.txt");
    output.synapses = synapses2;
    output.printSynapticWeights(0.0);
    output.closeSynapticWeightFile();

    output.printEssentialData(timeMax);
    std::string s;
    std::stringbuf dumpTimesBuffer;
    std::ostream dumpTimes (&dumpTimesBuffer);

    std::cout<<"Starting simulation..."<<std::endl;

    for (double t = 0.0; t <= timeMax+dt; t += dt){
        for (unsigned i=0; i<generators.size(); i++)
            if (generators.at(i)->step(t))
                output.push(t, i); //generator numbers range from 0 to 99

        if (node2.step(t))
            output.push(t, 199);

        if (node1.step(t) and not node2.isSpiking(t)){
            node2.forceSpike(t);
            output.push(t, 151);
        }

        if (isPeriodNow(t, dumpPeriod, dt) and t>0.0){
            s = std::string("data/dump_") + std::to_string(t)+ ".txt";
            dumpTimes << s <<std::endl;
            output.openSynapticWeightFile(s);
            output.print(t);
            output.closeSynapticWeightFile();
        }

        std::cout<<"Finished "<< t / timeMax <<" of the simulation.\t\t\r";
    }
    std::cout<<std::endl;
    output.close();

    std::cout<<"Finish output..."<<std::endl;

    output.openSynapticWeightFile("data/finish.txt");
    output.printSynapticWeights(timeMax);
    output.closeSynapticWeightFile();

    std::ofstream dumpTimesFile;
    dumpTimesFile.open("data/dump_times.txt", std::ofstream::out);
    dumpTimesFile << dumpTimesBuffer.str();
    dumpTimesFile.close();

    return 0;
}
示例#2
0
文件: main.cpp 项目: nishbo/hem_v7.0
int diploma()
{
    srand(time(NULL));

    double timeMax = 1000.0;
    double dt = 0.1;
    double dumpPeriod = 100.0;

    Node::dt = dt;

    std::vector<Node *> nodes;
    std::vector<Node *> inh_nodes;
    std::vector<Synapse *> synapses;

    for (int i=0; i < 800; i++){
        nodes.push_back(new Node("leaky iaf"));
        nodes.back()->I_stim = 14.0 + 2.0*drand(); // 14.0-16.0
        nodes.back()->addPsWaveType(PsWave(3.0), "current", 1.0); // exc input
        nodes.back()->addPsWaveType(PsWave(3.0), "current", -1.0); // inh input
        nodes.back()->initialiseSpikeBuffer(0.1);
    }

    for (int i=0; i < 200; i++){
        inh_nodes.push_back(new Node("leaky iaf"));
        inh_nodes.back()->I_stim = 14.0 + 2.0*drand(); // 14.0-16.0
        inh_nodes.back()->addPsWaveType(PsWave(3.0), "current", 1.0); // exc input
        inh_nodes.back()->addPsWaveType(PsWave(3.0), "current", -1.0); // inh input
        inh_nodes.back()->initialiseSpikeBuffer(0.1);
        inh_nodes.back()->setPreset(1); // inh neuron params
    }
    nodes.reserve(nodes.size() + inh_nodes.size());
    nodes.insert(nodes.end(), inh_nodes.begin(), inh_nodes.end());

    std::vector<Synapse *> synapses_ee = topology::randomTopology(\
        nodes, "stdp and tm", 80, 0, "agile boundaries");
    std::vector<Synapse *> synapses_ei = topology::randomTopology(\
        nodes, inh_nodes, "stdp and tm", 20, 0, "agile boundaries");
    for (auto synapse : synapses_ei){
        synapse->setPreset(1);
        synapse->reset();
    }
    std::vector<Synapse *> synapses_ie = topology::randomTopology(\
        inh_nodes, nodes, "stdp and tm", 80, 1, "agile boundaries");
    for (auto synapse : synapses_ie){
        synapse->setPreset(2);
        synapse->reset();
    }
    std::vector<Synapse *> synapses_ii = topology::randomTopology(\
        inh_nodes, "stdp and tm", 20, 1, "agile boundaries");
    for (auto synapse : synapses_ii){
        synapse->setPreset(3);
        synapse->reset();
    }

    synapses.reserve(synapses.size() + synapses_ee.size() + synapses_ei.size()\
                    + synapses_ie.size() + synapses_ii.size());
    synapses.insert(synapses.end(), synapses_ee.begin(), synapses_ee.end());
    synapses.insert(synapses.end(), synapses_ei.begin(), synapses_ei.end());
    synapses.insert(synapses.end(), synapses_ie.begin(), synapses_ie.end());
    synapses.insert(synapses.end(), synapses_ii.begin(), synapses_ii.end());

    // nodes.push_back(new Node("periodic generator"));
    // nodes.push_back(new Node("neuron liaf"));
    // nodes.back()->I_stim = 0.0;
    // nodes.back()->addPsWaveType(PsWave(3.0), "current", 1.0);
    // nodes.back()->initialiseSpikeBuffer(0.1);

    // std::vector<Synapse *> synapses;
    // for (int i=0; i < 100; i++){
    //     synapses.push_back(topology::connectN2N(nodes[0], nodes[1], "synapse tm"));
    //     synapses.back()->waveType = 0;
    // }

    Output output;
    // output.open();
    output.openSpikeFile();
    // output.openSynapticCurrentFile();
    // output.openSynapticWeightFile();
    output.nodes = nodes;
    output.synapses = synapses;
    output.printEssentialData(timeMax);

    for (double t = 0.0; t <= timeMax; t += dt){
        // std::cout<<"t "<<t<< std::endl;
        for (unsigned i=0; i<nodes.size(); i++)
            if (nodes.at(i)->step(t))
                output.push(t, i);

        // for (unsigned i=0; i<inh_nodes.size(); i++)
        //     if (inh_nodes.at(i)->step(t))
        //         output.push(t, i+400);

        if (isPeriodNow(t, dumpPeriod, dt))
            output.print(t);

        std::cout<<"Finished "<< t / timeMax <<" of the simulation.\t\t\r";
    }
    std::cout<<std::endl;
    output.close();

    std::cout<<std::endl;
    return 0;
}
示例#3
0
// download http with wget or preferred browser
void Gutenbrowser::goGetit( const QString &url, bool showMsg) {
    QString cmd;
    qApp->processEvents();

    QString filename = local_library + "/GUTINDEX.ALL";

    Config cfg("Gutenbrowser");
    cfg.setGroup("FTPsite");
    ftp_host=cfg.readEntry("SiteName", "sailor.gutenberg.org");
    ftp_base_dir= cfg.readEntry("base",  "/pub/gutenberg");

    if(!showMsg) {
	//if we just get the gutenindex.all
        cmd="wget -O " + filename +" " + url+" 2>&1" ;
        chdir(local_library);

        Output *outDlg = new Output( 0, tr("Downloading Gutenberg Index...."),
				     TRUE);

        outDlg->showMaximized();
        outDlg->show();
        qApp->processEvents();
        FILE *fp;
        char line[130];
        outDlg->OutputEdit->append( tr("Running wget") );
        outDlg->OutputEdit->setCursorPosition(
                                             outDlg->OutputEdit->numLines() + 1,
                                             0, FALSE
                                             );
        sleep(1);
        fp = popen(  (const char *) cmd, "r");
        if ( fp ) {
            while ( fgets( line, sizeof line, fp)) {
                outDlg->OutputEdit->append(line);
                outDlg->OutputEdit->setCursorPosition(
                                             outDlg->OutputEdit->numLines() + 1,
					     0,FALSE
					             );
            }
            pclose(fp);
            outDlg->OutputEdit->append("Finished downloading\n");
            outDlg->OutputEdit->setCursorPosition(
                                             outDlg->OutputEdit->numLines() + 1,
                                             0, FALSE
                                                 );
            qApp->processEvents();

        }
        outDlg->close();
        delete outDlg;
    } else {
        if( brow == "Konq")
            cmd = "konqueror "+url+" &";
        if( brow == "Opera")
            //for desktop testing
            cmd = "opera "+url+" &";
        if( brow == "Mozilla")
            cmd = "mozilla "+url+" &";
        if( brow == "Netscape")
            cmd = "netscape "+url+" &";
        if(brow == "wget") {
            QString tempHtml=local_library+"webster.html";
            cmd="wget -O "+tempHtml+" -q "+url;
        }

        chdir(local_library);
        system(cmd);
    }
}