Looping TFiles

Greetings,

I am trying to loop over several TFiles, instead of using a TChain.

For instance

[code]void Histos(){
for(Int_t j = 0; j < 4; j++){
if(j == 0){
TFile f(“Histo_cur5nA_56869.root”,“recreate”);
TFile *f1 = new TFile("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/SINGLE_DATA/DATA/cur5nA_56869.root");
ifstream in1("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/SINGLE_DATA/GFlux/single56869_gflux5nA.dat");
}
if(j == 1){
TFile f(“Histo_cur15nA_56986.root”,“recreate”);
TFile *f1 = new TFile("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/SINGLE_DATA/DATA/cur15nA_56986.root");
ifstream in1("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/SINGLE_DATA/GFlux/single56986_gflux15nA.dat");
}
if(j == 2){
TFile f(“Histo_cur24nA_57129.root”,“recreate”);
TFile *f1 = new TFile("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/SINGLE_DATA/DATA/cur24nA_57129.root");
ifstream in1("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/SINGLE_DATA/GFlux/single57129_gflux24nA.dat");
}



}//End of for loop
TTree t1 = (TTree)f1->Get(“lepTree”);


open in1
Analyze f1
Draw Histos in f

f1.Close();
in1.Close();


f.Write();
f.Close();
[/code]
When I do this, ROOT tells me f1, in1 and f are not initialized.
I have tried declaring then outside of loop as

TFile *f = new TFile();
TFile *f1 = new TFile();
...
...
for(Int_t j = 0; j < 4;j++){
 f->Open("Histo_cur24nA_57129.root","recreate");  
 f1->Open ("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/SINGLE_DATA/DATA/cur24nA_57129.root");
...

But this Seg faults

Can i be enlightened please

Thanks
Michael

TFile *f; TFile *f1; ... ... for(Int_t j = 0; j < 4;j++){ f->Open("Histo_cur24nA_57129.root","recreate"); f1->Open ("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/SINGLE_DATA/DATA/cur24nA_57129.root"); ...

Rene

Thanks Renee,

But I had tried that and I get Segmentation Faults.

I will re-do and send error.

Thanks
Michael

Here is the Error I receive when attempting to do Renee’s suggestion

/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/NOT_SINGLE_DATA/HISTOS/./Histos.C:142: warning: ‘f1’ is used uninitialized in this function
/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/NOT_SINGLE_DATA/HISTOS/./Histos.C:144: warning: ‘f’ is used uninitialized in this function

Here is the code

[code]
TFile *f; // = NULL;
TFile *f1; //= NULL;
ifstream in1;
for(int q = 0; q < 2;q++){

  if(q==0){	  
        f->Open("Histo_cur60nA_57130.root","recreate");  
        f1->Open("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/NOT_SINGLE_DATA/DATA/cur60nA_57130.root"); 
       in1.open("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/NOT_SINGLE_DATA/GFlux/new_mult57130_gflux60nA.dat");
  }
  if(q==1){	  
        f->Open("Histo_cur60nA_57128.root","recreate");  
        f1->Open("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/NOT_SINGLE_DATA/DATA/cur60nA_57128.root"); 
    in1.open("/Volumes/Mac_Storage/Work_Data/YIELD/SINGLE_TRACK/NOT_SINGLE_DATA/GFlux/new_mult57128_gflux60nA.dat");



}[/code]

I have also tried setting

     TFile *f = NULL;
     TFile *f1= NULL;
     ifstream in1;
     for(int q = 0; q < 2;q++){
...
...

and

     TFile f = NULL;
     TFile f1= NULL;
     ifstream in1;
     for(int q = 0; q < 2;q++){

I receive same error for each

TFile::Open is a static function returning a TFile*. Replace

f->Open("Histo_cur60nA_57130.root","recreate"); by

f = TFile::Open("Histo_cur60nA_57130.root","recreate");
and same for f1.

Rene