* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.8 2000/12/21 22:12:41 morsch
-Clean-up of coding rule violations,
-
-Revision 1.7 2000/11/08 13:01:40 morsch
-Chamber half-planes of stations 3-5 at different z-positions.
-
-Revision 1.6 2000/11/06 09:20:43 morsch
-AliMUON delegates part of BuildGeometry() to AliMUONSegmentation using the
-Draw() method. This avoids code and parameter replication.
-
-Revision 1.5 2000/10/23 13:37:40 morsch
-Correct z-position of slat planes.
-
-Revision 1.4 2000/10/22 16:55:43 morsch
-Use only x-symmetry in global to local transformations and delegation.
-
-Revision 1.3 2000/10/18 11:42:06 morsch
-- AliMUONRawCluster contains z-position.
-- Some clean-up of useless print statements during initialisations.
-
-Revision 1.2 2000/10/09 14:06:18 morsch
-Some type cast problems of type (TMath::Sign((Float_t)1.,x)) corrected (P.H.)
-
-Revision 1.1 2000/10/06 09:00:47 morsch
-Segmentation class for chambers built out of slats.
-
-*/
+/* $Id$ */
#include "AliMUONSegmentationSlat.h"
#include "AliMUONSegmentationSlatModule.h"
#include <TBRIK.h>
#include <TNode.h>
#include <TGeometry.h>
-#include <iostream.h>
+#include <Riostream.h>
//___________________________________________
ClassImp(AliMUONSegmentationSlat)
AliMUONSegmentationSlat::AliMUONSegmentationSlat()
{
// Default constructor
+ fChamber = 0;
+ fNDiv = 0;
+ fSlats = 0;
+ fCurrentSlat = 0;
+}
+
+AliMUONSegmentationSlat::AliMUONSegmentationSlat(Int_t nsec)
+{
+// Non default constructor
fSlats=0;
- fNDiv = new TArrayI(4);
+ fNDiv = new TArrayI(4);
+ fChamber = 0;
+ fCurrentSlat = 0;
}
AliMUONSegmentationSlat::~AliMUONSegmentationSlat(){
fSlats->Delete();
delete fSlats;
}
+
+ if (fNDiv) {
+ delete fNDiv;
+ }
+
}
void AliMUONSegmentationSlat::SetPadSize(Float_t p1, Float_t p2)
Float_t zlocal;
Int_t i;
Int_t index=-1;
+ Float_t eps = 1.e-4;
+
// Transform According to slat plane z-position: negative side is shifted down
// positive side is shifted up
// by half the overlap
// Find slat number
for (i=ifirst; i<fNSlats; i+=2) {
index=i;
- if ((y >= fYPosition[i]) && (y < fYPosition[i]+fSlatY)) break;
+ if ((y >= fYPosition[i]-eps) && (y <= fYPosition[i]+fSlatY+eps)) break;
}
//
// Transform to local coordinate system
- ylocal = y -fYPosition[index];
- xlocal = xabs-fXPosition[index];
- islat = index;
- if (i >= fNSlats) {islat = -1; x=-1; y = -1;}
+ if (index >= fNSlats || index < 0 ) {
+ islat = -1; xlocal=-1; ylocal = -1; }
+ else {
+ ylocal = y -fYPosition[index];
+ xlocal = xabs-fXPosition[index];
+ islat = index;
+ }
}
void AliMUONSegmentationSlat::GlobalToLocal(
//
-
Int_t islat;
Float_t xlocal, ylocal;
GlobalToLocal(xhit, yhit, zhit, islat, xlocal, ylocal);
fSlatIndex=islat;
- fCurrentSlat=Slat(islat);
- fCurrentSlat->FirstPad(xlocal, ylocal, dx, dy);
+ if (islat>-1) {
+ fCurrentSlat=Slat(islat);
+ fCurrentSlat->FirstPad(xlocal, ylocal, dx, dy);
+ }
}
// Initialize slat modules of quadrant +/+
// The other three quadrants are handled through symmetry transformations
//
- printf("\n Initialise Segmentation Slat \n");
+ //printf("\n Initialise Segmentation Slat \n");
//
// Initialize Slat modules
fNpx=0;
// for each slat in the quadrant (+,+)
for (islat=0; islat<fNSlats; islat++) {
- (*fSlats)[islat] = CreateSlatModule();
+ fSlats->AddAt(CreateSlatModule(),islat);
AliMUONSegmentationSlatModule *slat = Slat(islat);
// Configure Slat
}
AliMUONSegmentationSlatModule* AliMUONSegmentationSlat::Slat(Int_t index) const
-{ return ((AliMUONSegmentationSlatModule*) (*fSlats)[index]);}
+ //PH { return ((AliMUONSegmentationSlatModule*) (*fSlats)[index]);}
+{ return ((AliMUONSegmentationSlatModule*) fSlats->At(index));}
AliMUONSegmentationSlatModule* AliMUONSegmentationSlat::
CreateSlatModule()
{
// Factory method for slat module
- return new AliMUONSegmentationSlatModule();
+ return new AliMUONSegmentationSlatModule(4);
}