X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=MUON%2FAliMUONPreClusterFinderV2.cxx;h=c0fc9ea1be4546ba7637d435b0daaff762031d65;hb=dba06a248f11b3479a9ed66cda88e98836086a84;hp=f1cbef8fa6e9c807990b184fdbc5f851af7c9a4a;hpb=3d1463c8f7148e36069c24f20cde34e096d5d6a9;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONPreClusterFinderV2.cxx b/MUON/AliMUONPreClusterFinderV2.cxx index f1cbef8fa6e..c0fc9ea1be4 100644 --- a/MUON/AliMUONPreClusterFinderV2.cxx +++ b/MUON/AliMUONPreClusterFinderV2.cxx @@ -43,25 +43,17 @@ AliMUONPreClusterFinderV2::AliMUONPreClusterFinderV2() : AliMUONVClusterFinder(), fClusters(0x0), fSegmentations(0x0), + fPads(0x0), fDetElemId(0) { /// ctor - for ( Int_t i = 0; i < 2; ++i ) - { - fPads[i] = 0x0; - } } //_____________________________________________________________________________ AliMUONPreClusterFinderV2::~AliMUONPreClusterFinderV2() { - /// dtor : note we're owner of the pads and the clusters, but not of - /// the remaining objects (digits, segmentations) + /// dtor : note we're owner of the clusters, but not of the pads delete fClusters; - for ( Int_t i = 0; i < 2; ++i ) - { - delete fPads[i]; - } } //_____________________________________________________________________________ @@ -83,54 +75,26 @@ AliMUONPreClusterFinderV2::UsePad(const AliMUONPad& pad) //_____________________________________________________________________________ Bool_t -AliMUONPreClusterFinderV2::Prepare(const AliMpVSegmentation* segmentations[2], - const AliMUONVDigitStore& digitStore) -// FIXME : add area on which to look for clusters here. +AliMUONPreClusterFinderV2::Prepare(Int_t detElemId, + TClonesArray* pads[2], + const AliMpArea& area, + const AliMpVSegmentation* seg[2]) { /// Prepare for clustering, by giving access to segmentations and digit lists - fSegmentations = segmentations; - - delete fClusters; - fClusters = new TClonesArray("AliMUONCluster"); - for ( Int_t i = 0; i < 2; ++i ) + if ( area.IsValid() ) { - delete fPads[i]; - fPads[i] = new TClonesArray("AliMUONPad"); + AliError("Handling of area not yet implemented for this class. Please check"); } - fDetElemId = -1; + delete fClusters; + fClusters = new TClonesArray("AliMUONCluster"); + + fPads = pads; + fSegmentations = seg; - TIter next(digitStore.CreateIterator()); - AliMUONVDigit* d; + fDetElemId = detElemId; - while ( ( d = static_cast(next()) ) ) - { - Int_t ix = d->PadX(); - Int_t iy = d->PadY(); - Int_t cathode = d->Cathode(); - AliMpPad pad = fSegmentations[cathode]->PadByIndices(AliMpIntPair(ix,iy)); - TClonesArray& padArray = *(fPads[cathode]); - if ( fDetElemId == -1 ) - { - fDetElemId = d->DetElemId(); - } - else - { - if ( d->DetElemId() != fDetElemId ) - { - AliError("Something is seriously wrong with DE. Aborting clustering"); - return kFALSE; - } - } - - AliMUONPad mpad(fDetElemId,cathode, - ix,iy,pad.Position().X(),pad.Position().Y(), - pad.Dimensions().X(),pad.Dimensions().Y(), - d->Charge()); - if ( d->IsSaturated() ) mpad.SetSaturated(kTRUE); - new (padArray[padArray.GetLast()+1]) AliMUONPad(mpad); - } if ( fPads[0]->GetLast() < 0 && fPads[1]->GetLast() < 0 ) { // no pad at all, nothing to do... @@ -160,15 +124,15 @@ AliMUONPreClusterFinderV2::AddPad(AliMUONCluster& cluster, AliMUONPad* pad) Int_t nn = fSegmentations[pad->Cathode()]->GetNeighbours(p,neighbours); for (Int_t in = 0; in < nn; ++in) { - AliMpPad* p = static_cast(neighbours.At(in)); + AliMpPad* p1 = static_cast(neighbours.At(in)); - TIter next(&padArray); + TIter next2(&padArray); AliMUONPad* p2; - while ( ( p2 = static_cast(next()) ) ) + while ( ( p2 = static_cast(next2()) ) ) { - if ( !p2->IsUsed() && p2->Ix()==p->GetIndices().GetFirst() - && p2->Iy() == p->GetIndices().GetSecond() && + if ( !p2->IsUsed() && p2->Ix()==p1->GetIndices().GetFirst() + && p2->Iy() == p1->GetIndices().GetSecond() && p2->Cathode() == pad->Cathode() ) { AddPad(cluster,p2); @@ -217,13 +181,13 @@ AliMUONPreClusterFinderV2::NextCluster() AliMUONPad* pad; TIter next(fPads[0]); - while ( ( pad = static_cast(next())) && pad->IsUsed() ); + while ( ( pad = static_cast(next())) && pad->IsUsed() ) {} if (!pad) // protection against no pad in first cathode, which might happen { // try other cathode - TIter next(fPads[1]); - while ( ( pad = static_cast(next())) && pad->IsUsed() ); + TIter next2(fPads[1]); + while ( ( pad = static_cast(next2())) && pad->IsUsed() ) {} if (!pad) { // we are done.