CMS 3D CMS Logo

TrackerGeometryIntoNtuples.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: TrackerGeometryIntoNtuples
4 // Class: TrackerGeometryIntoNtuples
5 //
13 //
14 // Original class TrackerGeometryIntoNtuples.cc
15 // Original Author: Nhan Tran
16 // Created: Mon Jul 16m 16:56:34 CDT 2007
17 // $Id: TrackerGeometryIntoNtuples.cc,v 1.14 2012/12/02 22:13:12 devdatta Exp $
18 //
19 // 26 May 2012
20 // ***********
21 // *********** Modified to add tracker module surface deformations ***********
22 //
23 //
24 
25 // system include files
29 
31 
32 #include <algorithm>
33 #include "TTree.h"
34 #include "TFile.h"
35 
39 
43 
48 
53 
56 
59 
61 
63 
65 
66 // To access kinks and bows
69 
70 #include "CLHEP/Matrix/SymMatrix.h"
71 
72 //
73 // class decleration
74 //
75 
77 public:
79  ~TrackerGeometryIntoNtuples() override;
80 
81 private:
82  void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
83 
84  void addBranches();
85 
86  // ----------member data ---------------------------
95 
96  //std::vector<AlignTransform> m_align;
98 
99  uint32_t m_rawid;
100  double m_x, m_y, m_z;
103  double m_xx, m_xy, m_yy, m_xz, m_yz, m_zz;
104  int m_dNpar;
105  double m_d1, m_d2, m_d3;
106  int m_dtype;
107  //std::vector<double>m_dpar;
108  std::vector<double>* mp_dpar;
109 
110  // Deformation parameters: stored in same tree as the alignment parameters
112  enum { kMaxNumPar = 20 }; // slighly above 'two bowed surfaces' limit
114 
115  TTree* m_tree;
117  TTree* m_treeErrors;
120  TFile* m_file;
121 };
122 
123 //
124 // constants, enums and typedefs
125 //
126 
127 //
128 // static data member definitions
129 //
130 
131 //
132 // constructors and destructor
133 //
135  : topoToken_(esConsumes()),
136  geomDetToken_(esConsumes()),
137  ptpToken_(esConsumes()),
138  ptitpToken_(esConsumes()),
139  aliToken_(esConsumes()),
140  aliErrorToken_(esConsumes()),
141  surfDefToken_(esConsumes()),
142  gprToken_(esConsumes()),
143  theCurrentTracker(nullptr),
144  m_rawid(0),
145  m_x(0.),
146  m_y(0.),
147  m_z(0.),
148  m_alpha(0.),
149  m_beta(0.),
150  m_gamma(0.),
151  m_subdetid(0),
152  m_xx(0.),
153  m_xy(0.),
154  m_yy(0.),
155  m_xz(0.),
156  m_yz(0.),
157  m_zz(0.),
158  m_dNpar(0),
159  m_d1(0.),
160  m_d2(0.),
161  m_d3(0.),
162  m_dtype(0),
163  mp_dpar(nullptr) {
164  m_outputFile = iConfig.getUntrackedParameter<std::string>("outputFile");
165  m_outputTreename = iConfig.getUntrackedParameter<std::string>("outputTreename");
166  m_file = new TFile(m_outputFile.c_str(), "RECREATE");
167  m_tree = new TTree(m_outputTreename.c_str(), m_outputTreename.c_str());
168  m_treeDeformations = new TTree("alignTreeDeformations", "alignTreeDeformations");
169  //char errorTreeName[256];
170  //snprintf(errorTreeName, sizeof(errorTreeName), "%sErrors", m_outputTreename);
171  //m_treeErrors = new TTree(errorTreeName,errorTreeName);
172  m_treeErrors = new TTree("alignTreeErrors", "alignTreeErrors");
173 }
174 
176 
177 //
178 // member functions
179 //
180 
181 // ------------ method called to for each event ------------
183  // retrieve tracker topology from geometry
184  const TrackerTopology* const tTopo = &iSetup.getData(topoToken_);
185 
186  edm::LogInfo("beginJob") << "Begin Job";
187 
188  //accessing the initial geometry
189  const GeometricDet* theGeometricDet = &iSetup.getData(geomDetToken_);
190  const PTrackerParameters* ptp = &iSetup.getData(ptpToken_);
192 
193  TrackerGeomBuilderFromGeometricDet trackerBuilder;
194  //currernt tracker
195  TrackerGeometry* theCurTracker = trackerBuilder.build(theGeometricDet, ptitp, *ptp, tTopo);
196 
197  //build the tracker
198  const Alignments* alignments = &iSetup.getData(aliToken_);
199  const AlignmentErrorsExtended* alignmentErrors = &iSetup.getData(aliErrorToken_);
200  const AlignmentSurfaceDeformations* surfaceDeformations = &iSetup.getData(surfDefToken_);
201 
202  //apply the latest alignments
203  const Alignments* globalPositionRcd = &iSetup.getData(gprToken_);
204  GeometryAligner aligner;
205  aligner.applyAlignments<TrackerGeometry>(&(*theCurTracker),
206  alignments,
207  alignmentErrors,
208  align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Tracker)));
209  aligner.attachSurfaceDeformations<TrackerGeometry>(&(*theCurTracker), &(*surfaceDeformations));
210 
211  theCurrentTracker = new AlignableTracker(&(*theCurTracker), tTopo);
212 
213  Alignments* theAlignments = theCurrentTracker->alignments();
214  //AlignmentErrorsExtended* theAlignmentErrorsExtended = theCurrentTracker->alignmentErrors();
215 
216  //alignments
217  addBranches();
218  for (std::vector<AlignTransform>::const_iterator i = theAlignments->m_align.begin();
219  i != theAlignments->m_align.end();
220  ++i) {
221  m_rawid = i->rawId();
222  CLHEP::Hep3Vector translation = i->translation();
223  m_x = translation.x();
224  m_y = translation.y();
225  m_z = translation.z();
226 
227  CLHEP::HepRotation rotation = i->rotation();
228  m_alpha = rotation.getPhi();
229  m_beta = rotation.getTheta();
230  m_gamma = rotation.getPsi();
231  m_tree->Fill();
232 
233  //DetId detid(m_rawid);
234  //if (detid.subdetId() > 2){
235  //
236  //std::cout << " panel: " << tTopo->pxfPanel( m_rawid ) << ", module: " << tTopo->pxfModule( m_rawid ) << std::endl;
237  //if ((tTopo->pxfPanel( m_rawid ) == 1) && (tTopo->pxfModule( m_rawid ) == 4)) std::cout << m_rawid << ", ";
238  //std::cout << m_rawid << std::setprecision(9) << " " << m_x << " " << m_y << " " << m_z;
239  //std::cout << std::setprecision(9) << " " << m_alpha << " " << m_beta << " " << m_gamma << std::endl;
240  //}
241  }
242 
243  delete theAlignments;
244 
245  std::vector<AlignTransformErrorExtended> alignErrors = alignmentErrors->m_alignError;
246  for (std::vector<AlignTransformErrorExtended>::const_iterator i = alignErrors.begin(); i != alignErrors.end(); ++i) {
247  m_rawid = i->rawId();
248  CLHEP::HepSymMatrix errMatrix = i->matrix();
249  DetId detid(m_rawid);
250  m_subdetid = detid.subdetId();
251  m_xx = errMatrix[0][0];
252  m_xy = errMatrix[0][1];
253  m_xz = errMatrix[0][2];
254  m_yy = errMatrix[1][1];
255  m_yz = errMatrix[1][2];
256  m_zz = errMatrix[2][2];
257  m_treeErrors->Fill();
258  }
259 
260  // Get GeomDetUnits for the current tracker
261  auto const& detUnits = theCurTracker->detUnits();
262  int detUnit(0);
263  //\\for (unsigned int iDet = 0; iDet < detUnits.size(); ++iDet) {
264  for (auto iunit = detUnits.begin(); iunit != detUnits.end(); ++iunit) {
265  DetId detid = (*iunit)->geographicalId();
266  m_rawid = detid.rawId();
267  m_subdetid = detid.subdetId();
268 
269  ++detUnit;
270  //\\GeomDetUnit* geomDetUnit = detUnits.at(iDet) ;
271  auto geomDetUnit = *iunit;
272 
273  // Get SurfaceDeformation for this GeomDetUnit
274  if (geomDetUnit->surfaceDeformation()) {
275  std::vector<double> surfaceDeformParams = (geomDetUnit->surfaceDeformation())->parameters();
276  //edm::LogInfo("surfaceDeformParamsSize") << " surfaceDeformParams size = " << surfaceDeformParams.size() << std::endl ;
277  m_dNpar = surfaceDeformParams.size();
278  m_dtype = (geomDetUnit->surfaceDeformation())->type();
279  m_d1 = surfaceDeformParams.at(0);
280  m_d2 = surfaceDeformParams.at(1);
281  m_d3 = surfaceDeformParams.at(2);
282  mp_dpar->clear();
283  for (std::vector<double>::const_iterator it = surfaceDeformParams.begin(); it != surfaceDeformParams.end();
284  ++it) {
285  mp_dpar->push_back((*it));
286  //edm::LogInfo("surfaceDeformParamsContent") << " surfaceDeformParam = " << (*it) << std::endl ;
287  }
288  m_treeDeformations->Fill();
289  }
290  }
291 
292  //write out
293  m_file->cd();
294  m_tree->Write();
295  m_treeDeformations->Write();
296  m_treeErrors->Write();
297  m_file->Close();
298 }
299 
301  m_tree->Branch("rawid", &m_rawid, "rawid/I");
302  m_tree->Branch("x", &m_x, "x/D");
303  m_tree->Branch("y", &m_y, "y/D");
304  m_tree->Branch("z", &m_z, "z/D");
305  m_tree->Branch("alpha", &m_alpha, "alpha/D");
306  m_tree->Branch("beta", &m_beta, "beta/D");
307  m_tree->Branch("gamma", &m_gamma, "gamma/D");
308 
309  m_treeDeformations->Branch("irawid", &m_rawid, "irawid/I");
310  m_treeDeformations->Branch("subdetid", &m_subdetid, "subdetid/I");
311  m_treeDeformations->Branch("dNpar", &m_dNpar, "dNpar/I");
312  //m_treeDeformations->Branch("d1", &m_d1, "d1/D");
313  //m_treeDeformations->Branch("d2", &m_d2, "d2/D");
314  //m_treeDeformations->Branch("d3", &m_d3, "d3/D");
315  m_treeDeformations->Branch("dtype", &m_dtype);
316  m_treeDeformations->Branch("dpar", "std::vector<double>", &mp_dpar);
317 
318  m_treeErrors->Branch("rawid", &m_rawid, "rawid/I");
319  m_treeErrors->Branch("subdetid", &m_subdetid, "subdetid/I");
320  m_treeErrors->Branch("xx", &m_xx, "xx/D");
321  m_treeErrors->Branch("yy", &m_yy, "yy/D");
322  m_treeErrors->Branch("zz", &m_zz, "zz/D");
323  m_treeErrors->Branch("xy", &m_xy, "xy/D");
324  m_treeErrors->Branch("xz", &m_xz, "xz/D");
325  m_treeErrors->Branch("yz", &m_yz, "yz/D");
326 
327  //m_tree->Branch("NumDeform", &numDeformationValues_, "NumDeform/i");
328  //m_tree->Branch("DeformValues", deformationValues_, "DeformValues[NumDeform]/F");
329 }
330 
331 //define this as a plug-in
TrackerGeometryIntoNtuples::numDeformationValues_
UInt_t numDeformationValues_
Definition: TrackerGeometryIntoNtuples.cc:111
TrackerGeometryIntoNtuples::mp_dpar
std::vector< double > * mp_dpar
Definition: TrackerGeometryIntoNtuples.cc:108
BeamSpotPI::parameters
parameters
Definition: BeamSpotPayloadInspectorHelper.h:30
GlobalPositionRcd.h
EDAnalyzer.h
mps_fire.i
i
Definition: mps_fire.py:428
MessageLogger.h
TrackerGeometry.h
PTrackerParameters
Definition: PTrackerParameters.h:6
TrackerGeometryIntoNtuples::m_d3
double m_d3
Definition: TrackerGeometryIntoNtuples.cc:105
TrackerGeometryIntoNtuples::m_file
TFile * m_file
Definition: TrackerGeometryIntoNtuples.cc:120
TrackerGeometryIntoNtuples::m_xx
double m_xx
Definition: TrackerGeometryIntoNtuples.cc:103
TrackerGeomBuilderFromGeometricDet::build
TrackerGeometry * build(const GeometricDet *gd, const PTrackerAdditionalParametersPerDet *ptitp, const PTrackerParameters &ptp, const TrackerTopology *tTopo)
Definition: TrackerGeomBuilderFromGeometricDet.cc:44
TrackerTopology
Definition: TrackerTopology.h:16
TrackerGeometryIntoNtuples::m_rawid
uint32_t m_rawid
Definition: TrackerGeometryIntoNtuples.cc:99
TrackerGeometryIntoNtuples::theCurrentTracker
AlignableTracker * theCurrentTracker
Definition: TrackerGeometryIntoNtuples.cc:97
TrackerGeometryIntoNtuples::m_treeErrors
TTree * m_treeErrors
Definition: TrackerGeometryIntoNtuples.cc:117
PTrackerAdditionalParametersPerDet
Definition: PTrackerAdditionalParametersPerDet.h:9
TrackerGeometryIntoNtuples::deformationValues_
Float_t deformationValues_[kMaxNumPar]
Definition: TrackerGeometryIntoNtuples.cc:113
Alignments.h
DetectorGlobalPosition.h
PTrackerAdditionalParametersPerDetRcd.h
TrackerGeometryIntoNtuples::m_outputTreename
std::string m_outputTreename
Definition: TrackerGeometryIntoNtuples.cc:119
PTrackerParameters.h
TrackerGeometryIntoNtuples::m_y
double m_y
Definition: TrackerGeometryIntoNtuples.cc:100
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
TrackerGeometryIntoNtuples::kMaxNumPar
Definition: TrackerGeometryIntoNtuples.cc:112
TrackerGeometryIntoNtuples::m_xz
double m_xz
Definition: TrackerGeometryIntoNtuples.cc:103
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
edm::one::EDAnalyzer
Definition: EDAnalyzer.h:30
TrackerGeometryIntoNtuples::ptitpToken_
const edm::ESGetToken< PTrackerAdditionalParametersPerDet, PTrackerAdditionalParametersPerDetRcd > ptitpToken_
Definition: TrackerGeometryIntoNtuples.cc:90
TrackerGeometryIntoNtuples::m_yy
double m_yy
Definition: TrackerGeometryIntoNtuples.cc:103
ESGetToken.h
GeometryAligner::applyAlignments
void applyAlignments(const C *geometry, const Alignments *alignments, const AlignmentErrorsExtended *alignmentErrors, const AlignTransform &globalCoordinates)
Definition: GeometryAligner.h:52
TrackerSurfaceDeformationRcd.h
TrackerAlignmentErrorExtendedRcd.h
TrackerGeometryIntoNtuples::ptpToken_
const edm::ESGetToken< PTrackerParameters, PTrackerParametersRcd > ptpToken_
Definition: TrackerGeometryIntoNtuples.cc:89
TrackerGeometryIntoNtuples::aliToken_
const edm::ESGetToken< Alignments, TrackerAlignmentRcd > aliToken_
Definition: TrackerGeometryIntoNtuples.cc:91
DetId
Definition: DetId.h:17
MakerMacros.h
TrackerTopology.h
TrackerGeometryIntoNtuples::m_x
double m_x
Definition: TrackerGeometryIntoNtuples.cc:100
TrackerGeometryIntoNtuples::m_beta
double m_beta
Definition: TrackerGeometryIntoNtuples.cc:101
TrackerTopologyRcd.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
TrackerGeometry::detUnits
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
Definition: TrackerGeometry.h:61
TrackerGeometryIntoNtuples::m_dtype
int m_dtype
Definition: TrackerGeometryIntoNtuples.cc:106
AlignableTracker
Definition: AlignableTracker.h:17
TrackerGeometryIntoNtuples::surfDefToken_
const edm::ESGetToken< AlignmentSurfaceDeformations, TrackerSurfaceDeformationRcd > surfDefToken_
Definition: TrackerGeometryIntoNtuples.cc:93
GeometricDet
Definition: GeometricDet.h:31
TrackerGeometryIntoNtuples::m_subdetid
int m_subdetid
Definition: TrackerGeometryIntoNtuples.cc:102
TrackerGeometryIntoNtuples::m_outputFile
std::string m_outputFile
Definition: TrackerGeometryIntoNtuples.cc:118
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
TrackerGeometryIntoNtuples::m_z
double m_z
Definition: TrackerGeometryIntoNtuples.cc:100
SurfaceDeformation.h
TrackerGeometryIntoNtuples::gprToken_
const edm::ESGetToken< Alignments, GlobalPositionRcd > gprToken_
Definition: TrackerGeometryIntoNtuples.cc:94
TrackerDigiGeometryRecord.h
edm::ParameterSet
Definition: ParameterSet.h:47
idealTransformation.rotation
dictionary rotation
Definition: idealTransformation.py:1
DetId::Tracker
Definition: DetId.h:25
TrackerGeometryIntoNtuples::m_yz
double m_yz
Definition: TrackerGeometryIntoNtuples.cc:103
align::DetectorGlobalPosition
const AlignTransform & DetectorGlobalPosition(const Alignments &allGlobals, const DetId &id)
Definition: DetectorGlobalPosition.cc:10
TrackerGeometryIntoNtuples::m_zz
double m_zz
Definition: TrackerGeometryIntoNtuples.cc:103
TrackerGeometryIntoNtuples::addBranches
void addBranches()
Definition: TrackerGeometryIntoNtuples.cc:300
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:40
TrackerGeometryIntoNtuples::m_xy
double m_xy
Definition: TrackerGeometryIntoNtuples.cc:103
PTrackerParametersRcd.h
TrackerGeometryIntoNtuples::TrackerGeometryIntoNtuples
TrackerGeometryIntoNtuples(const edm::ParameterSet &)
Definition: TrackerGeometryIntoNtuples.cc:134
iEvent
int iEvent
Definition: GenABIO.cc:224
AlignmentSurfaceDeformations
Definition: AlignmentSurfaceDeformations.h:20
TrackerAlignmentRcd.h
edm::EventSetup
Definition: EventSetup.h:58
TrackerGeometryIntoNtuples::analyze
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
Definition: TrackerGeometryIntoNtuples.cc:182
AlignmentErrorsExtended
Definition: AlignmentErrorsExtended.h:10
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd >
TrackerGeometryIntoNtuples::geomDetToken_
const edm::ESGetToken< GeometricDet, IdealGeometryRecord > geomDetToken_
Definition: TrackerGeometryIntoNtuples.cc:88
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
GeomDet.h
GeometryAligner::attachSurfaceDeformations
void attachSurfaceDeformations(const C *geometry, const AlignmentSurfaceDeformations *surfaceDeformations)
Definition: GeometryAligner.h:120
TrackerGeometryIntoNtuples::~TrackerGeometryIntoNtuples
~TrackerGeometryIntoNtuples() override
Definition: TrackerGeometryIntoNtuples.cc:175
TrackerGeometryIntoNtuples::m_alpha
double m_alpha
Definition: TrackerGeometryIntoNtuples.cc:101
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
AlignableTracker::alignments
Alignments * alignments() const override
Return alignments, sorted by DetId.
Definition: AlignableTracker.cc:42
GeometryAligner.h
TrackerGeometryIntoNtuples::m_tree
TTree * m_tree
Definition: TrackerGeometryIntoNtuples.cc:115
PTrackerAdditionalParametersPerDet.h
AlignmentSurfaceDeformations.h
TrackerGeometryIntoNtuples::aliErrorToken_
const edm::ESGetToken< AlignmentErrorsExtended, TrackerAlignmentErrorExtendedRcd > aliErrorToken_
Definition: TrackerGeometryIntoNtuples.cc:92
TrackerGeometryIntoNtuples::topoToken_
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
Definition: TrackerGeometryIntoNtuples.cc:87
Alignable.h
EventSetup.h
TrackerGeomBuilderFromGeometricDet.h
Alignments::m_align
std::vector< AlignTransform > m_align
Definition: Alignments.h:19
TrackerGeomBuilderFromGeometricDet
Definition: TrackerGeomBuilderFromGeometricDet.h:18
AlignableTracker.h
ParameterSet.h
TrackerGeometryIntoNtuples::m_d2
double m_d2
Definition: TrackerGeometryIntoNtuples.cc:105
TrackerGeometryIntoNtuples
Definition: TrackerGeometryIntoNtuples.cc:76
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
edm::Event
Definition: Event.h:73
Alignments
Definition: Alignments.h:10
TrackerGeometryIntoNtuples::m_gamma
double m_gamma
Definition: TrackerGeometryIntoNtuples.cc:101
TrackerGeometryIntoNtuples::m_d1
double m_d1
Definition: TrackerGeometryIntoNtuples.cc:105
TrackerGeometryIntoNtuples::m_dNpar
int m_dNpar
Definition: TrackerGeometryIntoNtuples.cc:104
GeometryAligner
Class to update a given geometry with a set of alignments.
Definition: GeometryAligner.h:33
TrackerGeometryIntoNtuples::m_treeDeformations
TTree * m_treeDeformations
Definition: TrackerGeometryIntoNtuples.cc:116
TrackerGeometry
Definition: TrackerGeometry.h:14