]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TPCLib/AliHLTTPCClusterFinder.cxx
Removing the lib files
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCClusterFinder.cxx
index c976645ad268a74f23de8e1bc17631b08a3a2779..c131c40bea8600f9c2c614ef157442788640ca88 100644 (file)
@@ -1,5 +1,4 @@
-// @(#) $Id$
-// Original: AliHLTClustFinderNew.cxx,v 1.29 2005/06/14 10:55:21 cvetan Exp 
+// $Id$
 
 //**************************************************************************
 //* This file is property of and copyright by the ALICE HLT Project        * 
 //  @note 
 
 #include "AliHLTTPCDigitReader.h"
-#include "AliHLTTPCRootTypes.h"
 #include "AliHLTTPCLogging.h"
 #include "AliHLTTPCClusterFinder.h"
 #include "AliHLTTPCSpacePointData.h"
-#include "AliHLTTPCMemHandler.h"
 #include "AliHLTTPCPad.h"
 #include <sys/time.h>
 #include <algorithm>
@@ -57,7 +54,7 @@ AliHLTTPCClusterFinder::AliHLTTPCClusterFinder()
   fDeconvPad(kFALSE),
   fStdout(kFALSE),
   fCalcerr(kTRUE),
-  fRawSP(kFALSE),
+  fFillRawClusters(kFALSE),
   fFirstRow(0),
   fLastRow(0),
   fCurrentRow(0),
@@ -75,6 +72,7 @@ AliHLTTPCClusterFinder::AliHLTTPCClusterFinder()
   fClusters(),
   fClustersMCInfo(),
   fMCDigits(),
+  fRawClusters(),
   fNumberOfPadsInRow(NULL),
   fNumberOfRows(0),
   fRowOfFirstCandidate(0),
@@ -142,6 +140,7 @@ void AliHLTTPCClusterFinder::InitSlice(Int_t slice,Int_t patch,Int_t nmaxpoints)
   fClustersMCInfo.clear();
   fMCDigits.clear();
   fClusterMCVector.clear();   
+  fRawClusters.clear();
 }
 
 void AliHLTTPCClusterFinder::InitializePadArray(){
@@ -345,13 +344,14 @@ void AliHLTTPCClusterFinder::ReadDataUnsortedDeconvoluteTime(void* ptr,unsigned
          // The same is true for the function ReadDataUnsorted() above.
          // In addition the signals are organized in the opposite direction
          if(f32BitFormat){
-           indexInBunchData = fDigitReader->GetBunchSize();
+           indexInBunchData = fDigitReader->GetBunchSize()-1;
            const UShort_t *bunchData= fDigitReader->GetSignalsShort();
-           
+
            do{
              AliHLTTPCClusters candidate;
              //for(Int_t i=indexInBunchData;i<fDigitReader->GetBunchSize();i++){
              for(Int_t i=indexInBunchData;i>=0;i--){
+
                // Checks if one need to deconvolute the signals
                if(bunchData[i]>prevSignal && signalFalling==kTRUE){
                  if(i<fDigitReader->GetBunchSize()-1){ // means there are more than one signal left in the bunch
@@ -421,7 +421,6 @@ void AliHLTTPCClusterFinder::ReadDataUnsortedDeconvoluteTime(void* ptr,unsigned
                if(prevSignal>bunchData[i]){//means the peak of the signal has been reached and deconvolution will happen if the signal rise again.
                  signalFalling=kTRUE;
                }
-
                candidate.fTotalCharge+=bunchData[i];   
                candidate.fTime += time*bunchData[i];
                candidate.fTime2 += time*time*bunchData[i];
@@ -541,7 +540,7 @@ Int_t AliHLTTPCClusterFinder::FillHWAddressList(AliHLTUInt16_t *hwaddlist, Int_t
 }
  
 
-Int_t AliHLTTPCClusterFinder::FillOutputMCInfo(AliHLTTPCClusterFinder::ClusterMCInfo * outputMCInfo, Int_t maxNumberOfClusterMCInfo){
+Int_t AliHLTTPCClusterFinder::FillOutputMCInfo(AliHLTTPCClusterMCLabel * outputMCInfo, Int_t maxNumberOfClusterMCInfo){
   // see header file for class documentation
   
   Int_t counter=0;
@@ -558,6 +557,17 @@ Int_t AliHLTTPCClusterFinder::FillOutputMCInfo(AliHLTTPCClusterFinder::ClusterMC
   return counter;
 }
 
+Int_t AliHLTTPCClusterFinder::FillOutputRaw(AliHLTTPCRawCluster* rawClusters, unsigned sizeInByte) const
+{
+  // fill the raw clusters
+  if (fRawClusters.size()*sizeof(AliHLTTPCRawCluster)>sizeInByte) {
+    HLTError("not enough space to write raw clusters");
+    return 0;
+  }
+  memcpy(rawClusters, &fRawClusters[0], fRawClusters.size()*sizeof(AliHLTTPCRawCluster));
+  return fRawClusters.size();
+}
+
 void AliHLTTPCClusterFinder::FindClusters(){
   // see header file for function documentation
 
@@ -584,10 +594,10 @@ void AliHLTTPCClusterFinder::FindClusters(){
          fClusters.push_back(*tmpCandidate);
          if(fDoMC){
            //sort the vector (large->small) according to weight and remove elements above 2 (keep 0 1 and 2) 
-           sort(fClusterMCVector.begin(),fClusterMCVector.end(), MCWeight::CompareWeights );
-           ClusterMCInfo tmpClusterMCInfo;
+           sort(fClusterMCVector.begin(),fClusterMCVector.end(), CompareWeights );
+           AliHLTTPCClusterMCLabel tmpClusterMCInfo;
 
-           MCWeight zeroMC;
+           AliHLTTPCClusterMCWeight zeroMC;
            zeroMC.fMCID=-1;
            zeroMC.fWeight=0;
 
@@ -705,7 +715,7 @@ void AliHLTTPCClusterFinder::FillMCClusterVector(vector<AliHLTTPCDigitData> *dig
     for(Int_t id=0; id<3; id++){
       if(digitData->at(d).fTrackID[id]>=0){
        Bool_t matchFound = kFALSE;
-       MCWeight mc;
+       AliHLTTPCClusterMCWeight mc;
        mc.fMCID = digitData->at(d).fTrackID[id];
        mc.fWeight = ((Float_t)digitData->at(d).fCharge)/nIDsInDigit;
        for(UInt_t i=0;i<fClusterMCVector.size();i++){
@@ -1088,6 +1098,10 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliClusterData *list)
   Int_t thisrow=-1,thissector=-1;
   UInt_t counter = fNClusters;
   
+  if (fFillRawClusters) {
+    fRawClusters.resize(nclusters);
+  }
+
   for(int j=0; j<nclusters; j++)
     {
 
@@ -1127,20 +1141,25 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliClusterData *list)
        UInt_t q2=list[j].fTotalCharge*list[j].fTotalCharge;
        //      Float_t sy2=list[j].fPad2 * list[j].fTotalCharge - list[j].fPad * list[j].fPad;
        Float_t sy2=(Float_t)list[j].fPad2 * list[j].fTotalCharge - (Float_t)list[j].fPad * list[j].fPad;
+       if(q2 == 0) {
+         LOG(AliHLTTPCLog::kError,"AliHLTTPCClusterFinder::WriteClusters","Cluster width")
+           <<"zero charge "<< list[j].fTotalCharge <<" on row "<<fCurrentRow<<" "<<fpad<<" "<<ftime<<ENDLOG;
+         continue;
+       }
        sy2/=q2;
        if(sy2 < 0) {
            LOG(AliHLTTPCLog::kError,"AliHLTTPCClusterFinder::WriteClusters","Cluster width")
              <<"SigmaY2 negative "<<sy2<<" on row "<<fCurrentRow<<" "<<fpad<<" "<<ftime<<ENDLOG;
            continue;
        } else {
-         if(!fRawSP){
+         {
            fpad2 = (sy2 + 1./12)*AliHLTTPCTransform::GetPadPitchWidth(patch)*AliHLTTPCTransform::GetPadPitchWidth(patch);
            if(sy2 != 0){
              fpad2*=0.108; //constants are from offline studies
              if(patch<2)
                fpad2*=2.07;
            }
-         } else fpad2=sy2; //take the width not the error
+         }
        }
        //      Float_t sz2=list[j].fTime2*list[j].fTotalCharge - list[j].fTime*list[j].fTime;
        Float_t sz2=(Float_t)list[j].fTime2*list[j].fTotalCharge - (Float_t)list[j].fTime*list[j].fTime;
@@ -1150,20 +1169,25 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliClusterData *list)
            <<"SigmaZ2 negative "<<sz2<<" on row "<<fCurrentRow<<" "<<fpad<<" "<<ftime<<ENDLOG;
          continue;
        } else {
-         if(!fRawSP){
+         {
            ftime2 = (sz2 + 1./12)*AliHLTTPCTransform::GetZWidth()*AliHLTTPCTransform::GetZWidth();
            if(sz2 != 0) {
              ftime2 *= 0.169; //constants are from offline studies
              if(patch<2)
                ftime2 *= 1.77;
            }
-         } else ftime2=sz2; //take the width, not the error
+         }
        }
       }
       if(fStdout==kTRUE)
        HLTInfo("WriteCluster: padrow %d pad %d +- %d time +- %d charge %d",fCurrentRow, fpad, fpad2, ftime, ftime2, list[j].fTotalCharge);
       
-      if(!fRawSP){
+      if (fFillRawClusters && fRawClusters.size()>(unsigned)counter) {
+       fRawClusters[counter].SetPadRow(fCurrentRow);
+       fRawClusters[counter].SetPad(fpad);  
+       fRawClusters[counter].SetTime(ftime);
+      }
+      {
        AliHLTTPCTransform::Slice2Sector(fCurrentSlice,fCurrentRow,thissector,thisrow);
 
        if(fOfflineTransform == NULL){
@@ -1189,7 +1213,7 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliClusterData *list)
          fSpacePointData[counter].fZ = xyz[2];
        }
        else{
-         Double_t x[3]={thisrow,fpad+.5,ftime}; 
+         Double_t x[3]={static_cast<Double_t>(thisrow),fpad+.5,ftime}; 
          Int_t iSector[1]={thissector};
          fOfflineTransform->Transform(x,iSector,0,1);
          double y[3] = {x[0], x[1], x[2] };      
@@ -1205,11 +1229,6 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliClusterData *list)
        }
 
       } 
-      else {
-       fSpacePointData[counter].fX = fCurrentRow;
-       fSpacePointData[counter].fY = fpad;
-       fSpacePointData[counter].fZ = ftime;
-      }
       
       fSpacePointData[counter].fCharge = list[j].fTotalCharge;
       fSpacePointData[counter].fPadRow = fCurrentRow;
@@ -1218,13 +1237,19 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliClusterData *list)
 
       fSpacePointData[counter].fQMax = list[j].fQMax;
 
-      fSpacePointData[counter].fUsed = kFALSE;         // only used / set in AliHLTTPCDisplay
-      fSpacePointData[counter].fTrackN = -1;           // only used / set in AliHLTTPCDisplay
+      fSpacePointData[counter].SetUsed(kFALSE);         // only used / set in AliHLTTPCDisplay
+      fSpacePointData[counter].SetTrackNumber(-1);      // only used / set in AliHLTTPCDisplay
 
       Int_t patch=fCurrentPatch;
       if(patch==-1) patch=0; //never store negative patch number
-      fSpacePointData[counter].fID = counter
-       +((fCurrentSlice&0x7f)<<25)+((patch&0x7)<<22);//Uli
+      fSpacePointData[counter].SetID( fCurrentSlice, patch, counter );
+
+      if (fFillRawClusters && fRawClusters.size()>(unsigned)counter) {
+       fRawClusters[counter].SetSigmaY2(fSpacePointData[counter].fSigmaY2);
+       fRawClusters[counter].SetSigmaZ2(fSpacePointData[counter].fSigmaZ2);
+       fRawClusters[counter].SetCharge(fSpacePointData[counter].fCharge);
+       fRawClusters[counter].SetQMax(fSpacePointData[counter].fQMax);
+      }
 
 #ifdef do_mc
       Int_t trackID[3];
@@ -1282,6 +1307,10 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliHLTTPCClusters *li
   //write cluster to output pointer
   Int_t thisrow,thissector;
   UInt_t counter = fNClusters;
+
+  if (fFillRawClusters) {
+    fRawClusters.resize(nclusters);
+  }
   
   for(int j=0; j<nclusters; j++)
     {
@@ -1305,14 +1334,14 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliHLTTPCClusters *li
              <<"SigmaY2 negative "<<sy2<<" on row "<<fCurrentRow<<" "<<fpad<<" "<<ftime<<ENDLOG;
            continue;
        } else {
-         if(!fRawSP){
+         {
            fpad2 = (sy2 + 1./12)*AliHLTTPCTransform::GetPadPitchWidth(patch)*AliHLTTPCTransform::GetPadPitchWidth(patch);
            if(sy2 != 0){
              fpad2*=0.108; //constants are from offline studies
              if(patch<2)
                fpad2*=2.07;
            }
-         } else fpad2=sy2; //take the width not the error
+         }
        }
        Float_t sz2=list[j].fTime2*list[j].fTotalCharge - list[j].fTime*list[j].fTime;
        sz2/=q2;
@@ -1321,20 +1350,25 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliHLTTPCClusters *li
            <<"SigmaZ2 negative "<<sz2<<" on row "<<fCurrentRow<<" "<<fpad<<" "<<ftime<<ENDLOG;
          continue;
        } else {
-         if(!fRawSP){
+         {
            ftime2 = (sz2 + 1./12)*AliHLTTPCTransform::GetZWidth()*AliHLTTPCTransform::GetZWidth();
            if(sz2 != 0) {
              ftime2 *= 0.169; //constants are from offline studies
              if(patch<2)
                ftime2 *= 1.77;
            }
-         } else ftime2=sz2; //take the width, not the error
+         }
        }
       }
       if(fStdout==kTRUE)
        HLTInfo("WriteCluster: padrow %d pad %d +- %d time +- %d charge %d",fCurrentRow, fpad, fpad2, ftime, ftime2, list[j].fTotalCharge);
 
-      if(!fRawSP){
+      if (fFillRawClusters && fRawClusters.size()>(unsigned)counter) {
+       fRawClusters[counter].SetPadRow(fCurrentRow);
+       fRawClusters[counter].SetPad(fpad);  
+       fRawClusters[counter].SetTime(ftime);
+      }
+      {
        AliHLTTPCTransform::Slice2Sector(fCurrentSlice,fCurrentRow,thissector,thisrow);
        AliHLTTPCTransform::Raw2Local(xyz,thissector,thisrow,fpad,ftime);
        
@@ -1357,10 +1391,6 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliHLTTPCClusters *li
        }
        fSpacePointData[counter].fZ = xyz[2];
        
-      } else {
-       fSpacePointData[counter].fX = fCurrentRow;
-       fSpacePointData[counter].fY = fpad;
-       fSpacePointData[counter].fZ = ftime;
       }
       
       fSpacePointData[counter].fCharge = list[j].fTotalCharge;
@@ -1370,13 +1400,19 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliHLTTPCClusters *li
 
       fSpacePointData[counter].fQMax = list[j].fQMax;
 
-      fSpacePointData[counter].fUsed = kFALSE;         // only used / set in AliHLTTPCDisplay
-      fSpacePointData[counter].fTrackN = -1;           // only used / set in AliHLTTPCDisplay
+      fSpacePointData[counter].SetUsed(kFALSE);         // only used / set in AliHLTTPCDisplay
+      fSpacePointData[counter].SetTrackNumber(-1);      // only used / set in AliHLTTPCDisplay
 
       Int_t patch=fCurrentPatch;
       if(patch==-1) patch=0; //never store negative patch number
-      fSpacePointData[counter].fID = counter
-       +((fCurrentSlice&0x7f)<<25)+((patch&0x7)<<22);//Uli
+      fSpacePointData[counter].SetID( fCurrentSlice, patch, counter );
+
+      if (fFillRawClusters && fRawClusters.size()>(unsigned)counter) {
+       fRawClusters[counter].SetSigmaY2(fSpacePointData[counter].fSigmaY2);
+       fRawClusters[counter].SetSigmaZ2(fSpacePointData[counter].fSigmaZ2);
+       fRawClusters[counter].SetCharge(fSpacePointData[counter].fCharge);
+       fRawClusters[counter].SetQMax(fSpacePointData[counter].fQMax);
+      }
 
 #ifdef do_mc
       Int_t trackID[3];