]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCclustererMI.cxx
Remove warning in TMap GetValue (Marian)
[u/mrichter/AliRoot.git] / TPC / AliTPCclustererMI.cxx
index bab72c5233d47f1cbf0b1be90f6eaf3390b44010..dbc0425e1534b94bcee3a6b8810d2be963542949 100644 (file)
@@ -321,7 +321,7 @@ AliTPCclusterMI &c)
     //set cluster parameters
     c.SetQ(sumw);
     c.SetPad(meani-2.5);
-    c.SetTimeBin(meanj-2.5);
+    c.SetTimeBin(meanj-3);
     c.SetSigmaY2(mi2);
     c.SetSigmaZ2(mj2);
     c.SetType(0);
@@ -745,7 +745,11 @@ void AliTPCclustererMI::Digits2Clusters(AliRawReader* rawReader)
     AliTPCCalROC * gainROC    = gainTPC->GetCalROC(fSector);  // pad gains per given sector
     AliTPCCalROC * pedestalROC = pedestalTPC->GetCalROC(fSector);  // pedestal per given sector
     AliTPCCalROC * noiseROC   = noiseTPC->GetCalROC(fSector);  // noise per given sector
+    //check the presence of the calibration
+    if (!noiseROC ||!pedestalROC ) {
+      AliError(Form("Missing calibration per sector\t%d\n",fSector));
+      continue;
+    }
     Int_t nRows = 0;
     Int_t nDDLs = 0, indexDDL = 0;
     if (fSector < kNIS) {
@@ -783,20 +787,23 @@ void AliTPCclustererMI::Digits2Clusters(AliRawReader* rawReader)
     Float_t gain =1;
     Int_t lastPad=-1;
     while (input.Next()) {
-      digCounter++;
       if (input.GetSector() != fSector)
        AliFatal(Form("Sector index mismatch ! Expected (%d), but got (%d) !",fSector,input.GetSector()));
 
       
       Int_t iRow = input.GetRow();
-      if (iRow < 0 || iRow >= nRows)
-       AliFatal(Form("Pad-row index (%d) outside the range (%d -> %d) !",
+      if (iRow < 0 || iRow >= nRows){
+       AliError(Form("Pad-row index (%d) outside the range (%d -> %d) !",
                      iRow, 0, nRows -1));
+       continue;
+      }
       //pad
       Int_t iPad = input.GetPad();
-      if (iPad < 0 || iPad >= nPadsMax)
-       AliFatal(Form("Pad index (%d) outside the range (%d -> %d) !",
+      if (iPad < 0 || iPad >= nPadsMax) {
+       AliError(Form("Pad index (%d) outside the range (%d -> %d) !",
                      iPad, 0, nPadsMax-1));
+       continue;
+      }
       if (iPad!=lastPad){
        gain    = gainROC->GetValue(iRow,iPad);
        lastPad = iPad;
@@ -810,6 +817,7 @@ void AliTPCclustererMI::Digits2Clusters(AliRawReader* rawReader)
                      iTimeBin, 0, iTimeBin -1));
       }
       iTimeBin+=3;
+
       //signal
       Float_t signal = input.GetSignal();
       if (!calcPedestal && signal <= zeroSup) continue;      
@@ -820,14 +828,19 @@ void AliTPCclustererMI::Digits2Clusters(AliRawReader* rawReader)
       }else{
        allBins[iRow][iPad*fMaxTime+iTimeBin] = signal;
       }
-      allBins[iRow][iPad*fMaxTime+0]=1.;  // pad with signal
+      allBins[iRow][iPad*fMaxTime+0]+=1.;  // pad with signal
+
+      // Temporary
+      digCounter++;
     } // End of the loop over altro data
     //
     //
+    //
+    //
     // Now loop over rows and perform pedestal subtraction
     if (digCounter==0) continue;
-    //    if (fPedSubtraction) {
-    if (calcPedestal) {
+    //    if (calcPedestal) {
+    if (kTRUE) {
       for (Int_t iRow = 0; iRow < nRows; iRow++) {
        Int_t maxPad;
        if (fSector < kNIS)
@@ -836,6 +849,15 @@ void AliTPCclustererMI::Digits2Clusters(AliRawReader* rawReader)
          maxPad = fParam->GetNPadsUp(iRow);
 
        for (Int_t iPad = 3; iPad < maxPad + 3; iPad++) {
+         //
+         // Temporary fix for data production - !!!! MARIAN
+         // The noise calibration should take mean and RMS - currently the Gaussian fit used
+         // In case of double peak  - the pad should be rejected
+         //
+         // Line mean - if more than given digits over threshold - make a noise calculation
+         // and pedestal substration
+         if (!calcPedestal && allBins[iRow][iPad*fMaxTime+0]<50) continue;
+         //
          if (allBins[iRow][iPad*fMaxTime+0] <1 ) continue;  // no data
          Float_t *p = &allBins[iRow][iPad*fMaxTime+3];
          //Float_t pedestal = TMath::Median(fMaxTime, p);      
@@ -903,7 +925,9 @@ void AliTPCclustererMI::Digits2Clusters(AliRawReader* rawReader)
   delete [] allSigBins;
   delete [] allNSigBins;
   
-  Info("Digits2Clusters", "File  %s Event\t%d\tNumber of found clusters : %d\n", fOutput->GetName(),*(rawReader->GetEventId()), nclusters);
+  if (rawReader->GetEventId() && fOutput ){
+    Info("Digits2Clusters", "File  %s Event\t%d\tNumber of found clusters : %d\n", fOutput->GetName(),*(rawReader->GetEventId()), nclusters);
+  }
 
 }
 
@@ -933,14 +957,15 @@ void AliTPCclustererMI::FindClusters(AliTPCCalROC * noiseROC)
     if (b[0]<minMaxCutAbs) continue;   //threshold for maxima  
     //
     if (b[-1]+b[1]+b[-fMaxTime]+b[fMaxTime]<=0) continue;  // cut on isolated clusters 
-    //    if (b[-1]+b[1]<=0) continue;               // cut on isolated clusters
-    //if (b[-fMaxTime]+b[fMaxTime]<=0) continue; // cut on isolated clusters
+    if (b[-1]+b[1]<=0) continue;               // cut on isolated clusters
+    if (b[-fMaxTime]+b[fMaxTime]<=0) continue; // cut on isolated clusters
     //
     if ((b[0]+b[-1]+b[1])<minUpDownCutAbs) continue;   //threshold for up down  (TRF) 
     if ((b[0]+b[-fMaxTime]+b[fMaxTime])<minLeftRightCutAbs) continue;   //threshold for left right (PRF)    
     if (!IsMaximum(*b,fMaxTime,b)) continue;
     //
     Float_t noise = noiseROC->GetValue(fRow, i/fMaxTime);
+    if (noise>fRecoParam->GetMaxNoise()) continue;
     // sigma cuts
     if (b[0]<minMaxCutSigma*noise) continue;   //threshold form maxima  
     if ((b[0]+b[-1]+b[1])<minUpDownCutSigma*noise) continue;   //threshold for up town TRF 
@@ -1028,12 +1053,18 @@ Double_t AliTPCclustererMI::ProcesSignal(Float_t *signal, Int_t nchannels, Int_t
       rms  +=histo[median+idelta]*(median+idelta)*(median+idelta);
     }
   }
-  mean  /=count10;
-  mean06/=count06;
-  mean09/=count09;
-  rms    = TMath::Sqrt(TMath::Abs(rms/count10-mean*mean));
-  rms06    = TMath::Sqrt(TMath::Abs(rms06/count06-mean06*mean06));
- rms09    = TMath::Sqrt(TMath::Abs(rms09/count09-mean09*mean09));
+  if (count10) {
+    mean  /=count10;
+    rms    = TMath::Sqrt(TMath::Abs(rms/count10-mean*mean));
+  }
+  if (count06) {
+    mean06/=count06;
+    rms06    = TMath::Sqrt(TMath::Abs(rms06/count06-mean06*mean06));
+  }
+  if (count09) {
+    mean09/=count09;
+    rms09    = TMath::Sqrt(TMath::Abs(rms09/count09-mean09*mean09));
+  }
   rmsEvent = rms09;
   //
   pedestalEvent = median;