From 8472f6569f312816cb1f456fc8e69d7dd004c018 Mon Sep 17 00:00:00 2001
From: Chengdong Fu <fucd@ihep.ac.cn>
Date: Mon, 14 Sep 2020 18:33:08 +0800
Subject: [PATCH] alway create null collection to avoid crash

---
 .../SiliconTracking/src/ForwardTrackingAlg.cpp    | 14 +++++++++++---
 .../SiliconTracking/src/SiliconTrackingAlg.cpp    |  3 ++-
 .../SiliconTracking/src/SpacePointBuilderAlg.cpp  | 15 +++++++++------
 .../SiliconTracking/src/TrackSubsetAlg.cpp        |  7 +++++--
 4 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp
index 57868b94..3f9c425f 100644
--- a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp
@@ -180,7 +180,8 @@ StatusCode ForwardTrackingAlg::initialize(){
 
 StatusCode ForwardTrackingAlg::execute(){
   debug() << " processing event number " << _nEvt << endmsg;
-   
+
+  auto trkCol = _outColHdl.createAndPut();
   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //                                                                                                              //
   //                                 ForwardTracking                                                              //
@@ -626,7 +627,7 @@ StatusCode ForwardTrackingAlg::execute(){
     /**********************************************************************************************/
     debug() << "\t\t---Save Tracks---" << endmsg ;
       
-    auto trkCol = _outColHdl.createAndPut();
+    //auto trkCol = _outColHdl.createAndPut();
     
     for (unsigned int i=0; i < tracks.size(); i++){
       FTDTrack* myTrack = dynamic_cast< FTDTrack* >( tracks[i] );
@@ -906,7 +907,14 @@ void ForwardTrackingAlg::finaliseTrack( edm4hep::Track* trackImpl ){
   Fitter fitter( trackImpl , _trkSystem );
    
   //trackImpl->trackStates().clear();
-  debug() << "Track has " << trackImpl->trackStates_size() << " TrackState now, should be cleared but not supported by EDM4hep" << endmsg;
+  int nState = trackImpl->trackStates_size();
+  if(nState>0){
+    debug() << "Track has " << nState << " TrackState now, should be cleared but not supported by EDM4hep" << endmsg;
+    for(int i=0;i<nState;i++){
+      debug() << trackImpl->getTrackStates(i).location << " ";
+    }
+    debug() << endmsg;
+  }
   
   edm4hep::TrackState trkStateIP( *fitter.getTrackState( 1/*lcio::TrackState::AtIP*/ ) ) ;
   trkStateIP.location = 1;
diff --git a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
index 256f8fb6..54b2720e 100644
--- a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
@@ -159,6 +159,7 @@ StatusCode SiliconTrackingAlg::execute(){
   Navigation::Instance()->Initialize();
   //_current_event = evt;
   //_allHits.reserve(1000);
+  auto trkCol = _outColHdl.createAndPut();
 
   _output_track_col_quality = _output_track_col_quality_GOOD;
   
@@ -238,7 +239,7 @@ StatusCode SiliconTrackingAlg::execute(){
 
     //edm4hep::TrackCollection* trkCol = nullptr; 
     //edm4hep::LCRelationCollection* relCol = nullptr;
-    auto trkCol = _outColHdl.createAndPut();
+    //auto trkCol = _outColHdl.createAndPut();
     //auto relCol = _outRelColHdl.createAndPut();
     /*
     LCCollectionVec * trkCol = new LCCollectionVec(LCIO::TRACK);
diff --git a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
index d2a9b87c..bae1388b 100644
--- a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
@@ -69,6 +69,9 @@ StatusCode SpacePointBuilderAlg::initialize() {
 
 StatusCode SpacePointBuilderAlg::execute(){
   StatusCode sc;
+  auto spCol = _outSPColHdl.createAndPut();
+  auto relCol = _outSPAssColHdl.createAndPut();
+
   const edm4hep::TrackerHitCollection* hitCol = nullptr;
   try {
     hitCol = _inHitColHdl.get();
@@ -95,8 +98,8 @@ StatusCode SpacePointBuilderAlg::execute(){
     _nStripsTooParallel = 0;
     _nPlanesNotParallel = 0;
     
-    edm4hep::TrackerHitCollection* spCol = new edm4hep::TrackerHitCollection();    // output spacepoint collection
-    edm4hep::MCRecoTrackerAssociationCollection* relCol = new edm4hep::MCRecoTrackerAssociationCollection();    // output relation collection
+    //edm4hep::TrackerHitCollection* spCol = new edm4hep::TrackerHitCollection();    // output spacepoint collection
+    //edm4hep::MCRecoTrackerAssociationCollection* relCol = new edm4hep::MCRecoTrackerAssociationCollection();    // output relation collection
     
     // to store the weights
     //LCFlagImpl lcFlag(0) ;
@@ -235,10 +238,10 @@ StatusCode SpacePointBuilderAlg::execute(){
       }
     }
     
-    if(spCol->size()!=0) _outSPColHdl.put(spCol);
-    else                 delete spCol;
-    if(relCol->size()!=0) _outSPAssColHdl.put(relCol);
-    else                  delete relCol;
+    //if(spCol->size()!=0) _outSPColHdl.put(spCol);
+    //else                 delete spCol;
+    //if(relCol->size()!=0) _outSPAssColHdl.put(relCol);
+    //else                  delete relCol;
     
     debug() << "\nCreated " << createdSpacePoints << " space points ( raw strip hits: " << rawStripHits << ")\n"
 	    << "  There were " << rawStripHits << " strip hits available, giving " 
diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
index 8961484d..541c5b16 100644
--- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
@@ -97,7 +97,8 @@ StatusCode TrackSubsetAlg::finalize(){
 
 StatusCode TrackSubsetAlg::execute(){ 
   std::vector<edm4hep::Track> tracks;
-  
+
+  auto trkCol = _outColHdl.createAndPut();
   /**********************************************************************************************/
   /*       Read in the collections                                                              */
   /**********************************************************************************************/
@@ -197,7 +198,7 @@ StatusCode TrackSubsetAlg::execute(){
   /**********************************************************************************************/
   debug() << "Fitting and saving of the tracks" << endmsg;
 
-  auto trkCol = _outColHdl.createAndPut();
+  //auto trkCol = _outColHdl.createAndPut();
 
   for( unsigned i=0; i < accepted.size(); i++ ){
     edm4hep::Track trackImpl;
@@ -326,6 +327,8 @@ StatusCode TrackSubsetAlg::execute(){
   }
 
   debug() << "Saving " << trkCol->size() << " tracks" << endmsg;
+  
+  Navigation::Instance()->Initialize();
 
   _nEvt ++ ;
   return StatusCode::SUCCESS;
-- 
GitLab