]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - RALICE/AliDevice.cxx
Using symbolic names (Raffaele)
[u/mrichter/AliRoot.git] / RALICE / AliDevice.cxx
index 79a25ee6ed50554e67ca1dd622ce1c32587f69fa..89f917c8f2f1b34f08e1afb1a61d5509fc46dc64 100644 (file)
@@ -331,6 +331,28 @@ AliSignal* AliDevice::GetHit(Int_t j) const
  }
 }
 ///////////////////////////////////////////////////////////////////////////
+AliSignal* AliDevice::GetHit(TString name) const
+{
+// Provide the AliSignal object registered as hit with the specified name.
+// Note : The first hit encountered with the specified name will be provided.
+
+ if (!fHits) return 0;
+
+ TString hitname;
+ Int_t nhits=GetNhits();
+ for (Int_t i=0; i<nhits; i++)
+ {
+  AliSignal* sx=(AliSignal*)fHits->At(i);
+  if (sx)
+  {
+   hitname=sx->GetName();
+   if (hitname == name) return sx;
+  }
+ }
+
+ return 0; // No matching name found
+}
+///////////////////////////////////////////////////////////////////////////
 AliSignal* AliDevice::GetIdHit(Int_t id) const
 {
 // Return the hit with unique identifier "id".
@@ -377,11 +399,19 @@ void AliDevice::ShowHit(Int_t j) const
  }
 }
 ///////////////////////////////////////////////////////////////////////////
-void AliDevice::Data(TString f) const
+void AliDevice::Data(TString f,TString u) const
 {
 // Print the device and all registered hit info according to the specified
-// coordinate frame.
- AliSignal::Data(f);
+// coordinate frame f.
+//
+// The string argument "u" allows to choose between different angular units
+// in case e.g. a spherical frame is selected.
+// u = "rad" : angles provided in radians
+//     "deg" : angles provided in degrees
+//
+// The defaults are f="car" and u="rad".
+
+ AliSignal::Data(f,u);
  Int_t nhits=GetNhits();
  if (nhits)
  {
@@ -552,8 +582,8 @@ TObjArray* AliDevice::SortHits(Int_t idx,Int_t mode,TObjArray* hits,Int_t mcal)
     break; // go for next hit
    }
  
-   if (mode==-1 && s->GetSignal(idx,mcal) < ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
-   if (mode==1 && s->GetSignal(idx,mcal) > ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
+   if (mode==-1 && s->GetSignal(idx,mcal) <= ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
+   if (mode==1 && s->GetSignal(idx,mcal) >= ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
  
    nord++;
    for (Int_t k=nord-1; k>j; k--) // create empty position
@@ -561,7 +591,7 @@ TObjArray* AliDevice::SortHits(Int_t idx,Int_t mode,TObjArray* hits,Int_t mcal)
     fOrdered->AddAt(fOrdered->At(k-1),k);
    }
    fOrdered->AddAt(s,j); // put hit at empty position
-   break; // go for next matrix module
+   break; // go for next hit
   }
  }
  return fOrdered;
@@ -637,8 +667,8 @@ TObjArray* AliDevice::SortHits(TString name,Int_t mode,TObjArray* hits,Int_t mca
     break; // go for next hit
    }
  
-   if (mode==-1 && s->GetSignal(idx,mcal) < ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
-   if (mode==1 && s->GetSignal(idx,mcal) > ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
+   if (mode==-1 && s->GetSignal(idx,mcal) <= ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
+   if (mode==1 && s->GetSignal(idx,mcal) >= ((AliSignal*)fOrdered->At(j))->GetSignal(idx,mcal)) continue;
  
    nord++;
    for (Int_t k=nord-1; k>j; k--) // create empty position
@@ -646,7 +676,7 @@ TObjArray* AliDevice::SortHits(TString name,Int_t mode,TObjArray* hits,Int_t mca
     fOrdered->AddAt(fOrdered->At(k-1),k);
    }
    fOrdered->AddAt(s,j); // put hit at empty position
-   break; // go for next matrix module
+   break; // go for next hit
   }
  }
  return fOrdered;
@@ -699,7 +729,7 @@ void AliDevice::DisplayHits(Int_t idx,Float_t scale,TObjArray* hits,Int_t dp,Int
  if (scale<0)
  {
   Float_t vmin,vmax;
-  GetExtremes(vmin,vmax,idx,hits);
+  GetExtremes(vmin,vmax,idx,hits,mode);
   sigmax=fabs(vmax);
   if (fabs(vmin)>sigmax) sigmax=fabs(vmin);
  }
@@ -735,6 +765,10 @@ void AliDevice::DisplayHits(Int_t idx,Float_t scale,TObjArray* hits,Int_t dp,Int
    }
   }
   sig=sx->GetSignal(idx,mode);
+
+  // Skip dead signals
+  if (fabs(sig) <= 0.) continue;
+
   TPolyMarker3D* m=new TPolyMarker3D();
   m->SetMarkerStyle(8);
   m->SetMarkerColor(mcol);
@@ -795,7 +829,7 @@ void AliDevice::DisplayHits(TString name,Float_t scale,TObjArray* hits,Int_t dp,
  if (scale<0)
  {
   Float_t vmin,vmax;
-  GetExtremes(vmin,vmax,name,hits);
+  GetExtremes(vmin,vmax,name,hits,mode);
   sigmax=fabs(vmax);
   if (fabs(vmin)>sigmax) sigmax=fabs(vmin);
  }
@@ -834,6 +868,10 @@ void AliDevice::DisplayHits(TString name,Float_t scale,TObjArray* hits,Int_t dp,
    }
   }
   sig=sx->GetSignal(idx,mode);
+
+  // Skip dead signals
+  if (fabs(sig) <= 0.) continue;
+
   TPolyMarker3D* m=new TPolyMarker3D();
   m->SetMarkerStyle(8);
   m->SetMarkerColor(mcol);