ROOT logo
#include <iostream>
#include "TGeoManager.h"
#include "TGeoNode.h"
#include "TEveGeoNode.h"
#include "TEveGeoShape.h"
#include "TEveManager.h"
#include "TFile.h"

#include "TGLViewer.h"

#include "AliEveHltGeometry.h"
ClassImp(AliEveHltGeometry)

using namespace std;

///_______________________________________________________________________
AliEveHltGeometry::AliEveHltGeometry() {

}



///_______________________________________________________________________
AliEveHltGeometry::~AliEveHltGeometry() {
  // see header file for class documentation
  
}

///______________________________________________________________________
TEveGeoShape * AliEveHltGeometry::CreateGentleGeometry( Bool_t register_as_global) {
  TFile f("$ALICE_ROOT/EVE/alice-data/gentle_geo.root");
  TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) f.Get("Gentle");
  TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse);
  f.Close();
  
  TEveElement* elTRD = gsre->FindChild("TRD+TOF");
  elTRD->SetRnrState(kFALSE);
  
  TEveElement* elHMPID = gsre->FindChild("HMPID");
  elHMPID->SetRnrState(kFALSE);

  TEveElement* elPHOS = gsre->FindChild("PHOS");
  elPHOS->SetRnrState(kTRUE);
  elPHOS->FindChild("PHOS_4")->SetRnrState(kFALSE);
  elPHOS->FindChild("PHOS_5")->SetRnrState(kFALSE);


  if (register_as_global) {
    gEve->AddGlobalElement(gsre);
  }

  return gsre;
}

///______________________________________________________________________
TEveGeoTopNode * AliEveHltGeometry::CreateEmcalGeometry(TGeoManager * manager) {
  if(gGeoManager) cout << "have the manager"<<endl;
  else cout << "we don't "<<endl;
  TGeoVolume * volume = manager->GetTopVolume();
  if(!volume) cout << "no volume"<<endl;
  TGeoNode * gEMCALNode = manager->GetTopVolume()->FindNode("XEN1_1");
  
  TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode);
  emcal_re->SetVisLevel(1);

  for(Int_t i = 4; i < 11; i++) {
    emcal_re->FindChild(Form("SMOD_%d", i))->SetRnrState(kFALSE);
  }
  emcal_re->FindChild("SM10_1")->SetRnrState(kFALSE);
  emcal_re->FindChild("SM10_2")->SetRnrState(kFALSE);


  gEve->AddGlobalElement(emcal_re);

  return emcal_re;
}


// -----------------------------------------------------------------
TEveGeoShape* AliEveHltGeometry::geom_gentle_rphi() {
  // The resulting geometry is NOT added into the global scene!

  TFile f("$ALICE_ROOT/EVE/alice-data/gentle_rphi_geo.root");
  TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) f.Get("Gentle");
  TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse);
  f.Close();

  TEveElement* elPHOS = gsre->FindChild("PHOS");
  elPHOS->SetRnrState(kTRUE);
  elPHOS->FindChild("PHOS_4")->SetRnrState(kFALSE);
  elPHOS->FindChild("PHOS_5")->SetRnrState(kFALSE);

  return gsre;
}

// -----------------------------------------------------------------
TEveGeoShape* AliEveHltGeometry::geom_gentle_rhoz() {
  // The resulting geometry is NOT added into the global scene!

  TFile f("$ALICE_ROOT/EVE/alice-data/gentle_rhoz_geo.root");
  TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) f.Get("Gentle");
  TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse);
  f.Close();

  return gsre;
}

// -----------------------------------------------------------------
TEveGeoShape* AliEveHltGeometry::geom_gentle_trd() {
  TFile f("$ALICE_ROOT/EVE/alice-data/gentle_geo_trd.root");
  TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) f.Get("Gentle TRD");
  TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse);
  gEve->AddGlobalElement(gsre);
  f.Close();

  Int_t sm = 0;

  // Fix visibility, color and transparency
  gsre->SetRnrSelf(kFALSE);
  for (TEveElement::List_i i = gsre->BeginChildren(); i != gsre->EndChildren(); ++i) {

    TEveGeoShape* lvl1 = (TEveGeoShape*) *i;
    lvl1->SetRnrSelf(kFALSE);
    for (TEveElement::List_i j = lvl1->BeginChildren(); j != lvl1->EndChildren(); ++j) {

      TEveGeoShape* lvl2 = (TEveGeoShape*) *j;
      
      if ( sm == 0 || sm == 1 || sm == 7 || sm == 8 || sm == 9 || sm == 10 || sm == 17 )
	lvl2->SetRnrSelf(kTRUE);	
      else 
	lvl2->SetRnrSelf(kFALSE);	

      lvl2->SetMainColor(3);
      lvl2->SetMainTransparency(80);

      ++sm;
    }
    
  }

  return gsre;
}

///______________________________________________________________________
TEveGeoShape* AliEveHltGeometry::geom_gentle_muon(Bool_t updateScene) {

  TFile f("$ALICE_ROOT/EVE/alice-data/gentle_geo_muon.root");
  TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) f.Get("Gentle MUON");
  TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse);
  gEve->AddGlobalElement(gsre);
  f.Close();

  gsre->SetRnrSelf(kFALSE);

  DrawDeep(gsre);

  if ( updateScene ) {
    TGLViewer* v = gEve->GetDefaultGLViewer();
    v->UpdateScene();
  }

  return gsre;

}
///______________________________________________________________________
void AliEveHltGeometry::DrawDeep(TEveGeoShape *gsre) {
  
  for (TEveElement::List_i i = gsre->BeginChildren(); i != gsre->EndChildren(); ++i) {
    TEveGeoShape* lvl = (TEveGeoShape*) *i;
    lvl->SetRnrSelf(kFALSE);
    if (!lvl->HasChildren()) {
      lvl->SetRnrSelf(kTRUE);
      lvl->SetMainColor(3);
      lvl->SetMainTransparency(50);
    }
   DrawDeep(lvl);
  }

}
 AliEveHltGeometry.cxx:1
 AliEveHltGeometry.cxx:2
 AliEveHltGeometry.cxx:3
 AliEveHltGeometry.cxx:4
 AliEveHltGeometry.cxx:5
 AliEveHltGeometry.cxx:6
 AliEveHltGeometry.cxx:7
 AliEveHltGeometry.cxx:8
 AliEveHltGeometry.cxx:9
 AliEveHltGeometry.cxx:10
 AliEveHltGeometry.cxx:11
 AliEveHltGeometry.cxx:12
 AliEveHltGeometry.cxx:13
 AliEveHltGeometry.cxx:14
 AliEveHltGeometry.cxx:15
 AliEveHltGeometry.cxx:16
 AliEveHltGeometry.cxx:17
 AliEveHltGeometry.cxx:18
 AliEveHltGeometry.cxx:19
 AliEveHltGeometry.cxx:20
 AliEveHltGeometry.cxx:21
 AliEveHltGeometry.cxx:22
 AliEveHltGeometry.cxx:23
 AliEveHltGeometry.cxx:24
 AliEveHltGeometry.cxx:25
 AliEveHltGeometry.cxx:26
 AliEveHltGeometry.cxx:27
 AliEveHltGeometry.cxx:28
 AliEveHltGeometry.cxx:29
 AliEveHltGeometry.cxx:30
 AliEveHltGeometry.cxx:31
 AliEveHltGeometry.cxx:32
 AliEveHltGeometry.cxx:33
 AliEveHltGeometry.cxx:34
 AliEveHltGeometry.cxx:35
 AliEveHltGeometry.cxx:36
 AliEveHltGeometry.cxx:37
 AliEveHltGeometry.cxx:38
 AliEveHltGeometry.cxx:39
 AliEveHltGeometry.cxx:40
 AliEveHltGeometry.cxx:41
 AliEveHltGeometry.cxx:42
 AliEveHltGeometry.cxx:43
 AliEveHltGeometry.cxx:44
 AliEveHltGeometry.cxx:45
 AliEveHltGeometry.cxx:46
 AliEveHltGeometry.cxx:47
 AliEveHltGeometry.cxx:48
 AliEveHltGeometry.cxx:49
 AliEveHltGeometry.cxx:50
 AliEveHltGeometry.cxx:51
 AliEveHltGeometry.cxx:52
 AliEveHltGeometry.cxx:53
 AliEveHltGeometry.cxx:54
 AliEveHltGeometry.cxx:55
 AliEveHltGeometry.cxx:56
 AliEveHltGeometry.cxx:57
 AliEveHltGeometry.cxx:58
 AliEveHltGeometry.cxx:59
 AliEveHltGeometry.cxx:60
 AliEveHltGeometry.cxx:61
 AliEveHltGeometry.cxx:62
 AliEveHltGeometry.cxx:63
 AliEveHltGeometry.cxx:64
 AliEveHltGeometry.cxx:65
 AliEveHltGeometry.cxx:66
 AliEveHltGeometry.cxx:67
 AliEveHltGeometry.cxx:68
 AliEveHltGeometry.cxx:69
 AliEveHltGeometry.cxx:70
 AliEveHltGeometry.cxx:71
 AliEveHltGeometry.cxx:72
 AliEveHltGeometry.cxx:73
 AliEveHltGeometry.cxx:74
 AliEveHltGeometry.cxx:75
 AliEveHltGeometry.cxx:76
 AliEveHltGeometry.cxx:77
 AliEveHltGeometry.cxx:78
 AliEveHltGeometry.cxx:79
 AliEveHltGeometry.cxx:80
 AliEveHltGeometry.cxx:81
 AliEveHltGeometry.cxx:82
 AliEveHltGeometry.cxx:83
 AliEveHltGeometry.cxx:84
 AliEveHltGeometry.cxx:85
 AliEveHltGeometry.cxx:86
 AliEveHltGeometry.cxx:87
 AliEveHltGeometry.cxx:88
 AliEveHltGeometry.cxx:89
 AliEveHltGeometry.cxx:90
 AliEveHltGeometry.cxx:91
 AliEveHltGeometry.cxx:92
 AliEveHltGeometry.cxx:93
 AliEveHltGeometry.cxx:94
 AliEveHltGeometry.cxx:95
 AliEveHltGeometry.cxx:96
 AliEveHltGeometry.cxx:97
 AliEveHltGeometry.cxx:98
 AliEveHltGeometry.cxx:99
 AliEveHltGeometry.cxx:100
 AliEveHltGeometry.cxx:101
 AliEveHltGeometry.cxx:102
 AliEveHltGeometry.cxx:103
 AliEveHltGeometry.cxx:104
 AliEveHltGeometry.cxx:105
 AliEveHltGeometry.cxx:106
 AliEveHltGeometry.cxx:107
 AliEveHltGeometry.cxx:108
 AliEveHltGeometry.cxx:109
 AliEveHltGeometry.cxx:110
 AliEveHltGeometry.cxx:111
 AliEveHltGeometry.cxx:112
 AliEveHltGeometry.cxx:113
 AliEveHltGeometry.cxx:114
 AliEveHltGeometry.cxx:115
 AliEveHltGeometry.cxx:116
 AliEveHltGeometry.cxx:117
 AliEveHltGeometry.cxx:118
 AliEveHltGeometry.cxx:119
 AliEveHltGeometry.cxx:120
 AliEveHltGeometry.cxx:121
 AliEveHltGeometry.cxx:122
 AliEveHltGeometry.cxx:123
 AliEveHltGeometry.cxx:124
 AliEveHltGeometry.cxx:125
 AliEveHltGeometry.cxx:126
 AliEveHltGeometry.cxx:127
 AliEveHltGeometry.cxx:128
 AliEveHltGeometry.cxx:129
 AliEveHltGeometry.cxx:130
 AliEveHltGeometry.cxx:131
 AliEveHltGeometry.cxx:132
 AliEveHltGeometry.cxx:133
 AliEveHltGeometry.cxx:134
 AliEveHltGeometry.cxx:135
 AliEveHltGeometry.cxx:136
 AliEveHltGeometry.cxx:137
 AliEveHltGeometry.cxx:138
 AliEveHltGeometry.cxx:139
 AliEveHltGeometry.cxx:140
 AliEveHltGeometry.cxx:141
 AliEveHltGeometry.cxx:142
 AliEveHltGeometry.cxx:143
 AliEveHltGeometry.cxx:144
 AliEveHltGeometry.cxx:145
 AliEveHltGeometry.cxx:146
 AliEveHltGeometry.cxx:147
 AliEveHltGeometry.cxx:148
 AliEveHltGeometry.cxx:149
 AliEveHltGeometry.cxx:150
 AliEveHltGeometry.cxx:151
 AliEveHltGeometry.cxx:152
 AliEveHltGeometry.cxx:153
 AliEveHltGeometry.cxx:154
 AliEveHltGeometry.cxx:155
 AliEveHltGeometry.cxx:156
 AliEveHltGeometry.cxx:157
 AliEveHltGeometry.cxx:158
 AliEveHltGeometry.cxx:159
 AliEveHltGeometry.cxx:160
 AliEveHltGeometry.cxx:161
 AliEveHltGeometry.cxx:162
 AliEveHltGeometry.cxx:163
 AliEveHltGeometry.cxx:164
 AliEveHltGeometry.cxx:165
 AliEveHltGeometry.cxx:166
 AliEveHltGeometry.cxx:167
 AliEveHltGeometry.cxx:168
 AliEveHltGeometry.cxx:169
 AliEveHltGeometry.cxx:170
 AliEveHltGeometry.cxx:171
 AliEveHltGeometry.cxx:172
 AliEveHltGeometry.cxx:173
 AliEveHltGeometry.cxx:174
 AliEveHltGeometry.cxx:175
 AliEveHltGeometry.cxx:176
 AliEveHltGeometry.cxx:177
 AliEveHltGeometry.cxx:178
 AliEveHltGeometry.cxx:179