#include <TVectorD.h>
#include <TGeoManager.h>
#include <TGeoMatrix.h>
#include <TGeoVolume.h>
#include <TGeoNode.h>
#include "AliITSv11GeomCable.h"
ClassImp(AliITSv11GeomCable)
AliITSv11GeomCable::AliITSv11GeomCable(): TNamed(),
fDebug(0),
fPointArray(),
fVolumeArray(),
fCurrentVol(0),
fInitialNode(0)
{
fPointArray.SetOwner();
for(Int_t i=0;i<fgkCableMaxNodeLevel;i++)fNodeInd[i]=0;
}
AliITSv11GeomCable::AliITSv11GeomCable(const char* name): TNamed(name,""),
fDebug(0),
fPointArray(),
fVolumeArray(),
fCurrentVol(0),
fInitialNode(0) {
fPointArray.SetOwner();
for(Int_t i=0;i<fgkCableMaxNodeLevel;i++)fNodeInd[i]=0;
}
AliITSv11GeomCable::~AliITSv11GeomCable() {
fPointArray.Clear();
fVolumeArray.Clear();
}
void AliITSv11GeomCable::AddCheckPoint( TGeoVolume *vol, Int_t iCheckPt,
Double_t *coord)
{
if (iCheckPt>=fVolumeArray.GetEntriesFast()) {
fVolumeArray.AddLast(vol);
TVectorD *point = new TVectorD(3,coord);
fPointArray.AddLast(point);
} else if ((iCheckPt >= 0)&&(iCheckPt < fVolumeArray.GetEntriesFast())) {
fVolumeArray.AddAt(vol, iCheckPt);
TVectorD *point = new TVectorD(3,coord);
fPointArray.AddAt(point, iCheckPt);
};
}
void AliITSv11GeomCable::ResetPoints() {
fPointArray.Delete();
fVolumeArray.Clear();
}
Int_t AliITSv11GeomCable::GetPoint( Int_t iCheckPt, Double_t *coord)
const {
TVectorD *coordVector =(TVectorD *)fPointArray.UncheckedAt(iCheckPt);
#if ROOT_VERSION_CODE < ROOT_VERSION(4,0,0)
CopyFrom(coord, coordVector->GetElements());
#else
CopyFrom(coord, coordVector->GetMatrixArray());
#endif
return kTRUE;
}
Int_t AliITSv11GeomCable::GetVect( Int_t iCheckPt, Double_t *coord)
const {
TVectorD *coordVector =(TVectorD *)fPointArray.UncheckedAt(iCheckPt);
#if ROOT_VERSION_CODE < ROOT_VERSION(4,0,0)
CopyFrom(coord, coordVector->GetElements());
#else
CopyFrom(coord, coordVector->GetMatrixArray());
#endif
return kTRUE;
}
TGeoVolume *AliITSv11GeomCable::GetVolume( Int_t iCheckPt ) const {
if (iCheckPt >= fVolumeArray.GetEntriesFast())
return 0;
else
return (TGeoVolume *) fVolumeArray.UncheckedAt(iCheckPt);
}
void AliITSv11GeomCable::SetInitialNode(TGeoVolume *vol) {
if (fInitialNode) delete fInitialNode;
fInitialNode = new TGeoNodeMatrix(vol,0);
fInitialNode->SetName("nodeInConstruction");
}
void AliITSv11GeomCable::ResetInitialNode() {
if (fInitialNode) delete fInitialNode;
fInitialNode = 0;
}
bool AliITSv11GeomCable::CheckDaughter(const TGeoNode* node, Int_t i)
{
Int_t j = fNodeInd[i];
if (node->GetVolume()==fCurrentVol) return kTRUE;
TObjArray *array = node->GetNodes();
if (array) {
Int_t nDaughters = array->GetEntriesFast();
if (j==-1) j++;
while (j<nDaughters) {
TGeoNode *subNode = (TGeoNode *) array->UncheckedAt(j);
fNodeInd[i] = j;
if (CheckDaughter(subNode, i+1)) return kTRUE;
j++;
};
fNodeInd[i] = -1;
};
return kFALSE;
}
Int_t AliITSv11GeomCable::
GetCheckPoint( Int_t iCheckPt, Int_t iOccur, Int_t motherLevel,
Double_t *coord ) {
if (iCheckPt >= fVolumeArray.GetEntriesFast()) return kFALSE;
TGeoNode *mainNode;
if (fInitialNode==0) {
TObjArray *nodes = gGeoManager->GetListOfNodes();
if (nodes->GetEntriesFast()==0) return kFALSE;
mainNode = (TGeoNode *) nodes->UncheckedAt(0);
} else {
mainNode = fInitialNode;
};
fCurrentVol = GetVolume(iCheckPt);
ResetCheckDaughter();
Int_t currentOccur = 0;
while ( CheckDaughter(mainNode) && (currentOccur!=iOccur) ) {
currentOccur++;
Int_t maxLevel = 0;
while (fNodeInd[maxLevel]!=-1) maxLevel++;
fNodeInd[maxLevel-1]++;
};
Int_t maxLevel = 0;
while (fNodeInd[maxLevel]!=-1) maxLevel++;
maxLevel--;
if (maxLevel<-1) return kFALSE;
TGeoNode *pathNode[fgkCableMaxNodeLevel];
pathNode[0] = mainNode;
for (Int_t i=0; i<=maxLevel; i++) {
pathNode[i+1] = pathNode[i]->GetDaughter(fNodeInd[i]);
};
Double_t localCoord[3];
GetPoint(iCheckPt, localCoord);
CopyFrom(coord, localCoord);
if (motherLevel>maxLevel+2) motherLevel = maxLevel+2;
for (Int_t i=maxLevel; i>maxLevel-motherLevel; i--) {
pathNode[i+1]->GetMatrix()->LocalToMaster(localCoord, coord);
CopyFrom(localCoord, coord);
};
return kTRUE;
}
Int_t AliITSv11GeomCable::GetCheckVect( Int_t iCheckPt, Int_t iOccur,
Int_t motherLevel, Double_t *coord)
{
if (iCheckPt >= fVolumeArray.GetEntriesFast()) return kFALSE;
TGeoNode *mainNode;
if (fInitialNode==0) {
TObjArray *nodes = gGeoManager->GetListOfNodes();
if (nodes->GetEntriesFast()==0) return kFALSE;
mainNode = (TGeoNode *) nodes->UncheckedAt(0);
} else {
mainNode = fInitialNode;
};
fCurrentVol = GetVolume(iCheckPt);
ResetCheckDaughter();
Int_t currentOccur = 0;
while ( CheckDaughter(mainNode) && (currentOccur!=iOccur) ) {
currentOccur++;
Int_t maxLevel = 0;
while (fNodeInd[maxLevel]!=-1) maxLevel++;
fNodeInd[maxLevel-1]++;
};
Int_t maxLevel = 0;
while (fNodeInd[maxLevel]!=-1) maxLevel++;
maxLevel--;
if (maxLevel<-1) return kFALSE;
TGeoNode *pathNode[fgkCableMaxNodeLevel];
pathNode[0] = mainNode;
for (Int_t i=0; i<=maxLevel; i++) {
pathNode[i+1] = pathNode[i]->GetDaughter(fNodeInd[i]);
};
Double_t localCoord[3];
GetVect(iCheckPt, localCoord);
CopyFrom(coord, localCoord);
if (motherLevel>maxLevel+2) motherLevel = maxLevel+2;
for (Int_t i=maxLevel; i>maxLevel-motherLevel; i--) {
pathNode[i+1]->GetMatrix()->LocalToMasterVect(localCoord, coord);
CopyFrom(localCoord, coord);
};
return kTRUE;
}
Int_t AliITSv11GeomCable::GetCheckVect( const Double_t *localCoord,
TGeoVolume *vol, Int_t iOccur,
Int_t motherLevel, Double_t *coord)
{
TGeoNode *mainNode;
if (fInitialNode==0) {
TObjArray *nodes = gGeoManager->GetListOfNodes();
if (nodes->GetEntriesFast()==0) return kFALSE;
mainNode = (TGeoNode *) nodes->UncheckedAt(0);
} else {
mainNode = fInitialNode; };
fCurrentVol = vol;
Int_t currentOccur = 0;
ResetCheckDaughter();
while ( CheckDaughter(mainNode) && (currentOccur!=iOccur) ) {
currentOccur++;
Int_t maxLevel = 0;
while (fNodeInd[maxLevel]!=-1) maxLevel++;
fNodeInd[maxLevel-1]++;
};
Int_t maxLevel = 0;
while (fNodeInd[maxLevel]!=-1) maxLevel++;
maxLevel--;
if (maxLevel<-1) return kFALSE;
TGeoNode *pathNode[fgkCableMaxNodeLevel];
pathNode[0] = mainNode;
for (Int_t i=0; i<=maxLevel; i++) {
pathNode[i+1] = pathNode[i]->GetDaughter(fNodeInd[i]);
};
if (motherLevel>maxLevel+2) motherLevel = maxLevel+2;
Double_t tempCoord[3] = {localCoord[0], localCoord[1], localCoord[2]};
CopyFrom(coord, tempCoord);
for (Int_t i=maxLevel; i>maxLevel-motherLevel; i--) {
pathNode[i+1]->GetMatrix()->LocalToMasterVect(tempCoord, coord);
CopyFrom(tempCoord, coord);
};
return kTRUE;
}
AliITSv11GeomCable.cxx:10 AliITSv11GeomCable.cxx:11 AliITSv11GeomCable.cxx:12 AliITSv11GeomCable.cxx:13 AliITSv11GeomCable.cxx:14 AliITSv11GeomCable.cxx:15 AliITSv11GeomCable.cxx:16 AliITSv11GeomCable.cxx:17 AliITSv11GeomCable.cxx:18 AliITSv11GeomCable.cxx:19 AliITSv11GeomCable.cxx:20 AliITSv11GeomCable.cxx:21 AliITSv11GeomCable.cxx:22 AliITSv11GeomCable.cxx:23 AliITSv11GeomCable.cxx:24 AliITSv11GeomCable.cxx:25 AliITSv11GeomCable.cxx:26 AliITSv11GeomCable.cxx:27 AliITSv11GeomCable.cxx:28 AliITSv11GeomCable.cxx:29 AliITSv11GeomCable.cxx:30 AliITSv11GeomCable.cxx:31 AliITSv11GeomCable.cxx:32 AliITSv11GeomCable.cxx:33 AliITSv11GeomCable.cxx:34 AliITSv11GeomCable.cxx:35 AliITSv11GeomCable.cxx:36 AliITSv11GeomCable.cxx:37 AliITSv11GeomCable.cxx:38 AliITSv11GeomCable.cxx:39 AliITSv11GeomCable.cxx:40 AliITSv11GeomCable.cxx:41 AliITSv11GeomCable.cxx:42 AliITSv11GeomCable.cxx:43 AliITSv11GeomCable.cxx:44 AliITSv11GeomCable.cxx:45 AliITSv11GeomCable.cxx:46 AliITSv11GeomCable.cxx:47 AliITSv11GeomCable.cxx:48 AliITSv11GeomCable.cxx:49 AliITSv11GeomCable.cxx:50 AliITSv11GeomCable.cxx:51 AliITSv11GeomCable.cxx:52 AliITSv11GeomCable.cxx:53 AliITSv11GeomCable.cxx:54 AliITSv11GeomCable.cxx:55 AliITSv11GeomCable.cxx:56 AliITSv11GeomCable.cxx:57 AliITSv11GeomCable.cxx:58 AliITSv11GeomCable.cxx:59 AliITSv11GeomCable.cxx:60 AliITSv11GeomCable.cxx:61 AliITSv11GeomCable.cxx:62 AliITSv11GeomCable.cxx:63 AliITSv11GeomCable.cxx:64 AliITSv11GeomCable.cxx:65 AliITSv11GeomCable.cxx:66 AliITSv11GeomCable.cxx:67 AliITSv11GeomCable.cxx:68 AliITSv11GeomCable.cxx:69 AliITSv11GeomCable.cxx:70 AliITSv11GeomCable.cxx:71 AliITSv11GeomCable.cxx:72 AliITSv11GeomCable.cxx:73 AliITSv11GeomCable.cxx:74 AliITSv11GeomCable.cxx:75 AliITSv11GeomCable.cxx:76 AliITSv11GeomCable.cxx:77 AliITSv11GeomCable.cxx:78 AliITSv11GeomCable.cxx:79 AliITSv11GeomCable.cxx:80 AliITSv11GeomCable.cxx:81 AliITSv11GeomCable.cxx:82 AliITSv11GeomCable.cxx:83 AliITSv11GeomCable.cxx:84 AliITSv11GeomCable.cxx:85 AliITSv11GeomCable.cxx:86 AliITSv11GeomCable.cxx:87 AliITSv11GeomCable.cxx:88 AliITSv11GeomCable.cxx:89 AliITSv11GeomCable.cxx:90 AliITSv11GeomCable.cxx:91 AliITSv11GeomCable.cxx:92 AliITSv11GeomCable.cxx:93 AliITSv11GeomCable.cxx:94 AliITSv11GeomCable.cxx:95 AliITSv11GeomCable.cxx:96 AliITSv11GeomCable.cxx:97 AliITSv11GeomCable.cxx:98 AliITSv11GeomCable.cxx:99 AliITSv11GeomCable.cxx:100 AliITSv11GeomCable.cxx:101 AliITSv11GeomCable.cxx:102 AliITSv11GeomCable.cxx:103 AliITSv11GeomCable.cxx:104 AliITSv11GeomCable.cxx:105 AliITSv11GeomCable.cxx:106 AliITSv11GeomCable.cxx:107 AliITSv11GeomCable.cxx:108 AliITSv11GeomCable.cxx:109 AliITSv11GeomCable.cxx:110 AliITSv11GeomCable.cxx:111 AliITSv11GeomCable.cxx:112 AliITSv11GeomCable.cxx:113 AliITSv11GeomCable.cxx:114 AliITSv11GeomCable.cxx:115 AliITSv11GeomCable.cxx:116 AliITSv11GeomCable.cxx:117 AliITSv11GeomCable.cxx:118 AliITSv11GeomCable.cxx:119 AliITSv11GeomCable.cxx:120 AliITSv11GeomCable.cxx:121 AliITSv11GeomCable.cxx:122 AliITSv11GeomCable.cxx:123 AliITSv11GeomCable.cxx:124 AliITSv11GeomCable.cxx:125 AliITSv11GeomCable.cxx:126 AliITSv11GeomCable.cxx:127 AliITSv11GeomCable.cxx:128 AliITSv11GeomCable.cxx:129 AliITSv11GeomCable.cxx:130 AliITSv11GeomCable.cxx:131 AliITSv11GeomCable.cxx:132 AliITSv11GeomCable.cxx:133 AliITSv11GeomCable.cxx:134 AliITSv11GeomCable.cxx:135 AliITSv11GeomCable.cxx:136 AliITSv11GeomCable.cxx:137 AliITSv11GeomCable.cxx:138 AliITSv11GeomCable.cxx:139 AliITSv11GeomCable.cxx:140 AliITSv11GeomCable.cxx:141 AliITSv11GeomCable.cxx:142 AliITSv11GeomCable.cxx:143 AliITSv11GeomCable.cxx:144 AliITSv11GeomCable.cxx:145 AliITSv11GeomCable.cxx:146 AliITSv11GeomCable.cxx:147 AliITSv11GeomCable.cxx:148 AliITSv11GeomCable.cxx:149 AliITSv11GeomCable.cxx:150 AliITSv11GeomCable.cxx:151 AliITSv11GeomCable.cxx:152 AliITSv11GeomCable.cxx:153 AliITSv11GeomCable.cxx:154 AliITSv11GeomCable.cxx:155 AliITSv11GeomCable.cxx:156 AliITSv11GeomCable.cxx:157 AliITSv11GeomCable.cxx:158 AliITSv11GeomCable.cxx:159 AliITSv11GeomCable.cxx:160 AliITSv11GeomCable.cxx:161 AliITSv11GeomCable.cxx:162 AliITSv11GeomCable.cxx:163 AliITSv11GeomCable.cxx:164 AliITSv11GeomCable.cxx:165 AliITSv11GeomCable.cxx:166 AliITSv11GeomCable.cxx:167 AliITSv11GeomCable.cxx:168 AliITSv11GeomCable.cxx:169 AliITSv11GeomCable.cxx:170 AliITSv11GeomCable.cxx:171 AliITSv11GeomCable.cxx:172 AliITSv11GeomCable.cxx:173 AliITSv11GeomCable.cxx:174 AliITSv11GeomCable.cxx:175 AliITSv11GeomCable.cxx:176 AliITSv11GeomCable.cxx:177 AliITSv11GeomCable.cxx:178 AliITSv11GeomCable.cxx:179 AliITSv11GeomCable.cxx:180 AliITSv11GeomCable.cxx:181 AliITSv11GeomCable.cxx:182 AliITSv11GeomCable.cxx:183 AliITSv11GeomCable.cxx:184 AliITSv11GeomCable.cxx:185 AliITSv11GeomCable.cxx:186 AliITSv11GeomCable.cxx:187 AliITSv11GeomCable.cxx:188 AliITSv11GeomCable.cxx:189 AliITSv11GeomCable.cxx:190 AliITSv11GeomCable.cxx:191 AliITSv11GeomCable.cxx:192 AliITSv11GeomCable.cxx:193 AliITSv11GeomCable.cxx:194 AliITSv11GeomCable.cxx:195 AliITSv11GeomCable.cxx:196 AliITSv11GeomCable.cxx:197 AliITSv11GeomCable.cxx:198 AliITSv11GeomCable.cxx:199 AliITSv11GeomCable.cxx:200 AliITSv11GeomCable.cxx:201 AliITSv11GeomCable.cxx:202 AliITSv11GeomCable.cxx:203 AliITSv11GeomCable.cxx:204 AliITSv11GeomCable.cxx:205 AliITSv11GeomCable.cxx:206 AliITSv11GeomCable.cxx:207 AliITSv11GeomCable.cxx:208 AliITSv11GeomCable.cxx:209 AliITSv11GeomCable.cxx:210 AliITSv11GeomCable.cxx:211 AliITSv11GeomCable.cxx:212 AliITSv11GeomCable.cxx:213 AliITSv11GeomCable.cxx:214 AliITSv11GeomCable.cxx:215 AliITSv11GeomCable.cxx:216 AliITSv11GeomCable.cxx:217 AliITSv11GeomCable.cxx:218 AliITSv11GeomCable.cxx:219 AliITSv11GeomCable.cxx:220 AliITSv11GeomCable.cxx:221 AliITSv11GeomCable.cxx:222 AliITSv11GeomCable.cxx:223 AliITSv11GeomCable.cxx:224 AliITSv11GeomCable.cxx:225 AliITSv11GeomCable.cxx:226 AliITSv11GeomCable.cxx:227 AliITSv11GeomCable.cxx:228 AliITSv11GeomCable.cxx:229 AliITSv11GeomCable.cxx:230 AliITSv11GeomCable.cxx:231 AliITSv11GeomCable.cxx:232 AliITSv11GeomCable.cxx:233 AliITSv11GeomCable.cxx:234 AliITSv11GeomCable.cxx:235 AliITSv11GeomCable.cxx:236 AliITSv11GeomCable.cxx:237 AliITSv11GeomCable.cxx:238 AliITSv11GeomCable.cxx:239 AliITSv11GeomCable.cxx:240 AliITSv11GeomCable.cxx:241 AliITSv11GeomCable.cxx:242 AliITSv11GeomCable.cxx:243 AliITSv11GeomCable.cxx:244 AliITSv11GeomCable.cxx:245 AliITSv11GeomCable.cxx:246 AliITSv11GeomCable.cxx:247 AliITSv11GeomCable.cxx:248 AliITSv11GeomCable.cxx:249 AliITSv11GeomCable.cxx:250 AliITSv11GeomCable.cxx:251 AliITSv11GeomCable.cxx:252 AliITSv11GeomCable.cxx:253 AliITSv11GeomCable.cxx:254 AliITSv11GeomCable.cxx:255 AliITSv11GeomCable.cxx:256 AliITSv11GeomCable.cxx:257 AliITSv11GeomCable.cxx:258 AliITSv11GeomCable.cxx:259 AliITSv11GeomCable.cxx:260 AliITSv11GeomCable.cxx:261 AliITSv11GeomCable.cxx:262 AliITSv11GeomCable.cxx:263 AliITSv11GeomCable.cxx:264 AliITSv11GeomCable.cxx:265 AliITSv11GeomCable.cxx:266 AliITSv11GeomCable.cxx:267 AliITSv11GeomCable.cxx:268 AliITSv11GeomCable.cxx:269 AliITSv11GeomCable.cxx:270 AliITSv11GeomCable.cxx:271 AliITSv11GeomCable.cxx:272 AliITSv11GeomCable.cxx:273 AliITSv11GeomCable.cxx:274 AliITSv11GeomCable.cxx:275 AliITSv11GeomCable.cxx:276 AliITSv11GeomCable.cxx:277 AliITSv11GeomCable.cxx:278 AliITSv11GeomCable.cxx:279 AliITSv11GeomCable.cxx:280 AliITSv11GeomCable.cxx:281 AliITSv11GeomCable.cxx:282 AliITSv11GeomCable.cxx:283 AliITSv11GeomCable.cxx:284 AliITSv11GeomCable.cxx:285 AliITSv11GeomCable.cxx:286 AliITSv11GeomCable.cxx:287 AliITSv11GeomCable.cxx:288 AliITSv11GeomCable.cxx:289 AliITSv11GeomCable.cxx:290 AliITSv11GeomCable.cxx:291 AliITSv11GeomCable.cxx:292 AliITSv11GeomCable.cxx:293 AliITSv11GeomCable.cxx:294 AliITSv11GeomCable.cxx:295 AliITSv11GeomCable.cxx:296 AliITSv11GeomCable.cxx:297 AliITSv11GeomCable.cxx:298 AliITSv11GeomCable.cxx:299 AliITSv11GeomCable.cxx:300 AliITSv11GeomCable.cxx:301 AliITSv11GeomCable.cxx:302 AliITSv11GeomCable.cxx:303 AliITSv11GeomCable.cxx:304 AliITSv11GeomCable.cxx:305 AliITSv11GeomCable.cxx:306 AliITSv11GeomCable.cxx:307 AliITSv11GeomCable.cxx:308 AliITSv11GeomCable.cxx:309 AliITSv11GeomCable.cxx:310 AliITSv11GeomCable.cxx:311 AliITSv11GeomCable.cxx:312 AliITSv11GeomCable.cxx:313 AliITSv11GeomCable.cxx:314 AliITSv11GeomCable.cxx:315 AliITSv11GeomCable.cxx:316 AliITSv11GeomCable.cxx:317 AliITSv11GeomCable.cxx:318 AliITSv11GeomCable.cxx:319 AliITSv11GeomCable.cxx:320 AliITSv11GeomCable.cxx:321 AliITSv11GeomCable.cxx:322 AliITSv11GeomCable.cxx:323 AliITSv11GeomCable.cxx:324 AliITSv11GeomCable.cxx:325 AliITSv11GeomCable.cxx:326 AliITSv11GeomCable.cxx:327 AliITSv11GeomCable.cxx:328 AliITSv11GeomCable.cxx:329 AliITSv11GeomCable.cxx:330 AliITSv11GeomCable.cxx:331 AliITSv11GeomCable.cxx:332 AliITSv11GeomCable.cxx:333 AliITSv11GeomCable.cxx:334 AliITSv11GeomCable.cxx:335 AliITSv11GeomCable.cxx:336 AliITSv11GeomCable.cxx:337 AliITSv11GeomCable.cxx:338 AliITSv11GeomCable.cxx:339 AliITSv11GeomCable.cxx:340 AliITSv11GeomCable.cxx:341 AliITSv11GeomCable.cxx:342 AliITSv11GeomCable.cxx:343 AliITSv11GeomCable.cxx:344 AliITSv11GeomCable.cxx:345 AliITSv11GeomCable.cxx:346 AliITSv11GeomCable.cxx:347 AliITSv11GeomCable.cxx:348 AliITSv11GeomCable.cxx:349 AliITSv11GeomCable.cxx:350 AliITSv11GeomCable.cxx:351 AliITSv11GeomCable.cxx:352 AliITSv11GeomCable.cxx:353