So welcome all to this new bias Academy course on image day in Fiji macro language. My name is Anna Clem. I'm working at the Bioimage Informatics Facility at SyLive Lab in Sweden and Before I start I would like to thank Fabrice Caudlier who contributed a lot to this material and also to Giovanni Cadone and Ophragualani. So in this session what we will do is to first have a look on the biological data set and the image analysis problem that we would like to solve and Then I will introduce you to how can you talk at all to Fiji? So what is the macro recorder and what are the building macro functions? And then the core part of the lecture will be to create step-by-step a workflow that Automizes this image analysis workflow. So the image that we are working with are images from the cell atlas or the human protein atlas and the aim of this project is and Was to determine for each cell a protein where in the cell it is look localized So what they did was they generated antibodies against 12,000 human proteins and then didn't immunostanings using 22 cell lines and Then after automatic confocal microscopy they resulted in 82,000 images and you can see some of these images here on the right So you can see they have three channels one is the nuclear in blue Then they have the microtubes in magenta and then they have the protein of interest Which is marked by the antibody and which is labeled in green now And then the question is to know for all of these proteins like where is this protein? So for example here in the upper left image the protein is everywhere in the nucleus Whereas in this image here the this protein seems to be only in nuclear membrane and For the session of today That's I thought we will focus on exactly that one subset of probe of problem So let's say we would like to automatic to ask and automatically quantify whether a protein is low accumulated in the nuclear membrane yes or no and Then what we could do is to automatically Find where is the nucleus and then to automatically find where is the nuclear membrane then to measure the mean intensity in the nucleus and the mean intensity only in the nuclear membrane and then you could calculate a ratio out of these two values and Because this is a course on image a macro writing and not so much on this workflow What I would like to do in this course is to just focus on this part on how do we Automatically get an outline of the nuclear membrane and then when we have this outline How can we measure the mean intensity within this selection? Before we really dive into scripting I ask you to do your first exercise and the exercise is that in Fiji Try to find a workflow that allows you to measure the mean intensity in nuclei and then also the mean intensity just in the nuclear band and The way you could do this or the way I imagine you to do this is First try to get the selection of a single nuclear I'm so for this you need to threshold your image You need to do a connected component analysis for the analyst particles command and then for one single Nuclear I try to get this rim Covering selection so for this you can use the make bands command and yeah, try to play around with this a bit So let's have a look on the workflow together So that is my image. It's a three channel stack So first channel are the nuclei the second channel is the signal and then the third channel are the micatubules and Then the first thing that I want to do is to split this stack into three individual images so I run split channels and this creates then three individual images and I actually do not need the microtubule image so I close this and Then these two I would like to rename so that it's easier to know what's inside So I want to rename the format channel one. I Want to rename to nuclei and The former channel to I would like to rename to signal and Then we will continue working with the nuclear image since this is our market and What I want to do now is to smoothen the image and then to threshold the image to get a binarized image So to smoothen I'm using a median filter Because that's a yeah, it's an edge preserving filter goes very well and I take a radius of 8 pixel. That's what I just tried out before and As you can see this value. Yeah, it looks quite nice because the nuclei get quite nice smooth But the overall shape is not changed too much then I can Set a threshold intensity threshold And I will use one of these Automated methods to determine threshold So as you can see the default method is not so great because there are quite many holes and here even like at the border They are whole so that is not perfect so I try to find a different method that is appropriate for this data set and Yeah, this one method seems to be good because yeah We have only one hole all other nuclear seem to be detected quite well Then I press apply to really create the binarized image then we have the binary image and I would like to fill this little hole So I'm running the fill holds command and then it's gone and Yeah, this looks to me like a quite good mask. So I see all the nuclei they look Yeah, correctly detected and Now the next step I would like to get the outlines of all the nuclei. So one single outline for each nucleus and I do this running a connected component analysis, which is the analyze particles command in Fiji and Here what I need to do is I need to tell Fiji to add the Royston to the Roy manager And I also added a minimum size in pixels So I would like to exclude particles that are smaller than 2,000 pixels Because knowing basic biology of my sample, I know that 2,000 pixels cannot be a nucleus in these specific images Okay so no, we have now all the Roy's and the Roy manager and I would like to First change a bit the properties only that's not Crucial, that's only that you can see it better Okay, and then Yeah, we can see now this Single outlines. That's quite nice and then now I zoom in into that one here And here I said, let's pick one and for this one Let's do this outline that just picks the outer border of the nucleus So I do two steps. I first shrink it and then I make a band so to shrink I used a large command and I use a negative number. So I using I'm using minus 10 pixels To slightly shrink the nuclei selection and then I'm using the make band command By 10 pixels and then you get a second line and our selection is really only what's in between these two lines Last thing I urgently need to do is to update the right So this will replace the formal right that there was this was the right detecting the nucleus by this new band shaped selection and Yeah, just want to show it to you again So this is now the final Roy now that we have the right. We of course want to measure with it and we want to do this in that signal image and So first I want to set what I would like to measure. So I go to analyze set measurements and then I Tell fidget. I want to measure the mean gray value and I want to display the labels So then when this is set, I make sure that the signal image is active I make sure my Roy is active and then once I've done this I press M for measure and Then it opens up the results window where we see the label and the mean intensity in the signal image But in this Roy of the band So this session is about how to automate these kind of work so basically want to move away from clicking and we want to teach Fiji of how to do this automatically and Probably the most important command that you need for this of today is the recorder So there's the command record and Then it opens up the recorder and the recorder Records whatever we do or most of things we can do in Fiji and translates it into the Language for Fiji So important is to check that we have the image a macro language. So it will record workflows or steps in to them image a micro language and This is actually also the default and Then once we made this sure we can just do something and see what the recorder is recording so Think it's good to show you this with a command that is not within our workflow a montage so the montage is starting now three images of our stack and Creates one image that has all these three channel next to each other and what we would like to do is We want to have three columns in one row and I would like to indeed have a scaling factor of one Actually, probably you have different values and you can change them and Let's have a slide border and The border then should have a color of White so I will use the fork on color in my case because my foreground color is white at the moment okay, and Then let's move to the recorder So we can see that the recorder was recording this command of making montage But and this is very important that also records all the parameters that I was setting So for example that I had these three columns one row Scaling of one and the border width of two Okay, so what can I do with this? I can now press the create button and then the same command will open up in what's called the script editor and We will see why this script editor so convenient later on but for now what we could now do is basically Open a new image and Then just press run and it would do the montage now for this new image Now obviously for one single command This might be not so attractive, but I guess it's very easy to imagine that it gets much more attractive as more commands you have and then Okay That's already nice and the last thing that I would like to show you also now Which we also will not use in the following workflow But which is super good to know is the batch processing so What you can do is to go under process batch and macro and Then this window Helps you to run a command on all images of one folder and then automatically Generates output and will save it to whatever folder you choose So we can try this out so we can now choose this command and copy it here and Then you can Choose Input folders, I will use to set out last subset all the image that we have here and an output folder and And then it will what it basically do it's will Automatically open images, but then run this make montage command and then automatically save the montage to the output folder So let's do this So it's actually doing all this in the background so we cannot see so much and but it looks like it's already done So we'll go there And then you can already see in the preview that it made all these nice montages And it also looks like they are different images Where it was doing this? Yeah Okay Very important thing to know about the batch processor is You I mean super nice super easy to use But you have not full control with this So let's say you would use the split channels Command as first command that is the first one that we use in our workflow And you would use this in this batch processor then yeah What would like how do you choose which of the split channels will it save will save all and I can tell you But not save all which a save only the first channel and so on so you Batch processor is nice, but you need more skills to really Determine what it should do precisely Good, but let's move back to our workflow so of course what you could do now is to do all the steps for our workflow which were like Splitting the channels renaming them filtering thresholding and so on you could now record them so you do all the steps and leave the recorder open in the background and To save a bit of time I was doing this for you and You can find these files under these ketchup files. So there's this recorded IGM So What I did was basically recording the workflow press create Then the audience commands were showing up in my script editor and then I was saving them and Importantly when you save your workflows, you need to have this dot IGM ending So maybe let's clean up first and now I'm opening it So for opening it just drag and drop it into Fiji. I Again will change a bit the font size Good and Let's have a look on these commands together So What I was doing is I was splitting the channels Then I was renaming the channel one or the image of channel one I was renaming it to nuclei and the image of the channel two of the former channel two I was renaming signal and Then I selected the nuclei image. I was doing a medium filter with the radius eight. So all of this was recorded. I Chose the one dark auto threshold methods and then I pressed apply and when you press apply then basically These two commands are automatically recorded Then I was saying Phil holds I was analyzing the particles again our parameter of 2000 and the fact that we want to add it to the raw manager were recorded and Then I was selecting one particular nucleus I Was shrinking it by 10 pixels and then I made this band shaped a selection with a bandwidth of 10 pixels and Then importantly I was updating this particular Roy, which was before the nuclei Roy And so I was updating it so that it's replaced with the Roy that is now covering only the Nokia memory And then for measuring I was first setting the measurements Saying I would like to have the mean intensity value Measured and then also I would like to have the label of the image displayed Then I was choosing the image that way I want to do the measurement I was activating the Roy that I would like to measure and then I was finally pressing measure Good and with this I would like to go to my slides so What I was showing you here was how basically the main message was that there is to record and how can you use it and Because we need the recorder to just cover the commands that we need for our workflow and What I would also like to point out is that You can always use the recorder and then save your workflow and like even if you don't want to go a lot into scripting in the future the recorder and then Creating a document in the script editor and saving it is super important for yourself for your documentation and for our reproducibility So in this exercise, I would like to ask you to try out the recorder So you should open the recorder and record the workflow that we discussed or at least some steps of it and Then press the create button and then this will open up in the script editor and the script editor Press the run button on an on the original image to see that. It's how it's running through all your work flow Let's go back to the recording workflow so what we can do is to open again the image and Then we can run it and I find it always pretty fascinating how can fall these windows P and that's all this measurement and Yeah, and then the final results shows up. So I think that's that's pretty cool But now of course Our enthusiasm basically is is stopped quite fast when we try to do this for another image So let's try this out for another image. Let's close everything and open another image So let's see a maybe this one So this has a different name and then when we try to run it Then it splits the channels, but then yeah, there's this error and it says no window with the title 7c1 711 d6 1 found and And So why is this happening? So in our workflow? We were splitting the channel. This is done But then it searches for this very particular file name which contains obviously the name of this old image and then When we look at these three images then obviously they contain the new file name and then The like Fiji cannot find this particular image and then it gives this error that we have just shown So to repair this and to work on this we need to use variables I would now do a super basic introduction into variables and for this I open a new script So I go into my script editor and say new and then very important you need to also here determine the language, so we want to do this in the image a macro language and I Double check the font size. Okay, so What you need to know is a variable always has a name and some content so let's say your variable is Name is my variable and then the content would be a number. Let's say 500 and Then very importantly in the image a macro language since Java based every line needs to be end up with a semicolon So this variable contains now the number for 500 and we could do a second variable and Let's say this would be two and then what we could do is some calculations with these variables So I could say I could create even a third variable and say the content of this third variable is My variable number Hasn't doesn't have a number my variable plus second one and Do this calculation? So this should be 500 times two and Then my variable three should contain the value of one thousand and I can See what is in the my variable three? What is the content by printing it? So I will close a bit what is in the background and So let's see what how this looks like so I'm printing it now and to to execute what is now in my script I need to again press the run button and Indeed so We see the number one thousand in our lock window. So one thousand is the content of my variable three, okay, so Also very important to know is what are comments so you can comment something out with these two slashes Meaning everything that becomes behind these two slashes will not be executed So if I try to do this again and run it again Then it runs and the science these variables So it kind of creates them and fills them with the values But it doesn't print it because the print command is behind the two slashes And you can also see that the color changes to green. So that's called the color coding color and coding code Okay, and so we use actually these commands very often to document what we are doing to explain a bit better What we are doing? So I would like to now introduce you to what's called string variables So here we had numbers and Like variables that are filled with numbers and now we will look at variables that contain strings So maybe it's called my string and a string is any kind of text. So it could be a single letter or It could be a word Or it could be an entire sentence like an entire sentence including spaces and symbols and whatever so the Standard sentence is this and then again to See this in the lock window. We need to print it so we could And now print out the string number three And run all of this so we see still the old printing the 1000 and then we see the printing of the my string three, which is hell word and So to mini summarize this when you have a string So some text content you always need to have these quotation marks So whenever you have quotation marks, then Fiji knows this variable contains a string And just a side remark like compared to other languages You do not need to specify what kind of variable what kind of type your variable is so here This variable would contain a string and here it would contain a number And in as you can see here in Fiji in the image-day macro language You can just assign these variables and don't you don't need to specify before that it will contain a string Okay, then Maybe we can just comment these things out and Next Thing that I would like to show you is the plus operator when you have strings So when you have strings and you use the plus sign Then the strings are kind of glued together. I mean obviously when you have a plus sign with the numbers then they are added up But when you have the strings, they are simply glued together. So let's try this We can have a new string And this would be my string plus my string two And we print it out Then it will glue together a and dark to And as you can see it really glues them together directly. So it's no space and nothing So if you would like to have a space what you could do is for example include one So this basically now glues together Plus an empty like a space a string Containing only a space plus and so again gluing together the content of my string two Let's try this out So now we have the space between a and dark And something that I would also like to show you is that you can do this print clear And then the lock window is always cleaned up before you. Um, yeah, it was always cleaned up Mm-hmm. So final things that I would like to show you is Let's say you would like to do um The following so in image a micro language what you can do is kind of dirty um Gluing together numbers and texts So we could do we could print out for example my variable Or let's say dark my string Plus my variable So basically you are what what this doing is Is gluing together the dark with a 500 and what is um to point out here is that My string is a string obviously and my variable is a five fun. It's the 500 is a number and What's happening is that the my variable is now basically Translated into a string and then both of them are glued together So this would be string plus number and this is something that would not is a bit dirty it would not work in other languages Okay, let's do small exercise. So let's say you would do something like that We would say a equals three and b equals Five and now we want to print out a plus b Then you can guess what is the output of that And the output will be 35 Because we have the quotation marks here. So whatever is inside quotation marks is a string is treated as a string and we said when we have a string then the plus symbol is a concatenating it's called the glute together it's gluing together these two strings and Maybe another last point, which is a popular mistake. So let's say We would now we have our string A variable called my string for And then somebody does this Then what would the output Be here So the output would be not the content of the my string for variable, but really typing out my string for so let's see this So indeed it just prints this to the lock window So our next exercise would be that you try out variables And so the way I imagine this is We saw that we have these two lines and in these two lines You are expected to now use a variable instead of typing in the name directly so first step is that you create a variable with the name title and you assign the string of your image name And then the task of the exercise is That you replace these two yellow parts with the using the variable title And what I will do now is to first copy These two lines these few lines in a new Window, so I open the new script under find new And then when I have the new script I change the language jm jmacle And then I copy it now these lines And I also want to directly save this So I would like to save this Yeah, maybe I know workflow new bias And then when I save as I said you need to do it a igm So before I do anything I want to Create a variable that contains the file name we So this is the file name from our example image and I close with a semicolon so that variable called title contains now a string We can see this with the quotation marks that contains our image name And then what we could do now is to use this variable Here in these two lines So let's try this out. So I will just that you can see this better. I will copy that line Maybe already Inactivated by commenting it out And then see what we can do So this line contains this one string which says channel one and then the trial name And this would be exactly the same as writing This one so we basically dissected our string and gluing glue glue them glue it together with a plus sign So that would be exactly this line and this would be exactly the same And then obviously instead of entering here the file name we could use the variable title And then for the channel two we could do exactly the same thing. So again Now I am jumping over this because we have seen this So I'm using again the variable called title So let's try this out with our file So I'm using now again the same the image and run it And I did a typo so We will talk about a bit about errors in a second, but it's pointing me to line seven And it says it's missing Uh-huh. So it has some problems here and indeed I forgot to enter the plus sign. So let's do this So we wanted to glue together these two strings for the plus Good So we can try it again and let's see Yeah, so I was splitting the channels and was re-naming them successfully. So nuclear signal And then obviously What we should be able to do is now If we have a new image with a different name Then at least what we can do is Uh to change the variable that contains the image name to the right name So at least we had now to change it only once and not in these two lines But yeah, we will work on an ultimate way obviously in a few moments Good, so I adjusted the content of the variable title and then my little code snippet is also working now for the new image So it's nice that we need to change now the name of the image only once and then we can use this in these two lines here But of course what we would really like is that fiji tells us automatically the name of an active image And of course this is possible So to know how we can do this What you need to know is that there are these what's called built-in micro functions So the built-in micro functions are all available functions in the in the image in macro language And we have seen while using the recorder We can get some of these commands and some of the functions, but we cannot get all of them And then this website lists all So what we need for our problem is a function that is called title So the title function it says it returns the title of the current image And that is exactly what you need of course you need to know that the title is the image name But then we can use this So in our workflow what we can do is to Introduce now Just get title function And then also what I haven't pointed out yet But while you are typing Then you can see that these windows open. So this is the code code auto completion And We would like start typing this get title and then Here's the get title function that appears Then you can also see that there's the same documentation as there was online appears also in this little window So we can double click here to insert it And what we would now do is we would take the function And Place it here So the get title function then gets the image name and the output of the function would be saved in our variable title We can now try this so let's open an image and Then we just run it And as you can see it is successfully Splitting the channels, but then also renaming them Let's talk a bit more about this built-in macro functions So we've seen the get title function, which gives us the image name But there are also other functions or types of functions. So for example, there's the stack set channel function And we give it the parameter one and then it activates the channel number one in a stack So it does not have an output a real output And in our get title function, we had an output which was the image name and then we saved it in a variable Then there are also functions that look like this like the get dimension function And here this get dimension functions has output, which is the width the height the number of channels number of slices and the number of frames And we would save it in variables that we pass on as parameters within these brackets So we could name them in any way we want But the order of how get dimensions outputs this information is in this order and also, of course the common source of mistakes So when you use such a function, then of course you could use the wrong spelling and so on But then also what's quite popular is to use extra brackets that you don't need or use the wrong kind of brackets And luckily We get errors quite good error messages in an image j macro language and When you look more precisely at the error, then You can see that Would get you the error in which line would you find this error and then also Using these kind of brackets. It shows you where it expects the error to be So in that example it Says something is wrong with this bracket and indeed that's the example where we had the second bracket So important message here is yeah, I really read the error messages before clicking. Okay Yeah, and we also had a look at the auto completion So actually when you use this and double click then at the right command Then you already avoid these stupid spelling errors So in this exercise, I would like you to simply catch up with the script and Include the get title function And then I would also ask you to try out what happens when you run this function here The get dimensions channels hide with sizes and frames So you can use the print function to Control what is inside of these variables And then I asked you to look in the slides or on the building macro function websites or in the auto completion How the correct use of the get the get dimension functions is and what do you what we are doing wrong here? For now, what we have done was to split the channels and rename them And then the price before we were now normalizing these file names that we do not need to enter the one specific file name And then the next steps of our workflows are that we take the nuclear image filter it set a threshold Binarize it and then fill the holes And then we use the analyze particles command to get the outlines of the nuclei and add them to the raw manager And these steps I would like to now include in the script so I can go back to my script editor and go to the recorded workflow and then Basically what we can do is just copy these lines until that the point where we really select a specific row So I just copy them and paste them And then this is also a good This is a good moment to annotate our workflow so we could say the first step was to split the channels and normalize The image names And then here what we are doing now in the new steps is to filter the nuclei image and threshold Set a threshold set a threshold And then the last step is I mean the last step for now is to Get the Roy's of all nuclei in the raw manager using this analyze particles command And let's also save it Good and However, I would like to do one thing and this is um I would like to give the user the opportunity to change this parameter of 2000 pixels So imagine The user now have has new images of a new cell line and in this cell line the nuclei are much smaller And then it could happen that we exclude nuclei because we have the size limit so what we will do is to Again copy this line that you can see what is happening but we will Use a built-in micro function that is called get number And then we can have a look at the documentation and it says get number It displays a dialog box and returns the number entered by the user So that's good and use it so um It has a prompt that is the text that is displayed when we have When we ask the user for the number and then it has a default value So let's try this out. So we could ask the user to enter minimum size of the nuclei And then as a default value we could use these 2000 and We so this will open a dialog box. I will show it in a second and then We need to save whatever the user enters in a new variable. Now we call it min size And this will save the output of this dialog window So let's have a look. So what you can do is to select only that one line Go to run and then run selected code So this will execute only this one line and then okay, we get this dialog window Here's our prompt where we say enter min size of nuclei and here are our 2000 pixels default value so What happens now? If I press okay, then the value of 2000 will be saved in the variable min size And if the user changes this value to a different number, let's say 700 then This 700 pixels will be saved in the min size Okay So Now this is already nice. We got the number from the user. We saved it And obviously we now need to use this variable in our analyze particles command as it was recorded So this I prepared before I copied it just for you to Compare it. So the original line was this And then again as a first step we could dissect This um long string Into three strings So again, um in the command basically we have two strings one is here And one is here and we are working now on the second string And the second string I now dissect it into three parts, which is one string Glued together with a number glued together with a second string Okay, so that would be this in this line would be exactly the same as in that line and then Obviously what we still want to do is now to exchange this 2000 by the minimum size variable So we can have a look and We first save it We'll open again one of the images And then run it So it's now asking us for the minimum size of nuclei And we could maybe really Enter a very low value and see whether these small particles are included. So I will do two And then so these are my Roy's and we can For now show them all Yeah, and then you can see that these two particles are not excluded Because the minimum size entered was very small So now we are already gotten quite far So we spitted the channels and renamed them We created the binary image and We run the analyze particles command And we gave also the user the opportunity to enter minimum size of the nuclei So for the next step what I did when I was recording it was that I selected one specific nuclei Roy I Shrunk it by 10 pixels and then I made this band shaped like selection with a width of 10 pixels And then finally I was updating this one Roy and by that replacing the nuclear Roy with a nuclear membrane Roy And obviously what we want to do is We want to Repeat these steps not only for this one specific Roy the idea seven, but we want to repeat it for all Roy's that are in the Roy manager So what we need is to loop our code and we need something that's called for loops So this is now to introduce you to for loops. And so what are they and how are they used in the image they micro language And let's have the following example. Let's say you would like to Express your enthusiasm for a new bias academy. So you could write not new bias academy Is great And since you're so enthusiastic you want to do this not only once But several times Let's do it three times Okay, of course now if you print this Then it will repeat this statement But obviously this is not a very good way of doing this. So we want something automatically that is repeating pieces of code in a controlled way So to do that Um, there's something called for loop. So when we start typing for you already get the template of such a for loop So let's use this template And if you press return, you also get a second curly bracket So what do we have here? So this is Basically a statement that helps us repeating code In the round brackets, you can see how The code is repeated some rules And then in the curly bracket, you will put what you want to repeat So we want to repeat this new bias academy is great statement So what I did now was just copying it inside the curly brackets So this part of the code will now Repeat it 10 times. So if we run this will be 10 times And I will also Use again this print clear statement in the very beginning to always clear the lock window Okay, so let's have a look on this part of the for loop so This one tells you where we start our loop This one is how long will we get going with our loop? And this is a step size. So we start And basically it's a bit fancy way of counting So we start by setting i to zero Then we ask is i smaller than 10 If yes, this will be printed Then we will increase i by a certain step step size And this way of saying i plus plus is the same as writing i plus equals one So i plus is our step size and our step is one Um, so this is how we are counting But we can also use our i so we could for example just print it That is actually helpful for understanding the loop So let's run this again And then you can see, okay, we started with i equals zero And we have a step size of one So the next time i is one two three four five and so on We end up with nine the next one step one would be i equals 10 Then i is not smaller than 10 anymore and this will not be printed anymore Just as another example, let's say we would increase the step size to two Then obviously you will only get five steps zero two four six eight When we go back with this new knowledge about for loops to our workflow Then we said, okay, we need to look now these four lines In such a way that they are valid for all roys in the raw dimension. So what i'm doing is Copying these four lines for now to my newly built workflow And so this is still not good because we are selecting this one specific row and then do everything on this So we what we want to do is basically to create Roy or Roy's For the nuclear membrane and we'd want to do this For each nucleus So we somehow need a for loop obviously And we need to do to know several things. So we need to know how many Roy's Do we have in the Roy manager? So how do I get this information? and we also then Need to know how to select the different Roy's in the Roy manager So to get the number of Roy's in the Roy manager They are these Roy manager functions and they're like These are is a group of functions that all have to do something with the Roy manager and there's this one Which is called Roy manager count and then the documentation says it returns the number of Roy's in the Roy manager list So that is that is exactly what we want because we want the number of Roy's Okay, so I double click to get it and again to kind of save this Number I want to create a Variable and I call it and Roy's And then We need our for loop. So I start with the template press return and start moving everything in inside the curly brackets and What I do is to indent the code. So everything that is Inside my for loop is indented And that is something that you do not need to do in Fiji. So it's not mandatory, but it's It's still very important to do so because it increases readability of the code Okay, so this is Already looking quite nicely. So we start at I Is equal zero because When we use this Roy manager select function to select the very first Roy Then we need to say select zero because the very first Roy has the idea of zero And then so of course then in the in the for loop what we would do is then to use the I which starts by being equal to zero And then so this is good for the start and then the step size is fine So I told you I plus plus means we are increasing I every time by one by one by one step and then We just need to tell where to stop And here we are using our n Roy's variable So again a number of Roy's let's say you have 10 Roy's in your Roy manager Then n Roy's would be 10 But since the last Roy's or the 10th Roy will have the id number nine We need to stop When we are smaller than n Roy's Okay, so let's try this out I will open the file again And then I will run everything And so it asks me again for the minimum size of the nuclei And now you can see nicely how it is looping to the Roy manager And we can just open anyone And have a look Okay, so we are now at the final steps of our core workflow And what we want to do is basically to measure Like the mean gray intensity in our nuclear membrane Roy's Using the image that we call signal So this is the main thing that we want to do and then obviously would like to also save these kind of measurements And do some preparation steps and this is all what I would like to show you now And okay to do the measurement Uh, obviously to do one single measurement of one Roy what you could do is to activate the Roy and then press measure However, there's a little trick if you want to measure measure all Roy's and that is if you make sure that all Roy's Are deselected so that no single Roy is selected And then you can press this measure from the Roy manager and then automatically all Roy's will be measured So we can try this out So we can go to our workflow and Say we would like to measure something measure within signal image And then if you remember in the recorded workflow What we did was to first set the measurement and say We would like to measure the mean intensity and we would like to display the label So this is important to do and then obviously also we would like to select the signal window Because that's the image that we want to measure in So I just copy these two lines and copy here Okay And now we can do these two the kind of this trick of saying we want to deselect whatever there is in the Roy manager I mean we want to not have any Roy selected. That's what it means And then once we have done this we can run the measure command to measure all Roy's of the Roy manager Let's have a look on this Okay, so I'm opening an image And it should ask me for the minimum size It's looping over all Roy's and it's doing the measurement for all 14 Roy's Okay, that's nice and Then let's continue with the preparation steps. So I go back to my slides Okay, so This is quite nice and Of course now we would like to save the measurement And this is really now the the time to think of okay Are we doing everything correct and are we preparing our macro in the right way? And in particular, let's have a look on the Roy manager Let's say you have done this measurement now for one image and you open up a new image then Inside the Roy manager, there will still be the Roy's of the old image And it will do then the measurements also for that Roy's that are from the old image also for the new image And that is something that of course we don't want at all So before we do anything we want to In our workflow we want to clean up the Roy manager And then now in this last step what we did was measuring something And then we would also like To make sure that before we do anything in our macro We want to make sure that there are no no old measurements in the result window So basically you could just copy these two lines from the slides And say okay, I would like to Um prepare my And like prepare for new evaluations By doing these two steps So now we are sure that whatever we measure and whatever we have in the end is really from that image that we had opened and we can Then run everything get our final result table which only contains measurements of that particular image And then finally we can save the result now that we are sure that results are clean So for saving anything in figi, there's the save s Come out So you can see that it has a format and a path And the format is in this case So we want to save at that moment. We want to save a result our result window So we need to tell it that the format should be results as a string And then we enter the path So let's use this. Uh-huh. I'm opening the documentation instead I want to double click here so We are want to save in the You want to save the results and then For the path we can basically just copy here And the only thing that you need to be careful When you enter a path is okay first We need to say this is a string Then we need to say this is what is the complete path. So we could call results csv And if you're attentive, you see that somehow is is a string, but the color coding is not magenta And the reason is that we have these slashes and you cannot have a single slash in it within a string So what you need to do and this is a bit dependent on whether you're on a mac on a windows Is that you Either you use two two back slashes Or what I could have also done is instead of two back slashes to use one slash So I'm using two back slashes And then we can have a look whether all of this is working Actually, I think I will leave these open because then we can have a look whether Results window and the rhymes are properly cleaned And I will open an image And then now I will run Okay So in theory, we should still have only 14 measurements. Yes And we should have only 14 rows in the rhyme engine Okay And then now the exciting part is to check whether we have our results and that was already So we you can drag drop such a result file just in figi and then you get The measurements in figi Um, what we will do next is some extra steps and the first one is that we have For now we have a workflow that runs on your active image So we were opening an image and then we press run and then string these things very nicely But in our image folder, we have I don't know how many but we have uh several images And we would like Now that it opens automatically an image does all of this saves everything opens the next image and so on So we need a basically a for loop that works over all of our images And what you need to know for this are Some essential commands and one is the get directory command So the get directory is a user input And the user selects a directory and then the output of this function is a path to this directory And then once you have the path as a stream You enter it to the To the function get file list And then the get file list gives a list An array of all your images and we will talk in a second about what are arrays And then once you we have this kind of list of images we can do a for loop One over the next images in this list and Do our workflow So let's have a look on arrays. So we have seen before variables were containing one number of one kind of string And the special thing about arrays is that they can have the several values So they have basically different compartments where you can save individual values So let's have an example of this. So this is a array with the name fruit and it has four compartments And then you can fill out these compartments. So you could say the first compartment Contains the string apple the second orange and so on And also here I want to point out that the index of the first compartment is zero So a bit like in the row manager. The first row was zero And very useful functions are If you want to print such an array, you cannot just say print fruit. This would not work What you need to do is to use the array print function. So it's a array array print fruit And especially important for looping over such an array is the dot length function So if you say fruit dot length, it will give you How many compartments there are in your array and then you can loop over it So now let's see how we can use this knowledge about arrays for our workflow and So I go back to this example And here what I told you was we can ask the user to to choose the directory where the files And then using the file list function We get an array which lists all the images. So it lists all the image names of all the images in that directory So this is an array and every compartment in each compartment. You have one file name And then we can loop over this file list array and The first image will have the idea of zero because we start indexing with zero And then to know how many images are in our directory. We use this dot length function To go back to our workflow This is how it would look like so We again also would use this to be asked to user we get the file list And then basically we will take all our of our code and loop over it for all our files Ideally you would use a function and make it a bit more clean, but this is just an introduction of image macro writing Okay, what else do we need to consider? So Maybe first the saving When we were saving before I was just calling the files results plus in file ending and This of course now would result in that we every time we have an image we will we would overwrite it We would create a new file called results every time we run over an image And that's of course not nice. And so what we could do is we could Insert the name of the image in our file part for saving And by that we will have one specific file for each image And then Also, what we need to consider is the preparation So we Already had included that we cleaned the raw manager and that we clear the results Also, what we need to include now is that we first close everything that is open And this is obvious because when we have like the first image then In the end we still have kind of these split channels open And then these would be still open when we open up the next image. So that's bad We can close all open images using this command And then finally We indeed need to open our image. So when we were not doing dispatch processing We were always opening an image that we had an active image And then we were pressing run and the script editor to run our workflow But here now we need to also automate that the image is opened And then what it's nice to do Is to print out which image are we working on? So to include this in our workflow, I will now switch back to my desktop Okay, so to use this now in the workflow what I could do is To be a bit lazy and just copy it from the slides So I copy these two lines or actually these three lines until the curly bracket So asking the user for the directory getting the file list and starting the loop I will just copy it inside my code And then you can see there's the curly bracket open Then I want to really have all of this inside my curly bracket And I make sure I indent it To really know where to close the curly bracket and then while closing you can also see in the script editor It shows you which curly bracket are you closing here? That's very helpful And then also I would like to save now this workflow under a different name So always use the dot igm ending Okay, so that is now the looping And let's look at the other steps that we need So we said we need to Also close all images not only clean the rowing manager and to clean the results And then obviously we should do this before we Open any image and before we get any image names. So I will move this down And then we need to now open the image and again The open path is The part of the directory plus so concatenate together with the first element or the element in the in our file list array So the first one would be zero And then it's also nice as I said to display which file we are processing So again, we want to do this before we get any image name And let's also document it a bit Open Image That maybe is a bit obvious Okay, so we are opening it. We are printing it out Then once it is open, we are getting the title and we are splitting the channels and we are doing everything And then until the very end there we said we need to Save it now under a specific name So again, this is a string from here to here. That is our path and we would like to now Insert our variable holding the image name. So What we can do is We can use the title Variable also we could use the file list f very um, we are variable And then let's do an underscore here that we get a beautiful file name Okay, and with this I added everything that we need I would like to point out one more thing before I start this And this is that we have now with um nest for loops so we have One for loop here that is looping over all our images and we have one for loop inside that for loop Which is looping our overall our voice And here it's really super important to use different counter variables. So here we have an i And here we have an f so I like to have f for file And because otherwise you really mess it up. So you you would start then Um with a f setting f or if you would have an i here you would start setting i equals zero Do some steps and then here you start modifying the i so that is messing it up. So And it's a very popular mistake Okay and then So then my output path. I was this folder. I cleaned it now for demonstration And we can now run this And I would need to go to my files which here and here So I'm picking the directory and now it's working on the first image in my folder and it's asking for the minimum size of the nuclei And It was doing something with results, but it's so fast and cleaning it immediately But you can see them the results appearing very quickly And then as you can see It's now working to all of these files in the directory But it is asking for the minimum size of the nuclei for each image And this will be the last thing that we will work on in this workflow So I will Actually now not clicked over all files. I think these were 12 files or so But I will cancel it now because Since we are saving already for each single file For each single image. We should have something in our output folder already And we have it So you can see that every csv file has now the name of the image plus results And you can just drag and drop them into pg also to to reopen them Again, ideally you would get rid of this dot tiff file ending you can do this very easily in fiji, but Yeah, there's an introduction into image in macros. So we want to be a bit fast I guess everyone was slightly annoyed that when we were running our macro over all images in the folder Then for each image it asks, um, what is the minimum size of the nuclei? And this is actually not only annoying, but it's probably also wrong because when you consider In one folder you have probably all images of one experiment And recorded under the same using the same settings of the microscope and then You you don't want to use different parameters for your analysis of for each single image But you want to have one set of parameters that you use for all images of your folder So ideally what we would like to do is to ask for the minimum size of the nuclei in the very beginning for the very first image and then to use the same parameter for all images And So what we want to do is what's called a conditional Statement. So we want to ask this. So this was the line where we're asking the user to enter the number And we want to do this only for the very first image in the folder So what you need to know for this is what's called an if statement or conditional statements So conditional statements are parts of the codes that are That are executed Only if certain conditions are true So you could ask so you have in this example here you have a variable called i And uh, this is zero And you could ask is the variable i bigger than 10 And if this is the case then the lines that are in the curly brackets are executed If this is not the case the lines inside the curly brackets would not be executed You can also of course ask if something is smaller smaller or equal And then very important if you can ask is Something equal then you would need to use two equation marks And you can also ask if something is not equal then you would use the exclamation mark and the equation sign This is basically all that you need to know for this workflow, but of course For your future scripting It is very important to know that you can Also have like basically different cases. So you can ask if Something is true And then to execute something else if this is not true Or you can ask for different alternatives So if i is has a certain value do this and if it has a certain other value do that and so on and So let's do this for our Workflow So this is very simple so we have This min size we are asking for this and We want to only ask if it's basically the first run of our loop And we if we go up again We get remembered reminded that The first run has then the f This counter variable f equals to zero And then we could go back and say if f Equals to zero And again, I'm telling you that to ask if something is equal. You need these two equation marks and then We need the curly bracket and inside the curly bracket We move whatever we want to have executed only in this specific case So for the first run it will ask for the min size And save this and for the other runs This will be saved and then or like already before and then used So we can test this again Safe So I should not need to close anything because everything should be closed within our workflow So i'm picking the right directory And I should be asked only once now And then for the next images it should just run Yeah, and it does this So that's good So with this we've reached the end of the session So I hope if you learned that there's the macro recorder There the building macro functions you've seen what variables are and you've seen how to ask for user input We have looked at the looping Overcode and we've also looked at how to loop over several images in a folder And we've used the areas for this and then in the final step We have seen the conditional statements in form of if statement Last points that I would like to point out is the bit of general good practice when coding so What I tried to use was Using meaningful variable names. So if you use for example the min size when I was asking for the minimum size of the nooklai Then if you have variables that you use more often in your script Then it's good to assign it in the very top of the script And Also, what we have done is to use comments. So we documented What we are doing using the comments and this is good for you When you come back to your script like after two weeks or so or after two years and of course also for others Then Forward reproducibility It's really very important to have this initialization or preparation code that we also had So to close the windows to clean the raw manager to clean the results table and so on We have not saved quality control files But you should do this actually so you can quite easily save the raw manager Or you can also create overlays of the roys over your images and save them under a new name And then we have used file names that refer to the original files So when we were saving the result windows in the end Then we were taking the original file name of the image for saving the result csv file Then what we have not done and what is also very important Is to save the parameters used with Other results so we you can see this now in the next slide actually. I've done this in the end so In our example We are asking the user to enter a minimum size of the nucleus So and if this one this is changed, this will not be documented at all in the marker as it is for now This would be very bad Okay, and also save the macro itself and document its version And then also consider sharing a marker when you publish something You can share it probably as supplementary information So Where to continue from here? So first you can look a bit more detailed on the slide. So I have not covered everything that is in the slides and then um You can also check out what I called a sneak preview igm So I have one macro that is the continuation of the workflow that we have until now And I told you in the very beginning that it would be nice to not only measure the mean intense need nuclear membrane But also in the nucleus and then to calculate the ratio. So this is what I tried to do then in these added steps And from the scripting side, what I tried to do is to Show you how to customize the result window How to get basic statistics of Roy's using the get statistics command? And then I also included the wait for user command just to show it to you So this is basically very simple. So it just opens up a small checkbox Where or a small Dialogue where you need to say okay as a user and then until then The macro is is stopping And that is quite easy way of debugging your code or wait for user interactions And then further of course you can continue With the resources that are online. So there are many resources online. There are of course other youtube videos and they are On the image.net there's an introduction into macro programming And there is the forum On the image dot s c So there there will be a threat linked to this video And of course you can also ask questions there and it's a very active forum And then there is the bio image data analysis book which you can freely download And they are the chapter three is only about image j macro language And with this I come to the data resources. So we got the images from the human protein atlas And you can find more information in the paper and also online Good and with this I would like to thank you all for your attention and I hope you had fun


Mustangs to inbound, it goes to Rhodes, Farside to Tentley, back to Rhodes they head to Waldrich they break the press now Farside and Riley comes nearly comes way to the turnover it's to Terrell oh he got away with a walk but he scores Terrell didn't dribble but he gets the basket and it's a four-point lead once again


Welcome back agent nation. My name. Ah, you guys know me as agent beam star. Let's get There's a lot of stories today subscribe to the channel if y'all want to keep up with the news Let's get right into it for our first story of the day Ladies and gentlemen, Ronnie 2k was on a stream with the one and only Chris move and they were dropping all kinds of gems about Mba 2k 19 so in this brief little segment I'm gonna break down all the important points as fast as I possibly can one it takes about 200,000 VC or as Chris move said 190,000 VC to upgrade your player fully so the reports that 2k was gonna reduce my co-transactions Obviously a lie. I called it out news gonna be a lie But from what it seems it doesn't seem like the VC prices have went up so that might be good news Ronnie 2k even said this on his livestream that there's a lot of ways to get VC now Yeah, they really like added a lot of ways and it's it's it's gonna be pretty nice look the whole point because the whole point is We want people to play and engage the game It's this this VC thing is about separating Like people that are grinding versus people that are not and that's what the objective was last year We got away from it a little bit admittedly especially early then we fixed it So There's a lot to do and we want to engage you for playing the game So you guys will see a lot of that I think Ronnie thinks that the problem was fixed after they reduced the prices of some haircuts and some shoes and accessories It wasn't 2k is still probably the picture-perfect definition of a pay-to-win game on top of the $60 price tag on top of The fact that this year you have to pay a hundred dollars just so you can get the game four days early So no one's even talking about that Ronnie. I just want you to know the problem is not fixed There's still a long way to go micro transactions But I guess the good news is unlike every other 2k the past four or five years It doesn't seem like it's gotten worse But we'll have to wait and see to get some details on how much VC cost how much packs cost all of that good stuff And and also if boosts are still in the game next up according to Ronnie 2k and Chris move You can now change your jump shots and your clothing on the got next So you don't have to walk all the way back to your micro or walk off the court and lose your streak Just because you want to change your jump shot. Unfortunately, it seems like road to 99 is making a return the language Ronnie 2k use You just want to dance around the subject to not make it obvious But everybody in the chat made it clear and there's even some people on Twitter taking clips and showing like oh damn it Man wrote to 99 is back There was even a point where I think it was Ronnie said something or it might have been Chris move If you upgrade your player and you make a new player you have to start from the beginning So that's a lot like road that wrote to 99 and it's very different from the rep system We had in 1716 and everything before that apparently there's some massive pro m news They're gonna announce at the NBA 2k league finals on Saturday They didn't say what it was but we could assume private prime is gonna be announced We could assume new court design features are gonna be announced at the NBA 2k league already had and hopefully a whole host of other Stuff they're hyping it up like it's gonna be something massive. Hopefully this is the first year We're madding. I mean not madden. Sorry. Don't care about madden at all We're prime gets a massive improvement and I'm hoping to see that this next bit is kind of funny Apparently the character in the my career story is gonna be nicknamed AI I guess it's like a tribute to Alan Iverson because he was on the first four covers of NBA 2k And so Chris move loved the idea and he said listen Why don't you guys do something like this for everyone's players so you can use their initials so my initials is Agent beam star you can call me a B So the commentators use the words a B to reference me instead of those corny ass nicknames I give you Chris move was pushing this a lot on the stream and This is what Ronnie said The nicknames are the initials. There's not they're getting on you for saying there's 52 combos of initials That is what it is. No, that's true That's the math 26 times to The defense is it's it's definitely improved I make myself ZZ I put people to sleep by the way Pretty much the whole chat was roasting him Obviously, there's way more than 52 combinations of different voiceovers that it have to be done if this feature or a Commentary package made it into the game I just thought it was funny that Ronnie was horrible at math and so did the rest of the chat There was something interesting Ronnie 2k said on stream He said that park information and news comes last because it's quote-unquote the biggest thing they have So they're basically saying that park is again since and still the biggest game on an NBA 2k But more than that because it gets interesting if park is the biggest thing they have and that's why they put it to last They did drop the my team trailer before the my career trailer before the pro amp trailer I don't know if they're going in that order It might make sense because my gym my league stuff is usually the first news to drop But I had this theory that maybe my career had more users than my team did which I guess would make sense because you have to Play through my career to get to the park and pro amp But then what did that make my career the biggest game mode and not park anyway? Maybe it means nothing just thought it was interesting information because they usually don't release stats And probably the last relevant and important thing Ronnie said on stream he was playing with the crowd around him at the park and Ronnie 2k made a statement as if he was surprised that there was an increased amount of latency and lag because he had a Whole crowd around him now. I'm a youtuber I have to go through that every single time I play the game and I thought it was hilarious that Ronnie was surprised like now You know why the complain about latency and lag all the time is because when there's a whole row of people that for no Reason are being loaded in it's slowing my game down and I don't care if they're all blurred out for all I care I just want a good gaming experience Ronnie was like, oh those guys all have to be loaded in He's trying to calculate why he thought that there was a lot of latency in his game and lack Welcome to my world Ronnie where the latency plagues you every game you play because there's always a crowd for our next story Of the day Twitter is a weird place and Twitter and Instagram kind of got connected last night Ronnie 2k was on a mission apparently Ronnie was on Instagram leaving comments under Instagram models comment sections and he was basically asking them to look at their DMs because he wanted to invite them to an event and long story short Davis got screenshots of this and posted it on Twitter and That kind of started a whirlwind were some 2k youtubers that weren't invited to the event We're like, yo, how are we not getting invited and we weren't uploading the game all year long And you're trying to haul that summer ray and these other Instagram models and like just basically you get what I'm trying to say I thought it was hilarious I know that boy was going in saying like you got to invite people from the community Even if it's not me you got to look around like what are you doing? I thought it was hilarious I will tell you guys this though. I've been to enough events to know that I'm be honest It would be nice to have some females there there's some events where it's just 100% guys and so Sometimes and this has happened to me in specific events companies will hire girls to just strike up random conversations And it's so incredibly artificial that it just feels weird I'm not talking to somebody that's being paid to just talk to me Right, that's a waste of my time when I could be talking to devs or other youtubers or other Actual human beings at the event whether it's reporters or writers, whatever the case is anyway I thought that was funny for our next story of the day This story is gonna make you laugh So the blaze is five gaming were playing in their first game of the NBA 2k league playoffs last week and in true 2k Faction, they lost the game in a pretty heart-breaking way Roll it You couldn't ask for a more Gutt-wrenching but hilarious as long as it didn't happen to me wait there's three hundred thousand dollars on the line in these playoffs and The blaze is five gaming had some of the most unfortunate luck You could possibly think up there with a top seed going into it and a lot of people assume They were gonna cruise their way to the NBA 2k league finals So I guess shit happens. It's 2k. You roll the dice sometimes and it doesn't land your way I thought it was funny for our next story of the day NBA 2k 19s ESRB waiting came back now.  He's like This game you mean this game right here. That's M for mature.  So you know that rating the one I'm talking about some people tweeted at me said Yo 2k is ESRB waiting is gonna be E for everyone. So that means that there's no proximity check now on a past Drama alert you guys saw that Mike Wang replied to me kind of poking fun and joking at that classroom video I made saying yo we got to add proximity chat and since then I was like, yo Maybe Mike Wang was been with the shits and they're gonna add proximity chat to the game So someone basically tweeted at me and said agent ESRB's rating is on 19 is E for everyone Which means your proximity chat ain't there and I had to do some research and investigative analysis online Apparently online interactions aren't rated on ESRB and thank the Lord because I was like wow It would have been the greatest feature to add hope is still alive for proximity chat Because apparently the ESRB waiting does not take that into account because if you think about it if they took it into account that means they would also take into account voice chat and You know how people are on voice chat sometimes right for our next story of the day things keep rolling Ronnie 2k was taking shots at EA and things got pretty interesting So Ronnie took this photo here with Quavo and left the caption We're not trying to do what everybody else is doing. He said it had to Quavo hashtag NBA 2k 19 Basically, everyone's like yo, they might be taking some soundtrack shots at our neighbors over there And you know those NBA live guys over there ha ha Apparently an NBA live dev wasn't messing with it because she replied on Twitter She didn't reply but she put out her own tweet throwing some shade. She said this she actually deleted it So I couldn't get the zoomed-in version of it But she basically put up this gif and said I see dead people and Brian Mazeek a writer for Forbes covers all kinds of NBA 2k league NBA 2k stuff hashtag shots fired on the quote tweet now a lot of people didn't get a chance to see the tweet But Brian Mazeek was paying attention.  That was good stuff We haven't had a brand vs. brand chas talk like ever and then cold Big man for Kings gaming replied saying I missed the tweet cold man. I got you don't even worry now I'm not gonna lie to you guys I don't exactly know what kind of shots I see dead people is I Until Brian Mazeek said something I don't even know this had anything related to do with any sort of shots At all so honest, I don't really understand the shot what so which probably means it's a bad shot But I mean maybe just maybe I don't have the IQ for it I don't know for our final story of the day. I don't know why guys, but apparently everybody's mad at annoying TV I don't know what he did shoot put out this tweet and said all that money and still can't fix your teeth Bitch look straight out of a horror movie stop sneak dissing me and okay. I can't I need this video monetize All right, I don't listen on the couple journalists to go There was a couple other people taking shots at annoying and now it's shoot take I don't act I don't watch the stream to know like what he's saying about certain people But apparently he's ruffling some feathers man, and I know he's gonna be in New York I'm gonna be in New York in a few days, so we'll link up and talk man But I felt like it was funny a shoot is always taking shots at oh you see what I did there Oh, man. All right. Anyway, this is a non-story, but I thought it was funny ladies and gentlemen There was all kinds of other news that was announced some information For example just because you have a pure archetype doesn't mean you have all the Hall of Fame badges anymore And now you don't even have to be a pure archetype to have some Hall of Fame badges That Timmerman a dev for NBA 2k put out this tweet saying every archetype has been rebuilt from badges to attribute towers Skill gap is a top priority He followed up saying most dual archetypes have at least one Hall of Fame badge to clear things up Almost 70% of them approximately half of them have more than one so the shot creators you knew in 2k 18 I can have different attributes and badges they redesign everything and I like that they did that I think that if 2k finds a way to create real balance in the game. It could be a lot of fun I like the idea of restructuring it. I hope that they really tested this They got some smart people in there that are good at the game to go in there and test it So we can get some real results so far Unlike any other year like did they're talking nice if we haven't seen them make a push like this for a skills gap in Any 2k ever in 2k 17 we heard the whole like skills matter thing But they really only had a blog about that detailing like we changed this and this and this and they quickly reverted on all of that Stuff 2k if you stick with the shits and you give us a game that has a skills gap that people have to work To be good at not like you just pick up the sticks and it's the same thing as last year super easy I'm telling you man is gonna change the course of history for NBA 2k, and I'm incredibly excited about it Shout out to Zach and Baluba. It seems like I hope they don't fall for the pressure But it seems like they got things moving. That's all there is for the news today ladies and gentlemen run through Mike Wanks Twitter If you guys want to get some additional information, he's always out there tweeting nothing that's of sincere importance But I'm gonna catch you guys in the next one drop the like subscribe to the channel and watch some of these drama Alert videos I'm putting right here. I'm out. Peace


Police believe Manzur Hussein took the action because one of the daughters married against his wishes. The daughter in question had married for love about 18 months ago against the father's will for an arranged marriage. The husband had told police he was in home at the time of the fire and had found the house ablaze when he returned from work. Hundreds of women in Pakistan are killed by relatives every year for marrying without consent or against their family's wishes.


The House of Squib presents Academy Award. Every week, Squib brings you Hollywood's finest. The great picture plays, the great actors and actresses, techniques and skills chosen from the honor roll of those who have won or been nominated for, the famous Golden Oscar of the Academy of Motion Picture Arts and Sciences. And now, E.R. Squib and Sons, manufacturing chemist of the medical profession since 1858. Bring you one of Hollywood's best known stars, Eddie Bracken. In It Happened Tomorrow, the picture which was nominated for a 1944 Academy Award. With Mr. Bracken, you will also hear Ms. Anne Blythe, who, as best supporting actress of the year, was nominated for the 1945 Academy Award. This is the story of something that couldn't happen but did. And it happened around the turn of a century to a nice guy who was young and gay. His name was Larry, and he was a newspaper reporter. As a matter of fact, you can tell from the old prints that Larry looked an awful lot like Eddie Bracken, acted like him too, as you'll find out. Nobody believes my story, and I don't care if they don't. All I know is it happened to me. It happened tomorrow, and I'm still alive to tell about it. It began one night when we were horsing around in the city room of the newspaper where I worked. Be careful, Larry. You're not a full-fledged reporter yet. And if the boss catches you drinking beer with the boys, his livelihood changes mind about giving you a break. Oh, forget it, Pop. I'm going to sleep right now, right on top of these old newspapers of yours. You're lying right in the middle of 1843. Oh, good place to sleep, Pop. On a bed of ancient news. Be careful. I've been taking care of these files for nine on 60 years. Nothing as dead as yesterday's newspaper, Pop. You've got no imagination. News is what happens. What's the difference, whether it happened 50 years ago or tomorrow? You mean will happen tomorrow? No. Times only an illusion. Look here. March 18, 1875. For the people then, this was the future, wasn't it? Yeah, that's right. But suppose we're all living on that day in 1875, and I arrive with this book, I can tell you everything that will happen. Bring me the one for the year we're living in now, Pop. You can aim your own price. That's what I want. Tamara's newspaper. How much? No, Larry, no. Don't ever ask for a thing like that. Find a where I could get Tamara's paper. I'd give 10 years of my life for it. How do you know you've got 10 years? Me? You're kidding. I'm just about ready to sew my first wild oat. Well, if you're going to sew, come on and sew. Oh, yeah. We're out of beer and got tickets for the Fordville show. Watch playing. Hey, the great Professor Cigolini. He tells the secrets of the past, present, and future. Okay. How long, Pop? No, I haven't time. Well, good night then. See you tomorrow. Tomorrow. Tomorrow. I forgot about Pop and his newspaper tomorrow and went to see the Professor. He was terrific, but the girl who worked in the act with him was tremendous. And I won't hurt the story now to tell you that she's married to me right now and always will be. And now, my friend, do you know the number which is engraved inside your watch? No, Professor. Ah, but Miss Sylvia knows it. Miss Sylvia, what is the number of the watch? Two hands. You can. You can. I compel you. Five. Ninety-four. Is that correct, sir? Yeah, Professor. I didn't know this number myself. Professor, I have a question, Professor. It's personal. It concerns a certain young lady. And you want to know if she will have the misfortune to marry you. Is that it? All I want to know is whether she's going to have lunch with me tomorrow. Will she come? Sylvia, one final question. Can you hear me, Sylvia? The gentleman would lunch with him tomorrow. Yes, she will. Oh, well, thank you, Miss Sylvia. Now, will you please tell me if... She is in a trance, sir. You will have to arrange with the young lady herself. I'd like to, but she can't hear me. You mean the young lady is deaf? No, she's in a trance. And that is the way the girl came into my life. I waited for her after the show, and in spite of her uncle, the great Chiellini, I took her home in a horse cab. Then I took out on foot in a fog as thick as good stew. My head was in the clouds anyway, so it didn't matter. But then I heard a familiar voice. Larry, Larry, Larry. Oh, who is it? Oh, it's you, Pop. I can't see you very well. What are you doing out so late? Didn't I tell you time doesn't exist? I was waiting for you, Larry. For me, but I didn't tell you I was coming back. I'm just on my way home. So am I, but I wanted to give you this first. Why, it's a copy of the evening news. I've already read it. Maybe not. You'd better go home and sleep it off, Pop. Oh, I never felt so well in my life. Good night, Larry. Wait, wait. I'll take you home. No, thanks, my boy. We, uh, we go different ways. Okay. Don't lose that paper, son. Don't lose it. I thought he was a little tipsy, and I stuffed the paper in my pocket and went home and slept like a rock. But the next morning when I came downstairs at the boarding house, a guy called Joe said, Hey, Larry, I'm still looking for a job. Can I take a peek at your newspaper? There's one of us last night's. Oh, I don't mind. It's just a worn-out time after. Hey, this ain't last night's. It's today's. Oh, no, Joe. Today's evening news hasn't even gone to press yet. Must be last night's. And what day's today? Wednesday. But this says Wednesday. What's all this? Wednesday. Hey, they must have made a mistake. Well, why do you know it says it's gonna snow? It didn't snow yesterday, did it? Nah. Hey, look out the window. It's snowing. I've ever heard of snow in May. I don't get it. Hey, here's something in the ads. They need a waiter at Beacon and Fifth. I guess I'll get right over there. Yeah. Hey, wait for me. Any waiters? But look, this paper says... We don't need any waiters, understand? Then why waste people's time by putting ads in a paper? Probably got the wrong address. Yeah, wait a minute. Here it is. You say you didn't put an ad in this paper for a waiter? No, we didn't.  This is the last dish you'll break here. Hey, Maisie. Yes, boss. Get your hat on. Take a dollar from the tail. Put an ad in the paper right away. Well, what are you staring at me for? In the morning paper? No, put it in the evening news. No. No. What do you want? Nothing, nothing. I'm just going down to the evening news myself. Mr. Gordon. Mr. Gordon, I gotta find Pop. Something's happened. I don't understand. When I tell you what's gonna happen, if you're late again, you're... Mr. Gordon, who's covering the Melba concert at the Opera House?    Look, I'm gonna show you something that'll change your mind. You're fired. You can't fire me. I quit. You quit.  A raise? Yes, sir, for the biggest news story of the day. You set up a four-column headline right now, banded steel, cash at Opera House while Melba sings. At ten minutes past two. Here, Mr. Stevens, for lunch. Sylvia. I really came to explain that my uncle is very angry, and I won't be able to have lunch with you after all. Sylvia, come on. We're going to the Melba concert. Something's gonna happen at the Opera House. We haven't got much time to get there. Well, what's going to happen? Well, I'll tell you on the way over. It's my big chance. Here you are, sir. Two on the aisle. What time is it, please? Five past two. Overture's just started, sir. Oh, we're late. Oh, no, we're a few minutes early. Say. Yes, sir? I'll bet you a pair of tickets. I can guess how much you've taken in. $3,675. Oh, no, you lose, my friend. It's $3,670 even. Oh, well, I guess I have to buy that pair. How much? $2.50 a piece. $5. Okay, yeah. Fine. That makes it right. $3,675. Come with me, Sylvia. Hey, what goes on around here? How do you know so much? Tickets, please. We'll stand here. That's not permitted, sir. Well, um, we're leaving in a few minutes. But, Mr. Stevens, I don't want to leave in a few minutes. The show will be over. You mean, Madam Melba? Oh, the big show isn't on the stage. It's out there in the lobby. But what's going to happen? I'll hold up. Oh, what kind of a story is that? A cab will stop out in front. Three men will get out, and nobody will know who they are. They'll pretend to ask for tickets, then one man will take out a pistol and... All right, I'll shh. But you just wait. Shh. Why, why, why? No, what's going to happen? By certain signs, anyone can accurately predict a pleasant experience. Recall, for example, how often rain clouds forecast refreshment on sultry summer days. At the very sight of them, you can almost feel the welcome touch of cool, moist air against your cheek. You know refreshment is near. Another sign that forecasts refreshment is the name Squibb on a tube of dental cream. For everything about Squibb dental cream helps to make brushing your teeth, not a daily chore, but a refreshing, exhilarating experience.  You feel like smiling, and your smile is brighter. For there's a refreshing difference even in the polishing agent of Squibb dental cream, it's so quick, safe, and effective. Find out for yourself tomorrow. Start brushing your teeth with Squibb dental cream, one of the great family of Squibb products. Taste, feel, and see the refreshing difference. In a moment, we will bring you part two of It Happened Tomorrow. But first, we want to thank Arnold Pressburger Productions for making this story available. Arnold Pressburger is also the producer of A Scandal in Paris. And now the House of Squibb presents part two of Academy Award, starring Eddie Bracken with Anne Blythe in It Happened Tomorrow. Well, that's the way it was. Somehow those papers of Pops kept getting into my overcoat poppin'. Pop wasn't at the office since the night the whole thing started. But the papers for tomorrow kept coming up, and all I had to do was read them and see what was going to happen, copy the story out, give it to the city editor, and then go where it happened and phone it in. I got my raises. I got famous. I got my girl too. But then I got a brilliant idea. Too brilliant. Mr. Gordon, can I get in advance of $100? Why, certainly, Stevens, of course. I have some plans. Oh, not thinking of getting married, are you? Why not? Well, I can't understand why you have to borrow this money. After all, you seem to be able to tell what will happen before it happens, and if you wanted to, you could present your wife with a million dollars. Yeah. How? Well, mind you, of course, I'm not an addict myself. But with your superior endowment, I might be tempted to pick all five winners at the racetrack tomorrow. Yeah, of course. What did you say? Hey, where's Pop? Anybody seen Pop? I got to find Pop. I got to find him. You still here? Not hanging around waiting for Pop, are you? Funny he doesn't show up.  He's got a right to be drunk once in a while. It's not often. Drunk is sober. He's got to be somewhere. And if I were you, I'd turn out that light and go home. Good night. Good night. Oh, good night. Pop! Yes, Larry? Oh, Pop, I've been hunting high and low for you. Oh, now don't look at me like that. I didn't thank you, Pop, because I didn't see your sense. But I'm not going to ask you a lot of questions about how you do it. I mixed up in something I don't understand, but look, all I want is just one more paper. Then we'll call it quits. No way. Oh, please, Pop, please. For the last time, I'll never ask you again. I'll never tell anybody how I got it. I just want to know what's going to happen tomorrow. Won't do you any good, Larry. Oh, but it will. It can make me rich. Then I can have everything I want in the world. Is it only money you want in this world? Oh, no, I've got everything else. I'm in love. Here, give me that paper, please. Give it to me, Al.  Are you sure, Larry? Yes, yes, yes. Thank you. Oh, thanks for giving it to me. No, Larry, you grabbed it. Remember, Larry, I didn't give it to you. Come to think back on it, he didn't give me the paper. I grabbed it. And if I knew what was in that paper, well, anyway, I rushed right out to Sylvia. We decided to get married the next morning and spend the afternoon at the racetrack, making our fortune. I could hardly sleep awake that night and sat up marking down the five winners from Pop's paper. Lamp lighter, first race mud lock. The second, oh boy, oh boy, there's the cinch. It's murder, that's what it is. What's this? What's this? Larry Stevens evening news reporter shot to death in a lobby at the St. George Hotel. At 6.25 p.m. today, just after the evening news had gone, oppressed Larry Stevens, its most valued reporter, sacrificed his life heroically in the line of duty. No. No. No! I now pronounce you man and wife and make God bless your union. Congratulations, Mr. Stevens. I'm glad to see you so serious. Marriage is a serious business. It's meant to last a lifetime. Thank you, Judge. I wish you years of health and happiness and may all your troubles be little ones. That'll be five dollars. Say, can you draw up a well? Your wing? Yes, sir. I want to leave everything I have to my wife. Kiss me, darling. You may not have me so long. Yes, darling, but hurry. We have to make the first race. I'm not going anywhere. I'm going home and go to bed until today is over with. Look, my friend, you've won the first three races. Now you want to bet this whole 10,000 on Ramona? Right to win. I'm afraid that'll have to be an even money bet, Mr. I can get four to one in another tent. Well, you're a good customer. How about three to one? Three to one? Okay. Why, you'll win $30,000 if Ramona wins. Yes, I know. Please don't talk like that. This is a lot of money to bet on a horse, Mr. I can't give you more than two to one on black flash. Okay. $30,000 to win on black flash. Don't you think you should put at least half of that money on some other horse? Oh, no. It's black flash. Hey, chef, come here. Yeah? I've been in this business a long time, but I never heard of anyone picking four sure things in a row. Not without he's got things fixed.  Diablo's going to win this time if he never runs another race.  The paper was wrong, old brother. It was wrong, wrong. Don't you see? I've got a chance to live. Why was it wrong? It says black flash would win and Diablo just won. Have the following official announcement to make. In the race which has just been run. Yeah. Number seven Diablo is qualified. You'll be a wealthy widow, darling. I'm buried. Here, dear, you take the $60,000 while I hail a carriage. Oh, no, no. I'd be afraid to carry that much money. No, you keep it. It'll be safer. I might lose it. What about me? Keep it, please. No, Larry, you take it. No, you take it. Somebody has to take it. Give me that one. I'll take it. Yeah, you take it. No, no, waiter. Hey, come back here, please. Stop that man. Stop thief. Stop thief. Wait, Larry. He's got a gun. Oh. Oh, well, easy come, easy go. At least we don't have to go to the St. George Hotel. That we don't do, or do we? I guess we do, dear. Yeah. It said so in your paper. Yes, I know. That's where you're supposed to make me a widow. Later again, Stevens. I'll give you just one more chance. I've got an assignment for you. I've got a tip that something big is going to break. Wait till I get the address. Never mind, Mr. Gordon. I know it. What? Where? St. George Hotel. St. George Hotel? No, no, that's not it. Here it is. Here it is. Other side of town. You mean you're not sending me to the St. George Hotel? No, I'm not. Now get out of here. Oh, you bet. Stevens. Yes, Mr. Gordon. I've changed my mind. Stevens, forget that assignment I gave you. You're going to the St. George Hotel. Oh, what for?  When you say something big is going to happen, someplace boy, it happens. Me in my big mouth. Good luck. I'll start setting up a headline right now. Goodbye, Mr. Gordon. Goodbye forever. What time is it, darling? Twenty after six. Five more minutes. Five minutes. I wonder how it's going to happen. I wonder if I'll feel the pain. Larry, Larry, look there, coming across the lobby. The man who stole your wallet. That's a fella. Hey, hey, stop, thief, stop. I'll get him this time, honey. Larry, look out. He's still got his gun. Gordon, evening news. What? What's that? Stevens? Yes, yes. I sent him to the St. George Hotel myself a few minutes ago. No, no, he was on duty. That man is a hero. He knew something big was going to break there at the St. George. Hold the presses. We're getting out an extra. Take this down. Larry Stevens, evening news reporter shot to death in the lobby of the St. George Hotel at 6.25 p.m. today. He sacrificed his life heroically in the line of duty. Where's my hat? I've got to get down there. Stand back there. Keep back now. Oh, my chin. What happened, officer? Oh, nothing, nothing. Some newspaper guy got chill. That's all. Oh, what's his name? I don't know. Larry's something. Stevens, Stevens.  Did you say Stevens? Stevens, you alive. Oh, Mr. Gordon, am I glad to see you. I don't get it though. I'm supposed to be. Mr. Gordon, Mr. Gordon, where's Pop? Pop died two days ago. Died two days ago? Yes, yeah, and Stevens, you're fired, fired, fired. Get me? After me getting out an extra with your obit, building you up as a hero for the evening news, what do you do?  But I... You, you, get away from me. Wait a minute, wait a minute. If you're not dead, who, who's this guy? Officer, officer, how did you identify this man? His wallet, Mr. Gordon. Here. See? It says Larry Stevens in it. Evening news. That's my wallet. The man who stole it at the racetrack, I get it now. I was chasing him and the cops got there first and when he ran around the corner, boom, they shot him. Found my wallet. They thought he was me, see? Now I'm not dead. I'm alive. I'm alive. Sylvia Honey, baby, congratulations. You're not a widow. Such a night. Clouds and, oh, it's chilly. Yeah. What are you looking so wistful at the sky for? Oh, I was just looking to see where the pop was looking down at me with that funny look on his face. Are you sorry pop gave you those papers? Nope. Oh, it's some wedding night. We haven't even got cab fare. I know it. And you know something else? I'm glad that poor guy did something with that money instead of leaving it in the wallet. I got something better. What? You. The future. And I'm not going to worry about what the future looks like. I'm going to just take it as it comes. I guess pop was trying to teach you a lesson Larry. Yeah. I guess he was and he did. You know, I think I can almost see him up there now looking down at me. He's smiling. So long. Thanks a lot pop. Come on honey. Sometimes important items in the news of today can be traced back to little noticed events of yesterday. There's the story for example of a tiny bottle received at the house of squib six years ago. It was sent from England and it contained the first living culture from which squib was to produce penicillin in enormous quantities. In dramatic contrast to that first tiny bottle are great tanks big as railroad cars in which penicillin mold is now grown at squib. Every tank holds 10,000 gallons of culture broth. After processing however the contents of each tank produce only enough penicillin powder to fill the palm of your hand. Yet millions of units of penicillin leave the house of squib every single day. Behind this outstanding production record is the same scientific testing and research that ensures the uniformity purity and efficacy of all squib products. Your doctor knows that any squib product he uses is just as reliable as medical science can make it. And you can be just as confident in using any of the simple everyday health essentials that bear the name squib. So always ask for squib when you buy. Squib, a name you can trust. Next Wednesday another great picture. The house of squib will present Academy Awards starring John Garfield in Blood on the Sun. Today's performance of It Happened Tomorrow was written for radio by Frank Wilson with an original musical score composed and conducted by Lee Stevens. Our producer director is D. Engelbach. Eddie Bracken appeared by arrangement with the Texaco dealers sponsors of the Eddie Bracken radio program. And Blythe appeared through the courtesy of Universal International Productions who are now releasing Nunnally Johnson's The Dark Mirror and International Picture. This is Hugh Brundage bidding you good night until next Wednesday at the same time when you're invited to listen again to Academy Award presented by the House of Squib, a name you can trust. CBS, the Columbia Broadcasting System.