X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONClusterFinderPeakCOG.cxx;h=83cbe8fc6146dadb550436a097c197351c574544;hb=f84b18dd58cb015f274c430232c864a221e59e1a;hp=ae50b97ac438b393a07e4475d1e6385e69e88fda;hpb=33c3c91a040995417ea28c5ae034899b77cca3a6;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONClusterFinderPeakCOG.cxx b/MUON/AliMUONClusterFinderPeakCOG.cxx index ae50b97ac43..83cbe8fc614 100644 --- a/MUON/AliMUONClusterFinderPeakCOG.cxx +++ b/MUON/AliMUONClusterFinderPeakCOG.cxx @@ -34,6 +34,7 @@ #include "AliMpPad.h" #include "AliMpVSegmentation.h" +#include "AliMpEncodePair.h" #include "AliLog.h" #include "AliRunLoader.h" @@ -44,6 +45,8 @@ //#include #include +using std::endl; +using std::cout; /// \cond CLASSIMP ClassImp(AliMUONClusterFinderPeakCOG) /// \endcond @@ -80,7 +83,7 @@ fNAddVirtualPads(0) { /// Constructor - fSegmentation[1] = fSegmentation[0] = 0x0; + fkSegmentation[1] = fkSegmentation[0] = 0x0; if (fPlot) fDebug = 1; } @@ -97,15 +100,16 @@ AliMUONClusterFinderPeakCOG::~AliMUONClusterFinderPeakCOG() //_____________________________________________________________________________ Bool_t -AliMUONClusterFinderPeakCOG::Prepare(Int_t detElemId, TClonesArray* pads[2], - const AliMpArea& area, const AliMpVSegmentation* seg[2]) +AliMUONClusterFinderPeakCOG::Prepare(Int_t detElemId, TObjArray* pads[2], + const AliMpArea& area, + const AliMpVSegmentation* seg[2]) { /// Prepare for clustering -// AliCodeTimerAuto("") +// AliCodeTimerAuto("",0) for ( Int_t i = 0; i < 2; ++i ) { - fSegmentation[i] = seg[i]; + fkSegmentation[i] = seg[i]; } // Find out the DetElemId @@ -134,7 +138,7 @@ AliMUONCluster* AliMUONClusterFinderPeakCOG::NextCluster() { /// Return next cluster -// AliCodeTimerAuto("") +// AliCodeTimerAuto("",0) // if the list of clusters is not void, pick one from there TObject* o = fClusterList.At(++fClusterNumber); @@ -147,6 +151,9 @@ AliMUONClusterFinderPeakCOG::NextCluster() // if the cluster list is exhausted, we need to go to the next // pre-cluster and treat it + fClusterList.Delete(); // reset the list of clusters for this pre-cluster + fClusterNumber = -1; + fPreCluster = fPreClusterFinder->NextCluster(); if (!fPreCluster) @@ -155,9 +162,6 @@ AliMUONClusterFinderPeakCOG::NextCluster() return 0x0; } - fClusterList.Delete(); // reset the list of clusters for this pre-cluster - fClusterNumber = -1; - WorkOnPreCluster(); // WorkOnPreCluster may have used only part of the pads, so we check that @@ -183,7 +187,7 @@ AliMUONClusterFinderPeakCOG::WorkOnPreCluster() /// Starting from a precluster, builds a pixel array, and then /// extract clusters from this array - // AliCodeTimerAuto("") + // AliCodeTimerAuto("",0) if (fDebug) { cout << " *** Event # " << fEventNumber @@ -249,11 +253,11 @@ AliMUONClusterFinderPeakCOG::CheckPrecluster(const AliMUONCluster& origCluster) /// Check precluster in order to attempt to simplify it (mostly for /// two-cathode preclusters) - // AliCodeTimerAuto("") + // AliCodeTimerAuto("",0) // Disregard small clusters (leftovers from splitting or noise) if ((origCluster.Multiplicity()==1 || origCluster.Multiplicity()==2) && - origCluster.Charge(0)+origCluster.Charge(1) < 10) + origCluster.Charge(0)+origCluster.Charge(1) < 1.525) // JC: adc -> fc { return 0x0; } @@ -319,10 +323,11 @@ AliMUONClusterFinderPeakCOG::CheckPreclusterTwoCathodes(AliMUONCluster* cluster) Int_t cath = pad->Cathode(); Int_t cath1 = TMath::Even(cath); // Check for edge effect (missing pads on the _other_ cathode) - AliMpPad mpPad = fSegmentation[cath1]->PadByPosition(pad->Position(),kFALSE); + AliMpPad mpPad + = fkSegmentation[cath1]->PadByPosition(pad->Position().X(),pad->Position().Y(),kFALSE); if (!mpPad.IsValid()) continue; //if (nFlags == 1 && pad->Charge() < fgkZeroSuppression * 3) continue; - if (nFlags == 1 && pad->Charge() < 20) continue; + if (nFlags == 1 && pad->Charge() < 3.05) continue; // JC: adc -> fc AliDebug(2,Form("Releasing the following pad : de,cath,ix,iy %d,%d,%d,%d charge %e", fDetElemId,pad->Cathode(),pad->Ix(),pad->Iy(),pad->Charge())); toBeRemoved.AddLast(pad); @@ -528,7 +533,7 @@ void AliMUONClusterFinderPeakCOG::BuildPixArrayOneCathode(AliMUONCluster& cluste // AliDebug(2,Form("cluster.Multiplicity=%d",cluster.Multiplicity())); TVector2 dim = cluster.MinPadDimensions (-1, kFALSE); - Double_t width[2] = {dim.X(), dim.Y()}, xy0[2]; + Double_t width[2] = {dim.X(), dim.Y()}, xy0[2] = { 0.0, 0.0 }; Int_t found[2] = {0}, mult = cluster.Multiplicity(); for ( Int_t i = 0; i < mult; ++i) { @@ -547,19 +552,21 @@ void AliMUONClusterFinderPeakCOG::BuildPixArrayOneCathode(AliMUONCluster& cluste if (cluster.Multiplicity(0) == 0) cath0 = 1; else if (cluster.Multiplicity(1) == 0) cath1 = 0; - TVector2 leftDown = cluster.Area(cath0).LeftDownCorner(); - TVector2 rightUp = cluster.Area(cath0).RightUpCorner(); - min[0] = leftDown.X(); - min[1] = leftDown.Y(); - max[0] = rightUp.X(); - max[1] = rightUp.Y(); + Double_t leftDownX, leftDownY; + cluster.Area(cath0).LeftDownCorner(leftDownX, leftDownY); + Double_t rightUpX, rightUpY; + cluster.Area(cath0).RightUpCorner(rightUpX, rightUpY); + min[0] = leftDownX; + min[1] = leftDownY; + max[0] = rightUpX; + max[1] = rightUpY; if (cath1 != cath0) { - leftDown = cluster.Area(cath1).LeftDownCorner(); - rightUp = cluster.Area(cath1).RightUpCorner(); - min[0] = TMath::Max (min[0], leftDown.X()); - min[1] = TMath::Max (min[1], leftDown.Y()); - max[0] = TMath::Min (max[0], rightUp.X()); - max[1] = TMath::Min (max[1], rightUp.Y()); + cluster.Area(cath1).LeftDownCorner(leftDownX, leftDownY); + cluster.Area(cath1).RightUpCorner(rightUpX, rightUpY); + min[0] = TMath::Max (min[0], leftDownX); + min[1] = TMath::Max (min[1], leftDownY); + max[0] = TMath::Min (max[0], rightUpX); + max[1] = TMath::Min (max[1], rightUpY); } // Adjust limits @@ -594,12 +601,12 @@ void AliMUONClusterFinderPeakCOG::BuildPixArrayOneCathode(AliMUONCluster& cluste for (Int_t i = 1; i <= nbins[0]; ++i) { Double_t x = xaxis->GetBinCenter(i); for (Int_t j = 1; j <= nbins[1]; ++j) { - if (hist2->GetCellContent(i,j) < 0.1) continue; + if (hist2->GetCellContent(i,j) < 0.01525) continue; // JC: adc -> fc if (cath0 != cath1) { // Two-sided cluster Double_t cont = hist2->GetCellContent(i,j); if (cont < 999.) continue; - if (cont-Int_t(cont/1000.)*1000. < 0.5) continue; + if (cont-Int_t(cont/1000.)*1000. < 0.07625) continue; // JC: adc -> fc } //if (hist2->GetCellContent(i,j) < 1.1 && cluster.Multiplicity(0) && // cluster.Multiplicity(1)) continue; @@ -645,9 +652,9 @@ void AliMUONClusterFinderPeakCOG::PadOverHist(Int_t idir, Int_t ix0, Int_t iy0, else { // Fill histogram Double_t cont = pad->Charge(); - if (hist2->GetCellContent(ix0, ixy) > 0.1) + if (hist2->GetCellContent(ix0, ixy) > 0.01525) // JC: adc -> fc cont = TMath::Min (hist1->GetCellContent(ix0, ixy), cont) - + TMath::Min (TMath::Max(hist1->GetCellContent(ix0, ixy),cont)*0.1, 10.); + + TMath::Min (TMath::Max(hist1->GetCellContent(ix0, ixy),cont)*0.1, 1.525); // JC: adc -> fc hist1->SetCellContent(ix0, ixy, cont); hist2->SetCellContent(ix0, ixy, hist2->GetCellContent(ix0, ixy)+amask); } @@ -662,9 +669,9 @@ void AliMUONClusterFinderPeakCOG::PadOverHist(Int_t idir, Int_t ix0, Int_t iy0, else { // Fill histogram Double_t cont = pad->Charge(); - if (hist2->GetCellContent(ix0, ixy) > 0.1) + if (hist2->GetCellContent(ix0, ixy) > 0.01525) // JC: adc -> fc cont = TMath::Min (hist1->GetCellContent(ix0, ixy), cont) - + TMath::Min (TMath::Max(hist1->GetCellContent(ix0, ixy),cont)*0.1,10.); + + TMath::Min (TMath::Max(hist1->GetCellContent(ix0, ixy),cont)*0.1,1.525); // JC: adc -> fc hist1->SetCellContent(ix0, ixy, cont); hist2->SetCellContent(ix0, ixy, hist2->GetCellContent(ix0, ixy)+amask); } @@ -688,6 +695,9 @@ Int_t AliMUONClusterFinderPeakCOG::FindLocalMaxima(TObjArray *pixArray, Int_t *l Double_t xylim[4] = {999, 999, 999, 999}; Int_t nPix = pixArray->GetEntriesFast(); + + if ( nPix <= 0 ) return 0; + AliMUONPad *pixPtr = 0; for (Int_t ipix = 0; ipix < nPix; ++ipix) { pixPtr = (AliMUONPad*) pixArray->UncheckedAt(ipix); @@ -713,7 +723,7 @@ Int_t AliMUONClusterFinderPeakCOG::FindLocalMaxima(TObjArray *pixArray, Int_t *l for (Int_t i = 1; i <= ny; ++i) { indx = (i-1) * nx; for (Int_t j = 1; j <= nx; ++j) { - if (fHistAnode->GetCellContent(j,i) < 0.5) continue; + if (fHistAnode->GetCellContent(j,i) < 0.07625) continue; // JC: adc -> fc //if (isLocalMax[indx+j-1] < 0) continue; if (isLocalMax[indx+j-1] != 0) continue; FlagLocalMax(fHistAnode, i, j, isLocalMax); @@ -775,7 +785,7 @@ void AliMUONClusterFinderPeakCOG::FlagLocalMax(TH2D *hist, Int_t i, Int_t j, Int //_____________________________________________________________________________ void AliMUONClusterFinderPeakCOG::FindCluster(AliMUONCluster& cluster, - Int_t *localMax, Int_t iMax) + const Int_t *localMax, Int_t iMax) { /// Find pixel cluster around local maximum \a iMax and pick up pads /// overlapping with it @@ -817,8 +827,8 @@ void AliMUONClusterFinderPeakCOG::FindCluster(AliMUONCluster& cluster, Double_t yc = fHistAnode->GetYaxis()->GetBinCenter(ic); Double_t xc = fHistAnode->GetXaxis()->GetBinCenter(jc); Double_t cont = fHistAnode->GetCellContent(jc,ic); - AliMUONPad* pixPtr = new AliMUONPad (xc, yc, wx, wy, cont); - if (fDebug) pixPtr->Print("full"); + AliMUONPad pixel(xc, yc, wx, wy, cont); + if (fDebug) pixel.Print("full"); Int_t npad = cluster.Multiplicity(); @@ -828,7 +838,7 @@ void AliMUONClusterFinderPeakCOG::FindCluster(AliMUONCluster& cluster, for (Int_t j = 0; j < npad; ++j) { AliMUONPad* pad = cluster.Pad(j); - if ( Overlap(*pad,*pixPtr) ) + if ( Overlap(*pad,pixel) ) { if (fDebug) { cout << j << " "; pad->Print("full"); } if (pad->Charge() > qMax[pad->Cathode()]) { @@ -889,7 +899,7 @@ void AliMUONClusterFinderPeakCOG::FindCluster(AliMUONCluster& cluster, } //qAver = TMath::Sqrt(qAver); - if ( qAver >= 14 ) + if ( qAver >= 2.135 ) // JC: adc -> fc { AliMUONCluster* cluster1 = new AliMUONCluster(cluster); @@ -941,10 +951,10 @@ void AliMUONClusterFinderPeakCOG::PadsInXandY(AliMUONCluster& cluster, Bool_t mustMatch(kTRUE); - AliMpIntPair cn = cluster.NofPads(statusToTest,mustMatch); + Long_t cn = cluster.NofPads(statusToTest,mustMatch); - nInX = cn.GetFirst(); - nInY = cn.GetSecond(); + nInX = AliMp::PairFirst(cn); + nInY = AliMp::PairSecond(cn); } //_____________________________________________________________________________