diff --git a/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilder.cxx b/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilder.cxx index a1c927350e470431133a438899e123da59e900fb..e8e30e959a0daadd32a6ed61a745a30defa4067c 100755 --- a/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilder.cxx +++ b/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilder.cxx @@ -1070,12 +1070,12 @@ const Trk::TrackingGeometry* Calo::CaloTrackingGeometryBuilder::trackingGeometry // the Tile Crack volume (TileGap3, enum 17) inserted here // binned material for Crack : steering in binEta // TODO turn into 2D binned array - std::vector<const Trk::IdentifiedMaterial*> matCrack; + std::vector<Trk::IdentifiedMaterial> matCrack; // layer material can be adjusted here int baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 17; - matCrack.push_back(new std::pair<const Trk::Material*,int>(mScint,baseID)); - matCrack.push_back(new std::pair<const Trk::Material*,int>(m_caloMaterial,-1)); - matCrack.push_back(new std::pair<const Trk::Material*,int>(mAl,-1)); + matCrack.emplace_back(mScint,baseID); + matCrack.emplace_back(m_caloMaterial,-1); + matCrack.emplace_back(mAl,-1); // Trk::BinUtility* bun = new Trk::BinUtility(3,-1.8,-1.2,Trk::open,Trk::binEta); Trk::BinUtility* bup = new Trk::BinUtility(3, 1.2,1.8,Trk::open,Trk::binEta); diff --git a/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilderCond.cxx b/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilderCond.cxx index f2a4f973f7f2ed37e952e29681258fd0d7898819..dfbf0cdb8da00ba21371cb25af927a951e2104a2 100755 --- a/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilderCond.cxx +++ b/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilderCond.cxx @@ -1080,12 +1080,12 @@ std::pair<EventIDRange, const Trk::TrackingGeometry*> Calo::CaloTrackingGeometry // the Tile Crack volume (TileGap3, enum 17) inserted here // binned material for Crack : steering in binEta // TODO turn into 2D binned array - std::vector<const Trk::IdentifiedMaterial*> matCrack; + std::vector<Trk::IdentifiedMaterial> matCrack; // layer material can be adjusted here int baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 17; - matCrack.push_back(new std::pair<const Trk::Material*,int>(mScint,baseID)); - matCrack.push_back(new std::pair<const Trk::Material*,int>(m_caloMaterial,-1)); - matCrack.push_back(new std::pair<const Trk::Material*,int>(mAl,-1)); + matCrack.emplace_back(mScint,baseID); + matCrack.emplace_back(m_caloMaterial,-1); + matCrack.emplace_back(mAl,-1); // Trk::BinUtility* bun = new Trk::BinUtility(3,-1.8,-1.2,Trk::open,Trk::binEta); Trk::BinUtility* bup = new Trk::BinUtility(3, 1.2,1.8,Trk::open,Trk::binEta); diff --git a/LArCalorimeter/LArTrackingGeometry/src/LArVolumeBuilder.cxx b/LArCalorimeter/LArTrackingGeometry/src/LArVolumeBuilder.cxx index dc65355f37ce18a9a262662a687529871a088e01..b452aca949de1d0fb438577d86ba0088fd4e8fdc 100755 --- a/LArCalorimeter/LArTrackingGeometry/src/LArVolumeBuilder.cxx +++ b/LArCalorimeter/LArTrackingGeometry/src/LArVolumeBuilder.cxx @@ -292,28 +292,28 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo // layer entry/exit // binned material for LAr : steering in binEta - std::vector<const Trk::IdentifiedMaterial*> matID; + std::vector<Trk::IdentifiedMaterial> matID; // layer material can be adjusted here int baseID = Trk::GeometrySignature(Trk::Calo)*1000; - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial,0)); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial,baseID+1)); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial,baseID+2)); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial,baseID+3)); + matID.emplace_back(lArBarrelMaterial,0); + matID.emplace_back(lArBarrelMaterial,baseID+1); + matID.emplace_back(lArBarrelMaterial,baseID+2); + matID.emplace_back(lArBarrelMaterial,baseID+3); // scaling factors refer to avZ(avA) change - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial->scale(1.3),baseID+1)); - throwIntoGarbage(matID.back()->first); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial->scale(1.3),baseID+2)); - throwIntoGarbage(matID.back()->first); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial->scale(0.6),baseID+3)); - throwIntoGarbage(matID.back()->first); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial->scale(0.7),baseID+3)); - throwIntoGarbage(matID.back()->first); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial->scale(0.8),baseID+3)); - throwIntoGarbage(matID.back()->first); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial->scale(0.9),baseID+3)); - throwIntoGarbage(matID.back()->first); - matID.push_back(new std::pair<const Trk::Material*,int>(lArBarrelMaterial->scale(1.1),baseID+3)); - throwIntoGarbage(matID.back()->first); + matID.emplace_back(lArBarrelMaterial->scale(1.3),baseID+1); + throwIntoGarbage(matID.back().first); + matID.emplace_back(lArBarrelMaterial->scale(1.3),baseID+2); + throwIntoGarbage(matID.back().first); + matID.emplace_back(lArBarrelMaterial->scale(0.6),baseID+3); + throwIntoGarbage(matID.back().first); + matID.emplace_back(lArBarrelMaterial->scale(0.7),baseID+3); + throwIntoGarbage(matID.back().first); + matID.emplace_back(lArBarrelMaterial->scale(0.8),baseID+3); + throwIntoGarbage(matID.back().first); + matID.emplace_back(lArBarrelMaterial->scale(0.9),baseID+3); + throwIntoGarbage(matID.back().first); + matID.emplace_back(lArBarrelMaterial->scale(1.1),baseID+3); + throwIntoGarbage(matID.back().first); //std::cout <<"matID:"<< matID[3]->second<< std::endl; // @@ -536,10 +536,10 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo std::vector<size_t> dummylay (1,0); // binned material for Presampler : - std::vector<const Trk::IdentifiedMaterial*> matBP; + std::vector<Trk::IdentifiedMaterial> matBP; // layer material can be adjusted here int baseID = Trk::GeometrySignature(Trk::Calo)*1000; - matBP.push_back(new Trk::IdentifiedMaterial(lArBarrelPresamplerMaterial,baseID)); + matBP.emplace_back(lArBarrelPresamplerMaterial,baseID); const Trk::BinnedMaterial* lArBarrelPresamplerMaterialBinPos = new Trk::BinnedMaterial(lArBarrelPresamplerMaterial,rBU,dummylay,matBP); const Trk::BinnedMaterial* lArBarrelPresamplerMaterialBinNeg = new Trk::BinnedMaterial(lArBarrelPresamplerMaterial,rBUc,dummylay,matBP); @@ -748,68 +748,68 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo Trk::BinUtility* bun = new Trk::BinUtility(37,-3.2,-1.35,Trk::open,Trk::binEta); // binned material for LAr : steering in binEta - std::vector<const Trk::IdentifiedMaterial*> matEID; + std::vector<Trk::IdentifiedMaterial> matEID; // layer material can be adjusted here int baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 4; - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial,0)); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial,baseID+1)); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial,baseID+2)); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial,baseID+3)); + matEID.emplace_back(lArEndcapMaterial,0); + matEID.emplace_back(lArEndcapMaterial,baseID+1); + matEID.emplace_back(lArEndcapMaterial,baseID+2); + matEID.emplace_back(lArEndcapMaterial,baseID+3); // scaled - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.05),baseID+1)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.1),baseID+1)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.15),baseID+1)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.2),baseID+1)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.25),baseID+1)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.3),baseID+1)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.35),baseID+1)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.4),baseID+1)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.05),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.1),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.15),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.2),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.25),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.3),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.35),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.4),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.45),baseID+2)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(0.7),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(0.75),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(0.8),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(0.85),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(0.9),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(0.95),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.05),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.1),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.15),baseID+3)); - throwIntoGarbage(matEID.back()->first); - matEID.push_back(new std::pair<const Trk::Material*,int>(lArEndcapMaterial->scale(1.2),baseID+3)); - throwIntoGarbage(matEID.back()->first); + matEID.emplace_back(lArEndcapMaterial->scale(1.05),baseID+1); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.1),baseID+1); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.15),baseID+1); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.2),baseID+1); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.25),baseID+1); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.3),baseID+1); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.35),baseID+1); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.4),baseID+1); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.05),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.1),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.15),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.2),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.25),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.3),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.35),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.4),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.45),baseID+2); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(0.7),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(0.75),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(0.8),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(0.85),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(0.9),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(0.95),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.05),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.1),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.15),baseID+3); + throwIntoGarbage(matEID.back().first); + matEID.emplace_back(lArEndcapMaterial->scale(1.2),baseID+3); + throwIntoGarbage(matEID.back().first); // binned material for LAr : layer depth per eta bin std::vector< Trk::BinUtility*> layEUP(bup->bins()); @@ -963,7 +963,7 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo const GeoLogVol* lArECPresamplerLogVol = lArECPresamplerPhysVol ? lArECPresamplerPhysVol->getLogVol() : 0; // binned material for EC Presampler : layers only - std::vector<const Trk::IdentifiedMaterial*> matECP; + std::vector<Trk::IdentifiedMaterial> matECP; const Trk::Material* mAr = new Trk::Material(140., 1170./1.4, 40., 18., 0.0014); const Trk::Material* mAl = new Trk::Material(88.93, 388.8, 27., 13., 0.0027); throwIntoGarbage(mAr); @@ -971,8 +971,8 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo // layer material can be adjusted here int baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 4; - matECP.push_back(new std::pair<const Trk::Material*,int>(mAl,0)); - matECP.push_back(new std::pair<const Trk::Material*,int>(mAr,baseID)); + matECP.emplace_back(mAl,0); + matECP.emplace_back(mAr,baseID); if ( lArECPresamplerLogVol ) { @@ -1441,7 +1441,7 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo lArFcalZposition = hecFcalCoverZpos; // binned material for HEC : layers only - std::vector<const Trk::IdentifiedMaterial*> matHEC; + std::vector<Trk::IdentifiedMaterial> matHEC; //Trk::MaterialProperties lArHecFcalCoverMaterial = geoMaterialToMaterialProperties.convert(lArPositiveHec1Material); //Trk::MaterialProperties lArHecFcalCoverMaterial = Trk::MaterialProperties(1., 18.6, 0.00345, 27.); const Trk::Material* lArHecFcalCoverMaterial=new Trk::Material(18.4, 201.9, 57.2, 26.1, 0.0071); @@ -1451,14 +1451,16 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo // layer material can be adjusted here baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 8; - matHEC.push_back(new std::pair<const Trk::Material*,int>(lArHecFcalCoverMaterial->scale(0.13*m_scale_HECmaterial),0)); - matHEC.push_back(new std::pair<const Trk::Material*,int>(lArHecMaterial->scale(m_scale_HECmaterial),baseID)); - matHEC.push_back(new std::pair<const Trk::Material*,int>(lArHecFcalCoverMaterial->scale(0.93*m_scale_HECmaterial),baseID+1)); - throwIntoGarbage(matHEC.back()->first); - matHEC.push_back(new std::pair<const Trk::Material*,int>(lArHecFcalCoverMaterial->scale(1.09*m_scale_HECmaterial),baseID+2)); - throwIntoGarbage(matHEC.back()->first); - matHEC.push_back(new std::pair<const Trk::Material*,int>(lArHecFcalCoverMaterial->scale(1.12*m_scale_HECmaterial),baseID+3)); - throwIntoGarbage(matHEC.back()->first); + matHEC.emplace_back(lArHecFcalCoverMaterial->scale(0.13*m_scale_HECmaterial),0); + throwIntoGarbage(matHEC.back().first); + matHEC.emplace_back(lArHecMaterial->scale(m_scale_HECmaterial),baseID); + throwIntoGarbage(matHEC.back().first); + matHEC.emplace_back(lArHecFcalCoverMaterial->scale(0.93*m_scale_HECmaterial),baseID+1); + throwIntoGarbage(matHEC.back().first); + matHEC.emplace_back(lArHecFcalCoverMaterial->scale(1.09*m_scale_HECmaterial),baseID+2); + throwIntoGarbage(matHEC.back().first); + matHEC.emplace_back(lArHecFcalCoverMaterial->scale(1.12*m_scale_HECmaterial),baseID+3); + throwIntoGarbage(matHEC.back().first); // divide the HEC into two parts per EC : // - fit one around the FCAL - and adopt to LAr Endcap outer radius @@ -1600,7 +1602,7 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo // Now the FCAL // binned material for FCAL : layers only - std::vector<const Trk::IdentifiedMaterial*> matFCAL; + std::vector<Trk::IdentifiedMaterial> matFCAL; // convert the Material //Trk::MaterialProperties lArFcalMaterial = geoMaterialToMaterialProperties.convert(lArPositiveEndcapMaterial); const Trk::Material* lArFcalMaterial =new Trk::Material(8.4, 175.5, 100.8, 42.1, 0.0097); @@ -1610,13 +1612,13 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo // layer material can be adjusted here baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 20; - matFCAL.push_back(new std::pair<const Trk::Material*,int>(lArFcalMaterial0,0)); - matFCAL.push_back(new std::pair<const Trk::Material*,int>(lArFcalMaterial->scale(0.5),baseID+1)); - throwIntoGarbage(matFCAL.back()->first); - matFCAL.push_back(new std::pair<const Trk::Material*,int>(lArFcalMaterial->scale(1.5),baseID+2)); - throwIntoGarbage(matFCAL.back()->first); - matFCAL.push_back(new std::pair<const Trk::Material*,int>(lArFcalMaterial->scale(1.4),baseID+3)); - throwIntoGarbage(matFCAL.back()->first); + matFCAL.emplace_back(lArFcalMaterial0,0); + matFCAL.emplace_back(lArFcalMaterial->scale(0.5),baseID+1); + throwIntoGarbage(matFCAL.back().first); + matFCAL.emplace_back(lArFcalMaterial->scale(1.5),baseID+2); + throwIntoGarbage(matFCAL.back().first); + matFCAL.emplace_back(lArFcalMaterial->scale(1.4),baseID+3); + throwIntoGarbage(matFCAL.back().first); // smooth the FCal to Tube form if (lArPositiveFcal1Bounds && lArPositiveFcal2Bounds && lArPositiveFcal3Bounds && diff --git a/TileCalorimeter/TileTrackingGeometry/src/TileVolumeBuilder.cxx b/TileCalorimeter/TileTrackingGeometry/src/TileVolumeBuilder.cxx index 6c571e9e7004c794b5ab89676187ee44c8ef78a8..ca6732cc16d8bfbd893ecdf86c5104ec51e553fb 100755 --- a/TileCalorimeter/TileTrackingGeometry/src/TileVolumeBuilder.cxx +++ b/TileCalorimeter/TileTrackingGeometry/src/TileVolumeBuilder.cxx @@ -199,23 +199,23 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking ATH_MSG_DEBUG( "Retrieved " << numTreeTops << " tree tops from the TileDetDescrManager. " ); // layer material can be adjusted here - std::vector<const Trk::IdentifiedMaterial*> matTB; + std::vector<Trk::IdentifiedMaterial> matTB; int baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 12; - matTB.push_back(new std::pair<const Trk::Material*,int>(barrelProperties,0)); - matTB.push_back(new std::pair<const Trk::Material*,int>(barrelProperties,baseID)); - matTB.push_back(new std::pair<const Trk::Material*,int>(barrelProperties,baseID+1)); - matTB.push_back(new std::pair<const Trk::Material*,int>(barrelProperties,baseID+2)); + matTB.emplace_back(barrelProperties,0); + matTB.emplace_back(barrelProperties,baseID); + matTB.emplace_back(barrelProperties,baseID+1); + matTB.emplace_back(barrelProperties,baseID+2); // material index std::vector<size_t> ltb{0,1,2,3}; // layer material can be adjusted here - std::vector<const Trk::IdentifiedMaterial*> matETB; + std::vector<Trk::IdentifiedMaterial> matETB; baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 18; - matETB.push_back(new std::pair<const Trk::Material*,int>(extendedBarrelProperties,0)); - matETB.push_back(new std::pair<const Trk::Material*,int>(extendedBarrelProperties,baseID)); - matETB.push_back(new std::pair<const Trk::Material*,int>(extendedBarrelProperties,baseID+1)); - matETB.push_back(new std::pair<const Trk::Material*,int>(extendedBarrelProperties,baseID+2)); + matETB.emplace_back(extendedBarrelProperties,0); + matETB.emplace_back(extendedBarrelProperties,baseID); + matETB.emplace_back(extendedBarrelProperties,baseID+1); + matETB.emplace_back(extendedBarrelProperties,baseID+2); // layer material can be adjusted here //Trk::MaterialProperties barrelFingerGapProperties = Trk::MaterialProperties(1., 130./0.35, 0.003*pow(0.35,3),30.); @@ -438,12 +438,12 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking double tileExtZ = tilePositiveExtendedBarrel->center().z()-tilePositiveExtendedBarrelBounds.halflengthZ(); // binned material for ITC : - std::vector<const Trk::IdentifiedMaterial*> matITC; + std::vector<Trk::IdentifiedMaterial> matITC; // layer material can be adjusted here baseID = Trk::GeometrySignature(Trk::Calo)*1000; - matITC.push_back(new Trk::IdentifiedMaterial(barrelProperties,baseID+15)); - matITC.push_back(new Trk::IdentifiedMaterial(barrelProperties,baseID+16)); - matITC.push_back(new Trk::IdentifiedMaterial(barrelProperties,baseID+17)); + matITC.emplace_back(barrelProperties,baseID+15); + matITC.emplace_back(barrelProperties,baseID+16); + matITC.emplace_back(barrelProperties,baseID+17); // ITCPlug1 double p1Z = 0.5*(plug1Z-plug1hZ+tileExtZ); diff --git a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray.h b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray.h index 41a47089e79408eddd051e20fde0c70f2b3b1479..9cd738fe6784baeba029dc72823296e9a8dfba69 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray.h +++ b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ /////////////////////////////////////////////////////////////////// @@ -41,6 +41,7 @@ public: /** Implicit constructor */ virtual CompactBinnedArrayT* clone() const = 0; + virtual CompactBinnedArrayT* clone(const std::vector<T*>& ptrs) const = 0; /** layer bin utility */ virtual const Trk::BinUtility* layerBinUtility(const Amg::Vector3D& gp) const = 0; diff --git a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray1D.h b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray1D.h index 7e304dd358a5f2ca4676dd427c2d27bfbd941ba8..2a22788d5cec4a21345b6ee50b1983a12a8646d6 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray1D.h +++ b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray1D.h @@ -94,6 +94,12 @@ public: return new CompactBinnedArray1DT(m_arrayObjects, m_array, m_binUtility->clone()); } + CompactBinnedArray1DT* clone(const std::vector<T*>& ptrs) const + { + assert (ptrs.size() == m_arrayObjects.size()); + return new CompactBinnedArray1DT(ptrs, m_array, m_binUtility->clone()); + } + /**Virtual Destructor*/ ~CompactBinnedArray1DT() { delete m_binUtility; } diff --git a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray2D.h b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray2D.h index 420bd1d0d8eafce2d0de5eb128d820d7610b74f3..5b6b3fa9cc3cb015f994b5b023a71fc904a6f9be 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray2D.h +++ b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/CompactBinnedArray2D.h @@ -103,6 +103,12 @@ public: return new CompactBinnedArray2DT(m_arrayObjects, m_array, m_binUtility->clone(), m_buVec); } + CompactBinnedArray2DT* clone(const std::vector<T*>& ptrs) const + { + assert (ptrs.size() == m_arrayObjects.size()); + return new CompactBinnedArray2DT(ptrs, m_array, m_binUtility->clone(), m_buVec); + } + /**Virtual Destructor*/ ~CompactBinnedArray2DT() { diff --git a/Tracking/TrkDetDescr/TrkGeometry/TrkGeometry/BinnedMaterial.h b/Tracking/TrkDetDescr/TrkGeometry/TrkGeometry/BinnedMaterial.h index ab6c04884cdc102bd5b43166574236051227fca3..d7bcd1bc2cda00b7c3c941c17715bb496e2cb901 100644 --- a/Tracking/TrkDetDescr/TrkGeometry/TrkGeometry/BinnedMaterial.h +++ b/Tracking/TrkDetDescr/TrkGeometry/TrkGeometry/BinnedMaterial.h @@ -16,6 +16,7 @@ #include <iomanip> #include <string> #include <climits> +#include <memory> #include "TrkGeometry/Material.h" #include "TrkDetDescrUtils/CompactBinnedArray.h" #include "TrkDetDescrUtils/CompactBinnedArray1D.h" @@ -38,9 +39,7 @@ namespace Trk { public: /** Default Constructor needed for POOL */ - BinnedMaterial(): - Material(), - m_matBins(nullptr){} + BinnedMaterial() = default; /** Constructor with arguments */ BinnedMaterial(float iX0, @@ -55,37 +54,21 @@ namespace Trk { /** Constructor with averaged material and binning in 1D*/ BinnedMaterial(const Material*& mat, BinUtility*& bu, const std::vector<size_t>& index, - const std::vector< const IdentifiedMaterial*>& detailedMat); + const std::vector<IdentifiedMaterial>& detailedMat); /** Constructor with averaged material and binning in 2D*/ BinnedMaterial(const Material*& mat, BinUtility*& bu, std::vector< Trk::BinUtility*>& bVec, const std::vector<std::vector<size_t> >& index, - const std::vector< const IdentifiedMaterial* >& detailedMat); + const std::vector<IdentifiedMaterial>& detailedMat); /** Copy Constructor */ - BinnedMaterial(const BinnedMaterial& amc) : - Material(amc), - m_matBins(amc.m_matBins? amc.m_matBins->clone() : nullptr ) - {} + BinnedMaterial(const BinnedMaterial& amc); - /** Desctructor - delete the composition if there */ - ~BinnedMaterial() { if (m_matBins) delete m_matBins; } + /** Destructor - delete the composition if there */ + ~BinnedMaterial() = default; /** Assignment operator */ - BinnedMaterial& operator=(const BinnedMaterial& amc) { - if (this != &amc){ - X0 = amc.X0; - L0 = amc.L0; - A = amc.A; - Z = amc.Z; - rho = amc.rho; - dEdX = amc.dEdX; - zOaTr = amc.zOaTr; - delete m_matBins; - m_matBins = amc.m_matBins ? amc.m_matBins->clone() : nullptr; - } - return (*this); - } + BinnedMaterial& operator=(const BinnedMaterial& amc); /** access to layer bin utility */ const Trk::BinUtility* layerBinUtility(const Amg::Vector3D& position) const; @@ -98,8 +81,10 @@ namespace Trk { const IdentifiedMaterial* materialNext(const Amg::Vector3D& pos,const Amg::Vector3D& dir, bool layOnly ) const; private: - const CompactBinnedArray< const IdentifiedMaterial >* m_matBins; - + std::vector<const Trk::IdentifiedMaterial* > ptrs() const; + std::vector<IdentifiedMaterial> m_matVec; + using binsPtr_t = std::unique_ptr<const CompactBinnedArray< const IdentifiedMaterial > >; + binsPtr_t m_matBins; }; diff --git a/Tracking/TrkDetDescr/TrkGeometry/src/BinnedMaterial.cxx b/Tracking/TrkDetDescr/TrkGeometry/src/BinnedMaterial.cxx index c72924044ad090f6e6a386ffc8ad5ae13069af2b..351094fa2cfa695d1c8d28971c1581c22088caa3 100755 --- a/Tracking/TrkDetDescr/TrkGeometry/src/BinnedMaterial.cxx +++ b/Tracking/TrkDetDescr/TrkGeometry/src/BinnedMaterial.cxx @@ -6,27 +6,63 @@ /** Constructor with averaged material and binning in 1D*/ Trk::BinnedMaterial::BinnedMaterial(const Trk::Material*& mat, Trk::BinUtility*& bu, const std::vector<size_t>& index, - const std::vector< const Trk::IdentifiedMaterial* >& detailedMat ) : + const std::vector<Trk::IdentifiedMaterial>& detailedMat ) : Trk::Material(*mat), - m_matBins(nullptr) + m_matVec (detailedMat), + m_matBins (std::make_unique<Trk::CompactBinnedArray1D<const Trk::IdentifiedMaterial> >(ptrs(),index,bu)) { - Trk::CompactBinnedArray1D<const Trk::IdentifiedMaterial >* bm = - new Trk::CompactBinnedArray1D<const Trk::IdentifiedMaterial >(detailedMat,index,bu); - m_matBins = bm; } /** Constructor with averaged material and binning in 2D*/ Trk::BinnedMaterial::BinnedMaterial(const Trk::Material*& mat, Trk::BinUtility*& bu, std::vector< Trk::BinUtility*>& bVec, const std::vector<std::vector<size_t> >& index, - const std::vector<const Trk::IdentifiedMaterial* >& detailedMat ) : + const std::vector<Trk::IdentifiedMaterial>& detailedMat ) : Trk::Material(*mat), - m_matBins(nullptr) + m_matVec (detailedMat), + m_matBins (std::make_unique<Trk::CompactBinnedArray2D<const Trk::IdentifiedMaterial> >(ptrs(),index,bu,bVec)) { - Trk::CompactBinnedArray2D<const Trk::IdentifiedMaterial >* bm = - new Trk::CompactBinnedArray2D<const Trk::IdentifiedMaterial >(detailedMat,index,bu,bVec); - m_matBins = bm; } +Trk::BinnedMaterial::BinnedMaterial(const BinnedMaterial& amc) : + Material(amc), + m_matVec (amc.m_matVec) +{ + if (amc.m_matBins) { + if (!m_matVec.empty()) { + m_matBins = binsPtr_t (amc.m_matBins->clone(ptrs())); + } + else { + m_matBins = binsPtr_t (amc.m_matBins->clone()); + } + } +} + +/** Assignment operator */ +Trk::BinnedMaterial& +Trk::BinnedMaterial::operator=(const BinnedMaterial& amc) +{ + if (this != &amc){ + X0 = amc.X0; + L0 = amc.L0; + A = amc.A; + Z = amc.Z; + rho = amc.rho; + dEdX = amc.dEdX; + zOaTr = amc.zOaTr; + m_matVec = amc.m_matVec; + m_matBins.reset(); + if (amc.m_matBins) { + if (!m_matVec.empty()) { + m_matBins = binsPtr_t (amc.m_matBins->clone(ptrs())); + } + else { + m_matBins = binsPtr_t (amc.m_matBins->clone()); + } + } + } + return (*this); +} + /** access to binned material */ const Trk::IdentifiedMaterial* Trk::BinnedMaterial::material(const Amg::Vector3D& position ) const { @@ -41,3 +77,14 @@ const Trk::IdentifiedMaterial* Trk::BinnedMaterial::materialNext(const Amg::Vect return mat ; } + +std::vector<const Trk::IdentifiedMaterial* > +Trk::BinnedMaterial::ptrs() const +{ + std::vector<const Trk::IdentifiedMaterial* > p; + p.reserve (m_matVec.size()); + for (const Trk::IdentifiedMaterial& m : m_matVec) { + p.push_back (&m); + } + return p; +}