Ignore Value (NDV) on derived data product (Python)

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Ignore Value (NDV) on derived data product (Python)

Jay L.
List, 

I have a few spectral calculators and am having an issue with data with a NoDataValue (NDV) border.  On import (using the ENVI importer) I set the ignore value manually.  

I then have a wizard that applies an algorithm to the image.  To avoid using the NDV pixels I mask them (using numpy).

The derived product is then added to the Opticks window using: opticks.RasterElement.create3d('name', array)

When created the new window is not aware of the ignore value (from the 'parent image').  Is it possible to pull this attribute?  I do not see it in the parent opticks.View() class.  

Can I then pass that to create3d or create2d?

Is it possible to reset the ignore value of an open window (view)?

Thanks!

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Ignore Value (NDV) on derived data product (Python)

tclarke
Administrator

Bad values are programmatically set on the Statistics object for a RasterLayer. However, it does not appear that the bad values interface is available to Python.  You can add a feature request to JIRA for this capability if it’s neaded.

 

From: Jay L. [mailto:[hidden email]]
Sent: Tuesday, April 09, 2013 6:51 PM
To: [hidden email]
Subject: [Opticks-users] Ignore Value (NDV) on derived data product (Python)

 

List, 

 

I have a few spectral calculators and am having an issue with data with a NoDataValue (NDV) border.  On import (using the ENVI importer) I set the ignore value manually.  

 

I then have a wizard that applies an algorithm to the image.  To avoid using the NDV pixels I mask them (using numpy).

 

The derived product is then added to the Opticks window using: opticks.RasterElement.create3d('name', array)

 

When created the new window is not aware of the ignore value (from the 'parent image').  Is it possible to pull this attribute?  I do not see it in the parent opticks.View() class.  

 

Can I then pass that to create3d or create2d?

 

Is it possible to reset the ignore value of an open window (view)?

 

Thanks!


This message and any enclosures are intended only for the addressee.  Please 

notify the sender by email if you are not the intended recipient.  If you are 

not the intended recipient, you may not use, copy, disclose, or distribute this 

message or its contents or enclosures to any other person and any such actions 

may be unlawful.  Ball reserves the right to monitor and review all messages 

and enclosures sent to or from this email address.

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Ignore Value (NDV) on derived data product(Python)

dadkins
Administrator

In the call to create2d/create3d, the last parameter is called bad_values. Have you tried using that?

 

 

From: Clarke, Trevor [mailto:[hidden email]]
Sent: Wednesday, April 10, 2013 9:02 AM
To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived data product(Python)

 

Bad values are programmatically set on the Statistics object for a RasterLayer. However, it does not appear that the bad values interface is available to Python.  You can add a feature request to JIRA for this capability if it’s neaded.

 

From: Jay L. [[hidden email]]
Sent: Tuesday, April 09, 2013 6:51 PM
To: [hidden email]
Subject: [Opticks-users] Ignore Value (NDV) on derived data product (Python)

 

List, 

 

I have a few spectral calculators and am having an issue with data with a NoDataValue (NDV) border.  On import (using the ENVI importer) I set the ignore value manually.  

 

I then have a wizard that applies an algorithm to the image.  To avoid using the NDV pixels I mask them (using numpy).

 

The derived product is then added to the Opticks window using: opticks.RasterElement.create3d('name', array)

 

When created the new window is not aware of the ignore value (from the 'parent image').  Is it possible to pull this attribute?  I do not see it in the parent opticks.View() class.  

 

Can I then pass that to create3d or create2d?

 

Is it possible to reset the ignore value of an open window (view)?

 

Thanks!

 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.

This message and any enclosures are intended only for the addressee.  Please 

notify the sender by email if you are not the intended recipient.  If you are 

not the intended recipient, you may not use, copy, disclose, or distribute this 

message or its contents or enclosures to any other person and any such actions 

may be unlawful.  Ball reserves the right to monitor and review all messages 

and enclosures sent to or from this email address.

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Ignore Value (NDV) on derived dataproduct(Python)

tclarke
Administrator

This will work in opticks 4.9.1 and earlier. In 4.10.0 a new bad values system was added and apparently wasn’t tested with Python as it doesn’t work (and sometimes crashes the app). I’ll submit a bug.

 

From: Adkins, Dustan [mailto:[hidden email]]
Sent: Wednesday, April 10, 2013 9:14 AM
To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived dataproduct(Python)

 

In the call to create2d/create3d, the last parameter is called bad_values. Have you tried using that?

 

 

From: Clarke, Trevor [[hidden email]]
Sent: Wednesday, April 10, 2013 9:02 AM
To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived data product(Python)

 

Bad values are programmatically set on the Statistics object for a RasterLayer. However, it does not appear that the bad values interface is available to Python.  You can add a feature request to JIRA for this capability if it’s neaded.

 

From: Jay L. [[hidden email]]
Sent: Tuesday, April 09, 2013 6:51 PM
To: [hidden email]
Subject: [Opticks-users] Ignore Value (NDV) on derived data product (Python)

 

List, 

 

I have a few spectral calculators and am having an issue with data with a NoDataValue (NDV) border.  On import (using the ENVI importer) I set the ignore value manually.  

 

I then have a wizard that applies an algorithm to the image.  To avoid using the NDV pixels I mask them (using numpy).

 

The derived product is then added to the Opticks window using: opticks.RasterElement.create3d('name', array)

 

When created the new window is not aware of the ignore value (from the 'parent image').  Is it possible to pull this attribute?  I do not see it in the parent opticks.View() class.  

 

Can I then pass that to create3d or create2d?

 

Is it possible to reset the ignore value of an open window (view)?

 

Thanks!

 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.
 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.

This message and any enclosures are intended only for the addressee.  Please 

notify the sender by email if you are not the intended recipient.  If you are 

not the intended recipient, you may not use, copy, disclose, or distribute this 

message or its contents or enclosures to any other person and any such actions 

may be unlawful.  Ball reserves the right to monitor and review all messages 

and enclosures sent to or from this email address.

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Ignore Value (NDV) on derived dataproduct(Python)

Jay L.
Dustin, 

I did not see that parameter in the code.  Looks like it did not propagate forward (4.10).  Is it possible to set the NDV manually within the Opticks GUI, i.e. I run my script on a masked array, so I know that I am handling NDV correctly.  Then I can alert the user to set the NDV for the active frame so that the derived output is displayed properly.

Thanks for all the input!
Jay

P.S. The modification to the global variable for Wizard directory worked wonderfully.  I am able to deploy my tools system wide via the VM and store the wizards in my own 'local' network space.  Thanks Dustin!


On Wed, Apr 10, 2013 at 6:51 AM, Clarke, Trevor <[hidden email]> wrote:

This will work in opticks 4.9.1 and earlier. In 4.10.0 a new bad values system was added and apparently wasn’t tested with Python as it doesn’t work (and sometimes crashes the app). I’ll submit a bug.

 

From: Adkins, Dustan [mailto:[hidden email]]
Sent: Wednesday, April 10, 2013 9:14 AM


To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived dataproduct(Python)

 

In the call to create2d/create3d, the last parameter is called bad_values. Have you tried using that?

 

 

From: Clarke, Trevor [[hidden email]]
Sent: Wednesday, April 10, 2013 9:02 AM
To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived data product(Python)

 

Bad values are programmatically set on the Statistics object for a RasterLayer. However, it does not appear that the bad values interface is available to Python.  You can add a feature request to JIRA for this capability if it’s neaded.

 

From: Jay L. [[hidden email]]
Sent: Tuesday, April 09, 2013 6:51 PM
To: [hidden email]
Subject: [Opticks-users] Ignore Value (NDV) on derived data product (Python)

 

List, 

 

I have a few spectral calculators and am having an issue with data with a NoDataValue (NDV) border.  On import (using the ENVI importer) I set the ignore value manually.  

 

I then have a wizard that applies an algorithm to the image.  To avoid using the NDV pixels I mask them (using numpy).

 

The derived product is then added to the Opticks window using: opticks.RasterElement.create3d('name', array)

 

When created the new window is not aware of the ignore value (from the 'parent image').  Is it possible to pull this attribute?  I do not see it in the parent opticks.View() class.  

 

Can I then pass that to create3d or create2d?

 

Is it possible to reset the ignore value of an open window (view)?

 

Thanks!

 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.
 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.
This message and any enclosures are intended only for the addressee.  Please 

notify the sender by email if you are not the intended recipient.  If you are 

not the intended recipient, you may not use, copy, disclose, or distribute this 

message or its contents or enclosures to any other person and any such actions 

may be unlawful.  Ball reserves the right to monitor and review all messages 

and enclosures sent to or from this email address.

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users



------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Ignore Value (NDV) on deriveddataproduct(Python)

Tobe, John

If you bring up the histogram window for that layer you can right click on the histogram and set the bad values to include whatever the NDV is.

 

From: Jay L. [mailto:[hidden email]]
Sent: Wednesday, April 10, 2013 11:08 AM
To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on deriveddataproduct(Python)

 

Dustin, 

 

I did not see that parameter in the code.  Looks like it did not propagate forward (4.10).  Is it possible to set the NDV manually within the Opticks GUI, i.e. I run my script on a masked array, so I know that I am handling NDV correctly.  Then I can alert the user to set the NDV for the active frame so that the derived output is displayed properly.

 

Thanks for all the input!

Jay

 

P.S. The modification to the global variable for Wizard directory worked wonderfully.  I am able to deploy my tools system wide via the VM and store the wizards in my own 'local' network space.  Thanks Dustin!

 

On Wed, Apr 10, 2013 at 6:51 AM, Clarke, Trevor <[hidden email]> wrote:

This will work in opticks 4.9.1 and earlier. In 4.10.0 a new bad values system was added and apparently wasn’t tested with Python as it doesn’t work (and sometimes crashes the app). I’ll submit a bug.

 

From: Adkins, Dustan [mailto:[hidden email]]
Sent: Wednesday, April 10, 2013 9:14 AM


To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived dataproduct(Python)

 

In the call to create2d/create3d, the last parameter is called bad_values. Have you tried using that?

 

 

From: Clarke, Trevor [[hidden email]]
Sent: Wednesday, April 10, 2013 9:02 AM
To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived data product(Python)

 

Bad values are programmatically set on the Statistics object for a RasterLayer. However, it does not appear that the bad values interface is available to Python.  You can add a feature request to JIRA for this capability if it’s neaded.

 

From: Jay L. [[hidden email]]
Sent: Tuesday, April 09, 2013 6:51 PM
To: [hidden email]
Subject: [Opticks-users] Ignore Value (NDV) on derived data product (Python)

 

List, 

 

I have a few spectral calculators and am having an issue with data with a NoDataValue (NDV) border.  On import (using the ENVI importer) I set the ignore value manually.  

 

I then have a wizard that applies an algorithm to the image.  To avoid using the NDV pixels I mask them (using numpy).

 

The derived product is then added to the Opticks window using: opticks.RasterElement.create3d('name', array)

 

When created the new window is not aware of the ignore value (from the 'parent image').  Is it possible to pull this attribute?  I do not see it in the parent opticks.View() class.  

 

Can I then pass that to create3d or create2d?

 

Is it possible to reset the ignore value of an open window (view)?

 

Thanks!

 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.
 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.


------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users

 


This message and any enclosures are intended only for the addressee.  Please 

notify the sender by email if you are not the intended recipient.  If you are 

not the intended recipient, you may not use, copy, disclose, or distribute this 

message or its contents or enclosures to any other person and any such actions 

may be unlawful.  Ball reserves the right to monitor and review all messages 

and enclosures sent to or from this email address.

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Ignore Value (NDV) on deriveddataproduct(Python)

Jay L.
Awesome!  I will use this as a work around for now.

Thanks, 
Jay


On Wed, Apr 10, 2013 at 8:17 AM, Tobe, John <[hidden email]> wrote:

If you bring up the histogram window for that layer you can right click on the histogram and set the bad values to include whatever the NDV is.

 

From: Jay L. [mailto:[hidden email]]
Sent: Wednesday, April 10, 2013 11:08 AM


To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on deriveddataproduct(Python)

 

Dustin, 

 

I did not see that parameter in the code.  Looks like it did not propagate forward (4.10).  Is it possible to set the NDV manually within the Opticks GUI, i.e. I run my script on a masked array, so I know that I am handling NDV correctly.  Then I can alert the user to set the NDV for the active frame so that the derived output is displayed properly.

 

Thanks for all the input!

Jay

 

P.S. The modification to the global variable for Wizard directory worked wonderfully.  I am able to deploy my tools system wide via the VM and store the wizards in my own 'local' network space.  Thanks Dustin!

 

On Wed, Apr 10, 2013 at 6:51 AM, Clarke, Trevor <[hidden email]> wrote:

This will work in opticks 4.9.1 and earlier. In 4.10.0 a new bad values system was added and apparently wasn’t tested with Python as it doesn’t work (and sometimes crashes the app). I’ll submit a bug.

 

From: Adkins, Dustan [mailto:[hidden email]]
Sent: Wednesday, April 10, 2013 9:14 AM


To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived dataproduct(Python)

 

In the call to create2d/create3d, the last parameter is called bad_values. Have you tried using that?

 

 

From: Clarke, Trevor [[hidden email]]
Sent: Wednesday, April 10, 2013 9:02 AM
To: [hidden email]
Subject: Re: [Opticks-users] Ignore Value (NDV) on derived data product(Python)

 

Bad values are programmatically set on the Statistics object for a RasterLayer. However, it does not appear that the bad values interface is available to Python.  You can add a feature request to JIRA for this capability if it’s neaded.

 

From: Jay L. [[hidden email]]
Sent: Tuesday, April 09, 2013 6:51 PM
To: [hidden email]
Subject: [Opticks-users] Ignore Value (NDV) on derived data product (Python)

 

List, 

 

I have a few spectral calculators and am having an issue with data with a NoDataValue (NDV) border.  On import (using the ENVI importer) I set the ignore value manually.  

 

I then have a wizard that applies an algorithm to the image.  To avoid using the NDV pixels I mask them (using numpy).

 

The derived product is then added to the Opticks window using: opticks.RasterElement.create3d('name', array)

 

When created the new window is not aware of the ignore value (from the 'parent image').  Is it possible to pull this attribute?  I do not see it in the parent opticks.View() class.  

 

Can I then pass that to create3d or create2d?

 

Is it possible to reset the ignore value of an open window (view)?

 

Thanks!

 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.
 
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.
 
This message and any enclosures are intended only for the addressee.  Please 
 
notify the sender by email if you are not the intended recipient.  If you are 
 
not the intended recipient, you may not use, copy, disclose, or distribute this 
 
message or its contents or enclosures to any other person and any such actions 
 
may be unlawful.  Ball reserves the right to monitor and review all messages 
 
and enclosures sent to or from this email address.


------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users

 

This message and any enclosures are intended only for the addressee.  Please 

notify the sender by email if you are not the intended recipient.  If you are 

not the intended recipient, you may not use, copy, disclose, or distribute this 

message or its contents or enclosures to any other person and any such actions 

may be unlawful.  Ball reserves the right to monitor and review all messages 

and enclosures sent to or from this email address.

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users



------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Opticks-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/opticks-users
Loading...