]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCclustererKr.cxx
Update (Chiara)
[u/mrichter/AliRoot.git] / TPC / AliTPCclustererKr.cxx
index b093b6a79a08aaa213535ac9eecdc3b471a3eb2d..03c16a048e685c89cfa3e126765811f2f60787f7 100644 (file)
@@ -226,10 +226,12 @@ delete stream;
 #include "AliTPCAltroMapping.h"\r
 #include "AliTPCcalibDB.h"\r
 #include "AliTPCRawStream.h"\r
+#include "AliTPCRawStreamV3.h"\r
 #include "AliTPCRecoParam.h"\r
 #include "AliTPCReconstructor.h"\r
 #include "AliRawReader.h"\r
 #include "AliTPCCalROC.h"\r
+#include "AliRawEventHeaderBase.h"\r
 \r
 ClassImp(AliTPCclustererKr)\r
 \r
@@ -260,7 +262,9 @@ AliTPCclustererKr::AliTPCclustererKr()
   fHistoRow(0),\r
   fHistoPad(0),\r
   fHistoTime(0),\r
-  fHistoRowPad(0)\r
+   fHistoRowPad(0),\r
+   fTimeStamp(0),\r
+  fRun(0)\r
 {\r
 //\r
 // default constructor\r
@@ -293,7 +297,9 @@ AliTPCclustererKr::AliTPCclustererKr(const AliTPCclustererKr &param)
   fHistoRow(0),\r
   fHistoPad(0),\r
   fHistoTime(0),\r
-  fHistoRowPad(0)\r
+  fHistoRowPad(0),\r
+   fTimeStamp(0),\r
+   fRun(0)\r
 {\r
 //\r
 // copy constructor\r
@@ -323,7 +329,8 @@ AliTPCclustererKr::AliTPCclustererKr(const AliTPCclustererKr &param)
   fHistoPad    = param.fHistoPad  ;\r
   fHistoTime   = param.fHistoTime;\r
   fHistoRowPad = param.fHistoRowPad;\r
-\r
+  fTimeStamp = param.fTimeStamp;\r
+  fRun = param.fRun;\r
 \r
 } \r
 \r
@@ -357,6 +364,8 @@ AliTPCclustererKr & AliTPCclustererKr::operator = (const AliTPCclustererKr & par
   fHistoPad    = param.fHistoPad  ;\r
   fHistoTime   = param.fHistoTime;\r
   fHistoRowPad = param.fHistoRowPad;\r
+  fTimeStamp = param.fTimeStamp;\r
+  fRun = param.fRun;\r
   return (*this);\r
 }\r
 \r
@@ -427,39 +436,223 @@ Int_t AliTPCclustererKr::FinderIO()
   return 0;\r
 }\r
 \r
+\r
+\r
 Int_t AliTPCclustererKr::FinderIO(AliRawReader* rawReader)\r
+{\r
+  // Krypton cluster finder for the TPC raw data\r
+  // this method is unsing AliAltroRawStreamV3\r
+  // fParam must be defined before\r
+  if (!rawReader) return 1;\r
+  //\r
+  fRawData=kTRUE; //set flag to data\r
+  \r
+  if (!fOutput) {\r
+    Error("Digits2Clusters", "output tree not initialised");\r
+    return 11;\r
+  }\r
+  \r
+  fParam->SetMaxTBin(fRecoParam->GetLastBin());//set number of timebins from reco -> param\r
+  //   used later for memory allocation\r
+\r
+  AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader();\r
+  if (eventHeader){\r
+    fTimeStamp = eventHeader->Get("Timestamp");\r
+    fRun = rawReader->GetRunNumber();\r
+  }\r
+\r
+\r
+  Bool_t isAltro=kFALSE;\r
+  \r
+  AliTPCROC * roc = AliTPCROC::Instance();\r
+  AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise();\r
+  AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping();\r
+  //\r
+  AliTPCRawStreamV3 input(rawReader,(AliAltroMapping**)mapping);\r
+  \r
+  const Int_t kNIS = fParam->GetNInnerSector();//number of inner sectors\r
+  const Int_t kNOS = fParam->GetNOuterSector();//number of outer sectors\r
+  const Int_t kNS = kNIS + kNOS;//all sectors\r
+  \r
+  \r
+  //crate TPC view\r
+  AliTPCDigitsArray *digarr=new AliTPCDigitsArray(kFALSE);//data not sim\r
+  digarr->Setup(fParam);//as usually parameters\r
+  \r
+  for(Int_t iSec = 0; iSec < kNS; iSec++) {\r
+    AliTPCCalROC * noiseROC;\r
+    AliTPCCalROC noiseDummy(iSec);\r
+    if(noiseTPC==0x0){\r
+      noiseROC = &noiseDummy;//noise=0\r
+    }else{\r
+      noiseROC = noiseTPC->GetCalROC(iSec);  // noise per given sector\r
+    }\r
+    Int_t nRows = 0; //number of rows in sector\r
+    Int_t nDDLs = 0; //number of DDLs\r
+    Int_t indexDDL = 0; //DDL index\r
+    if (iSec < kNIS) {\r
+      nRows = fParam->GetNRowLow();\r
+      nDDLs = 2;\r
+      indexDDL = iSec * 2;\r
+    }else {\r
+      nRows = fParam->GetNRowUp();\r
+      nDDLs = 4;\r
+      indexDDL = (iSec-kNIS) * 4 + kNIS * 2;\r
+    }\r
+    \r
+    //\r
+    // Load the raw data for corresponding DDLs\r
+    //\r
+    rawReader->Reset();\r
+    rawReader->Select("TPC",indexDDL,indexDDL+nDDLs-1);\r
+      \r
+    \r
+    while (input.NextDDL()){\r
+      // Allocate memory for rows in sector (pads(depends on row) x timebins)\r
+      if (!digarr->GetRow(iSec,0)){\r
+        for(Int_t iRow = 0; iRow < nRows; iRow++) {\r
+          digarr->CreateRow(iSec,iRow);\r
+        }//end loop over rows\r
+      }\r
+      //loop over pads\r
+      while ( input.NextChannel() ) {\r
+        Int_t iRow = input.GetRow();\r
+        Int_t iPad = input.GetPad();\r
+        //check row consistency\r
+        if (iRow < 0 ) continue;\r
+        if (iRow < 0 || iRow >= nRows){\r
+          AliError(Form("Pad-row index (%d) outside the range (%d -> %d) !",\r
+                        iRow, 0, nRows -1));\r
+          continue;\r
+        }\r
+        \r
+      //check pad consistency\r
+        if (iPad < 0 || iPad >= (Int_t)(roc->GetNPads(iSec,iRow))) {\r
+          AliError(Form("Pad index (%d) outside the range (%d -> %d) !",\r
+                        iPad, 0, roc->GetNPads(iSec,iRow) ));\r
+          continue;\r
+        }\r
+        \r
+      //loop over bunches\r
+        while ( input.NextBunch() ){\r
+          Int_t  startTbin    = (Int_t)input.GetStartTimeBin();\r
+          Int_t  bunchlength  = (Int_t)input.GetBunchLength();\r
+          const UShort_t *sig = input.GetSignals();\r
+          isAltro=kTRUE;\r
+          for (Int_t iTime = 0; iTime<bunchlength; iTime++){\r
+            Int_t iTimeBin=startTbin-iTime;\r
+            //\r
+            if(fDebugLevel==72){\r
+              fHistoRow->Fill(iRow);\r
+              fHistoPad->Fill(iPad);\r
+              fHistoTime->Fill(iTimeBin);\r
+              fHistoRowPad->Fill(iPad,iRow);\r
+            }else if(fDebugLevel>=0&&fDebugLevel<72){\r
+              if(iSec==fDebugLevel){\r
+                fHistoRow->Fill(iRow);\r
+                fHistoPad->Fill(iPad);\r
+                fHistoTime->Fill(iTimeBin);\r
+                fHistoRowPad->Fill(iPad,iRow);\r
+              }\r
+            }else if(fDebugLevel==73){\r
+              if(iSec<36){\r
+                fHistoRow->Fill(iRow);\r
+                fHistoPad->Fill(iPad);\r
+                fHistoTime->Fill(iTimeBin);\r
+                fHistoRowPad->Fill(iPad,iRow);\r
+              }\r
+            }else if(fDebugLevel==74){\r
+              if(iSec>=36){\r
+                fHistoRow->Fill(iRow);\r
+                fHistoPad->Fill(iPad);\r
+                fHistoTime->Fill(iTimeBin);\r
+                fHistoRowPad->Fill(iPad,iRow);\r
+              }\r
+            }\r
+            \r
+            //check time consistency\r
+            if ( iTimeBin < fRecoParam->GetFirstBin() || iTimeBin >= fRecoParam->GetLastBin()){\r
+              //cout<<iTimeBin<<endl;\r
+              continue;\r
+              AliFatal(Form("Timebin index (%d) outside the range (%d -> %d) !",\r
+                            iTimeBin, 0, fRecoParam->GetLastBin() -1));\r
+            }\r
+            //signal\r
+            Float_t signal=(Float_t)sig[iTime];\r
+            if (signal <= fZeroSup ||\r
+                iTimeBin < fFirstBin ||\r
+                iTimeBin > fLastBin\r
+               ) {\r
+                 digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
+                 continue;\r
+               }\r
+            if (!noiseROC) continue;\r
+            Double_t noiseOnPad = noiseROC->GetValue(iRow,iPad);//noise on given pad and row in sector\r
+            if (noiseOnPad > fMaxNoiseAbs){\r
+              digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
+              continue; // consider noisy pad as dead\r
+            }\r
+            if(signal <= fMaxNoiseSigma * noiseOnPad){\r
+              digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
+              continue;\r
+            }\r
+            digarr->GetRow(iSec,iRow)->SetDigitFast(TMath::Nint(signal),iTimeBin,iPad);\r
+          }// end loop signals in bunch\r
+        }// end loop bunches\r
+      } // end loop pads\r
+    }// end ddl loop\r
+  }// end sector loop\r
+  SetDigArr(digarr);\r
+  if(isAltro) FindClusterKrIO();\r
+  delete digarr;\r
+  \r
+  return 0;\r
+}\r
+\r
+\r
+\r
+\r
+\r
+Int_t AliTPCclustererKr::FinderIOold(AliRawReader* rawReader)\r
 {\r
   // Krypton cluster finder for the TPC raw data\r
   //\r
   // fParam must be defined before\r
+  if (!rawReader) return 1;\r
 \r
   if(rawReader)fRawData=kTRUE; //set flag to data\r
-\r
+  \r
   if (!fOutput) {\r
     Error("Digits2Clusters", "output tree not initialised");\r
     return 11;\r
   }\r
-\r
+  \r
   fParam->SetMaxTBin(fRecoParam->GetLastBin());//set number of timebins from reco -> param\r
   //   used later for memory allocation\r
 \r
+  AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader();\r
+  if (eventHeader){\r
+    fTimeStamp = eventHeader->Get("Timestamp");\r
+    fRun = rawReader->GetRunNumber();\r
+  }\r
+  \r
   Bool_t isAltro=kFALSE;\r
-\r
+  \r
   AliTPCROC * roc = AliTPCROC::Instance();\r
   AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise();\r
   AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping();\r
   //\r
   AliTPCRawStream input(rawReader,(AliAltroMapping**)mapping);\r
-\r
+  \r
   const Int_t kNIS = fParam->GetNInnerSector();//number of inner sectors\r
   const Int_t kNOS = fParam->GetNOuterSector();//number of outer sectors\r
   const Int_t kNS = kNIS + kNOS;//all sectors\r
-\r
-\r
+  \r
+  \r
   //crate TPC view\r
   AliTPCDigitsArray *digarr=new AliTPCDigitsArray(kFALSE);//data not sim\r
   digarr->Setup(fParam);//as usually parameters\r
-\r
+  \r
   //\r
   // Loop over sectors\r
   //\r
@@ -483,23 +676,23 @@ Int_t AliTPCclustererKr::FinderIO(AliRawReader* rawReader)
       nDDLs = 4;\r
       indexDDL = (iSec-kNIS) * 4 + kNIS * 2;\r
     }\r
-\r
+    \r
     //\r
     // Load the raw data for corresponding DDLs\r
     //\r
     rawReader->Reset();\r
     rawReader->Select("TPC",indexDDL,indexDDL+nDDLs-1);\r
-\r
+    \r
     if(input.Next()) {\r
       isAltro=kTRUE;\r
       // Allocate memory for rows in sector (pads(depends on row) x timebins)\r
       for(Int_t iRow = 0; iRow < nRows; iRow++) {\r
-       digarr->CreateRow(iSec,iRow); \r
+        digarr->CreateRow(iSec,iRow);\r
       }//end loop over rows\r
     }\r
     rawReader->Reset();\r
     rawReader->Select("TPC",indexDDL,indexDDL+nDDLs-1);\r
-\r
+    \r
     //\r
     // Begin loop over altro data\r
     //\r
@@ -507,91 +700,91 @@ Int_t AliTPCclustererKr::FinderIO(AliRawReader* rawReader)
       \r
       //check sector consistency\r
       if (input.GetSector() != iSec)\r
-       AliFatal(Form("Sector index mismatch ! Expected (%d), but got (%d) !",iSec,input.GetSector()));\r
+        AliFatal(Form("Sector index mismatch ! Expected (%d), but got (%d) !",iSec,input.GetSector()));\r
       \r
       Int_t iRow = input.GetRow();\r
       Int_t iPad = input.GetPad();\r
       Int_t iTimeBin = input.GetTime();\r
-\r
+      \r
       //\r
       if(fDebugLevel==72){\r
-       fHistoRow->Fill(iRow);\r
-       fHistoPad->Fill(iPad);\r
-       fHistoTime->Fill(iTimeBin);\r
-       fHistoRowPad->Fill(iPad,iRow);\r
+        fHistoRow->Fill(iRow);\r
+        fHistoPad->Fill(iPad);\r
+        fHistoTime->Fill(iTimeBin);\r
+        fHistoRowPad->Fill(iPad,iRow);\r
       }else if(fDebugLevel>=0&&fDebugLevel<72){\r
-       if(iSec==fDebugLevel){\r
-         fHistoRow->Fill(iRow);\r
-         fHistoPad->Fill(iPad);\r
-         fHistoTime->Fill(iTimeBin);\r
-         fHistoRowPad->Fill(iPad,iRow);\r
-       }\r
+        if(iSec==fDebugLevel){\r
+          fHistoRow->Fill(iRow);\r
+          fHistoPad->Fill(iPad);\r
+          fHistoTime->Fill(iTimeBin);\r
+          fHistoRowPad->Fill(iPad,iRow);\r
+        }\r
       }else if(fDebugLevel==73){\r
-       if(iSec<36){\r
-         fHistoRow->Fill(iRow);\r
-         fHistoPad->Fill(iPad);\r
-         fHistoTime->Fill(iTimeBin);\r
-         fHistoRowPad->Fill(iPad,iRow);\r
-       }\r
+        if(iSec<36){\r
+          fHistoRow->Fill(iRow);\r
+          fHistoPad->Fill(iPad);\r
+          fHistoTime->Fill(iTimeBin);\r
+          fHistoRowPad->Fill(iPad,iRow);\r
+        }\r
       }else if(fDebugLevel==74){\r
-       if(iSec>=36){\r
-         fHistoRow->Fill(iRow);\r
-         fHistoPad->Fill(iPad);\r
-         fHistoTime->Fill(iTimeBin);\r
-         fHistoRowPad->Fill(iPad,iRow);\r
-       }\r
+        if(iSec>=36){\r
+          fHistoRow->Fill(iRow);\r
+          fHistoPad->Fill(iPad);\r
+          fHistoTime->Fill(iTimeBin);\r
+          fHistoRowPad->Fill(iPad,iRow);\r
+        }\r
       }\r
-\r
+      \r
       //check row consistency\r
       if (iRow < 0 ) continue;\r
       if (iRow < 0 || iRow >= nRows){\r
-       AliError(Form("Pad-row index (%d) outside the range (%d -> %d) !",\r
-                     iRow, 0, nRows -1));\r
-       continue;\r
+        AliError(Form("Pad-row index (%d) outside the range (%d -> %d) !",\r
+                      iRow, 0, nRows -1));\r
+        continue;\r
       }\r
-\r
+      \r
       //check pad consistency\r
       if (iPad < 0 || iPad >= (Int_t)(roc->GetNPads(iSec,iRow))) {\r
-       AliError(Form("Pad index (%d) outside the range (%d -> %d) !",\r
-                     iPad, 0, roc->GetNPads(iSec,iRow) ));\r
-       continue;\r
+        AliError(Form("Pad index (%d) outside the range (%d -> %d) !",\r
+                      iPad, 0, roc->GetNPads(iSec,iRow) ));\r
+        continue;\r
       }\r
-\r
+      \r
       //check time consistency\r
       if ( iTimeBin < fRecoParam->GetFirstBin() || iTimeBin >= fRecoParam->GetLastBin()){\r
-       //cout<<iTimeBin<<endl;\r
-       continue;\r
-       AliFatal(Form("Timebin index (%d) outside the range (%d -> %d) !",\r
-                     iTimeBin, 0, fRecoParam->GetLastBin() -1));\r
+  //cout<<iTimeBin<<endl;\r
+        continue;\r
+        AliFatal(Form("Timebin index (%d) outside the range (%d -> %d) !",\r
+                      iTimeBin, 0, fRecoParam->GetLastBin() -1));\r
       }\r
-\r
+      \r
       //signal\r
       Int_t signal = input.GetSignal();\r
-      if (signal <= fZeroSup || \r
-         iTimeBin < fFirstBin ||\r
-         iTimeBin > fLastBin\r
-         ) {\r
-       digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
-       continue;\r
-      }\r
+      if (signal <= fZeroSup ||\r
+          iTimeBin < fFirstBin ||\r
+          iTimeBin > fLastBin\r
+         ) {\r
+           digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
+           continue;\r
+         }\r
       if (!noiseROC) continue;\r
       Double_t noiseOnPad = noiseROC->GetValue(iRow,iPad);//noise on given pad and row in sector\r
       if (noiseOnPad > fMaxNoiseAbs){\r
-       digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
-       continue; // consider noisy pad as dead\r
+        digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
+        continue; // consider noisy pad as dead\r
       }\r
       if(signal <= fMaxNoiseSigma * noiseOnPad){\r
-       digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
-       continue;\r
+        digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad);\r
+        continue;\r
       }\r
-      digarr->GetRow(iSec,iRow)->SetDigitFast(signal,iTimeBin,iPad);      \r
+      digarr->GetRow(iSec,iRow)->SetDigitFast(signal,iTimeBin,iPad);\r
     }//end of loop over altro data\r
   }//end of loop over sectors\r
   \r
   SetDigArr(digarr);\r
   if(isAltro) FindClusterKrIO();\r
   delete digarr;\r
-\r
+  \r
   return 0;\r
 }\r
 \r
@@ -673,7 +866,7 @@ Int_t AliTPCclustererKr::FindClusterKrIO()
          for(Int_t iTimeBin=1;iTimeBin<kNTime-1;iTimeBin++){\r
            if (!ifMaximum)  {\r
              if (val[iTimeBin]==-1) break;   // 0 until the end\r
-             for( ; iTimeBin<kNTime-2&&val[iTimeBin]<fMinAdc ;iTimeBin++);\r
+             for( ; iTimeBin<kNTime-2&&val[iTimeBin]<fMinAdc ;iTimeBin++) {}\r
            }\r
            //\r
            Short_t adc = val[iTimeBin];\r
@@ -694,8 +887,9 @@ Int_t AliTPCclustererKr::FindClusterKrIO()
                //GetXY(iSec,iRow,iPad,xCord,yCord);\r
                Double_t x[]={iRow,iPad,iTimeBin};\r
                Int_t i[]={iSec};\r
-               AliTPCTransform trafo;\r
-               trafo.Transform(x,i,0,1);\r
+               AliTPCTransform *transform     = AliTPCcalibDB::Instance()->GetTransform() ;\r
+\r
+               transform->Transform(x,i,0,1);\r
                \r
                AliPadMax *oneMaximum = new AliPadMax(AliTPCvtpr(valueMaximum,\r
                                                                 timeBinMax,\r
@@ -742,8 +936,13 @@ Int_t AliTPCclustererKr::FindClusterKrIO()
              //GetXY(iSec,iRow,iPad,xCord,yCord);\r
              Double_t x[]={iRow,iPad,iTimeBin};\r
              Int_t i[]={iSec};\r
-             AliTPCTransform trafo;\r
-             trafo.Transform(x,i,0,1);\r
+             //AliTPCTransform trafo;\r
+             //trafo.Transform(x,i,0,1);\r
+\r
+               AliTPCTransform *transform     = AliTPCcalibDB::Instance()->GetTransform() ;\r
+\r
+               transform->Transform(x,i,0,1);\r
+\r
              AliPadMax *oneMaximum = new AliPadMax(AliTPCvtpr(valueMaximum,\r
                                                               timeBinMax,\r
                                                               iPad,\r
@@ -907,6 +1106,9 @@ void AliTPCclustererKr::MakeClusters(TObjArray * maximaInSector, Int_t iSec, Int
     clusterKr.SetRMS();//Set pad,row,timebin RMS\r
     clusterKr.Set1D();//Set size in pads and timebins\r
 \r
+    clusterKr.SetTimeStamp(fTimeStamp);\r
+    clusterKr.SetRun(fRun);\r
+\r
     clusterCounter++;\r
     \r
     \r