00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "Neuro/NeuroSimEvents.H"
00039 #include "Component/ParamMap.H"
00040 #include "Channels/ChannelMaps.H"
00041 #include "Channels/IntegerRawVisualCortex.H"
00042 #include "Channels/RawVisualCortex.H"
00043 #include "Util/sformat.H"
00044 #include "Image/MathOps.H"
00045 #include "Neuro/VisualBuffer.H"
00046 #include "Neuro/VisualCortex.H"
00047 #include "Neuro/VisualCortexEyeMvt.H"
00048 #include "Psycho/EyeData.H"
00049 #include "Psycho/HandData.H"
00050 #include "Transport/FrameOstream.H"
00051 #include "SpaceVariant/SpaceVariantTransforms.H"
00052
00053
00054 SimEventWTAwinner::SimEventWTAwinner(SimModule* src, const WTAwinner w,
00055 const uint s) :
00056 SimEvent(src), itsWinner(w), itsShiftNum(s)
00057 { }
00058
00059 SimEventWTAwinner::~SimEventWTAwinner()
00060 { }
00061
00062 std::string SimEventWTAwinner::toString() const
00063 {
00064 return SimEvent::toString() +
00065 sformat(", winner[%u]=(%d, %d) %.3fmV%s", itsShiftNum,
00066 itsWinner.p.i, itsWinner.p.j,
00067 itsWinner.sv * 1000.0, itsWinner.boring ? " [boring]" : "");
00068 }
00069
00070 const WTAwinner& SimEventWTAwinner::winner() const
00071 { return itsWinner; }
00072
00073 uint SimEventWTAwinner::shiftNum() const
00074 { return itsShiftNum; }
00075
00076
00077 SimEventTargetsHit::SimEventTargetsHit(SimModule* src, const int numhit) :
00078 SimEvent(src), itsNumHits(numhit)
00079 { }
00080
00081 SimEventTargetsHit::~SimEventTargetsHit()
00082 { }
00083
00084 std::string SimEventTargetsHit::toString() const
00085 { return SimEvent::toString() + sformat(", %d hits", itsNumHits); }
00086
00087 int SimEventTargetsHit::numHits() const
00088 { return itsNumHits; }
00089
00090
00091 SimEventRetinaImage::SimEventRetinaImage(SimModule* src,
00092 const InputFrame& ifr,
00093 const Rectangle& rawinprect,
00094 const Point2D<int> offset) :
00095 SimEvent(src), itsFrame(ifr), itsRawInputRectangle(rawinprect),
00096 itsOffset(offset), itsRetTransform(), itsMapTransform()
00097 { }
00098
00099 SimEventRetinaImage::SimEventRetinaImage(SimModule* src,
00100 const InputFrame& ifr,
00101 const Rectangle& rawinprect,
00102 const Point2D<int> offset,
00103 rutz::shared_ptr<SpaceVariantTransform> rettransform,
00104 rutz::shared_ptr<SpaceVariantTransform> maptransform) :
00105 SimEvent(src), itsFrame(ifr), itsRawInputRectangle(rawinprect),itsOffset(offset),
00106 itsRetTransform(rettransform), itsMapTransform(maptransform)
00107 { }
00108
00109 SimEventRetinaImage::~SimEventRetinaImage()
00110 { }
00111
00112 std::string SimEventRetinaImage::toString() const
00113 {
00114 return SimEvent::toString() +
00115 sformat(", [%dx%d] t=%.1fms", itsFrame.colorByte().getWidth(),
00116 itsFrame.colorByte().getHeight(), itsFrame.time().msecs());
00117 }
00118
00119 const InputFrame& SimEventRetinaImage::frame() const
00120 { return itsFrame; }
00121
00122 const Rectangle& SimEventRetinaImage::rawInputRectangle() const
00123 { return itsRawInputRectangle; }
00124
00125 Point2D<int>
00126 SimEventRetinaImage::rawToRetinal(const Point2D<int>& rawpos) const
00127 { return rawpos + itsOffset; }
00128
00129 const Dims& SimEventRetinaImage::getRawInputDims() const
00130 { if (itsRetTransform.is_valid())
00131 return itsRetTransform->getCTDims();
00132 else
00133 return itsFrame.getDims();
00134 }
00135
00136 Point2D<int>
00137 SimEventRetinaImage::retinalToRaw(const Point2D<int>& retpos) const
00138 { return retpos - itsOffset; }
00139
00140 Point2D<int> SimEventRetinaImage::center() const
00141 { return Point2D<int>(itsFrame.getWidth() / 2, itsFrame.getHeight() / 2); }
00142
00143 const Point2D<int>& SimEventRetinaImage::offset() const
00144 { return itsOffset; }
00145
00146 rutz::shared_ptr<SpaceVariantTransform> SimEventRetinaImage::getRetTransform() const
00147 { return itsRetTransform; };
00148
00149 rutz::shared_ptr<SpaceVariantTransform> SimEventRetinaImage::getMapTransform() const
00150 { return itsMapTransform; };
00151
00152
00153 SimEventVisualCortexOutput::
00154 SimEventVisualCortexOutput(SimModule* src, const Image<float>& vcout) :
00155 SimEvent(src), itsMap(vcout)
00156 { }
00157
00158 SimEventVisualCortexOutput::~SimEventVisualCortexOutput()
00159 { }
00160
00161 std::string SimEventVisualCortexOutput::toString() const
00162 {
00163 return SimEvent::toString() +
00164 sformat(", [%dx%d]", itsMap.getWidth(), itsMap.getHeight());
00165 }
00166
00167 const Image<float> SimEventVisualCortexOutput::vco(const float factor) const
00168 {
00169 Image<float> ret = itsMap;
00170 if (factor == 0.0F) inplaceNormalize(ret, 0.0F, 255.0F);
00171 else if (factor != 1.0F) ret *= factor;
00172 return ret;
00173 }
00174
00175
00176 SimEventGistOutput::
00177 SimEventGistOutput(SimModule* src, const Image<float>& gout) :
00178 SimEvent(src), itsGistVector(gout)
00179 { }
00180
00181 SimEventGistOutput::~SimEventGistOutput()
00182 { }
00183
00184 std::string SimEventGistOutput::toString() const
00185 {
00186 return SimEvent::toString() +
00187 sformat(", [%dx%d]", itsGistVector.getWidth(), itsGistVector.getHeight());
00188 }
00189
00190 const Image<float> SimEventGistOutput::gv() const
00191 { return itsGistVector; }
00192
00193
00194 SimEventSaliencyMapOutput::
00195 SimEventSaliencyMapOutput(SimModule* src, const Image<float>& smout, const int maplevel) :
00196 SimEvent(src), itsMap(smout), itsMapLevel(maplevel)
00197 { }
00198
00199 SimEventSaliencyMapOutput::~SimEventSaliencyMapOutput()
00200 { }
00201
00202 std::string SimEventSaliencyMapOutput::toString() const
00203 {
00204 return SimEvent::toString() +
00205 sformat(", [%dx%d]", itsMap.getWidth(), itsMap.getHeight());
00206 }
00207
00208 const Image<float> SimEventSaliencyMapOutput::sm(const float factor) const
00209 {
00210 Image<float> ret = itsMap;
00211 if (factor == 0.0F) inplaceNormalize(ret, 0.0F, 255.0F);
00212 else if (factor != 1.0F) ret *= factor;
00213 return ret;
00214 }
00215
00216 Point2D<int> SimEventSaliencyMapOutput::smToOrig(const Point2D<int>& p) const
00217 {
00218 return Point2D<int>((p.i << itsMapLevel), (p.j << itsMapLevel));
00219 }
00220
00221 Point2D<int> SimEventSaliencyMapOutput::origToSm(const Point2D<int>& p) const
00222 {
00223 return Point2D<int>((p.i >> itsMapLevel), (p.j >> itsMapLevel));
00224 }
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248 SimEventTaskRelevanceMapOutput::
00249 SimEventTaskRelevanceMapOutput(SimModule* src, const Image<float>& trmout) :
00250 SimEvent(src), itsMap(trmout)
00251 { }
00252
00253 SimEventTaskRelevanceMapOutput::~SimEventTaskRelevanceMapOutput()
00254 { }
00255
00256 std::string SimEventTaskRelevanceMapOutput::toString() const
00257 {
00258 return SimEvent::toString() +
00259 sformat(", [%dx%d]", itsMap.getWidth(), itsMap.getHeight());
00260 }
00261
00262 const Image<float> SimEventTaskRelevanceMapOutput::
00263 trm(const float factor) const
00264 {
00265 Image<float> ret = itsMap;
00266 if (factor == 0.0F) inplaceNormalize(ret, 0.0F, 255.0F);
00267 else if (factor != 1.0F) ret *= factor;
00268 return ret;
00269 }
00270
00271
00272 SimEventAttentionGuidanceMapOutput::
00273 SimEventAttentionGuidanceMapOutput(SimModule* src, const Image<float>& agmout) :
00274 SimEvent(src), itsMap(1)
00275 { itsMap[0] = agmout; }
00276
00277 SimEventAttentionGuidanceMapOutput::
00278 SimEventAttentionGuidanceMapOutput(SimModule* src, const ImageSet<float>& agmout) :
00279 SimEvent(src), itsMap(agmout)
00280 { }
00281
00282 SimEventAttentionGuidanceMapOutput::~SimEventAttentionGuidanceMapOutput()
00283 { }
00284
00285 std::string SimEventAttentionGuidanceMapOutput::toString() const
00286 {
00287 return SimEvent::toString() +
00288 sformat(", [%dx%dx%d]", itsMap[0].getWidth(), itsMap[0].getHeight(), itsMap.size());
00289 }
00290
00291 uint SimEventAttentionGuidanceMapOutput::numMaps() const
00292 { return itsMap.size(); }
00293
00294 const Image<float> SimEventAttentionGuidanceMapOutput::agm(const float factor, const uint pos) const
00295 {
00296 Image<float> ret;
00297 if (pos < itsMap.size()){
00298 ret = itsMap[pos];
00299 if (factor == 0.0F) inplaceNormalize(ret, 0.0F, 255.0F);
00300 else if (factor != 1.0F) ret *= factor;
00301 }
00302 return ret;
00303 }
00304
00305 const ImageSet<float> SimEventAttentionGuidanceMapOutput::allAgm(const float factor) const
00306 {
00307 if (factor == 1.0)
00308 return itsMap;
00309 else
00310 {
00311 ImageSet<float> ret = itsMap;
00312 for (uint ii = 0; ii < ret.size(); ++ii)
00313 {
00314 if (factor == 0.0F) inplaceNormalize(ret[ii], 0.0F, 255.0F);
00315 else ret[ii] *= factor;
00316 }
00317 return ret;
00318 }
00319 }
00320
00321
00322 SimEventAttentionGateOutput::
00323 SimEventAttentionGateOutput(SimModule* src,
00324 const Image<float>& agout,
00325 const Image<float>& lamout,
00326 const Image<float>& camout,
00327 const unsigned int lamframe) :
00328 SimEvent(src), itsMap(agout), itsLastAttMap(lamout), itsCurrAttMap(camout),
00329 itsLastFrame(lamframe)
00330 { }
00331
00332 SimEventAttentionGateOutput::~SimEventAttentionGateOutput()
00333 { }
00334
00335 std::string SimEventAttentionGateOutput::toString() const
00336 {
00337 return SimEvent::toString() +
00338 sformat(", [%dx%d]", itsMap.getWidth(), itsMap.getHeight());
00339 }
00340
00341 const Image<float> SimEventAttentionGateOutput::
00342 ag(const float factor) const
00343 {
00344 Image<float> ret = itsMap;
00345 if (factor == 0.0F) inplaceNormalize(ret, 0.0F, 255.0F);
00346 else if (factor != 1.0F) ret *= factor;
00347 return ret;
00348 }
00349
00350 const Image<float> SimEventAttentionGateOutput::
00351 lam(const float factor) const
00352 {
00353 Image<float> ret = itsLastAttMap;
00354 if (factor == 0.0F) inplaceNormalize(ret, 0.0F, 255.0F);
00355 else if (factor != 1.0F) ret *= factor;
00356 return ret;
00357 }
00358
00359 const Image<float> SimEventAttentionGateOutput::
00360 cam(const float factor) const
00361 {
00362 Image<float> ret = itsCurrAttMap;
00363 if (factor == 0.0F) inplaceNormalize(ret, 0.0F, 255.0F);
00364 else if (factor != 1.0F) ret *= factor;
00365 return ret;
00366 }
00367
00368 const unsigned int SimEventAttentionGateOutput::lamFrame() const
00369 { return itsLastFrame; }
00370
00371
00372 SimEventAttentionGateStageTwoSegments::
00373 SimEventAttentionGateStageTwoSegments(SimModule* src,
00374 const Image<bool>& candidates,
00375 const SimEventAttentionGateStageTwoObjects& obj,
00376 const int segnum) :
00377 SimEvent(src), itsCandidates(candidates), itsObjects(obj),
00378 itsSegmentNum(segnum)
00379 { }
00380
00381 SimEventAttentionGateStageTwoSegments::~SimEventAttentionGateStageTwoSegments()
00382 {}
00383
00384 const Image<bool> SimEventAttentionGateStageTwoSegments::candidates() const
00385 { return itsCandidates; }
00386
00387 const SimEventAttentionGateStageTwoObjects
00388 SimEventAttentionGateStageTwoSegments::obj() const
00389 { return itsObjects; }
00390
00391 const int SimEventAttentionGateStageTwoSegments::segnum() const
00392 { return itsSegmentNum; }
00393
00394
00395 SimEventShapeEstimatorOutput::
00396 SimEventShapeEstimatorOutput(SimModule* src,
00397 const Image<float>& winmap,
00398 const Image<byte>& objmask,
00399 const Image<byte>& iormask,
00400 const Image<float>& smoothmask,
00401 const Image<float>& cumsmoothmask,
00402 const std::string& winlabel,
00403 const bool isshaped) :
00404 SimEvent(src), itsWinningMap(winmap), itsObjMask(objmask),
00405 itsIORmask(iormask), itsSmoothMask(smoothmask),
00406 itsCumSmoothMask(cumsmoothmask), itsWinLabel(winlabel),
00407 itsIsShaped(isshaped)
00408 { }
00409
00410 SimEventShapeEstimatorOutput::~SimEventShapeEstimatorOutput()
00411 { }
00412
00413 std::string SimEventShapeEstimatorOutput::toString() const
00414 {
00415 return SimEvent::toString() +
00416 sformat("Winning map: %s [%dx%d], Smooth mask: [%dx%d]",
00417 itsWinLabel.c_str(),
00418 itsObjMask.getWidth(), itsObjMask.getHeight(),
00419 itsSmoothMask.getWidth(), itsSmoothMask.getHeight());
00420 }
00421
00422 const Image<float>& SimEventShapeEstimatorOutput::winningMap() const
00423 { return itsWinningMap; }
00424
00425 const Image<byte>& SimEventShapeEstimatorOutput::objectMask() const
00426 { return itsObjMask; }
00427
00428 const Image<byte>& SimEventShapeEstimatorOutput::iorMask() const
00429 { return itsIORmask; }
00430
00431 const Image<float>& SimEventShapeEstimatorOutput::smoothMask() const
00432 { return itsSmoothMask; }
00433
00434 Image<float> SimEventShapeEstimatorOutput::cumSmoothMask() const
00435 {
00436 Image<float> result(itsCumSmoothMask);
00437 inplaceClamp(result, 0.4F , 1.0F);
00438 return result;
00439 }
00440
00441 Image<float> SimEventShapeEstimatorOutput::negCumSmoothMask() const
00442 {
00443 Image<float> result(itsCumSmoothMask * (-1.0F) + 1.0F);
00444 inplaceClamp(result, 1.0F-0.4F , 1.0F);
00445 return result;
00446 }
00447
00448 const std::string& SimEventShapeEstimatorOutput::winningLabel() const
00449 { return itsWinLabel; }
00450
00451 uint SimEventShapeEstimatorOutput::objectArea() const
00452 {
00453 const double scale = itsSmoothMask.getSize() / itsObjMask.getSize();
00454 return uint(sum(itsObjMask) / 255.0 * scale);
00455 }
00456
00457 bool SimEventShapeEstimatorOutput::isShaped() const
00458 { return itsIsShaped; }
00459
00460
00461 SimEventSaccadeStatus::
00462 SimEventSaccadeStatus(SimModule* src, const Point2D<int>& pos,
00463 const SaccadeState state,
00464 const SaccadeState prevState,
00465 const bool blinkState,
00466 const bool prevBlinkState) :
00467 SimEvent(src), itsPosition(pos),
00468 itsState(state), itsPrevState(prevState),
00469 itsBlinkState(blinkState), itsPrevBlinkState(prevBlinkState)
00470 { }
00471
00472 SimEventSaccadeStatus::~SimEventSaccadeStatus()
00473 { }
00474
00475 std::string SimEventSaccadeStatus::toString() const
00476 {
00477 return SimEvent::toString() +
00478 sformat(" %s (%d,%d) Unk:%s Fix:%s Sac:%s Bli:%s Smo:%s",
00479 saccadeBodyPartName(bodyPart()),
00480 itsPosition.i, itsPosition.j,
00481 transientStatusToStr(unknownStatus()),
00482 transientStatusToStr(fixationStatus()),
00483 transientStatusToStr(saccadeStatus()),
00484 transientStatusToStr(blinkStatus()),
00485 transientStatusToStr(smoothPursuitStatus()));
00486 }
00487
00488 const Point2D<int>& SimEventSaccadeStatus::position() const
00489 { return itsPosition; }
00490
00491 TransientStatus SimEventSaccadeStatus::unknownStatus() const
00492 { return transientStatus(itsPrevState == SACSTATE_UNK,
00493 itsState == SACSTATE_UNK); }
00494
00495 TransientStatus SimEventSaccadeStatus::fixationStatus() const
00496 { return transientStatus(itsPrevState == SACSTATE_FIX,
00497 itsState == SACSTATE_FIX); }
00498
00499 TransientStatus SimEventSaccadeStatus::saccadeStatus() const
00500 { return transientStatus(itsPrevState == SACSTATE_SAC,
00501 itsState == SACSTATE_SAC); }
00502
00503 TransientStatus SimEventSaccadeStatus::blinkStatus() const
00504 { return transientStatus(itsPrevBlinkState, itsBlinkState); }
00505
00506 TransientStatus SimEventSaccadeStatus::smoothPursuitStatus() const
00507 { return transientStatus(itsPrevState == SACSTATE_SMO,
00508 itsState == SACSTATE_SMO); }
00509
00510
00511
00512 SimEventSaccadeStatusEye::
00513 SimEventSaccadeStatusEye(SimModule* src, const Point2D<int>& pos,
00514 const SaccadeState state,
00515 const SaccadeState prevState,
00516 const bool blinkState,
00517 const bool prevBlinkState) :
00518 SimEventSaccadeStatus(src, pos, state, prevState, blinkState, prevBlinkState)
00519 { }
00520
00521 SimEventSaccadeStatusEye::~SimEventSaccadeStatusEye()
00522 { }
00523
00524 SaccadeBodyPart SimEventSaccadeStatusEye::bodyPart() const
00525 { return SaccadeBodyPartEye; }
00526
00527
00528 SimEventSaccadeStatusHead::
00529 SimEventSaccadeStatusHead(SimModule* src, const Point2D<int>& pos,
00530 const SaccadeState state,
00531 const SaccadeState prevState,
00532 const bool blinkState,
00533 const bool prevBlinkState) :
00534 SimEventSaccadeStatus(src, pos, state, prevState, blinkState, prevBlinkState)
00535 { }
00536
00537 SimEventSaccadeStatusHead::~SimEventSaccadeStatusHead()
00538 { }
00539
00540 SaccadeBodyPart SimEventSaccadeStatusHead::bodyPart() const
00541 { return SaccadeBodyPartHead; }
00542
00543
00544 SimEventEyeTrackerData::
00545 SimEventEyeTrackerData(SimModule* src, rutz::shared_ptr<EyeData> d,
00546 const uint trackernum,
00547 const std::string& trackerfname,
00548 const PixRGB<byte>& trackercolor,
00549 const PixPerDeg& ppd, const SimTime samplingrate) :
00550 SimEvent(src), itsData(d), itsTrackerNum(trackernum),
00551 itsTrackerFname(trackerfname), itsTrackerColor(trackercolor), itsPpd(ppd),
00552 itsHz(samplingrate)
00553 { }
00554
00555 SimEventEyeTrackerData::~SimEventEyeTrackerData()
00556 { }
00557
00558 rutz::shared_ptr<EyeData> SimEventEyeTrackerData::data() const
00559 { return itsData; }
00560
00561 uint SimEventEyeTrackerData::trackerNum() const
00562 { return itsTrackerNum; }
00563
00564 std::string SimEventEyeTrackerData::trackerFilename() const
00565 { return itsTrackerFname; }
00566
00567 PixRGB<byte> SimEventEyeTrackerData::trackerColor() const
00568 { return itsTrackerColor; }
00569
00570 PixPerDeg SimEventEyeTrackerData::trackerPpd() const
00571 { return itsPpd; }
00572
00573 SimTime SimEventEyeTrackerData::trackerHz() const
00574 { return itsHz; }
00575
00576
00577 SimEventHandTrackerData::
00578 SimEventHandTrackerData(SimModule* src, rutz::shared_ptr<HandData> d,
00579 const uint trackernum,
00580 const std::string& trackerfname,
00581 const PixRGB<byte>& trackercolor,
00582 const SimTime samplingrate) :
00583 SimEvent(src), itsData(d), itsTrackerNum(trackernum),
00584 itsTrackerFname(trackerfname), itsTrackerColor(trackercolor),
00585 itsHz(samplingrate)
00586 { }
00587
00588 SimEventHandTrackerData::~SimEventHandTrackerData()
00589 { }
00590
00591 rutz::shared_ptr<HandData> SimEventHandTrackerData::data() const
00592 { return itsData; }
00593
00594 uint SimEventHandTrackerData::trackerNum() const
00595 { return itsTrackerNum; }
00596
00597 std::string SimEventHandTrackerData::trackerFilename() const
00598 { return itsTrackerFname; }
00599
00600 PixRGB<byte> SimEventHandTrackerData::trackerColor() const
00601 { return itsTrackerColor; }
00602
00603 SimTime SimEventHandTrackerData::trackerHz() const
00604 { return itsHz; }
00605
00606
00607 SimReqVCXchanVis::
00608 SimReqVCXchanVis(SimModule* src, rutz::shared_ptr<ChannelVisitor> vis) :
00609 SimReq(src), itsVisitor(vis)
00610 { }
00611
00612 SimReqVCXchanVis::~SimReqVCXchanVis()
00613 { }
00614
00615 void SimReqVCXchanVis::preProcessing(RawVisualCortex *vcx)
00616 { }
00617
00618 rutz::shared_ptr<ChannelVisitor> SimReqVCXchanVis::visitor() const
00619 { return itsVisitor; }
00620
00621 void SimReqVCXchanVis::postProcessing(RawVisualCortex *vcx)
00622 { }
00623
00624
00625 SimEventObjectToBias::
00626 SimEventObjectToBias(SimModule* src, const std::string& objName) :
00627 SimEvent(src), itsObjName(objName)
00628 { }
00629
00630 SimEventObjectToBias::~SimEventObjectToBias()
00631 { }
00632
00633 const std::string& SimEventObjectToBias::name() const
00634 { return itsObjName; }
00635
00636
00637 SimEventTargetMask::
00638 SimEventTargetMask(SimModule* src, const Image<byte>& tmask) :
00639 SimEvent(src), itsMask(tmask)
00640 { }
00641
00642 SimEventTargetMask::~SimEventTargetMask()
00643 { }
00644
00645 std::string SimEventTargetMask::toString() const
00646 {
00647 return SimEvent::toString() + sformat(", [%dx%d]", itsMask.getWidth(), itsMask.getHeight());
00648 }
00649
00650 const Image<byte> SimEventTargetMask::mask() const
00651 { return itsMask; }
00652
00653
00654 SimReqVCXfeatures::
00655 SimReqVCXfeatures(SimModule* src, const Point2D<int>& loc) :
00656 SimReq(src), itsLoc(loc), itsFeatures()
00657 { }
00658
00659 SimReqVCXfeatures::~SimReqVCXfeatures()
00660 { }
00661
00662 std::string SimReqVCXfeatures::toString() const
00663 {
00664 return SimReq::toString() + sformat(", [%d,%d]", itsLoc.i, itsLoc.j);
00665 }
00666
00667 const Point2D<int>& SimReqVCXfeatures::loc() const
00668 { return itsLoc; }
00669
00670 std::vector<float>& SimReqVCXfeatures::features()
00671 { return itsFeatures; }
00672
00673
00674 SimReqVCXmaps::SimReqVCXmaps(SimModule* src) :
00675 SimReq(src), itsChannelMaps(0)
00676 { }
00677
00678 SimReqVCXmaps::~SimReqVCXmaps()
00679 { }
00680
00681 rutz::shared_ptr<ChannelMaps> SimReqVCXmaps::channelmaps() const
00682 { return itsChannelMaps; }
00683
00684 void SimReqVCXmaps::populateChannelMaps(RawVisualCortex *vcx)
00685 {
00686
00687 if (itsChannelMaps.is_valid()) LFATAL("I can only be handled by one respondent");
00688
00689 itsChannelMaps = rutz::make_shared(new ChannelMaps(vcx));
00690 }
00691
00692 void SimReqVCXmaps::populateChannelMaps(IntegerRawVisualCortex *vcx)
00693 {
00694
00695 if (itsChannelMaps.is_valid()) LFATAL("I can only be handled by one respondent");
00696
00697 itsChannelMaps = rutz::make_shared(new ChannelMaps(vcx));
00698 }
00699
00700 void SimReqVCXmaps::populateChannelMaps(EnvVisualCortexFloat *vcx)
00701 {
00702
00703 if (itsChannelMaps.is_valid()) LFATAL("I can only be handled by one respondent");
00704
00705 itsChannelMaps = rutz::make_shared(new ChannelMaps(vcx));
00706 }
00707
00708 void SimReqVCXmaps::populateChannelMaps(VisualCortexEyeMvt *vcx)
00709 {
00710
00711 if (itsChannelMaps.is_valid()) LFATAL("I can only be handled by one respondent");
00712
00713 itsChannelMaps = rutz::make_shared(new ChannelMaps(NamedImage<float>(vcx->getOutput(), "SaliencyMap")));
00714 }
00715
00716
00717 SimEventVisualBufferOutput::
00718 SimEventVisualBufferOutput(SimModule* src, const Image<float>& buf, const int smlev,
00719 const Dims& smdims, const Point2D<int>& retoff) :
00720 SimEvent(src), itsVisualBuffer(buf), itsSMlev(smlev), itsSMdims(smdims), itsRetinaOffset(retoff)
00721 { }
00722
00723 SimEventVisualBufferOutput::~SimEventVisualBufferOutput()
00724 { }
00725
00726 std::string SimEventVisualBufferOutput::toString() const
00727 {
00728 return SimEvent::toString() + sformat(", [%dx%d]", itsVisualBuffer.getWidth(), itsVisualBuffer.getHeight());
00729 }
00730
00731 const Image<float>& SimEventVisualBufferOutput::buffer() const
00732 { return itsVisualBuffer; }
00733
00734 const Dims& SimEventVisualBufferOutput::smdims() const
00735 { return itsSMdims; }
00736
00737 int SimEventVisualBufferOutput::smlev() const
00738 { return itsSMlev; }
00739
00740 Point2D<int> SimEventVisualBufferOutput::retinalToBuffer(const Point2D<int>& p) const
00741 {
00742 return retinalToVisualBuffer(p, itsRetinaOffset, itsSMlev, itsSMdims, itsVisualBuffer.getDims());
00743 }
00744
00745 Point2D<int> SimEventVisualBufferOutput::bufferToRetinal(const Point2D<int>& p) const
00746 {
00747 return visualBufferToRetinal(p, itsRetinaOffset, itsSMlev, itsSMdims, itsVisualBuffer.getDims());
00748
00749 }
00750
00751
00752
00753
00754
00755
00756