Dear All,
I read Trine's message (which I do not quote, but can be found in the
archives) with great interest.
I have also been trying to make tracks in the Front Forward Spec. To
this end I am working on
the cleverly named BrFFSTrackingModule. This is copied directly from
BrMRSTrackingModule,
and edited to make tracks ("FFSTracks"). The reason that I proceeded in
this way was that I found the
BrMRSTrackingModule a bit more straightforward than the existing
BrFSTrackingModule, and since
I am far from the sharpest tool in the programming shed I took the easy
way out.
I have not yet included the swim back through D1.
I have though included methods for getting and setting the
entrance and exits to D2 and D1, and this has given me a bit of a
problem with which I hope one of you
sharper tools can help.
To find the entrance to D2, I do the following:
// Find intersection between track and front face of
// magnet and track and back face of magnet
Float_t EntX, EntY, EntZ, ExtX, ExtY, ExtZ;
//find intersection of track with front and back plane of magnet
//first get entrance plane of magnet:
BrPlane3D frontPlane =
fMagnetVolume->GetEffectiveEdgeEntrancePlane();
//exit plane:
BrPlane3D backPlane = fMagnetVolume->GetEffectiveEdgeExitPlane();
// line of track in front tracking module, transform to
// magnet coordinate system:
BrLine3D
backLine(fMagnetVolume->GlobalToLocal(BackTrack_p->GetTrackLine()));
BrLine3D
frontLine(fMagnetVolume->GlobalToLocal(FrontTrack_p->GetTrackLine()));
BrVector3D backInter =
backPlane.GetIntersectionWithLine(backLine);
BrVector3D frontInter =
frontPlane.GetIntersectionWithLine(frontLine);
//now I should (?) be able to transform the position components
//of the vector to the global coordinate system
BrVector3D frontPoint;
BrVector3D backPoint;
fMagnetVolume->LocalToGlobal(frontInter,frontPoint,0);
fMagnetVolume->LocalToGlobal(backInter,backPoint,0);
cout << "frontPoint " << frontPoint << endl;
cout << "backPoint " << backPoint << endl;
EntX = frontPoint.GetX();
EntY = frontPoint.GetY();
EntZ = frontPoint.GetZ();
ExtX = backPoint.GetX();
ExtY = backPoint.GetY();
ExtZ = backPoint.GetZ();
I then SetEntranceX, etc. All this seems to work inasmuch as I extract
values, and they are carried
correctly through. The problem is that the intersection positions seem
to be incorrect. That is, when
I draw the FFS, and draw the 'local tracks' in T1 and T2 they go through
all the detector hits. When I draw
the FFSTrack, they are systematically displaced (but parallel to!) the
'local tracks' I suppose this is
because I have screwed up somewhere with the coordinate transformations,
but I cannot find the mistake(s).
Has anyone run into similar problems? Have any (better) ideas how to do
this?
Also, should we continue with only FSTracks, or should we also have
FFSTracks?
I suppose we could certainly have FSTracks without T1 (and maybe even
T2?), but for the
first running, and for all data toward mid-rapidity we will have only
the FFS.
My feeling is that Djamel and Christian would argue for a new class
FFSTracks, does anyone else have an
opinion?
Finally, to give credit where it is due, the part of this code which
seems to work was taken from
Djamels PID stuff. He has written a nice routine which calculates the
actual path of the particle through the
magnet. I guess this should not be in PID, but more naturally falls
under tracking (except that one doesn't--in
principal, anyway--know the charge of the particle until we do some
PID). Any comments?
Cheers,
--
Ian--------------------------------------------------------------------
| I.G. Bearden |
| Niels Bohr Institute Tb 3 email: bearden@nbi.dk |
| Blegdamsvej 17 phone: (+45) 35 32 53 23 |
| København Ø FAX: (+45) 31 42 10 16 |
| Danmark |
----------------------------------------------------------------------
This archive was generated by hypermail 2b29 : Thu Jun 22 2000 - 05:08:59 EDT