GSI Helmholtzzentrum für Schwerionenforschung
Hi all, I started to try out genfit on MvdHits. After some issues concerning the Mvd package itself I ran into some fitting problems which don't tell me much. Here we go: I checked in the stuff into rev. 2589 (and 2588). I run the macros in macro/mvd/Tracking The simulation does 1GeV protons with Mvd & Field The digi & hitreco runs MC Trackfinding runs Anyway somehow the Kalman cannot fit the tracks I make. Here you have some detailed output (I uncommented the info output in the Kalman class). Hopefully someone can help... Ralf. Toggle Spoiler PndMvdKalmanTask::Exec -I- PndMvdKalmanTask: contains 1 Tracks. Detailed Debug info on the tracks: TrackCand no. 0 has 6 hits. [ ihit | detid | index ] [ 0 | 3 | 0 ] [ 1 | 3 | 1 ] [ 2 | 3 | 2 ] [ 3 | 4 | 0 ] [ 4 | 4 | 1 ] [ 5 | 4 | 2 ] starting track0 -I- PndMvdRecoHit::PndMvdRecoHit(PndMvdHit*) called. Mvd hit in detector 1_1/34_0/119_1/118_2/98_14/92_1/90_1/89_1/ at (1.60909, 0.271733, 1.94354) cm with 46929.8 e, Cluster No. 0 o: 2.11 0.656733 1.94354 u: 0 1 0 v: -1 0 0 -I- PndMvdRecoHit::PndMvdRecoHit(PndMvdHit*) called. Mvd hit in detector 1_1/34_0/102_1/101_3/98_1/92_1/90_1/89_1/ at (4.16446, 0.653887, 5.0215) cm with 92495.9 e, Cluster No. 1 o: 4.08241 1.43459 4.5 u: -0.104528 0.994522 0 v: 0 0 1 -I- PndMvdRecoHit::PndMvdRecoHit(PndMvdHit*) called. Mvd hit in detector 1_1/34_0/66_2/65_12/59_1/57_1/56_1/ at (4.9599, 0.758694, 5.975) cm with 32364.3 e, Cluster No. 2 o: 4.10249 -1.00282 5.975 u: 0.707107 0.707107 0 v: -0.707107 0.707107 0 -I- PndMvdRecoHit::PndMvdRecoHit(PndMvdHit*) called. Mvd hit in detector 1_1/34_0/80_1/78_1/77_4/75_29/72_1/71_1/ at (7.89362, 1.08679, 9.48283) cm with 122466 e, Cluster No. 0 o: 7.67364 1.9824 10.65 u: 0 0 1 v: 0.238533 -0.971134 0 -I- PndMvdRecoHit::PndMvdRecoHit(PndMvdHit*) called. Mvd hit in detector 1_1/34_0/80_1/79_1/77_9/75_29/72_1/71_1/ at (7.44033, 1.04598, 8.9416) cm with 66616.9 e, Cluster No. 2 o: 7.4256 -0.00891832 10.65 u: 0 0 1 v: -0.0139622 -0.999903 0 -I- PndMvdRecoHit::PndMvdRecoHit(PndMvdHit*) called. Mvd hit in detector 1_1/34_0/86_1/83_1/82_5/81_1/72_2/71_1/ at (12.4543, 1.43929, 14.9139) cm with 65711.7 e, Cluster No. 4 o: 12.3431 2.06957 16.7752 u: 0 0 1 v: 0.173648 -0.984808 0 6 hits in track 0 starting fit Kalman::processTrack::Starting track 3x1 matrix is as follows | 0 | ------------------ 0 | 1.609 1 | 0.2717 2 | 1.944 Process hit #0 of rep #0 .DetPlane: O(2.11,0.656733,1.94354) u(0,1,0) v(-1,0,0) ++++++++++++++ do prediction: ++++++++++++++++ s before extrapolation: 0 s_to: 1.94354 unew[2]=z=1.94354s after extrapolation: 0 s before extrapolation: 0 s_to: 1.94354 unew[2]=z=1.94354s after extrapolation: 0 s before extrapolation: 0 s_to: 1.94354 unew[2]=z=1.94354s after extrapolation: 0 s before extrapolation: 0 s_to: 1.94354 unew[2]=z=1.94354s after extrapolation: 0 s before extrapolation: 0 s_to: 1.94354 unew[2]=z=1.94354s after extrapolation: 0 s before extrapolation: 0 s_to: 1.94354 unew[2]=z=1.94354s after extrapolation: 0 5x1 matrix is as follows | 0 | ------------------ 0 | 0 1 | 0 2 | 0 3 | 0 4 | 0 5x5 matrix is as follows | 0 | 1 | 2 | 3 | 4 | ---------------------------------------------------------------------- 0 | 0 0 0 0 0 1 | 0 0 0 0 0 2 | 0 0 0 0 0 3 | 0 0 0 0 0 4 | 0 0 0 0 0 ++++++++++++++++++++++++++++++++++++++++++++++ Error in <TDecompLU::DecomposeLUCrout>: matrix is singular Error in <TDecompLU::InvertLU>: matrix is singular, 0 diag elements < tolerance of 2.2204e-16 FitterException thrown with whatString: cannot invert covsum in Kalman Gain - det=0 in line: 265 in file: /home/ralfk/Pandaroot/pandaroot/genfit/Kalman.cxx
Hi Ralf! It looks to me as if you would still use the LSLTrackRep. For your exercise you should use GeaneTrackRep! Furthermore you have to make sure that you have reasonable starting values for your fit, also for the covariance matrix. How do you initialize the TrackRep? Cheers! Sebastian.
Hello again, Thanks for the hint to use GeaneTrackRep. Of course I still cannot run the Kalman, so I'll ask my question: When making a new CbmGeanePro() the program breaks. with: Toggle Spoiler PndFieldCreator::createCbmField() Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1224078560 (LWP 28569)] 0xb3f81377 in CbmGeanePro (this=0xa25b468) at /home/ralfk/Pandaroot/pandaroot/geane/CbmGeanePro.cxx:35 35 afErtrio=gMC3->fErtrio; (gdb) bt #0 0xb3f81377 in CbmGeanePro (this=0xa25b468) at /home/ralfk/Pandaroot/pandaroot/geane/CbmGeanePro.cxx:35 #1 0xb3d9b052 in PndMvdKalmanTask::Init (this=0x872ac08) at /home/ralfk/Pandaroot/pandaroot/mvd/MvdTracking/PndMvdKalmanTask.cxx:115 #2 0xb4bb72ef in CbmTask::InitTask (this=0x872ac08) at /home/ralfk/Pandaroot/pandaroot/base/CbmTask.cxx:36 #3 0xb4bb73d4 in CbmTask::InitTasks (this=0x8562078) at /home/ralfk/Pandaroot/pandaroot/base/CbmTask.cxx:101 #4 0xb4bb738a in CbmTask::InitTask (this=0x8562078) at /home/ralfk/Pandaroot/pandaroot/base/CbmTask.cxx:43 #5 0xb4bb35f3 in CbmRunAna::Init (this=0x8561fe0) at /home/ralfk/Pandaroot/pandaroot/base/CbmRunAna.cxx:114 #6 0xb4bf0cfb in G__CbmDict_531_0_4 (result7=0xbfd712ac, funcname=0x855f1b8 "\001", libp=0xbfd6d808, hash=0) at /home/ralfk/Pandaroot/build/base/CbmDict.cxx:9361 #7 0xb73fd5fb in Cint::G__ExceptionWrapper (funcp=0xb4bf0cd4 <G__CbmDict_531_0_4>, result7=0xbfd712ac, funcname=0x855f1b8 "\001", libp=0xbfd6d808, hash=0) at cint/src/Api.cxx:364 #8 0xb750d87a in G__call_cppfunc (result7=0xbfd712ac, libp=0xbfd6d808, ifunc=0x855f1b8, ifn=0) at cint/src/v6_newlink.cxx:512 #9 0xb74d4855 in G__interpret_func (result7=0xbfd712ac, funcname=0xbfd70dac "Init", libp=0xbfd6d808, hash=404, p_ifunc=0x855f1b8, funcmatch=1, memfunc_flag=1) at cint/src/v6_ifunc.cxx:5133 #10 0xb74c3e9e in G__getfunction (item=0xbfd74d86 "Init()", known3=0xbfd7334c, memfunc_flag=1) at cint/src/v6_func.cxx:2517 #11 0xb759b6d8 in G__getstructmem (store_var_type=112, varname=0xbfd72790 "'׿\025_\001", membername=0xbfd74d86 "Init()", tagname=0xbfd72cf8 "fRun", known2=0xbfd7334c, varglobal=0xb76413a0, objptr=2) at cint/src/v6_var.cxx:6606 #12 0xb758c496 in G__getvariable (item=0xbfd74d80 "fRun->Init()", known=0xbfd7334c, varglobal=0xb76413a0, varlocal=0x0) at cint/src/v6_var.cxx:5237 #13 0xb7491bde in G__getitem (item=0xbfd74d80 "fRun->Init()") at cint/src/v6_expr.cxx:1884 #14 0xb74a4d7f in G__getexpr (expression=0xbfd753b8 "fRun->Init()") at cint/src/v6_expr.cxx:1470 #15 0xb751fd09 in G__exec_function (statement=0xbfd753b8 "fRun->Init()", pc=0xbfd7599c, piout=0xbfd75998, plargestep=0xbfd75990, presult=0xbfd7594c) at cint/src/v6_parse.cxx:600 #16 0xb7526f84 in G__exec_statement (mparen=0xbfd7c858) at cint/src/v6_parse.cxx:6995 #17 0xb747a8d0 in G__exec_tempfile_core (file=0xbfd7e94c "/home/ralfk/Pandaroot/pandaroot/macro/mvd/Tracking/./runMvdKalmanTask.C", fp=0x0) at cint/src/v6_debug.cxx:251 #18 0xb747ac0d in G__exec_tempfile (file=0xbfd7e94c "/home/ralfk/Pandaroot/pandaroot/macro/mvd/Tracking/./runMvdKalmanTask.C") at cint/src/v6_debug.cxx:798 #19 0xb753964e in G__process_cmd (line=0xb7f27736 "al_14", prompt=0x80cd584 "", more=0x80cd57c, err=0xbfd7f608, rslt=0xbfd7f5d8) at cint/src/v6_pause.cxx:3070 #20 0xb79e8c93 in TCint::ProcessLine (this=0x80cd560, line=0xb7f27736 "al_14", error=0xbfd81e18) at meta/src/TCint.cxx:300 #21 0xb79e30dc in TCint::ProcessLineSynch (this=0x80cd560, line=0xb7f27736 "al_14", error=0xbfd81e18) at meta/src/TCint.cxx:365 #22 0xb792a326 in TApplication::ExecuteFile (file=0xbfd7fd41 "runMvdKalmanTask.C", error=0xbfd81e18) at base/src/TApplication.cxx:921 #23 0xb792a4f8 in TApplication::ProcessFile (this=0x80e8058, file=0xbfd7fd41 "runMvdKalmanTask.C", error=0xbfd81e18) at base/src/TApplication.cxx:810 #24 0xb792caff in TApplication::ProcessLine (this=0x80e8058, line=0xbfd7fd3e ".x runMvdKalmanTask.C", sync=false, err=0xbfd81e18) at base/src/TApplication.cxx:783 #25 0xb736dd59 in TRint::Run (this=0x80e8058, retrn=false) at rint/src/TRint.cxx:354 #26 0x08048e49 in main (argc=1, argv=0xbfd81f34) at main/src/rmain.cxx:29 (gdb) list 30 { 31 gMC3 = (TGeant3*) gMC; 32 nepred=1; 33 fdbPDG= TDatabasePDG::Instance(); 34 fErrorMat= new TArrayD(15); 35 afErtrio=gMC3->fErtrio; 36 Pos=TVector3(0, 0 , 0); 37 PosErr = TVector3(0,0,0); 38 Mom=TVector3(0,0,0); 39 fTrkPar= new CbmTrackPar(); (gdb) q So maybe I miss some detail which is needed by CbmGeanePro. Maybe one of you has already dealt with this and can tell me what to do. Greetings from Dresden, Ralf.
Hm... That does not ring a bell... My only suggestion is, that you look into the demo to see what preparations are done there to set up Geane. Cheers! Sebastian.
I am also facing the same problem Ralf have mentioned here. It looks to me TGeant3 has pointer data member fErtrio, which is not handeled properly in the CbmGeanePro's Default constructor.
Re: Running the Kalman on the Mvd (solved dependency)
Hi again, I solved my library problems to start the fitter: Add ${GEANT3_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/genfit ${CMAKE_SOURCE_DIR}/recotasks ${CMAKE_SOURCE_DIR}/trackbase ${CMAKE_SOURCE_DIR}/trackrep ${CMAKE_SOURCE_DIR}/geane to CMakeLists.txt Make a CbmGeane object in your macro Toggle Spoiler CbmGeane *Geane = new CbmGeane(MCFile); PndConstField *fMagField=new PndConstField(); fMagField->SetField(0, 0 ,20. ); // values are in kG fMagField->SetFieldRegion(-500, 500,-500, 500, -200, 200); Geane->SetField(fMagField); At my current stage I have to apply a correct handling of the MvdRecoHit. Greetings again, Ralf.
Hello Ralf, Can you tell me in which CMakeList you have made this Changes. Cheers, Vanni
Hi Vanni, I made the additions to the pandaroot/mvd/CMakeLists.txt. It should be connected to the library where the kalman task is located. Regards, Ralf. Toggle Spoiler # Create a library called "" which includes the source files given in # the array . # The extension is already found. Any number of sources could be listed here. set(INCLUDE_DIRECTORIES ${ROOT_INCLUDE_DIR} ${GEANT3_INCLUDE_DIR} ${CLHEP_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/geobase ${CMAKE_SOURCE_DIR}/parbase ${CMAKE_SOURCE_DIR}/base ${CMAKE_SOURCE_DIR}/field ${CMAKE_SOURCE_DIR}/mcstack ${CMAKE_SOURCE_DIR}/passive ${CMAKE_SOURCE_DIR}/mvd/MvdMC ${CMAKE_SOURCE_DIR}/mvd/MvdData ${CMAKE_SOURCE_DIR}/mvd/MvdDigi ${CMAKE_SOURCE_DIR}/mvd/PndMvdReco ${CMAKE_SOURCE_DIR}/mvd/MvdTools ${CMAKE_SOURCE_DIR}/mvd/transport ${CMAKE_SOURCE_DIR}/mvd ${CMAKE_SOURCE_DIR}/genfit ${CMAKE_SOURCE_DIR}/recotasks ${CMAKE_SOURCE_DIR}/trackbase ${CMAKE_SOURCE_DIR}/trackrep ${CMAKE_SOURCE_DIR}/geane ) include_directories( ${INCLUDE_DIRECTORIES}) set(LINK_DIRECTORIES ${ROOT_LIBRARY_DIR} ) link_directories( ${LINK_DIRECTORIES}) ########################### create libMvd ###################################### set(MVD_SRCS MvdData/PndMvdDigi.cxx MvdData/PndMvdDigiPixel.cxx MvdData/PndMvdDigiStrip.cxx MvdData/PndMvdMCPoint.cxx MvdDigi/PndMvdCalcFePixel.cxx MvdDigi/PndMvdCalcPixel.cxx MvdDigi/PndMvdCalcStrip.cxx MvdDigi/PndMvdDigiAna.cxx MvdDigi/PndMvdHybridHitProducer.cxx MvdDigi/PndMvdStripHitProducer.cxx MvdDigi/PndMvdHitProducerIdeal.cxx MvdDigi/PndMvdDigiTask.cxx MvdMC/PndMvdContFact.cxx MvdMC/PndMvdDetector.cxx MvdMC/PndMvdGeo.cxx MvdMC/PndMvdGeoPar.cxx MvdMC/PndMvdGeoMappingPar.cxx MvdMC/PndMvdMaterialDet.cxx MvdTools/PndMvdPixelDigiPar.cxx MvdTools/PndMvdStripDigiPar.cxx MvdTools/PndStringVector.cxx MvdTools/PndMvdGeoHandling.cxx MvdTools/PndMvdEventAna.cxx MvdTools/PndMvdMCEventAna.cxx MvdTools/PndMvdDigiEventAna.cxx MvdTools/PndMvdAllDataEventAna.cxx MvdTools/PndMvdFileNameCreator.cxx MvdTools/PndGeoHitList.cxx MvdTools/PndEventDisplay.cxx ) # fill list of header files from list of source files # by exchanging the file extension CHANGE_FILE_EXTENSION(*.cxx *.h MVD_HEADERS "${MVD_SRCS}") # SET(MVD_SRCS ${MVD_SRCS} ${DIGI_SRCS}) # SET(MVD_HEADERS ${MVD_HEADERS} ${DIGI_HEADERS}) set(MVD_LINKDEF MvdLinkDef.h) set(MVD_DICTIONARY ${CMAKE_CURRENT_BINARY_DIR}/MvdDict.cxx) ROOT_GENERATE_DICTIONARY("${MVD_HEADERS}" "${MVD_LINKDEF}" "${MVD_DICTIONARY}" "${INCLUDE_DIRECTORIES}") SET(MVD_SRCS ${MVD_SRCS} ${MVD_DICTIONARY}) add_library(Mvd SHARED ${MVD_SRCS}) target_link_libraries(Mvd ${ROOT_LIBRARIES}) set_target_properties(Mvd PROPERTIES ${CBMROOT_LIBRARY_PROPERTIES}) ########################### create libMvdReco ################################## set(MVDRECO_SRCS # MvdData/PndMvdCluster.cxx # MvdData/PndMvdStripCluster.cxx # MvdData/PndMvdPixelCluster.cxx MvdData/PndMvdRecoHit.cxx MvdData/PndMvdPidCand.cxx MvdData/PndMvdCluster.cxx MvdData/PndMvdHit.cxx MvdData/PndMvdHitInfo.cxx MvdPid/PndMvdPidIdealTask.cxx MvdPid/PndMvdIdealPidAlgo.cxx MvdPid/PndMvdSimplePidAlgo.cxx MvdPid/PndMvdAdvancedPidAlgo.cxx MvdReco/PndMvdAccessRTDBTask.cxx MvdReco/PndMvdRecoTask.cxx MvdReco/PndMvdClusterTask.cxx MvdReco/PndMvdPixelClusterFinder.cxx MvdReco/PndMvdSimplePixelClusterFinder.cxx MvdReco/PndMvdIdealPixelClusterFinder.cxx MvdReco/PndMvdPixelClusterTask.cxx MvdReco/PndMvdIdealClusterTask.cxx MvdReco/PndMvdChargeWeightedPixelMapping.cxx MvdReco/PndMvdStripClusterBuilder.cxx MvdReco/PndMvdStripClusterTask.cxx MvdReco/PndMvdIdealRecoTask.cxx MvdTracking/PndMvdIdealTrackFinderTask.cxx MvdTracking/PndMvdIdealTrackingTask.cxx MvdTracking/PndMvdKalmanTask.cxx ) # fill list of header files from list of source files # by exchanging the file extension CHANGE_FILE_EXTENSION(*.cxx *.h MVDRECO_HEADERS "${MVDRECO_SRCS}") set(MVDRECO_LINKDEF MvdRecoLinkDef.h) set(MVDRECO_DICTIONARY ${CMAKE_CURRENT_BINARY_DIR}/MvdRecoDict.cxx) ROOT_GENERATE_DICTIONARY("${MVDRECO_HEADERS}" "${MVDRECO_LINKDEF}" "${MVDRECO_DICTIONARY}" "${INCLUDE_DIRECTORIES}") SET(MVDRECO_SRCS ${MVDRECO_SRCS} ${MVDRECO_DICTIONARY}) add_library(MvdReco SHARED ${MVDRECO_SRCS}) target_link_libraries(MvdReco ${ROOT_LIBRARIES}) set_target_properties(MvdReco PROPERTIES ${CBMROOT_LIBRARY_PROPERTIES}) ################################## install ##################################### install(TARGETS Mvd DESTINATION ${CMAKE_BINARY_DIR}/lib) install(TARGETS MvdReco DESTINATION ${CMAKE_BINARY_DIR}/lib)