1 / 26

PHENIX Upgrade Detectors: Preliminary Software Interface Proposal

This proposal outlines software interfaces for upgrading modular tasks in the PHENIX detectors. It suggests an object-oriented design to seamlessly integrate new detector data into the existing global tracking framework.

lbrien
Download Presentation

PHENIX Upgrade Detectors: Preliminary Software Interface Proposal

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PHENIX Upgrade Detectors: Preliminary Software Interface Proposal Jeffery T. Mitchell Brookhaven National Laboratory 7/16/03

  2. Description of this document This document is being circulated as a proposal for the software interfaces between modular software tasks to be performed in the PHENIX upgrade detectors (Si vertex, HBD, and TPC). The design is based upon an object oriented approach assuming a generic data flow as illustrated on the next page. The design is set up so that the end-product of the software (Si vertex track segments, HBD blobs, TPC tracks, and associations between these detectors) will plug in seamlessly to the current PHENIX global tracking framework. Again, this is a proposal, and I only claim partial knowledge of each detector when assigning data members and methods. The methods listed are only provided as initial suggestions and are meant to be added to. Please, feel free to suggest modifications, additions, removals, etc. in order to match the expected scope of the software for each upgrade detector. In addition, many pieces are not discussed here, such as calibration software, online monitoring software, evaluation software, and event displays. We may also want to extend the framework for track models. However, once the basic framework is layed down, the additional pieces should plug in more easily.

  3. Generic Detector Software Flowchart Geometry (tpcGeometry, svxGeometry, hbdGeometry) GEANT hits (tpcghit,svxghit, hbdghit) Raw Data (tpcPad,svxStrip, hbdPad) Hit reconstruction Detector response simulator Reconstructed hits (tpcCluster, svxCluster, hbdBlob) Detector tracking simulator Track reconstruction Reconstructed tracks (tpcTrack, svxSegment, hbdElectron) Global tracking, kink finding, V0 finding, etc.

  4. Geometry .tpcGeometry. One entry only Data members: float innerRadius; // inner radius of shell float outerRadius; // outer radius of shell float zHalfWidth; // extent in +/- zWidth int nPadRows; // number of pad rows float padRowDeltaR; // radial span of a pad row float padRowRadius[]; // middle of pad row radius int nSectors; // number of sectors float phiSector0; // azimuth of LHS sector 0 int padGeometryType; // 0=linear, 1=radial, etc. float padSizeXY[2]; // pad size in centimeters PHCylinder tpcShell; // description of cell PHCylinder tpcPadRow[]; // description of each row Methods: get_ and set_ methods for all data members. fetchFromDatabase(); // get geo from database fetchFromFile(); // get geo from ASCII file fetchFromIdeal(); // construct ideal geometry

  5. Geometry .hbdGeometry. One entry only Data members: float innerRadius; // inner radius of shell float outerRadius; // outer radius of shell float zHalfWidth; // extent in +/- zWidth float cathodeDeltaR; // radial span of cathodes float cathodeRadius[]; // inner radius of cathodes int nSectors; // number of sectors float phiSector0; // azimuth of LHS sector 0 float padSizeXY[2]; // pad size in centimeters PHPanel hbdCathodes[]; // description of cathodes Methods: get_ and set_ methods for all data members. fetchFromDatabase(); // get geo from database fetchFromFile(); // get geo from ASCII file fetchFromIdeal(); // construct ideal geometry

  6. Geometry .svxGeometry. One entry only Data members: int nBarrelLayers; // number of layers in barrel int nBarrelSectors; // number of sectors per layer int nBarrelPanels; // number of panels per sector float barrelRadius[]; // radius of each barrel layer int nEndcapLayers; // number of endcap layers int nEndcapPanels; // # of endcap panels per layer PHPanel svxPanel[]; // description of each panel Methods: get_ and set_ methods for all data members. fetchFromDatabase(); // get geo from database fetchFromFile(); // get geo from ASCII file fetchFromIdeal(); // construct ideal geometry

  7. GEANT Hits .tpcghit. Inherits from PHTable One entry per sensitive volume intersection. Data members: int id; // primary key int side; // 0=South, 1=North int sector; // range: 0-15 int padRow; // range: 0-34 float xyzInLocal[3]; // local xyz entry float xyzOutLocal[3]; // local xyz exit float xyzInGlobal[3]; // global xyz entry float xyzOutGlobal[3]; // global xyz exit float tofIn, tofOut; // time-of-flight float pathLength; // path length float dedx; // energy loss Methods: get_ and set_ methods for all data members.

  8. GEANT Hits .hbdghit. Inherits from PHTable One entry per sensitive volume intersection. Data members: int id; // primary key int side; // 0=South, 1=North int sector; // range: 0-7? float xyzInLocal[3]; // local xyz entry float xyzOutLocal[3]; // local xyz exit float xyzInGlobal[3]; // global xyz entry float xyzOutGlobal[3]; // global xyz exit float tofIn, tofOut; // time-of-flight float pathLength; // path length float dedx; // energy loss Methods: get_ and set_ methods for all data members.

  9. GEANT Hits .svxghit. Inherits from PHTable One entry per sensitive volume intersection. Data members: int id; // primary key int section; // 0=South, 1=North, 2 = barrel int layer; // layer number int sector; // sector number int panel; // range: 0-? float xyzInLocal[3]; // local xyz entry float xyzOutLocal[3]; // local xyz exit float xyzInGlobal[3]; // global xyz entry float xyzOutGlobal[3]; // global xyz exit float tofIn, tofOut; // time-of-flight float pathLength; // path length float dedx; // energy loss Methods: get_ and set_ methods for all data members.

  10. Raw Data .tpcPad. One entry per readout pad Data members: int id; // primary key int side; // 0=South, 1=North int sector; // range: 0-15 int padRow; // range: 0-34 int padNumber; // variable range int adc[]; // ADC value per time bin Methods: get_ and set_ methods for all data members. fetchFromSimulation(); // run response sim fetchFromData(); // unpack from data calcIdFromPadNumber(); // pad number to id calcPadNumberFromId(); // id to pad number PHPanel fetchPosition(); // fetch the pad position

  11. Raw Data .hbdPad. One entry per readout pad Data members: int id; // primary key int side; // 0=South, 1=North int sector; // range: 0-7? int padNumber; // variable range int adc; // ADC value Methods: get_ and set_ methods for all data members. fetchFromSimulation(); // run response sim fetchFromData(); // unpack from data calcIdFromPadNumber(); // pad number to id calcPadNumberFromId(); // id to pad number PHPanel fetchPosition(); // fetch the sector position

  12. Raw Data .svxStrip. One entry per readout strip Data members: int id; // primary key int section; // 0=South, 1=North, 2=barrel int layer; // range 0-3 int sector; // sector or side number int panel; // range: 0-? int strip; // range: 0-? int adc; // ADC value Methods: get_ and set_ methods for all data members. fetchFromSimulation(); // run response sim fetchFromData(); // unpack from data PHPanel fetchPosition(); // return the strip geometry

  13. Reconstructed Hits .tpcCluster. One entry per reconstructed cluster Data members: int id; // primary key int side; // 0=South, 1=North PHPoint xyzPosition; // global coord. of centroid PHPoint xyzExtent; // St dev in xyz Methods: get_ and set_ methods for all data members. fetchFromSimulation(); // run hit reco sim fetchFromData(); // run hit reconstruction calcPadNumberFromPosition(); // get side/row/pad

  14. Reconstructed Hits .tpcClusterData. Inherits from tpcCluster One entry per reconstructed cluster Data members: int nTimeBins; // total number of time bins PHPointerList<tpcPad> padList; // list of pad numbers PHPointerList<int> timeBinList; // list of time bins Methods: get_ and set_ methods for all data members.

  15. Reconstructed Hits .tpcClusterSim. Inherits from tpcCluster One entry per simulated cluster Data members: int nSimHits; // total number of GEANT hits PHPointerList<tpcghit> simHitList; // list of GEANT hit id's Methods: get_ and set_ methods for all data members.

  16. Reconstructed Hits .hbdBlob. One entry per reconstructed blob Data members: int id; // primary key int side; // 0=South, 1=North int sector; // sector 0-7? float adcSum; // total signal in blob PHPoint xyzPosition; // global coord. of centroid PHPoint xyzExtent; // St dev in xyz Methods: get_ and set_ methods for all data members. fetchFromSimulation(); // run hit reco sim fetchFromData(); // run hit reconstruction calcPadNumberFromPosition(); // get side/row/pad

  17. Reconstructed Hits .hbdBlobData. Inherits from hbdBlob One entry per reconstructed blob Data members: int nPads; // total number of pads PHPointerList<hbdPad> padList; // list of pad numbers Methods: get_ and set_ methods for all data members.

  18. Reconstructed Hits .hbdBlobSim. Inherits from hbdBlob One entry per simulated blob Data members: int nSimHits; // total number of GEANT hits PHPointerList<hbdghit> simHitList; // list of GEANT hit id's Methods: get_ and set_ methods for all data members.

  19. Reconstructed Hits .svxCluster. One entry per reconstructed cluster Data members: int id; // primary key int section; // 0=South, 1=North, 2=Barrel int layer; // range: 0-3 int sector; // sector number int panel; // panel number PHPoint xyzPosition; // global coord. of centroid PHPoint xyzExtent; // St dev in xyz Methods: get_ and set_ methods for all data members. fetchFromSimulation(); // run hit reco sim fetchFromData(); // run hit reconstruction calcStripNumberFromPosition(); // get strip id

  20. Reconstructed Hits .svxClusterData. Inherits from svxCluster One entry per reconstructed cluster Data members: int nStrips; // total number of strips PHPointerList<svxHit> svxHitList; // list of strips in hit Methods: get_ and set_ methods for all data members.

  21. Reconstructed Hits .svxClusterSim. Inherits from svxCluster One entry per simulated cluster Data members: int nSimHits; // total number of GEANT hits PHPointerList<svxghit> simHitList; // list of GEANT hit id's Methods: get_ and set_ methods for all data members.

  22. Reconstructed Tracks .tpcTrack. Inherits from PHTrack One entry per reconstructed track Data members: int id; // primary key int trackModel; // -1=sim, 0=line, 1=helix... PHPoint endPoint0; // reference point PHPoint endPoint1; // outer end-point float trackParameters[]; // track model parameters float qualityFlag; // quick look quality float chi2; // chi2 of model fit int charge; // charge of the track PHVector momentum; // 3-momentum of track float dEdx; // total dE/dx int nClusters; // number of clusters PHPointerList<tpcCluster> clusterList; // list of clusters in track PHMatrixN covariance; // covariance matrix Methods: get_ and set_ methods for all data members. perfectTracker(); // GEANT to tpcTrack linearTracker(); // no B-field linear tracks kalmanTracker(); // Kalman filter tracking

  23. Reconstructed Tracks .svxSegment. Inherits from PHTrack One entry per reconstructed track Data members: int id; // primary key int trackModel; // -1=sim, 0=line, 1=helix... PHPoint endPoint0; // reference point PHPoint endPoint1; // outer end-point float trackParameters[]; // track model parameters float qualityFlag; // quick look quality float chi2; // chi2 of model fit int charge; // charge of the track PHVector momentum; // 3-momentum of track float dEdx; // total dE/dx int nClusters; // number of clusters PHPointerList<svxCluster> clusterList; // list of clusters in track PHMatrixN covariance; // covariance matrix Methods: get_ and set_ methods for all data members. perfectTracker(); // GEANT to tpcTrack linearTracker(); // no B-field linear tracks kalmanTracker(); // Kalman filter tracking

  24. Reconstructed Hits .cglVertexTrack. Inherits from PHTrack One entry per reconstructed global track Data members: int nSvxSegments; // number of svx segments int nHbdBlobs; // number of HBD blobs int nTpcTracks; // number of TPC tracks PHPointerList<svxSegments> svxSegmentList; // list of svx track segments PHPointerList<hbdBlobs> hbdBlobList; // list of HBD blobs PHPointerList<tpcTracks> tpcTrackList; // list of TPC tracks int trackModel; // track model float chi2; // total chi-square PHMatrixN covariance; // covariance matrix float charge; // charge PHVector momentum; // momentum float pid; // particle ID guess? Methods: get_ and set_ methods for all data members. KalmanTracking(); // kalman track method

  25. Integration into the PHENIX Global Tracking Framework The anchor for the PHENIX inter-detector association framework is the object called PHTrack. This has been designed with the PHENIX multi-system, non-uniform magnetic field environment in mind. All end-product tracks from a subsystem or collection of subsystems should inherit from PHTrack in order to bring its utilities into play and make it seamless to connect the upgrade detector information to the central arm spectrometer information. I am not yet familiar with the muon arm design, but I do hope that it closely follows the central arm spectrometer design. PHTrack contains several virtual methods, which means that the functionality has to be provided by the inheriting class. Methods to be provided include projections to every other detector in PHENIX, path length calculations, and geometry definitions for display. I am assuming that methods for the upgrade detectors will be added to the PHTrack base class as they become available. Not included here are other upgrade tracking options such as V0 vertex finding, kink finding in the TPC, etc.

  26. PHTrack PHENIX central arm global track base class Data members: PHPolyLine polyLine; // the shape of the track long trackIndex; // Pointer to CglTrack short arm; // Arm number PHPolyLine projections; // Calculated projections PHPolyLine projErrors; // Projection errors PHPointerList<PHVector> directions; // List of vectors at projections PHPointerList<PHBoolean> ifIntersect; // Flags for intersection tests Virtual methods include: PHBoolean projectToVertex(PHLine&, PHPoint&) PHBoolean projectToDch (PHLine&, PHPoint&) PHBoolean projectToPc1 (PHLine&, PHPoint&) PHBoolean projectToPc2 (PHLine&, PHPoint&) PHBoolean projectToPc3 (PHLine&, PHPoint&) PHBoolean projectToCrk (PHLine&, PHPoint&) PHBoolean projectToTec (PHLine&, PHPoint&) PHBoolean projectToTof (PHLine&, PHPoint&) PHBoolean projectToPbSc (PHLine&, PHPoint&) PHBoolean projectToPbGl (PHLine&, PHPoint&) double pathLengthToCrk() = 0; double pathLengthToTof() = 0; double pathLengthToEmc() = 0;

More Related