00001
00002
00003
00004
00005
00006 #include "TEveProjections.h"
00007
00008 const char* histFile =
00009 "http://amraktad.web.cern.ch/amraktad/cms_calo_hist.root";
00010
00011 void add_jet(TEveElement*, const char*, Float_t, Float_t, Float_t, Float_t);
00012
00013 void calorimeters()
00014 {
00015 gSystem->IgnoreSignal(kSigSegmentationViolation, true);
00016 TEveManager::Create();
00017
00018
00019 TFile::SetCacheFileDir(".");
00020 TFile* hf = TFile::Open(histFile, "CACHEREAD");
00021 TH2F* ecalHist = (TH2F*)hf->Get("ecalLego");
00022 TH2F* hcalHist = (TH2F*)hf->Get("hcalLego");
00023 TEveCaloDataHist* data = new TEveCaloDataHist();
00024 data->AddHistogram(ecalHist);
00025 data->RefSliceInfo(0).Setup("ECAL", 0.3, kBlue);
00026 data->AddHistogram(hcalHist);
00027 data->RefSliceInfo(1).Setup("HCAL", 0.1, kRed);
00028 data->GetEtaBins()->SetTitleFont(120);
00029 data->GetEtaBins()->SetTitle("h");
00030 data->GetPhiBins()->SetTitleFont(120);
00031 data->GetPhiBins()->SetTitle("f");
00032 data->IncDenyDestroy();
00033 gEve->AddToListTree(data, kFALSE);
00034
00035
00036
00037 TEveCaloLego* lego = MakeCaloLego(data, 0);
00038
00039
00040
00041
00042
00043
00044 TEveWindowSlot* slot =
00045 TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
00046 TEveWindowPack* packH = slot->MakePack();
00047 packH->SetElementName("Projections");
00048 packH->SetHorizontal();
00049 packH->SetShowTitleBar(kFALSE);
00050
00051 slot = packH->NewSlot();
00052 TEveWindowPack* pack0 = slot->MakePack();
00053 pack0->SetShowTitleBar(kFALSE);
00054 TEveWindowSlot* slotLeftTop = pack0->NewSlot();
00055 TEveWindowSlot* slotLeftBottom = pack0->NewSlot();
00056
00057 slot = packH->NewSlot();
00058 TEveWindowPack* pack1 = slot->MakePack();
00059 pack1->SetShowTitleBar(kFALSE);
00060 TEveWindowSlot* slotRightTop = pack1->NewSlot();
00061 TEveWindowSlot* slotRightBottom = pack1->NewSlot();
00062
00063
00064 TEveCalo3D* calo3d = MakeCalo3D(data, slotRightTop);
00065 MakeCalo2D(calo3d, slotLeftTop, TEveProjection::kPT_RPhi);
00066 MakeCalo2D(calo3d, slotLeftBottom, TEveProjection::kPT_RhoZ);
00067 TEveCaloLego* lego = MakeCaloLego(data, slotRightBottom);
00068
00069
00070 gEve->GetBrowser()->GetTabRight()->SetTab(1);
00071 gEve->Redraw3D(kTRUE);
00072 }
00073
00074
00075 TEveCaloLego* MakeCaloLego(TEveCaloData* data, TEveWindowSlot* slot)
00076 {
00077
00078
00079 TEveViewer* v;
00080 TEveScene* s;
00081 if (slot)
00082 {
00083 TEveViewer* v; TEveScene* s;
00084 MakeViewerScene(slot, v, s);
00085 } else {
00086 v = gEve->GetDefaultViewer();
00087 s = gEve->GetEventScene();
00088 }
00089 v->SetElementName("Viewer - Lego");
00090 s->SetElementName("Scene - Lego");
00091
00092 gStyle->SetPalette(1, 0);
00093 TEveCaloLego* lego = new TEveCaloLego(data);
00094 s->AddElement(lego);
00095
00096
00097
00098
00099 lego->InitMainTrans();
00100 lego->RefMainTrans().SetScale(TMath::TwoPi(), TMath::TwoPi(), TMath::Pi());
00101
00102
00103 TGLViewer* glv = v->GetGLViewer();
00104 TEveCaloLegoOverlay* overlay = new TEveCaloLegoOverlay();
00105 glv->AddOverlayElement(overlay);
00106 overlay->SetCaloLego(lego);
00107
00108
00109 glv->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
00110 glv->SetEventHandler
00111 (new TEveLegoEventHandler(glv->GetGLWidget(), glv, lego));
00112 gEve->AddToListTree(lego, kTRUE);
00113
00114 return lego;
00115 }
00116
00117
00118 TEveCalo3D* MakeCalo3D(TEveCaloData* data, TEveWindowSlot* slot)
00119 {
00120
00121
00122 TEveViewer* v; TEveScene* s;
00123 MakeViewerScene(slot, v, s);
00124 v->SetElementName("Viewer - 3D");
00125 s->SetElementName("Scene - 3D");
00126
00127 TEveCalo3D* calo3d = new TEveCalo3D(data);
00128 calo3d->SetBarrelRadius(129.00);
00129 calo3d->SetEndCapPos(268.36);
00130 s->AddElement(calo3d);
00131
00132 add_jet(calo3d, "JetCone Lojz", 1.4, 1.0, 0.4, 0.2);
00133 add_jet(calo3d, "JetCone Mici", -2.0, -2.1, 0.2, 0.4);
00134
00135 return calo3d;
00136 }
00137
00138
00139 TEveCalo2D* MakeCalo2D(TEveCalo3D* calo3d, TEveWindowSlot* slot,
00140 TEveProjection::EPType_e t)
00141 {
00142
00143
00144 TEveViewer* v; TEveScene* s;
00145 MakeViewerScene(slot, v, s);
00146 v->SetElementName("Viewer - 2D");
00147 s->SetElementName("Scene - 2D");
00148
00149 TEveProjectionManager* mng = new TEveProjectionManager();
00150 mng->SetProjection(t);
00151
00152 TEveProjectionAxes* axes = new TEveProjectionAxes(mng);
00153 s->AddElement(axes);
00154 TEveCalo2D* calo2d = (TEveCalo2D*) mng->ImportElements(calo3d);
00155 s->AddElement(calo2d);
00156
00157 v->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
00158
00159 gEve->AddToListTree(mng, kTRUE);
00160 gEve->AddToListTree(calo2d, kTRUE);
00161
00162 return calo2d;
00163 }
00164
00165
00166 void MakeViewerScene(TEveWindowSlot* slot, TEveViewer*& v, TEveScene*& s)
00167 {
00168
00169
00170 v = new TEveViewer("Viewer");
00171 v->SpawnGLViewer(gEve->GetEditor());
00172 slot->ReplaceWindow(v);
00173 gEve->GetViewers()->AddElement(v);
00174 s = gEve->SpawnNewScene("Scene");
00175 v->AddScene(s);
00176 }
00177
00178
00179 void add_jet(TEveElement* parent, const char* name,
00180 Float_t eta, Float_t phi,
00181 Float_t deta, Float_t dphi)
00182 {
00183 TEveJetCone* jet = new TEveJetCone(name, name);
00184 jet->SetMainTransparency(60);
00185 jet->SetLineColor(kRed);
00186 jet->SetCylinder(129 - 10, 268.36 - 10);
00187 jet->AddEllipticCone(eta, phi, deta, dphi);
00188 jet->SetPickable(kTRUE);
00189 parent->AddElement(jet);
00190 }