PXL material for Sti

Related code is StRoot/StiRnD/Hft/StiHftDetectorBuilder
  const VolumeMap_t PxlVolumes[] = 
    { 
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA","",""},
      {"GLUB","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUB","",""},
      {"GLUC","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUC","",""},
      {"ALCA","Aluminum Cable volume",      "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/ALCA","",""},
      {"CFBK","Carbon Fiber BacKing volume","HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/CFBK","",""},
      {"DRIV","Driver Board",               "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/DRIV","",""}
      {"PXSI","mother silicon volume",      "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1","",""},
      {"PLAC","Active silicon volume",      "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1","",""}
    };
This way of listing the PXL volumes in the code (see above) gives a lot of errors, for all volumes (see below) :
StiMaker:ERROR - TGeoNavigator::cd : Path HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_2/LADR_1/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_2/LADR_2/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_2/LADR_3/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_2/LADR_4/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_4/LADR_1/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_4/LADR_2/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_4/LADR_3/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_4/LADR_4/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_7/LADR_1/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_7/LADR_2/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_7/LADR_3/GLUA_1 not valid
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA/PXLA_7/LADR_4/GLUA_1 not valid
StiMaker:ERROR - TGeoNavigator::cd : Path HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUB not valid

1) StiTpcDetectorBuilder is doing the following :
{"TPAD","inner pad row","HALL_1/CAVE_1/TPCE_1/TPGV_%d/TPSS_%d/TPAD_%d","tpc",""},// <+++
    {"TPA1","outer pad row","HALL_1/CAVE_1/TPCE_1/TPGV_%d/TPSS_%d/TPA1_%d","tpc",""},
    {"tpad","all pad rows","/HALL_1/CAVE_1/TpcRefSys_1/TPCE_1/TpcSectorWhole_%d/TpcGas_1/TpcPadPlane_%d/tpad_%d","tpc"} // VMC
The result looks the same : 
StiMaker:DEBUG -  # of volume(s) : 8 
StiMaker:ERROR - TGeoNavigator::cd : Path HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA not valid 
StiMaker:DEBUG -  current node : 0/8 path is : GLUA
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_2/LADR_1/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_2/LADR_2/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_2/LADR_3/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_2/LADR_4/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_4/LADR_1/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_4/LADR_2/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_4/LADR_3/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_4/LADR_4/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_7/LADR_1/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_7/LADR_2/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_7/LADR_3/GLUA_1 not valid 
StiMaker:ERROR - TGeoManager::MakePhysicalNode : path: HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUA/PXLA_7/LADR_4/GLUA_1 not valid 
StiMaker:ERROR - TGeoNavigator::cd : Path HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_%d/LADR_%d/GLUB not valid 


2) StiSsdDetectorBuilder seems to take the average of the ladder :
const VolumeMap_t SsdVolumes[] = { 
    // SSD
    {"SFLM","the mother of the ladder","HALL_1/CAVE_1/SVTT_1/SFMO_1/SFLM_1-20/*","",""}              //  0.546171 [kg]
This way does not work with the PXL (?). It seems that the wild card ✭ is not liked

3) modification
In the code :

  const VolumeMap_t PxlVolumes[] = 
    { 
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_2/LADR_1/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_4/LADR_1/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_7/LADR_1/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_2/LADR_2/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_4/LADR_2/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_7/LADR_2/GLUA_1","",""},   
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_2/LADR_3/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_4/LADR_3/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_7/LADR_3/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_2/LADR_4/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_4/LADR_4/GLUA_1","",""},
      {"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_7/LADR_4/GLUA_1","",""},
instead of
{"GLUA","Glu volume",                 "HALL_1/CAVE_1/TpcRefSys_1/IDSM_1/PXMO_1/PXLA_1-10/LADR_1-4/GLUA","",""},
Sti is no more complaining about volumes not valid . I think the reason it works is because we only have sectors 2-4-7 not 1 to 10

4) test after modification

The idea is to look at the difference McPt and RcPt. If the material is not well estimated (or if Sti thinks there is no PXL), then Pt of tracks should not (less) suffer from MCS. It should be seen in the difference of McPt and RcPt because one (RcPt) in that case will not be evaluated correctly.

Simulation : 50 events with 100 pions generated with y2013_1 (with PXL) and y2013_2 (w/o PXL)
REsults : look at .minimc.root and plot : mMatchedPairs.mPtPr - mMatchedPairs.mPtMc):mMatchedPairs.mPtMc

a) with PXL
BFC chain : tpcRS y2013_1 MakeEvent ITTF StiRnD PixelIt NoSsdIt NoSvtIt pxlDb pxlFstSim Idst BAna l0 ftpc pmd Tree logger Sti genvtx tpcDB TpcHitMover TpxClu bbcSim btofsim tags emcY2 EEfs evout -dstout IdTruth geantout big fzin MiniMcMk clearmem


b) w/o PXL
BFC chain : tpcRS y2013_2 MakeEvent ITTF NoSsdIt NoSvtIt Idst BAna l0 ftpc pmd Tree logger Sti genvtx tpcDB TpcHitMover TpxClu bbcSim btofsim tags emcY2 EEfs evout -dstout IdTruth geantout big fzin MiniMcMk clearmem