31 src_(iConfig.getParameter<edm::
InputTag>(
"src")),
32 overlapAM_(iConfig.getParameter<edm::
InputTag>(
"OverlapAssoMap")),
33 keepTrackStats_(iConfig.getParameter<bool>(
"keepTrackStats")),
34 keepHitPopulation_(iConfig.getParameter<bool>(
"keepHitStats")),
35 statsTreeName_(iConfig.getParameter<
string>(
"TrkStatsFileName")),
36 hitsTreeName_(iConfig.getParameter<
string>(
"HitStatsFileName")),
37 prescale_(iConfig.getParameter<uint32_t>(
"TrkStatsPrescale")) {
54 outtree_ =
new TTree(
"AlignmentTrackStats",
"Statistics of Tracks used for Alignment");
62 outtree_->Branch(
"P", &
P,
"P[Ntracks]/F");
107 unsigned int trk_cnt = 0;
115 for (
int k = 0;
k < 7;
k++) {
123 for (std::vector<reco::Track>::const_iterator ittrk = Tracks->begin(), edtrk = Tracks->end(); ittrk != edtrk;
125 Eta[trk_cnt] = ittrk->eta();
126 Phi[trk_cnt] = ittrk->phi();
127 Chi2n[trk_cnt] = ittrk->normalizedChi2();
128 P[trk_cnt] = ittrk->p();
129 Pt[trk_cnt] = ittrk->pt();
130 Nhits[trk_cnt][0] = ittrk->numberOfValidHits();
137 for (
auto const &
hit : ittrk->recHits()) {
140 DetId detid =
hit->geographicalId();
142 uint32_t rawId =
hit->geographicalId().rawId();
147 DetHitMap::iterator mapiter;
149 if (mapiter !=
hitmap_.end()) {
153 hitmap_.insert(pair<uint32_t, uint32_t>(rawId, 1));
162 if (!(hitInPixel || hitInStrip)) {
164 edm::LogError(
"AlignmentStats") <<
"Hit not belonging neither to pixels nor to strips! Skipping it. SubDet= "
171 const std::type_info &
type =
typeid(*hit);
176 if (striphit !=
nullptr) {
178 inval = OverlapMap[stripclust];
182 <<
"ERROR in <AlignmentStats::analyze>: Dynamic cast of Strip RecHit1D failed! TypeId of the RecHit: "
188 if (striphit !=
nullptr) {
190 inval = OverlapMap[stripclust];
194 <<
"ERROR in <AlignmentStats::analyze>: Dynamic cast of Strip RecHit2D failed! TypeId of the RecHit: "
203 if (pixelhit !=
nullptr) {
205 inval = OverlapMap[pixclust];
209 <<
"ERROR in <AlignmentStats::analyze>: Dynamic cast of Pixel RecHit failed! TypeId of the RecHit: "
218 DetHitMap::iterator overlapiter;
225 overlapmap_.insert(pair<uint32_t, uint32_t>(rawId, 1));
229 int subdethit =
static_cast<int>(
hit->geographicalId().subdetId());
231 Nhits[trk_cnt][subdethit] =
Nhits[trk_cnt][subdethit] + 1;
253 edm::LogInfo(
"AlignmentStats") <<
"Writing out the TrackStatistics in " << gDirectory->GetPath() << std::endl;
259 TFile *hitsfile =
new TFile(
hitsTreeName_.c_str(),
"RECREATE");
261 TTree *hitstree =
new TTree(
"AlignmentHitMap",
"Maps of Hits used for Alignment");
263 unsigned int id = 0,
nhits = 0, noverlaps = 0;
264 float posX(-99999.0), posY(-77777.0), posZ(-88888.0);
265 float posEta(-6666.0), posPhi(-5555.0), posR(-4444.0);
267 unsigned int layer = 0;
268 bool is2D =
false, isStereo =
false;
269 hitstree->Branch(
"DetId", &
id,
"DetId/i");
270 hitstree->Branch(
"Nhits", &
nhits,
"Nhits/i");
271 hitstree->Branch(
"Noverlaps", &noverlaps,
"Noverlaps/i");
272 hitstree->Branch(
"SubDet", &subdet,
"SubDet/I");
273 hitstree->Branch(
"Layer", &layer,
"Layer/i");
274 hitstree->Branch(
"is2D", &is2D,
"is2D/B");
275 hitstree->Branch(
"isStereo", &isStereo,
"isStereo/B");
276 hitstree->Branch(
"posX", &posX,
"posX/F");
277 hitstree->Branch(
"posY", &posY,
"posY/F");
278 hitstree->Branch(
"posZ", &posZ,
"posZ/F");
279 hitstree->Branch(
"posR", &posR,
"posR/F");
280 hitstree->Branch(
"posEta", &posEta,
"posEta/F");
281 hitstree->Branch(
"posPhi", &posPhi,
"posPhi/F");
299 std::unique_ptr<AlignableTracker> theAliTracker =
301 const auto &Detunitslist = theAliTracker->deepComponents();
302 int ndetunits = Detunitslist.size();
303 edm::LogInfo(
"AlignmentStats") <<
"Number of DetUnits in the AlignableTracker: " << ndetunits << std::endl;
305 for (
int det_cnt = 0; det_cnt < ndetunits; ++det_cnt) {
323 id =
static_cast<uint32_t
>(Detunitslist[det_cnt]->id());
330 hitmap_.insert(pair<uint32_t, uint32_t>(
id, 0));
339 overlapmap_.insert(pair<uint32_t, uint32_t>(
id, 0));
343 posX = Detunitslist[det_cnt]->globalPosition().x();
344 posY = Detunitslist[det_cnt]->globalPosition().y();
345 posZ = Detunitslist[det_cnt]->globalPosition().z();
383 edm::LogError(
"AlignmentStats") <<
"Detector not belonging neither to pixels nor to strips! Skipping it. SubDet= "
ClusterRef cluster() const
EventNumber_t event() const
uint16_t *__restrict__ id
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > esTokenTkGeo_
static constexpr auto TID
#define DEFINE_FWK_MODULE(type)
Geom::Phi< T > phi() const
Log< level::Error, false > LogError
std::unique_ptr< TrackerGeometry > trackerGeometry_
constexpr std::array< uint8_t, layerIndexSize > layer
bool getData(T &iHolder) const
bool is2D(HitType hitType)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
ClusterRef cluster() const
static constexpr auto TOB
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Log< level::Info, false > LogInfo
std::string statsTreeName_
ClusterRef cluster() const
AlignmentStats(const edm::ParameterSet &iConfig)
static const int MAXTRKS_
std::pair< OmniClusterRef, TrackingParticleRef > P
static constexpr auto TIB
std::string hitsTreeName_
~AlignmentStats() override
std::unique_ptr< TrackerTopology > trackerTopology_
static constexpr auto TEC
std::string className(const T &t)
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > esTokenTTopo_
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override