Hi Eduard, I do not have quite enough information to give a definitive answer. However, did you check that there are some tracks for the event where it fails? If you are sure that the Trks pointer is available valid, is there always enough value in the array returned by Trks->trpars() and Trks->trerrs()? Also you can try to either compiler your code (ACLiC) or disable the CINT optimization (.O 0) which has sometimes some troubles with some loops. Cheers, Philippe. -----Original Message----- From: owner-roottalk@pcroot.cern.ch [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Eduard De La Cruz Burelo Sent: Monday, March 17, 2003 5:54 AM To: roottalk@pcroot.cern.ch Subject: [ROOT] segmentation violation , Any idea? Hello I have trying to figure out the problem but I have a few days working on it without find the problem. I have a macro ( Loop() )similar which is created by MakeClass(), but I have included a few structures, like these ones: struct track_C { Double_t Par[5]; //Parameters Double_t EMatrix[5][5]; //Error's Matrix Double_t Chisq = 0; //X^2 //int Nhits; }; struct track_C_list { track_C trklist[300]; int ntracks; // number of tracks }; I also included in MyClass.C a script to fill this information: track_C MyClass::FillTrack(TMBTrks* Trks) { track_C trck; Double_t *trpars = 0; Double_t *trerrs = 0; trpars = Trks->trpars(); trerrs = Trks->trerrs(); trck.Par[0] = trpars[0]; trck.Par[1] = trpars[1]; trck.Par[2] = trpars[2]; trck.Par[3] = trpars[3]; trck.Par[4] = trpars[4]; trck.EMatrix[0][0] = trerrs[0]; trck.EMatrix[0][1] = trerrs[1]; trck.EMatrix[0][2] = trerrs[2]; trck.EMatrix[0][3] = trerrs[3]; trck.EMatrix[0][4] = trerrs[4]; trck.EMatrix[1][1] = trerrs[5]; trck.EMatrix[1][2] = trerrs[6]; trck.EMatrix[1][3] = trerrs[7]; trck.EMatrix[1][4] = trerrs[8]; trck.EMatrix[2][2] = trerrs[9]; trck.EMatrix[2][3] = trerrs[10]; trck.EMatrix[2][4] = trerrs[11]; trck.EMatrix[3][3] = trerrs[12]; trck.EMatrix[3][4] = trerrs[13]; trck.EMatrix[4][4] = trerrs[14]; trck.EMatrix[1][0] = trerrs[1]; trck.EMatrix[2][0] = trerrs[2]; trck.EMatrix[2][1] = trerrs[6]; trck.EMatrix[3][0] = trerrs[3]; trck.EMatrix[3][1] = trerrs[7]; trck.EMatrix[3][2] = trerrs[10]; trck.EMatrix[4][0] = trerrs[4]; trck.EMatrix[4][1] = trerrs[8]; trck.EMatrix[4][2] = trerrs[11]; trck.EMatrix[4][3] = trerrs[13]; trck.Chisq = Trks->getChi2Ndf(); return trck; } if I do not use the function FillTrack, everything run fine, I can make histograms, fill root tuples, etc., but if I use this function, I get: root [2] t.MyLoopMC(); Number of events : 11000 Event: 1 <------- New event ---------> We have 4 muons Starting loop 1 ... Starting loop 2 ... Starting loop 2 ... Starting loop 2 ... Matching ... done 0 --- 5 Starting loop 1 ... Starting loop 1 ... Starting loop 2 ... Matching ... done 4 --- 5 <------- Finishing New event ---------> Event 2 <------- New event ---------> We have 4 muons Starting loop 1 ... Starting loop 1 ... Starting loop 1 ... <------- Finishing New event ---------> *** Break *** segmentation violation Root > Function MyLoopMC() busy flag cleared As you can see I look for two muons and then I make a matching with MC, that work fine, but after the second event I get a segmentation violation and I can not find where is the problem because the event get the end, but the next one does not start, and there is nothing between them. If anybody have an idea about what could be the problem please let me know. Any help is welcome. Thanks a lot Eduard P.S.I am using Version 3.03/07
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:10 MET