#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
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
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
fHistoPad = param.fHistoPad ;\r
fHistoTime = param.fHistoTime;\r
fHistoRowPad = param.fHistoRowPad;\r
-\r
+ fTimeStamp = param.fTimeStamp;\r
+ fRun = param.fRun;\r
\r
} \r
\r
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
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
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
\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
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
//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
//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
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