NBI Software Development for the Brahms Analysis Toolkit Recent changes (12/09/00): Most of the changes concern detectors, tracking and pid, that is: - tof/ - tpc/ - track/ - pid/ Details: Time of Flight: --------------- The main changes in tof are in BrDigitizeTof and BrCalibrateTof. The symmetry H1, H2 / TOFW was somewhat broken because of the "not simple" geometry of TOFW. So far, each TOFW panel was treated in the way H1 or H2 were (for simulations). It has been changed so as to handle raw data (in which we don't explicitely have the panel information) and simulated data in the same way. For H1 and H2, the procedure is straightforward. For TOFW, we have: **Raw data: raw data table name: DigTof TOFW (BrDigTof objects) for futur calibration, declare: BrCalibrateTof* tof = new BrCalibrateTof("TOFW", "TOFW"); you'll get some tables named CalibratedTof TOFW **Simulated data: geant name: GeantHits TFP1 (BrGeantHit objects) -> maybe should be changed to "GeantHits TOFW" to digitize, declare: BrDigitizeTof* tof = new BrDigitizeTof("TOFW", "TOFW"); you'll get tables named: DigTof TOFW to calibrate, same as raw data. This can be achieved because each panel has the same properties (shape, number of slats, parameters, etc.) The "soft spot" of all that is: in a user code, when you need to know which panel you're working with (like in the pid for example), you need to declare 4 BrDetectorVolume (corresponding to the 4 panels): BrGeometryDbManager *gGeomDb = BrGeometryDbManager::Instance(); BrParameterDbManager *gParamDb = BrParameterDbManager::Instance(); BrDetectorVolume* fTofVol[4]; // TOFW panel volumes: fTofVol[0] = (BrDetectorVolume*)gGeomDb->GetDetectorVolume("BrDetectorVolume","TFP1"); fTofVol[1] = (BrDetectorVolume*)gGeomDb->GetDetectorVolume("BrDetectorVolume","TFP2"); fTofVol[2] = (BrDetectorVolume*)gGeomDb->GetDetectorVolume("BrDetectorVolume","TFP3"); fTofVol[3] = (BrDetectorVolume*)gGeomDb->GetDetectorVolume("BrDetectorVolume","TFP4"); in the event loop: once you get a hit in TOFW, you have to check the slat number, which can give you the corresponding panel: Int_t UserClass::GetPanel(Int_t slatno) { if (slatno > 0 && slatno < 22) return 0; else if (slatno >= 22 && slatno < 43) return 1; else if (slatno >= 43 && slatno < 64) return 2; else if (slatno >= 64 && slatno < 84) return 3; else { if (DebugLevel() > 0) cerr << " -->[Err:FindPanel] slatno [" << slatno << "] is out of range!" << endl; return -1; } } Once you have the panel, you can choose the right geometry by invoking fTofVol[panel]. For the parameters (BrDetectorParamsTof objects), this is less critical since the parameters are identical for each panel. This is the simplest way we found here at NBI to treat TOFW like H1 and H2 at least for the reconstruction. *************************************** TRACKING: --------- Local tracking (tpc/): We found that the RemoveOnePadClusters() would crash if there were no clusters because of a missing TList in BrTPCClusterTable. The TList now always exists although it might be empty. This is definitely related to the problems with BrTPCPreProcess that we experienced this summer and we believe that it should now work properly. *** Global tracking (track/): To get some global tracks in the front foreward spectrometer, some new classes have been written, namely: BrFFSTrackingModule, BrFFSTrack These classes are inspired from BrMRSTrackingModule and BrMRSTrack (except for the D1 part) since the system T1-D2-T2 can be treated like TPM1-D5-TPM2. The information concerning the entrance and exit points of the global track on the edge planes of the magnetic gaps is now available via the methods Double_t GetEntranceXDn() Double_t GetEntranceYDn() Double_t GetEntranceZDn() Double_t GetExitXDn() Double_t GetExitYDn() Double_t GetExitZDn() where n = 1,2 The coordinates you get are in the global coordinate system. *************************************** Particle Identification: ------------------------ The pid code has been revised so as to be more simple to use. Therefore, it has been split according to the spectrometer arm you're working on. brat classes: BrMRSPid BrFFSPid BrPidModule (in which you can add BrMRSPid and BrFFSPid to treat both) BrParticle (the old BrGeneratePid class is still available) test program: TestPid Some diagnostic histograms have been declared as private members of the class. The test program writes them in a file wich will contains 2 root directories: FFS/ and MRS/ You can also choose the option to write a root output file containing the result of the PID procedure (tables of BrParticle are added to the event objects). The BrParticle class has now new private members to improve the information concerning a given particle object. A more detailed note with plots will be soon available on the web at this address: http://www.nbi.dk/~ouerdane/pid.html Note: Should the BrHelix class be put in the geometry directory? Some pid stuff should be actually part of the global tracking. We are thinking about the restructure of the global tracking classes.