41 #include "CLHEP/Matrix/SymMatrix.h" 59 #include "TDirectory.h" 80 bool checkModuleIds(
const unsigned int,
const std::vector<unsigned int>&)
const;
133 TTree* tkTree(
nullptr);
134 tkTreeFile->GetObject(
"TrackerTreeGenerator/TrackerTree/TrackerTree",tkTree);
138 edm::LogError(
"SectorBuilder")<<
"TrackerTree not found in file";
142 unsigned int rawId(999), subdetId(999), layer(999), side(999), half(999), rod(999),
ring(999), petal(999),
143 blade(999), panel(999), outerInner(999),
module(999), nStrips(999);
144 bool isDoubleSide(
false), isRPhi(
false), isStereo(
false);
145 int uDirection(999), vDirection(999), wDirection(999);
146 float posR(999.
F), posPhi(999.
F), posEta(999.
F),
posX(999.
F),
posY(999.
F), posZ(999.
F);
148 tkTree->SetBranchAddress(
"RawId", &rawId);
149 tkTree->SetBranchAddress(
"SubdetId", &subdetId);
150 tkTree->SetBranchAddress(
"Layer", &layer);
151 tkTree->SetBranchAddress(
"Side", &side);
152 tkTree->SetBranchAddress(
"Half", &half);
153 tkTree->SetBranchAddress(
"Rod", &rod);
154 tkTree->SetBranchAddress(
"Ring", &
ring);
155 tkTree->SetBranchAddress(
"Petal", &petal);
156 tkTree->SetBranchAddress(
"Blade", &blade);
157 tkTree->SetBranchAddress(
"Panel", &panel);
158 tkTree->SetBranchAddress(
"OuterInner", &outerInner);
159 tkTree->SetBranchAddress(
"Module", &
module);
160 tkTree->SetBranchAddress(
"NStrips", &nStrips);
161 tkTree->SetBranchAddress(
"IsDoubleSide", &isDoubleSide);
162 tkTree->SetBranchAddress(
"IsRPhi", &isRPhi);
163 tkTree->SetBranchAddress(
"IsStereo", &isStereo);
164 tkTree->SetBranchAddress(
"UDirection", &uDirection);
165 tkTree->SetBranchAddress(
"VDirection", &vDirection);
166 tkTree->SetBranchAddress(
"WDirection", &wDirection);
167 tkTree->SetBranchAddress(
"PosR", &posR);
168 tkTree->SetBranchAddress(
"PosPhi", &posPhi);
169 tkTree->SetBranchAddress(
"PosEta", &posEta);
170 tkTree->SetBranchAddress(
"PosX", &
posX);
171 tkTree->SetBranchAddress(
"PosY", &
posY);
172 tkTree->SetBranchAddress(
"PosZ", &posZ);
174 int nModules(tkTree->GetEntries());
178 unsigned int sectorCounter(0);
179 std::vector<edm::ParameterSet> v_sectorDef(
sectors_);
180 edm::LogInfo(
"SectorBuilder")<<
"There are "<<v_sectorDef.size()<<
" Sectors defined";
182 for(
auto const & parSet : v_sectorDef){
185 std::vector<unsigned int> v_rawId(parSet.getParameter<std::vector<unsigned int> >(
"rawId")),
186 v_subdetId(parSet.getParameter<std::vector<unsigned int> >(
"subdetId")),
187 v_layer(parSet.getParameter<std::vector<unsigned int> >(
"layer")),
188 v_side(parSet.getParameter<std::vector<unsigned int> >(
"side")),
189 v_half(parSet.getParameter<std::vector<unsigned int> >(
"half")),
190 v_rod(parSet.getParameter<std::vector<unsigned int> >(
"rod")),
191 v_ring(parSet.getParameter<std::vector<unsigned int> >(
"ring")),
192 v_petal(parSet.getParameter<std::vector<unsigned int> >(
"petal")),
193 v_blade(parSet.getParameter<std::vector<unsigned int> >(
"blade")),
194 v_panel(parSet.getParameter<std::vector<unsigned int> >(
"panel")),
195 v_outerInner(parSet.getParameter<std::vector<unsigned int> >(
"outerInner")),
196 v_module(parSet.getParameter<std::vector<unsigned int> >(
"module")),
197 v_nStrips(parSet.getParameter<std::vector<unsigned int> >(
"nStrips")),
198 v_isDoubleSide(parSet.getParameter<std::vector<unsigned int> >(
"isDoubleSide")),
199 v_isRPhi(parSet.getParameter<std::vector<unsigned int> >(
"isRPhi")),
200 v_isStereo(parSet.getParameter<std::vector<unsigned int> >(
"isStereo"));
201 std::vector<int> v_uDirection(parSet.getParameter<std::vector<int> >(
"uDirection")),
202 v_vDirection(parSet.getParameter<std::vector<int> >(
"vDirection")),
203 v_wDirection(parSet.getParameter<std::vector<int> >(
"wDirection"));
204 std::vector<double> v_posR(parSet.getParameter<std::vector<double> >(
"posR")),
205 v_posPhi(parSet.getParameter<std::vector<double> >(
"posPhi")),
206 v_posEta(parSet.getParameter<std::vector<double> >(
"posEta")),
207 v_posX(parSet.getParameter<std::vector<double> >(
"posX")),
208 v_posY(parSet.getParameter<std::vector<double> >(
"posY")),
209 v_posZ(parSet.getParameter<std::vector<double> >(
"posZ"));
218 tkSector.
name = sectorName;
226 if(sectorCounter==1){
261 tkSector.
v_rawId.push_back(rawId);
262 bool moduleSelected(
false);
263 for(
auto const & i_rawId : allSectors.v_rawId){
264 if(rawId == i_rawId)moduleSelected =
true;
266 if(!moduleSelected)allSectors.v_rawId.push_back(rawId);
272 for(
auto const & i_rawId : tkSector.
v_rawId){
287 if(isPixel && isStrip){
288 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: there are pixel and strip modules within one sector" 289 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
295 edm::LogInfo(
"SectorBuilder")<<
"There are "<<tkSector.
v_rawId.size()<<
" Modules in Sector "<<sectorCounter;
307 if(v_id.empty())
return true;
308 if(v_id.size()%2==1){
309 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition: Position Vectors need even number of arguments (Intervals)" 310 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
313 int entry(0);
double intervalBegin(999.);
314 for(
auto const & i_id : v_id){
316 if(entry%2==1) intervalBegin = i_id;
317 if(entry%2==0 && intervalBegin > i_id){
318 edm::LogError(
"SectorBuilder")<<
"Incorrect Sector Definition (Position Vector Intervals): \t" 319 <<intervalBegin<<
" is bigger than "<<i_id<<
" but is expected to be smaller" 320 <<
"\n... sector selection is not applied, sector "<<sectorCounter<<
" is not built";
331 if(v_id.empty())
return true;
332 for(
auto const & i_id : v_id){
333 if(
id==i_id)
return true;
342 if(v_id.empty())
return true;
343 for(
auto const & i_id : v_id){
344 if(1==i_id &&
id)
return true;
345 if(2==i_id && !
id)
return true;
354 if(v_id.empty())
return true;
355 for(
auto const & i_id : v_id){
356 if(
id==i_id)
return true;
365 if(v_id.empty())
return true;
366 int entry(0);
double intervalBegin(999.);
367 for(
auto const & i_id : v_id){
369 if(entry%2==1)intervalBegin = i_id;
370 if(entry%2==0 &&
id>=intervalBegin &&
id<i_id)
return true;
389 TFile* defaultFile =
new TFile(defaultFileName.c_str(),
"RECREATE");
392 TTree* defaultTreeX(
nullptr);
393 TTree* defaultTreeY(
nullptr);
394 defaultFile->GetObject(
"iterTreeX;1",defaultTreeX);
395 defaultFile->GetObject(
"iterTreeY;1",defaultTreeY);
397 TTree* sectorNameTree(
nullptr);
398 defaultFile->GetObject(
"nameTree;1",sectorNameTree);
400 edm::LogInfo(
"DefaultAPETree")<<
"APE Tree is being created";
401 defaultTreeX =
new TTree(
"iterTreeX",
"Tree for default APE x values from GT");
402 defaultTreeY =
new TTree(
"iterTreeY",
"Tree for default APE y values from GT");
403 sectorNameTree =
new TTree(
"nameTree",
"Tree with names of sectors");
407 std::vector<double*> a_defaultSectorX;
408 std::vector<double*> a_defaultSectorY;
410 std::vector<std::string*> a_sectorName;
412 const unsigned int iSector(i_sector.first);
413 const bool pixelSector(i_sector.second.isPixel);
415 a_defaultSectorX.push_back(
new double(-99.));
416 a_defaultSectorY.push_back(
new double(-99.));
417 a_sectorName.push_back(
new std::string(i_sector.second.name));
419 std::stringstream ss_sector;
420 std::stringstream ss_sectorSuffixed;
421 ss_sector <<
"Ape_Sector_" << iSector;
423 ss_sectorSuffixed << ss_sector.str() <<
"/D";
424 defaultTreeX->Branch(ss_sector.str().c_str(), &(*a_defaultSectorX[iSector-1]), ss_sectorSuffixed.str().c_str());
427 defaultTreeY->Branch(ss_sector.str().c_str(), &(*a_defaultSectorY[iSector-1]), ss_sectorSuffixed.str().c_str());
429 sectorNameTree->Branch(ss_sector.str().c_str(), &(*a_sectorName[iSector-1]), 32000, 00);
435 for(
auto & i_sector : m_tkSector_){
437 double defaultApeX(0.);
438 double defaultApeY(0.);
439 unsigned int nModules(0);
440 for(
auto const & i_rawId : i_sector.second.v_rawId){
441 std::vector<AlignTransformErrorExtended> alignErrors = alignmentErrors->
m_alignError;
442 for(
auto const & i_alignError : alignErrors){
443 if(i_rawId == i_alignError.rawId()){
444 CLHEP::HepSymMatrix errMatrix = i_alignError.matrix();
445 defaultApeX += errMatrix[0][0];
446 defaultApeY += errMatrix[1][1];
451 *a_defaultSectorX[i_sector.first-1] = defaultApeX/nModules;
452 *a_defaultSectorY[i_sector.first-1] = defaultApeY/nModules;
456 sectorNameTree->Fill();
457 sectorNameTree->Write(
"nameTree");
458 defaultTreeX->Fill();
459 defaultTreeX->Write(
"iterTreeX");
460 defaultTreeY->Fill();
461 defaultTreeY->Write(
"iterTreeY");
463 defaultFile->Close();
465 for(
unsigned int i = 0;
i < a_defaultSectorX.size();
i++){
466 delete a_defaultSectorX[
i];
467 delete a_defaultSectorY[
i];
468 delete a_sectorName[
i];
494 std::vector<unsigned> emptyUnsignedIntVector;
495 std::vector<int> emptyIntVector;
496 std::vector<double> emptyDoubleVector;
498 sector.
add<std::vector<unsigned>>(
"rawId", emptyUnsignedIntVector);
499 sector.
add<std::vector<unsigned>>(
"subdetId", emptyUnsignedIntVector);
500 sector.
add<std::vector<unsigned>>(
"layer", emptyUnsignedIntVector);
501 sector.
add<std::vector<unsigned>>(
"side", emptyUnsignedIntVector);
502 sector.
add<std::vector<unsigned>>(
"half", emptyUnsignedIntVector);
503 sector.
add<std::vector<unsigned>>(
"rod", emptyUnsignedIntVector);
504 sector.
add<std::vector<unsigned>>(
"ring", emptyUnsignedIntVector);
505 sector.
add<std::vector<unsigned>>(
"petal", emptyUnsignedIntVector);
506 sector.
add<std::vector<unsigned>>(
"blade", emptyUnsignedIntVector);
507 sector.
add<std::vector<unsigned>>(
"panel", emptyUnsignedIntVector);
508 sector.
add<std::vector<unsigned>>(
"outerInner", emptyUnsignedIntVector);
509 sector.
add<std::vector<unsigned>>(
"module", emptyUnsignedIntVector);
510 sector.
add<std::vector<unsigned>>(
"nStrips", emptyUnsignedIntVector);
511 sector.
add<std::vector<unsigned>>(
"isDoubleSide", emptyUnsignedIntVector);
512 sector.
add<std::vector<unsigned>>(
"isRPhi", emptyUnsignedIntVector);
513 sector.
add<std::vector<unsigned>>(
"isStereo", emptyUnsignedIntVector);
514 sector.
add<std::vector<int>>(
"uDirection", emptyIntVector);
515 sector.
add<std::vector<int>>(
"vDirection", emptyIntVector);
516 sector.
add<std::vector<int>>(
"wDirection", emptyIntVector);
517 sector.
add<std::vector<double>>(
"posR", emptyDoubleVector);
518 sector.
add<std::vector<double>>(
"posPhi", emptyDoubleVector);
519 sector.
add<std::vector<double>>(
"posEta", emptyDoubleVector);
520 sector.
add<std::vector<double>>(
"posX", emptyDoubleVector);
521 sector.
add<std::vector<double>>(
"posY", emptyDoubleVector);
522 sector.
add<std::vector<double>>(
"posZ", emptyDoubleVector);
528 descriptions.
add(
"apeTreeCreateDefault", desc);
bool checkModulePositions(const float, const std::vector< double > &) const
ApeTreeCreateDefault(const edm::ParameterSet &)
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
const std::vector< edm::ParameterSet > sectors_
std::map< unsigned int, ReducedTrackerTreeVariables > m_tkTreeVar_
#define DEFINE_FWK_MODULE(type)
std::map< unsigned int, TrackerSectorStruct > m_tkSector_
bool checkModuleBools(const bool, const std::vector< unsigned int > &) const
const std::string trackerTreeFile_
bool checkModuleIds(const unsigned int, const std::vector< unsigned int > &) const
ParameterDescriptionBase * add(U const &iLabel, T const &value)
~ApeTreeCreateDefault() override
std::vector< AlignTransformErrorExtended > m_alignError
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const std::string resultFile_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool checkModuleDirections(const int, const std::vector< int > &) const
bool checkIntervalsForSectors(const unsigned int sectorCounter, const std::vector< double > &) const
bool isPixel(HitType hitType)
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
void analyze(const edm::Event &, const edm::EventSetup &) override
std::vector< unsigned int > v_rawId