X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSClusterizerv1.cxx;h=840ffd05454774e42831d4c4172e7c48c6b2a4ed;hb=7b2fb4679499eb457f89456afdcdc470ac99cb2d;hp=301f03900a14554dc152c9541b697480da6cefeb;hpb=a675b8d6e4d875046946750ab129103310114951;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSClusterizerv1.cxx b/PHOS/AliPHOSClusterizerv1.cxx index 301f03900a1..840ffd05454 100644 --- a/PHOS/AliPHOSClusterizerv1.cxx +++ b/PHOS/AliPHOSClusterizerv1.cxx @@ -197,11 +197,17 @@ AliPHOSClusterizerv1::AliPHOSClusterizerv1() : fNumberOfEmcClusters(0), fNumberOfCpvClusters(0), fEmcClusteringThreshold(0), fCpvClusteringThreshold(0), fEmcLocMaxCut(0), fW0(0), fCpvLocMaxCut(0), - fW0CPV(0), fEmcTimeGate(0), fEcoreRadius(0) + fW0CPV(0), + fTimeGateLowAmp(0.), fTimeGateLow(0.), fTimeGateHigh(0.), + fEcoreRadius(0) { // default ctor (to be used mainly by Streamer) - fDefaultInit = kTRUE ; + fDefaultInit = kTRUE ; + + for(Int_t i=0; i<53760; i++){ + fDigitsUsed[i]=0 ; + } } //____________________________________________________________________________ @@ -212,10 +218,16 @@ AliPHOSClusterizerv1::AliPHOSClusterizerv1(AliPHOSGeometry *geom) : fNumberOfEmcClusters(0), fNumberOfCpvClusters(0), fEmcClusteringThreshold(0), fCpvClusteringThreshold(0), fEmcLocMaxCut(0), fW0(0), fCpvLocMaxCut(0), - fW0CPV(0), fEmcTimeGate(0), fEcoreRadius(0) + fW0CPV(0), + fTimeGateLowAmp(0.), fTimeGateLow(0.), fTimeGateHigh(0.), + fEcoreRadius(0) { // ctor with the indication of the file where header Tree and digits Tree are stored + for(Int_t i=0; i<53760; i++){ + fDigitsUsed[i]=0 ; + } + Init() ; fDefaultInit = kFALSE ; } @@ -398,7 +410,10 @@ void AliPHOSClusterizerv1::InitParameters() fW0 = recoParam->GetEMCLogWeight(); fW0CPV = recoParam->GetCPVLogWeight(); - fEmcTimeGate = 1.e-6 ; //10 sample steps + fTimeGateLowAmp = recoParam->GetTimeGateAmpThresh() ; + fTimeGateLow = recoParam->GetTimeGateLow() ; + fTimeGateHigh = recoParam->GetTimeGateHigh() ; + fEcoreRadius = recoParam->GetEMCEcoreRadius(); fToUnfold = recoParam->EMCToUnfold() ; @@ -429,7 +444,7 @@ Int_t AliPHOSClusterizerv1::AreNeighbours(AliPHOSDigit * d1, AliPHOSDigit * d2)c if (( coldiff <= 1 ) && ( rowdiff <= 1 )){ //At least common vertex // if (( relid1[2]==relid2[2] && coldiff <= 1 ) || ( relid1[3]==relid2[3] && rowdiff <= 1 )){ //common side - if((relid1[1] != 0) || (TMath::Abs(d1->GetTime() - d2->GetTime() ) < fEmcTimeGate)) + if((relid1[1] != 0) || CheckTimeGate(d1->GetTime(),d1->GetEnergy(),d2->GetTime(),d2->GetEnergy())) return 1 ; } else { @@ -452,6 +467,18 @@ Int_t AliPHOSClusterizerv1::AreNeighbours(AliPHOSDigit * d1, AliPHOSDigit * d2)c return 0 ; } //____________________________________________________________________________ +Bool_t AliPHOSClusterizerv1::CheckTimeGate(Float_t t1, Float_t amp1, Float_t t2, Float_t amp2)const{ + //Check if two cells have reasonable time difference + //Note that at low amplitude time is defined up to 1 tick == 100 ns. + if(amp1( fEMCRecPoints->At(index) ); - rp->Purify(emcMinE) ; + static_cast( fEMCRecPoints->At(index) ); + rp->Purify(emcMinE,fDigitsArr) ; if(rp->GetMultiplicity()==0){ fEMCRecPoints->RemoveAt(index) ; delete rp ; @@ -511,7 +538,7 @@ void AliPHOSClusterizerv1::WriteRecPoints() fEMCRecPoints->Sort() ; // fEMCRecPoints->Expand(fEMCRecPoints->GetEntriesFast()) ; for(index = 0; index < fEMCRecPoints->GetEntries(); index++){ - dynamic_cast( fEMCRecPoints->At(index) )->SetIndexInList(index) ; + static_cast( fEMCRecPoints->At(index) )->SetIndexInList(index) ; } //For each rec.point set the distance to the nearest bad crystal (BVP) @@ -519,7 +546,7 @@ void AliPHOSClusterizerv1::WriteRecPoints() //Now the same for CPV for(index = 0; index < fCPVRecPoints->GetEntries(); index++){ - AliPHOSCpvRecPoint * rp = dynamic_cast( fCPVRecPoints->At(index) ); + AliPHOSCpvRecPoint * rp = static_cast( fCPVRecPoints->At(index) ); rp->EvalAll(fDigitsArr) ; rp->EvalAll(fW0CPV,fakeVtx,fDigitsArr) ; rp->EvalLocal2TrackingCSTransform(); @@ -527,7 +554,7 @@ void AliPHOSClusterizerv1::WriteRecPoints() fCPVRecPoints->Sort() ; for(index = 0; index < fCPVRecPoints->GetEntries(); index++) - dynamic_cast( fCPVRecPoints->At(index) )->SetIndexInList(index) ; + static_cast( fCPVRecPoints->At(index) )->SetIndexInList(index) ; fCPVRecPoints->Expand(fCPVRecPoints->GetEntriesFast()) ; @@ -579,7 +606,7 @@ void AliPHOSClusterizerv1::MakeClusters() fEMCRecPoints->AddAt(new AliPHOSEmcRecPoint(""), fNumberOfEmcClusters) ; clu = static_cast( fEMCRecPoints->At(fNumberOfEmcClusters) ) ; fNumberOfEmcClusters++ ; - clu->AddDigit(*digit, Calibrate(digit->GetEnergy(),digit->GetId()),CalibrateT(digit->GetTime(),digit->GetId())) ; + clu->AddDigit(*digit, Calibrate(digit->GetEnergy(),digit->GetId()),CalibrateT(digit->GetTime(),digit->GetId(),digit->IsLG())) ; clusterdigitslist[iDigitInCluster] = digit->GetIndexInList() ; iDigitInCluster++ ; fDigitsUsed[i]=kTRUE ; @@ -621,7 +648,7 @@ void AliPHOSClusterizerv1::MakeClusters() case 0 : // not a neighbour break ; case 1 : // are neighbours - clu->AddDigit(*digitN, Calibrate(digitN->GetEnergy(),digitN->GetId()),CalibrateT(digitN->GetTime(),digitN->GetId())) ; + clu->AddDigit(*digitN, Calibrate(digitN->GetEnergy(),digitN->GetId()),CalibrateT(digitN->GetTime(),digitN->GetId(),digit->IsLG())) ; clusterdigitslist[iDigitInCluster] = j ; iDigitInCluster++ ; fDigitsUsed[j]=kTRUE ; @@ -655,7 +682,7 @@ void AliPHOSClusterizerv1::MakeUnfolding() Int_t index ; for(index = 0 ; index < numberofNotUnfolded ; index++){ - AliPHOSEmcRecPoint * emcRecPoint = dynamic_cast( fEMCRecPoints->At(index) ) ; + AliPHOSEmcRecPoint * emcRecPoint = static_cast( fEMCRecPoints->At(index) ) ; if(emcRecPoint->GetPHOSMod()> nModulesToUnfold) break ; @@ -693,12 +720,12 @@ void AliPHOSClusterizerv1::MakeUnfolding() Int_t index ; for(index = 0 ; index < numberofCpvNotUnfolded ; index++){ - AliPHOSRecPoint * recPoint = dynamic_cast( fCPVRecPoints->At(index) ) ; + AliPHOSRecPoint * recPoint = static_cast( fCPVRecPoints->At(index) ) ; if(recPoint->GetPHOSMod()> nModulesToUnfold) break ; - AliPHOSEmcRecPoint * emcRecPoint = dynamic_cast(recPoint) ; + AliPHOSEmcRecPoint * emcRecPoint = static_cast(recPoint) ; Int_t nMultipl = emcRecPoint->GetMultiplicity() ; AliPHOSDigit ** maxAt = new AliPHOSDigit*[nMultipl] ; @@ -774,7 +801,7 @@ void AliPHOSClusterizerv1::UnfoldCluster(AliPHOSEmcRecPoint * iniEmc, Int_t iparam ; Int_t iDigit ; for(iDigit = 0 ; iDigit < nDigits ; iDigit ++){ - digit = dynamic_cast( fDigitsArr->At(emcDigits[iDigit] ) ) ; + digit = static_cast( fDigitsArr->At(emcDigits[iDigit] ) ) ; fGeom->AbsToRelNumbering(digit->GetId(), relid) ; fGeom->RelPosInModule(relid, xDigit, zDigit) ; efit[iDigit] = 0; @@ -814,7 +841,7 @@ void AliPHOSClusterizerv1::UnfoldCluster(AliPHOSEmcRecPoint * iniEmc, fEMCRecPoints->Expand(2*fNumberOfEmcClusters) ; (*fEMCRecPoints)[fNumberOfEmcClusters] = new AliPHOSEmcRecPoint("") ; - emcRP = dynamic_cast( fEMCRecPoints->At(fNumberOfEmcClusters) ) ; + emcRP = static_cast( fEMCRecPoints->At(fNumberOfEmcClusters) ) ; fNumberOfEmcClusters++ ; emcRP->SetNExMax((Int_t)nPar/3) ; } @@ -823,19 +850,19 @@ void AliPHOSClusterizerv1::UnfoldCluster(AliPHOSEmcRecPoint * iniEmc, fCPVRecPoints->Expand(2*fNumberOfCpvClusters) ; (*fCPVRecPoints)[fNumberOfCpvClusters] = new AliPHOSCpvRecPoint("") ; - emcRP = dynamic_cast( fCPVRecPoints->At(fNumberOfCpvClusters) ) ; + emcRP = static_cast( fCPVRecPoints->At(fNumberOfCpvClusters) ) ; fNumberOfCpvClusters++ ; } Float_t eDigit ; for(iDigit = 0 ; iDigit < nDigits ; iDigit ++){ - digit = dynamic_cast( fDigitsArr->At( emcDigits[iDigit] ) ) ; + digit = static_cast( fDigitsArr->At( emcDigits[iDigit] ) ) ; fGeom->AbsToRelNumbering(digit->GetId(), relid) ; fGeom->RelPosInModule(relid, xDigit, zDigit) ; // ratio = epar * ShowerShape(xDigit - xpar,zDigit - zpar,vIncid) / efit[iDigit] ; ratio = epar * ShowerShape(xDigit - xpar,zDigit - zpar) / efit[iDigit] ; eDigit = emcEnergies[iDigit] * ratio ; - emcRP->AddDigit( *digit, eDigit,CalibrateT(digit->GetTime(),digit->GetId()) ) ; + emcRP->AddDigit( *digit, eDigit,CalibrateT(digit->GetTime(),digit->GetId(),digit->IsLG()) ) ; } } @@ -850,17 +877,17 @@ void AliPHOSClusterizerv1::UnfoldingChiSquare(Int_t & nPar, Double_t * Grad, Dou // Calculates the Chi square for the cluster unfolding minimization // Number of parameters, Gradient, Chi squared, parameters, what to do - TList * toMinuit = dynamic_cast( gMinuit->GetObjectFit() ) ; + TList * toMinuit = static_cast( gMinuit->GetObjectFit() ) ; - AliPHOSEmcRecPoint * emcRP = dynamic_cast( toMinuit->At(0) ) ; - TClonesArray * digits = dynamic_cast( toMinuit->At(1) ) ; + AliPHOSEmcRecPoint * emcRP = static_cast( toMinuit->At(0) ) ; + TClonesArray * digits = static_cast( toMinuit->At(1) ) ; // A bit buggy way to get an access to the geometry // To be revised! - AliPHOSGeometry *geom = dynamic_cast(toMinuit->At(2)); + AliPHOSGeometry *geom = static_cast(toMinuit->At(2)); -// TVector3 * vtx = dynamic_cast(toMinuit->At(3)) ; //Vertex position +// TVector3 * vtx = static_cast(toMinuit->At(3)) ; //Vertex position - // AliPHOSEmcRecPoint * emcRP = dynamic_cast( gMinuit->GetObjectFit() ) ; // EmcRecPoint to fit + // AliPHOSEmcRecPoint * emcRP = static_cast( gMinuit->GetObjectFit() ) ; // EmcRecPoint to fit Int_t * emcDigits = emcRP->GetDigitsList() ; @@ -883,7 +910,7 @@ void AliPHOSClusterizerv1::UnfoldingChiSquare(Int_t & nPar, Double_t * Grad, Dou for( iDigit = 0 ; iDigit < nOdigits ; iDigit++) { - digit = dynamic_cast( digits->At( emcDigits[iDigit] ) ); + digit = static_cast( digits->At( emcDigits[iDigit] ) ); Int_t relid[4] ; Float_t xDigit ; @@ -1112,7 +1139,7 @@ Float_t AliPHOSClusterizerv1::Calibrate(Float_t amp, Int_t absId) const{ } } //================================================================================== -Float_t AliPHOSClusterizerv1::CalibrateT(Float_t time, Int_t absId)const{ +Float_t AliPHOSClusterizerv1::CalibrateT(Float_t time, Int_t absId,Bool_t isLG)const{ // Calibrate time in EMC digit const AliPHOSGeometry *geom = AliPHOSGeometry::GetInstance() ; @@ -1127,7 +1154,10 @@ Float_t AliPHOSClusterizerv1::CalibrateT(Float_t time, Int_t absId)const{ return 0. ; } else{ //EMC - time += fgCalibData->GetTimeShiftEmc(module,column,row); + if(isLG) + time += fgCalibData->GetLGTimeShiftEmc(module,column,row); + else + time += fgCalibData->GetTimeShiftEmc(module,column,row); return time ; } }