Re: [ROOT] Saving and loading TExMaps....

From: Frankland John (frankland@ganil.fr)
Date: Sun Jun 22 2003 - 21:39:19 MEST


Hi Edward,

The problem is you didn't write your TExMap in the file, so it's normal 
you can't get it back afterwards ;-)
If you execute your first script, then open the file and list its 
contents you see:

root [0] TFile f("test.root")
root [1] f.ls()
TFile**         test.root
 TFile*         test.root

However if you replace

hfile->Write("TestMap", TObject::kSingleKey);

with

testMap->Write();

then the file listing you get looks like this:

root [0] TFile f("test.root")
root [1] f.ls()
TFile**         test.root
 TFile*         test.root
  KEY: TExMap   TExMap;1        Map with external hash

Therefore you can "Get" your TExMap with

TExMap *l = (TExMap*)f.Get("TExMap");

I was going to say 'if you want to use Get("TestMap") then you should do a
testMap->SetName("TestMap") before you write it in the file", but 
unfortunately I have
just discovered that TExMap is a TObject, not a TNamed. :-D

Hope this helps
John Frankland


Edward Moyse wrote:

>Hi,
>
>Can anyone help with this problem? I need to save TExMap objects to disk, and 
>read them back later, and I can't find any useful examples, not work it out 
>myself.
>
>If I do:
>
>{
>	TFile* hfile = new TFile("test.root","RECREATE");
>	TExMap* testMap = new TExMap();
>	testMap->Add(1,2);
>	testMap->Add(2,56);
>	testMap->Add(3,256);
>	cout << (testMap->GetValue(2))<<endl;;
>	cout << (testMap->GetValue(1))<<endl;;
>	cout << (testMap->GetValue(100))<<endl;;
>	hfile->Write("TestMap", TObject::kSingleKey);
>	hfile->Close();
>}
>
>
>
>Followed by :
>{
>TFile f2("test.root", "READ");
>TExMap *l = (TExMap*)f2.Get("TestMap");
>cout << (l->GetValue(2))<<endl;;
>cout << (l->GetValue(1))<<endl;;
>}
>
>I get the error:
>Error: illegal pointer to class object l 0x0 358  FILE:testExMapLoad.C LINE:5
>*** Interpreter error recovered ***
>
>I've been trying for horus now, using several different approaches,  and I  
>can't work out what's wrong!
>
>Any help would be VERY appreciated!
>
>Cheers,
>
>Ed
>
>
>
>  
>


-- 
John D. Frankland
Beam Coordinator
GANIL
B.P. 55027
14076 CAEN Cedex 05

tel: +33 (0)231454628
fax: +33 (0)231454665



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:12 MET