void SigNeur::innerBuildTree( unsigned int parent, Eref paE, Eref e, int msg1, int msg2 ) { unsigned int paIndex = tree_.size(); TreeNode t( e.id(), parent, guessCompartmentCategory( e ) ); tree_.push_back( t ); // cout << e.name() << endl; Conn* c = e->targets( msg1, e.i ); // Things are messy here because src/dest directions are flawed // in Element::targets. // The parallel moose fixes this mess, simply by checking against // which the originating element is. Here we need to do the same // explicitly. for ( ; c->good(); c->increment() ) { Eref tgtE = c->target(); if ( tgtE == e ) tgtE = c->source(); if ( !( tgtE == paE ) ) { // cout << "paE=" << paE.name() << ", e=" << e.name() << ", msg1,2= " << msg1 << "," << msg2 << ", src=" << c->source().name() << ", tgt= " << tgtE.name() << endl; innerBuildTree( paIndex, e, tgtE, msg1, msg2 ); } } delete c; c = e->targets( msg2, e.i ); for ( ; c->good(); c->increment() ) { Eref tgtE = c->target(); if ( tgtE == e ) tgtE = c->source(); if ( !( tgtE == paE ) ) { // cout << "paE=" << paE.name() << ", e=" << e.name() << ", msg1,2= " << msg1 << "," << msg2 << ", src=" << c->source().name() << ", tgt= " << tgtE.name() << endl; innerBuildTree( paIndex, e, tgtE, msg1, msg2 ); } } delete c; }