=========================================================================
How to use the TGrid/TAlien/TAlienFile class V1.1 - Andreas.Peters@cern.ch
=========================================================================


TGrid-Plugin: TAlien
====================

To connect to Alien you have to connect to a running API service of your
virtual organization.

Creating <gGrid> instance:
a) // connecting to an API service 

    TGrid::Connect("alien://pcapiserv01.cern.ch:9000","aliprod);
    
    // connecting to an API service which is defined already by the
    environment variables:
		 export alien_API_HOST=...
		 export alien_API_PORT=...
		 export alien_API_USER=...
    TGrid::Connect("alien://");

    // connect to an API service with an authentication token established
    previously with gShellq.

b)  TGrid::Connect("alien://",0,0,"t");

    In case a) the authentication is private to the process, while case b)
    shares the authentication(session) with the shell, which has established
    the session previously. Notice that a) is not thread-safe, while b) is!

If you have executed TGrid::Connect(), the gGrid global variable
should be set != 0.

Some examples:

- change the working directory
  
    gGrid->Cd("/alice/");  // => returns 1 for success, 0 for error
  
- get the working directory
  
    printf("GRID Working is %d",gGrid->Pwd());

- list a directory

    TGridResult* result = gGrid->Ls("/alice");                         
    Int_t i=0;                                                         
    while (result->GetFileName(i))                                    
      printf("File %s\n",result->GetFileName(i++));
    TGridResult* result = gGrid->Ls("/alice");                         
    Int_t i=0;                                                           
    while (result->GetFileName(i))                                    
      printf("File %s\n",result->GetFileName(i++));

- get all file permissions - using the GetKey function

    TGridResult* result = gGrid->Ls("/alice","-la");                   
    while (result->GetFileName(i))\                                    
    printf("The permissions are %s\n",result->GetKey(i++,"permissions")  
                                                                       
    // => the defined keys for GetKey can be seen using result->Print();   


- query files under a certain namespace tree

    TGridResult* result = gGrid->Query("/alice/,"*.root");


You can execute any existing command via the Command interface:
    
    TGridResult* result = gGrid->Command("ls -la /",0,2); 

    // '0' switches of the output of stdout and stderr to the terminal
    // '2' selects the result stream to be returned as TGridResult* :
	  '0' returns stdout, 
	  '1' returns stderr,
	  '2' returns the result structure

-> This command is equivalent to:
   
    gGrid->Ls("/","-la");

You can print the stdout of the last command via:
    gGrid->Stdout();

You can print the stderr of the last command via:
    gGrid->Stderr();
        
To see the result structure of a command, you can just use the 'Print' function for the
TGridResult:

	result->Print();



TFile-Plugin: TAlienFile
========================

Files stored in Alien can be opened with the catalogue LFN or a GUID.
To open a file by LFN use:

	TFile* myfile = TFile::Open("alien:///alice/cern.ch/file.root");

or
	
	TFile* myfile = TFile::Open("/alien/alice/cern.ch/file.root");
	

To open a file by GUID use:

	TFile* myfile = TFile::Open("alien://<guid>");

To address a certain storage element add to the URL
	   "?se=ALICE::CERN::Castor";

f.e.    TFile::Open("/alien/alice/cern.ch/file.root?se=ALICE::CERN::Castor");


To open a ZIP file in an archive, use:

	TFile::Open("/alien7alice/cern.ch/archivefile.zip#file.root");

- this assumes, that archivefile.zip is an UNCOMPRESSED zip archive containing
  'file.root'.
- remember, that archives need to have the suffix '.zip' to be understood as
  such.


