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 ;
+ }
}
//____________________________________________________________________________
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 ;
}
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() ;
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 {
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<fTimeGateLowAmp || amp2<fTimeGateLowAmp){
+ return (TMath::Abs(t1 - t2 ) < fTimeGateLow) ;
+ }
+ else{ //Time should be measured with good accuracy
+ return (TMath::Abs(t1 - t2 ) < fTimeGateHigh) ;
+ }
+
+}
+//____________________________________________________________________________
Bool_t AliPHOSClusterizerv1::IsInEmc(AliPHOSDigit * digit) const
{
// Tells if (true) or not (false) the digit is in a PHOS-EMC module
TVector3 fakeVtx(0.,0.,0.) ;
for(index = 0; index < nEmc; index++){
AliPHOSEmcRecPoint * rp =
- dynamic_cast<AliPHOSEmcRecPoint *>( fEMCRecPoints->At(index) );
+ static_cast<AliPHOSEmcRecPoint *>( fEMCRecPoints->At(index) );
rp->Purify(emcMinE) ;
if(rp->GetMultiplicity()==0){
fEMCRecPoints->RemoveAt(index) ;
fEMCRecPoints->Sort() ;
// fEMCRecPoints->Expand(fEMCRecPoints->GetEntriesFast()) ;
for(index = 0; index < fEMCRecPoints->GetEntries(); index++){
- dynamic_cast<AliPHOSEmcRecPoint *>( fEMCRecPoints->At(index) )->SetIndexInList(index) ;
+ static_cast<AliPHOSEmcRecPoint *>( fEMCRecPoints->At(index) )->SetIndexInList(index) ;
}
//For each rec.point set the distance to the nearest bad crystal (BVP)
//Now the same for CPV
for(index = 0; index < fCPVRecPoints->GetEntries(); index++){
- AliPHOSCpvRecPoint * rp = dynamic_cast<AliPHOSCpvRecPoint *>( fCPVRecPoints->At(index) );
+ AliPHOSCpvRecPoint * rp = static_cast<AliPHOSCpvRecPoint *>( fCPVRecPoints->At(index) );
rp->EvalAll(fDigitsArr) ;
rp->EvalAll(fW0CPV,fakeVtx,fDigitsArr) ;
rp->EvalLocal2TrackingCSTransform();
fCPVRecPoints->Sort() ;
for(index = 0; index < fCPVRecPoints->GetEntries(); index++)
- dynamic_cast<AliPHOSCpvRecPoint *>( fCPVRecPoints->At(index) )->SetIndexInList(index) ;
+ static_cast<AliPHOSCpvRecPoint *>( fCPVRecPoints->At(index) )->SetIndexInList(index) ;
fCPVRecPoints->Expand(fCPVRecPoints->GetEntriesFast()) ;
case 0 : // not a neighbour
break ;
case 1 : // are neighbours
- clu->AddDigit(*digitN, Calibrate(digitN->GetEnergy(),digit->GetId()),CalibrateT(digitN->GetTime(),digit->GetId())) ;
+ clu->AddDigit(*digitN, Calibrate(digitN->GetEnergy(),digitN->GetId()),CalibrateT(digitN->GetTime(),digitN->GetId())) ;
clusterdigitslist[iDigitInCluster] = j ;
iDigitInCluster++ ;
fDigitsUsed[j]=kTRUE ;
Int_t index ;
for(index = 0 ; index < numberofNotUnfolded ; index++){
- AliPHOSEmcRecPoint * emcRecPoint = dynamic_cast<AliPHOSEmcRecPoint *>( fEMCRecPoints->At(index) ) ;
+ AliPHOSEmcRecPoint * emcRecPoint = static_cast<AliPHOSEmcRecPoint *>( fEMCRecPoints->At(index) ) ;
if(emcRecPoint->GetPHOSMod()> nModulesToUnfold)
break ;
Int_t index ;
for(index = 0 ; index < numberofCpvNotUnfolded ; index++){
- AliPHOSRecPoint * recPoint = dynamic_cast<AliPHOSRecPoint *>( fCPVRecPoints->At(index) ) ;
+ AliPHOSRecPoint * recPoint = static_cast<AliPHOSRecPoint *>( fCPVRecPoints->At(index) ) ;
if(recPoint->GetPHOSMod()> nModulesToUnfold)
break ;
- AliPHOSEmcRecPoint * emcRecPoint = dynamic_cast<AliPHOSEmcRecPoint*>(recPoint) ;
+ AliPHOSEmcRecPoint * emcRecPoint = static_cast<AliPHOSEmcRecPoint*>(recPoint) ;
Int_t nMultipl = emcRecPoint->GetMultiplicity() ;
AliPHOSDigit ** maxAt = new AliPHOSDigit*[nMultipl] ;
Int_t iparam ;
Int_t iDigit ;
for(iDigit = 0 ; iDigit < nDigits ; iDigit ++){
- digit = dynamic_cast<AliPHOSDigit*>( fDigitsArr->At(emcDigits[iDigit] ) ) ;
+ digit = static_cast<AliPHOSDigit*>( fDigitsArr->At(emcDigits[iDigit] ) ) ;
fGeom->AbsToRelNumbering(digit->GetId(), relid) ;
fGeom->RelPosInModule(relid, xDigit, zDigit) ;
efit[iDigit] = 0;
fEMCRecPoints->Expand(2*fNumberOfEmcClusters) ;
(*fEMCRecPoints)[fNumberOfEmcClusters] = new AliPHOSEmcRecPoint("") ;
- emcRP = dynamic_cast<AliPHOSEmcRecPoint *>( fEMCRecPoints->At(fNumberOfEmcClusters) ) ;
+ emcRP = static_cast<AliPHOSEmcRecPoint *>( fEMCRecPoints->At(fNumberOfEmcClusters) ) ;
fNumberOfEmcClusters++ ;
emcRP->SetNExMax((Int_t)nPar/3) ;
}
fCPVRecPoints->Expand(2*fNumberOfCpvClusters) ;
(*fCPVRecPoints)[fNumberOfCpvClusters] = new AliPHOSCpvRecPoint("") ;
- emcRP = dynamic_cast<AliPHOSEmcRecPoint *>( fCPVRecPoints->At(fNumberOfCpvClusters) ) ;
+ emcRP = static_cast<AliPHOSEmcRecPoint *>( fCPVRecPoints->At(fNumberOfCpvClusters) ) ;
fNumberOfCpvClusters++ ;
}
Float_t eDigit ;
for(iDigit = 0 ; iDigit < nDigits ; iDigit ++){
- digit = dynamic_cast<AliPHOSDigit*>( fDigitsArr->At( emcDigits[iDigit] ) ) ;
+ digit = static_cast<AliPHOSDigit*>( fDigitsArr->At( emcDigits[iDigit] ) ) ;
fGeom->AbsToRelNumbering(digit->GetId(), relid) ;
fGeom->RelPosInModule(relid, xDigit, zDigit) ;
// ratio = epar * ShowerShape(xDigit - xpar,zDigit - zpar,vIncid) / efit[iDigit] ;
// Calculates the Chi square for the cluster unfolding minimization
// Number of parameters, Gradient, Chi squared, parameters, what to do
- TList * toMinuit = dynamic_cast<TList*>( gMinuit->GetObjectFit() ) ;
+ TList * toMinuit = static_cast<TList*>( gMinuit->GetObjectFit() ) ;
- AliPHOSEmcRecPoint * emcRP = dynamic_cast<AliPHOSEmcRecPoint*>( toMinuit->At(0) ) ;
- TClonesArray * digits = dynamic_cast<TClonesArray*>( toMinuit->At(1) ) ;
+ AliPHOSEmcRecPoint * emcRP = static_cast<AliPHOSEmcRecPoint*>( toMinuit->At(0) ) ;
+ TClonesArray * digits = static_cast<TClonesArray*>( toMinuit->At(1) ) ;
// A bit buggy way to get an access to the geometry
// To be revised!
- AliPHOSGeometry *geom = dynamic_cast<AliPHOSGeometry *>(toMinuit->At(2));
+ AliPHOSGeometry *geom = static_cast<AliPHOSGeometry *>(toMinuit->At(2));
-// TVector3 * vtx = dynamic_cast<TVector3*>(toMinuit->At(3)) ; //Vertex position
+// TVector3 * vtx = static_cast<TVector3*>(toMinuit->At(3)) ; //Vertex position
- // AliPHOSEmcRecPoint * emcRP = dynamic_cast<AliPHOSEmcRecPoint *>( gMinuit->GetObjectFit() ) ; // EmcRecPoint to fit
+ // AliPHOSEmcRecPoint * emcRP = static_cast<AliPHOSEmcRecPoint *>( gMinuit->GetObjectFit() ) ; // EmcRecPoint to fit
Int_t * emcDigits = emcRP->GetDigitsList() ;
for( iDigit = 0 ; iDigit < nOdigits ; iDigit++) {
- digit = dynamic_cast<AliPHOSDigit*>( digits->At( emcDigits[iDigit] ) );
+ digit = static_cast<AliPHOSDigit*>( digits->At( emcDigits[iDigit] ) );
Int_t relid[4] ;
Float_t xDigit ;
else
message = " AliPHOSClusterizerv1 not initialized " ;
- AliInfo(Form("%s, %s %s %s %s %s %s %s %s %s %s", message.Data(),
+ AliInfo(Form("%s, %s %s %s %s %f %f %f %f %f %f", message.Data(),
taskName.Data(),
GetTitle(),
taskName.Data(),
if(!fgCalibData->GetNumOfEmcBadChannels()) return;
Int_t badIds[8000];
+ memset(badIds,0,8000*sizeof(Int_t));
fgCalibData->EmcBadChannelIds(badIds);
AliPHOSEmcRecPoint* rp;