Thierry, In your macro below, I assume that you have dynamically linked the CLHEP shared library. If not, then clearly your macro cannot work. If yes, then I do not understand why CINT complains at the line: HepLorentzVector proton_out((Double_t)tproton->Px(), I see, however, a possible problem in your macro. You should change: TClasEvent *event; to TClasEvent *event = 0; Now a general hint about tracing problems in CINT macros. I realize that not many people know that by simply activating the CINT trace option, you can discover a lot of problems. To activate the trace option, in a ROOT session, just type .T at the Root prompt: Root > .T CINT also includes a step by step debugger (style dbx/gdb). I would like to know, in your particular example, where Root crashes. Send me the log file generated by the ".T" activation. Rene Brun T Auger wrote: > > Hi Rooters, > we observed a strange behaviour in one of our macro using CLHEP. The > macro processed once failed at the byte-compilation and gave a break > seg fault. Then just hiting return made it work! Could someone give me > a hint on what we are doing wrong or is this a bug? > (the macro follows the prints). > cheers, > Thierry. > > root [0] .x phi.C > Error: non class,struct,union object $proton_out used with . or -> > FILE:/home/crash17/marchand/root/macro/./phi.C LINE:83 > alors 0 > nmatch 2 > nmatch 0 > nmatch 0 > nmatch 1 > proton 0.000000 > nmatch 1 > proton 0.000000 > nmatch 1 > proton 0.000000 > nmatch 1 > proton 0.000000 > nmatch 1 > proton 0.000000 > nmatch 2 > nmatch 0 > nmatch 1 > proton 0.000000 > > *** Break *** segmentation violation > > alors 0 > nmatch 2 > nmatch 0 > nmatch 0 > nmatch 1 > proton 1.008929 > nmatch 1 > proton 0.984921 > nmatch 1 > proton 1.515583 > nmatch 1 > proton 1.088752 > nmatch 1 > proton 1.352676 > nmatch 2 > nmatch 0 > nmatch 1 > proton 1.114028 > nmatch 0 > nmatch 1 > proton 1.449203 > nmatch 1 > proton 1.760664 > nmatch 0 > nmatch 1 > proton 1.586831 > nmatch 1 > proton 1.116349 > nmatch 1 > proton 1.130289 > nmatch 4 > nmatch 1 > proton 1.148586 > nmatch 0 > nmatch 1 > proton 0.969677 > nmatch 1 > proton 1.014140 > > { > // > // macro pour lire un tree et looper sur les particules chargees > // histogramme la masse apres notre pid. > // > gROOT->Reset(); > TFile f("/home/crash17/marchand/root/macro/g6-opp.root"); > > TTree *T = (TTree*)gDirectory->Get("T"); > //Declaration of leaves types > TClasEvent *event; > class HepLorentzVector; > > TH1F histo1("histo1","mass",100,-0.5,1.5); > TH1F histo2("histo2","mass kaon m",150,-1.,1.5); > > //Set branch addresses > T->SetBranchAddress("event",&event); > Int_t nentries = T->GetEntries(); > nentries = 1000000; > TClonesArray *tab; > Int_t nbytes = 0; > TTrack *track; > TTrack *tproton; > TTrack *tkaonp; > Int_t npro = 0; > Int_t nkp = 0; > Int_t indkp[10] = {0,0,0,0,0,0,0,0,0,0}; > Int_t indpro[10] = {0,0,0,0,0,0,0,0,0,0}; > Int_t iseckp[10] = {0,0,0,0,0,0,0,0,0,0}; > Int_t isecpro[10] = {0,0,0,0,0,0,0,0,0,0}; > > > for (Int_t i=0; i<nentries;i++) { > nbytes += T->GetEvent(i); > > tab = event->GetDetectedTracks(); > Float_t egamma = event->GetE(); > > HepLorentzVector photon(0,0,egamma,egamma); > HepLorentzVector proton_in(0,0,0,0.93827); > npro = 0; > nkp = 0; > for(Int_t j=0;j<=tab->GetLast();j++) { > track = (TTrack*)tab->At(j); > > // recuperer les protons et K+ en gardant leur index > if(track->Id()==2212) { > indpro[npro] = j; > isecpro[npro] = track->GetSectorId(); > npro++; > } > if(track->Id()==321) { > indkp[nkp] = j; > iseckp[nkp] = track->GetSectorId(); > nkp++; > } > histo1->Fill(track->GetMass()); > } > > // printf("nproton %d nkaonp %d\n",npro,nkp); > > if(nkp*npro>=1) { > > // test sur secteurs opposes p-K+ > Int_t nmatch = 0; > for(Int_t k=0;k<npro;k++) { > for(Int_t l=0;l<nkp;l++) { > if(fabs(isecpro[k]-iseckp[l])==3) { > Int_t indprs=indpro[k]; > Int_t indkps=indkp[l]; > nmatch++; > } > } > } > > if(nmatch==1) printf("nmatch %d\n",nmatch); > if(nmatch==1){ > tproton = (TTrack*)tab->At(indprs); > // printf("%f %f %f %f\n",tproton->Px(),tproton->Py(),tproton->Pz(),tproton->E_id()); > HepLorentzVector proton_out((Double_t)tproton->Px(), > (Double_t)tproton->Py(), > (Double_t)tproton->Pz(), > (Double_t)tproton->E_id()); > tkaonp = (TTrack*)tab->At(indkps); > // printf(" proton %f\n",proton_out.e()); > HepLorentzVector kaonp(tkaonp->Px(),tkaonp->Py(),tkaonp->Pz(),tkaonp->E_id()); > kaonm=photon+proton_in-proton_out-kaonp; > histo2->Fill(kaonm.mag2()); > } > } > > event->Clear(); > if(i%5000 == 0) printf("alors %d\n",i); > } > > }
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:37 MET