21 #include "FairGeoNode.h"
22 #include "FairGeoTransform.h"
23 #include "FairGeoVector.h"
24 #include "FairGeoRotation.h"
25 #include "FairGeoTube.h"
30 #include "TObjArray.h"
32 #include "TGeoVolume.h"
34 #include "TClonesArray.h"
35 #include "TGeoManager.h"
36 #include "TGeoMatrix.h"
37 #include "TGeoVolume.h"
52 if(
fGeoType > 2) cout <<
"-E- PndSttMapCreator: geometry not supported by map" << endl;
54 if(!
gGeoManager) cout <<
"-E- PndSttMapCreator: no geo manager " << endl;
63 if(!
gGeoManager) cout <<
"-E- PndSttMapCreator: no geo manager " << endl;
68 if(
fGeoType > 2) cout <<
"-E- PndSttMapCreator: geometry not supported by map" << endl;
165 cavename =
"/cave_1/stt01assembly_0/";
166 tmpstring = tmpstring(cavename.Sizeof() - 1, tmpstring.Sizeof());
169 int index = tmpstring.Index(
"/");
170 tmpstring = tmpstring(0, index);
173 if(tmpstring.Contains(
"_0")) {
178 tmpstring.Replace(9, 1,
"#");
192 if(tmpstring.Contains(
"#")) {
193 int start = tmpstring.Index(
"#") + 1;
194 tmpstring = tmpstring(start, tmpstring.Sizeof());
197 int start = tmpstring.Index(
"e") + 1;
198 tmpstring = tmpstring(start, tmpstring.Sizeof());
200 return tmpstring.Atoi();
214 TListIter iter(volList);
216 FairGeoNode* node = NULL;
220 pararray->AddLast(parms);
221 while( (node = (FairGeoNode*) iter.Next()) ) {
222 if ( node->isSensitive() )
continue;
223 TString nodename = node->GetName();
224 if(!nodename.Contains(
"stt01tube"))
continue;
228 pararray->AddLast(parms);
235 TString nodename = pnode->getName();
238 FairGeoTransform *lab = pnode->getLabTransform();
239 FairGeoVector tra = lab->getTransVector();
240 FairGeoRotation
rot = lab->getRotMatrix();
241 TGeoVolume* rootvol = pnode->getRootVolume();
242 TGeoTube *gtube = (TGeoTube*) rootvol->GetShape();
243 Double_t halflength = gtube->GetDz();
257 for(
int i = 1;
i < pararray->GetEntries();
i++) {
278 cout <<
"PndSttMapCreator::GetTubeFromParametersToFillGeoType1 (tubeid): tube " << tubeid <<
" not found (nor as a copy)" << endl;
283 TGeoNode *assembly_node =
gGeoManager->GetCurrentNode();
284 double local[3] = {0., 0., 0.}, master[3];
285 assembly_node->LocalToMaster(local, master);
286 TVector3 assembly_position(master[0], master[1], master[2]);
295 if(ispath == kFALSE) {
300 if(ispath == kFALSE) {
301 cout <<
"PndSttMapCreator::GetTubeFromParametersToFillGeoType1 (ispath): tube " << tubeid <<
" not found (nor as a copy)" << endl;
306 TGeoNode* tube_node =
gGeoManager->GetCurrentNode();
307 tube_node->LocalToMaster(local, master);
308 TVector3 tube_position(master[0], master[1], master[2]);
309 tube_position += assembly_position;
315 double x = tube_position.X();
316 double y = tube_position.Y();
317 double z = tube_position.Z();
319 TGeoMatrix *mat = tube_node->GetMatrix();
323 int irot = 0,
i = 0, j = 0;
324 for(
i = 0;
i < 3;
i++) {
325 for(j = 0; j < 3; j++) {
326 r[
i][j] = rotation[irot];
336 (
float)x,(
float)y,(
float)z,
337 r[0][0],r[0][1],r[0][2],
338 r[1][0],r[1][1],r[1][2],
339 r[2][0],r[2][1],r[2][2],
350 TGeoNode *assembly_node =
gGeoManager->GetCurrentNode();
351 double local[3] = {0., 0., 0.}, master[3];
352 assembly_node->LocalToMaster(local, master);
353 TVector3 assembly_position(master[0], master[1], master[2]);
361 if(ispath == kFALSE) {
362 cout <<
"PndSttMapCreator::GetTubeFromTubeIDGeoType1 (ispath): tube " << tubeid <<
" not found (nor as a copy)" << endl;
367 TGeoNode* tube_node =
gGeoManager->GetCurrentNode();
368 tube_node->LocalToMaster(local, master);
369 TVector3 tube_position(master[0], master[1], master[2]);
370 tube_position += assembly_position;
376 double x = tube_position.X();
377 double y = tube_position.Y();
378 double z = tube_position.Z();
380 TGeoMatrix *mat = tube_node->GetMatrix();
384 int irot = 0,
i = 0, j = 0;
385 for(
i = 0;
i < 3;
i++) {
386 for(j = 0; j < 3; j++) {
387 r[
i][j] = rotation[irot];
397 (
float)x,(
float)y,(
float)z,
398 r[0][0],r[0][1],r[0][2],
399 r[1][0],r[1][1],r[1][2],
400 r[2][0],r[2][1],r[2][2],
414 tmpstring += tubeid ;
416 if(isCopy == kTRUE) tmpstring.Prepend(
"_");
417 else tmpstring.Append(
"_0");
418 tmpstring.Prepend(
"stt01tube");
421 cavename =
"/cave_1/stt01assembly_0/";
422 tmpstring.Prepend(cavename);
430 TString nodename = pnode->getName();
433 FairGeoTransform *lab = pnode->getLabTransform();
434 FairGeoVector tra = lab->getTransVector();
435 FairGeoRotation
rot = lab->getRotMatrix();
436 TGeoVolume* rootvol = pnode->getRootVolume();
437 TGeoTube *gtube = (TGeoTube*) rootvol->GetShape();
438 Double_t halflength = gtube->GetDz();
459 TIter iter = sensorNames->MakeIterator();
464 TObjString* sensorName;
465 while( (sensorName = (TObjString*)iter.Next()) ) {
466 TString stringName = sensorName->GetString();
467 if (stringName.Contains(
"ArCO2Sensitive")){
470 TGeoTube* tube = (TGeoTube*)node->GetVolume()->GetShape();
473 pararray->AddLast(parms);
487 for(
int i = 1;
i < pararray->GetEntries();
i++) {
508 cout <<
"PndSttMapCreator::GetTubeFromParametersToFillGeoType2 (tubeid): tube " << tubeid <<
" not found (nor as a copy)" << endl;
511 TVector3 local(0.,0.,0.);
517 int irot = 0,
i = 0, j = 0;
518 for(
i = 0;
i < 3;
i++) {
519 for(j = 0; j < 3; j++) {
520 r[
i][j] = rotation[irot];
526 localToMaster.X(), localToMaster.Y(),localToMaster.Z(),
527 r[0][0],r[0][1],r[0][2],
528 r[1][0],r[1][1],r[1][2],
529 r[2][0],r[2][1],r[2][2],
PndSttTube * GetTubeFromParametersToFillGeoType1(PndSttTubeParameters *parms)
Int_t GetTubeIDFromPathGeoType1(TString path)
Int_t FillSttTubeParametersType2(PndGeoSttPar *par)
TClonesArray * FillTubeArrayGeoType2()
TString GetPathFromTubeIDGeoType1(Int_t tubeid, Bool_t isCopy)
std::map< int, int > copy_map
TString GetNameFromPathGeoType1(TString path)
TClonesArray * fTubeArray
void SetTubeInRad(Double_t inrad)
TGeoManager * gGeoManager
ClassImp(PndSttMapCreator)
Int_t FillSttTubeParameters(PndGeoSttPar *par, TList *volList)
TGeoHMatrix * GetMatrixShortId(Int_t shortId)
Int_t GetTubeIDFromPath(TString path)
PndSttTube * GetTubeFromTubeID(Int_t tubeid)
void SetGeneralParameters()
Int_t GetTubeIDFromNameGeoType2(TString name)
PndGeoSttPar * fSttParameters
Bool_t FillGeometryParameters()
PndSttTube * GetTubeFromParametersToFillGeoType2(PndSttTubeParameters *parms)
TClonesArray * FillTubeArray()
PndSttTubeParameters * CreateTubeParametersGeoType1(FairGeoNode *pnode)
TObjArray * GetSensorNames()
Int_t GetShortID(TString path)
for a given path the (unique) position of the sensor path in the fSensorNamePar-List is given...
static PndGeoHandling * Instance()
void SetTubeOutRad(Double_t outrad)
TObjArray * GetTubeParameters()
TClonesArray * FillTubeArrayGeoType1()
PndSttTubeParameters * CreateTubeParameters(FairGeoNode *pnode)
TVector3 LocalToMasterShortId(const TVector3 &local, const Int_t &shortId)
Int_t GetTubeIDFromName(TString name)
Int_t FillSttTubeParametersGeoType1(PndGeoSttPar *par, TList *volList)
void SetGeometryType(Int_t geoType)
PndSttTubeParameters * CreateTubeParametersGeoType2(FairGeoNode *pnode)
PndSttTube * GetTubeFromParametersToFill(PndSttTubeParameters *parms)
TString GetPathFromTubeID(Int_t tubeid, Bool_t isCopy)
TString GetNameFromPath(TString path)
Int_t GetTubeIDFromNameGeoType1(TString name)
PndSttTube * GetTubeFromTubeIDGeoType1(Int_t tubeid)