//Set the cluster properties for the AliCluster3D part
//------------------------------------------------------------------------
+ fParam = AliHMPIDParam::Instance();
+
+ if(!fParam->GetInstType()) //if there is no geometry we cannot retrieve the volId (only for monitoring)
+ {
+ new(this) AliCluster3D(); return;
+ }
+
//Get the volume ID from the previously set PNEntry
UShort_t volId=AliGeomManager::LayerToVolUID(AliGeomManager::kHMPID,iCh);
//get L->T cs matrix for a given chamber
const TGeoHMatrix *t2l= AliGeomManager::GetTracking2LocalMatrix(volId);
- if(!fParam->GetInstType()) //if there is no geometry we cannot retrieve the volId (only for monitoring)
- {
- new(this) AliCluster3D(); return;
- }
-
+ fParam = AliHMPIDParam::Instance();
//transformation from the pad cs to local
xL -= 0.5*fParam->SizeAllX(); //size of all pads with dead zones included
covT[8],
0x0); // No MC labels ?
}
-
-
-AliHMPIDCluster::~AliHMPIDCluster(){
- if(fDigs) delete fDigs; fDigs=0;
- }
-
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+AliHMPIDCluster::~AliHMPIDCluster()
+{
+ if(fDigs) delete fDigs; fDigs=0;
+ //PH if(fParam) delete fParam; fParam=0;
+}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void AliHMPIDCluster::CoG()
{
// Returns: none
Int_t minPadX=999,minPadY=999,maxPadX=-1,maxPadY=-1; //for box finding
if(fDigs==0) return; //no digits in this cluster
- fXX=fYY=fQRaw=0; //init summable parameters
+ fXX=fYY=fQRaw=0; //init summable parameters
+ fCh = -1; //init chamber
Int_t maxQpad=-1,maxQ=-1; //to calculate the pad with the highest charge
AliHMPIDDigit *pDig=0x0;
for(Int_t iDig=0;iDig<fDigs->GetEntriesFast();iDig++){ //digits loop
pDig=(AliHMPIDDigit*)fDigs->At(iDig); //get pointer to next digit
-
+ if(!pDig) continue; //protection
if(pDig->PadPcX() > maxPadX) maxPadX = pDig->PadPcX(); // find the minimum box that contain the cluster MaxX
if(pDig->PadPcY() > maxPadY) maxPadY = pDig->PadPcY(); // MaxY
if(pDig->PadPcX() < minPadX) minPadX = pDig->PadPcX(); // MinX
fXX += pDig->LorsX()*q;fYY +=pDig->LorsY()*q; //add digit center weighted by QDC
fQRaw+=q; //increment total charge
if(q>maxQ) {maxQpad = pDig->Pad();maxQ=(Int_t)q;} // to find pad with highest charge
+ fCh=pDig->Ch(); //initialize chamber number
}//digits loop
fBox=(maxPadX-minPadX+1)*100+maxPadY-minPadY+1; // dimension of the box: format Xdim*100+Ydim
if(fDigs->GetEntriesFast()>1&&fgDoCorrSin)CorrSin(); //correct it by sinoid
fQ = fQRaw; // Before starting fit procedure, Q and QRaw must be equal
- fCh=pDig->Ch(); //initialize chamber number
fMaxQpad = maxQpad; fMaxQ=maxQ; //store max charge pad to the field
fChi2=0; // no Chi2 to find
fNlocMax=0; // proper status from this method
fSt=kCoG;
- if(fParam->GetInstType()) SetClusterParams(fXX,fYY,fCh); //need to fill the AliCluster3D part
+ SetClusterParams(fXX,fYY,fCh); //need to fill the AliCluster3D part
}//CoG()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
Double_t ratio=0;
if(Q()>0&&QRaw()>0) ratio = Q()/QRaw()*100;
- Printf("%sCLU: ch=%i (%7.3f,%7.3f) Q=%8.3f Qraw=%8.3f(%3.0f%%) Size=%2i DimBox=%i LocMax=%i Chi2=%7.3f %s",
+ Printf("%sCLU: ch=%i (%7.3f,%7.3f) Q=%8.3f Qraw=%8.3f(%3.0f%%) Size=%2i DimBox=%i LocMax=%i Chi2=%7.3f %s",
opt,Ch(),X(),Y(),Q(),QRaw(),ratio,Size(),fBox,fNlocMax,fChi2,status);
if(fDigs) fDigs->Print();
}//Print()
if(rawSize>100 || isTryUnfold==kFALSE || rawSize==1) { //No deconv if: 1 - big cluster (also avoid no zero suppression!)
// 2 - flag is set to FALSE
- if(fParam->GetInstType()) SetClusterParams(fXX,fYY,fCh); // 3 - size = 1
+ SetClusterParams(fXX,fYY,fCh); // 3 - size = 1
new ((*pCluLst)[iCluCnt++]) AliHMPIDCluster(*this); //add this raw cluster
return 1;
//Phase 0. Initialise Fitter
Double_t arglist[10];
Int_t ierflg = 0;
- TVirtualFitter *fitter = TVirtualFitter::Fitter(this,3*6); //initialize Fitter
-
- delete fitter; //temporary solution to avoid the inteference with previous instances
- fitter = TVirtualFitter::Fitter(this,3*6); //initialize Fitter
-
+ TVirtualFitter* fitter = TVirtualFitter::Fitter(this,3*6); //initialize Fitter
+ //
arglist[0] = -1;
ierflg = fitter->ExecuteCommand("SET PRI", arglist, 1); // no printout
ierflg = fitter->ExecuteCommand("SET NOW", arglist, 0); //no warning messages
if ( fNlocMax == 0) { // case of no local maxima found: pads with same charge...
fNlocMax = 1;
fSt=kNoLoc;
- if(fParam->GetInstType()) SetClusterParams(fXX,fYY,fCh); //need to fill the AliCluster3D part
+ SetClusterParams(fXX,fYY,fCh); //need to fill the AliCluster3D part
new ((*pCluLst)[iCluCnt++]) AliHMPIDCluster(*this); //add new unfolded cluster
-
return fNlocMax;
}
// case 2 -> loc max found. Check # of loc maxima
if ( fNlocMax >= kMaxLocMax) {
- if(fParam->GetInstType()) SetClusterParams(fXX,fYY,fCh); // if # of local maxima exceeds kMaxLocMax...
+ SetClusterParams(fXX,fYY,fCh); // if # of local maxima exceeds kMaxLocMax...
fSt = kMax; new ((*pCluLst)[iCluCnt++]) AliHMPIDCluster(*this); //...add this raw cluster
- } else { //or resonable number of local maxima to fit and user requested it
+ } else { //or resonable number of local maxima to fit and user requested it
// Now ready for minimization step
arglist[0] = 500; //number of steps and sigma on pads charges
arglist[1] = 1.; //
if ( !IsInPc()) fSt = kEdg; // if Out of Pc
if(fSt==kNoLoc) fNlocMax=0; // if with no loc max (pads with same charge..)
}
- if(fParam->GetInstType()) SetClusterParams(fXX,fYY,fCh); //need to fill the AliCluster3D part
+ SetClusterParams(fXX,fYY,fCh); //need to fill the AliCluster3D part
new ((*pCluLst)[iCluCnt++]) AliHMPIDCluster(*this); //add new unfolded cluster
if(fNlocMax>1)SetSize(rawSize); //Original raw size is set again to its proper value
}