#include "AliLog.h"
#include "AliMUONCluster.h"
-#include "AliMUONDigit.h"
+#include "AliMUONVDigit.h"
#include "AliMUONPad.h"
#include "AliMUONPreClusterFinder.h"
#include "AliMpArea.h"
-#include "TClonesArray.h"
#include "TVector2.h"
+#include "AliMUONVDigitStore.h"
/// \class AliMUONClusterFinderCOG
///
//_____________________________________________________________________________
Bool_t
AliMUONClusterFinderCOG::Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2])
+ const AliMUONVDigitStore& digitStore)
{
/// Prepare for clustering
// Find out the DetElemId
Int_t detElemId(-1);
- for ( Int_t i = 0; i < 2; ++i )
+ TIter next(digitStore.CreateIterator());
+ AliMUONVDigit* d;
+
+ d = static_cast<AliMUONVDigit*>(next());
+
+ if (d)
{
- AliMUONDigit* d = static_cast<AliMUONDigit*>(digits[i]->First());
- if (d)
- {
- detElemId = d->DetElemId();
- break;
- }
+ detElemId = d->DetElemId();
}
if ( detElemId < 0 )
delete fPreClusterFinder;
fPreClusterFinder = new AliMUONPreClusterFinder;
- return fPreClusterFinder->Prepare(segmentations,digits);
+ return fPreClusterFinder->Prepare(segmentations,digitStore);
}
//_____________________________________________________________________________
virtual ~AliMUONClusterFinderCOG();
virtual Bool_t Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2]);
+ const AliMUONVDigitStore& digitStore);
virtual AliMUONCluster* NextCluster();
#include "AliLog.h"
#include "AliMUONCluster.h"
#include "AliMUONClusterSplitterMLEM.h"
-#include "AliMUONDigit.h"
+#include "AliMUONVDigit.h"
#include "AliMUONPad.h"
#include "AliMUONPreClusterFinder.h"
#include "AliMpPad.h"
#include "AliMpVPadIterator.h"
#include "AliMpVSegmentation.h"
#include "AliRunLoader.h"
-
+#include "AliMUONVDigitStore.h"
#include <Riostream.h>
#include <TH2.h>
#include <TMinuit.h>
//_____________________________________________________________________________
Bool_t
AliMUONClusterFinderMLEM::Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2])
+ const AliMUONVDigitStore& digitStore)
{
/// Prepare for clustering
// Find out the DetElemId
fDetElemId = -1;
- for ( Int_t i = 0; i < 2; ++i )
+ TIter next(digitStore.CreateIterator());
+ AliMUONVDigit* d = static_cast<AliMUONVDigit*>(next());
+
+ if (d)
{
- AliMUONDigit* d = static_cast<AliMUONDigit*>(digits[i]->First());
- if (d)
- {
- fDetElemId = d->DetElemId();
- break;
- }
+ fDetElemId = d->DetElemId();
}
if ( fDetElemId < 0 )
// AliDebug(3,Form("EVT %d DE %d",fEventNumber,fDetElemId));
- return fPreClusterFinder->Prepare(segmentations,digits);
+ return fPreClusterFinder->Prepare(segmentations,digitStore);
}
//_____________________________________________________________________________
virtual ~AliMUONClusterFinderMLEM(); // Destructor
virtual Bool_t Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2]);
+ const AliMUONVDigitStore& digitStore);
virtual AliMUONCluster* NextCluster();
#include "AliMpStationType.h"
#include "AliMUONCluster.h"
#include "AliMUONConstants.h"
-#include "AliMUONDigit.h"
+#include "AliMUONVDigit.h"
#include "AliMUONMathieson.h"
#include "AliMUONPad.h"
#include "AliMUONClusterFinderCOG.h"
#include "TVector2.h"
#include "TVirtualFitter.h"
#include "TF1.h"
+#include "AliMUONVDigitStore.h"
+#include <Riostream.h>
/// \class AliMUONClusterFinderSimpleFit
///
//_____________________________________________________________________________
Bool_t
AliMUONClusterFinderSimpleFit::Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2])
+ const AliMUONVDigitStore& digitStore)
{
/// Prepare for clustering
// Find out the DetElemId
Int_t detElemId(-1);
- for ( Int_t i = 0; i < 2; ++i )
+ TIter next(digitStore.CreateIterator());
+ AliMUONVDigit* d = static_cast<AliMUONVDigit*>(next());
+
+ if (d)
{
- AliMUONDigit* d = static_cast<AliMUONDigit*>(digits[i]->First());
- if (d)
- {
- detElemId = d->DetElemId();
- break;
- }
+ detElemId = d->DetElemId();
}
-
- if ( detElemId < 0 )
+ else
{
- AliWarning("Could not find DE. Probably no digits at all ?");
+ AliWarning("Could not find DE. Probably no digits at all : here's the digitStore :");
+ StdoutToAliWarning(digitStore.Print(););
return kFALSE;
}
delete fClusterFinder;
fClusterFinder = new AliMUONClusterFinderCOG;
- return fClusterFinder->Prepare(segmentations,digits);
+ return fClusterFinder->Prepare(segmentations,digitStore);
}
//_____________________________________________________________________________
virtual ~AliMUONClusterFinderSimpleFit();
virtual Bool_t Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2]);
+ const AliMUONVDigitStore& digitStore);
virtual AliMUONCluster* NextCluster();
#include "AliMpArea.h"
#include "TVector2.h"
#include "AliMUONPad.h"
-#include "AliMUONDigit.h"
+#include "AliMUONVDigit.h"
+#include "AliMUONVDigitStore.h"
/// \class AliMUONPreClusterFinder
///
: AliMUONVClusterFinder(),
fClusters(0x0),
fSegmentations(0x0),
- fDigits(0x0),
fDetElemId(0)
{
/// ctor
//_____________________________________________________________________________
Bool_t
AliMUONPreClusterFinder::Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2])
+ const AliMUONVDigitStore& digitStore)
// FIXME : add area on which to look for clusters here.
{
/// Prepare for clustering, by giving access to segmentations and digit lists
fSegmentations = segmentations;
- fDigits = digits;
delete fClusters;
fClusters = new TClonesArray("AliMUONCluster");
fDetElemId = -1;
- // Converts digits into pads
- for ( Int_t cathode = 0; cathode < 2; ++cathode )
+ TIter next(digitStore.CreateIterator());
+ AliMUONVDigit* d;
+
+ while ( ( d = static_cast<AliMUONVDigit*>(next()) ) )
{
- if ( !digits[cathode] ) continue;
-
- AliMUONDigit* d;
- TIter next(digits[cathode]);
- while ( ( d = static_cast<AliMUONDigit*>(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 )
{
- Int_t ix = d->PadX();
- Int_t iy = d->PadY();
- AliMpPad pad = fSegmentations[cathode]->PadByIndices(AliMpIntPair(ix,iy));
- TClonesArray& padArray = *(fPads[cathode]);
- if ( fDetElemId == -1 )
- {
- fDetElemId = d->DetElemId();
- }
- else
+ fDetElemId = d->DetElemId();
+ }
+ else
+ {
+ if ( d->DetElemId() != fDetElemId )
{
- if ( d->DetElemId() != fDetElemId )
- {
- AliError("Something is seriously wrong with DE. Aborting clustering");
- return kFALSE;
- }
+ 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->Signal());
- if ( d->IsSaturated() ) mpad.SetSaturated(kTRUE);
- new (padArray[padArray.GetLast()+1]) AliMUONPad(mpad);
}
+
+ 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 )
{
virtual ~AliMUONPreClusterFinder();
virtual Bool_t Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2]);
+ const AliMUONVDigitStore& digitStore);
virtual AliMUONCluster* NextCluster();
private:
TClonesArray* fClusters; //!< the clusters we've found (owner)
const AliMpVSegmentation** fSegmentations; //!< segmentations (not owner)
- TClonesArray** fDigits; //!< where to find the digits (not owner)
TClonesArray* fPads[2]; //!< the pads corresponding to the digits (owner)
Int_t fDetElemId; //!< which DE we're considering
class AliMUONCluster;
class AliMpVSegmentation;
-class TClonesArray;
class AliMUONPad;
+class AliMUONVDigitStore;
class AliMUONVClusterFinder : public TObject
{
/// \todo add comment
virtual Bool_t Prepare(const AliMpVSegmentation* segmentations[2],
- TClonesArray* digits[2]) = 0;
+ const AliMUONVDigitStore& digitStore) = 0;
/// \todo add comment
virtual AliMUONCluster* NextCluster() = 0;