24 #include <TGeoManager.h> 25 #include <TObjString.h> 26 #include <TGeoPhysicalNode.h> 27 #include <TClonesArray.h> 28 #include <TGeoMatrix.h> 29 #include <TGeoPhysicalNode.h> 31 #include <TStopwatch.h> 32 #include <TGeoOverlap.h> 33 #include <TPluginManager.h> 51 90, 90, 90, 90, 90, 90,
60 "ITS inner pixels layer",
"ITS outer pixels layer",
61 "ITS inner drifts layer",
"ITS outer drifts layer",
62 "ITS inner strips layer",
"ITS outer strips layer",
63 "TPC inner chambers layer",
"TPC outer chambers layer",
64 "TRD chambers layer 1",
"TRD chambers layer 2",
"TRD chambers layer 3",
65 "TRD chambers layer 4",
"TRD chambers layer 5",
"TRD chambers layer 6",
67 "PHOS EMC layer",
"PHOS CPV layer",
102 {
"GRP",
"ITS",
"TPC",
"TRD",
"TOF",
"PHOS",
"HMPID",
"EMCAL",
"MUON",
"FMD",
"ZDC",
"PMD",
"T0",
"VZERO",
"ACORDE",
"AD",
"MFT",
"FIT"};
103 Int_t
AliGeomManager::fgNalignable[fgkNDetectors] = {0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
111 TGeoManager::UnlockGeometry();
125 AliErrorClass(
"Cannot load a new geometry, the current one being locked. Setting internal geometry to null!!");
131 if (geomFileName && (!gSystem->AccessPathName(geomFileName))) {
132 fgGeometry = TGeoManager::Import(geomFileName);
133 AliInfoClass(Form(
"From now on using geometry from custom geometry file \"%s\"",geomFileName));
140 if(!entry)
AliFatalClass(
"Couldn't load geometry data from CDB!");
146 AliInfoClass(Form(
"From now on using geometry from CDB base folder \"%s\"",
158 if (!geom)
AliFatalClass(
"Pointer to the active geometry is 0x0!");
184 if (layerId < kFirstLayer || layerId >=
kLastLayer) {
199 if (layerId < kFirstLayer || layerId >=
kLastLayer) {
201 return "Invalid Layer!";
218 return ((UShort_t(layerId) << 11) | UShort_t(modId));
231 return ((UShort_t(layerId) << 11) | UShort_t(modId));
244 if(modId < 0 || modId >=
LayerSize(layerId)){
248 return ((UShort_t(layerId) << 11) | UShort_t(modId));
261 if(modId < 0 || modId >=
LayerSize(layerId)){
265 return ((UShort_t(layerId) << 11) | UShort_t(modId));
278 modId = voluid & 0x7ff;
307 Int_t mId = Int_t(voluid & 0x7ff);
314 AliErrorClass(Form(
"Invalid unique volume id: %d !",voluid));
331 AliErrorClass(Form(
"Invalid layer id: %d !",(voluid >> 11)));
353 AliErrorClass(
"Can't get the alignment object! gGeoManager doesn't exist or it is still opened!");
358 AliErrorClass(
"Can't get the alignment object! gGeoManager doesn't contain any aligned nodes!");
363 TGeoPNEntry* pne =
fgGeometry->GetAlignableEntry(symname);
365 path = pne->GetTitle();
367 AliWarningClass(Form(
"The symbolic volume name %s does not correspond to a physical entry. Using it as a volume path!",symname));
371 TGeoPhysicalNode* node = NULL;
372 for (Int_t iNode = 0; iNode < nodesArr->GetEntriesFast(); iNode++) {
373 TGeoPhysicalNode* tempNode = (TGeoPhysicalNode*) nodesArr->UncheckedAt(iNode);
374 const char *nodePath = tempNode->GetName();
375 if (strcmp(path,nodePath) == 0) {
383 AliErrorClass(Form(
"%s not valid neither as symbolic volume name nor as volume path!",path));
392 TGeoHMatrix
align,gprime,g,ginv,l;
393 gprime = *node->GetMatrix();
394 l = *node->GetOriginalMatrix();
395 g = *node->GetMatrix(node->GetLevel()-1);
398 align = gprime * ginv;
415 for (Int_t iModule = 0; iModule <
LayerSize(iLayer); iModule++) {
418 const char *symname =
SymName(volid);
420 AliErrorClass(Form(
"Failed to extract the alignment object for the volume (ID=%d and path=%s) !",volid,symname));
481 return pne->GetName();
502 TString detsString =
"";
503 if(
fgGeometry->CheckPath(
"ALIC_1/ITSV_1")) detsString+=
"ITS ";
504 if(
fgGeometry->CheckPath(
"ALIC_1/TPC_M_1")) detsString+=
"TPC ";
507 TString baseTof(
"ALIC_1/B077_1/BSEGMO");
508 TString middleTof(
"_1/BTOF");
509 TString trailTof(
"_1/FTOA_0");
510 Bool_t tofActive=kFALSE;
512 for(Int_t sm=0; sm<18; sm++)
526 if(tofActive) detsString+=
"TOF ";
529 TString baseTrd(
"ALIC_1/B077_1/BSEGMO");
530 TString middleTrd(
"_1/BTRD");
531 TString trailTrd(
"_1/UTR1_1");
532 Bool_t trdActive=kFALSE;
534 for(Int_t sm=0; sm<18; sm++)
548 if(trdActive) detsString+=
"TRD ";
550 if(
fgGeometry->CheckPath(
"ALIC_1/Hmp0_0")) detsString+=
"HMPID ";
552 TString phosMod, cpvMod;
553 TString basePhos(
"ALIC_1/PHOS_");
554 Bool_t phosActive=kFALSE;
555 Bool_t cpvActive=kFALSE;
557 for(Int_t pmod=0; pmod<5; pmod++)
559 phosMods[pmod]=kFALSE;
567 phosMods[pmod]=kTRUE;
568 if(
fgGeometry->CheckPath(cpvMod.Data())) cpvActive=kTRUE;
571 if(phosActive) detsString+=
"PHOS ";
575 TString baseEmcalSM(
"ALIC_1/XEN1_1/");
576 Bool_t emcalActive=kFALSE;
577 Bool_t emcalSMs[22] = {kFALSE};
578 for(Int_t sm=0; sm<22; sm++)
597 if(emcalActive) detsString+=
"EMCAL ";
602 TGeoPNEntry* pne = 0x0;
606 if(detsString.Contains(
"ITS")){
608 AliDebugClass(2,
"Checking consistency of symbolic names for ITS layers");
609 TString strSPD =
"ITS/SPD";
610 TString strSDD =
"ITS/SDD";
611 TString strSSD =
"ITS/SSD";
612 TString strStave =
"/Stave";
613 TString strHalfStave =
"/HalfStave";
614 TString strLadder =
"/Ladder";
616 TString strSensor =
"/Sensor";
617 TString strEntryName1;
618 TString strEntryName2;
619 TString strEntryName3;
625 for(Int_t cSect = 0; cSect<10; cSect++){
626 strEntryName1 = strSPD;
629 strEntryName1 += cSect;
631 for(Int_t cStave =0; cStave<2; cStave++){
632 strEntryName2 = strEntryName1;
633 strEntryName2 += strStave;
634 strEntryName2 += cStave;
636 for (Int_t cHS=0; cHS<2; cHS++) {
637 strEntryName3 = strEntryName2;
638 strEntryName3 += strHalfStave;
639 strEntryName3 += cHS;
641 for(Int_t cLad =0; cLad<2; cLad++){
642 symname = strEntryName3;
643 symname += strLadder;
644 symname += cLad+cHS*2;
646 pne =
fgGeometry->GetAlignableEntryByUID(uid);
649 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
652 sname = pne->GetName();
653 if(symname.CompareTo(sname))
655 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d." 656 "Expected was %s, found was %s!", uid, symname.Data(), sname));
669 for(Int_t cSect = 0; cSect<10; cSect++){
670 strEntryName1 = strSPD;
673 strEntryName1 += cSect;
675 for(Int_t cStave =0; cStave<4; cStave++){
676 strEntryName2 = strEntryName1;
677 strEntryName2 += strStave;
678 strEntryName2 += cStave;
680 for (Int_t cHS=0; cHS<2; cHS++) {
681 strEntryName3 = strEntryName2;
682 strEntryName3 += strHalfStave;
683 strEntryName3 += cHS;
685 for(Int_t cLad =0; cLad<2; cLad++){
686 symname = strEntryName3;
687 symname += strLadder;
688 symname += cLad+cHS*2;
690 pne =
fgGeometry->GetAlignableEntryByUID(uid);
693 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
696 sname = pne->GetName();
697 if(symname.CompareTo(sname))
699 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d." 700 "Expected was %s, found was %s!", uid, symname.Data(), sname));
713 for(Int_t c1 = 1; c1<=14; c1++){
714 strEntryName1 = strSDD;
716 strEntryName1 +=strLadder;
717 strEntryName1 += (c1-1);
718 for(Int_t c2 =1; c2<=6; c2++){
719 symname = strEntryName1;
720 symname += strSensor;
723 pne =
fgGeometry->GetAlignableEntryByUID(uid);
726 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
729 sname = pne->GetName();
730 if(symname.CompareTo(sname))
732 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 733 "Expected was %s, found was %s!", uid, symname.Data(), sname));
744 for(Int_t c1 = 1; c1<=22; c1++){
745 strEntryName1 = strSDD;
747 strEntryName1 +=strLadder;
748 strEntryName1 += (c1-1);
749 for(Int_t c2 = 1; c2<=8; c2++){
750 symname = strEntryName1;
751 symname += strSensor;
754 pne =
fgGeometry->GetAlignableEntryByUID(uid);
757 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
760 sname = pne->GetName();
761 if(symname.CompareTo(sname))
763 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 764 "Expected was %s, found was %s!", uid, symname.Data(), sname));
775 for(Int_t c1 = 1; c1<=34; c1++){
776 strEntryName1 = strSSD;
778 strEntryName1 +=strLadder;
779 strEntryName1 += (c1-1);
780 for(Int_t c2 = 1; c2<=22; c2++){
781 symname = strEntryName1;
782 symname += strSensor;
785 pne =
fgGeometry->GetAlignableEntryByUID(uid);
788 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
791 sname = pne->GetName();
792 if(symname.CompareTo(sname))
794 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 795 "Expected was %s, found was %s!", uid, symname.Data(), sname));
806 for(Int_t c1 = 1; c1<=38; c1++){
807 strEntryName1 = strSSD;
809 strEntryName1 +=strLadder;
810 strEntryName1 += (c1-1);
811 for(Int_t c2 = 1; c2<=25; c2++){
812 symname = strEntryName1;
813 symname += strSensor;
816 pne =
fgGeometry->GetAlignableEntryByUID(uid);
819 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
822 sname = pne->GetName();
823 if(symname.CompareTo(sname))
825 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 826 "Expected was %s, found was %s!", uid, symname.Data(), sname));
833 AliDebugClass(2,
"Consistency check for ITS symbolic names finished successfully.");
836 if(detsString.Contains(
"TPC"))
840 AliDebugClass(2,
"Checking consistency of symbolic names for TPC layers");
841 TString sAsector=
"TPC/EndcapA/Sector";
842 TString sCsector=
"TPC/EndcapC/Sector";
843 TString sInner=
"/InnerChamber";
844 TString sOuter=
"/OuterChamber";
850 for(Int_t cnt=1; cnt<=18; cnt++)
856 pne =
fgGeometry->GetAlignableEntryByUID(uid);
859 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
862 sname = pne->GetName();
863 if(symname.CompareTo(sname))
865 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 866 "Expected was %s, found was %s!", uid, symname.Data(), sname));
871 for(Int_t cnt=1; cnt<=18; cnt++)
877 pne =
fgGeometry->GetAlignableEntryByUID(uid);
880 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
883 sname = pne->GetName();
884 if(symname.CompareTo(sname))
886 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 887 "Expected was %s, found was %s!", uid, symname.Data(), sname));
897 for(Int_t cnt=1; cnt<=18; cnt++)
903 pne =
fgGeometry->GetAlignableEntryByUID(uid);
906 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
909 sname = pne->GetName();
910 if(symname.CompareTo(sname))
912 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 913 "Expected was %s, found was %s!", uid, symname.Data(), sname));
918 for(Int_t cnt=1; cnt<=18; cnt++)
924 pne =
fgGeometry->GetAlignableEntryByUID(uid);
927 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
930 sname = pne->GetName();
931 if(symname.CompareTo(sname))
933 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 934 "Expected was %s, found was %s!", uid, symname.Data(), sname));
940 AliDebugClass(2,
"Consistency check for TPC symbolic names finished successfully.");
943 if(detsString.Contains(
"TOF"))
947 AliDebugClass(2,
"Checking consistency of symbolic names for TOF layers");
954 Int_t nStrips=nstrA+2*nstrB+2*nstrC;
956 TString snSM =
"TOF/sm";
957 TString snSTRIP =
"/strip";
959 for (Int_t isect = 0; isect < nSectors; isect++) {
960 if(tofSMs[isect])
AliDebugClass(3,Form(
"Consistency check for symnames of TOF supermodule %d.",isect));
961 for (Int_t istr = 1; istr <= nStrips; istr++) {
963 symname += Form(
"%02d",isect);
965 symname += Form(
"%02d",istr);
967 if(!tofSMs[isect])
continue;
968 if ((isect==13 || isect==14 || isect==15) && (istr >= 39 && istr <= 53))
continue;
969 pne =
fgGeometry->GetAlignableEntryByUID(uid);
972 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
975 sname = pne->GetName();
976 if(symname.CompareTo(sname))
978 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 979 "Expected was %s, found was %s!", uid, symname.Data(), sname));
985 AliDebugClass(2,
"Consistency check for TOF symbolic names finished successfully.");
988 if(detsString.Contains(
"HMPID"))
992 AliDebugClass(2,
"Checking consistency of symbolic names for HMPID layers");
993 TString str =
"/HMPID/Chamber";
995 for (modnum=0; modnum < 7; modnum++) {
999 pne =
fgGeometry->GetAlignableEntryByUID(uid);
1002 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
1005 sname = pne->GetName();
1006 if(symname.CompareTo(sname))
1008 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 1009 "Expected was %s, found was %s!", uid, symname.Data(), sname));
1014 AliDebugClass(2,
"Consistency check for HMPID symbolic names finished successfully.");
1017 if(detsString.Contains(
"TRD"))
1022 AliDebugClass(2,
"Checking consistency of symbolic names for TRD layers");
1025 TString snStr =
"TRD/sm";
1026 TString snApp1 =
"/st";
1027 TString snApp2 =
"/pl";
1029 for(Int_t layer=0; layer<6; layer++){
1031 AliDebugClass(3,Form(
"Consistency check for symnames of TRD layer %d.",layer));
1032 for (Int_t isect = 0; isect < 18; isect++) {
1033 for (Int_t icham = 0; icham < 5; icham++) {
1035 symname += Form(
"%02d",isect);
1041 if(!trdSMs[isect])
continue;
1042 if ((isect==13 || isect==14 || isect==15) && icham==2)
continue;
1043 pne =
fgGeometry->GetAlignableEntryByUID(uid);
1046 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
1049 sname = pne->GetName();
1050 if(symname.CompareTo(sname))
1052 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 1053 "Expected was %s, found was %s!", uid, symname.Data(), sname));
1060 AliDebugClass(2,
"Consistency check for TRD symbolic names finished successfully.");
1063 if(detsString.Contains(
"PHOS"))
1067 AliDebugClass(2,
"Checking consistency of symbolic names for PHOS layers");
1069 TString str =
"PHOS/Module";
1072 for (Int_t iModule=0; iModule < 5; iModule++) {
1073 if(!phosMods[iModule])
continue;
1075 symname += (iModule+1);
1077 pne =
fgGeometry->GetAlignableEntryByUID(uid);
1080 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
1083 sname = pne->GetName();
1084 if(symname.CompareTo(sname))
1086 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 1087 "Expected was %s, found was %s!", uid, symname.Data(), sname));
1091 if(!cpvActive)
continue;
1094 pne =
fgGeometry->GetAlignableEntryByUID(uid);
1097 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
1100 sname = pne->GetName();
1101 if(symname.CompareTo(sname))
1103 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 1104 "Expected was %s, found was %s!", uid, symname.Data(), sname));
1108 AliDebugClass(2,
"Consistency check for PHOS symbolic names finished successfully.");
1111 if(detsString.Contains(
"EMCAL"))
1115 AliDebugClass(2,
"Checking consistency of symbolic names for EMCAL layers");
1116 TString str =
"EMCAL/FullSupermodule";
1119 for (Int_t iModule=0; iModule < 22; iModule++) {
1120 if(!emcalSMs[iModule])
continue;
1122 symname += iModule+1;
1123 if(iModule/2 == 5) {
1124 symname =
"EMCAL/HalfSupermodule";
1125 symname += iModule-9;
1126 }
else if(iModule > 11) {
1127 symname =
"EMCAL/DCALSupermodule";
1128 symname += iModule-11;
1132 pne =
fgGeometry->GetAlignableEntryByUID(uid);
1135 AliErrorClass(Form(
"In the currently loaded geometry there is no TGeoPNEntry with unique id %d",uid));
1138 sname = pne->GetName();
1139 if(symname.CompareTo(sname))
1141 AliErrorClass(Form(
"Current loaded geometry differs in the definition of symbolic name for uid %d" 1142 "Expected was %s, found was %s!", uid, symname.Data(), sname));
1147 AliDebugClass(2,
"Consistency check for EMCAL symbolic names finished successfully.");
1164 AliErrorClass(
"Impossible to initialize PNEntries LUT without an active geometry");
1170 for(Int_t modnum=0; modnum<fgLayerSize[iLayer]; modnum++){
1183 AliErrorClass(
"Can't get the global matrix! gGeoManager doesn't exist or it is still opened!");
1188 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
1189 if (pnode)
return pnode->GetMatrix();
1192 pne->SetPhysicalNode(
new TGeoPhysicalNode(pne->GetTitle()));
1193 return pne->GetPhysicalNode()->GetMatrix();
1203 if (!pne)
return NULL;
1215 AliErrorClass(
"No active geometry or geometry not yet closed!");
1219 TGeoPNEntry* pne =
fgGeometry->GetAlignableEntry(symname);
1220 if (!pne)
return NULL;
1232 if (!m)
return kFALSE;
1234 Double_t *
trans = m->GetTranslation();
1235 for (Int_t i = 0; i < 3; i++) t[i] = trans[i];
1247 if (!m)
return kFALSE;
1249 Double_t *rot = m->GetRotationMatrix();
1250 for (Int_t i = 0; i < 9; i++) r[i] = rot[i];
1263 TGeoHMatrix go,invgo;
1265 invgo = go.Inverse();
1267 inclusiveD.Multiply(&invgo);
1281 AliErrorClass(
"Either the alignment object or its index are not valid");
1298 AliErrorClass(
"No active geometry or geometry not yet closed!");
1313 TGeoPNEntry* pne =
fgGeometry->GetAlignableEntry(symname);
1314 const char*
path = NULL;
1316 m = *pne->GetGlobalOrig();
1319 AliWarningClass(Form(
"The symbolic volume name %s does not correspond to a physical entry. Using it as a volume path!",symname));
1338 AliErrorClass(
"Can't get the original global matrix! gGeoManager doesn't exist or it is still opened!");
1347 TIter next(
fgGeometry->GetListOfPhysicalNodes());
1352 TGeoPhysicalNode *physNode = NULL;
1354 TGeoNode *node =
fgGeometry->GetCurrentNode();
1355 while ((physNode=(TGeoPhysicalNode*)next()))
1356 if (physNode->GetNode() == node)
break;
1358 TGeoMatrix *lm = NULL;
1360 lm = physNode->GetOriginalMatrix();
1361 if (!lm) lm = node->GetMatrix();
1363 lm = node->GetMatrix();
1383 AliErrorClass(
"Can't get the global matrix! gGeoManager doesn't exist or it is still opened!");
1387 return pne->GetGlobalOrig();
1403 return pne->GetGlobalOrig();
1413 if (!m)
return kFALSE;
1415 Double_t *
trans = m->GetTranslation();
1416 for (Int_t i = 0; i < 3; i++) t[i] = trans[i];
1428 if (!m)
return kFALSE;
1430 Double_t *rot = m->GetRotationMatrix();
1431 for (Int_t i = 0; i < 9; i++) r[i] = rot[i];
1443 if (!pne)
return NULL;
1445 const TGeoHMatrix *m = pne->GetMatrix();
1447 AliErrorClass(Form(
"TGeoPNEntry (%s) contains no tracking-to-local matrix !",pne->GetName()));
1462 if (!m1)
return kFALSE;
1465 if (!m2)
return kFALSE;
1507 AliInfoClass(
"********* Checking overlaps/extrusions over physical nodes only *********");
1509 TGeoVolume* mvol = 0;
1510 TGeoPhysicalNode* pn;
1512 overlaps->SetOwner();
1516 for(Int_t pni=0; pni<pnList->GetEntriesFast(); pni++){
1517 pn = (TGeoPhysicalNode*) pnList->UncheckedAt(pni);
1520 while(((TGeoVolume*)pn->GetVolume(pn->GetLevel()-levup))->IsAssembly()) levup++;
1522 mvol = pn->GetVolume(pn->GetLevel()-levup);
1523 if(!mvol->IsSelected()){
1524 AliInfoClass(Form(
"Checking overlaps for volume %s",mvol->GetName()));
1525 mvol->CheckOverlaps(threshold);
1527 TIter next(ovexlist);
1529 while ((ov=(TGeoOverlap*)next())) overlaps->Add(ov->Clone());
1530 mvol->SelectVolume();
1533 mvol->SelectVolume(kTRUE);
1535 AliInfoClass(Form(
"Number of overlapping/extruding PNs: %d",overlaps->GetEntriesFast()));
1539 TIter nextN(overlaps);
1541 while ((ovlp=(TGeoOverlap*)nextN())) ovlp->PrintInfo();
1560 if(index==fgkNDetectors)
return -1;
1572 TGeoPNEntry *pne = 0;
1573 const char* detName;
1579 for(Int_t iE = 0; iE < nAlE; iE++)
1582 TString pneName = pne->GetName();
1583 if(pneName.Contains(detName)) nAlDet++;
1584 if(!strcmp(detName,
"GRP"))
if(pneName.Contains(
"ABSO") || pneName.Contains(
"DIPO") ||
1585 pneName.Contains(
"FRAME") || pneName.Contains(
"PIPE") ||
1586 pneName.Contains(
"SHIL")) nAlDet++;
1616 alignObjArray.Clear();
1617 alignObjArray.SetOwner(0);
1619 TString alObjsNotLoaded=
"";
1620 TString alObjsLoaded=
"";
1622 TString alignDetsString(alignDetsList);
1623 TObjArray *detsarr = alignDetsString.Tokenize(
' ');
1624 TIter iter(detsarr);
1625 TObjString *str = 0;
1627 while((str = (TObjString*) iter.Next())){
1628 TString det(str->String());
1629 AliDebugClass(5,Form(
"Loading alignment objs for %s",det.Data()));
1631 alObjsNotLoaded += det.Data();
1632 alObjsNotLoaded +=
" ";
1634 alObjsLoaded += det.Data();
1635 alObjsLoaded +=
" ";
1641 if(!alObjsLoaded.IsNull())
AliInfoClass(Form(
"Alignment objects loaded for: %s",
1642 alObjsLoaded.Data()));
1643 if(!alObjsNotLoaded.IsNull())
1644 AliFatalClass(Form(
"Could not load alignment objects from OCDB for: %s",
1645 alObjsNotLoaded.Data()));
1659 AliDebugClass(2, Form(
"Loading alignment objs for detector: %s",detName));
1667 AliDebugClass(2,Form(
"Couldn't load alignment data for detector %s",detName));
1671 TClonesArray *alignArray = (TClonesArray*) entry->
GetObject();
1672 alignArray->SetOwner(0);
1673 Int_t nAlObjs = alignArray->GetEntries();
1674 AliDebugClass(2,Form(
"Found %d alignment objects for %s",nAlObjs,detName));
1676 if(nAlObjs!=nAlVols)
AliWarningClass(Form(
"%d alignment objects loaded for %s, which has %d alignable volumes",nAlObjs,detName,
GetNalignable(detName)));
1679 TIter iter(alignArray);
1682 while( ( alignObj=(
AliAlignObj *) iter.Next() ) ){
1683 alignObjArray.Add(alignObj);
1687 AliDebugClass(2, Form(
"fAlignObjArray entries: %d",alignObjArray.GetEntries() ));
1698 alignObjArray.Sort();
1699 Int_t nvols = alignObjArray.GetEntriesFast();
1701 Bool_t flag = kTRUE;
1703 for(Int_t j=0; j<nvols; j++)
1719 if(ovexlist->GetEntriesFast()){
1720 AliErrorClass(
"The application of alignment objects to the geometry caused huge overlaps/extrusions!");
1741 if (!inFile || !inFile->IsOpen()) {
1746 TClonesArray* alignObjArray = ((TClonesArray*) inFile->Get(clArrayName));
1748 if (!alignObjArray) {
1749 AliErrorClass(Form(
"Could not get array (%s) from file (%s) !",clArrayName,fileName));
1767 AliCDBId id(path, runnum, runnum, version, sversion);
1769 TClonesArray* alignObjArray =
dynamic_cast<TClonesArray*
>(entry->
GetObject());
1787 if(!entry)
return kFALSE;
1788 TClonesArray* alignObjArray = ((TClonesArray*) entry->
GetObject());
static Bool_t GetFromGeometry(const char *symname, AliAlignObj &alobj)
AliCDBEntry * Get(const AliCDBId &query)
static void InitAlignObjFromGeometry()
static Bool_t GetOrigGlobalMatrixFromPath(const char *path, TGeoHMatrix &m)
TFile * Open(const char *filename, Long64_t &nevents)
const TString & GetPath() const
static void CheckOverlapsOverPNs(Double_t threshold)
static const char * SymName(UShort_t voluid)
static Int_t fgLayerSize[kLastLayer-kFirstLayer]
static AliAlignObj * GetAlignObj(UShort_t voluid)
static const char * LayerName(Int_t layerId)
static AliAlignObj ** fgAlignObjs[kLastLayer-kFirstLayer]
static Int_t GetNalignable(const char *module)
void SetSymName(const TString &symname)
static Bool_t ApplyAlignObjsFromCDB(const char *AlDetsList)
#define AliDebugLevelClass()
static Bool_t GetOrigRotation(Int_t index, Double_t r[9])
Bool_t ApplyToGeometry(Bool_t ovlpcheck=kFALSE)
static TGeoManager * fgGeometry
static Int_t fgNalignable[fgkNDetectors]
static TGeoHMatrix * GetOrigGlobalMatrix(Int_t index)
static TGeoHMatrix * GetMatrix(Int_t index)
static Int_t LayerSize(Int_t layerId)
static void InitNalignable()
static ELayerID VolUIDToLayerSafe(UShort_t voluid, Int_t &modId)
#define AliFatalClass(message)
#define AliInfoClass(message)
TString fileName(const char *dir, int runNumber, const char *da, int i, const char *type)
static const Int_t fgkNDetectors
virtual void SetPars(Double_t x, Double_t y, Double_t z, Double_t psi, Double_t theta, Double_t phi)
static Bool_t LoadAlignObjsFromCDBSingleDet(const char *detName, TObjArray &alignObjArray)
AliCDBEntry * Get(const AliCDBId &query, Bool_t forceCaching=kFALSE)
bool trans(const AliFMDIndex &x, const AliFMDIndex &y, const AliFMDIndex &z)
static void InitPNEntriesLUT()
#define AliErrorClass(message)
#define AliDebugClass(logLevel, message)
AliCDBStorage * GetStorage(const char *dbString)
static const TGeoHMatrix * GetTracking2LocalMatrix(Int_t index)
static ELayerID VolUIDToLayer(UShort_t voluid, Int_t &modId)
TGeoManager * gGeoManager
#define AliWarningClass(message)
static const char * fgkDetectorName[fgkNDetectors]
static void SetGeometry(TGeoManager *const geom)
virtual Bool_t SetMatrix(const TGeoMatrix &m)
static Bool_t GetDeltaForBranch(AliAlignObj &aao, TGeoHMatrix &inclusiveD)
static Bool_t GetRotation(Int_t index, Double_t r[9])
static TGeoPNEntry * GetPNEntry(Int_t index)
static Bool_t GetTrackingMatrix(Int_t index, TGeoHMatrix &m)
static void ResetPNEntriesLUT()
static Bool_t CheckSymNamesLUT(const char *detsToBeChecked)
static Bool_t ApplyAlignObjsToGeom(TObjArray &alObjArray, Bool_t ovlpcheck=kFALSE)
static UShort_t LayerToVolUID(ELayerID layerId, Int_t modId)
const char * GetSymName() const
UShort_t GetVolUID() const
static const char * fgLayerName[kLastLayer-kFirstLayer]
static TGeoPNEntry ** fgPNEntry[kLastLayer-kFirstLayer]
void SetOwner(Bool_t owner)
static AliCDBManager * Instance(TMap *entryCache=NULL, Int_t run=-1)
static Bool_t GetTranslation(Int_t index, Double_t t[3])
static void LoadGeometry(const char *geomFileName=NULL)
static UShort_t LayerToVolUIDSafe(ELayerID layerId, Int_t modId)
static Bool_t GetOrigTranslation(Int_t index, Double_t t[3])