--- PamelaLevel2/src/PamLevel2.cpp 2006/12/06 11:07:35 1.10 +++ PamelaLevel2/src/PamLevel2.cpp 2006/12/11 17:49:03 1.11 @@ -507,27 +507,29 @@ * @param detlist String to select trees to be included * @return Pointer to a TTree */ -TTree *PamLevel2::GetPamTree(TFile *f, TString detlist="+ALL"){ +TTree *PamLevel2::GetPamTree(TFile *f, TString detlist ){ -// cout << "WARNING!!! -- obsolete method -- \n"; -// cout << "better use TChain *PamLevel2::GetPamTree(TList*, TString) \n"; + if( !detlist.IsNull() ) SetWhichTrees(detlist); + else GetWhichTrees(f); - SetWhichTrees(detlist); TTree *Trout =0; - TString fname = f->GetName(); if(!CheckLevel2File(fname))return NULL; - + UInt_t *found=0; + // Tracker TTree *T = (TTree*)f->Get("Tracker"); if(T && (TRK2||TRK1||TRKh)) { if(TRK2)T->SetBranchAddress("TrkLevel2", GetPointerTo("TrkLevel2")); + else T->SetBranchStatus("TrkLevel2",0,found); if(TRK2)cout << "Tracker : set branch address TrkLevel2"<SetBranchAddress("TrkLevel1", GetPointerTo("TrkLevel1")); + else T->SetBranchStatus("TrkLevel1",0,found); if(TRK1)cout << "Tracker : set branch address TrkLevel1"<SetBranchAddress("TrkHough", GetPointerTo("TrkHough")); + else T->SetBranchStatus("TrkHough",0,found); if(TRKh)cout << "Tracker : set branch address TrkHough"<AddFriend(T); @@ -538,8 +540,10 @@ TTree *C = (TTree*)f->Get("Calorimeter"); if(C && (CAL2||CAL1)) { if(CAL2)C->SetBranchAddress("CaloLevel2", GetPointerTo("CaloLevel2")); + else C->SetBranchStatus("CaloLevel2",0,found); if(CAL2)cout << "Calorimeter : set branch address CaloLevel2"<SetBranchAddress("CaloLevel1", GetPointerTo("CaloLevel1")); + else C->SetBranchStatus("CaloLevel1",0,found); if(CAL1)cout << "Calorimeter : set branch address CaloLevel1"<AddFriend(C); @@ -597,19 +601,19 @@ cout << "Anticounter : missing tree"<Get("OrbitalInfo"); - if(B && ORB) { - B->SetBranchAddress("OrbitalInfo", GetPointerTo("OrbitalInfo")); - cout << "OrbitalInfo : set branch address OrbitalInfo"<AddFriend(B); - }else{ - cout << "OrbitalInfo : missing tree"<Get("OrbitalInfo"); + if(B && ORB) { + B->SetBranchAddress("OrbitalInfo", GetPointerTo("OrbitalInfo")); + cout << "OrbitalInfo : set branch address OrbitalInfo"<AddFriend(B); + }else{ + cout << "OrbitalInfo : missing tree"<GetEntries()<GetEntries()<IsFileInIncludePath(flisttxt,&fullpath) )return 0; - + if( !gSystem->IsFileInIncludePath(flisttxt,&fullpath) ){ + cout <<"File "<ConcatFileName(gSystem->DirName(flisttxt),gSystem->BaseName(flisttxt)); flisttxt = fullpath; - if( !gSystem->ChangeDirectory(ddir) )return 0; + if( !gSystem->ChangeDirectory(ddir) ){ + cout << "Cannot change directory : "<Delete(); -// Tout = NULL; +TChain *PamLevel2::GetPamTree(TList *fl, TString detlist ){ - TChain *Tout =0; + TChain *Trout =0; - SetWhichTrees(detlist); + if( !detlist.IsNull() )SetWhichTrees(detlist); + TChain *T = 0; TChain *C = 0; @@ -737,81 +743,168 @@ TChain *B = 0; if(TRK2||TRK1||TRKh) T = new TChain("Tracker"); - if(CAL2||CAL1) C = new TChain("Calorimeter"); - if(TOF) O = new TChain("ToF"); - if(TRG) R = new TChain("Trigger"); - if(S4) S = new TChain("S4"); - if(ND) N = new TChain("NeutronD"); - if(AC) A = new TChain("Anticounter"); - if(ORB) B = new TChain("OrbitalInfo"); + if(CAL2||CAL1) C = new TChain("Calorimeter"); + if(TOF) O = new TChain("ToF"); + if(TRG) R = new TChain("Trigger"); + if(S4) S = new TChain("S4"); + if(ND) N = new TChain("NeutronD"); + if(AC) A = new TChain("Anticounter"); + if(ORB) B = new TChain("OrbitalInfo"); // loop over files and create chains TIter next(fl); TSystemFile *questo = 0; while ( (questo = (TSystemFile*) next()) ) { TString name = questo->GetName(); -// cout << "File: "<< name << endl; +// cout << "File: "<< name << endl; if( CheckLevel2File(name) ){ if(TRK2||TRK1||TRKh) T->Add(name); - if(CAL1||CAL2) C->Add(name); - if(TOF) O->Add(name); - if(TRG) R->Add(name); - if(S4) S->Add(name); - if(ND) N->Add(name); - if(AC) A->Add(name); - if(ORB) B->Add(name); + if(CAL1||CAL2) C->Add(name); + if(TOF) O->Add(name); + if(TRG) R->Add(name); + if(S4) S->Add(name); + if(ND) N->Add(name); + if(AC) A->Add(name); + if(ORB) B->Add(name); }; } cout << "done chain \n"; - + + UInt_t *found=0; +// Tracker + if(T && (TRK2||TRK1||TRKh)) { + if(TRK2)T->SetBranchAddress("TrkLevel2", GetPointerTo("TrkLevel2")); + else T->SetBranchStatus("TrkLevel2",0,found); + if(TRK2)cout << "Tracker : set branch address TrkLevel2"<SetBranchAddress("TrkLevel1", GetPointerTo("TrkLevel1")); + else T->SetBranchStatus("TrkLevel1",0,found); + if(TRK1)cout << "Tracker : set branch address TrkLevel1"<SetBranchAddress("TrkHough", GetPointerTo("TrkHough")); + else T->SetBranchStatus("TrkHough",0,found); + if(TRKh)cout << "Tracker : set branch address TrkHough"<AddFriend("Tracker"); + }else{ + cout << "Tracker : missing tree"<AddFriend("Calorimeter"); + if(C && (CAL2||CAL1)) { + if(CAL2)C->SetBranchAddress("CaloLevel2", GetPointerTo("CaloLevel2")); + else C->SetBranchStatus("CaloLevel2",0,found); + if(CAL2)cout << "Calorimeter : set branch address CaloLevel2"<SetBranchAddress("CaloLevel1", GetPointerTo("CaloLevel1")); + else C->SetBranchStatus("CaloLevel1",0,found); + if(CAL1)cout << "Calorimeter : set branch address CaloLevel1"<AddFriend("Calorimeter"); + }else{ + cout << "Calorimeter : missing tree"<AddFriend("ToF"); + if(O && TOF) { + O->SetBranchAddress("ToFLevel2", GetPointerTo("ToFLevel2")); + cout << "ToF : set branch address ToFLevel2"<AddFriend("ToF"); + }else{ + cout << "ToF : missing tree"<AddFriend("Tracker"); - } // Trigger - if(TRG) { - if(!Tout)Tout=R; - else Tout->AddFriend("Trigger"); + if(R && TRG) { + R->SetBranchAddress("TrigLevel2", GetPointerTo("TrigLevel2")); + cout << "Trigger : set branch address TrigLevel2"<AddFriend("Trigger"); + }else{ + cout << "Trigger : missing tree"<AddFriend("S4"); + if(S && S4) { + S->SetBranchAddress("S4Level2", GetPointerTo("S4Level2")); + cout << "S4 : set branch address S4Level2"<AddFriend("S4"); + }else{ + cout << "S4 : missing tree"<AddFriend("NeutronD"); + if(N && ND) { + N->SetBranchAddress("NDLevel2", GetPointerTo("NDLevel2")); + cout << "NeutronD : set branch address NDLevel2"<AddFriend("NeutronD"); + }else{ + cout << "NeutronD : missing tree"<AddFriend("Anticounter"); + if(A && AC) { + A->SetBranchAddress("AcLevel2", GetPointerTo("AcLevel2")); + cout << "Anticounter : set branch address AcLevel2"<AddFriend("Anticounter"); + }else{ + cout << "Anticounter : missing tree"<AddFriend("OrbitalInfo"); + // Orbital Info + if(B && ORB) { + B->SetBranchAddress("OrbitalInfo", GetPointerTo("OrbitalInfo")); + cout << "OrbitalInfo : set branch address OrbitalInfo"<AddFriend("OrbitalInfo"); + }else{ + cout << "OrbitalInfo : missing tree"<GetEntries()<AddFriend("Tracker"); +// } +// // Calorimeter +// if(CAL2||CAL1) { +// if(!Tout)Tout=C; +// else Tout->AddFriend("Calorimeter"); +// }; +// // ToF +// if(TOF) { +// if(!Tout)Tout=O; +// else Tout->AddFriend("ToF"); +// }; +// // Trigger +// if(TRG) { +// if(!Tout)Tout=R; +// else Tout->AddFriend("Trigger"); +// }; +// // S4 +// if(S4) { +// if(!Tout)Tout=S; +// else Tout->AddFriend("S4"); +// }; +// // Neutron Detector +// if(ND) { +// if(!Tout)Tout=N; +// else Tout->AddFriend("NeutronD"); +// }; +// // Anticounters +// if(AC) { +// if(!Tout)Tout=A; +// else Tout->AddFriend("Anticounter"); +// }; +// // OrbitalInfo +// if(ORB) { +// if(!Tout)Tout=B; +// else Tout->AddFriend("OrbitalInfo"); +// }; + // cout<GetEntries()<GetEntries() )PamLevel2::SetBranchAddress(); - if( Tout->GetEntries() )PamLevel2::SetBranchAddress( Tout ); +// if( Tout->GetEntries() )PamLevel2::SetBranchAddress( Tout ); - return Tout; + return Trout; } @@ -913,7 +1006,7 @@ // Tracker if(TRK2) { - t->SetBranchAddress("TrkLevel2", this->GetPointerTo("TrkLevel2")); + t->SetBranchAddress("TrkLevel2", GetPointerTo("TrkLevel2")); cout << "Tracker : set branch address TrkLevel2"< "; + if(TRK1)cout<<"TRK1 "; + if(TRK2)cout<<"TRK2 "; + if(TRKh)cout<<"TRKH "; + if(CAL1)cout<<"CAL1 "; + if(CAL2)cout<<"CAL2 "; + if(TOF)cout<<"TOF "; + if(TRG)cout<<"TRG "; + if(AC)cout<<"AC "; + if(ND)cout<<"ND "; + if(S4)cout<<"S4 "; + if(ORB)cout<<"ORB "; + cout << endl; }; + + +/** + * Set tree/branch detector flags from the content of a tree + */ +void PamLevel2::GetWhichTrees(TFile* f){ + + + // ----------- + // reset flags + // ----------- + Bool_t CAL1 = false; + Bool_t CAL2 = false; + Bool_t TRK2 = false; + Bool_t TRK1 = false; + Bool_t TRKh = false; + Bool_t TRG = false; + Bool_t TOF = false; + Bool_t S4 = false; + Bool_t ND = false; + Bool_t AC = false; + Bool_t ORB = false; + + Bool_t RUN = false; + + cout << "Checking file: "<GetName()<IsZombie() ){ + cout << "File: "<< f->GetName() <<" Non valid root file"<< endl; + return; + } + + TList *lk = f->GetListOfKeys(); + TIter next(lk); + TKey *key =0; + + Int_t nev = 0; + + while( (key = (TKey*)next()) ){ + + if( !strcmp(key->GetName(),"Run" ) )RUN = true; + + //========================================================= + if( !strcmp(key->GetName(),"Trigger" ) ){ + TRG = true; + Int_t nevt = ((TTree*)f->Get("Trigger"))->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" Trigger tree has "<GetName(),"ToF" ) ){ + TOF = true; + Int_t nevt = ((TTree*)f->Get("ToF"))->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" ToF tree has "<GetName(),"S4" ) ){ + S4 = true; + Int_t nevt = ((TTree*)f->Get("S4"))->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" S4 tree has "<GetName(),"NeutronD" ) ){ + ND = true; + Int_t nevt = ((TTree*)f->Get("NeutronD"))->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<"NeutronD tree has "<GetName(),"Anticounter") ){ + AC = true; + Int_t nevt = ((TTree*)f->Get("Anticounter"))->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" Anticounter tree has "<GetName(),"OrbitalInfo") ){ + ORB = true; + Int_t nevt = ((TTree*)f->Get("OrbitalInfo"))->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" OrbitalInfo tree has "<GetName(),"Tracker" ) ){ + TTree *T = (TTree*)f->Get("Tracker"); + for(Int_t i=0; iGetListOfBranches()->GetEntries(); i++){ + TString name = T->GetListOfBranches()->At(i)->GetName(); + if( !name.CompareTo("TrkLevel1") )TRK1=true; + if( !name.CompareTo("TrkLevel2") )TRK2=true; + if( !name.CompareTo("TrkHough") )TRKh=true; + }; + Int_t nevt = T->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" Tracker tree has "<Delete(); + }; + //========================================================= + if( !strcmp(key->GetName(),"Calorimeter" ) ){ + TTree *T = (TTree*)f->Get("Calorimeter"); + for(Int_t i=0; iGetListOfBranches()->GetEntries(); i++){ + TString name = T->GetListOfBranches()->At(i)->GetName(); + if( !name.CompareTo("CaloLevel1") )CAL1=true; + if( !name.CompareTo("CaloLevel2") )CAL2=true; + }; + Int_t nevt = T->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" Calorimeter tree has "<Delete(); + }; + + }; + + lk->Delete(); + + return ; + +}; + + //-------------------------------------- // // @@ -1384,7 +1596,7 @@ /** * Create clone-trees */ -void PamLevel2::CreateCloneTrees( TChain *fChain ){ +void PamLevel2::CreateCloneTrees0( TChain *fChain, TFile *ofile ){ cout << "+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+" <GetListOfFriends(); TIter next(li); TFriendElement* T_friend=0; + ofile->cd(); while( (T_friend = (TFriendElement*)next()) ){ // cout<IsA()->GetName()<<" "<GetName()<GetTree() << dec<GetTree()->GetName()<< endl; - tree_clone[i] = T_friend->GetTree()->CloneTree(0); + tree_clone[i] = T_friend->GetTree()->CloneTree(0); + tree_clone[i]->SetAutoSave(1000000); name = tree_clone[i]->GetName(); name.Append("_clone"); // tree_clone[i]->SetName(name.Data()); @@ -1415,95 +1629,95 @@ } -// /** -// * Create clone-trees -// */ -// void PamLevel2::CreateCloneTrees(){ +/** + * Create clone-trees + */ +void PamLevel2::CreateCloneTrees(TFile *ofile){ -// cout << "+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+" <cd(); + + cout << "+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+" <Branch("TrkLevel1","TrkLevel1", GetPointerTo("TrkLevel1")); -// T_clone->BranchRef(); -// cout << "Tracker : branch TrkLevel1"<Branch("TrkLevel2", "TrkLevel2",GetPointerTo("TrkLevel2")); -// cout << "Tracker : branch TrkLevel2"<Branch("TrkHough","TrkHough", GetPointerTo("TrkHough")); -// cout << "Tracker : branch TrkHough"<Branch("CaloLevel1", "CaloLevel1", GetPointerTo("CaloLevel1")); -// cout << "Calorimeter : branch CaloLevel1"<Branch("CaloLevel2","CaloLevel2", GetPointerTo("CaloLevel2")); -// cout << "Calorimeter : branch CaloLevel2"<Branch("TrkLevel1","TrkLevel1", GetPointerTo("TrkLevel1")); + tree_clone[i]->BranchRef(); + cout << "Tracker : branch TrkLevel1"<Branch("TrkLevel2", "TrkLevel2",GetPointerTo("TrkLevel2")); + cout << "Tracker : branch TrkLevel2"<Branch("TrkHough","TrkHough", GetPointerTo("TrkHough")); + cout << "Tracker : branch TrkHough"<Branch("ToFLevel2","ToFLevel2", GetPointerTo("ToFLevel2")); -// cout << "ToF : branch ToFLevel2"<Branch("TrigLevel2","TrigLevel2", GetPointerTo("TrigLevel2")); -// cout << "Trigger : branch TrigLevel2"<Branch("S4Level2","S4Level2", GetPointerTo("S4Level2")); -// cout << "S4 : branch S4Level2"<Branch("NDLevel2","NDLevel2", GetPointerTo("NDLevel2")); -// cout << "NeutronD : branch NDLevel2"<Branch("AcLevel2","AcLevel2", GetPointerTo("AcLevel2")); -// cout << "Anticounter : branch AcLevel2"<Branch("OrbitalInfo","OrbitalInfo", GetPointerTo("OrbitalInfo")); -// cout << "OrbitalInfo : branch OrbitalInfo"<Branch("CaloLevel1", "CaloLevel1", GetPointerTo("CaloLevel1")); + cout << "Calorimeter : branch CaloLevel1"<Branch("CaloLevel2","CaloLevel2", GetPointerTo("CaloLevel2")); + cout << "Calorimeter : branch CaloLevel2"<Branch("ToFLevel2","ToFLevel2", GetPointerTo("ToFLevel2")); + cout << "ToF : branch ToFLevel2"<Branch("TrigLevel2","TrigLevel2", GetPointerTo("TrigLevel2")); + cout << "Trigger : branch TrigLevel2"<Branch("S4Level2","S4Level2", GetPointerTo("S4Level2")); + cout << "S4 : branch S4Level2"<Branch("NDLevel2","NDLevel2", GetPointerTo("NDLevel2")); + cout << "NeutronD : branch NDLevel2"<Branch("AcLevel2","AcLevel2", GetPointerTo("AcLevel2")); + cout << "Anticounter : branch AcLevel2"<Branch("OrbitalInfo","OrbitalInfo", GetPointerTo("OrbitalInfo")); + cout << "OrbitalInfo : branch OrbitalInfo"<