]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveBase/AliEveV0Editor.cxx
With Cesar.
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveV0Editor.cxx
index f2e02f9e0c91ba26ea47dfc7c46d8a219765a609..69bffb94a3a5b82787641a033b8cde4eaaf02ecb 100644 (file)
@@ -121,29 +121,8 @@ void AliEveV0Editor::DisplayDetailed()
   pack->SetHorizontal();
 
   //
-  // This part is for the bending plane view
+  // This part is for getting the different objects to display
   //
-  pack->NewSlot()->MakeCurrent();
-  TEveViewer *bpViewer = gEve->SpawnNewViewer("V0 bending plane View");
-  TEveScene  *bpScene  = gEve->SpawnNewScene("V0 bending plane Scene");
-
-  TEveUtil::LoadMacro("geom_gentle.C");
-  Long_t result = gInterpreter->ProcessLine("geom_gentle_rphi()");
-  if (result)
-  {
-    TEveGeoShape *geomRPhi = reinterpret_cast<TEveGeoShape*>(result);
-    geomRPhi->IncDenyDestroy();
-    TEveProjectionManager *projMgr = new TEveProjectionManager();
-    projMgr->ImportElements(geomRPhi, bpScene);
-  }
-  else
-  {
-    Warning("DisplayDetailed", "Import of R-Phi geometry failed.");
-  }
-
-  bpViewer->AddScene(bpScene);
-  bpScene->AddElement(fM);
-
   char displayInfo[100] = {0};
   sprintf(displayInfo,"pt = %.3f",fM->GetPt());
   TEveLine *lv0TransverseMomentumDirection = new TEveLine(displayInfo);
@@ -151,11 +130,9 @@ void AliEveV0Editor::DisplayDetailed()
   lv0TransverseMomentumDirection->SetLineWidth(2);
   lv0TransverseMomentumDirection->SetLineStyle(2);
   lv0TransverseMomentumDirection->SetLineWidth(2);
-  Float_t scalePt = 100.;
+  Float_t scalePt = 100.; // this needs to be available as a ruler
   lv0TransverseMomentumDirection->SetPoint(0,fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ);
   lv0TransverseMomentumDirection->SetPoint(1,scalePt*fM->fRecDecayP.fX, scalePt*fM->fRecDecayP.fY,0);
-  
-  bpScene->AddElement(lv0TransverseMomentumDirection);
 
   TEvePointSet *pvlocation = new TEvePointSet("PV location");
   pvlocation->SetNextPoint(fM->fRecBirthV.fX, fM->fRecBirthV.fY, fM->fRecBirthV.fZ);
@@ -163,7 +140,6 @@ void AliEveV0Editor::DisplayDetailed()
   pvlocation->SetMarkerStyle(4);
   pvlocation->SetMarkerSize(2.5);
   pvlocation->SetMarkerColor(7);
-  bpScene->AddElement(pvlocation);
 
   TEvePointSet *v0location = new TEvePointSet("V0 location");
   v0location->SetNextPoint(fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ);
@@ -171,17 +147,91 @@ void AliEveV0Editor::DisplayDetailed()
   v0location->SetMarkerStyle(4);
   v0location->SetMarkerSize(2.5);
   v0location->SetMarkerColor(kOrange+8);
+
+  TEveUtil::LoadMacro("clusters_from_index.C");
+
+  AliEveTrack *negTrack = fM->GetNegTrack();
+  AliEveTrack *posTrack = fM->GetPosTrack();
+
+
+  char macroWithIndex[100] = {0};
+  Int_t daughterIndex = 0;
+  TEvePointSet *negDaughterCluster = 0;
+  TEvePointSet *posDaughterCluster = 0;
+  
+  daughterIndex = negTrack->GetIndex();
+  sprintf(macroWithIndex,"clusters_from_index(%d)",daughterIndex);
+  Long_t negResult = gInterpreter->ProcessLine(macroWithIndex);
+  if (negResult) {
+    negDaughterCluster = reinterpret_cast<TEvePointSet*>(negResult);
+    if (negDaughterCluster){
+      negDaughterCluster->SetMarkerStyle(4);   
+      negDaughterCluster->SetMarkerSize(1.5);  
+      negDaughterCluster->SetMarkerColor(kBlue+3);
+    }
+  }
+  else
+  {
+    Warning("DisplayDetailed", "Import of negative daughter's clusters failed.");
+  }
+
+  daughterIndex = posTrack->GetIndex();
+  sprintf(macroWithIndex,"clusters_from_index(%d)",daughterIndex);
+  Long_t posResult = gInterpreter->ProcessLine(macroWithIndex);
+  if (posResult) {
+    posDaughterCluster = reinterpret_cast<TEvePointSet*>(posResult);
+    if (posDaughterCluster){
+      posDaughterCluster->SetMarkerStyle(4);   
+      posDaughterCluster->SetMarkerSize(1.5);  
+      posDaughterCluster->SetMarkerColor(kRed+3);
+    }
+  }
+  else
+  {
+    Warning("DisplayDetailed", "Import of positive daughter's clusters failed.");
+  }
+
+  //
+  // This part is for the bending plane view
+  //
+  pack->NewSlot()->MakeCurrent();
+  TEveViewer *bpViewer = gEve->SpawnNewViewer("V0 bending plane View");
+  TEveScene  *bpScene  = gEve->SpawnNewScene("V0 bending plane Scene");
+
+  TEveUtil::LoadMacro("geom_gentle.C");
+  Long_t result = gInterpreter->ProcessLine("geom_gentle_rphi()");
+  if (result)
+  {
+    TEveGeoShape *geomRPhi = reinterpret_cast<TEveGeoShape*>(result);
+    geomRPhi->IncDenyDestroy();
+    TEveProjectionManager *projMgr = new TEveProjectionManager();
+    projMgr->ImportElements(geomRPhi, bpScene);
+  }
+  else
+  {
+    Warning("DisplayDetailed", "Import of R-Phi geometry failed.");
+  }
+
+  bpViewer->AddScene(bpScene);
+  bpScene->AddElement(fM);
+  bpScene->AddElement(lv0TransverseMomentumDirection);
+  bpScene->AddElement(pvlocation);
   bpScene->AddElement(v0location);
 
-  // show V0 position with a marker in orange
-  // show the pv in light blue...
+  if (negDaughterCluster) bpScene->AddElement(negDaughterCluster);
+  if (posDaughterCluster) bpScene->AddElement(posDaughterCluster);
 
   // This is the to-do list for the bending plane:
   // 1. fix the view to orthographic XOY (no rotation allowed but moving the center ok) ->done! 
-  // 2. show axis and tickles along X and Y   ->done!
+  // 2. show axis and tickles along X and Y ->done!
+  //       -> note for the projection the cartesian scales are not very useful
+  //       -> propose a phi and R scale which rotates with a reset at 0;
+  //       -> propose a transformation for an eta scale (keep the z one);
   // 3. show the center, the main vertex and the detectors for this view ->done!
   // 4. show V0 direction in the bending plane with arrow length proportional to pT ->done!
   // 5. show angles with respect to axis (phi angle) ->almost.
+  // 6. show clusters in the ITS and in the TPC associated with the daughter tracks
+  //       -> include a radius cut for plotting only ITS and TPC ->done!
   bpViewer->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
   bpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
   TGLViewer *lbpGLViewer = bpViewer->GetGLViewer();
@@ -189,8 +239,6 @@ void AliEveV0Editor::DisplayDetailed()
   co->SetShowOrthographic(true); //(false);
   co->SetOrthographicMode(TGLCameraOverlay::kAxis); // ::kPlaneIntersect or ::kBar
   // end of the bending plane part
-  
-
 
   //
   // This part is for the decay plane view
@@ -198,22 +246,58 @@ void AliEveV0Editor::DisplayDetailed()
   pack->NewSlot()->MakeCurrent();
   TEveViewer *dpViewer = gEve->SpawnNewViewer("V0 decay plane View");
   TEveScene  *dpScene  = gEve->SpawnNewScene("V0 decay plane Scene");
+
   dpViewer->AddScene(dpScene);
+
+  result = gInterpreter->ProcessLine("geom_gentle(kFALSE)");
+  if (result)
+  {
+    TEveGeoShape *geom = reinterpret_cast<TEveGeoShape*>(result);
+    geom->IncDenyDestroy();
+    geom->FindChild("TRD+TOF")->SetRnrState(kFALSE);
+    geom->FindChild("PHOS")   ->SetRnrState(kFALSE);
+    geom->FindChild("HMPID")  ->SetRnrState(kFALSE);
+    dpScene->AddElement(geom);
+  }
+  else
+  {
+    Warning("DisplayDetailed", "Import of 3D geometry failed.");
+  }
+
   dpScene->AddElement(fM);
+  dpScene->AddElement(lv0TransverseMomentumDirection);
+  dpScene->AddElement(pvlocation);
+  dpScene->AddElement(v0location);
+  if (negDaughterCluster) dpScene->AddElement(negDaughterCluster);
+  if (posDaughterCluster) dpScene->AddElement(posDaughterCluster);
+
   // This is the to-do list for the decay plane:
   // 1. fix the view to decay plane (no rotation allowed but moving the center ok)
-  // 2. show V0 direction with a vertical arrow length proportional to pT;
-  // 3. show the center, the main vertex and the detectors for this view;
-  // 4. show the x,y and z axis and the different angles;
+  // 2. show V0 direction with a vertical arrow length proportional to pT -> done!
+  // 3. show the center, the main vertex and the detectors for this view -> done!
+  // 4. show the x,y and z axis and the different angles
+  //       -> this needs a referential object that we can move around
+  //          or fix to a selected point (origin being the default)
   // 5. draw the dca between daughters and the extrapolation to the main vertex.
+  //       -> this is an issue since we only store the distance: check with J.Belikov
+  // 6. show clusters in the ITS and in the TPC associated with the daughter tracks
+  //       -> include a radius cut for plotting only ITS and TPC ->done!
   dpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
   TGLCamera& dpCam = dpViewer->GetGLViewer()->CurrentCamera();
   dpCam.SetExternalCenter(kTRUE);
   dpCam.SetCenterVec(fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ);
-  // end of the decay plane part
+  dpCam.RotateRad(0,-TMath::Pi()/2.); // RotateRad rotates in radians (hRotate,vRotate)
+  //  Here rotate the _view_ (not the camera) by (fM->GetPhi() - TMath::Pi()/2.)
+
+  // In the end maybe truck and rotate properly...
+  //  dpCam.Truck(0,200);// Truck center wrt the view panel: (x=0 pixels, y pixels)
+  //  dpCam.Rotate(0,50,0,0); // Rotate in pixels (xDelta,yDelta)
 
+  // end of the decay plane part
 
+  //
   // This part is for displaying the information
+  //
   slot = pack->NewSlot();
   
   TEveWindowFrame *frame = slot->MakeFrame(new TRootEmbeddedCanvas());
@@ -223,7 +307,7 @@ void AliEveV0Editor::DisplayDetailed()
   // Calculation of the invariant mass with the max prob PID hypothesis first
   // pseudorapidity, phi angle, pt, radius, dcas
   char info[100] = {0};
-  sprintf(info,"#phi = %.3frad = %.1f°",fM->GetPhi(),57.296*fM->GetPhi());
+  sprintf(info,"#phi = %.3frad = %.1f°",fM->GetPhi(),(180./TMath::Pi())*fM->GetPhi());
   TLatex* ltx = new TLatex(0.05, 0.9, info);
   ltx->SetTextSize(0.08);
   ltx->Draw();