openjournals / joss-reviews

Reviews for the Journal of Open Source Software
Creative Commons Zero v1.0 Universal
700 stars 36 forks source link

[REVIEW]: Scanbot: An STM Automation Bot #6028

Closed editorialbot closed 1 month ago

editorialbot commented 9 months ago

Submitting author: !--author-handle-->@ceds92<!--end-author-handle-- (Julian Ceddia) Repository: https://github.com/New-Horizons-SPM/scanbot Branch with paper.md (empty if default branch): joss Version: 4.5.1 Editor: !--editor-->@zhubonan<!--end-editor-- Reviewers: @ziatdinovmax, @KoenImdea Archive: 10.5281/zenodo.12669343

Status

status

Status badge code:

HTML: <a href="https://joss.theoj.org/papers/dd610b087f2f82d4488515b21dfda185"><img src="https://joss.theoj.org/papers/dd610b087f2f82d4488515b21dfda185/status.svg"></a>
Markdown: [![status](https://joss.theoj.org/papers/dd610b087f2f82d4488515b21dfda185/status.svg)](https://joss.theoj.org/papers/dd610b087f2f82d4488515b21dfda185)

Reviewers and authors:

Please avoid lengthy details of difficulties in the review thread. Instead, please create a new issue in the target repository and link to those issues (especially acceptance-blockers) by leaving comments in the review thread below. (For completists: if the target issue tracker is also on GitHub, linking the review thread in the issue or vice versa will create corresponding breadcrumb trails in the link target.)

Reviewer instructions & questions

@ziatdinovmax & @jagar2, your review will be checklist based. Each of you will have a separate checklist that you should update when carrying out your review. First of all you need to run this command in a separate comment to create the checklist:

@editorialbot generate my checklist

The reviewer guidelines are available here: https://joss.readthedocs.io/en/latest/reviewer_guidelines.html. Any questions/concerns please let @zhubonan know.

Please start on your review when you are able, and be sure to complete your review in the next six weeks, at the very latest

Checklists

📝 Checklist for @ziatdinovmax

📝 Checklist for @KoenImdea

KoenImdea commented 4 months ago

Hi @ceds92,

Oh yes. As my last project with the Demo was without feedback I did not have the Z channel selected indeed. I did make sure that auto-save was enabled. I still believe that forcing it is better, and thank you for your change.

I still get the same error with the Z channel enabled however. I think this is due to how you grab the Z channel, in combination with some undocumented features of Nanonis. From my console, output of your program:

File "D:\Koen\Python36\Lib\site-packages\scanbot\server\scanbot.py", line 230, in survey ,scanData, = scan.FrameDataGrab(14, 1) # Grab the data within the scan frame. Channel 14 is . 1 is forward data direction

Now from the sxm result-file:

:DATA_INFO: Channel Name Unit Direction Calibration Offset 30 Z m both 7.500E-8 0.000E+0 0 Current A both 1.000E-9 0.000E+0

It seems that Nanonis is not consistent with its channel numbers for even the basic topography. You expect topography Z to have number 14, in my case it is 30. Which I also never would have guessed if I had not talked with another lab from the other size of the world. In fact, it seems that I have no channel numbers in the range [8 - 23]. V5e signal manager

My guess is that they will defend it as a feature highlighting the flexibility of their equipment. I am unsure if this change in numbering has to do with us having the V5e version instead of the V5.

As I do not know your code, I do not know if it is feasible to look for the Name of the Z channel instead of the number? If not, you can think about adding this as a parameter in the configuration?

ceds92 commented 4 months ago

Hi @KoenImdea,

Ah damn ok that's annoying, I guess it's good that you're testing with a different version of Nanonis because my aim for this project was for other groups to be able to use it if they like it.

Thanks for your suggestion, I will see if I can download that version of Nanonis and have a look into this over the next couple of days.

I will keep you posted and let you know when I figure it out.

Thanks!

Edit: with the framedatagrab function I believe it grabs 'slot' 14 instead of 'RT Idx' 30. Which appears to be Z in your version of Nanonis too. Nevertheless, I will have a try after downloading your version and let you know the outcome.

ceds92 commented 4 months ago

Hi @KoenImdea,

I contacted specs but unfortunately I am not able to install 5e with my licence. However, I checked one of our sxm files and in data_info, I see that Z is on channel 14, not 30 like yours. So it seems like the tcp command to get frame data differs between the two versions.

In version 5, channel refers to the 'slot' number.

In version 5e, channel refers to the 'RT Index'.

This is how it seems (I've sent an email to specs for them to confirm). I will take your suggestion and try to find the channel number based on the channel name.

KoenImdea commented 4 months ago

Hi @ceds92 , Thanks for looking into this. In my experience the manufacturers of SPM electronics for some reason like to have a few of these undocumented surprises. Which is why I really admire the statement in your paper trying to get compatibility with all (and seeing your efforts, you should get at least most) Nanonis STMs.

ceds92 commented 4 months ago

Hi @KoenImdea,

Sorry to be a pain, but since I don't have access to version 5e could you please let me know what the output is when you run the attached script with only the Z-channel highlighted? image

On version 5, the output is the following:


Slot number: 14
RT Idx 30
Buffer channels [14]

I just want to confirm the behaviour before I release the fix we discussed.

z-channel_check.zip

Thanks

KoenImdea commented 4 months ago

Dear @ceds92, I rather think it is me who is going to be a pain once you see the output of the script on my PC:

Traceback (most recent call last): File "D:\Koen\Python\scanbot-4\helper_script\z-channel_check.py", line 20, in <module> inSlots = signalsModule.InSlotsGet() ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Koen\Python36\Lib\site-packages\nanonisTCP\Signals.py", line 102, in InSlotsGet size = self.NanonisTCP.hex_to_int32(response[idx:idx+4]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Koen\Python36\Lib\site-packages\nanonisTCP\nanonisTCP.py", line 57, in hex_to_int32 return struct.unpack("<i",struct.pack("I",int("0x"+h32.hex(),16)))[0] ^^^^^^^^^^^^^^^^^^^^^^ ValueError: invalid literal for int() with base 16: '0x'

test_survey

ceds92 commented 4 months ago

Ok, thanks for doing that test @KoenImdea . I have received a reply from specs and I think I know what's going on. I'll fix it at some point this week and hopefully it's ready for when you get back

ceds92 commented 3 months ago

Hi @KoenImdea, I have been in communicating with specs - there is no way to obtain the version of nanonis using the TCP interface. To make Scanbot compatible with the different versions of nanonis will take some work. I need to rewrite parts of the nanonisTCP library to accommodate for changes to the TCP interface across different versions. It's not a huge amount of work but I'm pretty busy in the lab at the moment so it will take me some time to get to it (hopefully ~2 weeks). I'll be tracking this fix in the issue I created above.

Anyway, just thought I'd give you this update - thanks for your patience!

KoenImdea commented 3 months ago

Thank you for your work!

ceds92 commented 3 months ago

Hi @KoenImdea,

I have tested the fix for Nanonis version compatibility on the latest version of Nanonis V5 13520 (as well as my older version 11391) and they both seem to be working.

It is available for you to have another look when you're ready.

KoenImdea commented 3 months ago

Hi @ceds92, I think there is a curse on me. Now I just get a 404 in my browser. This is what my CLI says: `Successfully installed scanbot-4.4.2 PS D:\Koen\Python\scanbot-4> scanbot Initialising app... Loading scanbot_config.ini... WARNING: invalid line in config file: Loading whitelist.txt... No whitelist found... create one with add_user

The problem could be with my node.js. The node command and npm install command work (and I installed your App), but I always have the feeling something is not right with them on my PC. Which is one of the reasons why I tend to develop in Docker containers. However, I do not have one suitable to run your app as I maintain a separation between the ones running node and the ones running Python.

ceds92 commented 3 months ago

Hi @KoenImdea,

Thanks for trying to test again. Sorry to hear you had problems installing Scanbot - I have created a separate issue and will try to solve it there.

Just curiously, it sounds like you attempted to install Scanbot by cloning the repository and following the instructions here.

I usually run into that 404 error if I have forgotten to run the command in step 4:

npm run build

before running

pip install .

npm run build packages the front-end into a build folder which is where the server looks for the .js files. When running pip install ., that build folder should be copied to the installation location.

If you did run step 4 and this is not the case, I'll have to dig deeper.

Thanks for your time!

KoenImdea commented 3 months ago

Hi @ceds92,

Yes, sorry. You are right, that was a problem exists between keyboard and chair situation.

Your fix did something. Unfortunately, I'm still getting some errors.

Quoting everything would make my post way to long. I've tried to run one survey, and one bias dependent imaging. This is the output I get on the command line: PowerShell_output.txt Both routines seem to have problems with a empty or zero-size array.

Here are the two *.sxm files as saved by my Nanonis: ScanbotTests.zip

Cheers, Koen

ceds92 commented 3 months ago

Ok, thanks @KoenImdea. Apologies, I feel like I'm wasting a lot of your time with this.

Scanbot currently is running on two STMs here at Monash university (both with Nanonis V5) so I think there must be further incompatibilities with V5e. It's a little frustrating that I can't get a licence for V5e to test before I push through fixes hoping that they will work on your machine. I will try to contact Specs again to see if they can allow me something temporarily but I'm not sure how else to proceed here.

I'll let you know how I go.

Julian

ceds92 commented 3 months ago

@KoenImdea, good news... I have explained the situation to specs and they have agreed to give me a temporary license for 5e so I can solve these issues on my own instead of going back and forth.

I'll keep you posted.

Thanks

ceds92 commented 3 months ago

Hi @KoenImdea,

Apologies, I have not been able to attend to this yet as I am preparing for my final PhD review. I will be working on this again hopefully next week.

I'll keep you posted

zhubonan commented 2 months ago

@ceds92 Just want to give you a ping. How is it going? Hope your final PhD review is going well.

ceds92 commented 2 months ago

Hi @zhubonan, thanks for checking in. I had my pre-submission milestone (and passed :)) on Thursday so I literally started looking into this today.

I tested Scanbot on the latest versions of V5 and V5e (R13718) and it seems to be working. I was able to download the specific version of V5e that @KoenImdea is using (R11796) and I was able to reproduce the errors he is encountering.

So, I have narrowed down the issue to a specific version/version range at least. I am waiting on a reply from SPECS (vendor of Nanonis) to see if they can give me the release notes for the problematic versions. I was going to wait until they replied before posting anything here, but since you asked, this is the update.

I'll post another update when I know more.

ceds92 commented 2 months ago

Hi @KoenImdea,

After racking my brain for a few hours trying to figure this out, I received the below response from specs:

I have tested Scanbot on the 5e version you gave me (thanks for that!) and it seems to be working fine with Scanbot. I think the issue is with a specific version (or maybe version range) where FrameDataGrab is returning an empty array for the frame data. This behaviour is happening on R11796 (the version the reviewer happens to be testing on) but is not happening on the latest version I have (R13718). Please see the attached Python script I used.

I was trying to look in the release notes if there was something about this but couldn't find anything. Just wondering if you could provide some insight?

Thanks, Julian

Response:

Hi Julian, there was indeed a known issue with the API that returned the scan data. The indexing of the signal was wrong, so the function didn’t return any error but the returned data was wrong (or empty). It was fixed in the R12280 software release (November 2022).

I don't see an easy and clean way around this so I might just have to put a note in the documentation which specifies versions of Nanonis are compatible/incompatible. would it be possible to test Scanbot on R12280 or later?

KoenImdea commented 2 months ago

Hi @zhubonan , @ceds92 ,

I did the updates as suggested and all seems to work.

I filled in the checklist that was auto-generated before.

Please let me know what the next steps are.

Best, Koen

And @ceds92 , Thanks for your efforts!

ceds92 commented 2 months ago

That's great! Thanks so much for persisting with this @KoenImdea.

I guess, I have a few minor updates to make to the documentation regarding version compatibility but I think that's all from my end.

ceds92 commented 1 month ago

Hi @zhubonan I have updated the documentation according to Koen's recommendations. Is there anything else required from me?

zhubonan commented 1 month ago

Great, I will run some additional checks then we can move to the next stage!

zhubonan commented 1 month ago

@editorialbot generate pdf

editorialbot commented 1 month ago

:point_right::page_facing_up: Download article proof :page_facing_up: View article proof on GitHub :page_facing_up: :point_left:

zhubonan commented 1 month ago

Hi @KoenImdea, just to check - you would recommand for acceptance right?

zhubonan commented 1 month ago

Post-Review Checklist for Editor and Authors

Additional Author Tasks After Review is Complete

Editor Tasks Prior to Acceptance

KoenImdea commented 1 month ago

Hi @KoenImdea, just to check - you would recommand for acceptance right?

Hi @zhubonan, Yes I would.

zhubonan commented 1 month ago

Hi @ceds92 there are a few more things for you to do before I can move the submission to the next stage. Please make a release of the package and deposit to a publicly available repository (for example, Zenodo) to get an DOI. This DOI will be linked to the JOSS publication. Please see the author checklist above and make sure the metadata matches with that of the paper.

In the manuscript test, please make sure that the figures are cross-referenced (line 26 and 29 in the Draft).

PS: Other recently published JOSS papers can act as examples on how the archive DOI is linked with the paper.

ceds92 commented 1 month ago

@editorialbot set 10.5281/zenodo.12669343 as archive

editorialbot commented 1 month ago

I'm sorry @ceds92, I'm afraid I can't do that. That's something only editors are allowed to do.

ceds92 commented 1 month ago

Hi @zhubonan,

The correct version is 4.5.1 with the following DOI: 10.5281/zenodo.12669343

I have double checked and the meta data on zenodo now matches the JOSS paper (authors, ORCIDs, and licence).

I also updated the paper so the figures are cross-referenced.

Please let me know if there's anything else

zhubonan commented 1 month ago

@editorialbot check references

editorialbot commented 1 month ago
Reference check summary (note 'MISSING' DOIs are suggestions that need verification):

OK DOIs

- 10.1088/2632-2153/ab42ec is OK
- 10.1021/acs.jpca.0c10731 is OK
- 10.1038/s42005-020-0317-3 is OK
- 10.5281/zenodo.7402665 is OK
- 10.1021/acsnano.8b02208 is OK

MISSING DOIs

- No DOI given, and none found for title: Mimea Nanonis

INVALID DOIs

- None
zhubonan commented 1 month ago

@editorialbot set 10.5281/zenodo.12669343 as archive

editorialbot commented 1 month ago

Done! archive is now 10.5281/zenodo.12669343

zhubonan commented 1 month ago

@editorialbot set 4.5.1 as version

editorialbot commented 1 month ago

Done! version is now 4.5.1

zhubonan commented 1 month ago

@editorialbot generate pdf

editorialbot commented 1 month ago

:point_right::page_facing_up: Download article proof :page_facing_up: View article proof on GitHub :page_facing_up: :point_left:

zhubonan commented 1 month ago

Hi @ceds92 there are some inconsistency between the affliations of the authors with that in the archive. Could you please fix those? Otherwise it all looks fine to me!

ceds92 commented 1 month ago

@zhubonan Whoops, fixed!

zhubonan commented 1 month ago

Sorry, I forgot to say that the title of the archive should match the paper as well.

ceds92 commented 1 month ago

@zhubonan thanks, fixed

zhubonan commented 1 month ago

@editorialbot recommend-accept

editorialbot commented 1 month ago
Attempting dry run of processing paper acceptance...
editorialbot commented 1 month ago
Reference check summary (note 'MISSING' DOIs are suggestions that need verification):

OK DOIs

- 10.1088/2632-2153/ab42ec is OK
- 10.1021/acs.jpca.0c10731 is OK
- 10.1038/s42005-020-0317-3 is OK
- 10.5281/zenodo.7402665 is OK
- 10.1021/acsnano.8b02208 is OK

MISSING DOIs

- No DOI given, and none found for title: Mimea Nanonis

INVALID DOIs

- None
editorialbot commented 1 month ago

:wave: @openjournals/pe-eics, this paper is ready to be accepted and published.

Check final proof :point_right::page_facing_up: Download article

If the paper PDF and the deposit XML files look good in https://github.com/openjournals/joss-papers/pull/5618, then you can now move forward with accepting the submission by compiling again with the command @editorialbot accept

kyleniemeyer commented 1 month ago

Hi @ceds92, I made a few small fixes in https://github.com/New-Horizons-SPM/scanbot/pull/38, can you merge this?

ceds92 commented 1 month ago

Thanks for that @kyleniemeyer. I have merged the pull request