EmcROOTGeo Class Reference

#include <EmcROOTGeo.h>

Inheritance diagram for EmcROOTGeo:

SubDetectorROOTGeo SubDetectorROOTGeo List of all members.

Public Member Functions

 EmcROOTGeo ()
 Constructor.
 ~EmcROOTGeo ()
 Destructor.
void InitFromGdml (const char *gdmlFile, const char *setupName)
 Initialize the instance of ROOTGeo.
void SetNode ()
 Set the pointers to theirs nodes;.
void SetDefaultVis ()
 Set default visual attributes;.
void SetAllVisible ()
 Set all visible;.
void SetQuarterVisible ()
 Set quater visible;.
void SetPhysicalNode ()
 Set the pointers to the physical nodes;.
int GetPartNb ()
 Get number of part;.
int GetThetaNb (int part)
 Get number of theta on part;.
int GetPhiNb (int part)
 Get number of phi on part;.
TGeoVolume * GetVolumeEmc ()
 Get Emc volume;.
TGeoVolume * GetVolumePart (int part)
 Get part volume;.
TGeoVolume * GetVolumePhi (int part, int phi)
 Get phi volume;.
TGeoVolume * GetVolumeTheta (int part, int phi, int theta)
 Get theta volume;.
TGeoVolume * GetVolumeCrystal (int part, int phi, int theta)
 Get crystal volume;.
TGeoNode * GetPart (int part)
 Get part node;.
TGeoNode * GetPhi (int part, int phi)
 Get phi node;.
TGeoNode * GetTheta (int part, int phi, int theta)
 Get theta node;.
TGeoNode * GetCrystal (int part, int phi, int theta)
 Get crystal one;.
TGeoPhysicalNode * GetPhysicalCrystal (int part, int phi, int theta)
 Get crystal physical node;.
 EmcROOTGeo ()
 Constructor.
 ~EmcROOTGeo ()
 Destructor.
void InitFromGDML (const char *gdmlFile, const char *setupName)
 Initialize ROOTGeo from GDML.
void InitFromROOT (TGeoVolume *vol)
 Initialize ROOTGeo from TGeoVolume logicalEmc.
void Init2DGeometry ()
 Initialize 2D Geometry.
void SetNode ()
 Set the pointers to theirs nodes;.
void SetVolumeAppendInVis ()
 Set default visual attributes;.
void SetVolumeDefaultVis ()
 Set default visual attributes;.
void SetAllVisible ()
 Set all visible;.
void SetQuarterVisible ()
 Set quater visible;.
void SetHalfVisible ()
 Set half visible;.
void SetNoEndVisible ()
 Set noend visible;.
void SetPhysicalNode ()
 Set the pointers to the physical nodes;.
void SetDetector ()
 Set Detecor (what is detector depends on you).
void SetHits ()
 Set all physicalNodes corresponding to digiCol;.
void SetVisEmcDetector ()
 Set Emc detector visibility;.
void SetVisEmcHits ()
 Set Emc hits visibility;.
int GetPartNb ()
 Get number of part;.
int GetThetaNb (int part)
 Get number of theta on part;.
int GetPhiNb (int part, int theta)
 Get number of phi on part;.
void SetVolumeEmc (TGeoVolume *vol)
 Set Emc volume, while initializing from ROOT;.
TGeoVolume * GetVolumeEmc ()
 Get Emc volume;.
TGeoVolume * GetVolumePart (int part)
 Get part volume;.
TGeoVolume * GetVolumePhi (int part, int phi)
 Get phi volume;.
TGeoVolume * GetVolumeTheta (int part, int phi, int theta)
 Get theta volume;.
TGeoVolume * GetVolumeCrystal (int part, int phi, int theta)
 Get crystal volume;.
TGeoNode * GetPart (int part)
 Get part node;.
TGeoNode * GetPhi (int part, int phi)
 Get phi node;.
TGeoNode * GetTheta (int part, int phi, int theta)
 Get theta node;.
TGeoNode * GetTheta2 (int part, int phi, int theta)
 Get theta2 node;.
TGeoNode * GetCrystal (int part, int phi, int theta)
 Get crystal one;.
TGeoNode * GetCrystal2 (int part, int phi, int theta)
 Get crystal2 one;.
TGeoPhysicalNode * GetPhysicalCrystal (int part, int phi, int theta)
 Get crystal physical node; all part,phi,theta has a physicalNode.
TGeoPhysicalNode * GetPhysicalCrystal2 (int part, int phi, int theta)
 Get crystal physical node2; EC nb 5,6,14,15,16 in any sector has two physicalNode.
bool HasTwoNodes (int part, int phi, int theta)
 Whether this id is combined of two nodes.
void ComputeThetaPhi (int id, int sector, int nb, int &CryNumberTheta, int &CryNumberPhi)
 Compute theta, phi from sector, nb.
int ComputeEndCopyNb (int num)
 Compute copyNb, copyNb 5,6,14,15,16 corresponding to two volume.
Emc2DCrystalGet2DCrystal (Int_t part, Int_t phi, Int_t theta)
 Get Emc2DCrystal;.
Int_t GetPart (TGeoPhysicalNode *phyNode)
 Get part no of a crystal physcial node.
void Draw (Option_t *option)
 Draw function.
void DrawHits (Option_t *option)
 Draw 2D hits.
void Align (TGeoPhysicalNode *phyNode, TGeoMatrix *newmat=0, TGeoShape *newshape=0, Bool_t check=kFALSE)
 Align a physical node, change its position and shape.
void RestorePhyNode (TGeoPhysicalNode *phyNode, TGeoNode *node)
 Restore the physical node to original shape.
void ReadGdml (const char *gdmlFile, const char *setupName)
 Initialize the instance of ROOTGeo.
virtual void ReadGdml (const char *gdmlFile, const char *setupName)
 Initialize the instance of ROOTGeo.
int IsInitialized ()
 If the ROOT geometry of this subdetctor is initialized;.
virtual int IsInitialized ()
 If the ROOT geometry of this subdetctor is initialized;.
void SetChildNo (int childNo)
virtual void SetChildNo (int childNo)
TGeoVolume * GetLogicalVolume (const std::string &vn)
 Get a logical volume by name;.
virtual TGeoVolume * GetLogicalVolume (const std::string &vn)
 Get a logical volume by name;.
TGeoVolume * GetTopVolume ()
 Get the top(world) volume;.
virtual TGeoVolume * GetTopVolume ()
 Get the top(world) volume;.
TGeoVolumeAssembly * GetAssemblyVolume (const std::string &an)
 Get an assembly by name;.
virtual TGeoVolumeAssembly * GetAssemblyVolume (const std::string &an)
 Get an assembly by name;.
TGeoNode * GetNode (const std::string &nn)
 Get a node(physical volume) by name;.
virtual TGeoNode * GetNode (const std::string &nn)
 Get a node(physical volume) by name;.
virtual int GetHitsNum ()
 Get number of hits in HitsArray;.
virtual TGeoPhysicalNode * GetHit (int i)
 Get ith hit in HitsArray;.
virtual void SetDetectorOn ()
 Set all physicalNodes in m_DeteorsArray visible;.

Protected Attributes

int m_ROOTGeoInit
int m_childNo
TGeoVolume * m_TopVolume
TGeoVolume * m_TopVolume
int m_2DGeoInit
TObjArray * m_DetectorsArray
TObjArray * m_HitsArray
TObjArray * m_2DHitsArray

Private Attributes

int m_kPhiEc
int m_kThetaEc
TGeoVolume * m_Emc
TGeoNode * m_NodeTheta [m_kPart][m_kPhiBr][m_kThetaBr]
TGeoPhysicalNode * m_PhysicalCrystal [m_kPart][m_kPhiBr][m_kThetaBr]
int m_kSectorEc
int m_kNbEc
int m_kRealNbEc
int m_EmcColor
int m_partColor
int m_phiColor
int m_thetaColor
int m_brCrystalColor
int m_ecCrystalColor
TGeoVolume * m_Emc
TGeoNode * m_NodePart [m_kPart]
TGeoNode * m_NodePhi [m_kPart][m_kPhiBr]
TGeoNode * m_NodeTheta [m_kPart][m_kPhiBr][m_kThetaBr]
TGeoNode * m_NodeTheta2 [m_kPart][m_kPhiBr][m_kThetaBr]
TGeoPhysicalNode * m_PhysicalCrystal [m_kPart][m_kPhiBr][m_kThetaBr]
TGeoPhysicalNode * m_PhysicalCrystal2 [m_kPart][m_kPhiBr][m_kThetaBr]
TObjArray * m_PhyNodeOrgArray
const TObjArray * m_EmcDigiCol
Emc2DCrystalm_Emc2DCrystal [m_kPart][m_kPhiBr][m_kThetaBr]

Static Private Attributes

static const int m_kPart = 3
static const int m_kPhiBr = 120
static const int m_kThetaBr = 44
static const int EMC_TIME_FACTOR = 1
static const int EMC_CHARGE_FACTOR = 1000

Detailed Description

Class EmcGeo contains all of the objects necessary to describe the emc geometry.

Author:
Zhengyun You {mailto:youzy@hep.pku.cn}

Definition at line 30 of file EmcROOTGeo.h.


Constructor & Destructor Documentation

EmcROOTGeo::EmcROOTGeo (  ) 

Constructor.

Definition at line 28 of file EmcROOTGeo.cxx.

References InitFromGdml(), m_kPart, m_kPhiBr, m_kPhiEc, m_kThetaBr, m_kThetaEc, m_NodeTheta, m_PhysicalCrystal, and deljobs::string.

00029 { 
00030   // Default constructor.
00031   m_kPhiEc   = 16;
00032   m_kThetaEc = 35;
00033   
00034   for (int part = 0; part < m_kPart; part++) {
00035     for (int phi = 0; phi < m_kPhiBr; phi++) {
00036       for (int theta = 0; theta < m_kThetaBr; theta++) {
00037         m_NodeTheta[part][phi][theta] = 0;
00038         m_PhysicalCrystal[part][phi][theta] = 0;
00039       }
00040     }
00041   }
00042 
00043   string GdmlManagementPath = getenv("GDMLMANAGEMENTROOT");
00044   if (GdmlManagementPath == "") cout << "EmcROOTGeo::GdmlManagementPath not set!" << endl;
00045   string GdmlFile = GdmlManagementPath + string("/dat/Emc.gdml");
00046   cout << "Construct Emc from GdmlFile " << GdmlFile << endl;
00047   InitFromGdml( GdmlFile.c_str(), "Emc" );
00048 }

EmcROOTGeo::~EmcROOTGeo (  ) 

Destructor.

Definition at line 50 of file EmcROOTGeo.cxx.

00051 { }

EmcROOTGeo::EmcROOTGeo (  ) 

Constructor.

EmcROOTGeo::~EmcROOTGeo (  ) 

Destructor.


Member Function Documentation

void EmcROOTGeo::Align ( TGeoPhysicalNode *  phyNode,
TGeoMatrix *  newmat = 0,
TGeoShape *  newshape = 0,
Bool_t  check = kFALSE 
)

Align a physical node, change its position and shape.

Definition at line 1411 of file EmcROOTGeo.cxx.

References genRecEmupikp::i, and ganga-rec::j.

Referenced by RestorePhyNode().

01412 {
01413     //phyNode->Align(newmat, newshape, check);
01414 
01415     if (!newmat && !newshape) return;
01416     TGeoNode *node = phyNode->GetNode();
01417 
01418     Int_t fLevel=phyNode->GetLevel();
01419     TGeoNode *nnode = 0;
01420     TGeoVolume *vm = phyNode->GetVolume(fLevel-2);   
01421     // fLevel-2 is good for Emc geometry, use fLevel-1 if I want to use it in TofROOTGeo
01422     TGeoVolume *vd = 0;
01423 
01424     TGeoNode *nodeArray[30];
01425     TString orgName = phyNode->GetName();
01426     Int_t i,id;
01427     if (!phyNode->IsAligned()) {
01428         for (i=0; i<=fLevel-2; i++) {
01429             nodeArray[i] = phyNode->GetNode(i);
01430         }
01431 
01432         // fLevel-2 is good for Emc geometry, 
01433         // in ROOT::TGeoPhysicalNode::Align, 
01434         // it starts from 0, so some nodes were lost.
01435         for (i=fLevel-2; i<fLevel; i++) {
01436             // Get daughter node and its id inside vm
01437             node = phyNode->GetNode(i+1);
01438             id = vm->GetIndex(node);
01439 
01440             if (id < 0) {
01441                 //printf("cannot align node %s",phyNode->GetNode(i+1)->GetName());
01442                 return;
01443             }
01444             // Clone daughter volume and node
01445             vd = node->GetVolume()->CloneVolume();
01446             nnode = node->MakeCopyNode();
01447             // Correct pointers to mother and volume
01448             nnode->SetName(node->GetName());
01449             nnode->SetVolume(vd);
01450             nnode->SetMotherVolume(vm);
01451             // Decouple old node from mother volume and connect new one
01452             vm->GetNodes()->RemoveAt(id);
01453             vm->GetNodes()->AddAt(nnode,id);
01454             nodeArray[i+1] = nnode;
01455             vm = vd;
01456         }
01457     } else {
01458         nnode = phyNode->GetNode();
01459     }
01460 
01461     TString name;
01462     for (Int_t j = 0; j < phyNode->GetLevel()+1; j++) {
01463         name += "/";
01464         name += nodeArray[j]->GetName();
01465     }
01466     //phyNode->SetPath(name);
01467     phyNode->SetName(name);
01468     phyNode->Refresh();
01469 
01470     // Now nnode is a cloned node of the one that need to be aligned
01471     TGeoNodeMatrix *aligned = (TGeoNodeMatrix*)nnode;
01472     vm = nnode->GetMotherVolume();
01473     vd = nnode->GetVolume();
01474     if (newmat) {
01475         // Register matrix and make it the active one
01476         if (!newmat->IsRegistered()) newmat->RegisterYourself();
01477         aligned->SetMatrix(newmat);
01478         // Update the global matrix for the aligned node
01479         TGeoHMatrix *global = phyNode->GetMatrix();
01480         TGeoHMatrix *up = phyNode->GetMatrix(fLevel-1);
01481         *global = up;
01482         global->Multiply(newmat);
01483     }
01484     // Change the shape for the aligned node
01485     if (newshape) vd->SetShape(newshape);
01486     // Now we have to re-voxelize the mother volume
01487     vm->SetVoxelFinder(0);
01488     vm->Voxelize("ALL");
01489     vm->FindOverlaps();
01490     // Eventually check for overlaps
01491     if (check) vm->CheckOverlaps();
01492     //phyNode->SetAligned(kTRUE);
01493 }

int EmcROOTGeo::ComputeEndCopyNb ( int  num  ) 

Compute copyNb, copyNb 5,6,14,15,16 corresponding to two volume.

Definition at line 1265 of file EmcROOTGeo.cxx.

01266 {
01267     int copyNb;
01268     switch (num){
01269     case 30:
01270         copyNb = 5;
01271         break;
01272     case 31:
01273         copyNb = 6;
01274         break;
01275     case 32:
01276         copyNb = 14;
01277         break;
01278     case 33:
01279         copyNb = 15;
01280         break;
01281     case 34:
01282         copyNb = 16;
01283         break;
01284     default:
01285         copyNb = num;
01286         break;
01287     }
01288     return copyNb;
01289 }

void EmcROOTGeo::ComputeThetaPhi ( int  id,
int  sector,
int  nb,
int &  CryNumberTheta,
int &  CryNumberPhi 
)

Compute theta, phi from sector, nb.

Definition at line 1148 of file EmcROOTGeo.cxx.

01149 {
01150     if ((sector>=0)&&(sector<3))
01151         sector+=16;
01152     if ((sector!=7)&&(sector!=15))
01153     {
01154         if ((nb>=0)&&(nb<4))
01155         {
01156             CryNumberTheta = 0;
01157             CryNumberPhi = (sector-3)*4+nb;
01158         }
01159         else if ((nb>=4)&&(nb<8))
01160         {
01161             CryNumberTheta = 1;
01162             CryNumberPhi = (sector-3)*4+nb-4;
01163         }
01164         else if ((nb>=8)&&(nb<13))
01165         {
01166             CryNumberTheta = 2;
01167             CryNumberPhi = (sector-3)*5+nb-8;
01168         }
01169         else if ((nb>=13)&&(nb<18))
01170         {
01171             CryNumberTheta = 3;
01172             CryNumberPhi = (sector-3)*5+nb-13;
01173         }
01174         else if ((nb>=18)&&(nb<24))
01175         {
01176             CryNumberTheta = 4;
01177             CryNumberPhi = (sector-3)*6+nb-18;
01178         }
01179         else if ((nb>=24)&&(nb<30))
01180         {
01181             CryNumberTheta = 5;
01182             CryNumberPhi = (sector-3)*6+nb-24;
01183         }
01184     }
01185     else// if((sector=7)||(sector==15))
01186     {
01187         if ((nb>=0)&&(nb<4))
01188         {
01189             CryNumberTheta = 0;
01190             CryNumberPhi = (sector-3)*4+3-nb;
01191         }
01192         else if ((nb>=4)&&(nb<8))
01193         {
01194             CryNumberTheta = 1;
01195             CryNumberPhi = (sector-3)*4+7-nb;
01196         }
01197         else if ((nb>=8)&&(nb<13))
01198         {
01199             CryNumberTheta = 2;
01200             CryNumberPhi = (sector-3)*5+12-nb;
01201         }
01202         else if ((nb>=13)&&(nb<18))
01203         {
01204             CryNumberTheta = 3;
01205             CryNumberPhi = (sector-3)*5+17-nb;
01206         }
01207         else if ((nb>=18)&&(nb<24))
01208         {
01209             CryNumberTheta = 4;
01210             CryNumberPhi = (sector-3)*6+23-nb;
01211         }
01212         else if ((nb>=24)&&(nb<30))
01213         {
01214             CryNumberTheta = 5;
01215             CryNumberPhi = (sector-3)*6+29-nb;
01216         }
01217     }
01218 
01219     if (id==2)
01220     {
01221         switch (CryNumberTheta)
01222         {
01223         case 0:
01224             if (CryNumberPhi<32)
01225                 CryNumberPhi = 31-CryNumberPhi;
01226             else
01227                 CryNumberPhi = 95-CryNumberPhi;
01228             break;
01229         case 1:
01230             if (CryNumberPhi<32)
01231                 CryNumberPhi = 31-CryNumberPhi;
01232             else
01233                 CryNumberPhi = 95-CryNumberPhi;
01234             break;
01235         case 2:
01236             if (CryNumberPhi<40)
01237                 CryNumberPhi = 39-CryNumberPhi;
01238             else
01239                 CryNumberPhi = 119-CryNumberPhi;
01240             break;
01241         case 3:
01242             if (CryNumberPhi<40)
01243                 CryNumberPhi = 39-CryNumberPhi;
01244             else
01245                 CryNumberPhi = 119-CryNumberPhi;
01246             break;
01247         case 4:
01248             if (CryNumberPhi<48)
01249                 CryNumberPhi = 47-CryNumberPhi;
01250             else
01251                 CryNumberPhi = 143-CryNumberPhi;
01252             break;
01253         case 5:
01254             if (CryNumberPhi<48)
01255                 CryNumberPhi = 47-CryNumberPhi;
01256             else
01257                 CryNumberPhi = 143-CryNumberPhi;
01258         default:
01259             ;
01260         }
01261     }
01262 }

void EmcROOTGeo::Draw ( Option_t *  option  ) 

Draw function.

Definition at line 1321 of file EmcROOTGeo.cxx.

References Emc2DCrystal::Draw(), GetPartNb(), GetPhiNb(), GetThetaNb(), BesView::GetVisEmcBarrel(), BesView::GetVisEmcEast(), BesView::GetVisEmcGlobal(), BesView::GetVisEmcWest(), SubDetectorROOTGeo::m_2DGeoInit, m_Emc2DCrystal, and Emc2DCrystal::SetFired().

Referenced by BesGeometry::Draw2DXY(), and BesGeometry::Draw2DZR().

01322 {
01323     TString opt = option;
01324     opt.ToUpper();
01325 
01326     if (!m_2DGeoInit) cout << "EmcROOTGeo::Draw2D(), 2D Geometry not initialized!" << endl;
01327     BesView *view = (BesView*)gPad->GetView();
01328     if (!view) cout << "EmcROOTGeo::Draw(), BesView not found" << endl;
01329 
01330     if (view->GetVisEmcGlobal()) { // EmcVisGlobal
01331         TString crystalOpt;
01332 
01333         //if (opt.Contains("XY")) {
01334         // west part drawn first usually
01335         for (Int_t part = GetPartNb()-1; part >= 0; part--) {
01336             for (int theta = 0; theta < GetThetaNb(part); theta++) {
01337                 for (int phi = 0; phi < GetPhiNb(part, theta); phi++) {
01338 
01339                     if (m_Emc2DCrystal[part][phi][theta]) {
01340                         //cout << "part " << part << " layer " << layer << " crystal " << crystal << endl;
01341                         m_Emc2DCrystal[part][phi][theta]->SetFired(false);
01342                         if ( (part == 0 && view->GetVisEmcEast())   ||
01343                                 (part == 1 && view->GetVisEmcBarrel()) ||
01344                                 (part == 2 && view->GetVisEmcWest()) )
01345                             m_Emc2DCrystal[part][phi][theta]->Draw(crystalOpt);
01346                     }
01347                 }
01348             }
01349         }
01350     }
01351 }

void EmcROOTGeo::DrawHits ( Option_t *  option  ) 

Draw 2D hits.

Definition at line 1354 of file EmcROOTGeo.cxx.

References EmcID::barrel_ec(), Emc2DCrystal::Draw(), RawDataUtil::EmcCharge(), GetPartNb(), GetPhiNb(), GetThetaNb(), BesView::GetVisEmcHitsBarrel(), BesView::GetVisEmcHitsEast(), BesView::GetVisEmcHitsGlobal(), BesView::GetVisEmcHitsWest(), genRecEmupikp::i, m_Emc2DCrystal, m_EmcDigiCol, EmcID::phi_module(), Emc2DCrystal::ResetTimeCharge(), Emc2DCrystal::SetCharge(), Emc2DCrystal::SetFired(), and EmcID::theta_module().

Referenced by BesEvent::DrawHits().

01355 {
01356     // cout << "EmcROOTGeo::DrawHits" << endl;
01357     BesView *view = (BesView*)gPad->GetView();
01358     if (!view) cout << "EmcROOTGeo::DrawHits(), BesView not found" << endl;
01359 
01360     //cout << "VisEmcHitsGlobal " << view->GetVisEmcHitsGlobal() << endl;
01361     //cout << "VisEmcHitsEast   " << view->GetVisEmcHitsEast()   << endl;
01362     //cout << "VisEmcHitsBarrel " << view->GetVisEmcHitsBarrel() << endl;
01363     //cout << "VisEmcHitsWest   " << view->GetVisEmcHitsWest()   << endl;
01364 
01365     if (view->GetVisEmcHitsGlobal()) {
01366 
01367         // reset time and charge to zero
01368         for (Int_t part = GetPartNb()-1; part >= 0; part--) {
01369             for (int theta = 0; theta < GetThetaNb(part); theta++) {
01370                 for (int phi = 0; phi < GetPhiNb(part, theta); phi++) {
01371                     if (m_Emc2DCrystal[part][phi][theta]) {
01372                         m_Emc2DCrystal[part][phi][theta]->ResetTimeCharge();
01373                         //m_Emc2DCrystal[part][phi][theta]->ClearInfo();
01374                     }
01375                 }
01376             }
01377         }
01378 
01379         if (m_EmcDigiCol) {
01380             for (int i = 0; i < m_EmcDigiCol->GetEntries(); i++) {
01381                 TEmcDigi *aEmcDigi = (TEmcDigi*)m_EmcDigiCol->At(i);
01382 
01383                 //cout << aEmcDigi->getIntId() << endl;
01384                 Identifier aEmcID( aEmcDigi->getIntId() );
01385                 int part  = EmcID::barrel_ec( aEmcID );
01386                 int theta = EmcID::theta_module( aEmcID );
01387                 int phi   = EmcID::phi_module( aEmcID );
01388 
01389                 Emc2DCrystal *aCrystal = 0;
01390                 aCrystal = m_Emc2DCrystal[part][phi][theta];
01391 
01392                 //Double_t charge = Double_t(aEmcDigi->getChargeChannel())  / EMC_CHARGE_FACTOR;
01393                 Double_t charge = RawDataUtil::EmcCharge(aEmcDigi->getMeasure(),
01394                                   aEmcDigi->getChargeChannel());
01395                 aCrystal->SetCharge(charge);
01396                 //cout << "charge " << aCrystal->GetCharge() << endl;
01397 
01398                 if (aCrystal&&charge > 5) {
01399                     if ( (part == 0 && view->GetVisEmcHitsEast())   ||
01400                             (part == 1 && view->GetVisEmcHitsBarrel()) ||
01401                             (part == 2 && view->GetVisEmcHitsWest()) ) {
01402                         aCrystal->SetFired(true);
01403                         aCrystal->Draw();
01404                     }
01405                 }
01406             }
01407         }
01408     }
01409 }

Emc2DCrystal * EmcROOTGeo::Get2DCrystal ( Int_t  part,
Int_t  phi,
Int_t  theta 
)

Get Emc2DCrystal;.

Definition at line 1292 of file EmcROOTGeo.cxx.

References m_Emc2DCrystal.

Referenced by BesEvent::ConstructEmcTrackFromRec().

01293 {
01294     if (m_Emc2DCrystal[part][phi][theta]) return m_Emc2DCrystal[part][phi][theta];
01295     else return 0;
01296 }

virtual TGeoVolumeAssembly* SubDetectorROOTGeo::GetAssemblyVolume ( const std::string an  )  [virtual, inherited]

Get an assembly by name;.

TGeoVolumeAssembly * SubDetectorROOTGeo::GetAssemblyVolume ( const std::string an  )  [inherited]

Get an assembly by name;.

Definition at line 52 of file SubDetectorROOTGeo.cxx.

Referenced by TofROOTGeo::GetVolumeAssembly().

00053 {
00054   TGeoVolumeAssembly *av = (TGeoVolumeAssembly*)TGDMLProcessor::GetInstance()->GetAssemblyVolume(an);
00055   if (!av) std::cout << "Assembly Volume " << an << " not found " << std::endl;
00056   return av;
00057 }

TGeoNode* EmcROOTGeo::GetCrystal ( int  part,
int  phi,
int  theta 
)

Get crystal one;.

TGeoNode * EmcROOTGeo::GetCrystal ( int  part,
int  phi,
int  theta 
)

Get crystal one;.

Definition at line 465 of file EmcROOTGeo.cxx.

References GetTheta().

Referenced by SetAllVisible(), SetDefaultVis(), SetPhysicalNode(), SetQuarterVisible(), and SetVolumeDefaultVis().

00466 {
00467   // in fact, br only 44 crystal nodes;
00468   return GetTheta(part, phi, theta)->GetDaughter(0);
00469 }

TGeoNode * EmcROOTGeo::GetCrystal2 ( int  part,
int  phi,
int  theta 
)

Get crystal2 one;.

Definition at line 1114 of file EmcROOTGeo.cxx.

References GetTheta2().

Referenced by SetVolumeDefaultVis().

01115 {
01116     // in fact, br only 44 crystal nodes;
01117     if (GetTheta2(part, phi, theta) == 0) return 0;
01118     else return GetTheta2(part, phi, theta)->GetDaughter(0);
01119 }

TGeoPhysicalNode * SubDetectorROOTGeo::GetHit ( int  i  )  [virtual, inherited]

Get ith hit in HitsArray;.

Definition at line 65 of file SubDetectorROOTGeo.cxx.

References SubDetectorROOTGeo::m_HitsArray.

00066 {
00067     if (i < m_HitsArray->GetEntries())
00068         return (TGeoPhysicalNode*)m_HitsArray->At(i);
00069     else
00070         return 0;
00071 }

virtual int SubDetectorROOTGeo::GetHitsNum (  )  [inline, virtual, inherited]

Get number of hits in HitsArray;.

Definition at line 61 of file SubDetectorROOTGeo.h.

References SubDetectorROOTGeo::m_HitsArray.

00061 { return m_HitsArray->GetEntries(); }

virtual TGeoVolume* SubDetectorROOTGeo::GetLogicalVolume ( const std::string vn  )  [virtual, inherited]

Get a logical volume by name;.

TGeoVolume * SubDetectorROOTGeo::GetLogicalVolume ( const std::string vn  )  [inherited]

Get a logical volume by name;.

Definition at line 45 of file SubDetectorROOTGeo.cxx.

Referenced by MucROOTGeo::GetVolumeAbsorber(), MucROOTGeo::GetVolumeAbsorberPanel(), MucROOTGeo::GetVolumeAbsorberSmallBlock(), TofROOTGeo::GetVolumeAl(), MucROOTGeo::GetVolumeAluminumBox(), MucROOTGeo::GetVolumeBakelite(), MucROOTGeo::GetVolumeBox(), MucROOTGeo::GetVolumeBoxSurface(), TofROOTGeo::GetVolumeBucket(), GetVolumeCrystal(), MucROOTGeo::GetVolumeGap(), MucROOTGeo::GetVolumeGasBorder(), MucROOTGeo::GetVolumeGasChamber(), MdcROOTGeo::GetVolumeLayer(), TofROOTGeo::GetVolumePart(), GetVolumePart(), GetVolumePhi(), TofROOTGeo::GetVolumePVF(), MdcROOTGeo::GetVolumeReplica(), TofROOTGeo::GetVolumeScin(), MdcROOTGeo::GetVolumeSegment(), MucROOTGeo::GetVolumeStrip(), MucROOTGeo::GetVolumeStripPlane(), GetVolumeTheta(), MucROOTGeo::SetNode(), SetNode(), SetPhysicalNode(), and SetVolumeAppendInVis().

00046 {
00047   TGeoVolume *lv = (TGeoVolume*)TGDMLProcessor::GetInstance()->GetLogicalVolume(vn);
00048   if (!lv) std::cout << "Logical Volume " << vn << " not found " << std::endl;
00049   return lv;
00050 }

virtual TGeoNode* SubDetectorROOTGeo::GetNode ( const std::string nn  )  [virtual, inherited]

Get a node(physical volume) by name;.

TGeoNode * SubDetectorROOTGeo::GetNode ( const std::string nn  )  [inherited]

Get a node(physical volume) by name;.

Definition at line 59 of file SubDetectorROOTGeo.cxx.

Referenced by TofROOTGeo::GetBucket(), MdcROOTGeo::GetLayer(), GetPart(), GetPhi(), MdcROOTGeo::GetSegment(), MucROOTGeo::Init2DGeometry(), TofROOTGeo::SetNode(), MucROOTGeo::SetNode(), and MdcROOTGeo::SetNode().

00060 {
00061   TGeoNode *node = (TGeoNode*)TGDMLProcessor::GetInstance()->GetPhysicalVolume(nn);
00062   if (!node) std::cout << "Physical Volume " << nn << " not found " << std::endl;
00063   return node;
00064 }

int EmcROOTGeo::GetPart ( TGeoPhysicalNode *  phyNode  ) 

Get part no of a crystal physcial node.

Definition at line 1299 of file EmcROOTGeo.cxx.

References GetPartNb(), GetPhiNb(), GetPhysicalCrystal(), GetPhysicalCrystal2(), and GetThetaNb().

01300 {
01301     for (int part = 0; part < GetPartNb(); part++) {
01302         for (int theta = 0; theta < GetThetaNb(part); theta++) {
01303             for (int phi = 0; phi < GetPhiNb(part, theta); phi++) {
01304                 if (phyNode == GetPhysicalCrystal(part, phi, theta)) {
01305                     //cout << "EmcROOTGeo::GetPart()" << part << endl;
01306                     return part;
01307                 }
01308                 if (phyNode == GetPhysicalCrystal2(part, phi, theta)) {
01309                     //cout << "EmcROOTGeo::GetPart()" << part << endl;
01310                     return part;
01311                 }
01312             }
01313         }
01314     }
01315 
01316     cout << "EmcROOTGeo::GetPart, this crystal physical node does not exist!" << endl;
01317     return -1;
01318 }

TGeoNode* EmcROOTGeo::GetPart ( int  part  ) 

Get part node;.

TGeoNode * EmcROOTGeo::GetPart ( int  part  ) 

Get part node;.

Definition at line 415 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::GetNode().

Referenced by SetAllVisible(), SetDefaultVis(), SetHits(), SetPhysicalNode(), SetQuarterVisible(), SetVisEmcDetector(), SetVisEmcHits(), and SetVolumeDefaultVis().

00416 {
00417   std::stringstream osname;
00418   if(part==1) {
00419     osname << "pv_logicalBSCWorld_2";
00420   } else {
00421     osname << "pv_logicalEndWorld_" << 1-part/2;
00422   }
00423   //osname << "pv_" << "logical" << "Emc" << "Part" << (part == 2 ? (part -2) : part) << "_" << part; 
00424   
00425   return GetNode( osname.str() );
00426 }

int EmcROOTGeo::GetPartNb (  ) 

Get number of part;.

int EmcROOTGeo::GetPartNb (  ) 

Get number of part;.

Definition at line 316 of file EmcROOTGeo.cxx.

References m_kPart.

Referenced by Draw(), DrawHits(), GetPart(), Init2DGeometry(), and EmcRecROOTGeo::InitFromXML().

00317 {
00318   int part = m_kPart;
00319 
00320   return part;
00321 }

TGeoNode* EmcROOTGeo::GetPhi ( int  part,
int  phi 
)

Get phi node;.

TGeoNode * EmcROOTGeo::GetPhi ( int  part,
int  phi 
)

Get phi node;.

Definition at line 429 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::GetNode().

Referenced by SetAllVisible(), SetDefaultVis(), SetNode(), SetPhysicalNode(), SetQuarterVisible(), and SetVolumeDefaultVis().

00430 {
00431   int phiNb = -1;
00432   std::stringstream osname;
00433   if(part==1) { //barrel
00434     phiNb = 308-phi;
00435     osname << "pv_logicalBSCPhi_" << phiNb;
00436   } else {  //endcap
00437     if(phi>=0&&phi<6) {
00438       osname << "pv_logicalEndPhi0_" << 15-phi;
00439     } else if(phi>=8&&phi<14) {
00440       osname << "pv_logicalEndPhi0_" << 17-phi;
00441     } else if(phi==6||phi==14) {
00442       osname << "pv_logicalEndPhi1_" << (30-phi)/8;
00443     } else if(phi==7||phi==15) {
00444       osname << "pv_logicalEndPhi2_" << (15-phi)/8;
00445     }
00446   }
00447   //osname << "pv_" << "logical" << "Emc" << "Part" << (part == 2 ? (part -2) : part) << "Phi" << phi << "_" << phi; 
00448   
00449   return GetNode( osname.str() );
00450 }

int EmcROOTGeo::GetPhiNb ( int  part,
int  theta 
)

Get number of phi on part;.

Definition at line 928 of file EmcROOTGeo.cxx.

References m_kThetaEc.

00929 {
00930     int phiNb = m_kPhiBr;
00931     if (part != 1) {
00932         if (theta < 2) phiNb = 4*m_kSectorEc;
00933         else if (theta >= 2 && theta < 4) phiNb = 5*m_kSectorEc;
00934         else if (theta >= 4 && theta < m_kThetaEc) phiNb = 6*m_kSectorEc;
00935     }
00936 
00937     return phiNb;
00938 }

int EmcROOTGeo::GetPhiNb ( int  part  ) 

Get number of phi on part;.

Definition at line 333 of file EmcROOTGeo.cxx.

References m_kPhiBr, and m_kPhiEc.

Referenced by Draw(), DrawHits(), GetPart(), Init2DGeometry(), EmcRecROOTGeo::InitFromXML(), SetDetector(), and SetVolumeDefaultVis().

00334 {
00335   int phiNb = m_kPhiBr;
00336   if (part != 1) phiNb = m_kPhiEc;
00337 
00338   return phiNb;
00339 }

TGeoPhysicalNode* EmcROOTGeo::GetPhysicalCrystal ( int  part,
int  phi,
int  theta 
)

Get crystal physical node; all part,phi,theta has a physicalNode.

TGeoPhysicalNode * EmcROOTGeo::GetPhysicalCrystal ( int  part,
int  phi,
int  theta 
)

Get crystal physical node;.

Definition at line 472 of file EmcROOTGeo.cxx.

References m_PhysicalCrystal.

Referenced by GetPart(), BesGeometry::GetPhysicalEmcCrystal(), Init2DGeometry(), EmcRecROOTGeo::InitFromXML(), SetDetector(), BesVisDisplay::SetEmcFiredCell(), and SetHits().

00473 {
00474   if (m_PhysicalCrystal[part][phi][theta] != 0) {
00475     return m_PhysicalCrystal[part][phi][theta];
00476   }
00477   else {
00478     std::cout << "PhysicalNode: " << "Part" << part << "Phi" << phi << "Theta" << theta << " not found" << std::endl;
00479     return 0;
00480   } 
00481 }

TGeoPhysicalNode * EmcROOTGeo::GetPhysicalCrystal2 ( int  part,
int  phi,
int  theta 
)

Get crystal physical node2; EC nb 5,6,14,15,16 in any sector has two physicalNode.

Definition at line 1134 of file EmcROOTGeo.cxx.

References m_PhysicalCrystal2.

Referenced by GetPart(), Init2DGeometry(), SetDetector(), and SetHits().

01135 {
01136     return m_PhysicalCrystal2[part][phi][theta];
01137 }

TGeoNode* EmcROOTGeo::GetTheta ( int  part,
int  phi,
int  theta 
)

Get theta node;.

TGeoNode * EmcROOTGeo::GetTheta ( int  part,
int  phi,
int  theta 
)

Get theta node;.

Definition at line 453 of file EmcROOTGeo.cxx.

References m_NodeTheta.

Referenced by GetCrystal(), SetAllVisible(), SetDefaultVis(), SetPhysicalNode(), SetQuarterVisible(), and SetVolumeDefaultVis().

00454 {
00455   if (m_NodeTheta[part][phi][theta] != 0) {
00456     return m_NodeTheta[part][phi][theta];
00457   }
00458   else {
00459     std::cout << "Node: " << "Part" << part << "Phi" << phi << "Theta" << theta << " not found" << std::endl;
00460     return 0;
00461   } 
00462 }

TGeoNode * EmcROOTGeo::GetTheta2 ( int  part,
int  phi,
int  theta 
)

Get theta2 node;.

Definition at line 1096 of file EmcROOTGeo.cxx.

References m_NodeTheta2.

Referenced by GetCrystal2(), and SetVolumeDefaultVis().

01097 {
01098     if (m_NodeTheta2[part][phi][theta] != 0) {
01099         return m_NodeTheta2[part][phi][theta];
01100     }
01101     else {
01102         return 0;
01103     }
01104 }

int EmcROOTGeo::GetThetaNb ( int  part  ) 

Get number of theta on part;.

int EmcROOTGeo::GetThetaNb ( int  part  ) 

Get number of theta on part;.

Definition at line 324 of file EmcROOTGeo.cxx.

References m_kThetaBr, and m_kThetaEc.

Referenced by Draw(), DrawHits(), GetPart(), Init2DGeometry(), EmcRecROOTGeo::InitFromXML(), SetDetector(), and SetVolumeDefaultVis().

00325 {
00326   int thetaNb = m_kThetaBr;
00327   if (part != 1) thetaNb = m_kThetaEc;
00328   
00329   return thetaNb;;
00330 }

virtual TGeoVolume* SubDetectorROOTGeo::GetTopVolume (  )  [inline, virtual, inherited]

Get the top(world) volume;.

Definition at line 52 of file SubDetectorROOTGeo.h.

References SubDetectorROOTGeo::m_TopVolume.

00052 { return m_TopVolume; }

TGeoVolume* SubDetectorROOTGeo::GetTopVolume (  )  [inline, inherited]

Get the top(world) volume;.

Definition at line 51 of file SubDetectorROOTGeo.h.

References SubDetectorROOTGeo::m_TopVolume.

Referenced by MucROOTGeo::Init2DGeometry(), TofROOTGeo::SetNode(), MucROOTGeo::SetNode(), MdcROOTGeo::SetNode(), and SetNode().

00051 { return m_TopVolume; }

TGeoVolume* EmcROOTGeo::GetVolumeCrystal ( int  part,
int  phi,
int  theta 
)

Get crystal volume;.

TGeoVolume * EmcROOTGeo::GetVolumeCrystal ( int  part,
int  phi,
int  theta 
)

Get crystal volume;.

Definition at line 394 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::GetLogicalVolume().

Referenced by BesGeometry::GetVolumeEmcCrystal(), SetDefaultVis(), and SetVolumeDefaultVis().

00395 {
00396   // part0phi0theta0-34, part0phi6theta0-34, part0phi8theta0-34, part0phi7theta0-34
00397   // part1theta0-43
00398   std::stringstream osname;
00399   if (part == 1 && theta >= 0 && theta < 44) {
00400     osname << "logical" << "Emc" << "Part" << part << "Theta" << theta << "Crystal";
00401     return GetLogicalVolume( osname.str() );
00402   }
00403   else if ( part == 0 && theta >= 0 && theta < 35 &&
00404             (phi == 0 || phi == 6 || phi == 8 || phi == 7) ) {
00405     osname << "logical" << "Emc" << "Part" << part << "Phi" << phi << "Theta" << theta << "Crystal";
00406     return GetLogicalVolume( osname.str() );
00407   }
00408   else {
00409     std::cout << "No volume " << osname.str() << std::endl;
00410     return 0;
00411   }
00412 }

TGeoVolume* EmcROOTGeo::GetVolumeEmc (  )  [inline]

Get Emc volume;.

Definition at line 103 of file EmcROOTGeo.h.

References m_Emc.

00103 { return m_Emc; }

TGeoVolume* EmcROOTGeo::GetVolumeEmc (  )  [inline]

Get Emc volume;.

Definition at line 68 of file EmcROOTGeo.h.

References m_Emc.

Referenced by BesGeometry::GetVolumeEmc(), and BesGeometry::InitFromGDML().

00068 { return m_Emc; }

TGeoVolume* EmcROOTGeo::GetVolumePart ( int  part  ) 

Get part volume;.

TGeoVolume * EmcROOTGeo::GetVolumePart ( int  part  ) 

Get part volume;.

Definition at line 342 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::GetLogicalVolume().

Referenced by BesGeometry::GetVolumeEmcPart(), SetDefaultVis(), and SetVolumeDefaultVis().

00343 {
00344   // only part0 and part1 logical volume.
00345   std::stringstream osname;
00346   osname << "logical" << "Emc" << "Part" << part;  
00347   if (part == 0 || part == 1) {
00348     return GetLogicalVolume( osname.str() );
00349   }
00350   else {
00351     std::cout << "No volume " << osname.str() << std::endl;
00352     return 0;
00353   }
00354 }

TGeoVolume* EmcROOTGeo::GetVolumePhi ( int  part,
int  phi 
)

Get phi volume;.

TGeoVolume * EmcROOTGeo::GetVolumePhi ( int  part,
int  phi 
)

Get phi volume;.

Definition at line 357 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::GetLogicalVolume().

Referenced by BesGeometry::GetVolumeEmcPhi(), SetDefaultVis(), and SetVolumeDefaultVis().

00358 {
00359   // only part0phi0-15, part1phi0-119
00360   std::stringstream osname;
00361   osname << "logical" << "Emc" << "Part" << part << "Phi" << phi;
00362   if ( (part == 0 && phi >= 0 && phi < 16) ||
00363        (part == 1 && phi >= 0 && phi < 120) ) {
00364     return GetLogicalVolume( osname.str() );
00365   }
00366   else {
00367     std::cout << "No volume " << osname.str() << std::endl;
00368     return 0;
00369   }
00370 }   

TGeoVolume* EmcROOTGeo::GetVolumeTheta ( int  part,
int  phi,
int  theta 
)

Get theta volume;.

TGeoVolume * EmcROOTGeo::GetVolumeTheta ( int  part,
int  phi,
int  theta 
)

Get theta volume;.

Definition at line 373 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::GetLogicalVolume().

Referenced by BesGeometry::GetVolumeEmcTheta(), SetDefaultVis(), and SetVolumeDefaultVis().

00374 {
00375   // part0phi0theta0-34, part0phi6theta0-34, part0phi8theta0-34, part0phi7theta0-34
00376   // part1theta0-43
00377   std::stringstream osname;
00378   if (part == 1 && theta >= 0 && theta < 44) {
00379     osname << "logical" << "Emc" << "Part" << part << "Theta" << theta;
00380     return GetLogicalVolume( osname.str() );
00381   }
00382   else if ( part == 0 && theta >= 0 && theta < 35 &&
00383             (phi == 0 || phi == 6 || phi == 8 || phi == 7) ) {
00384     osname << "logical" << "Emc" << "Part" << part << "Phi" << phi << "Theta" << theta;
00385     return GetLogicalVolume( osname.str() );
00386   }
00387   else {
00388     std::cout << "No volume " << osname.str() << std::endl;
00389     return 0;
00390   }
00391 }

bool EmcROOTGeo::HasTwoNodes ( int  part,
int  phi,
int  theta 
)

Whether this id is combined of two nodes.

Definition at line 1140 of file EmcROOTGeo.cxx.

01141 {
01142     if (part == 1) return false;
01143     else return true;
01144 }

void EmcROOTGeo::Init2DGeometry (  ) 

Initialize 2D Geometry.

Definition at line 88 of file EmcROOTGeo.cxx.

References GetPartNb(), GetPhiNb(), GetPhysicalCrystal(), GetPhysicalCrystal2(), GetThetaNb(), genRecEmupikp::i, ganga-rec::j, SubDetectorROOTGeo::m_2DGeoInit, m_Emc2DCrystal, m_kThetaBr, SubDetectorROOTGeo::m_ROOTGeoInit, and title.

Referenced by BesGeometry::InitGeometry().

00089 {
00090     if (m_ROOTGeoInit != 1 && m_ROOTGeoInit != 2) {
00091         cout << "EmcROOTGeo::Init2DGeometry, ROOT Geometry not Initialized yet!" << endl;
00092         return;
00093     }
00094     m_2DGeoInit = 1;
00095 
00096     Double_t local[3] = {0.0, 0.0, 0.0};
00097     Double_t master[3] = {0.0, 0.0, 0.0};
00098     //Int_t    nPoints = 8;
00099     //Double_t  P[300] = {0.0};
00100     //Double_t  center[3] = {0.0, 0.0, 0.0};
00101     TString  name;
00102     TString  title;
00103 
00104     // Emc crystals
00105     for (int part = 0; part < GetPartNb(); part++) {
00106         for (int theta = 0; theta < GetThetaNb(part); theta++) {
00107             for (int phi = 0; phi < GetPhiNb(part, theta); phi++) {
00108                 TGeoPhysicalNode *phyNode = 0;
00109                 phyNode = GetPhysicalCrystal(part, phi, theta);
00110                 if (part == 1) name = TString("Barrel");
00111                 else {
00112                     if (part == 0)      name = TString("EastEc");
00113                     else if (part == 2) name = TString("WestEc");
00114                 }
00115                 name = TString("Emc Part");
00116                 name += part;
00117                 name += " Theta";
00118                 if (part == 1) name += m_kThetaBr - 1 - theta;
00119                 else name += theta;
00120                 name += " Phi";
00121                 name += phi;
00122 
00123                 char data[100];
00124                 sprintf(data, "Emc part %i, #theta %i, #phi %i", part, theta, phi);
00125                 title = TString( data );
00126 
00127                 TGeoArb8 *crystalShape = (TGeoArb8*)phyNode->GetShape();
00128                 Double_t *localArb8Point, masterArb8Point[24*2];
00129                 localArb8Point = crystalShape->GetVertices();
00130                 for (Int_t i = 0; i < 8; i++) {
00131                     local[0] = localArb8Point[2*i];
00132                     local[1] = localArb8Point[2*i+1];
00133                     if (i < 4) local[2] = crystalShape->GetDz() * (-1.0);
00134                     else local[2] = crystalShape->GetDz();
00135 
00136                     phyNode->GetMatrix(-1*phyNode->GetLevel())->LocalToMaster(local, &master[0]);
00137                     // transform to top
00138                     for (Int_t j = 0; j < 3; j++) {
00139                         masterArb8Point[3*i+j] = master[j];
00140                     }
00141                 }
00142 
00143                 TGeoPhysicalNode *phyNode2 = 0;
00144                 phyNode2 = GetPhysicalCrystal2(part, phi, theta);
00145                 if (phyNode2 != 0) {
00146                     crystalShape = (TGeoArb8*)phyNode2->GetShape();
00147                     localArb8Point = crystalShape->GetVertices();
00148                     for (Int_t i = 0; i < 8; i++) {
00149                         local[0] = localArb8Point[2*i];
00150                         local[1] = localArb8Point[2*i+1];
00151                         if (i < 4) local[2] = crystalShape->GetDz() * (-1.0);
00152                         else local[2] = crystalShape->GetDz();
00153                         phyNode2->GetMatrix(-1*phyNode->GetLevel())
00154                         ->LocalToMaster(local, &master[0]); // transform to top
00155                         for (Int_t j = 0; j < 3; j++) {
00156                             masterArb8Point[24+3*i+j] = master[j];
00157                         }
00158                     }
00159                 }
00160 
00161                 if (phyNode2 == 0)
00162                     m_Emc2DCrystal[part][phi][theta] =
00163                         new Emc2DCrystal(name, title, 8, &masterArb8Point[0], part, theta);
00164                 else
00165                     m_Emc2DCrystal[part][phi][theta] =
00166                         new Emc2DCrystal(name, title, 16, &masterArb8Point[0], part, theta);
00167             }
00168         }
00169     }
00170 }

void EmcROOTGeo::InitFromGDML ( const char *  gdmlFile,
const char *  setupName 
)

Initialize ROOTGeo from GDML.

Definition at line 70 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::m_ROOTGeoInit, SubDetectorROOTGeo::ReadGdml(), and SetNode().

Referenced by BesGeometry::InitFromGDML().

00071 {
00072     m_ROOTGeoInit = 2;
00073 
00074     ReadGdml(gdmlFile, setupName);
00075     SetNode();
00076 }

void EmcROOTGeo::InitFromGdml ( const char *  gdmlFile,
const char *  setupName 
)

Initialize the instance of ROOTGeo.

Definition at line 54 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::m_ROOTGeoInit, SubDetectorROOTGeo::ReadGdml(), and SetNode().

Referenced by EmcROOTGeo().

00055 {
00056   ReadGdml(gdmlFile, setupName);
00057   SetNode();
00058   //SetDefaultVis();
00059 
00060   m_ROOTGeoInit = 1;  
00061 }

void EmcROOTGeo::InitFromROOT ( TGeoVolume *  vol  ) 

Initialize ROOTGeo from TGeoVolume logicalEmc.

Definition at line 79 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::m_ROOTGeoInit, SetNode(), and SetVolumeEmc().

Referenced by BesGeometry::InitFromROOT().

00080 {
00081     m_ROOTGeoInit = 1;
00082 
00083     SetVolumeEmc(vol);
00084     SetNode();
00085 }

virtual int SubDetectorROOTGeo::IsInitialized (  )  [inline, virtual, inherited]

If the ROOT geometry of this subdetctor is initialized;.

Definition at line 43 of file SubDetectorROOTGeo.h.

References SubDetectorROOTGeo::m_ROOTGeoInit.

00043 { return m_ROOTGeoInit; }

int SubDetectorROOTGeo::IsInitialized (  )  [inline, inherited]

If the ROOT geometry of this subdetctor is initialized;.

Definition at line 42 of file SubDetectorROOTGeo.h.

References SubDetectorROOTGeo::m_ROOTGeoInit.

00042 { return m_ROOTGeoInit; }

virtual void SubDetectorROOTGeo::ReadGdml ( const char *  gdmlFile,
const char *  setupName 
) [virtual, inherited]

Initialize the instance of ROOTGeo.

void SubDetectorROOTGeo::ReadGdml ( const char *  gdmlFile,
const char *  setupName 
) [inherited]

Initialize the instance of ROOTGeo.

Definition at line 31 of file SubDetectorROOTGeo.cxx.

References SubDetectorROOTGeo::m_config, SubDetectorROOTGeo::m_sxp, and SubDetectorROOTGeo::m_TopVolume.

Referenced by TofROOTGeo::InitFromGDML(), TofROOTGeo::InitFromGdml(), MucROOTGeo::InitFromGDML(), MucROOTGeo::InitFromGdml(), MdcROOTGeo::InitFromGDML(), MdcROOTGeo::InitFromGdml(), InitFromGDML(), and InitFromGdml().

00032 {
00033   m_config.SetURI( gdmlFile );
00034   m_config.SetSetupName( setupName );
00035   m_config.SetType ( "ROOT" );
00036   
00037   m_sxp.Configure( &m_config );
00038   m_sxp.Initialize();
00039   m_sxp.Run();
00040   
00041   m_TopVolume = (TGeoVolume*)TGDMLProcessor::GetInstance()->GetWorldVolume();
00042   if (!m_TopVolume) std::cout << "Top Volume not found " << std::endl;
00043 }

void EmcROOTGeo::RestorePhyNode ( TGeoPhysicalNode *  phyNode,
TGeoNode *  node 
)

Restore the physical node to original shape.

Definition at line 1495 of file EmcROOTGeo.cxx.

References Align().

Referenced by SetHits().

01496 {
01497     Align(phyNode, node->GetMatrix(), node->GetVolume()->GetShape());
01498 }

void EmcROOTGeo::SetAllVisible (  ) 

Set all visible;.

void EmcROOTGeo::SetAllVisible (  ) 

Set all visible;.

Definition at line 166 of file EmcROOTGeo.cxx.

References GetCrystal(), GetPart(), GetPhi(), GetTheta(), m_kPart, m_kPhiBr, m_kPhiEc, m_kThetaBr, m_kThetaEc, and nPhi.

Referenced by BesGeometry::SetDefaultVis().

00167 {
00168   /*  for (int part = 0; part < m_kPart-1; part++) {
00169     int nPhi = (part == 1 ? m_kPhiBr : m_kPhiEc);
00170     for (int phi = 0; phi < nPhi; phi++) {
00171       GetVolumePhi(part, phi)->SetVisibility(1);
00172     }
00173     if (part == 1) {
00174       for (int theta = 0; theta < m_kThetaBr; theta++) {
00175         GetVolumeTheta(part, 0, theta)->SetVisibility(1);
00176         GetVolumeCrystal(part, 0, theta)->SetVisibility(0);
00177       }
00178     }
00179     else if (part == 0) {
00180       int iPhi[4] = {0,6,8,7};
00181       for (int i = 0; i < 4; i++) {
00182         int phi = iPhi[i];
00183         int nTheta = (part == 1 ? m_kThetaBr : m_kThetaEc);
00184         for (int theta = 0; theta < nTheta; theta++) {
00185           GetVolumeTheta(part, phi, theta)->SetVisibility(1);
00186           GetVolumeCrystal(part, phi, theta)->SetVisibility(0);
00187         }
00188       }
00189     }
00190   }
00191   */
00192 
00193   for (int part = 0; part < m_kPart; part++) {
00194     GetPart(part)->SetVisibility(0);
00195     int nPhi = (part == 1 ? m_kPhiBr : m_kPhiEc);
00196     for (int phi = 0; phi < nPhi; phi++) {
00197       GetPhi(part, phi)->SetVisibility(0);
00198       int nTheta = (part == 1 ? m_kThetaBr : m_kThetaEc);
00199       for (int theta = 0; theta < nTheta; theta++) {
00200         GetTheta(part, phi, theta)->SetVisibility(0);
00201         GetCrystal(part, phi, theta)->SetVisibility(1);
00202       }
00203     }
00204   }
00205 }

virtual void SubDetectorROOTGeo::SetChildNo ( int  childNo  )  [inline, virtual, inherited]

Definition at line 46 of file SubDetectorROOTGeo.h.

References SubDetectorROOTGeo::m_childNo.

00046 { m_childNo = childNo; }

void SubDetectorROOTGeo::SetChildNo ( int  childNo  )  [inline, inherited]

Definition at line 45 of file SubDetectorROOTGeo.h.

References SubDetectorROOTGeo::m_childNo.

Referenced by BesGeometry::InitFromGDML(), BesGeometry::InitFromROOT(), MucGeoGeneral::InitFromXML(), and SetPhysicalNode().

00045 { m_childNo = childNo; }

void EmcROOTGeo::SetDefaultVis (  ) 

Set default visual attributes;.

Definition at line 107 of file EmcROOTGeo.cxx.

References GetCrystal(), GetPart(), GetPhi(), GetTheta(), GetVolumeCrystal(), GetVolumePart(), GetVolumePhi(), GetVolumeTheta(), genRecEmupikp::i, m_Emc, m_kPart, m_kPhiBr, m_kPhiEc, m_kThetaBr, m_kThetaEc, and nPhi.

00108 {
00109   //std::cout << "begin of set defaultvis" << std::endl;
00110   int emcColor     = 2;
00111   int partColor    = 2;
00112   int phiColor     = 4;
00113   int thetaColor   = 4;
00114   int brCrystalColor = 4;
00115   int ecCrystalColor = 7;
00116 
00117   m_Emc->SetLineColor(emcColor);
00118   m_Emc->SetVisibility(0);
00119   
00120   for (int part = 0; part < m_kPart-1; part++) {
00121     GetVolumePart(part)->SetLineColor(partColor);
00122     int nPhi = (part == 1 ? m_kPhiBr : m_kPhiEc);
00123     for (int phi = 0; phi < nPhi; phi++) {
00124       GetVolumePhi(part, phi)->SetLineColor(phiColor);
00125       GetVolumePhi(part, phi)->SetVisibility(0);
00126     }
00127     if (part == 1) {
00128       for (int theta = 0; theta < m_kThetaBr; theta++) {
00129         GetVolumeTheta(part, 0, theta)->SetLineColor(thetaColor);
00130         GetVolumeTheta(part, 0, theta)->SetVisibility(0);
00131         GetVolumeCrystal(part, 0, theta)->SetLineColor(brCrystalColor);
00132         GetVolumeCrystal(part, 0, theta)->SetVisibility(1);
00133       }
00134     }
00135     else if (part == 0) {
00136       int iPhi[4] = {0,6,8,7};
00137       for (int i = 0; i < 4; i++) {
00138         int phi = iPhi[i];
00139         int nTheta = (part == 1 ? m_kThetaBr : m_kThetaEc);
00140         for (int theta = 0; theta < nTheta; theta++) {
00141           GetVolumeTheta(part, phi, theta)->SetLineColor(thetaColor);
00142           GetVolumeTheta(part, phi, theta)->SetVisibility(0);
00143           GetVolumeCrystal(part, phi, theta)->SetLineColor(ecCrystalColor);
00144           GetVolumeCrystal(part, phi, theta)->SetVisibility(1);
00145         }
00146       }
00147     }
00148   }
00149 
00150   for (int part = 0; part < m_kPart; part++) {
00151     GetPart(part)->SetVisibility(0);
00152     int nPhi = (part == 1 ? m_kPhiBr : m_kPhiEc);
00153     for (int phi = 0; phi < nPhi; phi++) {
00154       GetPhi(part, phi)->SetVisibility(0);
00155       int nTheta = (part == 1 ? m_kThetaBr : m_kThetaEc);
00156       for (int theta = 0; theta < nTheta; theta++) {
00157         GetTheta(part, phi, theta)->SetVisibility(0);
00158         GetCrystal(part, phi, theta)->SetVisibility(0);
00159       }
00160     }
00161   }
00162   //std::cout << "end of set defaultvis" << std::endl;
00163 }

void EmcROOTGeo::SetDetector (  ) 

Set Detecor (what is detector depends on you).

Definition at line 700 of file EmcROOTGeo.cxx.

References GetPhiNb(), GetPhysicalCrystal(), GetPhysicalCrystal2(), GetThetaNb(), BesView::GetVisFull3DEmc(), and SubDetectorROOTGeo::m_DetectorsArray.

Referenced by BesClient::HandleViewOptionMenu().

00701 {
00702     BesView *view = 0;
00703     if (gPad) view = (BesView*)gPad->GetView();
00704     //if (view) cout << "viewVisFull3DEmc " << view->GetVisFull3DEmc() << endl;
00705 
00706     m_DetectorsArray->Clear();
00707 
00708     // Barrel
00709     int part = 1;
00710     for (int theta = 0; theta < GetThetaNb(part); theta++) {
00711         for (int phi = 0; phi < GetPhiNb(part, theta); phi++) {
00712             TGeoPhysicalNode *phyNode = GetPhysicalCrystal(part, phi, theta);
00713             if (phyNode) {
00714                 phyNode->SetVisibility(0); // set all invisible before set any visible
00715                 if ( phi >= 0 && phi < m_kPhiBr*4/4
00716                         //|| (theta == 0 || theta == 43) && phi >= m_kPhiBr/4 || phi == 0
00717                    ) {
00718                     m_DetectorsArray->Add( phyNode );
00719                 }
00720                 else if (view && view->GetVisFull3DEmc()) {
00721                     m_DetectorsArray->Add( phyNode );
00722                 }
00723             }
00724         }
00725     }
00726 
00727     // End cap
00728     for (int part = 0; part < m_kPart; part++) {
00729         if (part == 1) continue;
00730         for (int theta = 0; theta < GetThetaNb(part); theta++) {
00731             for (int phi = 0; phi < GetPhiNb(part, theta); phi++) {
00732                 TGeoPhysicalNode *phyNode = GetPhysicalCrystal(part, phi, theta);
00733                 if (phyNode) {
00734                     phyNode->SetVisibility(0); // set all invisible before set any visible
00735                     if (part == 2 && phi <= GetPhiNb(part, theta)||
00736                             part == 0 && phi <= GetPhiNb(part, theta) ) {
00737                         m_DetectorsArray->Add( phyNode );
00738                     }
00739                     else if (view && view->GetVisFull3DEmc()) {
00740                         m_DetectorsArray->Add( phyNode );
00741                     }
00742                 }
00743 
00744                 phyNode = 0;
00745                 phyNode = GetPhysicalCrystal2(part, phi, theta);
00746                 if (phyNode) {
00747                     phyNode->SetVisibility(0); // set all invisible before set any visible
00748                     if (part == 2 && phi <= GetPhiNb(part, theta)||
00749                             part == 0 && phi <= GetPhiNb(part, theta) ) {
00750                         m_DetectorsArray->Add( phyNode );
00751                     }
00752                     else if (view && view->GetVisFull3DEmc()) {
00753                         m_DetectorsArray->Add( phyNode );
00754                     }
00755                 }
00756             }
00757         }
00758     }
00759 
00760     //std::cout << "EmcROOTGeo::SetDetector(), end of set detector " << std::endl;
00761 }

void SubDetectorROOTGeo::SetDetectorOn (  )  [virtual, inherited]

Set all physicalNodes in m_DeteorsArray visible;.

Definition at line 73 of file SubDetectorROOTGeo.cxx.

References genRecEmupikp::i, and SubDetectorROOTGeo::m_DetectorsArray.

00074 {
00075     for (Int_t i = 0; i < m_DetectorsArray->GetEntries(); i++) {
00076         TGeoPhysicalNode *pNode = (TGeoPhysicalNode*)m_DetectorsArray->At(i);
00077         if (pNode) pNode->SetVisibility(1);
00078     }
00079 }

void EmcROOTGeo::SetHalfVisible (  ) 

Set half visible;.

Definition at line 544 of file EmcROOTGeo.cxx.

00545 {
00546     /*
00547     for (int theta = 0; theta < GetThetaNb(1); theta++) {
00548       for (int phi = 0; phi < GetPhiNb(1); phi++) {
00549         if (phi >= GetPhiNb(1)/4 && phi < GetPhiNb(1)*3/4) {
00550       GetPhysicalCrystal(1, phi, theta)->SetVisibility(0);
00551         }
00552         else {
00553       GetPhysicalCrystal(1, phi, theta)->SetVisibility(1);
00554         }
00555       }
00556     }
00557      
00558     for (int theta = 0; theta < GetThetaNb(0); theta++) {
00559       for (int i = 0; i < 16; i++) {
00560         if (i >= 7 && i <= 14) {
00561       GetPhysicalCrystal(0, i, theta)->SetVisibility(0);
00562         }
00563         else {
00564       GetPhysicalCrystal(0, i, theta)->SetVisibility(1);
00565         }
00566       }
00567     }
00568 
00569     for (int theta = 0; theta < GetThetaNb(2); theta++) {
00570       for (int i = 0; i < 16; i++) {
00571         if ((i >= 0 && i < 7) || i == 15) {
00572       GetPhysicalCrystal(2, i, theta)->SetVisibility(0);
00573         }
00574         else {
00575       GetPhysicalCrystal(2, i, theta)->SetVisibility(1);
00576         }
00577       }
00578     }
00579     */
00580 }

void EmcROOTGeo::SetHits (  ) 

Set all physicalNodes corresponding to digiCol;.

Definition at line 764 of file EmcROOTGeo.cxx.

References Emc2DCrystal::AddInfo(), EmcID::barrel_ec(), Emc2DCrystal::ClearInfo(), Emc2DCrystal::CloseInfo(), RawDataUtil::EmcCharge(), RawDataUtil::EmcTime(), BesEvent::GetEmcDigiCol(), GetPart(), GetPhysicalCrystal(), GetPhysicalCrystal2(), gEvent, genRecEmupikp::i, SubDetectorROOTGeo::m_2DHitsArray, m_brCrystalColor, m_ecCrystalColor, m_Emc2DCrystal, m_EmcDigiCol, SubDetectorROOTGeo::m_HitsArray, m_PhyNodeOrgArray, EmcID::phi_module(), RestorePhyNode(), and EmcID::theta_module().

Referenced by BesEvent::SetHits().

00765 {
00766     // set previous event hits to default vis
00767     //cout << "m_HitsArray->GetEntries(): " << m_HitsArray->GetEntries() << endl;
00768     //cout << "m_PhyNodeOrgArray->GetEntries(): " << m_PhyNodeOrgArray->GetEntries() << endl;
00769     //cout << "m_2DHitsArray->GetEntries(): " << m_2DHitsArray->GetEntries() << endl;
00770     for (int i = 0; i < m_HitsArray->GetEntries(); i++) {
00771         TGeoPhysicalNode *phyNode = (TGeoPhysicalNode*)m_HitsArray->At(i);
00772         //cout << phyNode->GetName() << endl;
00773         int color = m_brCrystalColor;
00774         int part = GetPart(phyNode);
00775         if (part == 0 || part == 2)
00776             color = m_ecCrystalColor;
00777 
00778         phyNode->SetLineColor(color);
00779         phyNode->SetVisibility(0);
00780 
00781         RestorePhyNode(phyNode, (TGeoNode*)m_PhyNodeOrgArray->At(i));
00782     }
00783     m_PhyNodeOrgArray->Clear("C");
00784     m_HitsArray->Clear("C");
00785 
00786     // set previous event 2D hits info to default
00787     for (int i = 0; i < m_2DHitsArray->GetEntries(); i++) {
00788         Emc2DCrystal *aCrystal = (Emc2DCrystal*)m_2DHitsArray->At(i);
00789         aCrystal->ClearInfo();
00790         aCrystal->AddInfo(aCrystal->GetTitle());
00791         aCrystal->CloseInfo();
00792     }
00793     m_2DHitsArray->Clear("C");
00794 
00795     // set new hits
00796     if (gEvent) m_EmcDigiCol = gEvent->GetEmcDigiCol();
00797 
00798     for (int i = 0; i < m_EmcDigiCol->GetEntries(); i++) {
00799         TEmcDigi *aEmcDigi = (TEmcDigi*)m_EmcDigiCol->At(i);
00800         Identifier aEmcID( aEmcDigi->getIntId() );
00801         int part  = EmcID::barrel_ec( aEmcID );
00802         int theta = EmcID::theta_module( aEmcID );
00803         int phi   = EmcID::phi_module( aEmcID );
00804 
00805         Double_t charge = RawDataUtil::EmcCharge(aEmcDigi->getMeasure(),
00806                           aEmcDigi->getChargeChannel());
00807         Double_t time = RawDataUtil::EmcTime(aEmcDigi->getTimeChannel());
00808 
00809         TGeoPhysicalNode *phyNode = 0;
00810         phyNode = GetPhysicalCrystal( part, phi, theta );
00811         if (phyNode) {
00812             m_PhyNodeOrgArray->Add ( phyNode->GetNode() );
00813 
00814             //Double_t *P; // = new Double_t[16];
00815             //TGeoArb8 *oldArb8 = (TGeoArb8*)phyNode->GetShape();
00816             //P = oldArb8->GetVertices();
00817             //TGeoArb8 *newArb8 = new TGeoArb8(charge, &P[0]);
00818 
00819             //TGeoTranslation *newmat =
00820             //    new TGeoTranslation(0.0, 0.0, oldArb8->GetDz()+newArb8->GetDz());
00821             //newmat->RegisterYourself();
00822 
00823             //Align(phyNode, newmat, newArb8);
00824 
00825             //m_HitsArray->Add( phyNode );
00828         }
00829 
00830         phyNode = GetPhysicalCrystal2( part, phi, theta );
00831         if (phyNode) {
00832             m_PhyNodeOrgArray->Add ( phyNode->GetNode() );
00833 
00834             //Double_t *P; // = new Double_t[16];
00835             //TGeoArb8 *oldArb8 = (TGeoArb8*)phyNode->GetShape();
00836             //P = oldArb8->GetVertices();
00837             //TGeoArb8 *newArb8 = new TGeoArb8(charge, &P[0]);
00838 
00839             //TGeoTranslation *newmat =
00840             //    new TGeoTranslation(0.0, 0.0, oldArb8->GetDz()+newArb8->GetDz());
00841             //newmat->RegisterYourself();
00842 
00843             //Align(phyNode, newmat, newArb8);
00844 
00845             //m_HitsArray->Add( phyNode );
00848         }
00849 
00850         Emc2DCrystal *aCrystal = 0;
00851         aCrystal = m_Emc2DCrystal[part][phi][theta];
00852         if (aCrystal) {
00853             aCrystal->ClearInfo();
00854             aCrystal->AddInfo(aCrystal->GetTitle());
00855 
00856             char data[100];
00857             sprintf(data, "time = %-.3f ns, charge = %-.3f MeV", time, charge);
00858             aCrystal->AddInfo( TString(data) );
00859             sprintf(data, "Fired");
00860             aCrystal->AddInfo( TString(data) );
00861 
00862             aCrystal->CloseInfo();
00863 
00864             m_2DHitsArray->Add(aCrystal);
00865         }
00866     }
00867 }

void EmcROOTGeo::SetNode (  ) 

Set the pointers to theirs nodes;.

void EmcROOTGeo::SetNode (  ) 

Set the pointers to theirs nodes;.

Definition at line 64 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::GetLogicalVolume(), GetPhi(), SubDetectorROOTGeo::GetTopVolume(), m_Emc, m_kPart, m_kPhiBr, m_kPhiEc, m_kThetaEc, m_NodeTheta, nPhi, and deljobs::string.

Referenced by InitFromGDML(), InitFromGdml(), and InitFromROOT().

00065 {
00066   m_Emc = GetTopVolume();
00067   if(!m_Emc) {
00068     m_Emc = GetLogicalVolume("logicalEMC");
00069   }
00070   if(!m_Emc) std::cout << "m_Emc = 0" << std::endl;
00071   else cout<<"Find logicalEMC!"<<endl;
00072   
00073   for (int part = 0; part < m_kPart; part++) {
00074     //TGeoNode *nodePart = GetPart(part);
00075     //if(nodePart) cout<<nodePart->GetName()<<endl;
00076     int nPhi = (part == 1 ? m_kPhiBr : m_kPhiEc);
00077     
00078     for (int phi = 0; phi < nPhi; phi++) {
00079       //total number of daughters in BSCPhi is 215
00080       int nTheta = (part == 1 ? 219 : m_kThetaEc);
00081       TGeoNode *nodePhi = GetPhi(part,phi);
00082       //if(nodePhi) cout<<nodePhi->GetName()<<endl;
00083       
00084       for (int theta = 0; theta < nTheta; theta++) {
00085         string name = nodePhi->GetDaughter(theta)->GetName();
00086         int nthe=-1;
00087         string strthe;
00088         if(name.find("BSCCasing",0)==7) {
00089           strthe = name.substr(16,2);
00090         } else if(name.find("EndCasing",0)==7) {
00091           strthe = name.substr(19,2);
00092         }
00093         
00094         istringstream thetaBuf(strthe);
00095         thetaBuf >> nthe;
00096         
00097         if(nthe>=0) {
00098           m_NodeTheta[part][phi][nthe] = nodePhi->GetDaughter(theta);
00099         }
00100       }
00101     }
00102   }
00103   //std::cout << "end of set node" << std::endl;
00104 }

void EmcROOTGeo::SetNoEndVisible (  ) 

Set noend visible;.

Definition at line 583 of file EmcROOTGeo.cxx.

00584 {
00585     /*
00586     for (int theta = 0; theta < GetThetaNb(1); theta++) {
00587       for (int phi = 0; phi < GetPhiNb(1); phi++) {
00588         GetPhysicalCrystal(1, phi, theta)->SetVisibility(1);
00589       }
00590     }
00591     */
00592 }

void EmcROOTGeo::SetPhysicalNode (  ) 

Set the pointers to the physical nodes;.

void EmcROOTGeo::SetPhysicalNode (  ) 

Set the pointers to the physical nodes;.

Definition at line 255 of file EmcROOTGeo.cxx.

References GetCrystal(), SubDetectorROOTGeo::GetLogicalVolume(), GetPart(), GetPhi(), GetTheta(), m_kPart, m_kPhiBr, m_kPhiEc, m_kThetaBr, m_kThetaEc, m_PhysicalCrystal, nPhi, and SubDetectorROOTGeo::SetChildNo().

Referenced by EmcRecROOTGeo::InitFromXML(), and BesGeometry::InitGeometry().

00256 {
00257   //int brCrystalColor = 4;
00258   //int ecCrystalColor = 7;
00259 
00260   if (gGeoManager == 0) std::cout << "Create gGeoManager first" << std::endl; 
00261   else cout<<"gGeoManager success!"<<endl;
00262   
00263   TGeoVolume *volEmc = GetLogicalVolume("logicalEMC");
00264   if(!volEmc) std::cout << "logicalEMC not found !" << std::endl;
00265       
00266   //construct bes world
00267   float m_BesR = 5200;
00268   float m_BesZ = 5680;    
00269   TGeoIdentity *identity = new TGeoIdentity();
00270 
00271   TGeoMaterial *mat = new TGeoMaterial("VOID",0,0,0);
00272   TGeoMedium   *med = new TGeoMedium("MED",1,mat);
00273   TGeoVolume   *m_Bes = gGeoManager->MakeBox("volBes", med, 
00274       0.5*m_BesR, 0.5*m_BesR, 0.5*m_BesZ);
00275   gGeoManager->SetTopVolume(m_Bes);
00276   m_Bes->AddNode(volEmc, 0, identity); 
00277   //cout<<"Ndaughters="<<m_Bes->GetNdaughters()<<endl;
00278   SetChildNo(m_Bes->GetNdaughters()-1);
00279         
00280   gGeoManager->SetDrawExtraPaths();  // draw physical node or not;
00281   gGeoManager->CloseGeometry();
00282   gGeoManager->SetNsegments(20);
00283       
00284 
00285   TGeoNode *bes = gGeoManager->GetTopNode();
00286   TGeoNode *emc = bes->GetDaughter(0);
00287   
00288   for (int part = 0; part < m_kPart; part++) {
00289     TGeoNode *nodePart = GetPart(part);
00290     int nPhi = (part == 1 ? m_kPhiBr : m_kPhiEc);
00291     for (int phi = 0; phi < nPhi; phi++) {
00292       TGeoNode *nodePhi = GetPhi(part, phi);
00293       int nTheta = (part == 1 ? m_kThetaBr : m_kThetaEc);
00294       for (int theta = 0; theta < nTheta; theta++) {
00295         //cout<<part<<"\t"<<phi<<"\t"<<theta<<endl;
00296         TGeoNode *nodeTheta = GetTheta(part, phi, theta);
00297         TGeoNode *nodeCrystal = GetCrystal(part, phi, theta);
00298         TString strPath =    TString("/") + bes->GetName() +
00299                              TString("/") + emc->GetName() +
00300                              TString("/") + nodePart->GetName() +
00301                              TString("/") + nodePhi->GetName() +
00302                              TString("/") + nodeTheta->GetName() +
00303                              TString("/") + nodeCrystal->GetName();
00304         m_PhysicalCrystal[part][phi][theta] = gGeoManager->MakePhysicalNode(strPath);
00305         
00306         //m_PhysicalCrystal[part][phi][theta]->SetVisibility(0);
00307         //m_PhysicalCrystal[part][phi][theta]->SetIsVolAtt(kFALSE);
00308         //if (part == 1) m_PhysicalCrystal[part][phi][theta]->SetLineColor(brCrystalColor);
00309         //else           m_PhysicalCrystal[part][phi][theta]->SetLineColor(ecCrystalColor);
00310       }
00311     }
00312   }
00313 }

void EmcROOTGeo::SetQuarterVisible (  ) 

Set quater visible;.

void EmcROOTGeo::SetQuarterVisible (  ) 

Set quater visible;.

Definition at line 208 of file EmcROOTGeo.cxx.

References GetCrystal(), GetPart(), GetPhi(), GetTheta(), m_kPart, m_kPhiBr, m_kPhiEc, m_kThetaBr, m_kThetaEc, and nPhi.

00209 {
00210   /*  for (int part = 1; part < m_kPart-1; part++) {
00211     for (int phi = 1; phi <= m_kPhiBr; phi++) {
00212       GetVolumePhi(part, phi)->SetVisibility(0);
00213     }
00214 
00215      for (int theta = 1; theta <= m_kThetaBr; theta++) {
00216        GetVolumeTheta(part, theta)->SetVisibility(1);
00217        GetVolumeCrystal(part, theta)->SetVisibility(0);
00218     }
00219   }
00220 
00221   for (int part = 1; part < m_kPart-1; part++) {
00222     for (int phi = 1; phi <= m_kPhiBr; phi++) {
00223       GetPhi(part, phi)->SetVisibility(0);
00224       for (int theta = 1; theta <= m_kThetaBr; theta++) {
00225         if (phi < m_kPhiBr/4) GetTheta(part, phi, theta)->SetVisibility(0);
00226         else                  GetTheta(part, phi, theta)->SetVisibility(1);
00227         GetCrystal(part, phi, theta)->SetVisibility(0);
00228       }
00229     }
00230   }
00231   */
00232 
00233   for (int part = 0; part < m_kPart; part++) {
00234     GetPart(part)->SetVisibility(0);
00235     int nPhi = (part == 1 ? m_kPhiBr : m_kPhiEc);
00236     for (int phi = 0; phi < nPhi; phi++) {
00237       GetPhi(part, phi)->SetVisibility(0);
00238       int nTheta = (part == 1 ? m_kThetaBr : m_kThetaEc);
00239       for (int theta = 0; theta < nTheta; theta++) {
00240         GetTheta(part, phi, theta)->SetVisibility(0);
00241         if ( (part == 1 && (phi >= 0 && phi < nPhi/4)) ||
00242              (part != 1) ) {
00243           GetCrystal(part, phi, theta)->SetVisibility(1);
00244         }
00245         else {
00246           GetCrystal(part, phi, theta)->SetVisibility(0);
00247         }
00248       }
00249     }
00250   }
00251 
00252 }

void EmcROOTGeo::SetVisEmcDetector (  ) 

Set Emc detector visibility;.

Definition at line 870 of file EmcROOTGeo.cxx.

References GetPart(), BesView::GetVisEmcBarrel(), BesView::GetVisEmcEast(), BesView::GetVisEmcGlobal(), BesView::GetVisEmcWest(), genRecEmupikp::i, and SubDetectorROOTGeo::m_DetectorsArray.

Referenced by BesGeometry::Draw3D(), and BesClient::HandleViewOptionMenu().

00871 {
00872     BesView *view = 0;
00873     if (gPad) view = (BesView*)gPad->GetView();
00874 
00875     for (int i = 0; i < m_DetectorsArray->GetEntries(); i++) {
00876         TGeoPhysicalNode *phyNode = (TGeoPhysicalNode*)m_DetectorsArray->At(i);
00877         phyNode->SetVisibility(0);
00878         if (view && view->GetVisEmcGlobal()) {
00879             int part = GetPart(phyNode);
00880             if (part == 0 && view->GetVisEmcEast()   ||
00881                     part == 1 && view->GetVisEmcBarrel() ||
00882                     part == 2 && view->GetVisEmcWest()   )
00883                 phyNode->SetVisibility(1);
00884         }
00885     }
00886 }

void EmcROOTGeo::SetVisEmcHits (  ) 

Set Emc hits visibility;.

Definition at line 889 of file EmcROOTGeo.cxx.

References GetPart(), BesView::GetVisEmcHitsBarrel(), BesView::GetVisEmcHitsEast(), BesView::GetVisEmcHitsGlobal(), BesView::GetVisEmcHitsWest(), genRecEmupikp::i, and SubDetectorROOTGeo::m_HitsArray.

Referenced by BesGeometry::Draw3D().

00890 {
00891     BesView *view = 0;
00892     if (gPad) view = (BesView*)gPad->GetView();
00893 
00894     for (int i = 0; i < m_HitsArray->GetEntries(); i++) {
00895         TGeoPhysicalNode *phyNode = (TGeoPhysicalNode*)m_HitsArray->At(i);
00896         if (view && view->GetVisEmcHitsGlobal()) {
00897             int part = GetPart(phyNode);
00898             if (part == 0 && view->GetVisEmcHitsEast()   ||
00899                     part == 1 && view->GetVisEmcHitsBarrel() ||
00900                     part == 2 && view->GetVisEmcHitsWest()   ) {
00901                 phyNode->SetVisibility(1);
00902                 phyNode->SetLineColor(kMagenta);
00903                 continue;
00904             }
00905         }
00906         phyNode->SetVisibility(0);
00907     }
00908 }

void EmcROOTGeo::SetVolumeAppendInVis (  ) 

Set default visual attributes;.

Definition at line 251 of file EmcROOTGeo.cxx.

References SubDetectorROOTGeo::GetLogicalVolume(), and genRecEmupikp::i.

Referenced by SetVolumeDefaultVis().

00252 {
00253 
00254     //-------------------------------------------------------------
00255     //Barrel
00256     //GetLogicalVolume
00257     TGeoVolume *logicRear,*logicOrgGlass,*logicRearCasing,*logicAlPlate,*logicPD,*logicPreAmpBox,*logicAirInPABox,*logicHangingPlate,*logicWaterPipe;
00258     TGeoVolume *logicCable,*logicOCGirder,*logicSupportBar,*logicSupportBar1,*logicEndRing,*logicGear,*logicTaperRing1,*logicTaperRing2,*logicTaperRing3;
00259 
00260 
00261     logicRear = GetLogicalVolume("logicalRearBox");
00262     logicOrgGlass = GetLogicalVolume("logicalOrganicGlass");
00263     logicRearCasing = GetLogicalVolume("logicalRearCasing");
00264     logicAlPlate = GetLogicalVolume("logicalAlPlate");
00265     logicPD = GetLogicalVolume("logicalPD");
00266     logicPreAmpBox = GetLogicalVolume("logicalPreAmpBox");
00267     logicAirInPABox = GetLogicalVolume("logicalAirInPABox");
00268     logicHangingPlate = GetLogicalVolume("logicalHangingPlate");
00269     logicWaterPipe = GetLogicalVolume("logicalWaterPipe");
00270 
00271     for (int i = 0; i < 44; i++){
00272 
00273         std::ostringstream osnameBSCCable1;
00274         osnameBSCCable1 << "logicalBSCCable_1_"<<i;
00275         logicCable = GetLogicalVolume( osnameBSCCable1.str() );
00276         if (logicCable)
00277             logicCable->SetVisibility(0);
00278 
00279         std::ostringstream osnameBSCCable2;
00280         osnameBSCCable2 << "logicalBSCCable_2_"<<i;
00281         logicCable = GetLogicalVolume( osnameBSCCable2.str() );
00282         if (logicCable)
00283             logicCable->SetVisibility(0);
00284 
00285         std::ostringstream osnameOCGirder1;
00286         osnameOCGirder1 <<"logicalOpenningCutGirder_1_"<<i;
00287         logicOCGirder = GetLogicalVolume( osnameOCGirder1.str() );
00288         if (logicOCGirder)
00289             logicOCGirder->SetVisibility(0);
00290 
00291         std::ostringstream osnameOCGirder2;
00292         osnameOCGirder2 <<"logicalOpenningCutGirder_2_"<<i;
00293         logicOCGirder = GetLogicalVolume( osnameOCGirder2.str() );
00294         if (logicOCGirder)
00295             logicOCGirder->SetVisibility(0);
00296 
00297         std::ostringstream osnameOCGirder3;
00298         osnameOCGirder3 <<"logicalOpenningCutGirder_3_"<<i;
00299         logicOCGirder = GetLogicalVolume( osnameOCGirder3.str() );
00300         if (logicOCGirder)
00301             logicOCGirder->SetVisibility(0);
00302 
00303         std::ostringstream osnameOCGirder4;
00304         osnameOCGirder4 <<"logicalOpenningCutGirder_4_"<<i;
00305         logicOCGirder = GetLogicalVolume( osnameOCGirder4.str() );
00306         if (logicOCGirder)
00307             logicOCGirder->SetVisibility(0);
00308     }
00309 
00310     //-------------------------------------------------------------
00311     //Support system
00312     logicSupportBar = GetLogicalVolume("logicalSupportBar0");
00313     logicSupportBar1 = GetLogicalVolume("logicalSupportBar1");
00314     logicEndRing = GetLogicalVolume("logicalEndRing");
00315     logicGear = GetLogicalVolume("logicalGear");
00316     logicTaperRing1 = GetLogicalVolume("logicalTaperRing1");
00317     logicTaperRing2 = GetLogicalVolume("logicalTaperRing2");
00318     logicTaperRing3 = GetLogicalVolume("logicalTaperRing3");
00319 
00320     if (logicRear)
00321         logicRear->SetVisibility(0);
00322     if (logicOrgGlass)
00323         logicOrgGlass->SetVisibility(0);
00324     if (logicRearCasing)
00325         logicRearCasing->SetVisibility(0);
00326     if (logicAlPlate)
00327         logicAlPlate->SetVisibility(0);
00328     if (logicPD)
00329         logicPD->SetVisibility(0);
00330     if (logicPreAmpBox)
00331         logicPreAmpBox->SetVisibility(0);
00332     if (logicAirInPABox)
00333         logicAirInPABox->SetVisibility(0);
00334     if (logicHangingPlate)
00335         logicHangingPlate->SetVisibility(0);
00336     if (logicWaterPipe)
00337         logicWaterPipe->SetVisibility(0);
00338     if (logicGear)
00339         logicGear->SetVisibility(0);
00340     if (logicTaperRing1)
00341         logicTaperRing1->SetVisibility(0);
00342     if (logicTaperRing2)
00343         logicTaperRing2->SetVisibility(0);
00344     if (logicTaperRing3)
00345         logicTaperRing3->SetVisibility(0);
00346     if (logicSupportBar)
00347         logicSupportBar->SetVisibility(0);
00348     if (logicSupportBar1)
00349         logicSupportBar1->SetVisibility(0);
00350     if (logicEndRing)
00351         logicEndRing->SetVisibility(0);
00352 }

void EmcROOTGeo::SetVolumeDefaultVis (  ) 

Set default visual attributes;.

Definition at line 355 of file EmcROOTGeo.cxx.

References GetCrystal(), GetCrystal2(), GetPart(), GetPhi(), GetPhiNb(), GetTheta(), GetTheta2(), GetThetaNb(), GetVolumeCrystal(), GetVolumePart(), GetVolumePhi(), GetVolumeTheta(), genRecEmupikp::i, m_brCrystalColor, m_ecCrystalColor, m_Emc, m_EmcColor, m_kThetaBr, m_partColor, m_phiColor, m_thetaColor, nPhi, and SetVolumeAppendInVis().

00356 {
00357 
00358     SetVolumeAppendInVis();
00359 
00360 
00361     //std::cout << "begin of set defaultvis" << std::endl;
00362     m_Emc->SetLineColor(m_EmcColor);
00363     m_Emc->SetVisibility(0);
00364 
00365     for (int part = 0; part < m_kPart-1; part++) {
00366         GetVolumePart(part)->SetLineColor(m_partColor);
00367         int nPhi = (part == 1 ? m_kPhiBr : m_kSectorEc);
00368         for (int phi = 0; phi < nPhi; phi++) {
00369             GetVolumePhi(part, phi)->SetLineColor(m_phiColor);
00370             GetVolumePhi(part, phi)->SetVisibility(0);
00371         }
00372         if (part == 1) {
00373             for (int theta = 0; theta < m_kThetaBr; theta++) {
00374                 GetVolumeTheta(part, 0, theta)->SetLineColor(m_thetaColor);
00375                 GetVolumeTheta(part, 0, theta)->SetVisibility(0);
00376                 GetVolumeCrystal(part, 0, theta)->SetLineColor(m_brCrystalColor);
00377                 GetVolumeCrystal(part, 0, theta)->SetVisibility(0);
00378             }
00379         }
00380         else if (part == 0) {
00381             int iPhi[3] = {0,1,2};
00382             for (int i = 0; i < 3; i++) {
00383                 int phi = iPhi[i];
00384                 int nTheta = (part == 1 ? m_kThetaBr : m_kNbEc);
00385                 for (int theta = 0; theta < nTheta; theta++) {
00386                     GetVolumeTheta(part, phi, theta)->SetLineColor(m_thetaColor);
00387                     GetVolumeTheta(part, phi, theta)->SetVisibility(0);
00388                     GetVolumeCrystal(part, phi, theta)->SetLineColor(m_ecCrystalColor);
00389                     GetVolumeCrystal(part, phi, theta)->SetVisibility(0);
00390                 }
00391             }
00392         }
00393     }
00394 
00395     // phi and sector
00396     for (int part = 0; part < m_kPart; part++) {
00397         GetPart(part)->SetVisibility(0);
00398         int nPhi = (part == 1 ? m_kPhiBr : m_kSectorEc);
00399         for (int phi = 0; phi < nPhi; phi++) {
00400             GetPhi(part, phi)->SetVisibility(0);
00401         }
00402     }
00403 
00404     // theta with real phi
00405     for (int part = 0; part < m_kPart; part++) {
00406         for (int theta = 0; theta < GetThetaNb(part); theta++) {
00407             for (int phi = 0; phi < GetPhiNb(part, theta); phi++) {
00408                 //cout << "part " << part << " theta " << theta << " phi " << phi << endl;
00409                 TGeoNode *nodeTheta = GetTheta(part, phi, theta);
00410                 if (nodeTheta)   nodeTheta->SetVisibility(0);
00411                 TGeoNode *nodeCrystal = GetCrystal(part, phi, theta);
00412                 if (nodeCrystal) nodeCrystal->SetVisibility(0);
00413 
00414                 TGeoNode *nodeTheta2 = GetTheta2(part, phi, theta);
00415                 if (nodeTheta2)   nodeTheta2->SetVisibility(0);
00416                 TGeoNode *nodeCrystal2 = GetCrystal2(part, phi, theta);
00417                 if (nodeCrystal2) nodeCrystal2->SetVisibility(0);
00418             }
00419         }
00420     }
00421     //std::cout << "end of set defaultvis" << std::endl;
00422 
00423 }

void EmcROOTGeo::SetVolumeEmc ( TGeoVolume *  vol  )  [inline]

Set Emc volume, while initializing from ROOT;.

Definition at line 100 of file EmcROOTGeo.h.

References m_Emc.

Referenced by InitFromROOT().

00100 { m_Emc = vol; }


Member Data Documentation

const int EmcROOTGeo::EMC_CHARGE_FACTOR = 1000 [static, private]

Definition at line 187 of file EmcROOTGeo.h.

const int EmcROOTGeo::EMC_TIME_FACTOR = 1 [static, private]

Definition at line 186 of file EmcROOTGeo.h.

int SubDetectorROOTGeo::m_2DGeoInit [protected, inherited]

Definition at line 79 of file SubDetectorROOTGeo.h.

Referenced by TofROOTGeo::Draw(), MucROOTGeo::Draw(), MdcROOTGeo::Draw(), Draw(), TofROOTGeo::Init2DGeometry(), MucROOTGeo::Init2DGeometry(), MdcROOTGeo::Init2DGeometry(), and Init2DGeometry().

TObjArray* SubDetectorROOTGeo::m_2DHitsArray [protected, inherited]

Definition at line 85 of file SubDetectorROOTGeo.h.

Referenced by TofROOTGeo::SetHits(), MucROOTGeo::SetHits(), MdcROOTGeo::SetHits(), and SetHits().

int EmcROOTGeo::m_brCrystalColor [private]

Definition at line 183 of file EmcROOTGeo.h.

Referenced by SetHits(), and SetVolumeDefaultVis().

int SubDetectorROOTGeo::m_childNo [protected, inherited]

Definition at line 67 of file SubDetectorROOTGeo.h.

Referenced by SubDetectorROOTGeo::SetChildNo(), TofROOTGeo::SetPhysicalNode(), MucROOTGeo::SetPhysicalNode(), and MdcROOTGeo::SetPhysicalNode().

TObjArray* SubDetectorROOTGeo::m_DetectorsArray [protected, inherited]

Definition at line 83 of file SubDetectorROOTGeo.h.

Referenced by TofROOTGeo::SetDetector(), MucROOTGeo::SetDetector(), MdcROOTGeo::SetDetector(), SetDetector(), SubDetectorROOTGeo::SetDetectorOn(), SetVisEmcDetector(), MdcROOTGeo::SetVisMdcDetector(), MucROOTGeo::SetVisMucDetector(), and TofROOTGeo::SetVisTofDetector().

int EmcROOTGeo::m_ecCrystalColor [private]

Definition at line 184 of file EmcROOTGeo.h.

Referenced by SetHits(), and SetVolumeDefaultVis().

TGeoVolume* EmcROOTGeo::m_Emc [private]

Definition at line 189 of file EmcROOTGeo.h.

TGeoVolume* EmcROOTGeo::m_Emc [private]

Definition at line 106 of file EmcROOTGeo.h.

Referenced by GetVolumeEmc(), SetDefaultVis(), SetNode(), SetVolumeDefaultVis(), and SetVolumeEmc().

Emc2DCrystal* EmcROOTGeo::m_Emc2DCrystal[m_kPart][m_kPhiBr][m_kThetaBr] [private]

Definition at line 206 of file EmcROOTGeo.h.

Referenced by Draw(), DrawHits(), Get2DCrystal(), Init2DGeometry(), and SetHits().

int EmcROOTGeo::m_EmcColor [private]

Definition at line 179 of file EmcROOTGeo.h.

Referenced by SetVolumeDefaultVis().

const TObjArray* EmcROOTGeo::m_EmcDigiCol [private]

Definition at line 203 of file EmcROOTGeo.h.

Referenced by DrawHits(), and SetHits().

TObjArray* SubDetectorROOTGeo::m_HitsArray [protected, inherited]

Definition at line 84 of file SubDetectorROOTGeo.h.

Referenced by SubDetectorROOTGeo::GetHit(), SubDetectorROOTGeo::GetHitsNum(), TofROOTGeo::SetHits(), MucROOTGeo::SetHits(), MdcROOTGeo::SetHits(), SetHits(), SetVisEmcHits(), MdcROOTGeo::SetVisMdcHits(), MucROOTGeo::SetVisMucHits(), and TofROOTGeo::SetVisTofHits().

int EmcROOTGeo::m_kNbEc [private]

Definition at line 176 of file EmcROOTGeo.h.

static const int EmcROOTGeo::m_kPart = 3 [static, private]

Definition at line 98 of file EmcROOTGeo.h.

Referenced by EmcROOTGeo(), GetPartNb(), SetAllVisible(), SetDefaultVis(), SetNode(), SetPhysicalNode(), and SetQuarterVisible().

static const int EmcROOTGeo::m_kPhiBr = 120 [static, private]

Definition at line 99 of file EmcROOTGeo.h.

Referenced by EmcROOTGeo(), GetPhiNb(), SetAllVisible(), SetDefaultVis(), SetNode(), SetPhysicalNode(), and SetQuarterVisible().

int EmcROOTGeo::m_kPhiEc [private]

Definition at line 103 of file EmcROOTGeo.h.

Referenced by EmcROOTGeo(), GetPhiNb(), SetAllVisible(), SetDefaultVis(), SetNode(), SetPhysicalNode(), and SetQuarterVisible().

int EmcROOTGeo::m_kRealNbEc [private]

Definition at line 177 of file EmcROOTGeo.h.

int EmcROOTGeo::m_kSectorEc [private]

Definition at line 175 of file EmcROOTGeo.h.

static const int EmcROOTGeo::m_kThetaBr = 44 [static, private]

Definition at line 100 of file EmcROOTGeo.h.

Referenced by EmcROOTGeo(), GetThetaNb(), Init2DGeometry(), SetAllVisible(), SetDefaultVis(), SetPhysicalNode(), SetQuarterVisible(), and SetVolumeDefaultVis().

int EmcROOTGeo::m_kThetaEc [private]

Definition at line 104 of file EmcROOTGeo.h.

Referenced by EmcROOTGeo(), GetPhiNb(), GetThetaNb(), SetAllVisible(), SetDefaultVis(), SetNode(), SetPhysicalNode(), and SetQuarterVisible().

TGeoNode* EmcROOTGeo::m_NodePart[m_kPart] [private]

Definition at line 190 of file EmcROOTGeo.h.

TGeoNode* EmcROOTGeo::m_NodePhi[m_kPart][m_kPhiBr] [private]

Definition at line 191 of file EmcROOTGeo.h.

TGeoNode* EmcROOTGeo::m_NodeTheta[m_kPart][m_kPhiBr][m_kThetaBr] [private]

Definition at line 192 of file EmcROOTGeo.h.

TGeoNode* EmcROOTGeo::m_NodeTheta[m_kPart][m_kPhiBr][m_kThetaBr] [private]

Definition at line 107 of file EmcROOTGeo.h.

Referenced by EmcROOTGeo(), GetTheta(), and SetNode().

TGeoNode* EmcROOTGeo::m_NodeTheta2[m_kPart][m_kPhiBr][m_kThetaBr] [private]

Definition at line 193 of file EmcROOTGeo.h.

Referenced by GetTheta2().

int EmcROOTGeo::m_partColor [private]

Definition at line 180 of file EmcROOTGeo.h.

Referenced by SetVolumeDefaultVis().

int EmcROOTGeo::m_phiColor [private]

Definition at line 181 of file EmcROOTGeo.h.

Referenced by SetVolumeDefaultVis().

TObjArray* EmcROOTGeo::m_PhyNodeOrgArray [private]

Definition at line 197 of file EmcROOTGeo.h.

Referenced by SetHits().

TGeoPhysicalNode* EmcROOTGeo::m_PhysicalCrystal[m_kPart][m_kPhiBr][m_kThetaBr] [private]

Definition at line 194 of file EmcROOTGeo.h.

TGeoPhysicalNode* EmcROOTGeo::m_PhysicalCrystal[m_kPart][m_kPhiBr][m_kThetaBr] [private]

Definition at line 108 of file EmcROOTGeo.h.

Referenced by EmcROOTGeo(), GetPhysicalCrystal(), and SetPhysicalNode().

TGeoPhysicalNode* EmcROOTGeo::m_PhysicalCrystal2[m_kPart][m_kPhiBr][m_kThetaBr] [private]

Definition at line 195 of file EmcROOTGeo.h.

Referenced by GetPhysicalCrystal2().

int SubDetectorROOTGeo::m_ROOTGeoInit [protected, inherited]

Definition at line 66 of file SubDetectorROOTGeo.h.

Referenced by TofROOTGeo::Init2DGeometry(), MucROOTGeo::Init2DGeometry(), MdcROOTGeo::Init2DGeometry(), Init2DGeometry(), TofROOTGeo::InitFromGDML(), TofROOTGeo::InitFromGdml(), MucROOTGeo::InitFromGDML(), MucROOTGeo::InitFromGdml(), MdcROOTGeo::InitFromGDML(), MdcROOTGeo::InitFromGdml(), InitFromGDML(), InitFromGdml(), TofROOTGeo::InitFromROOT(), MucROOTGeo::InitFromROOT(), MdcROOTGeo::InitFromROOT(), InitFromROOT(), and SubDetectorROOTGeo::IsInitialized().

int EmcROOTGeo::m_thetaColor [private]

Definition at line 182 of file EmcROOTGeo.h.

Referenced by SetVolumeDefaultVis().

TGeoVolume* SubDetectorROOTGeo::m_TopVolume [protected, inherited]

Definition at line 81 of file SubDetectorROOTGeo.h.

TGeoVolume* SubDetectorROOTGeo::m_TopVolume [protected, inherited]

Definition at line 69 of file SubDetectorROOTGeo.h.

Referenced by SubDetectorROOTGeo::GetTopVolume(), and SubDetectorROOTGeo::ReadGdml().


Generated on Tue Nov 29 23:18:46 2016 for BOSS_7.0.2 by  doxygen 1.4.7