void IndexedQueue::init(RanGen& ran, AllReactions& all){ _pqueue.clear(); for(unsigned i=0; i < _indices.size() ; ++i){ QueueElement* elm = _indices[i]; delete elm; _indices[i] = NULL; } _indices.clear(); //create empty PQueue using information in all. if(!_sentinel){ _sentinel = new QueueElement(); _pqueue.setSentinel(_sentinel); // sentinel is not added to the indexvector } else if (_pqueue.size()==0){//if init() is called again, sentinel has to be set again! _pqueue.setSentinel(_sentinel); } for (unsigned r=0; r < all.size() ; ++r){ // cout << r << "\t" << all[r]->propensity() << "\t"; double time_i = std::numeric_limits<double>::infinity(); if(all[r]->propensity() > 0.0){ double rval = ran.randouble(); time_i = all[r]->calcPutativeTime(rval); // cout << "Rval = " << rval << " for reaction " << *(all[r]) << " ";//" produces pututative time = "<< time_i << endl; } else all[r]->setPutativeTime(time_i); // cout << all[r]->putativeTime()<<"\t" << endl; QueueElement *elm = new QueueElement(r, time_i); _indices.push_back(elm); elm->setQueueLoc(_pqueue.size()); //starts at 1!!! try { _pqueue.push(elm); } catch (std::exception & e){ std::cout <<" HEAP exception: " << e.what() << std::endl; exit(0); } } // all.print(std::cout); }