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