RE: [ROOT] tree and streams

From: Philippe Canal (pcanal@fnal.gov)
Date: Tue Aug 19 2003 - 17:14:44 MEST


Hi Taylan,

>    etree->Draw(tower, tower < 3000);

Since tower is declared as "char tower[256];", this is actually performing pointer arithmetic before calling Draw.  I.e. (tower<3000) is zero if the address of the tower array of char is less than 3000.

>    etree->Draw(tower, "tower < 3000");

Here tower is a C++ variable which is not known by the TTree object, which leads to the correct error message:
    Unknown name : "tower"

Instead you should use:

    etree->Draw(tower, Form("%s<3000",tower) );

Or in 3.05/07 and above, you can use

    etree->SetAlias("towerAlias",tower);
    etree->Draw(tower,"towerAlias<3000");

Also, I am still unclear what is the command that, in your case, lead to the segmentation violation (at least I can not reproduce it with any of the commands you sent so far).

Cheers,
Philippe.

-----Original Message-----
From: taylan yetkin [mailto:tyetkin@fnal.gov]
Sent: Tuesday, August 19, 2003 4:03 AM
To: Philippe Canal
Cc: roottalk@pcroot.cern.ch
Subject: Re: [ROOT] tree and streams


Hi Philippe,


I am getting tons of warning messages starting from 

 *** Break *** segmentation violation
 Generating stack trace...

if I use 

etree->Draw(tower, tower < 3000);

or  if I change  above line  as 

etree->Draw(tower, "tower < 3000");

I am getting this short warning:

*ERROR 26 :
 Unknown name : "tower"


Thanks


Philippe Canal wrote:

Hi,

  
etree->Draw(tower); <--------------------This also works, 
but when I want to put a cut like before root is complaining.
    

What kind of complain?  This should have worked with or without a cut.

  
               rtree->GetBranch("info")->SetAddress(&info);
    

It would be better to use:
	
	rtree->SetBranchAddress("info",&info);

Cheers,
Philippe.

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of taylan yetkin
Sent: Monday, August 18, 2003 8:36 AM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] tree and streams


Hi Rooters,
I have a problem with my stream definitions in trees. Below you can see 
a part from my code.


while(!input_file.eof()){
                char run_no[20];
                int tower_no;
                input_file >> run_no >> tower_no;
                if (input_file.fail()) { break; }
                int elmfiber = tower_no - 1;
                int hadfiber = tower_no + 12;
                char s[256];
                char tower[256];
                strstream sstream(s, 256, ios::in | ios::out);
                sstream << "/reco/data/TB2003_JUL/" << run_no << ends;
                strstream sstream(tower,256,ios::in |ios::out);
                sstream << "towers[" << elmfiber << "].e+towers[" << 
hadfiber<< "].e" << ends;
         
                TFile f(s);
                TTree *rtree = (TTree *)f.Get("Run");
                RecoInfo    *info    = new RecoInfo();
                RecoRun     *run     = new RecoRun();
                RecoEvent   *event   = new RecoEvent();
                RecoTrigger *trigger = new RecoTrigger();
                RecoPhase   *phase   = new RecoPhase();
                RecoHCAL    *hcal    = new RecoHCAL();
                RecoCluster *cluster = new RecoCluster();

                rtree->GetBranch("info")->SetAddress(&info);
                rtree->GetBranch("run")->SetAddress(&run);

                TTree *etree = (TTree *)f.Get("Event");
                etree->GetBranch("event")->SetAddress(&event);
                etree->GetBranch("trigger")->SetAddress(&trigger);
                etree->GetBranch("phase")->SetAddress(&phase);
                etree->GetBranch("hcal")->SetAddress(&hcal);
   
              TCanvas *c1 = new TCanvas("c1","c1",20,10,900,600);

               c1->Divide(2,1);
               c1->cd(1);
               etree->Draw("c3x3.e","c3x3.e<5000");       
<---------------This works without any problem.

              c1->cd(2);
              etree->Draw(tower); <--------------------This also works, 
but when I want to put a cut like before root is complaining.



How can I use Draw() method with all options for this tower stream.



  



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