]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveDet/AliEveTRDData.cxx
make loader more tolerant to missing files
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDData.cxx
index 073e4fffa42ca02d96875d33f8173fe3bf6780ef..0e7888ac6548b4427a5fa3b5b643154137703bd0 100644 (file)
@@ -66,9 +66,8 @@ ClassImp(AliEveTRDmcm)
 AliEveTRDDigits::AliEveTRDDigits(AliEveTRDChamber *p) 
   :TEveQuadSet("digits", "")
   ,fParent(p)
-  /*, fBoxes(), fData()*/
 {
-  // Constructor.   
+  // Constructor.
   SetOwnIds(kTRUE);
   gStyle->SetPalette(1, 0);
   SetPalette(new TEveRGBAPalette(0, 512));
@@ -99,7 +98,7 @@ void AliEveTRDDigits::SetData(AliTRDdigitsManager *digits)
         stk   = AliTRDgeometry::GetStack(det),
         sec   = AliTRDgeometry::GetSector(det),
         vid   = AliGeomManager::LayerToVolUID(AliGeomManager::kTRD1 + ly, stk + AliTRDgeometry::Nstack() * sec);
-//  Float_t threshold = fParent->GetDigitsThreshold();
+  SetNameTitle(Form("digits%03d", det), Form("D-%03d [%02d_%d_%d]", det, sec, stk, ly));
   Short_t sig[7]={0,0,0,10,0,0,0};
 
   AliTRDtransform transform(det);
@@ -120,8 +119,8 @@ void AliEveTRDDigits::SetData(AliTRDdigitsManager *digits)
 
       scale = adc[time] < 512 ? adc[time]/512. : 1.;
       AddQuad(c.GetY()-0.5*dy, c.GetZ()-0.5*dz*scale, c.GetX(), dy*0.95, dz*scale);
-      QuadValue(Float_t(adc[time]));
-      QuadId(new TNamed(Form("ADC %d", adc[time]), Form("det[%3d] col[%3d] row[%2d] tb[%2d]", det, col, row, time)));
+      QuadValue(Int_t(adc[time]));
+      QuadId(new TNamed(Form("ADC %d", adc[time]), Form("det[%3d(%02d_%d_%d)] col[%3d] row[%2d] tb[%2d]", det, sec, stk, ly, col, row, time)));
     } 
   }
 
@@ -229,7 +228,7 @@ void AliEveTRDClusters::Print(Option_t *o) const
 }
 
 //______________________________________________________________________________
-void AliEveTRDClusters::Load(Char_t *w) const
+void AliEveTRDClusters::Load(const Char_t *w) const
 {
   Int_t typ = -1;
   if(strcmp(w, "hit")==0) typ = 0;
@@ -251,42 +250,41 @@ void AliEveTRDClusters::Load(Char_t *w) const
   if(!c) return;
 
   Int_t det = c->GetDetector();
-  AliEveTRDLoader *loader = NULL;
+  AliEveTRDLoader *loader(NULL);
   switch(typ){
+  case 3:
+    loader = new AliEveTRDLoaderSim("MC");
+    if(!loader->Open("galice.root")) delete loader;
+    else{
+      loader->SetDataType(AliEveTRDLoader::kTRDHits | AliEveTRDLoader::kTRDDigits | AliEveTRDLoader::kTRDClusters);
+      break;
+    }
   case 0:  
     loader = new AliEveTRDLoader("Hits");
-    if(!loader->Open("TRD.Hits.root")){ 
-      delete loader;
-      return;
+    if(!loader->Open("TRD.Hits.root")) delete loader;
+    else{
+      loader->SetDataType(AliEveTRDLoader::kTRDHits);
+      if(typ!=3) break;
     }
-    loader->SetDataType(AliEveTRDLoader::kTRDHits);
-    break;
   case 1:
-    loader = new AliEveTRDLoader("Digits");
-    if(!loader->Open("TRD.Digits.root")){ 
-      delete loader;
-      return;
+    if(!loader) loader = new AliEveTRDLoader("Digits");
+    if(!loader->Open("TRD.Digits.root")){
+      if(typ==1) delete loader;
+    } else {
+      loader->SetDataType(AliEveTRDLoader::kTRDDigits);
+      if(typ!=3) break;
     }
-    loader->SetDataType(AliEveTRDLoader::kTRDDigits);
-    break;
   case 2:
-    loader = new AliEveTRDLoader("Clusters");
-    if(!loader->Open("TRD.RecPoints.root")){ 
-      delete loader;
-      return;
-    }
-    loader->SetDataType(AliEveTRDLoader::kTRDClusters);
-    break;
-  case 3:
-    loader = new AliEveTRDLoaderSim("MC");
-    if(!loader->Open("galice.root")){ 
-      delete loader;
-      return;
+    if(!loader) loader = new AliEveTRDLoader("Clusters");
+    if(!loader->Open("TRD.RecPoints.root")){
+      if(typ ==2) delete loader;
+    } else {
+      loader->SetDataType(AliEveTRDLoader::kTRDClusters);
+      break;
     }
-    loader->SetDataType(AliEveTRDLoader::kTRDHits | AliEveTRDLoader::kTRDDigits | AliEveTRDLoader::kTRDClusters);
-    break;
   default: return;
   }
+  if(!loader) return;
 
   loader->AddChambers(AliTRDgeometry::GetSector(det),AliTRDgeometry::GetStack(det), AliTRDgeometry::GetLayer(det));
   // load first event
@@ -314,6 +312,11 @@ AliEveTRDTracklet::AliEveTRDTracklet(AliTRDseedV1 *trklt):TEveLine()
     AliInfo(Form("gGeo[%p] Closed[%c]", (void*)gGeoManager, gGeoManager->IsClosed()?'y':'n'));
   }
   SetUserData(trklt);
+  // init tracklet line
+  Int_t sec = AliTRDgeometry::GetSector(trklt->GetDetector());
+  Float_t alpha((0.5+sec)*AliTRDgeometry::GetAlpha()),
+          cphi(TMath::Cos(alpha)),
+          sphi(TMath::Sin(alpha));
   Float_t dx;
   Float_t x0   = trklt->GetX0();
   Float_t y0   = trklt->GetYref(0);
@@ -332,7 +335,20 @@ AliEveTRDTracklet::AliEveTRDTracklet(AliTRDseedV1 *trklt):TEveLine()
     // backup yc - for testing purposes
     Float_t yc = c->GetY(); 
     c->SetY(yc-tilt*(c->GetZ()-zt));
-    c->GetGlobalXYZ(g); 
+    
+    // Ben: Temporary(?) fix -> Issue with wrongly set flag "fIsMisaligned" of AliCluster
+    // Changes can be undone ofter the issue with the flag has been solved
+    //c->GetGlobalXYZ(g);
+    
+    // The following code for the trasformation local-to-global is just adapted from
+    // AliTRDgeometry::RotateBack(...)
+  
+    // tracking to global coordinates transformation
+    Float_t loc[3] = { c->GetX(), c->GetY(), c->GetZ() }; 
+    g[0] = loc[0] * cphi - loc[1] * sphi;
+    g[1] = loc[0] * sphi + loc[1] * cphi;
+    g[2] = loc[2];
+    // Ben: End of fix
     Int_t id = fClusters->SetNextPoint(g[0], g[1], g[2]);
     c->SetY(yc);
     fClusters->SetPointId(id, new AliTRDcluster(*c));
@@ -347,15 +363,11 @@ AliEveTRDTracklet::AliEveTRDTracklet(AliTRDseedV1 *trklt):TEveLine()
   SetLineColor(kRed);
   //SetOwnIds(kTRUE);
   
-  // init tracklet line
-  Int_t sec = AliTRDgeometry::GetSector(trklt->GetDetector());
-  Double_t alpha = AliTRDgeometry::GetAlpha() * (sec<9 ? sec + .5 : sec - 17.5); 
-
   //trklt->Fit(kTRUE);
   y0   = trklt->GetYfit(0);
   dydx = trklt->GetYfit(1);
-  Double_t xg =  x0 * TMath::Cos(alpha) - y0 * TMath::Sin(alpha); 
-  Double_t yg = x0 * TMath::Sin(alpha) + y0 * TMath::Cos(alpha);
+  Double_t xg(x0 * cphi - y0 * sphi),
+           yg(x0 * sphi + y0 * cphi);
   SetPoint(0, xg, yg, z0); 
   //SetPoint(0, x0, y0, z0);
 
@@ -364,8 +376,8 @@ AliEveTRDTracklet::AliEveTRDTracklet(AliTRDseedV1 *trklt):TEveLine()
   x0 -= dx; 
   y0 -= dydx*dx,
   z0 -= dzdx*dx; 
-  xg = x0 * TMath::Cos(alpha) - y0 * TMath::Sin(alpha); 
-  yg = x0 * TMath::Sin(alpha) + y0 * TMath::Cos(alpha);
+  xg = x0 * cphi - y0 * sphi;
+  yg = x0 * sphi + y0 * cphi;
   SetPoint(1, xg, yg, z0);
   //SetPoint(1, x0, y0, z0);
 }
@@ -533,10 +545,10 @@ void AliEveTRDTrack::SetStatus(UChar_t s)
       //trk->CookPID();
   
       Int_t species = 0; Float_t pid = 0.;
-      for(Int_t is=0; is<AliPID::kSPECIES; is++
+      for(Int_t is=0; is<AliPID::kSPECIES; ++is
         if(trk->GetPID(is) > pid){
           pid = trk->GetPID(is);
-          species = is;
+                 species = (AliPID::EParticleType) is;
         }
       switch(species){
       case AliPID::kElectron:
@@ -573,7 +585,7 @@ void AliEveTRDTrack::SetStatus(UChar_t s)
     1.E2*trk->GetPID(2), 1.E2*trk->GetPID(3), 1.E2*trk->GetPID(4), trk->GetLabel()));
 
   if(GetName()){
-    char id[6]; strncpy(id, GetName(), 6); 
+    char id[6]; snprintf(id, 6, "%s", GetName());
     SetName(Form("%s %s", id, AliPID::ParticleName(species)));
   }
 
@@ -582,16 +594,19 @@ void AliEveTRDTrack::SetStatus(UChar_t s)
 }
 
 //______________________________________________________________________________
-void AliEveTRDTrack::Load(Char_t *what) const
+void AliEveTRDTrack::Load(const Char_t *what) const
 {
-  TEveElement::List_ci itrklt=BeginChildren();
+// Spread downwards to tracklets the command "what"
+
+  const AliEveTRDTracklet* trklt(NULL);
+  TEveElement::List_ci itrklt=BeginChildren();
   while(itrklt!=EndChildren()){
-    dynamic_cast<const AliEveTRDTracklet*>(*itrklt)->Load(what);
+    if((trklt = dynamic_cast<const AliEveTRDTracklet*>(*itrklt))) trklt->Load(what);
     itrklt++;
   }
 }
 
-
+//______________________________________________________________________________
 AliEveTRDTrackletOnline::AliEveTRDTrackletOnline(AliTRDtrackletMCM *tracklet) :
   TEveLine(),
   fDetector(-1),
@@ -768,6 +783,6 @@ void AliEveTRDmcm::Draw(Option_t* option)
 
 Bool_t AliEveTRDmcm::AssignPointer(const char* ptrname)
 {
-  gROOT->ProcessLine(Form("AliTRDmcmSim* %s = (AliTRDmcmSim *) 0x%x", ptrname, fMCM));
+  gROOT->ProcessLine(Form("AliTRDmcmSim* %s = (AliTRDmcmSim *)%p", ptrname, (void*)fMCM));
   return kTRUE;
 }