* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.16 2001/10/30 08:25:14 jchudoba
-Small correction to prevent crash when hit is at the edge of a slat
-
-Revision 1.15 2001/09/07 08:38:30 hristov
-Pointers initialised to 0 in the default constructors
-
-Revision 1.14 2001/08/30 09:52:12 hristov
-The operator[] is replaced by At() or AddAt() in case of TObjArray.
-
-Revision 1.13 2001/07/20 10:03:14 morsch
-Changes needed to work with Root 3.01 (substitute lhs [] operator). (Jiri Chudoba)
-
-Revision 1.12 2001/05/16 14:57:17 alibrary
-New files for folders and Stack
-
-Revision 1.11 2001/01/26 21:25:48 morsch
-Empty default constructors and.
-
-Revision 1.10 2001/01/23 18:58:19 hristov
-Initialisation of some pointers
-
-Revision 1.9 2001/01/17 20:53:40 hristov
-Destructors corrected to avoid memory leaks
-
-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()
+ : AliSegmentation()
{
// Default constructor
fChamber = 0;
fCurrentSlat = 0;
}
-AliMUONSegmentationSlat::AliMUONSegmentationSlat(Int_t nsec)
+AliMUONSegmentationSlat::AliMUONSegmentationSlat(Int_t /*nsec*/)
+ : AliSegmentation()
{
// Non default constructor
fSlats=0;
fCurrentSlat = 0;
}
+AliMUONSegmentationSlat::AliMUONSegmentationSlat(const AliMUONSegmentationSlat& rhs)
+ : AliSegmentation(rhs)
+{
+// Protected copy constructor
+
+ Fatal("AliMUONSegmentationSlatModule", "Not implemented.");
+}
+
AliMUONSegmentationSlat::~AliMUONSegmentationSlat(){
//PH Delete TObjArrays
if (fSlats) {
}
+//----------------------------------------------------------------------
+AliMUONSegmentationSlat&
+AliMUONSegmentationSlat::operator=(const AliMUONSegmentationSlat& rhs)
+{
+// Protected assignement operator
+
+ if (this == &rhs) return *this;
+
+ Fatal("operator=", "Not implemented.");
+
+ return *this;
+}
+
+
+//-----------------------------------------------------------
void AliMUONSegmentationSlat::SetPadSize(Float_t p1, Float_t p2)
{
// Sets the pad (strip) size
fDpx=p1;
fDpy=p2;
}
-
+//-----------------------------------------------------------
Float_t AliMUONSegmentationSlat::GetAnod(Float_t xhit) const
{
// Returns for a hit position xhit the position of the nearest anode wire
Float_t wire= (xhit>0)? Int_t(xhit/fWireD)+0.5:Int_t(xhit/fWireD)-0.5;
return fWireD*wire;
}
-
+//-----------------------------------------------------------
+void AliMUONSegmentationSlat::GetNParallelAndOffset(Int_t /*iX*/, Int_t /*iY*/, Int_t *Nparallel, Int_t *Offset)
+{
+ *Nparallel=1;
+ *Offset=0;
+}
+//-----------------------------------------------------------
+void AliMUONSegmentationSlat::GiveTestPoints(Int_t & /*n*/, Float_t */*x*/, Float_t */*y*/) const
+{;}
+//-----------------------------------------------------------
+Float_t AliMUONSegmentationSlat::Distance2AndOffset(Int_t /*iX*/, Int_t /*iY*/, Float_t /*X*/, Float_t /*Y*/, Int_t * /*dummy*/)
+{
+ return 0.;
+}
+//-----------------------------------------------------------
Float_t AliMUONSegmentationSlat::Dpx(Int_t isec) const
{
//
return Slat(islat)->Dpx(iregion);
}
-Float_t AliMUONSegmentationSlat::Dpy(Int_t isec) const
+Float_t AliMUONSegmentationSlat::Dpy(Int_t /*isec*/) const
{
//
// Returns y-pad (strip) size for given sector isec
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
zlocal = z-fChamber->Z();
- zlocal = (x>0) ? zlocal-2.*fDz : zlocal+2.*fDz;
+
+// zlocal = (x>0) ? zlocal-2.*fDz : zlocal+2.*fDz;
+ zlocal = (x>0) ? zlocal+2.*fDz : zlocal-2.*fDz; //Change?
+
// Set the signs for the symmetry transformation and transform to first quadrant
SetSymmetry(x);
Float_t xabs=TMath::Abs(x);
- Int_t ifirst = (zlocal < Float_t(0))? 0:1;
-//
+
// Find slat number
- for (i=ifirst; i<fNSlats; i+=2) {
+ for (i=0; i<fNSlats; i+=1) { //Loop on all slats (longuer but more secure)
index=i;
- if ((y >= fYPosition[i]) && (y <= fYPosition[i]+fSlatY)) break;
+ if ((y >= fYPosition[i]-eps) && (y <= fYPosition[i]+fSlatY+eps)) break;
}
//
x = (xlocal+fXPosition[islat])*fSym;
y=(ylocal+fYPosition[islat]);
- z = (TMath::Even(islat)) ? -fDz : fDz ;
+ z = (TMath::Even(islat)) ? fDz : -fDz ; //Change for new referential
z = (x>0) ? z+2.*fDz : z-2.*fDz ;
z+=fChamber->Z();
x=x*TMath::Sign(1,ix);
// z-position
- z = (TMath::Even(islat)) ? -fDz : fDz ;
+ z = (TMath::Even(islat)) ? fDz : -fDz ; //Change for new referential
z = (x>0) ? z+2.*fDz : z-2.*fDz ;
z += fChamber->Z();
}
//
-
Int_t islat;
Float_t xlocal, ylocal;
GlobalToLocal(xhit, yhit, zhit, islat, xlocal, ylocal);