]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
ATO-17 - bug fix indicated by valgrind - check out of range acces
authormivanov <marian.ivanov@cern.ch>
Fri, 11 Jul 2014 09:38:05 +0000 (11:38 +0200)
committermivanov <marian.ivanov@cern.ch>
Fri, 11 Jul 2014 09:38:05 +0000 (11:38 +0200)
TPC/Sim/AliTPCDigitizer.cxx

index 0730797fc2f78054b41b1da2fa8c125238d89243..00a844104d420fe346f65be237a731b182de3471 100644 (file)
@@ -627,8 +627,11 @@ void AliTPCDigitizer::DigitizeWithTailAndCrossTalk(Option_t* option)
   //  
   AliTPCcalibDB* const calib=AliTPCcalibDB::Instance();
   AliTPCRecoParam *recoParam = calib->GetRecoParam(0); 
-  cout << " =================  DigitizeWithTailAndCrossTalk is being processed  ================ " << endl;
-  
+  cout << " ====================================================================================================================================== " << endl;
+  cout << " ============================================  DigitizeWithTailAndCrossTalk is being processed  ======================================= " << endl;
+  cout << " ====================================================================================================================================== " << endl;
+  cout << " recoParam->GetCrosstalkCorrection()  =   " << recoParam->GetCrosstalkCorrection()  << endl; 
+  cout << " recoParam->GetUseIonTailCorrection() =   " << recoParam->GetUseIonTailCorrection() << endl;
   Int_t nROCs = 72;
   char s[100]; 
   char ss[100];
@@ -779,19 +782,20 @@ void AliTPCDigitizer::DigitizeWithTailAndCrossTalk(Option_t* option)
   for (Int_t isec = 0;isec<nROCs;isec++){        //loop overs sectors
     // Array of TGraphErrors for a given sector
     TGraphErrors ** graphRes   = new TGraphErrors *[20];
-    Float_t * indexAmpGraphs   = new Float_t[20];
+    Float_t * trfIndexArr    = new Float_t[20];
     for (Int_t icache=0; icache<20; icache++)
     {
       graphRes[icache]       = NULL;
-      indexAmpGraphs[icache] = 0;
+      trfIndexArr[icache] = 0;
     }
-    if (!AliTPCcalibDB::Instance()->GetTailcancelationGraphs(isec,graphRes,indexAmpGraphs)) continue;
+    if (!AliTPCcalibDB::Instance()->GetTailcancelationGraphs(isec,graphRes,trfIndexArr)) continue;
+    
     // fill all TGraphErrors of trfs (time response function) of a given sector to a TObjArray
     TObjArray *timeResArr = new TObjArray(20);  timeResArr -> SetOwner(kTRUE); 
     for (Int_t ires = 0;ires<20;ires++) timeResArr->AddAt(graphRes[ires],ires);
     timeResFunc.AddAt(timeResArr,isec); // Fill all trfs into a single TObjArray 
     nIonTailBins = graphRes[3]->GetN();
-    delete timeResArr;
+    cout << " nIonTailBins = " << nIonTailBins << "  sector = " << isec << "   bin 30 =  " << graphRes[3]->GetY()[30] <<  endl;
   }
 
   //
@@ -887,6 +891,8 @@ void AliTPCDigitizer::DigitizeWithTailAndCrossTalk(Option_t* option)
       cerr<<"AliTPC warning: invalid segment ID ! "<<globalRowID<<endl;
       continue;
     }
+    TObjArray *arrTRF = (TObjArray*)timeResFunc.At(sector);  
+    TGraphErrors  *graphTRF = (TGraphErrors*)arrTRF->At(1);
     Int_t wireSegmentID    = param->GetWireSegment(sector,padRow);
     Float_t nPadsPerSegment = (Float_t)(param->GetNPadsPerSegment(wireSegmentID));
     const Float_t ampfactor = (sector<36)?factorIROC:factorOROC;      // factor for the iontail which is ROC type dependent
@@ -966,6 +972,7 @@ void AliTPCDigitizer::DigitizeWithTailAndCrossTalk(Option_t* option)
       // Ion tail correction: being elem=padNumber*nTimeBins+timeBin;
       Int_t lowerElem=elem-nIonTailBins;    
       Int_t zeroElem =(elem/nTimeBins)*nTimeBins;
+      if (zeroElem<0) zeroElem=0;
       if (lowerElem<zeroElem) lowerElem=zeroElem;
       if (lowerElem) lowerElem = padNumber*nTimeBins;
       // 
@@ -976,13 +983,13 @@ void AliTPCDigitizer::DigitizeWithTailAndCrossTalk(Option_t* option)
            for (Int_t celem=elem-1; celem>lowerElem; celem--){
              //for Mesut - her we substact the ion tail        
              Double_t qCElem=pdigC[celem];
-             //if (graph->GetY()[elem-celem]<0 )qIonTail+=qCElem*graph->GetY()[elem-celem];
+            if (graphTRF->GetY()[elem-celem]<0)qIonTail+=qCElem*graphTRF->GetY()[elem-celem];
            }
        }
       }
       //
+      q+=qIonTail;
       Float_t noisePad = noiseROC->GetValue(padRow,padNumber);
-      //       Float_t noise  = gRandom->Gaus(0,param->GetNoise()*param->GetNoiseNormFac());  
       Float_t noise  = pTPC->GetNoise();
       q/=16.;                                              //conversion factor
       q+=noise*noisePad;