Merge rev 29644 from EVE-root-trunk branch.
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 31 Oct 2008 18:56:34 +0000 (18:56 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 31 Oct 2008 18:56:34 +0000 (18:56 +0000)
anyscan_init.C
--------------
Do not require ESD presenece ... make check before accessing it.

visscan_init.C
--------------
Assert ESD existence on initialization.

AliEveKineTools
---------------
When assigning track-references to kine-tracks allow several
eve-tracks for each MC label (use multimap instead of map).

While this should not really happen, it was occuring due to some generator
level particles having wrong status code.

EVE/EveBase/AliEveKineTools.cxx
EVE/macros/anyscan_init.C
EVE/macros/visscan_init.C

index 86b957c82cc4ee094e0da5ea3eef3b0fb8d1cb93..9d22447464a569394294a9a3b0c06948e9175d60 100644 (file)
@@ -32,14 +32,21 @@ ClassImp(AliEveKineTools)
 
 namespace {
 
-  typedef std::map<Int_t, TEveTrack*> TrackMap_t;
+  // Map to store label-to-track association.
+  //
+  // multimap is used as there are cases when initial particles (in
+  // particular resonances) are not assigned proper status-codes
+  // and can thus be found several times in the eve-track-list.
+
+  typedef std::multimap<Int_t, TEveTrack*>                 TrackMap_t;
+  typedef std::multimap<Int_t, TEveTrack*>::const_iterator TrackMap_ci;
 
   void MapTracks(TrackMap_t& map, TEveElement* cont, Bool_t recurse)
   {
     TEveElement::List_i i = cont->BeginChildren();
     while (i != cont->EndChildren()) {
       TEveTrack* track = dynamic_cast<TEveTrack*>(*i);
-      map[track->GetLabel()] = track;
+      map.insert(std::make_pair(track->GetLabel(), track));
       if (recurse)
         MapTracks(map, track, recurse);
       ++i;
@@ -110,7 +117,7 @@ void AliEveKineTools::SetTrackReferences(TEveElement* cont, TTree* treeTR, Bool_
     treeTR->GetEntry(te);
 
     Int_t last_label = -1;
-    TrackMap_t::iterator iter = map.end();
+    std::pair<TrackMap_ci, TrackMap_ci> range;
     Int_t nArrEntries = arr->GetEntriesFast();
 
     // printf("tree-entry %d, n-arr-entries %d\n", te, nArrEntries);
@@ -131,13 +138,13 @@ void AliEveKineTools::SetTrackReferences(TEveElement* cont, TTree* treeTR, Bool_
 
       if (label != last_label)
       {
-        iter       = map.find(label);
+        range      = map.equal_range(label);
         last_label = label;
       }
 
-      if (iter != map.end())
+      for (TrackMap_ci i = range.first; i != range.second; ++i)
       {
-        iter->second->AddPathMark
+       i->second->AddPathMark
           (TEvePathMark(isRef ? TEvePathMark::kReference : TEvePathMark::kDecay,
                         TEveVector(atr->X(),  atr->Y(),  atr->Z()),
                         TEveVector(atr->Px(), atr->Py(), atr->Pz()),
index db7aedb373a8d4cf3157a3d535e2c62e4d7b49f4..976f66ade95146817de8554a09e222cea32ec040 100644 (file)
@@ -171,8 +171,13 @@ void on_new_event()
     Warning("on_new_event", "g_esd_tracks_by_category_container not initialized.");
   }
 
-  AliESDEvent* esd = AliEveEventManager::AssertESD();
+  Double_t x[3] = { 0, 0, 0};
+
+  if (AliEveEventManager::HasESD())
   {
+    AliESDEvent* esd = AliEveEventManager::AssertESD();
+    esd->GetPrimaryVertex()->GetXYZ(x);
+
     TTimeStamp ts(esd->GetTimeStamp());
     TString win_title("Eve Main Window -- Timestamp: ");
     win_title += ts.AsString("s");
@@ -180,8 +185,6 @@ void on_new_event()
     win_title += esd->GetEventNumberInFile();
     gEve->GetBrowser()->SetWindowName(win_title);
   }
-  Double_t x[3];
-  esd->GetPrimaryVertex()->GetXYZ(x);
 
   TEveElement* top = gEve->GetCurrentEvent();
 
index 4a0477272fd0fa027a7110131d2e3426221a99b8..3bac758e49d876196e5876e951a9e4d8b27729e1 100644 (file)
@@ -24,7 +24,7 @@ Bool_t gShowTRD = kFALSE;
 void visscan_init()
 {
   TEveUtil::LoadMacro("alieve_init.C");
-  alieve_init(".", -1);
+  alieve_init(".", -1, 0, 0, 0, 0, kFALSE, kTRUE, kFALSE, kFALSE);
 
   AliEveTrackFitter* fitter = new AliEveTrackFitter();
   gEve->AddToListTree(fitter, 1);