EVAL branches

Documentation for EVAL library branches

StiHFT_1b branch tag

  • October 29, 2014
    branch StiHFT_1b of DEV library has been created under EVAL library name.

    Next codes have been updated:

    StRoot
    StarRoot
    THelixTrack.cxx, THelixTrack.h - rewritten version of THelixTrack. Main algorithm was not changed, changed only selection of coordinate system. Old approach, based on few points was not stable enough. New approach is based on construction of 2d matrix of and calculation of eigen vectors. New coordinate system is based on these vectors. It is more stable because not a few points are used but all of them. Performance should not be changed;
    Sti
    StiCompositeTreeNode.h - removed not used definition;
    StiDetector.h - added 'insideL()' mode and 'inside()' for the global space point;
    StiDetector.cxx - in method 'insideL()' suppressed all checks, apart from X or Rxy; in method insideL() also added check for environment variable "insideAssert", if it is not defined 'insideL()' always returns 1 to avoid asserts in production;
    added mode 'StiDetector::insideL(const double xl[3],int mode=0)';
    added new method 'StiDetector::inside(..)' to check global points;
    changed the mode in inside(s) means now 1 + 2 + 4 == chackX(or R) + checkY(or Phi) + checkZ ;
    StiDetector.cxx, StiDetector.h - method 'setProperty()' added;
    method 'getCenterX()' added. It returns some X value of shape in local coordinate. When, after refit, track is missing detector, we still keep this node. Now point of node is dca point to (centerx,0) and parameters with errors are calculated in this point;
    modified to rename inside(...) to insideG( ) to show that arguments are global;
    StiDetectorBuilder.h - added new method AverageVolume. It uses TGeo volumes for averaging. The old method uses TGeoPhysical volumes;
    method AveMate added to calculate average material; method MakeAverageVolume replaced the old one, to keep the same user interface;
    updated to account 'MANY' & 'SENSitive';
    made methods 'void AverageVolume(TGeoPhysicalNode *nodeP)' and 'int AverageVolume(const char *fullPath)' not virtual anymore;
    added method 'int Diff(const char *path, const StiDetector *sVolu)', t compares the TGeoVolume with StiDetector and returns 0 if everything is correct;
    method AveMateR added which does the same as AveMate but using random points; correct all "MULTY" accounted properly; for method 'diff()' added mode '0=AveMate' ;
    changed inside (..,mode) mode=1+2+3 check X+Y+Z;
    set cpp flag to keep ofl average temporary;
    StiDetectorBuilder.cxx - added seed comments; replaced printf to Error() and Warning(); fixed bug in evaluation of si zes of averaged volumes; added Error messages in case 'MANY' and 'sensetive' ;
    modified to move down check for determinant==1; assert for 'Geant Weight == StiWeight' temporary removed;
    method 'Diff' was added, it checks for random space points which belongs to TGeoVolume;
    added test for reflection, reflection is legal in Geant but was not accounted in Sti volume averaging, fixed;
    eigen values normalized per number of points (8);
    method AveMateR added which does the same as AveMate but using random points; correct all "MULTY" accounted properly; for method 'diff()' added mode '0=AveMate' ;
    modified to check inside all boundaries;
    modified to rename inside() ==> inside();
    StiDetectorBuilder.h, StiDetectorBuilder.cxx - added new method to save graphic structure of Sti geometry into file to draw it afterwards ;
    StiDetectorContainer.cxx - removed TPC oriented check, which does not allow usage of non Tpc hits in Seed finders, now all hits could be used in Seed finders; replaced assert with warning;
    StiKalmanTrackFinder.cxx - made in layer loop getNormalRadius() ==> getLayerRadius(); modified to use only normalRadius for ordering; two loops now used to search volumes;
    - 1st one searching only active volumes;
    - 2nd one searching non active volumes, when 1st loop was useless;
    This is activated ONLY when environment variable "activeNonActiveLoop"=1;
    Assert added to check that Rxy>=Rnormal (related to bug #2915);
    'nudge(hit)' added after hit setting to move node to hit;
    modified to change getNormalRefAngle ==> getLayerAngle in find();
    modified to change OpenAngle ==> OpenAngle/2 in find();
    modified to change kEnded ==> kFailed;
    StiKalmanTrackNode.cxx - assert added for tubes Rxy == Rnormal (bug #2915); added check for Hz, Hz==>fabs(Hz) to account negative Hz; added check for cos>1 ;
    modify to distinguish planar and cylindrical shapes in 'Propagate to volume' (fixed bug #2915); method 'nudge()' was rewritten, for complicated cases THelixTrack used. Check for kFarFromBeam put back (was removed by mistake);
    modified to use linear approximation in 'nudge()' if shift < 0.01 curvature;
    method propagate(double xk, ...) rewritten to account cases which was omitted in previous version as non important;
    removed over complicated and not used logics of "edges" :
    - kEdgePhiPlus, kEdgeZminus, kEdgePhiMinus, kEdgeZplus,
    - kMissPhiPlus, kMissZminus, kMissPhiMinus, kMissZplus,
    and use instead only:
    kFailed = -3, kTooFar = -2, kEnded = -1, kHit = 0
    best solution saved into mygP and myFP, and only at the end the best is into mgP and mFPcopied;
    modified to decrease strongness of assert. 1e-4 ==> 1e-3;
    bug fixed sind ==> sind/cosd ;
    modified to replace assert(fabs(mFP._sinCA)<1e-3) -> assert(fabs(mFP._sinCA)<1e-2); it is related to changes in mag field for curvature about 10cm;
    modified to split cylindrical shape into two: full cylinder & sector of cylinder. Full cylinder could be rotated many times, sector can not. Very detailed setting of _state removed, kept only valid or not. 'mMtx' is used only for error propagation, not error rotation. For error rotation used StiNodeErrs::rotate; In StiKalmanTrackNode::isDca() check for detector == 0 added. All inline rotations moved into methods rotate(...) ;
    replaced kFarFromBeam 10 ==> 2 ;
    modified to implement the same rotation for kCylindric & kSector. Angles StiKalmanTrackNode:alpha and StiPlacement::alpha are not the same now;
    replaced 'locate()' ==> 'inside()';
    method insifeG(...) added;
    StiKalmanTrackNode.h - new insides's added; inside(mode) used xyz of node; inside(x,y,mode) used x,y only; inside(x[3],mode) used external x,y,z but locale to this node;
    renamed 'inside()' methods to use 'inside()' & 'inside()';
    StiKalmanTrackNode.h, StiKalmanTrackNode.cxx - new method ['isPrimary()' added; new member '_wallx' added;
    StiLocalTrackSeedFinder.cxx - assert removed, it was related to tpc hits that can not be closer in x than 1e-3, added instead 'if (dr<1e-4) return false';
    StiHits.cxx - modified to make larger tolerance (>= 1mm) for hits out of volume boundary;
    StiMaterial.cxx - added ionization=1946;
    StiPlacement.cxx - cleanup;
    removed defaults in setNormRep, moved to constructor;
    StiTrackNode.cxx - introduced more accurate selection of correct solution in 'cylCross';
    asserts with 'sign()' of error matrix commented out;
    method 'cylCross()' rewritten again to account more cases;
    'recov()' method modified;
    added loop while(err matrix non positive), decrease correlations;
    modified to decrease maximum correlation from 0.99 ==> 0.999 ;
    StiTrackNode.h, StiTrackNode.cxx - StiNodeErrs::rotate() added;
    StiVMCToolKit.h, StiVMCToolKit.cxx - added new method 'LoopOverVolumes' which is based on TGeo (not TGeoPhysical ); old one is kept, but due to different signature, is not called'
    updated to account 'MANY' & 'SENSITIVE';
    StiCylindricalShape.h - cleanup;
    introduced two cylindrical shapes: kCylindrical for full cylinder and kSector for cylindrical sector;
    StiKalmanTrack.cxx - in method 'refitL()' added additional loop to test nodes for inside/outside; for debugging call of 'nudge()' added to move node position onto detector plane, if failed node defined as invalid;
    in method 'refitL()' check for inside() lead to stop tracking which was wrong, now it was fixed and if track after refit missed the volume tracking was not stop;
    removed any influence of 'nudge()' to refit;
    removed 'getNearBeam()' method and use 'dcaNode()' instead;
    'Assert' for accuracy decreased from 1e-6 to 1e-4; if inner node not found, return with error; 'Assert' added when found Xi2 > maxXi2 after refit;
    test for vertex replaced by test for detector;
    StiKalmanTrack.h - removed 'getNearBeam()' method;
    StiKalmanTrackFinder.cxx - assert inside() added instead of previous tube check;
    StiTrackNodeHelper.cxx - fixed bug caused by that energy loss was not defined in the case of Vacuum;
    added account of tube shape in propagation;
    modified propagatePars to use zero path if track missed volume after refit;
    bug fixed sind ==> sind/cosd ;
    method 'StiTrackNodeHelper::propagatePars' splitted into old one 'propagateParsA()' and new one 'propagateParsB()' temporary. New method rotates only cylindrical shape, not sector one, as it was before;
    added test for 'isPrimary()' ;
    StiTrackNodeHelper.h - renamed all the class variables adding 'm' at the beginning to avoid misinterpreting;
    StiTrackNodeHelper.cxx, StiTrackNodeHelper.h - introduced '_wallx';
    modified to use averaged curvature for THelixTrack;
    made both kCylindric & kSector rotated now;
    mX1 recalculated because detector was slightly rotated;
    StiNodePars.h - method 'double &phi() == eta()' added ;
    StiNodePars::rotate() added;
    StiShape.h, StiShape.cxx - replaced StiCylindrical ==> StiCylindrical & StiSector;
    StiUtilities
    StiDebug.h, StiDebug.cxx - save histograms method added;
    StiMaker
    StiMaker.cxx - modified to remove redundant inputFile;
    modified to make only TPC as default;
    StiMaker.cxx, StiMaker.h - added new method 'finishTracks(int gloPri)' :
    - loop over nodes;
    - moved node to the center volume along x or r local;
    - if StiDebug::mgGlobal >1 create a set of technical histograms;
    save histograms method added for debug ;
    StiIst
    StiIstDetectorBuilder.cxx - modified to use the global transformation unrolled all the way to the top node instead of local transformation to the first mother volume;
    modified to switch to the same names as in StiPxlDetectorBuilder;
    switched to natural numbering scheme as in StiPxlDetectorBuilder;
    modified to use the center sensor (or the one close to the center) to build the unified sensor layer in Sti;
    removed ionization from StiMaterial constructor as it is not used anywhere including energy loss calculations;
    refactored gas material definition (For the gas surrounding the detector we use air properties as defined in global geometry manager. If the AIR material is not available we use default hardcoded properties);
    modified to switch to StiMaterial constructor that accepts the radiation length as is. The desctription of the constructor is very poor but there is no need to multiply it by the density;
    removed debugging function used for testing of manually modified volumes;
    modified to access transformation matrices directly via StIstDb object;
    removed deprecated calls to dummy methods;
    set detector group ID at detector builder level. The detector ID-s for individual Sti detectors are set when the detector is added to the builder;
    modified to resize the detector container (std::vector) when new detectors are added;
    modified to use the middle sensor on the ladder to extract alignment corrections from DB ;
    modified to get sensitive IST volumes from the global TGeoManager in a manner similar to PXL and SST detector builders;
    removed pointless check for valid gas surrounding detectors in this builder. The gas is set right in this class anyway;
    renamed a bunch of local variables just to be consistent with the other detector builders;
    StiIstDetectorBuilder.cxx, StiIstDetectorBuilder.h - removed definition and addition of "hybrid" material because it is not used anywhere ;
    refactored silicon material definition for sensitive layers.Only silicon material is used in construction of sensitive layers. As with the gas we first try to use the material definition in the global geometry manager. If the SILICON material is not available default hardcoded properties are used;
    added flag similar to PXL to build ideal geometry for IST and SST. By default (buildIdealGeom = false) the database transformations are used in all StiXxxDetectoGroup-s;
    StiIstDetectorBuilder.cxx, StiIstDetectorBuilder.h, StiIstDetectorGroup.cxx, StiIstDetectorGroup.h - minor stylistic changes in comments; removed unused and irrelevant included headers; got rid of std namespace;
    implemented simplified Sti geometry for inactive material in IST;
    added a couple of helper methods to ease manual construction and placement of inactive volumes;
    made buildInactiveVolumes() method inheritable; changed helper function declaration to static;
    fixed loop over ladders;
    defined placement for sensitive IST layers in a way consistent with PXL and SSD detector builders;
    removed never used variable, forward declarations, and header includes;
    removed warning for extremely unlikely exception when a new StiDetector is not constructed by Sti detector factory. Such situations need to be treated in a way other than simply issuing a warning;
    removed methods which will not be used by the new builder;
    appended new Sti detectors to the end of detector container, and use ladder id to index sector slots;
    added parameter to choose IST detector builder. This is justified by the requirement of backward compatibility. The user can choose the appropriate option in case there is a need to reconstruct the data using an older detector builder;
    StiIstDetectorBuilder1.cxx, StiIstDetectorBuilder1.h - added new files to save current version of StiIstDetectorBuilder in order to maintain 100% backward compatibility. The user may choose to construct the IST detector with the older version by simply propagating an option to StiIstDetectorGroup. StiIstDetectorBuilder1 inherits from StiIstDetectoBuilder to avoid duplicate code. Removed implementation of inherited methods and other irrelevant declarations;
    StiIstDetectorBuilder.cxx, StiIstDetectorBuilder.h, StiIstHitLoader.cxx, StiIstHitLoader.h - updated with commits made to main CVS on Jan 06 :
    - added an accessor to access active StiDetectors, i.e. volumes which may have hits associated with them; modified to make use of the accessor for sensitive Sti detector/volumes;
    - simplified debug output by reusing existing streamers of StHit class and its daughters;
    - cleaned up forward declarations to include only the used classes; removed useless data members;
    - removed output debug messages as they can be easily replaced by a single call to StiDetectorBuilder::Print();
    - instead of setting StiDetector parameters in a local private method switched to using new interface provided by StiDetector; the refactoring took place for both sensitive and inactive volumes;
    - increased density of manually constructed IST brackets in Sti; the effective bracket density have to be muliplied by the number of ladders;
    StIstDbMaker
    StIstDbMaker.cxx - replace endl -> endm in STAR Logger messages;
    StIstDb.cxx, StIstDb.h, StIstDbMaker.cxx, StIstDbMaker.h - modified getter for sensors transormation matrix to accept ladder and sensor id-s using human friendly numbering starting with 1. The input values outside of possible ranges will return a null pointer;
    added flags to indicate DbMaker readiness; return fatal if database tables are not found;
    added method to access transformation matrix for a given IST ladder/sensor pair; set class version to 0 in order to avoid IO dictionary generation by ROOT's CINT. STAR makers are not persistent;
    clean-up coding style;
    StIstDb.cxx - corrected mapping of ladder/sensor to global aggregate sensor id. The global sensor index (id) used in the istSensorOnLadder DB table spans the range from 1001 to 1144 ;
    StIstUtil
    StIstClusterCollection.cxx, StIstClusterCollection.h, StIstCollection.h - modified to reflect changes in StIstDbMaker;
    StiPxl
    StiPxlDetectorBuilder.cxx - modified to use the global transformation unrolled all the way to the top node instead of local transformation to the first mother volume;
    modified to use the center sensor (or the one close to the center) to build the unified sensor layer in Sti;
    removed ionization from StiMaterial constructor as it is not used anywhere including energy loss calculations;
    refactored gas material definition (For the gas surrounding the detector we use air properties as defined in global geometry manager. If the AIR material is not available we use default hardcoded properties);
    modified to switch to StiMaterial constructor that accepts the radiation length as is. The desctription of the constructor is very poor but there is no need to multiply it by the density ;
    removed deprecated calls to dummy methods;
    set detector group ID at detector builder level. The detector ID-s for individual Sti detectors are set when the detector is added to the builder;
    modified to resize the detector container (std::vector) when new detectors are added;
    modified to use the middle sensor on the ladder to extract alignment corrections from DB ;
    removed unutilized code;
    StiPxlDetectorBuilder.cxx, StiPxlHitLoader.cxx - modified to split PXL sensitive layers in two halves. The change should help to avoid track backward steps in Sti due to ill ordered volumes in r and phi;
    StiPxlHitLoader.cxx - modified to use local x rahter than row number to distribute hits into different half ladders;
    StiPxlDetectorBuilder.cxx, StiPxlDetectorBuilder.h - removed definition and addition of "hybrid" material because it is not used anywhere;
    refactored silicon material definition for sensitive layers (Only silicon material is used in construction of sensitive layers. As with the gas we first try to use the material definition in the global geometry manager. If the SILICON material is not available default hardcoded properties are used);
    StiPxlDetectorBuilder.cxx, StiPxlDetectorBuilder.h, StiPxlDetectorGroup.cxx, StiPxlDetectorGroup.h - minor stylistic changes in comments; removed unused and irrelevant included headers; got rid of std namespace;
    StiPxlDetectorBuilder.cxx, StiPxlDetectorBuilder.h, StiPxlHitLoader.cxx StiPxlHitLoader.h - updated with commits made to main CVS on Jan 06 :
    - attempted to make a clear translation between the natural (sector/ladder/sensor) and Sti numbering schemas;
    - added an accessor to access active StiDetectors, i.e. volumes which may have hits associated with them; modified to make use of the accessor for sensitive Sti detector/volumes
    - simplified debug output by reusing existing streamers of StHit class and its daughters;
    - switched to method that converts geo sensor id to Sti layer indices;
    - added a private method to convert natural/geo sensor id to Sti layer indices;
    - cleaned up forward declarations to include only the used classes; removed useless data members;
    - removed output debug messages as they can be easily replaced by a single call to StiDetectorBuilder::Print();
    - instead of setting StiDetector parameters in a local private method switched to using new interface provided by StiDetector; the refactoring took place for both sensitive and inactive volumes;
    - re-implemented segmentation of PXL sensor to two halves. In the sensor's local coordinate system the first half is for x<0 and the second one is for x> . The notion of inner and outter halves is not critical and in fact confusing because it depends on the original rotation around the z axis. - modified to avoid setting StiDetector members _key1 and _key2 as they are not really used anywhere;
    StiSsd
    StiSstDetectorBuilder.cxx - removed ionization from StiMaterial constructor as it is not used anywhere including energy loss calculations;
    refactored gas material definition (For the gas surrounding the detector we use air properties as defined in global geometry manager. If the AIR material is not available we use default hardcoded properties);
    refactored useVMCGeometry() to build sensitive Sti layers in the same way as in PXL and IST detectors;
    created model of SST inactive material using the mother volume;
    modified to switch to StiMaterial constructor that accepts the radiation length as is. The desctription of the constructor is very poor but there is no need to multiply it by the density ;
    redefined StiMaterial for the segmented SST mother volume (SFMO) ;
    modified to use transformation matrices for sensitive layers from database when non-ideal geometry is requested ;
    modified to adjust material properties for the modified SFMO volume. Scaled the density to match the increase in the inner radius (to avoid overlap with sensitive layers);
    modified to use different names for SFMO end tube volumes;
    modified to avoid using of material averaging routine as the inactive material is entirely constructed by hand;
    created 9 tubes (Sti detectors) to describe the material distribution in SST;
    modified to increase the inner radius of the central tube by 0.85 cm to avoid overlap with sensitive layers; scaled the density of this volume accordingly by keeping mass constant;
    set detector group ID at detector builder level; the detector ID-s for individual Sti detectors are set when the detector is added to the builder;
    modified to resize the detector container (std::vector) when new detectors are added;
    modified to append new Sti detectors to the end of detector container, and use ladder id to index sector slots ;
    modified to use the middle sensor on the ladder to extract alignment corrections from DB;
    StiSstDetectorBuilder.h - modified to make auxilary methods available in derived classes ;
    StiSstDetectorBuilder.cxx, StiSstDetectorBuilder.h - removed definition and addition of "hybrid" material because it is not used anywhere;
    refactored silicon material definition for sensitive layers (Only silicon material is used in construction of sensitive layers. As with the gas we first try to use the material definition in the global geometry manager. If the SILICON material is not available we use default hardcoded properties );
    added a private method to split the SST mother volume into three tubes;
    modified to use object with direct access to database (mSstDb) instead of StSsdBarrel similar to PXL and IST detector builders;
    removed deprecated method;
    removed method 'segmentSFMOVolume()' because the inactive material is now built manually in 'buildInactiveVolumes()';
    added a private helper function hopefully as a temporary solution before StiDetector is modified;
    StiSstDetectorBuilder1.cxx, StiSstDetectorBuilder1.h - saved current StiSstDetectorBuilder in order to by maintain 100% backward compatibility;
    modified to make class inherit from StiSstDetectoBuilder and removed implementation of inherited methods and other irrelevant declarations;
    StiSsdDetectorBuilder.cxx, StiSstDetectorBuilder.cxx, StiSstDetectorBuilder1.cxx - removed deprecated calls to dummy methods;
    StiSstDetectorBuilder.cxx, StiSstDetectorBuilder.h, StiSstDetectorGroup.cxx, StiSstDetectorGroup.h - aded flag similar to PXL to build ideal geometry for IST and SST. By default (buildIdealGeom = false) the database transformations are used in all StiXxxDetectoGroup-s;
    minor stylistic changes in comments; removed unused and irrelevant included headers; got rid of std namespace;
    StiSstDetectorGroup.cxx, StiSstDetectorGroup.h - added parameter to choose SST detector builder;
    StiSsdHitLoader.h, StiSstDetectorBuilder.cxx, StiSstDetectorBuilder.h - updated with commits made to main CVS on Jan 06 :
    - removed output debug messages as they can be easily replaced by a single call to StiDetectorBuilder::Print();
    - instead of setting StiDetector parameters in a local private method switched to using new interface provided by StiDetector; the refactoring took place for both sensitive and inactive volumes;
    - modified to avoid setting StiDetector members _key1 and _key2 as they are not really used anywhere;
    StiUtilities
    StiDebug.h, StiDebug.cxx - for method 'tally' TObjArray replaced by 'std::map';
    StSsdDbMaker
    StSstDbMaker.cxx - modified to use different name to access transformation matrices. Perhaps R is the right name to use instead of WL;
    StSstDbMaker.cxx, StSstDbMaker.h - added method to access transformation matrix for a given SST ladder/sensor pair;
    StSsdUtil
    StSstConsts.h - added new header with SST constants similar to what we already have for PXL and IST;
     

    StarVMC
    Geometry/IstdGeo/IstdGeo1.xml - made changes to IST geometry to simplify placement of daughter volumes, remove MANY, eliminate overlaps between IBMO and other volumes under IDSM;
    Geometry/PixlGeo/PixlGeo6.xml, PxstGeo1.xml - made changes to pixel and supports to eliminate minor overlaps;
    Geometry/SisdGeo/SisdGeo7.xml - made fixes to the SSD geometry; changed SFLM to tube seg, removed one unneeded level, fixed overlaps;