--- PamelaLevel2/src/PamLevel2.cpp 2007/09/12 08:14:00 1.45 +++ PamelaLevel2/src/PamLevel2.cpp 2007/11/05 13:10:13 1.52 @@ -1,4 +1,278 @@ #include + + + +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// + +void GPamela::Clear(){ + Irun = 0; + Ievnt = 0; + Ipa = 0; + X0 = 0.; + Y0 = 0.; + Z0 = 0.; + Theta = 0.; + Phi = 0.; + P0 = 0.; + Nthtof = 0; + Nthcat = 0; + Nthcas = 0; + Nthspe = 0; + Nstrpx = 0; + Nstrpy = 0; + Nthcali = 0; + Nthcal = 0; + Nthnd = 0; + Nthcard = 0; +} + +void GPamela::Delete(){ + + Clear(); + + delete [] Ipltof; + delete [] Ipaddle; + delete [] Ipartof; + delete [] Xintof; + delete [] Yintof; + delete [] Zintof; + delete [] Xouttof; + delete [] Youttof; + delete [] Zouttof; + delete [] Ereltof; + delete [] Timetof; + delete [] Pathtof; + delete [] P0tof; + delete [] Iparcat; + delete [] Icat; + delete [] Xincat; + delete [] Yincat; + delete [] Zincat; + delete [] Xoutcat; + delete [] Youtcat; + delete [] Zoutcat; + delete [] Erelcat; + delete [] Timecat; + delete [] Pathcat; + delete [] P0cat; + delete [] Iparcas; + delete [] Icas; + delete [] Xincas; + delete [] Yincas; + delete [] Zincas; + delete [] Xoutcas; + delete [] Youtcas; + delete [] Zoutcas; + delete [] Erelcas; + delete [] Timecas; + delete [] Pathcas; + delete [] P0cas; + delete [] Iparspe; + delete [] Itrpb; + delete [] Itrsl; + delete [] Itspa; + delete [] Xinspe; + delete [] Yinspe; + delete [] Zinspe; + delete [] Xoutspe; + delete [] Youtspe; + delete [] Zoutspe; + delete [] Xavspe; + delete [] Yavspe; + delete [] Zavspe; + delete [] Erelspe; + delete [] Pathspe; + delete [] P0spe; + delete [] Nxmult; + delete [] Nymult; + delete [] Npstripx; + delete [] Ntstripx; + delete [] Istripx; + delete [] Qstripx; + delete [] Xstripx; + delete [] Npstripy; + delete [] Ntstripy; + delete [] Istripy; + delete [] Qstripy; + delete [] Ystripy; + delete [] Icaplane; + delete [] Icastrip; + delete [] Icamod; + delete [] Enestrip; + delete [] Icapl; + delete [] Icasi; + delete [] Icast; + delete [] Xincal; + delete [] Yincal; + delete [] Zincal; + delete [] Erelcal; + delete [] Itubend; + delete [] Iparnd; + delete [] Xinnd; + delete [] Yinnd; + delete [] Zinnd; + delete [] Xoutnd; + delete [] Youtnd; + delete [] Zoutnd; + delete [] Erelnd; + delete [] Timend; + delete [] Pathnd; + delete [] P0nd; + delete [] Iparcard; + delete [] Icard; + delete [] Xincard; + delete [] Yincard; + delete [] Zincard; + delete [] Xoutcard; + delete [] Youtcard; + delete [] Zoutcard; + delete [] Erelcard; + delete [] Timecard; + delete [] Pathcard; + delete [] P0card; + + +}; + + + +void GPamela::SetBranchAddress( TChain* fhBookTree ){ + +// cout << "fhBookTree "<SetBranchAddress("Irun",&Irun); + fhBookTree->SetBranchAddress("Ievnt",&Ievnt); + fhBookTree->SetBranchAddress("Ipa",&Ipa); + fhBookTree->SetBranchAddress("X0",&X0); + fhBookTree->SetBranchAddress("Y0",&Y0); + fhBookTree->SetBranchAddress("Z0",&Z0); + fhBookTree->SetBranchAddress("Theta",&Theta); + fhBookTree->SetBranchAddress("Phi",&Phi); + fhBookTree->SetBranchAddress("P0",&P0); + fhBookTree->SetBranchAddress("Nthtof",&Nthtof); + fhBookTree->SetBranchAddress("Ipltof",Ipltof); + fhBookTree->SetBranchAddress("Ipaddle",Ipaddle); + fhBookTree->SetBranchAddress("Ipartof",Ipartof); + fhBookTree->SetBranchAddress("Xintof",Xintof); + fhBookTree->SetBranchAddress("Yintof",Yintof); + fhBookTree->SetBranchAddress("Zintof",Zintof); + fhBookTree->SetBranchAddress("Xouttof",Xouttof); + fhBookTree->SetBranchAddress("Youttof",Youttof); + fhBookTree->SetBranchAddress("Zouttof",Zouttof); + fhBookTree->SetBranchAddress("Ereltof",Ereltof); + fhBookTree->SetBranchAddress("Timetof",Timetof); + fhBookTree->SetBranchAddress("Pathtof",Pathtof); + fhBookTree->SetBranchAddress("P0tof",P0tof); + fhBookTree->SetBranchAddress("Nthcat",&Nthcat); + fhBookTree->SetBranchAddress("Iparcat",Iparcat); + fhBookTree->SetBranchAddress("Icat",Icat); + fhBookTree->SetBranchAddress("Xincat",Xincat); + fhBookTree->SetBranchAddress("Yincat",Yincat); + fhBookTree->SetBranchAddress("Zincat",Zincat); + fhBookTree->SetBranchAddress("Xoutcat",Xoutcat); + fhBookTree->SetBranchAddress("Youtcat",Youtcat); + fhBookTree->SetBranchAddress("Zoutcat",Zoutcat); + fhBookTree->SetBranchAddress("Erelcat",Erelcat); + fhBookTree->SetBranchAddress("Timecat",Timecat); + fhBookTree->SetBranchAddress("Pathcat",Pathcat); + fhBookTree->SetBranchAddress("P0cat",P0cat); + fhBookTree->SetBranchAddress("Nthcas",&Nthcas); + fhBookTree->SetBranchAddress("Iparcas",Iparcas); + fhBookTree->SetBranchAddress("Icas",Icas); + fhBookTree->SetBranchAddress("Xincas",Xincas); + fhBookTree->SetBranchAddress("Yincas",Yincas); + fhBookTree->SetBranchAddress("Zincas",Zincas); + fhBookTree->SetBranchAddress("Xoutcas",Xoutcas); + fhBookTree->SetBranchAddress("Youtcas",Youtcas); + fhBookTree->SetBranchAddress("Zoutcas",Zoutcas); + fhBookTree->SetBranchAddress("Erelcas",Erelcas); + fhBookTree->SetBranchAddress("Timecas",Timecas); + fhBookTree->SetBranchAddress("Pathcas",Pathcas); + fhBookTree->SetBranchAddress("P0cas",P0cas); + fhBookTree->SetBranchAddress("Nthspe",&Nthspe); + fhBookTree->SetBranchAddress("Iparspe",Iparspe); + fhBookTree->SetBranchAddress("Itrpb",Itrpb); + fhBookTree->SetBranchAddress("Itrsl",Itrsl); + fhBookTree->SetBranchAddress("Itspa",Itspa); + fhBookTree->SetBranchAddress("Xinspe",Xinspe); + fhBookTree->SetBranchAddress("Yinspe",Yinspe); + fhBookTree->SetBranchAddress("Zinspe",Zinspe); + fhBookTree->SetBranchAddress("Xoutspe",Xoutspe); + fhBookTree->SetBranchAddress("Youtspe",Youtspe); + fhBookTree->SetBranchAddress("Zoutspe",Zoutspe); + fhBookTree->SetBranchAddress("Xavspe",Xavspe); + fhBookTree->SetBranchAddress("Yavspe",Yavspe); + fhBookTree->SetBranchAddress("Zavspe",Zavspe); + fhBookTree->SetBranchAddress("Erelspe",Erelspe); + fhBookTree->SetBranchAddress("Pathspe",Pathspe); + fhBookTree->SetBranchAddress("P0spe",P0spe); + fhBookTree->SetBranchAddress("Nxmult",Nxmult); + fhBookTree->SetBranchAddress("Nymult",Nymult); + fhBookTree->SetBranchAddress("Nstrpx",&Nstrpx); + fhBookTree->SetBranchAddress("Npstripx",Npstripx); + fhBookTree->SetBranchAddress("Ntstripx",Ntstripx); + fhBookTree->SetBranchAddress("Istripx",Istripx); + fhBookTree->SetBranchAddress("Qstripx",Qstripx); + fhBookTree->SetBranchAddress("Xstripx",Xstripx); + fhBookTree->SetBranchAddress("Nstrpy",&Nstrpy); + fhBookTree->SetBranchAddress("Npstripy",Npstripy); + fhBookTree->SetBranchAddress("Ntstripy",Ntstripy); + fhBookTree->SetBranchAddress("Istripy",Istripy); + fhBookTree->SetBranchAddress("Qstripy",Qstripy); + fhBookTree->SetBranchAddress("Ystripy",Ystripy); + fhBookTree->SetBranchAddress("Nthcali",&Nthcali); + fhBookTree->SetBranchAddress("Icaplane",Icaplane); + fhBookTree->SetBranchAddress("Icastrip",Icastrip); + fhBookTree->SetBranchAddress("Icamod",Icamod); + fhBookTree->SetBranchAddress("Enestrip",Enestrip); + fhBookTree->SetBranchAddress("Nthcal",&Nthcal); + fhBookTree->SetBranchAddress("Icapl",Icapl); + fhBookTree->SetBranchAddress("Icasi",Icasi); + fhBookTree->SetBranchAddress("Icast",Icast); + fhBookTree->SetBranchAddress("Xincal",Xincal); + fhBookTree->SetBranchAddress("Yincal",Yincal); + fhBookTree->SetBranchAddress("Zincal",Zincal); + fhBookTree->SetBranchAddress("Erelcal",Erelcal); + fhBookTree->SetBranchAddress("Nthnd",&Nthnd); + fhBookTree->SetBranchAddress("Itubend",Itubend); + fhBookTree->SetBranchAddress("Iparnd",Iparnd); + fhBookTree->SetBranchAddress("Xinnd",Xinnd); + fhBookTree->SetBranchAddress("Yinnd",Yinnd); + fhBookTree->SetBranchAddress("Zinnd",Zinnd); + fhBookTree->SetBranchAddress("Xoutnd",Xoutnd); + fhBookTree->SetBranchAddress("Youtnd",Youtnd); + fhBookTree->SetBranchAddress("Zoutnd",Zoutnd); + fhBookTree->SetBranchAddress("Erelnd",Erelnd); + fhBookTree->SetBranchAddress("Timend",Timend); + fhBookTree->SetBranchAddress("Pathnd",Pathnd); + fhBookTree->SetBranchAddress("P0nd",P0nd); + fhBookTree->SetBranchAddress("Nthcard",&Nthcard); + fhBookTree->SetBranchAddress("Iparcard",Iparcard); + fhBookTree->SetBranchAddress("Icard",Icard); + fhBookTree->SetBranchAddress("Xincard",Xincard); + fhBookTree->SetBranchAddress("Yincard",Yincard); + fhBookTree->SetBranchAddress("Zincard",Zincard); + fhBookTree->SetBranchAddress("Xoutcard",Xoutcard); + fhBookTree->SetBranchAddress("Youtcard",Youtcard); + fhBookTree->SetBranchAddress("Zoutcard",Zoutcard); + fhBookTree->SetBranchAddress("Erelcard",Erelcard); + fhBookTree->SetBranchAddress("Timecard",Timecard); + fhBookTree->SetBranchAddress("Pathcard",Pathcard); + fhBookTree->SetBranchAddress("P0card",P0card); + +// fhBookTree->SetBranchStatus("*",0); + +} + +ClassImp(GPamela); + +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// //-------------------------------------- // // @@ -11,6 +285,8 @@ calo_track = 0; tof_track = 0; candeleteobj = 0; + pscore = 0; + iscore = 0; }; //-------------------------------------- // @@ -60,6 +336,9 @@ calo_track = 0; tof_track = 0; } + pscore = 0; + iscore = 0; + } void PamTrack::Delete(){ // cout << "PamTrack::Delete() "< load all trees/branches in the input files + * +(-)ALL --> inlcude(exclude) all trees/branches + * +(-)TRK1+(-)TRK2+(-)CAL1+(-)CAL2+(-)TOF+(-)TRG+(-)ND+(-)S4+(-)ORB+(-)AC --> inlcude(exclude) trees and branches + * +(-)TRK0 --> include(exclude) tracker level0 tree + * +(-)GP --> include exclude GPAMELA output tree + * If no options are specified, the default is assumed. Default is: + * +TRK2+CAL2+CAL1+TOF+TRG+ND+AC+S4+ORB */ PamLevel2::PamLevel2(TString ddir,TString list,TString detlist){ Initialize(); @@ -101,7 +391,11 @@ }; /** - * Constructor with given dir and list + * Constructor + * @param ddir Name of directory where level2 files are stored. + * @param list Name of an ascii file containing the list of file names + * Default trees/branches are loaded. Default is: + * +TRK2+CAL2+CAL1+TOF+TRG+ND+AC+S4+ORB */ PamLevel2::PamLevel2(TString ddir,TString list){ Initialize(); @@ -127,6 +421,7 @@ nd_obj = 0; ac_obj = 0; orb_obj = 0; + gp_obj = 0; run_obj = 0;//new GL_RUN(); soft_obj = 0;// Emiliano @@ -140,6 +435,7 @@ dbc = 0; prevshift = 0; + maxshift = 10; //EMILIANO run_tree = NULL; run_tree_clone = NULL; @@ -175,7 +471,7 @@ CAL2 = true; TRK2 = true; TRK1 = false; - TRKh = false; + TRK0 = false; TRKh = false; TRG = true; TOF = true; @@ -183,8 +479,9 @@ S4 = true; ND = true; AC = true; - ORB = true; - + ORB = true; + GP = false; + RUN = true; SELLI = -1; @@ -222,6 +519,7 @@ if(nd_obj) delete nd_obj; if(ac_obj) delete ac_obj; if(orb_obj) delete orb_obj; + if(gp_obj) delete gp_obj; if(tsorted){ tsorted->Delete(); @@ -309,6 +607,7 @@ if(nd_obj) nd_obj->Clear(); if(ac_obj) ac_obj->Clear(); if(orb_obj) orb_obj->Clear(); + if(gp_obj) gp_obj->Clear(); // if(sorted_tracks)sorted_tracks->Clear(); // sorted_tracks.Clear(); @@ -385,6 +684,7 @@ nd_obj = 0; ac_obj = 0; orb_obj = 0; + gp_obj = 0; // // Reset run pointers // @@ -476,6 +776,10 @@ if(!orb_obj) orb_obj = new OrbitalInfo(); return &orb_obj; }; + if(!objname.CompareTo("GPamela")){ + if(!gp_obj) gp_obj = new GPamela(); + return &gp_obj; + }; if(!objname.CompareTo("RunInfo"))return &run_obj; @@ -631,7 +935,7 @@ void PamLevel2::SortTracks(){ TString how = howtosort; - // cout <<" PamLevel2::SortTracks(TString how) "<HasImage()){ ti = trk2_obj->TrkLevel2::GetTrackImage(i); //tracker (image) @@ -701,8 +1024,8 @@ // cout << "its image "<npcfit[1] > 5 && //no. of fit planes on Y view @@ -730,9 +1059,14 @@ // else ti_score++; - if( cp->npresh > ci->npresh) tp_score++; - if( cp->npresh < ci->npresh) ti_score++; - else ;//niente + if( cp->npresh > ci->npresh){ + tp_score++; + totp_score++; + }; + if( cp->npresh < ci->npresh){ + ti_score++; + toti_score++; + }; // cout << "CALO "<npmtadc; ih++){ @@ -761,7 +1101,7 @@ if ( pl == 2 || pl == 3 || pl == 4 || pl == 5 ) sen += (oi->dedx).At(ih); }; // - if ( sen >= sortthr ){ + if ( sen >= sortthr && false){ // temporary disabled NUCLEI special algorithm since the new one should work for every particle (to be checked!) //printf(" IS A NUCLEUS! en = %f \n",sen); // // is a nucleus use a different algorithm @@ -854,7 +1194,7 @@ if( - use_TOF && + (use_TOF || use_S1 || use_S2 || use_S3) && (nphit_p+nphit_i) !=0 && true){ @@ -899,24 +1239,34 @@ // --- modified to count tdc signals (more efficient?) // --- and to implement check on tdcflag for (Int_t ih=0; ih < op->npmttdc; ih++){ - // Int_t pl = tof_obj->GetPlaneIndex( (op->pmttdc).At(ih) ); + Int_t pl = tof_obj->GetPlaneIndex( (op->pmttdc).At(ih) ); // if( (op->tdcflag).At(ih)==0 && (pl == 1 || pl == 2 || pl == 5) )nphit_p++; - if( (op->tdcflag).At(ih)==0 )nphit_p++; + if ( (use_S1 && ( pl == 0 || pl == 1 )) || (use_S2 && ( pl == 2 || pl == 3 )) || (use_S3 && ( pl == 4 || pl == 5 )) ){ + if( (op->tdcflag).At(ih)==0 )nphit_p++; + }; }; for (Int_t ih=0; ih < oi->npmttdc; ih++){ - // Int_t pl = tof_obj->GetPlaneIndex( (oi->pmttdc).At(ih) ); + Int_t pl = tof_obj->GetPlaneIndex( (oi->pmttdc).At(ih) ); // if( (oi->tdcflag).At(ih)==0 && (pl == 1 || pl == 2 || pl == 5) )nphit_i++; - if( (oi->tdcflag).At(ih)==0 )nphit_i++; + if ( (use_S1 && ( pl == 0 || pl == 1 )) || (use_S2 && ( pl == 2 || pl == 3 )) || (use_S3 && ( pl == 4 || pl == 5 )) ){ + if( (oi->tdcflag).At(ih)==0 )nphit_i++; + }; }; if( (nphit_p+nphit_i) !=0 && true){ - if ( nphit_p > nphit_i) tp_score++; - else if( nphit_p < nphit_i) ti_score++; - else ;//niente + if ( nphit_p != nphit_i ){ + totp_score += nphit_p; + toti_score += nphit_i; + tp_score+=nphit_p; + ti_score+=nphit_i; + }; + // if ( nphit_p > nphit_i) tp_score+=nphit_p; + // else if( nphit_p < nphit_i) ti_score+=nphit_i; + // else ;//niente }; }; // cout << "TOF "<chi2 > 0 && ti->chi2 < tp->chi2 ) ti_score++ ; // CHECK 1 : number of points along X - if ( tp->GetNX() >= ti->GetNX() )tp_score++ ; - if ( tp->GetNX() <= ti->GetNX() )ti_score++ ; + if ( tp->GetNX() >= ti->GetNX() ){ + tp_score++ ; + totp_score++ ; + }; + if ( tp->GetNX() <= ti->GetNX() ){ + ti_score++ ; + toti_score++ ; + }; // CHECK 2 : number of points along Y - if ( tp->GetNY() >= ti->GetNY() )tp_score++ ; - if ( tp->GetNY() <= ti->GetNY() )ti_score++ ; + if ( tp->GetNY() >= ti->GetNY() ){ + tp_score++ ; + totp_score++ ; + }; + if ( tp->GetNY() <= ti->GetNY() ){ + ti_score++ ; + toti_score++ ; + }; // CHECK 3 : chi**2 along X // if( tp->GetChi2X() > 0 && (tp->GetChi2X() < ti->GetChi2X() || ti->GetChi2X() <=0) ) tp_score++ ; // if( ti->GetChi2X() > 0 && (ti->GetChi2X() < tp->GetChi2X() || tp->GetChi2X() <=0) ) ti_score++ ; @@ -970,6 +1332,7 @@ ts = ti;//its image!! cs = ci; os = oi; + Int_t totis = toti_score; ti = tp;//its image!! ci = cp; @@ -979,6 +1342,9 @@ cp = cs; op = os; + toti_score = totp_score; + totp_score = totis; + }else { @@ -987,6 +1353,9 @@ }; }else{ + totp_score = 1; + toti_score = 0; + // ts = tp; // cs = cp; // os = op; @@ -1000,8 +1369,14 @@ // cout<<"o "<SetPScore(totp_score); + ((PamTrack*)(ttsorted[i]))->SetIScore(toti_score); + ((PamTrack*)(ttimage[i]))->SetPScore(totp_score); + ((PamTrack*)(ttimage[i]))->SetIScore(toti_score); }; if( tsorted->GetEntries() != trk2_obj->GetNTracks() ){ @@ -1167,17 +1542,21 @@ */ TTree *PamLevel2::GetPamTree(TFile *f, TString detlist ){ -// if( !detlist.IsNull() ) SetWhichTrees(detlist); -// else GetWhichTrees(f); - if ( pam_tree ){ - printf("WARNING: TTree *PamLevel2::GetPamTree(TFile *fl, TString detlist) -- pam_tree already exists!\n "); - return pam_tree; - }; + if( detlist.Contains("+AUTO", TString::kIgnoreCase) ) { + cout << "+AUTO"<>> Found selection-list <<<"<Get("h20"); + if(G && GP) { + if(!gp_obj)gp_obj=new GPamela(); +// ------------------------------------ +// ATTENZIONE!!! +// non so per quale arcano motivo, +// per l'albero di gpamela il branch address lo devo settare +// DOPO aver fatto friend +// FGRRRVZZZZUTSALKJMSLKJ!!! +// ------------------------------------ +// gp_obj->SetBranchAddress(G); //ho dovuto fare in maniera diversa dagli altri +// cout << "h20 : set branch address GPamela "<AddFriend(G); + }else{ +// cout << "h20 : missing tree"<Get("SelectionList"); if(L && SELLI==1) { // L->SetBranchAddress("RunEntry",&irun); @@ -1312,6 +1712,20 @@ cout<GetEntries()<SetBranchAddress(Trout); //ho dovuto fare in maniera diversa dagli altri + cout << "h20 : set branch address GPamela "< "; - 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; + if( detlist.Contains("+AUTO", TString::kIgnoreCase) ) { + if( fl->GetEntries()>0 ){ + cout << "+AUTO"<At(0)->GetName() ); + GetWhichTrees(fprimo); + fprimo->Delete(); + } + }; + SetWhichTrees(detlist); + + +// if( !detlist.IsNull() )SetWhichTrees(detlist); +// TChain *T = 0; TChain *C = 0; TChain *O = 0; @@ -1498,6 +1910,7 @@ TChain *N = 0; TChain *A = 0; TChain *B = 0; + TChain *G = 0; TChain *L = 0; @@ -1509,7 +1922,8 @@ if(ND) N = new TChain("NeutronD"); if(AC) A = new TChain("Anticounter"); if(ORB) B = new TChain("OrbitalInfo"); - L = new TChain("SelectionList"); + if(GP) G = new TChain("h20"); + L = new TChain("SelectionList"); // loop over files and create chains TIter next(fl); @@ -1526,6 +1940,7 @@ if(ND) N->Add(name); if(AC) A->Add(name); if(ORB) B->Add(name); + if(GP) G->Add(name); if(SELLI==1) L->Add(name); }; }; @@ -1536,87 +1951,105 @@ // 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"<SetBranchAddress("TrkLevel2", GetPointerTo("TrkLevel2")); +// if(TRK2)cout << "Tracker : set branch address TrkLevel2"<SetBranchAddress("TrkLevel1", GetPointerTo("TrkLevel1")); +// if(TRK1)cout << "Tracker : set branch address TrkLevel1"<SetBranchAddress("TrkHough", GetPointerTo("TrkHough")); +// if(TRKh)cout << "Tracker : set branch address TrkHough"<AddFriend("Tracker"); }else{ - cout << "Tracker : missing tree"<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"<SetBranchAddress("CaloLevel2", GetPointerTo("CaloLevel2")); +// if(CAL2)cout << "Calorimeter : set branch address CaloLevel2"<SetBranchAddress("CaloLevel1", GetPointerTo("CaloLevel1")); +// if(CAL1)cout << "Calorimeter : set branch address CaloLevel1"<AddFriend("Calorimeter"); }else{ - cout << "Calorimeter : missing tree"<SetBranchAddress("ToFLevel2", GetPointerTo("ToFLevel2")); - cout << "ToF : set branch address ToFLevel2"<SetBranchAddress("ToFLevel2", GetPointerTo("ToFLevel2")); +// cout << "ToF : set branch address ToFLevel2"<AddFriend("ToF"); }else{ - cout << "ToF : missing tree"<SetBranchAddress("TrigLevel2", GetPointerTo("TrigLevel2")); - cout << "Trigger : set branch address TrigLevel2"<SetBranchAddress("TrigLevel2", GetPointerTo("TrigLevel2")); +// cout << "Trigger : set branch address TrigLevel2"<AddFriend("Trigger"); }else{ - cout << "Trigger : missing tree"<SetBranchAddress("S4Level2", GetPointerTo("S4Level2")); - cout << "S4 : set branch address S4Level2"<SetBranchAddress("S4Level2", GetPointerTo("S4Level2")); +// cout << "S4 : set branch address S4Level2"<AddFriend("S4"); }else{ - cout << "S4 : missing tree"<SetBranchAddress("NDLevel2", GetPointerTo("NDLevel2")); - cout << "NeutronD : set branch address NDLevel2"<SetBranchAddress("NDLevel2", GetPointerTo("NDLevel2")); +// cout << "NeutronD : set branch address NDLevel2"<AddFriend("NeutronD"); }else{ - cout << "NeutronD : missing tree"<SetBranchAddress("AcLevel2", GetPointerTo("AcLevel2")); - cout << "Anticounter : set branch address AcLevel2"<SetBranchAddress("AcLevel2", GetPointerTo("AcLevel2")); +// cout << "Anticounter : set branch address AcLevel2"<AddFriend("Anticounter"); }else{ - cout << "Anticounter : missing tree"<SetBranchAddress("OrbitalInfo", GetPointerTo("OrbitalInfo")); - cout << "OrbitalInfo : set branch address OrbitalInfo"<SetBranchAddress("OrbitalInfo", GetPointerTo("OrbitalInfo")); +// cout << "OrbitalInfo : set branch address OrbitalInfo"<AddFriend("OrbitalInfo"); }else{ - cout << "OrbitalInfo : missing tree"<SetBranchAddress(G); //ho dovuto fare in maniera diversa dagli altri +// cout << "h20 : set branch address GPamela "<AddFriend("h20"); + }else{ +// cout << "h20 : missing tree"<GetEntries()<SetBranchAddress(Trout); //ho dovuto fare in maniera diversa dagli altri +// cout << "h20 : set branch address GPamela "<GetBranchStatus("NDLevel2"); AC = AC & t->GetBranchStatus("AcLevel2"); ORB = ORB & t->GetBranchStatus("OrbitalInfo"); + GP = GP & t->GetBranchStatus("h20"); // Tracker @@ -1720,6 +2170,13 @@ t->SetBranchAddress("OrbitalInfo", GetPointerTo("OrbitalInfo")); cout << "OrbitalInfo : set branch address OrbitalInfo"<SetBranchAddress(t); //ho dovuto fare in maniera diversa dagli altri + cout << "h20 : set branch address GPamela "<SetBranchAddress("RunEntry", &irun); @@ -1734,17 +2191,18 @@ */ void PamLevel2::SetBranchAddress(TChain *t){ - TRK2 = TRK2 & t->GetBranchStatus("TrkLevel2"); - TRK1 = TRK1 & t->GetBranchStatus("TrkLevel1"); - TRKh = TRKh & t->GetBranchStatus("TrkHough"); - CAL1 = CAL1 & t->GetBranchStatus("CaloLevel1"); - CAL2 = CAL2 & t->GetBranchStatus("CaloLevel2"); - TOF = TOF & t->GetBranchStatus("ToFLevel2"); - TRG = TRG & t->GetBranchStatus("TrigLevel2"); - S4 = S4 & t->GetBranchStatus("S4Level2"); - ND = ND & t->GetBranchStatus("NDLevel2"); - AC = AC & t->GetBranchStatus("AcLevel2"); - ORB = ORB & t->GetBranchStatus("OrbitalInfo"); +// TRK2 = TRK2 & t->GetBranchStatus("TrkLevel2"); +// TRK1 = TRK1 & t->GetBranchStatus("TrkLevel1"); +// TRKh = TRKh & t->GetBranchStatus("TrkHough"); +// CAL1 = CAL1 & t->GetBranchStatus("CaloLevel1"); +// CAL2 = CAL2 & t->GetBranchStatus("CaloLevel2"); +// TOF = TOF & t->GetBranchStatus("ToFLevel2"); +// TRG = TRG & t->GetBranchStatus("TrigLevel2"); +// S4 = S4 & t->GetBranchStatus("S4Level2"); +// ND = ND & t->GetBranchStatus("NDLevel2"); +// AC = AC & t->GetBranchStatus("AcLevel2"); +// ORB = ORB & t->GetBranchStatus("OrbitalInfo"); +// GP = GP & t->GetBranchStatus("h20"); // Tracker if(TRK2) { @@ -1800,6 +2258,14 @@ t->SetBranchAddress("OrbitalInfo", GetPointerTo("OrbitalInfo")); cout << "OrbitalInfo : set branch address OrbitalInfo"<SetBranchAddress(t); //ho dovuto fare in maniera diversa dagli altri + cout << "h20 : set branch address GPamela "<SetBranchAddress("RunEntry", &irun); @@ -1899,7 +2365,7 @@ // // check if we have already called once GetEntry, if not call it // - cout << "Bool_t PamLevel2::UpdateRunInfo(TChain *run, Long64_t iev) --- NON FUNZIONA BENISSIMO.... "<RUNHEADER_TIME; // BARBATRUCCO @@ -2110,12 +2576,15 @@ obt <= GetRunInfo()->RUNTRAILER_OBT) ) || GetRunInfo()->NEVENTS==0 - || !(irunentry < GetRunInfo()->NEVENTS-1-prevshift) +// || !(irunentry < GetRunInfo()->NEVENTS-1-prevshift) // ERRORE!!! fa saltare i run con 1 evento + || !(irunentry <= GetRunInfo()->NEVENTS-1-prevshift) ) && irun < run_tree->GetEntries() ){ - - + // - - - - - - - - - - - - - + // irunentry = position of current entry, relative to the run + // prevshift = shift needed to synchronize l0 and l2 data (nested events) + // - - - - - - - - - - - - - // ----------------------------------------- // store dead and live-time of previous run @@ -2304,22 +2773,33 @@ * @param detlist TString containing the sequence of trees required */ void PamLevel2::SetWhichTrees(TString detlist){ - - if(detlist.IsNull() || detlist.Contains("+ALL", TString::kIgnoreCase)){ - CAL0 = false; + +// if(detlist.IsNull() || detlist.Contains("+ALL", TString::kIgnoreCase)){ + if( detlist.Contains("+ALL", TString::kIgnoreCase)){ + + cout << " ======================================================== "< "; + if(TRK0)cout<<"TRK0 "; + if(TRK1)cout<<"TRK1 "; + if(TRK2)cout<<"TRK2 "; + if(TRKh)cout<<"TRKH "; + if(CAL0)cout<<"CAL0 "; + 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 "; + if(GP)cout<<"GP "; + cout << endl; // cout<< "Set detector list --> "; // if(TRK1)cout<<"TRK1 "; // if(TRK2)cout<<"TRK2 "; // if(TRKh)cout<<"TRKH "; // if(CAL1)cout<<"CAL1 "; // if(CAL2)cout<<"CAL2 "; +// if(TOF0)cout<<"TOF0 "; // if(TOF)cout<<"TOF "; // if(TRG)cout<<"TRG "; // if(AC)cout<<"AC "; @@ -2432,7 +2933,7 @@ - cout << "void PamLevel2::GetWhichTrees(TFile* f) --- WARNING!! --- ...potrebbe non funzionare "<Delete(); +// T->Delete(); }; //========================================================= if( !strcmp(key->GetName(),"Calorimeter" ) ){ @@ -2553,26 +3055,36 @@ CAL1 = false; CAL2 = false; }else nev=nevt; - T->Delete(); +// T->Delete(); }; + //========================================================= + if( !strcmp(key->GetName(),"h20") ){ + GP = true; + Int_t nevt = ((TTree*)f->Get("h20"))->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" h20 tree has "< "; -// 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; + cout<< "Get detector list from input file --> "; + 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 "; + if(GP)cout<<"GP "; + cout << endl; return ; @@ -2601,6 +3113,7 @@ Bool_t ND__ok = false; Bool_t AC__ok = false; Bool_t ORB__ok = false; + Bool_t GP__ok = false; Bool_t RUN__ok = false; @@ -2632,6 +3145,9 @@ // return false; // }; + //========================================================= + // check if the file + if( !strcmp(key->GetName(),"Run" ) )RUN__ok = true; @@ -2758,6 +3274,19 @@ }; T->Delete(); }; + //========================================================= + if( !strcmp(key->GetName(),"h20") ){ + ISGP = true; + GP__ok = true; + if(GP){ + Int_t nevt = ((TTree*)f->Get("h20"))->GetEntries(); + if( nev && nevt!=nev){ + cout << "File: "<< f->GetName() <<" discarded ---- OrbitalInfo tree has "<GetName() <<" discarded ---- Missing Trigger tree"<< endl; return false; }; + if(GP && !GP__ok){ + cout << "File: "<< f->GetName() <<" discarded ---- Missing h20 tree"<< endl; + return false; + }; // lk->Delete(); @@ -2865,6 +3398,7 @@ // if(ND)cout<<"ND "; // if(S4)cout<<"S4 "; // if(ORB)cout<<"ORB "; +// if(GP)cout<<"GP "; // cout << endl; return true; @@ -3034,6 +3568,13 @@ cout << "OrbitalInfo : branch OrbitalInfo"<Branch("GPamela","GPamela", GetPointerTo("GPamela"),32000,1);//split + cout << "OrbitalInfo : branch OrbitalInfo"<P0 "<P0<IsConnected())){ cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<Close(); + + }; - if(!dbc || (dbc && !dbc->IsConnected())){ - cout << " TTree* PamLevel2::GetYodaTree( ) -- no DB connected... hai fatto qualche cazzata "<IsConnected())){ +// cout << " TTree* PamLevel2::GetYodaTree( ) -- no DB connected... hai fatto qualche cazzata "<0){ cout << " PKTNUM L2 --- "<< pktn << " --- L0 --- "<< GetEventHeader()->GetPscuHeader()->GetCounter()<