]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveDet/AliEveITSScaledModule.cxx
Add a protection to avoid crash in QA (Julian)
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveITSScaledModule.cxx
index aaa9c596e1dcb9dbafbc723eba70288265aaf33b..b209644e74b5336f37fd167a470b01d2af6e2148 100644 (file)
@@ -43,10 +43,12 @@ void AliEveDigitScaleInfo::ScaleChanged(Int_t s)
   fScale = s;
 
   AliEveITSScaledModule* sm;
-  std::list<TEveElement*>::iterator i = fBackRefs.begin();
+  RefMap_i i = fBackRefs.begin();
+  // #endif
   while (i != fBackRefs.end())
   {
-    sm = dynamic_cast<AliEveITSScaledModule*>(*i);
+    sm = dynamic_cast<AliEveITSScaledModule*>(i->first);
+    // #endif
     if(sm) sm->LoadQuads();
     ++i;
   }
@@ -58,10 +60,12 @@ void AliEveDigitScaleInfo::StatTypeChanged(Int_t t)
   fSyncPalette = kTRUE;
 
   AliEveITSScaledModule* sm;
-  std::list<TEveElement*>::iterator i = fBackRefs.begin();
+  RefMap_i i = fBackRefs.begin();
+  // #endif
   while (i != fBackRefs.end())
   {
-    sm = dynamic_cast<AliEveITSScaledModule*>(*i);
+    sm = dynamic_cast<AliEveITSScaledModule*>(i->first);
+    // #endif
     if (sm) sm->SetQuadValues();
     ++i;
   }
@@ -107,12 +111,12 @@ ClassImp(AliEveITSScaledModule)
 
 AliEveITSScaledModule::AliEveITSScaledModule(Int_t gid, AliEveITSDigitsInfo* info, AliEveDigitScaleInfo* si):
   AliEveITSModule("AliEveITSScaledModule", "AliEveITSScaledModule"),
-  fDigitsMap(),
   fNx(-1),
   fNz(-1),
   fNCx(-1),
   fNCz(-1),
-  fScaleInfo(si)
+  fScaleInfo(si),
+  fDigitsMap()
 {
   SetOwnIds(kTRUE);
 
@@ -135,18 +139,19 @@ void AliEveITSScaledModule::LoadQuads()
   // We need this as TEveQuadSet offers optimized treatment for
   // quads in the x-y plane.
 
-  TClonesArray *digits;
+  TClonesArray *digits = fInfo->GetDigits(fID, fDetID);
+  if (!digits) return;
+
+  Int_t ndigits = digits->GetEntriesFast();
+
   Float_t       x, z, zo, dpx, dpz; // orig cells size, pos
-  Int_t         i, j, ndigits;   // orig cells idx
-  Int_t         c1, c2;          // original coordinates
+  Int_t         i, j;               // orig cells idx
+  Int_t         c1, c2;             // original coordinates
 
   Int_t id;
   std::map<Int_t, Int_t> dmap;
   std::map<Int_t, Int_t>::iterator miter;
-  digits  = fInfo->GetDigits(fID, fDetID);
-  ndigits = digits->GetEntriesFast();
 
-  ScaledDigit_t* sd;
   Int_t scale = fScaleInfo->GetScale() -1;
   switch(fDetID)
   {
@@ -170,10 +175,11 @@ void AliEveITSScaledModule::LoadQuads()
 
        fInfo->GetSPDLocalZ(od->GetCoord1(),zo);
         c1 = od->GetCoord1(); c2 = od->GetCoord2();
-       i = Int_t((zo+fDz)/dpz);
-       j = Int_t((od->GetCoord2()*fNx)/fInfo->fSegSPD->Npx());
+       i  = Int_t((zo+fDz)/dpz);
+       j  = Int_t((od->GetCoord2()*fNx)/fInfo->fSegSPD->Npx());
        id = j*fNx + i;
 
+        ScaledDigit_t* sd = 0;
         miter = dmap.find(id);
        if(miter == dmap.end())
        {
@@ -186,7 +192,7 @@ void AliEveITSScaledModule::LoadQuads()
        }
         else
        {
-         sd = dynamic_cast<ScaledDigit_t*>(GetId(miter->second));
+         sd = static_cast<ScaledDigit_t*>(GetId(miter->second));
           if(c1 < sd->fMinI)
            sd->fMinI = c1;
          else if( c1 > sd->fMaxI)
@@ -213,23 +219,25 @@ void AliEveITSScaledModule::LoadQuads()
       fNCx = fInfo->fSDDScaleX[scale];
       fNz  = Int_t(fInfo->fSegSDD->Npz()/fNCz);
       fNx  = Int_t(fInfo->fSegSDD->Npx()/fNCx);
-      dpz = 2*fDz/fNz;
-      dpx = 2*fDx/fNx;
+      dpz  = 2*fDz/fNz;
+      dpx  = 2*fDx/fNx;
 
-      AliITSdigitSDD *od=0;
-      for (Int_t k=0; k<ndigits; k++) {
-       od=(AliITSdigitSDD*)digits->UncheckedAt(k);
+      AliITSdigitSDD *od = 0;
+      for (Int_t k = 0; k < ndigits; ++k)
+      {
+       od = (AliITSdigitSDD*)digits->UncheckedAt(k);
        fInfo->fSegSDD->DetToLocal(od->GetCoord2(), od->GetCoord1(),x,z);
-       z+= fDz;
-       x+= fDx;
-       i = Int_t(z/dpz);
-       j = Int_t(x/dpx);
+       z += fDz;
+       x += fDx;
+       i  = Int_t(z/dpz);
+       j  = Int_t(x/dpx);
        //printf("Mod %d coord %d,%d out of %d,%d :: ORIG coord %d,%d out of %d,%d \n",fID,
        //       i,j,Nz,Nx,od->GetCoord1(),od->GetCoord2(),fInfo->fSegSDD->Npz(),fInfo->fSegSDD->Npx());
 
        id = j*fNx + i;
        c1 = od->GetCoord1(); c2 = od->GetCoord2();
 
+       ScaledDigit_t* sd = 0;
        miter = dmap.find(id);
        if(miter == dmap.end())
        {
@@ -242,7 +250,7 @@ void AliEveITSScaledModule::LoadQuads()
        }
        else
        {
-         sd = dynamic_cast<ScaledDigit_t*>(GetId(miter->second));
+         sd = static_cast<ScaledDigit_t*>(GetId(miter->second));
          if(c1 < sd->fMinI)
            sd->fMinI = c1;
          else if( c1 > sd->fMaxI)
@@ -276,7 +284,7 @@ void AliEveITSScaledModule::LoadQuads()
       dpz = 2*fDz/fNz;
       dpx = 2*fDx/fNx;
 
-      AliITSdigitSSD *od=0;
+      AliITSdigitSSD *od = 0;
       for (Int_t k=0; k<ndigits; k++) {
        od=(AliITSdigitSSD*)digits->UncheckedAt(k);
        if(od->GetCoord1() == 1)
@@ -287,8 +295,8 @@ void AliEveITSScaledModule::LoadQuads()
        c1 = od->GetCoord1(); c2 = od->GetCoord2();
        id = j*i;
 
+       ScaledDigit_t* sd = 0;
        miter = dmap.find(id);
-       ScaledDigit_t* sd;
        if(miter == dmap.end())
        {
          // printf("orig digit %d,%d scaled %d,%d \n",od->GetCoord1(),od->GetCoord2(),i,j);
@@ -303,7 +311,7 @@ void AliEveITSScaledModule::LoadQuads()
        }
        else
        {
-         sd = dynamic_cast<ScaledDigit_t*>(GetId(miter->second));
+         sd = static_cast<ScaledDigit_t*>(GetId(miter->second));
          if(c1 < sd->fMinI)
            sd->fMinI = c1;
          else if( c1 > sd->fMaxI)
@@ -335,7 +343,7 @@ void AliEveITSScaledModule::SetQuadValues()
   Int_t num = fPlex.Size();
   for (Int_t i = 0 ; i < num; i++)
   {
-    ScaledDigit_t* sd = dynamic_cast<ScaledDigit_t*>(GetId(i));
+    ScaledDigit_t* sd = static_cast<ScaledDigit_t*>(GetId(i));
     Int_t v = 0;
     switch(fScaleInfo->GetStatType())
     {
@@ -410,9 +418,9 @@ void  AliEveITSScaledModule::DigitSelected(Int_t idx)
   // Override control-click from TEveQuadSet
   printf("AliEveITSScaledModule::DigitSelected "); Print();
 
-  DigitBase_t* qb  = GetDigit(idx);
-  TObject* obj  = qb->fId.GetObject();
-  ScaledDigit_t* sd = dynamic_cast<ScaledDigit_t*>(obj);
+  // DigitBase_t *qb  = GetDigit(idx);
+  TObject     *obj = GetId(idx);
+  ScaledDigit_t *sd = static_cast<ScaledDigit_t*>(obj);
   TClonesArray *digits = fInfo->GetDigits(fID, fDetID);
   Int_t ndigits = digits->GetEntriesFast();