**************************************************************************/
// $Id$
-// $MpId: AliMpTrigger.cxx,v 1.2 2006/03/02 16:35:31 ivana Exp $
+// $MpId: AliMpTrigger.cxx,v 1.4 2006/05/24 13:58:52 ivana Exp $
#include "AliMpTrigger.h"
-
+#include "AliMpSlatSegmentation.h"
+#include "AliMpConstants.h"
#include "AliLog.h"
#include "AliMpSlat.h"
#include "TArrayI.h"
#include "TObjArray.h"
+///
+/// \class AliMpTrigger
+///
+/// A trigger 'slat' object.
+/// It is to be viewed as a superposition of
+/// virtual layers of AliMpSlat objects. The need for more than one layer
+/// arise from the fact that a given local board deals with strips
+/// located in different detelem. So a given strip (pad) can have several
+/// "locations".
+///
+/// \author Laurent Aphecetche
+
+/// \cond CLASSIMP
ClassImp(AliMpTrigger)
+/// \endcond
namespace
{
//_____________________________________________________________________________
AliMpTrigger::AliMpTrigger()
-: TObject(), fId(""), fPlaneType(kNonBendingPlane),
-fMaxNofPadsY(0), fDX(0), fDY(0)
+: TObject(),
+ fId(""),
+ fPlaneType(AliMp::kNonBendingPlane),
+ fSlats(0),
+ fSlatSegmentations(0),
+ fMaxNofPadsY(0),
+ fDX(0),
+ fDY(0)
{
+ /// default ctor
+
+ AliDebugStream(1) << "this = " << this << endl;
+
+ fSlats.SetOwner(kFALSE);
+ fSlatSegmentations.SetOwner(kTRUE);
}
//_____________________________________________________________________________
-AliMpTrigger::AliMpTrigger(const char* slatType, AliMpPlaneType bendingOrNot)
-: TObject(), fId(slatType), fPlaneType(bendingOrNot),
-fMaxNofPadsY(0), fDX(0), fDY(0)
+AliMpTrigger::AliMpTrigger(const char* slatType, AliMp::PlaneType bendingOrNot)
+ : TObject(),
+ fId(slatType),
+ fPlaneType(bendingOrNot),
+ fSlats(0),
+ fSlatSegmentations(0),
+ fMaxNofPadsY(0),
+ fDX(0),
+ fDY(0)
{
+ /// normal ctor
+
+ AliDebugStream(1) << "this = " << this << endl;
+
+ fSlats.SetOwner(kFALSE);
+ fSlatSegmentations.SetOwner(kTRUE);
}
//_____________________________________________________________________________
AliMpTrigger::~AliMpTrigger()
{
- AliDebug(1,Form("this=%p before fSlats.Delete()",this));
- fSlats.Delete();
- AliDebug(1,Form("this=%p after fSlats.Delete()",this));
+ /// dtor
+ AliDebugStream(1) << "this = " << this << endl;
+
+ fSlatSegmentations.Delete();
}
//_____________________________________________________________________________
Bool_t
AliMpTrigger::AdoptLayer(AliMpSlat* slat)
{
- AliDebug(1,Form("%s is adopting %s :\n",
+ /// Adopt (i.e. we become owner of that pointer) a slat, as
+ /// a layer of this trigger slat.
+
+ AliDebug(2,Form("%s is adopting %s ",
GetID(),slat->GetID()));
// Check that we keep our size constant.
-
- const Double_t precision = 1E-3;
-
+
if ( GetSize() > 0 &&
- ( !::IsEqual(slat->DX(),fDX,precision) ||
- !::IsEqual(slat->DY(),fDY,precision) )
+ ( !::IsEqual(slat->DX(),fDX,AliMpConstants::LengthTolerance()) ||
+ !::IsEqual(slat->DY(),fDY,AliMpConstants::LengthTolerance()) )
)
{
- AliError(Form("In %s trying to add a layer (%e,%e) of a different size than "
- "mine (%e,%e)\n",GetID(),slat->DX(),slat->DY(),
+ AliError(Form("In %s trying to add a layer (%e,%e) (layer #%d) "
+ "of a different size than mine (%e,%e)",
+ GetID(),slat->DX(),slat->DY(),fSlats.GetEntries(),
fDX,fDY));
return kFALSE;
}
fSlats.Add(slat);
- fMaxNofPadsY = std::max(slat->GetMaxNofPadsY(),fMaxNofPadsY);
- fDX = std::max(fDX,slat->DX());
- fDY = std::max(fDY,slat->DY());
+ Bool_t owner(kTRUE);
+ // the slat segmentation will be the owner of the slat, and will delete
+ // it when it'll be deleted itself
+ fSlatSegmentations.Add(new AliMpSlatSegmentation(slat,owner));
+ fMaxNofPadsY = TMath::Max(slat->GetMaxNofPadsY(),fMaxNofPadsY);
+ fDX = TMath::Max(fDX,slat->DX());
+ fDY = TMath::Max(fDY,slat->DY());
return kTRUE;
}
TVector2
AliMpTrigger::Dimensions() const
{
+ /// Returns the dimensions (half-sizes) of that slat (cm)
return TVector2(DX(),DY());
}
Double_t
AliMpTrigger::DX() const
{
+ /// Returns the half-size in X (cm)
return fDX;
}
Double_t
AliMpTrigger::DY() const
{
+ /// Returns the half-size in Y (cm)
return fDY;
}
void
AliMpTrigger::GetAllLocalBoardNumbers(TArrayI& lbn) const
{
+ /// Fills lbn with the local board numbers we're dealing with
Int_t n(0);
for ( Int_t i = 0; i < GetSize(); ++i )
{
const char*
AliMpTrigger::GetID() const
{
+ /// returns the id of this slat
return fId.Data();
}
const char*
AliMpTrigger::GetName() const
{
+ /// returns the name (=id+bending/non-bending) of this slat
TString name(GetID());
- if ( fPlaneType == kBendingPlane )
+ if ( fPlaneType == AliMp::kBendingPlane )
{
name += ".Bending";
}
- else if ( fPlaneType == kNonBendingPlane )
+ else if ( fPlaneType == AliMp::kNonBendingPlane )
{
name += ".NonBending";
}
AliMpSlat*
AliMpTrigger::GetLayer(int layer) const
{
+ /// Returns a given layer
if ( IsLayerValid(layer) )
{
return (AliMpSlat*)fSlats.At(layer);
return 0;
}
+//_____________________________________________________________________________
+AliMpVSegmentation*
+AliMpTrigger::GetLayerSegmentation(int layer) const
+{
+ /// Returns a given layer
+ if ( IsLayerValid(layer) )
+ {
+ return (AliMpSlatSegmentation*)fSlatSegmentations.At(layer);
+ }
+ return 0;
+}
+
//_____________________________________________________________________________
Int_t
AliMpTrigger::GetNofPadsX() const
{
+ /// Returns the number of pad in x direction
if ( !GetSize() ) return -1;
if ( GetLayer(0) )
{
Int_t
AliMpTrigger::GetMaxNofPadsY() const
{
+ /// Maximum number of pads in y direction
return fMaxNofPadsY;
}
Int_t
AliMpTrigger::GetSize() const
{
+ /// Number of layers
return fSlats.GetEntriesFast();
}
Bool_t
AliMpTrigger::IsLayerValid(int layer) const
{
+ /// Whether a given layer index is valid or not
if ( layer >= 0 && layer < GetSize() )
{
return kTRUE;
}
//_____________________________________________________________________________
-AliMpPlaneType
+AliMp::PlaneType
AliMpTrigger::PlaneType() const
{
+ /// Bending or not
return fPlaneType;
}
TVector2
AliMpTrigger::Position() const
{
+ /// Slat position (cm)
return TVector2(DX(),DY());
}
void
AliMpTrigger::Print(Option_t* opt) const
{
+ /// Dump on screen
cout << "AliMpTrigger::" << GetID();
if ( GetSize() == 0 )
{