Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "TH2.h"
00018 #include "TMath.h"
00019 #include "TEveTrackPropagator.h"
00020 #include "TEveCaloData.h"
00021 #include "Fireworks/Core/interface/fw3dlego_xbins.h"
00022
00023 #include "Fireworks/Core/interface/Context.h"
00024 #include "Fireworks/Core/interface/FWMagField.h"
00025 #include "Fireworks/Core/interface/FWBeamSpot.h"
00026 #include "Fireworks/Core/interface/CmsShowCommon.h"
00027
00028 using namespace fireworks;
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <boost/bind.hpp>
00038 const float Context::s_caloTransEta = 1.479;
00039 const float Context::s_caloTransAngle = 2*atan(exp(-s_caloTransEta));
00040
00041
00042 const float Context::s_caloZ = 290;
00043 const float Context::s_caloR = s_caloZ*tan(s_caloTransAngle);
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 const float Context::s_caloOffR = 10;
00056 const float Context::s_caloOffZ = s_caloOffR/tan(s_caloTransAngle);
00057
00058
00059
00060
00061
00062 Context::Context(FWModelChangeManager* iCM,
00063 FWSelectionManager* iSM,
00064 FWEventItemsManager* iEM,
00065 FWColorManager* iColorM,
00066 FWJobMetadataManager* iJMDM
00067 ) :
00068 m_changeManager(iCM),
00069 m_selectionManager(iSM),
00070 m_eventItemsManager(iEM),
00071 m_colorManager(iColorM),
00072 m_metadataManager(iJMDM),
00073 m_geom(0),
00074 m_propagator(0),
00075 m_trackerPropagator(0),
00076 m_muonPropagator(0),
00077 m_magField(0),
00078 m_beamSpot(0),
00079 m_commonPrefs(0),
00080 m_maxEt(1.f),
00081 m_maxEnergy(1.f),
00082 m_caloData(0),
00083 m_caloDataHF(0)
00084 {
00085 if (iColorM)
00086 m_commonPrefs = new CmsShowCommon(this);
00087 }
00088
00089
00090 Context::~Context()
00091 {
00092 delete m_commonPrefs;
00093 }
00094
00095 void
00096 Context::initEveElements()
00097 {
00098 m_magField = new FWMagField();
00099 m_beamSpot = new FWBeamSpot();
00100
00101
00102 float propagatorOffR = 5;
00103 float propagatorOffZ = propagatorOffR*caloZ1(false)/caloR1(false);
00104
00105
00106 m_propagator = new TEveTrackPropagator();
00107 m_propagator->SetMagFieldObj(m_magField, false);
00108 m_propagator->SetMaxR(caloR2()-propagatorOffR);
00109 m_propagator->SetMaxZ(caloZ2()-propagatorOffZ);
00110 m_propagator->SetDelta(0.01);
00111 m_propagator->SetProjTrackBreaking(m_commonPrefs->getProjTrackBreaking());
00112 m_propagator->SetRnrPTBMarkers(m_commonPrefs->getRnrPTBMarkers());
00113 m_propagator->IncDenyDestroy();
00114
00115 m_trackerPropagator = new TEveTrackPropagator();
00116 m_trackerPropagator->SetStepper( TEveTrackPropagator::kRungeKutta );
00117 m_trackerPropagator->SetMagFieldObj(m_magField, false);
00118 m_trackerPropagator->SetDelta(0.01);
00119 m_trackerPropagator->SetMaxR(caloR1()-propagatorOffR);
00120 m_trackerPropagator->SetMaxZ(caloZ2()-propagatorOffZ);
00121 m_trackerPropagator->SetProjTrackBreaking(m_commonPrefs->getProjTrackBreaking());
00122 m_trackerPropagator->SetRnrPTBMarkers(m_commonPrefs->getRnrPTBMarkers());
00123 m_trackerPropagator->IncDenyDestroy();
00124
00125 m_muonPropagator = new TEveTrackPropagator();
00126 m_muonPropagator->SetStepper( TEveTrackPropagator::kRungeKutta );
00127 m_muonPropagator->SetMagFieldObj(m_magField, false);
00128 m_muonPropagator->SetDelta(0.05);
00129 m_muonPropagator->SetMaxR(850.f);
00130 m_muonPropagator->SetMaxZ(1100.f);
00131 m_muonPropagator->SetProjTrackBreaking(m_commonPrefs->getProjTrackBreaking());
00132 m_muonPropagator->SetRnrPTBMarkers(m_commonPrefs->getRnrPTBMarkers());
00133 m_muonPropagator->IncDenyDestroy();
00134
00135
00136 {
00137 m_caloData = new TEveCaloDataHist();
00138 m_caloData->IncDenyDestroy();
00139
00140
00141
00142 m_caloData->SetWrapTwoPi(false);
00143
00144 Bool_t status = TH1::AddDirectoryStatus();
00145 TH1::AddDirectory(kFALSE);
00146 TH2F* dummy = new TH2F("background",
00147 "background",
00148 fw3dlego::xbins_n - 1, fw3dlego::xbins,
00149 72, -1*TMath::Pi(), TMath::Pi());
00150
00151 TH1::AddDirectory(status);
00152 Int_t sliceIndex = m_caloData->AddHistogram(dummy);
00153 (m_caloData)->RefSliceInfo(sliceIndex).Setup("background", 0., 0);
00154 }
00155
00156 {
00157 m_caloDataHF = new TEveCaloDataVec(1);
00158 m_caloDataHF->IncDenyDestroy();
00159 m_caloDataHF->SetWrapTwoPi(false);
00160 m_caloDataHF->RefSliceInfo(0).Setup("bg", 0.3, kRed);
00161 m_caloDataHF->SetEtaBins(new TAxis(fw3dlego::xbins_hf_n - 1, fw3dlego::xbins_hf));
00162 Double_t off = 10 * TMath::DegToRad();
00163 m_caloDataHF->SetPhiBins(new TAxis(36, -TMath::Pi() -off, TMath::Pi() -off));
00164 }
00165 }
00166
00167 void
00168 Context::deleteEveElements()
00169 {
00170
00171
00172
00173
00174 }
00175
00176
00177
00178 CmsShowCommon*
00179 Context::commonPrefs() const
00180 {
00181 return m_commonPrefs;
00182 }
00183
00184 void
00185 Context::voteMaxEtAndEnergy(float et, float energy) const
00186 {
00187 m_maxEt = TMath::Max(et , m_maxEt );
00188 m_maxEnergy = TMath::Max(energy, m_maxEnergy);
00189 }
00190
00191 void
00192 Context::resetMaxEtAndEnergy() const
00193 {
00194
00195
00196 m_maxEnergy = 1.f;
00197 m_maxEt = 1.f;
00198 }
00199
00200 float
00201 Context::getMaxEnergyInEvent(bool isEt) const
00202 {
00203 return isEt ? m_maxEt : m_maxEnergy;
00204 }
00205
00206
00207
00208
00209
00210 float Context::caloR1(bool offset)
00211 {
00212 return offset ? (s_caloR -offset) :s_caloR;
00213 }
00214
00215 float Context::caloR2(bool offset)
00216 {
00217
00218 return offset ? (s_caloR -offset) :s_caloR;
00219 }
00220 float Context::caloZ1(bool offset)
00221 {
00222 return offset ? (s_caloZ -offset) :s_caloZ;
00223 }
00224
00225 float Context::caloZ2(bool offset)
00226 {
00227 return offset ? (s_caloZ -offset) :s_caloZ;
00228 }
00229
00230 float Context::caloTransEta()
00231 {
00232 return s_caloTransEta;
00233 }
00234
00235 float Context::caloTransAngle()
00236 {
00237 return s_caloTransAngle;
00238 }
00239
00240 double Context::caloMaxEta()
00241 {
00242 return fw3dlego::xbins_hf[fw3dlego::xbins_hf_n -1];
00243 }