#include <TFile.h>
#include <TObjArray.h>
#include <TTree.h>
+#include <TMatrixD.h>
#include <TGraphErrors.h>
#include <TTimeStamp.h>
#include "AliLog.h"
fkParam(0),
fDebugStreamer(0),
fUseHLTClusters(4),
+ fCrossTalkSignalArray(0),
+ fCrossTalkSignal(0),
fSeedsPool(0),
fFreeSeedsID(500),
fNFreeSeeds(0),
fYMax[irow]=0;
fPadLength[irow]=0;
}
+
+ // crosstalk array and matrix initialization
+ Int_t nROCs = 72;
+ Int_t nTimeBinsAll = 1100;
+ Int_t nWireSegments = 11;
+ fCrossTalkSignalArray = new TObjArray(nROCs); // for 36 sectors
+ fCrossTalkSignalArray->SetOwner(kTRUE);
+ for (Int_t isector=0; isector<nROCs; isector++){
+ fCrossTalkSignal = new TMatrixD(nWireSegments,nTimeBinsAll);
+ for (Int_t imatrix = 0; imatrix<11; imatrix++)
+ for (Int_t jmatrix = 0; jmatrix<nTimeBinsAll; jmatrix++){
+ (*fCrossTalkSignal)[imatrix][jmatrix]=0.;
+ }
+ fCrossTalkSignalArray->AddAt(fCrossTalkSignal,isector);
+ }
}
//_____________________________________________________________________
fSeeds(0),
fIteration(0),
fkParam(0),
- fDebugStreamer(0),
- fUseHLTClusters(4),
- fSeedsPool(0),
+ fDebugStreamer(0),
+ fUseHLTClusters(4),
+ fCrossTalkSignalArray(0),
+ fCrossTalkSignal(0),
+ fSeedsPool(0),
fFreeSeedsID(500),
fNFreeSeeds(0),
fLastSeedID(-1)
fSeeds(0),
fIteration(0),
fkParam(0),
- fDebugStreamer(0),
- fUseHLTClusters(4),
- fSeedsPool(0),
+ fDebugStreamer(0),
+ fUseHLTClusters(4),
+ fCrossTalkSignalArray(0),
+ fCrossTalkSignal(0),
+ fSeedsPool(0),
fFreeSeedsID(500),
fNFreeSeeds(0),
fLastSeedID(-1)
fSeeds->Clear();
delete fSeeds;
}
+ if (fCrossTalkSignalArray) delete fCrossTalkSignalArray;
+ if (fCrossTalkSignal) delete fCrossTalkSignal;
if (fDebugStreamer) delete fDebugStreamer;
if (fSeedsPool) delete fSeedsPool;
}
//
Int_t sec,row;
fkParam->AdjustSectorRow(clrow->GetID(),sec,row);
+
+ // wire segmentID and nPadsPerSegment to be used for Xtalk calculation
+ Int_t wireSegmentID = fkParam->GetWireSegment(sec,row);
+ Float_t nPadsPerSegment = (Float_t)(fkParam->GetNPadsPerSegment(wireSegmentID));
+ TMatrixD &crossTalkSignal = *((TMatrixD*)fCrossTalkSignalArray->At(sec));
for (Int_t icl=0; icl<clrow->GetArray()->GetEntriesFast(); icl++){
- Transform((AliTPCclusterMI*)(clrow->GetArray()->At(icl)));
+ AliTPCclusterMI *clXtalk= static_cast<AliTPCclusterMI*>(clrow->GetArray()->At(icl));
+ Int_t timeBinXtalk = clXtalk->GetTimeBin();
+ Double_t qTotXtalk = clXtalk->GetQ();
+ crossTalkSignal[wireSegmentID][timeBinXtalk]+= qTotXtalk/nPadsPerSegment;
+ Transform((AliTPCclusterMI*)(clXtalk));
}
//
AliTPCtrackerRow * tpcrow=0;
//-------------------------------------------------------
#include <TArrayI.h>
+#include <TMatrixD.h>
#include "AliTracker.h"
#include "AliTPCreco.h"
#include "AliTPCclusterMI.h"
TTreeSRedirector *fDebugStreamer; //!debug streamer
Int_t fUseHLTClusters; // use HLT clusters instead of offline clusters
//
+
+ TObjArray * fCrossTalkSignalArray; // for 36 sectors
+ TMatrixD * fCrossTalkSignal; // matrix holds total charge in a given anode wire segment for a given timebin
+
+
TClonesArray* fSeedsPool; //! pool of seeds
TArrayI fFreeSeedsID; //! array of ID's of freed seeds
Int_t fNFreeSeeds; //! number of seeds freed in the pool
TObject *rocFactorOROC = ionTailArr->FindObject("factorOROC");
Float_t factorIROC = (atof(rocFactorIROC->GetTitle()));
Float_t factorOROC = (atof(rocFactorOROC->GetTitle()));
+ Int_t nIonTailBins =0;
TObjArray timeResFunc(nROCs);
for (Int_t isec = 0;isec<nROCs;isec++){ //loop overs sectors
// Array of TGraphErrors for a given sector
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;
}
TObjArray crossTalkSignalArray(nROCs); // for 36 sectors
TVectorD * qTotSectorOld = new TVectorD(nROCs);
- TVectorD * qTotSectorNew = new TVectorD(nROCs);
Float_t qTotTPC = 0.;
Float_t qTotPerSector = 0.;
Int_t nTimeBinsAll = 1100;
// Crosstalk correction
qXtalk = (*(TMatrixD*)crossTalkSignalArray.At(sector))[wireSegmentID][timeBin];
qTotPerSector = qTotSectorOld -> GetMatrixArray()[sector];
- q -= qXtalk;
+ //q -= qXtalk;
- // Ion tail correction:
- // elem=padNumber*nTimeBins+timeBin;
- // lowerElem=elem-nIonTailBins;
+ // Ion tail correction: being elem=padNumber*nTimeBins+timeBin;
+ Int_t lowerElem=elem-nIonTailBins;
// if (lowerElem<0) lowerElem=0;
// if (lowerElem in previospad) lowerElem = padNumber*nTimeBins;
//
ptr1++;
}
- if (AliTPCReconstructor::StreamLevel()==1 && q > zerosup ) {
+ if (AliTPCReconstructor::StreamLevel()==1 && qOrig > zerosup ) {
cout << " sector = " << sector << " row = " << padRow << " localPad = " << localPad << " SegmentID = " << wireSegmentID << " nPadsPerSegment = " << nPadsPerSegment << endl;
cout << " qXtalk = " << qXtalk ;
cout << " qOrig = " << qOrig ;