GSI Helmholtzzentrum für Schwerionenforschung
PndTracking2 - mvd and stt code with genfit2
Dear Gianluigi and dear PndTrackers, I am in the process to test genfit2 in pandaroot, trunk 24275. Apparently it looks compiling now, still as preliminary version and not with all detectors included; I also simulated and digitized 100 events, using as MC generator the easiest BoxGenerator. It works fine. I am testing right now the reco_complete.C macro. In the current macro which I am using (/macro/run/reco_complete.C), I commented out some detectors, such as mvd, drc, lmd, because they have created some troubles when trying to compile pandaroot and/or to simulate events. So, for the time being, I am basically trying to understand if adidtional problems occur with genfit2 + stt panda code. In the reco- macro, I see that an error occur at the line: PndTrkTracking2* tracking = new PndTrkTracking2(0,false,false,false); So, no events are reconstructed at all, right now. Does it happen because PndTrkTracking2 work with mvd+stt together? just in case, is there the way to disantangle in this class mvd from stt? is there any suggestion how shall I replace this line in the reco_complete.C macro, if I wish to test genfit2 with stt code only, or with all detector excluding mvd, in the reconstruction process? has anybody any idea why in compliling pandaroot, while substituting genft(1) with genfit2, I cannot compile pandaroot? I did not expct at that level a problem with the mvd. Of course, in the CMakeList.txt of all detectors and in the main one, genfit2 has already replaced genfit(1). Many thanks in advance for your suggestion. Best regards, Elisabetta
Re: PndTracking2 - mvd and stt code with genfit2
Dear Elisabetta, normally the offline Pattern Recognition works with the Mvd hits also. However the code works also when there are no Mvd hits. The results are worse of course. So I am a bit surprised that you have a crash there. Please report the crash error message, then I'll be able to understand better what's going on and fix it cheers Gianluigi Elisabetta Prencipe (2) wrote on Tue, 13 May 2014 22:52 Dear Gianluigi and dear PndTrackers, I am in the process to test genfit2 in pandaroot, trunk 24275. Apparently it looks compiling now, still as preliminary version and not with all detectors included; I also simulated and digitized 100 events, using as MC generator the easiest BoxGenerator. It works fine. I am testing right now the reco_complete.C macro. In the current macro which I am using (/macro/run/reco_complete.C), I commented out some detectors, such as mvd, drc, lmd, because they have created some troubles when trying to compile pandaroot and/or to simulate events. So, for the time being, I am basically trying to understand if adidtional problems occur with genfit2 + stt panda code. In the reco- macro, I see that an error occur at the line: PndTrkTracking2* tracking = new PndTrkTracking2(0,false,false,false); So, no events are reconstructed at all, right now. Does it happen because PndTrkTracking2 work with mvd+stt together? just in case, is there the way to disantangle in this class mvd from stt? is there any suggestion how shall I replace this line in the reco_complete.C macro, if I wish to test genfit2 with stt code only, or with all detector excluding mvd, in the reconstruction process? has anybody any idea why in compliling pandaroot, while substituting genft(1) with genfit2, I cannot compile pandaroot? I did not expct at that level a problem with the mvd. Of course, in the CMakeList.txt of all detectors and in the main one, genfit2 has already replaced genfit(1). Many thanks in advance for your suggestion. Best regards, Elisabetta
Dear Elisabetta, could you also post the error messages which you get when you try to compile PandaRoot with genfit2 included? Kind regards, Martin
Dear Gianluigi and dear Martin, unfortunately the error appear when I just try "make" of the trunk24275, so there is not a lot to learn from it. Here it is: [ 56%] Generating G__MvdDict.cxx Scanning dependencies of target Mvd [ 56%] Building CXX object mvd/CMakeFiles/Mvd.dir/G__MvdDict.cxx.o Linking CXX shared library ../lib/libMvd.so /usr/bin/ld: cannot find -lRecoHits /usr/bin/ld: cannot find -lgenfit2 /usr/bin/ld: cannot find -ltrackrep collect2: error: ld returned 1 exit status make[2]: *** [lib/libMvd.so.0.0.0] Error 1 make[1]: *** [mvd/CMakeFiles/Mvd.dir/all] Error 2 make: *** [all] Error 2 ***************8 If I comment out mvd from the CMakeList.txt of the trunk24275, then it compiles 100%, and I can simulate and digitize events....but without the mvd.... Of course to comment the mvd out of the CMakeList.txt, it is not a solution. It is just a checking if troubles apper even with other detectors. I get such a problem with mvd mainly; then also dirc amd lmd produce crashes, but only when I run the macros. In your experience, do you have any idea at which level genfit acts in the mvd code, so I can understand why the compilation is stopped at 56% ? It does not make so much sense to me... By the way, PndTracking2, in he reconstruction macro, without adding the mvd in the main CMakelist.txt of pandaroot, does not work at all (always in the hypothesis to use genfit2, of course). cheers, Elisabetta
Hi Gianluigi, the error which I get when running the reco_complete.C macro is a bit *cryptical*: **************************************************** FairRootManager::OpenOutFile("reco_complete.root") Error in <TClonesArray::SetClass>: called with a null pointer dlopen error: /home/prencipe/panda/apr13.build/lib/libgenfitAdapters.so: undefined symbol: _ZTI13GFAbsTrackRep Load Error: Failed to load Dynamic link library /home/prencipe/panda/apr13.build/lib/libgenfitAdapters.so Error in <TCint::AutoLoadCallback>: failure loading dependent library libgenfitAdapters.so for class PndRecoKalmanTask Info in (PndGeoHandling::Instance): Making a new instance using the framework. It is saying that I call a null pointer. then I assume it is because the mvd detector is commented out from the CMakeList.txt. However, up to now, with the mvd code included in the CMakelist.txt of the trunk24275, I don't get even pandaroot compiling.... So, for the time being, I would do the following: just test pandaroot with genfit2, when only the stt detector is active. Do you have any suggestion or/and other better thought? cheers and thank you, Elisabetta
..one more adding for Gianluigi: as I am strongly modifying also /GenFitTools/, probably there is still something that I have to fix there. At least, this is what I understand from the error message which I have got, that is also related to the TrackRep. My question for you, then, it is just if it's possible to use PndTracking2 with stt only, in the way that the macro reco_complete.C suggests. Or if I have to write another macro, such as "reco_stt.C" for instance, to test the results. thank you again for your answers, Elisabetta
Hi Elisabetta, Did you take out a part of the genfit stuff in your pandaroot CMakeLists. There are missing libraries:the reco hits, trackrep and genfit2 during MVD compilation. Can't you add the new genfit to pandaroot without "removing" the old one? Have a look at the required libraries in the CMakeLists.txt's. Also: Try to clean up your build directory (i.e. make a new one) when you get such errors. Ralf
Hi Ralf, there is not anymore genfit in the CMakeList.txt of my trunk, but of course it is still inside the trunk. genfit(1) is not compiled at all. There is only genfit2 inside the CMakeLists.txt. Then, I built a new CMakeList_standalone.txt and CMakeList_panda.txt inside the new package genfit2. I replaced in every package genfit2 instead of genfit. So, I am afraid I did not get what is your proposal: to delete completely the old genfit package from the trunk and try again? cheers, Elisabetta
Are you sure the crash comes from PndTracking2 and not from the RecoKalmanTask? Ralf is suggesting to keep genfit, create a folder genfit2 and compiling the code there. If I have understood well they changed all the names then the two codes should not conflict.
Hi Stefano, of course, I am not sure where is the problem, I just see that there is a problem. I reported at which step of the reconstruction macro it shows up. Every idea is more than welcome! cheers, Elisabetta
hi Elisabetta, this is NOT a pattern recognition error in PndTrkTracking2 rather the class GFAbsTrackRep is missing : as Ralf pointed out, there must be some missing library. Besides, I checked the Pattern Recognition code again. It actually returns with no results (== no PndTrackCand-idates) if the TClonesArray of the Mvd MC Points is missing. In other words : you have no crash, but you don't get any PndTrackCand-idates. I have changed one line of code in PndTrkTracking2.cxx and I fixed that. Now one should get PndTrackCand-idates also when the Mvd are NOT simulated. In case you need more help, please let know Cheers ! Gianluigi Elisabetta Prencipe (2) wrote on Wed, 14 May 2014 14:00 Hi Gianluigi, the error which I get when running the reco_complete.C macro is a bit *cryptical*: **************************************************** FairRootManager::OpenOutFile("reco_complete.root") Error in <TClonesArray::SetClass>: called with a null pointer dlopen error: /home/prencipe/panda/apr13.build/lib/libgenfitAdapters.so: undefined symbol: _ZTI13GFAbsTrackRep Load Error: Failed to load Dynamic link library /home/prencipe/panda/apr13.build/lib/libgenfitAdapters.so Error in <TCint::AutoLoadCallback>: failure loading dependent library libgenfitAdapters.so for class PndRecoKalmanTask Info in (PndGeoHandling::Instance): Making a new instance using the framework. It is saying that I call a null pointer. then I assume it is because the mvd detector is commented out from the CMakeList.txt. However, up to now, with the mvd code included in the CMakelist.txt of the trunk24275, I don't get even pandaroot compiling.... So, for the time being, I would do the following: just test pandaroot with genfit2, when only the stt detector is active. Do you have any suggestion or/and other better thought? cheers and thank you, Elisabetta
Dear Elisabetta, in genfit2, a namespace genfit is used. Besides some GFRave classes, nothing is named GF... anymore. So whenever you get warning/errors that GF... has not been found, you forgot to change this in the code. Also, per default, there will is one library, named libgenfit2. No more libRKTrackRep, libGFRave etc. If you check in your changes into the genfit2 development branch I created, it would be much easier for me to help you. Kind regards, Johannes
Dear Johannes, first of all I thank you to answer to this email. Yes, the fact that GF classes do not exist anymore is pretty clear at a first look, as well as the old classes with reasonable similar names in genfit_1 vs genfit_2, look working in different ways. Let's say: genfit is just the *traditional* name of what you are working on, but genfit2 is a complete different package for Kalman Filter, compared to genfit_1... Up to now, I have troubles to create a svn account from here, as I mentioned to you in a private email a couple of times. I do not get genfit2 compiling with the pandaroot mvd code, yet, inside pandaroot. I do not manage to have Rave* or GLB* classes running neither in the standalone version of genfit2; so, it had to be taken out for the time being from pandaroot: there are already to many incompatibility problems with this new tool, here. Better not to add more mess for the time being! This is not only a problem of pandaroot. GLB and RAVE* are not working for me in the standalone version of genfit2, as mentioned 2 months ago, and I have no clue what to do in order to get those running (in the standalone version available that you pointed me some time ago). What I managed to do 2 months ago, was getting pandaroot rev 24725 compiling with genfit2, but some detectors had to be commented out from the main pandaroot CMakeList.txt (mvd, dirc, lmd). Then, I can run it inside pandaroot! But I wish to see it running wit hall panda detectors. The mvd creates a crash even in compilation; the other detector packages are in conflict only when I try to digitize events, after simulating those. I am in the process to debug what happens at the level of the mvd code, and why pandaroot does not compile. I realized that in one class of the mvd tools still GF*classes were included. However, I do expect, in such a case, that pandaroot would not work, but definitively it should compile. There are several dependencies from other pandaroot packages, which I have to solve, yet. Then, the package GenfitTools, which transforms genfit_tracks to pnd_tracks, is going to be completely re-written, as there are not any more recohits in genfit2, but SpacePoints, SpaceMeasurements, or WireMeasurements, or PlanarMeasurement. This introduces, to my first approach, a level of complication more in this work. This is the situation right now. I can send you the package, until I do not manage to get a svn account. This is the best I can do, in this moment. As you are so kind to answer to my questions, then I would ask you again about the difference between the RKTrackRep in genfit1 vs genfit2, and why AbsTrackRep is not anymore in genfit. What shall I use instead? It is not clear to me. This is just one example of classes in the new genfit2 which I do not understand why/how they are written, as no documentation is available in this sense. Thank you very much in advance because you showed the wish to cooperate with us. cheers, Elisabetta cheers, Elisabetta
Dear pnd-tracking friends, the conflicts between genfit2 and mvd/dirc codes are solved. Now I manage to compile pandaroot rev-24275, with the last updated version of the mvd code (thanks Stefano for this!) I can simulate and digitize events inside the pandaroot framework, with the new genfit2 tracking tool and the full panda detector tools, and it runs smooth. In the reconstruction of the events, I have still some troubles with the PndRecoKalmanTask. So, still some modifications have to be done to GenfitTool2. The basic idea is to add to a new pandaroot trunk, whenever all conflicts are solved and tests are completely performed, 2 new packages: /genfit2 and /GenfitTools2. I think it's needed to add also /mvd2, as the one that we get right now is not compatible with genfit2. I added in the svn /pandaroot/development/prencipe 2 packages: /genfit2 (adapted for panda, with 2 CMakeLists: CMakeList_panda.txt and CMakeList_standalone.txt), and a new version of GenfitTool (2), which is modified in order to run genfit2 in pandaroot. Several other packages had to be modified, but with those I am still doing my tests (mvd, hyp, ...) Hopefully I will solve all conflicts in 1-2 weeks, I would present this work and the first tests performed with genfit2 to the upcoming collaboration meeting. Is there a standard macro which was used to test genfit (1) years ago, somewhere? This is all for now. cheers, Elisabetta