#include "AliITSRecPoint.h"
#include "AliITSRecPointContainer.h"
#include "AliITSgeomTGeo.h"
-#include "AliITSDetTypeRec.h"
#include "AliRawReader.h"
#include "AliITSRawStreamSSD.h"
#include <TClonesArray.h>
AliError("Cannot get magnetic field from TGeoGlobalMagField");
}
else {
- Float_t Bfield = field->SolenoidField();
+ Float_t bField = field->SolenoidField();
// NB: spatial shift has opposite sign for lay 5 and 6, but strip numbering also changes direction, so no sign-change
// Shift due to ExB on drift N-side, units: strip width
- fLorentzShiftP = -repa->GetTanLorentzAngleElectronsSSD() * 150.e-4/95.e-4 * Bfield / 5.0;
+ fLorentzShiftP = -repa->GetTanLorentzAngleElectronsSSD() * 150.e-4/95.e-4 * bField / 5.0;
// Shift due to ExB on drift P-side, units: strip width
- fLorentzShiftN = -repa->GetTanLorentzAngleHolesSSD() * 150.e-4/95.e-4 * Bfield / 5.0;
- AliDebug(1,Form("Bfield %f Lorentz Shift P-side %f N-side %f",Bfield,fLorentzShiftN,fLorentzShiftP));
+ fLorentzShiftN = -repa->GetTanLorentzAngleHolesSSD() * 150.e-4/95.e-4 * bField / 5.0;
+ AliDebug(1,Form("bField %f Lorentz Shift P-side %f N-side %f",bField,fLorentzShiftN,fLorentzShiftP));
}
}
}
//------------------------------------------------------------
// This function creates ITS clusters from raw data
//------------------------------------------------------------
+ fNClusters = 0;
rawReader->Reset();
AliITSRawStreamSSD inputSSD(rawReader);
FindClustersSSD(&inputSSD);
AliWarning("Using default AliITSRecoParam class");
}
}
+ if (fRawID2ClusID) { // RS: reset references from 1D clusters to rawID's
+ fRawIDRef[0].Reset();
+ fRawIDRef[1].Reset();
+ }
Int_t nClustersSSD = 0;
const Int_t kNADC = 12;
const Int_t kMaxADCClusters = 1000;
- Int_t strips[kNADC][2][kMaxADCClusters][2]; // [ADC],[side],[istrip], [0]=istrip [1]=signal
+ Int_t strips[kNADC][2][kMaxADCClusters][3]; // [ADC],[side],[istrip], [0]=istrip [1]=signal [2]=rawID (for embedding, RS)
Int_t nStrips[kNADC][2];
for( int i=0; i<kNADC; i++ ){
//*
//* Loop over modules DDL+AD
//*
-
+ int countRW = 0; //RS
+ if (fRawID2ClusID) fRawID2ClusID->Reset(); //RS if array was provided, we shall store the rawID -> ClusterID
+
while (kTRUE) {
bool next = input->Next();
for( int istr = 0; istr<n+1; istr++ ){
bool stripOK = 1;
- Int_t strip=0;
+ Int_t strip=0, rwID = 0;
Float_t signal=0.0, noise=0.0, gain=0.0;
if( istr<n ){
strip = strips[adc][side][istr][0];
signal = strips[adc][side][istr][1];
-
+ rwID = strips[adc][side][istr][2]; // RS
//cout<<"strip "<<adc<<" / "<<side<<": "<<strip<<endl;
if( cal ){
nDigits++;
//nstat[side]++;
ostrip = strip;
+ if (fRawID2ClusID) fRawIDRef[side].AddReference(nClusters1D[side],rwID);
}
} //* end loop over strips
}
strips[adc][side][n][0] = strip;
strips[adc][side][n][1] = signal;
+ strips[adc][side][n][2] = countRW;
n++;
//cout<<"SSD: "<<input->GetDDL()<<" "<<input->GetAD()<<" "
//<<input->GetADC()<<" "<<input->GetSideFlag()<<" "<<((int)input->GetStrip())<<" "<<strip<<" : "<<input->GetSignal()<<endl;
-
+ //
+ countRW++; //RS
} //* End main loop over the input
AliDebug(1,Form("found clusters in ITS SSD: %d", nClustersSSD));
void AliITSClusterFinderV2SSD::
-FindClustersSSD(Ali1Dcluster* neg, Int_t nn,
- Ali1Dcluster* pos, Int_t np,
+FindClustersSSD(const Ali1Dcluster* neg, Int_t nn,
+ const Ali1Dcluster* pos, Int_t np,
TClonesArray *clusters) {
//------------------------------------------------------------
// Actual SSD cluster finder
if ((np*nn) > fgPairsSize) {
- if (fgPairs) delete [] fgPairs;
- fgPairsSize = 4*np*nn;
+ delete [] fgPairs;
+ fgPairsSize = 2*np*nn;
fgPairs = new Short_t[fgPairsSize];
}
memset(fgPairs,0,sizeof(Short_t)*np*nn);
}
AliITSRecPoint * cl2;
- cl2 = new ((*clusters)[ncl]) AliITSRecPoint(milab,lp,info);
+ cl2 = new ((*clusters)[ncl]) AliITSRecPoint(milab,lp,info);
cl2->SetChargeRatio(ratio);
cl2->SetType(1);
lp[5]=-4.32e-05;
}
}
+ //
+ if (fRawID2ClusID) { // set rawID <-> clusterID correspondence for embedding
+ const int kMaxRefRW = 200;
+ UInt_t nrefsRW,refsRW[kMaxRefRW];
+ nrefsRW = fRawIDRef[0].GetReferences(j,refsRW,kMaxRefRW); // n-side
+ for (int ir=nrefsRW;ir--;) {
+ int rwid = (int)refsRW[ir];
+ if (fRawID2ClusID->GetSize()<=rwid) fRawID2ClusID->Set( (rwid+10)<<1 );
+ (*fRawID2ClusID)[rwid] = fNClusters+1; // RS: store clID+1 as a reference to the cluster
+ }
+ //
+ nrefsRW = fRawIDRef[1].GetReferences(ip,refsRW,kMaxRefRW); // p-side
+ for (int ir=nrefsRW;ir--;) {
+ int rwid = (int)refsRW[ir];
+ if (fRawID2ClusID->GetSize()<=rwid) fRawID2ClusID->Set( (rwid+10)<<1 );
+ (*fRawID2ClusID)[rwid] = fNClusters+1; // RS: store clID+1 as a reference to the cluster
+ }
+ //
+ milab[0] = fNClusters+1; // RS: assign id as cluster label
+ }
AliITSRecPoint * cl2;
cl2 = new ((*clusters)[ncl]) AliITSRecPoint(milab,lp,info);
}
cused1[ip]++;
cused2[j]++;
- ncl++;
+ ncl++;
+ fNClusters++;
} // manyXmany
} // loop over Pside 1Dclusters