X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HLT%2FPHOS%2FAliHLTPHOSClusterizer.cxx;h=3cf7a23ba9f8b47feae01ab4764a3dc3072a1305;hb=1af38adf7128b4501530551fa272929028f63e49;hp=9248506ca54f11468d1fba6e4c7d01a7538b499c;hpb=d949e02e4cb8b55fc3eab3019dea48f2e14aa0b4;p=u%2Fmrichter%2FAliRoot.git diff --git a/HLT/PHOS/AliHLTPHOSClusterizer.cxx b/HLT/PHOS/AliHLTPHOSClusterizer.cxx index 9248506ca54..3cf7a23ba9f 100644 --- a/HLT/PHOS/AliHLTPHOSClusterizer.cxx +++ b/HLT/PHOS/AliHLTPHOSClusterizer.cxx @@ -28,6 +28,7 @@ #include "AliHLTPHOSClusterizer.h" #include "AliHLTPHOSBase.h" +#include "AliHLTLogging.h" #include "TMath.h" #include "AliHLTPHOSRecPointContainerStruct.h" #include "AliHLTPHOSRecPointDataStruct.h" @@ -36,7 +37,14 @@ #include "TClonesArray.h" #include "AliPHOSGeometry.h" #include "AliPHOSDigit.h" +#ifndef HAVE_NOT_PHOSRECOPARAMEMC // set from configure if EMC functionality not available in AliPHOSRecoParam +#include "AliPHOSRecoParam.h" +#else #include "AliPHOSRecoParamEmc.h" +#endif +#include + +using namespace std; ClassImp(AliHLTPHOSClusterizer); @@ -54,16 +62,15 @@ AliHLTPHOSClusterizer::AliHLTPHOSClusterizer(): fDigitContainerPtr(0), fRecPointContainerPtr(0), fPHOSGeometry(0), - fGetterPtr(0) -{ + fGetterPtr(0), + fMaxDigitIndexDiff(2*N_ZROWS_MOD) + { //See header file for documentation fPHOSGeometry = AliPHOSGeometry::GetInstance("noCPV"); fEmcClusteringThreshold = 0.2; fEmcMinEnergyThreshold = 0.03; fEmcTimeGate = 1.e-6 ; fLogWeight = 4.5; - - }//end @@ -72,61 +79,28 @@ AliHLTPHOSClusterizer::~AliHLTPHOSClusterizer() //See header file for documentation } +void +AliHLTPHOSClusterizer::SetRecPointContainer(AliHLTPHOSRecPointContainerStruct* recPointContainerPtr) + { + fRecPointContainerPtr = recPointContainerPtr; + fRecPointContainerPtr->fNRecPoints = 0; + } void -AliHLTPHOSClusterizer::SetRecoParameters(AliPHOSRecoParamEmc* params) +AliHLTPHOSClusterizer::SetRecoParameters(AliPHOSRecoParam* params) { //see header file for documentation +#ifndef HAVE_NOT_PHOSRECOPARAMEMC // set from configure if EMC functionality not available in AliPHOSRecoParam + // the new AliPHOSRecoParam functions, available from revision + // fEmcClusteringThreshold = params->GetEMCClusteringThreshold(); + // fEmcMinEnergyThreshold = params->GetEMCMinE(); + // fLogWeight = params->GetEMCLogWeight(); +#else fEmcClusteringThreshold = params->GetClusteringThreshold(); fEmcMinEnergyThreshold = params->GetMinE(); fLogWeight = params->GetLogWeight(); -} - -void -AliHLTPHOSClusterizer::SetOfflineMode(AliPHOSGetter* getter) -{ - //see header file for documentation - fRecPointContainerPtr = new AliHLTPHOSRecPointContainerStruct(); - fDigitContainerPtr = new AliHLTPHOSDigitContainerDataStruct(); - fGetterPtr = getter; - fDigitArrayPtr = fGetterPtr->Digits(); - fEmcRecPointsPtr = fGetterPtr->EmcRecPoints(); - fOnlineMode = false; -} - -Int_t -AliHLTPHOSClusterizer::GetEvent(Int_t i) -{ - //see header file for documentation - Int_t coord[4]; - - fGetterPtr->Event(i, "D"); - for(Int_t j = 0; j < fDigitArrayPtr->GetEntries(); j++) - { - fDigitPtr = (AliPHOSDigit*)fDigitArrayPtr->At(j); - fPHOSGeometry->AbsToRelNumbering(fDigitPtr->GetId(), coord); - fDigitContainerPtr->fDigitDataStruct[j].fX = coord[3]; - fDigitContainerPtr->fDigitDataStruct[j].fZ = coord[2]; - fDigitContainerPtr->fDigitDataStruct[j].fModule = coord[0]; - fDigitContainerPtr->fDigitDataStruct[j].fEnergy = fDigitPtr->GetEnergy(); - fDigitContainerPtr->fDigitDataStruct[j].fTime = fDigitPtr->GetTime(); - } - fDigitContainerPtr->fNDigits = fDigitArrayPtr->GetEntriesFast(); - return 0; -} - -Int_t -AliHLTPHOSClusterizer::GetNEvents() -{ - //see header file for documentation - if(fOnlineMode) - { - printf("Number of events not available in online mode!\n"); - return -1; - } - return fGetterPtr->MaxEvent(); -} - +#endif +} Int_t AliHLTPHOSClusterizer::ClusterizeEvent() @@ -134,39 +108,34 @@ AliHLTPHOSClusterizer::ClusterizeEvent() //see header file for documentation Int_t nRecPoints = 0; UInt_t i = 0; - - //printf("Starting clusterisation of event.\n"); - AliHLTPHOSRecPointDataStruct *recPoint = 0; - - //printf("Number of digits in event: %d\n", fDigitContainerPtr->fNDigits); - //Clusterization starts for(i = 0; i < fDigitContainerPtr->fNDigits; i++) { - fDigitsInCluster = 0; - //printf("Digit energy: %f\n", fDigitContainerPtr->fDigitDataStruct[i].fEnergy); + if(fDigitContainerPtr->fDigitDataStruct[i].fEnergy < fEmcClusteringThreshold) { continue; } - //printf("Got rec point above clustering threshold!\n"); recPoint = &(fRecPointContainerPtr->fRecPointArray[nRecPoints]); recPoint->fAmp = 0; - //recPoint-> + recPoint->fModule = fDigitContainerPtr->fDigitDataStruct[i].fModule; recPoint->fDigitsList[fDigitsInCluster] = fDigitContainerPtr->fDigitDataStruct[i]; recPoint->fAmp += fDigitContainerPtr->fDigitDataStruct[i].fEnergy; fDigitContainerPtr->fDigitDataStruct[i].fEnergy = 0; fDigitsInCluster++; nRecPoints++; + if(nRecPoints == 100) + { + // HLTWarning("Too many rec points in event. Aborting clusterisation"); + break; + } ScanForNeighbourDigits(i, recPoint); - recPoint->fMultiplicity = fDigitsInCluster; - + }//end of clusterization fRecPointContainerPtr->fNRecPoints = nRecPoints; - return nRecPoints; } @@ -175,118 +144,42 @@ AliHLTPHOSClusterizer::ScanForNeighbourDigits(Int_t index, AliHLTPHOSRecPointDat { //see header file for documentation - - for(UInt_t j = 0; j < fDigitContainerPtr->fNDigits; j++) + UInt_t max = TMath::Min((Int_t)fDigitContainerPtr->fNDigits, (Int_t)fMaxDigitIndexDiff+index); + UInt_t min = TMath::Max(0, (Int_t)(index - (Int_t)fMaxDigitIndexDiff)); + for(UInt_t j = min; j < max; j++) { if(fDigitContainerPtr->fDigitDataStruct[j].fEnergy > fEmcMinEnergyThreshold) { - switch(AreNeighbours(&(fDigitContainerPtr->fDigitDataStruct[index]), + if(AreNeighbours(&(fDigitContainerPtr->fDigitDataStruct[index]), &(fDigitContainerPtr->fDigitDataStruct[j]))) { - case 0: - break; - case 1: recPoint->fDigitsList[fDigitsInCluster] = fDigitContainerPtr->fDigitDataStruct[j]; recPoint->fAmp += fDigitContainerPtr->fDigitDataStruct[j].fEnergy; - fDigitContainerPtr->fDigitDataStruct[j].fEnergy = 0; + fDigitContainerPtr->fDigitDataStruct[j].fEnergy = 0; fDigitsInCluster++; ScanForNeighbourDigits(j, recPoint); - break; - case 2: - break; } } } return; } - Int_t AliHLTPHOSClusterizer::AreNeighbours(AliHLTPHOSDigitDataStruct* digit1, AliHLTPHOSDigitDataStruct* digit2) { //see header file for documentation - if ( (digit1->fModule == digit2->fModule) /*&& (coord1[1]==coord2[1])*/ ) // inside the same PHOS module { - Int_t rowdiff = TMath::Abs( digit1->fZ - digit2->fZ ); Int_t coldiff = TMath::Abs( digit1->fX - digit2->fX ); - - //cout << "x1: " << digit1->fX << " x2: " << digit2->fX << " z1: " << digit1->fZ << " z2: " << digit2->fZ << - //" t1: " << digit1->fTime << " t2: " << digit1->fTime << " --> "; - - if (( coldiff <= 1 ) && ( rowdiff <= 1 )) + if (( coldiff <= 1 && rowdiff < 1 ) || ( coldiff < 1 && rowdiff <= 1 )) { if(TMath::Abs(digit1->fTime - digit2->fTime ) < fEmcTimeGate) { - //cout << "OK\n"; return 1; } - // cout << "Time difference\n"; } - //else - //{ - // cout << "Space difference\n"; - //} } return 0; } - -void -AliHLTPHOSClusterizer::CalculateCenterOfGravity() -{ - //see header file for documentation - - Float_t wtot = 0.; - - //Int_t relid[4]; - - Float_t x = 0.; - Float_t z = 0.; - Float_t xi = 0.; - Float_t zi = 0.; - - AliHLTPHOSRecPointDataStruct *recPoint = 0; - AliHLTPHOSDigitDataStruct *digit = 0; - - //AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ; - - UInt_t iDigit = 0; - UInt_t iRecPoint = 0; - - for(iRecPoint=0; iRecPointfNRecPoints; iRecPoint++) - { - recPoint = &(fRecPointContainerPtr->fRecPointArray[iRecPoint]); - for(iDigit = 0; iDigit < recPoint->fMultiplicity; iDigit++) - { - digit = &(recPoint->fDigitsList[iDigit]); - - //fPHOSGeometry->AbsToRelNumbering(digit->fID, relid) ; - // fPHOSGeometry->RelPosInModule(relid, xi, zi); - xi = digit->fX; - zi = digit->fZ; - - if (recPoint->fAmp > 0 && digit->fEnergy > 0) - { - Float_t w = TMath::Max( 0., fLogWeight + TMath::Log( digit->fEnergy / recPoint->fAmp ) ) ; - x += xi * w ; - z += zi * w ; - wtot += w ; - } - } - - if (wtot>0) - { - recPoint->fX = x/wtot ; - recPoint->fZ = z/wtot ; - } - else - { - recPoint->fAmp = 0; - } - } - -} - -