vBorders.push_back(pad+1.);
}
}
- }
- /*
+ }
+
+ //cout<<" NBorders = "<<fNBorders/2<<endl;
+
+ /*
cout<<"Borders:"<<endl;
for( int row=0; row<fNRows; row++ ){
for( int pad=0; pad<fNRowPads; pad++ ){
}
}
*/
+
fBorders = new AliHLTFloat32_t [fNBorders];
if( !fBorders ){
HLTError("Can not allocate memory: %d bytes", fNBorders*sizeof(AliHLTFloat32_t));
{
/// check cluster if it is a candidate for merging
int slicerow=partitionrow+AliHLTTPCTransform::GetFirstRow(partition);
- // cout<<"pad "<<pad<<" sigma2 "<<sigmaPad2<<endl;
-
+
if( !fMapping ) Init();
if( !fMapping ) return 0;
if( slicerow <0 || slicerow>= fNRows ) return 0;
int iPad = (int) pad;
if( iPad<0 || iPad>=fNRowPads ) return 0;
- int atBorder = fMapping[partitionrow*fNRowPads+iPad];
+ int atBorder = fMapping[slicerow*fNRowPads+iPad];
if( atBorder<0 ) return 0;
float dPad = pad - fBorders[atBorder];
if( sigmaPad2>1.e-4 ){
int iBorder = -1;
int iPad = (int) pad;
if( !fMapping ) Init();
-
+
+ int slicerow=partitionrow+AliHLTTPCTransform::GetFirstRow(partition);
+
if (id!=~AliHLTUInt32_t(0)) {
if (slice<0) {
slice=AliHLTTPCSpacePointData::GetSlice(id);
HLTError("cluster id 0x%08x is not consistent with specified partition %d", id, partition);
}
}
+
if( slice<0 || slice>=fkNSlices ){
HLTError("cluster id 0x%08x has wrong slice number %d", id, slice);
}
+
if( partition<0 || partition>=6 ){
HLTError("cluster id 0x%08x has wrong partition number %d", id, partition);
}
- if( slice>=0 && slice<fkNSlices && partition>=0 && partition<6 && fMapping && iPad>=0 && iPad < fNRowPads ){
- iBorder = fMapping[partitionrow*fNRowPads+iPad];
+ if( slice>=0 && slice<fkNSlices && slicerow>=0 && slicerow <fNRows && fMapping && iPad>=0 && iPad < fNRowPads ){
+ iBorder = fMapping[slicerow*fNRowPads+iPad];
+
if( iBorder>=0 ){
float dPad = pad - fBorders[iBorder];
if( sigmaY2>1.e-4 ){
if( fabs(dPad)>1. ) iBorder = -1;
}
}
- if( iBorder>=0 ) iBorder = slice*fkNSlices + iBorder;
+ if( iBorder>=0 ) iBorder = slice*fNBorders + iBorder;
}
- fClusters.push_back(AliClusterRecord(slice, partition, iBorder, 0, id,
+ fClusters.push_back(AliClusterRecord(slice, partition, iBorder, -1, id,
AliHLTTPCRawCluster(partitionrow, pad, time, sigmaY2, sigmaZ2, charge, qmax), mc ));
if( iBorder>=0 ){
fBorderNClusters[iBorder]++;
fBorderNClustersTotal++;
}
- return fClusters.size();
+ return fClusters.size()-1;
}
int AliHLTTPCHWClusterMerger::FillIndex()
}
}
*/
+ /*
+ for( int ib=1; ib<fkNSlices*fNBorders; ib++ ){
+ if( fBorderFirstCluster[ib] != fBorderFirstCluster[ib-1]+fBorderNClusters[ib-1] ){
+ cout<<"Something wrong with cluster borders !!! "<<endl;
+ }
+ }
+ */
return 0;
}
fRemovedClusterIds.push_back(c2.GetId());
HLTDebug("merging %d into %d", border2[ib2].fClusterRecordID, border1[ib1].fClusterRecordID);
//cout<<"Set merged flag at position "<<border2[ib2].fClusterRecordID<<endl;
- c2.SetMergedFlag(1);
- count++;
+ c2.SetMergedTo(border1[ib1].fClusterRecordID);
+ count++;
// do not merge c1 anymore
ib1++;
}
class AliClusterRecord {
public:
AliClusterRecord()
- : fSlice(-1), fPartition(-1), fBorder(-1), fMergedFlag(0), fId(~AliHLTUInt32_t(0)), fCluster(), fMC() {}
- AliClusterRecord(int slice, int partition, int border,bool merged, AliHLTUInt32_t id, const AliHLTTPCRawCluster &cluster)
+ : fSlice(-1), fPartition(-1), fBorder(-1), fMergedFlag(-1), fId(~AliHLTUInt32_t(0)), fCluster(), fMC() {}
+ AliClusterRecord(int slice, int partition, int border,int merged, AliHLTUInt32_t id, const AliHLTTPCRawCluster &cluster)
: fSlice(slice), fPartition(partition), fBorder(border), fMergedFlag(merged), fId(id), fCluster(cluster), fMC() {}
- AliClusterRecord(int slice, int partition, int border,bool merged, AliHLTUInt32_t id, const AliHLTTPCRawCluster &cluster, const AliHLTTPCClusterMCLabel &mc)
+ AliClusterRecord(int slice, int partition, int border,int merged, AliHLTUInt32_t id, const AliHLTTPCRawCluster &cluster, const AliHLTTPCClusterMCLabel &mc)
: fSlice(slice), fPartition(partition), fBorder(border), fMergedFlag(merged), fId(id), fCluster(cluster), fMC(mc) {}
AliClusterRecord(const AliClusterRecord& other)
return *this;
}
- bool GetMergedFlag() const { return fMergedFlag; }
+ int IsMergedTo() const { return fMergedFlag; }
int GetSlice() const {return fSlice;}
int GetBorder() const {return fBorder;}
int GetPartition() const {return fPartition;}
operator AliHLTTPCRawCluster() const {return fCluster;}
const AliHLTTPCRawCluster& GetCluster() const {return fCluster;}
const AliHLTTPCClusterMCLabel& GetMCLabel() const {return fMC;}
- void SetMergedFlag(bool v ){ fMergedFlag = v;}
+ void SetMergedTo( int ind ){ fMergedFlag = ind;}
AliHLTTPCRawCluster &Cluster(){ return fCluster; }
AliHLTTPCClusterMCLabel& MCLabel(){ return fMC; }
private:
int fSlice; //!
int fPartition; //!
int fBorder; //!
- bool fMergedFlag; //!
+ int fMergedFlag; //!
AliHLTUInt32_t fId; //!
AliHLTTPCRawCluster fCluster; //!
AliHLTTPCClusterMCLabel fMC; //!
iterator& operator++() {
if (!fArray || fIter==fArray->end()) return *this;
while ((++fIter)!=fArray->end()) {
- // cout<<"Read flag: "<<fIter->GetMergedFlag()<<endl;
- if (!fIter->GetMergedFlag() ) break;
+ if ( fIter->IsMergedTo()<0 ) break;
}
return *this;
}
if (!fArray) return *this;
while (fIter!=fArray->begin()) {
--fIter;
- if (!fIter->GetMergedFlag()) break;
+ if ( fIter->IsMergedTo()<0 ) break;
}
return *this;
}
new (&fIter) iterator(&fClusters);
fEnd=fIter; fEnd+=fClusters.size();
// skip empty (merged) clusters
- while (fIter!=fEnd && (*fIter).GetMergedFlag() ) {
+ while (fIter!=fEnd && ( (*fIter).IsMergedTo()>=0) ) {
fIter++;
}
return fIter;
return fEnd;
}
+ const vector<AliHLTTPCHWClusterMerger::AliClusterRecord> &GetRecords(){ return fClusters; }
+ static const int GetNSlices(){ return fkNSlices; }
+ int GetNBorders() const { return fNBorders; }
+ int GetBorderNClusters( int ib ) const { return fBorderNClusters[ib]; }
+ int GetBorderFirstCluster( int ib ) const { return fBorderFirstCluster[ib]; }
+ const AliHLTTPCHWClusterMerger::AliBorderRecord *GetBorderClusters() const { return fBorderClusters;}
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
iterator fEnd; //!
static const int fkMergeWidth = 3;
static const int fkNSlices = 36;
- static const int fkMergeTimeWindow = 2;
+ static const int fkMergeTimeWindow = 3;
ClassDef(AliHLTTPCHWClusterMerger, 0)
};