00001 #include "ForIA/D3PD/D3PDConverter.hh"
00002 #include "ForIA/D3PDTree/TreeFactory.hh"
00003 #include "ForIA/JetKey.hh"
00004 #include <fstream>
00005 #include <iostream>
00006 #include <cmath>
00007
00008
00009
00010 namespace ForIA{
00011
00012 using std::ifstream;
00013
00014 D3PDConverter::D3PDConverter(const string &txtFile):
00015 m_txtFile(txtFile), m_event(this){
00016
00017 }
00018
00019 D3PDConverter::D3PDConverter(const string &txtFile, const string &goodRunList):
00020 m_txtFile(txtFile), m_event(this), m_goodRunsList(goodRunList){
00021
00022 }
00023
00024 D3PDConverter::~D3PDConverter(){
00025 if(m_treeFactory) delete m_treeFactory;
00026 }
00027
00029 void D3PDConverter::initialise(){
00030
00031 ifstream input(m_txtFile.c_str(), ifstream::in);
00032
00033 char buf[500];
00034
00035 while(input.good()){
00036 input.getline(buf, 500);
00037 if(strcmp(buf, "") != 0){
00038 m_rootFiles.push_back(buf);
00039 }
00040 }
00041
00042 std::cout<<"Using "<<m_rootFiles.size()<<" root file";
00043 if(m_rootFiles.size() > 1) std::cout<<"s";
00044 std::cout<<std::endl;
00045
00046 m_treeFactory = new D3PDTree::TreeFactory(m_rootFiles);
00047
00048 m_clusterTree = m_treeFactory->createTree<D3PDTree::ClusterTree>();
00049 m_dbKeysTree = m_treeFactory->createTree<D3PDTree::DBKeysTree>();
00050 m_detectorErrorsTree = m_treeFactory->createTree<D3PDTree::DetectorErrorsTree>();
00051 m_etmissTree = m_treeFactory->createTree<D3PDTree::MetTree>();
00052 m_eventTree = m_treeFactory->createTree<D3PDTree::EventTree>();
00053 m_truthJetTree = m_treeFactory->createTree<D3PDTree::TruthJetTree>();
00054 m_trackTree = m_treeFactory->createTree<D3PDTree::TrackTree>();
00055 m_trackVtxTree = m_treeFactory->createTree<D3PDTree::TrackVertexAssociationTree>();
00056 m_trigConfTree = m_treeFactory->createTree<D3PDTree::TrigConfTree>();
00057 m_trigDecisionTree = m_treeFactory->createTree<D3PDTree::TrigDecisionTree>();
00058 m_truthTree = m_treeFactory->createTree<D3PDTree::TruthTree>();
00059 m_truthEnergyTree = m_treeFactory->createTree<D3PDTree::TruthEnergyTree>();
00060 m_truthMassTree = m_treeFactory->createTree<D3PDTree::TruthMassTree>();
00061 m_truthVertexTree = m_treeFactory->createTree<D3PDTree::TruthVertexTree>();
00062 m_vertexTree = m_treeFactory->createTree<D3PDTree::VertexTree>();
00063 m_l1TriggerTree = m_treeFactory->createTree<D3PDTree::L1TriggerTree>();
00064 m_l2SpacePointsTree = m_treeFactory->createTree<D3PDTree::L2SpacePointsTree>();
00065
00066 m_jetTrees = m_treeFactory->createAllTrees<D3PDTree::JetTree>();
00067
00068 return;
00069 }
00070
00072 bool D3PDConverter::nextEvent(){
00073 return m_treeFactory->nextEvent();
00074 }
00075
00076 void D3PDConverter::storeEvent(){
00077 m_treeFactory->storeEvent();
00078 return;
00079 }
00080
00082 const TrackVector &D3PDConverter::loadTracks(const Event *evt){
00083
00084 m_tracks.clear();
00085
00086 if(!m_trackTree || !m_treeFactory->checkTree(m_trackTree)){
00087 return m_tracks;
00088 }
00089
00090 map<int, vector<float> > assocData;
00091
00092 if(m_trackVtxTree && m_treeFactory->checkTree(m_trackVtxTree) && m_trackVtxTree->haveUnBiasedCoords()){
00093
00094 size_t nVertices = m_trackVtxTree->trackIndices->size();
00095 for(size_t ii=0; ii != nVertices; ++ii){
00096
00097 size_t nTracks = m_trackVtxTree->trackIndices->at(ii).size();
00098
00099 for(size_t jj = 0; jj != nTracks; ++jj){
00100
00101 size_t trkIndex = m_trackVtxTree->trackIndices->at(ii).at(jj);
00102
00103 float ar[4] = {m_trackVtxTree->d0->at(ii)[jj],
00104 m_trackVtxTree->z0->at(ii)[jj],
00105 m_trackVtxTree->theta->at(ii)[jj],
00106 m_trackVtxTree->phi->at(ii)[jj]};
00107 assocData[trkIndex]= vector<float>(ar, ar + 4);
00108
00109 }
00110 }
00111 }
00112
00113 for(int ii=0; ii != m_trackTree->n; ++ii){
00114
00115 TrackPtr track(new Track());
00116
00117 setVar(*track, m_eta, m_trackTree->eta->at(ii));
00118 setVar(*track, m_theta, m_trackTree->theta->at(ii));
00119
00120 setVar(*track, m_phi_wrt_pvtx, m_trackTree->phi_wrtPV->at(ii));
00121 setVar(*track, m_PT, m_trackTree->pt->at(ii));
00122 setVar(*track, m_d0_wrt_pvtx, m_trackTree->d0_wrtPV->at(ii));
00123 setVar(*track, m_z0_wrt_pvtx, m_trackTree->z0_wrtPV->at(ii));
00124 setVar(*track, m_nPix, m_trackTree->nPixHits->at(ii));
00125 setVar(*track, m_nSCT, m_trackTree->nSCTHits->at(ii));
00126 setVar(*track, m_nTRT, m_trackTree->nTRTHits->at(ii));
00127 setVar(*track, m_expectBLayer, m_trackTree->expectHitInBLayer->at(ii));
00128 setVar(*track, m_nBLayer, m_trackTree->nBLHits->at(ii));
00129 setVar(*track, m_chi2, m_trackTree->chi2->at(ii));
00130 setVar(*track, m_dof, m_trackTree->ndof->at(ii));
00131 setVar(*track, m_event, evt);
00132
00133 if(m_trackTree->haveSeedFinder()){
00134 setVar(*track, m_author, Track::TrackAuthor(m_trackTree->seedFinder->at(ii)));
00135 }
00136 setVar(*track, m_id, ii);
00137
00138 map<int, vector<float> >::const_iterator trkAssoc = assocData.find(ii);
00139
00140 if(trkAssoc != assocData.end()){
00141 setVar(*track, m_d0_wrt_tv, (trkAssoc->second)[0]);
00142 setVar(*track, m_z0_wrt_tv, (trkAssoc->second)[1]);
00143 setVar(*track, m_theta_wrt_tv,(trkAssoc->second)[2]);
00144 setVar(*track, m_phi_wrt_tv,(trkAssoc->second)[3]);
00145
00146 setVar(*track, m_haveTV, true);
00147 }
00148
00149 if(m_trackTree->haveThetaOrigins()){
00150 setVar(*track, m_haveThetaOrigins, true);
00151 setVar(*track, m_theta_wrt_bs, m_trackTree->theta_wrtBS->at(ii));
00152 setVar(*track, m_theta_wrt_pvtx, m_trackTree->theta_wrtPV->at(ii));
00153 }else{
00154 setVar(*track, m_haveThetaOrigins, false);
00155 }
00156
00157 if(m_trackTree->haveOrigins()){
00158 setVar(*track, m_phi_wrt_bs, m_trackTree->phi_wrtBS->at(ii));
00159 setVar(*track, m_d0, m_trackTree->d0->at(ii));
00160 setVar(*track, m_d0_wrt_bs, m_trackTree->d0_wrtBS->at(ii));
00161 setVar(*track, m_z0, m_trackTree->z0->at(ii));
00162 setVar(*track, m_z0_wrt_bs, m_trackTree->z0_wrtBS->at(ii));
00163 setVar(*track, m_phi, m_trackTree->phi->at(ii));
00164
00165
00166
00167 }
00168
00169 if(m_truthTree){
00170 setVar(*track, m_isMC, true);
00171 }else{
00172 setVar(*track, m_isMC, false);
00173 }
00174
00175 m_tracks.push_back(track);
00176 }
00177
00178
00179
00180 return m_tracks;
00181 }
00182
00184
00185 const ClusterVector &D3PDConverter::loadClusters(){
00186
00187 bool isMC = m_truthTree && m_treeFactory->checkTree(m_truthTree);
00188
00189
00190 m_clusters.clear();
00191
00192 if(!m_clusterTree || !m_treeFactory->checkTree(m_clusterTree)){
00193 return m_clusters;
00194 }
00195
00196 size_t n = 0;
00197 bool extraMaterial = false;
00198
00199 if(!extraMaterial) n = m_clusterTree->cl_had_n;
00200 else n = m_clusterTree->cl_n;
00201
00202
00203
00204 for(size_t ii=0; ii != n; ++ii){
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214 ClusterPtr cluster(new Cluster());
00215
00216
00217
00218 float ET_calib;
00219 float eta;
00220 float phi;
00221 float E_calib;
00222 float E_em;
00223 float E_had;
00224
00225 if(!extraMaterial){
00226
00227 ET_calib = m_clusterTree->cl_had_pt->at(ii);
00228 eta = m_clusterTree->cl_had_eta->at(ii);
00229 phi = m_clusterTree->cl_had_phi->at(ii);
00230 E_calib = ET_calib/sin( 2.*atan(exp(-1.*eta)));
00231 E_em = m_clusterTree->cl_had_E_em->at(ii);
00232 E_had = m_clusterTree->cl_had_E_had->at(ii);
00233
00234 } else {
00235
00236 ET_calib = m_clusterTree->cl_pt->at(ii);
00237 eta = m_clusterTree->cl_eta->at(ii);
00238 phi = m_clusterTree->cl_phi->at(ii);
00239 E_calib = ET_calib/sin( 2.*atan(exp(-1.*eta)));
00240 E_em = m_clusterTree->cl_E_em->at(ii);
00241 E_had = m_clusterTree->cl_E_had->at(ii);
00242
00243
00244 }
00245
00246 setVar(*cluster, m_clusIsMC, isMC );
00247
00248 setVar(*cluster, m_E_calib, E_calib );
00249
00250 setVar(*cluster, m_E_em, E_em);
00251 setVar(*cluster, m_E_had, E_had);
00252
00253 setVar(*cluster, m_ET, ET_calib);
00254
00255 setVar(*cluster, m_eta, eta);
00256 setVar(*cluster, m_phi, phi);
00257
00258
00259
00260
00261 if(m_clusterTree->hasCaloLayerEnergies()){
00262 setVar(*cluster, m_hasCaloLayerEnergies, true);
00263 setVar(*cluster, m_E_EMB1, m_clusterTree->cl_had_E_EMB1->at(ii));
00264 setVar(*cluster, m_E_EMB2, m_clusterTree->cl_had_E_EMB2->at(ii));
00265 setVar(*cluster, m_E_EMB3, m_clusterTree->cl_had_E_EMB3->at(ii));
00266 setVar(*cluster, m_E_EME1, m_clusterTree->cl_had_E_EME1->at(ii));
00267 setVar(*cluster, m_E_EME2, m_clusterTree->cl_had_E_EME2->at(ii));
00268 setVar(*cluster, m_E_EME3, m_clusterTree->cl_had_E_EME3->at(ii));
00269 setVar(*cluster, m_E_HEC0, m_clusterTree->cl_had_E_HEC0->at(ii));
00270 setVar(*cluster, m_E_HEC1, m_clusterTree->cl_had_E_HEC1->at(ii));
00271 setVar(*cluster, m_E_HEC2, m_clusterTree->cl_had_E_HEC2->at(ii));
00272 setVar(*cluster, m_E_HEC3, m_clusterTree->cl_had_E_HEC3->at(ii));
00273 setVar(*cluster, m_E_FCAL0, m_clusterTree->cl_had_E_FCAL0->at(ii));
00274 setVar(*cluster, m_E_FCAL1, m_clusterTree->cl_had_E_FCAL1->at(ii));
00275 setVar(*cluster, m_E_FCAL2, m_clusterTree->cl_had_E_FCAL2->at(ii));
00276 setVar(*cluster, m_E_PreSamplerB, m_clusterTree->cl_had_E_PreSamplerB->at(ii));
00277 setVar(*cluster, m_E_PreSamplerE, m_clusterTree->cl_had_E_PreSamplerE->at(ii));
00278 setVar(*cluster, m_E_TileBar0, m_clusterTree->cl_had_E_TileBar0->at(ii));
00279 setVar(*cluster, m_E_TileBar1, m_clusterTree->cl_had_E_TileBar1->at(ii));
00280 setVar(*cluster, m_E_TileBar2, m_clusterTree->cl_had_E_TileBar2->at(ii));
00281 setVar(*cluster, m_E_TileExt0, m_clusterTree->cl_had_E_TileExt0->at(ii));
00282 setVar(*cluster, m_E_TileExt1, m_clusterTree->cl_had_E_TileExt1->at(ii));
00283 setVar(*cluster, m_E_TileExt2, m_clusterTree->cl_had_E_TileExt2->at(ii));
00284 setVar(*cluster, m_E_TileGap1, m_clusterTree->cl_had_E_TileGap1->at(ii));
00285 setVar(*cluster, m_E_TileGap2, m_clusterTree->cl_had_E_TileGap2->at(ii));
00286 setVar(*cluster, m_E_TileGap3, m_clusterTree->cl_had_E_TileGap3->at(ii));
00287
00288 setVar(*cluster, m_phi_EMB1, m_clusterTree->cl_had_phi_EMB1->at(ii));
00289 setVar(*cluster, m_phi_EMB2, m_clusterTree->cl_had_phi_EMB2->at(ii));
00290 setVar(*cluster, m_phi_EMB3, m_clusterTree->cl_had_phi_EMB3->at(ii));
00291 setVar(*cluster, m_phi_EME1, m_clusterTree->cl_had_phi_EME1->at(ii));
00292 setVar(*cluster, m_phi_EME2, m_clusterTree->cl_had_phi_EME2->at(ii));
00293 setVar(*cluster, m_phi_EME3, m_clusterTree->cl_had_phi_EME3->at(ii));
00294 setVar(*cluster, m_phi_HEC0, m_clusterTree->cl_had_phi_HEC0->at(ii));
00295 setVar(*cluster, m_phi_HEC1, m_clusterTree->cl_had_phi_HEC1->at(ii));
00296 setVar(*cluster, m_phi_HEC2, m_clusterTree->cl_had_phi_HEC2->at(ii));
00297 setVar(*cluster, m_phi_HEC3, m_clusterTree->cl_had_phi_HEC3->at(ii));
00298 setVar(*cluster, m_phi_FCAL0, m_clusterTree->cl_had_phi_FCAL0->at(ii));
00299 setVar(*cluster, m_phi_FCAL1, m_clusterTree->cl_had_phi_FCAL1->at(ii));
00300 setVar(*cluster, m_phi_FCAL2, m_clusterTree->cl_had_phi_FCAL2->at(ii));
00301 setVar(*cluster, m_phi_PreSamplerB, m_clusterTree->cl_had_phi_PreSamplerB->at(ii));
00302 setVar(*cluster, m_phi_PreSamplerE, m_clusterTree->cl_had_phi_PreSamplerE->at(ii));
00303 setVar(*cluster, m_phi_TileBar0, m_clusterTree->cl_had_phi_TileBar0->at(ii));
00304 setVar(*cluster, m_phi_TileBar1, m_clusterTree->cl_had_phi_TileBar1->at(ii));
00305 setVar(*cluster, m_phi_TileBar2, m_clusterTree->cl_had_phi_TileBar2->at(ii));
00306 setVar(*cluster, m_phi_TileExt0, m_clusterTree->cl_had_phi_TileExt0->at(ii));
00307 setVar(*cluster, m_phi_TileExt1, m_clusterTree->cl_had_phi_TileExt1->at(ii));
00308 setVar(*cluster, m_phi_TileExt2, m_clusterTree->cl_had_phi_TileExt2->at(ii));
00309 setVar(*cluster, m_phi_TileGap1, m_clusterTree->cl_had_phi_TileGap1->at(ii));
00310 setVar(*cluster, m_phi_TileGap2, m_clusterTree->cl_had_phi_TileGap2->at(ii));
00311 setVar(*cluster, m_phi_TileGap3, m_clusterTree->cl_had_phi_TileGap3->at(ii));
00312
00313 setVar(*cluster, m_eta_EMB1, m_clusterTree->cl_had_eta_EMB1->at(ii));
00314 setVar(*cluster, m_eta_EMB2, m_clusterTree->cl_had_eta_EMB2->at(ii));
00315 setVar(*cluster, m_eta_EMB3, m_clusterTree->cl_had_eta_EMB3->at(ii));
00316 setVar(*cluster, m_eta_EME1, m_clusterTree->cl_had_eta_EME1->at(ii));
00317 setVar(*cluster, m_eta_EME2, m_clusterTree->cl_had_eta_EME2->at(ii));
00318 setVar(*cluster, m_eta_EME3, m_clusterTree->cl_had_eta_EME3->at(ii));
00319 setVar(*cluster, m_eta_HEC0, m_clusterTree->cl_had_eta_HEC0->at(ii));
00320 setVar(*cluster, m_eta_HEC1, m_clusterTree->cl_had_eta_HEC1->at(ii));
00321 setVar(*cluster, m_eta_HEC2, m_clusterTree->cl_had_eta_HEC2->at(ii));
00322 setVar(*cluster, m_eta_HEC3, m_clusterTree->cl_had_eta_HEC3->at(ii));
00323 setVar(*cluster, m_eta_FCAL0, m_clusterTree->cl_had_eta_FCAL0->at(ii));
00324 setVar(*cluster, m_eta_FCAL1, m_clusterTree->cl_had_eta_FCAL1->at(ii));
00325 setVar(*cluster, m_eta_FCAL2, m_clusterTree->cl_had_eta_FCAL2->at(ii));
00326 setVar(*cluster, m_eta_PreSamplerB, m_clusterTree->cl_had_eta_PreSamplerB->at(ii));
00327 setVar(*cluster, m_eta_PreSamplerE, m_clusterTree->cl_had_eta_PreSamplerE->at(ii));
00328 setVar(*cluster, m_eta_TileBar0, m_clusterTree->cl_had_eta_TileBar0->at(ii));
00329 setVar(*cluster, m_eta_TileBar1, m_clusterTree->cl_had_eta_TileBar1->at(ii));
00330 setVar(*cluster, m_eta_TileBar2, m_clusterTree->cl_had_eta_TileBar2->at(ii));
00331 setVar(*cluster, m_eta_TileExt0, m_clusterTree->cl_had_eta_TileExt0->at(ii));
00332 setVar(*cluster, m_eta_TileExt1, m_clusterTree->cl_had_eta_TileExt1->at(ii));
00333 setVar(*cluster, m_eta_TileExt2, m_clusterTree->cl_had_eta_TileExt2->at(ii));
00334 setVar(*cluster, m_eta_TileGap1, m_clusterTree->cl_had_eta_TileGap1->at(ii));
00335 setVar(*cluster, m_eta_TileGap2, m_clusterTree->cl_had_eta_TileGap2->at(ii));
00336 setVar(*cluster, m_eta_TileGap3, m_clusterTree->cl_had_eta_TileGap3->at(ii));
00337
00338 }else{
00339 setVar(*cluster, m_hasCaloLayerEnergies, false);
00340 }
00341
00342 if(m_clusterTree->hasClusterMoments()){
00343
00344 setVar(*cluster, m_hasClusterMoments, true);
00345 setVar(*cluster, m_cellmaxfrac, m_clusterTree->cl_had_cellmaxfrac->at(ii) );
00346 setVar(*cluster, m_centerlambda, m_clusterTree->cl_had_centerlambda->at(ii) );
00347 setVar(*cluster, m_firstEdens, m_clusterTree->cl_had_firstEdens->at(ii) );
00348 setVar(*cluster, m_lateral, m_clusterTree->cl_had_lateral->at(ii) );
00349 setVar(*cluster, m_longitudinal, m_clusterTree->cl_had_longitudinal->at(ii) );
00350 setVar(*cluster, m_secondR, m_clusterTree->cl_had_secondR->at(ii) );
00351 setVar(*cluster, m_secondlambda, m_clusterTree->cl_had_secondlambda->at(ii) );
00352 setVar(*cluster, m_time, m_clusterTree->cl_had_time->at(ii) );
00353 setVar(*cluster, m_deltaPhi, m_clusterTree->cl_had_deltaPhi->at(ii) );
00354 setVar(*cluster, m_deltaTheta, m_clusterTree->cl_had_deltaTheta->at(ii) );
00355 }else{
00356 setVar(*cluster, m_hasClusterMoments, false);
00357 }
00358
00359 m_clusters.push_back(cluster);
00360 }
00361
00362 return m_clusters;
00363 }
00365 const JetVector &D3PDConverter::loadJets(const JetKey &jetKey, const Event *evt){
00366
00367 boost::unordered_map<JetKey, JetVector>::iterator jetIt = m_jets.find(jetKey);
00368
00369 if(jetIt == m_jets.end()){
00370 jetIt = (m_jets.insert(std::make_pair(jetKey, JetVector()))).first;
00371 }
00372
00373 (jetIt->second).clear();
00374
00375 D3PDTree::JetTreePtr jetTree = m_usedJetTrees[jetKey];
00376
00377 if(!jetTree){
00378 for(vector<D3PDTree::JetTreePtr>::iterator tree = m_jetTrees.begin();
00379 tree != m_jetTrees.end(); ++tree){
00380 if((*tree)->matchesJetDefn(jetKey)){
00381 jetTree = *tree;
00382 m_usedJetTrees[jetKey] = *tree;
00383 }
00384 }
00385 }
00386
00387 if(!jetTree || !m_treeFactory->checkTree(jetTree)){
00388 return jetIt->second;
00389 }
00390
00391 JetKeyConstPtr key(new JetKey(jetKey));
00392
00393 for(int ii=0; ii != jetTree->jet_n; ++ii){
00394
00395 JetPtr jet(new Jet(key,
00396 jetTree->jet_E->at(ii), jetTree->jet_pt->at(ii),
00397 jetTree->jet_m->at(ii),
00398 jetTree->jet_eta->at(ii), jetTree->jet_phi->at(ii)));
00399
00400 setVar(*jet, m_hecFraction, jetTree->hecFraction->at(ii) );
00401 setVar(*jet, m_hecQuality, jetTree->hecQuality->at(ii) );
00402 setVar(*jet, m_larQuality, jetTree->larQuality->at(ii) );
00403 setVar(*jet, m_averageLARQualityFraction, jetTree->averageLArQualityFraction->at(ii));
00404 setVar(*jet, m_negEnergy, jetTree->negEnergy->at(ii) );
00405 setVar(*jet, m_trackPTSum, jetTree->trackPTSum->at(ii) );
00406 setVar(*jet, m_fracSamplingMax, jetTree->fracSamplingMax->at(ii));
00407 setVar(*jet, m_emScaleEta, jetTree->emScaleEta->at(ii) );
00408 setVar(*jet, m_emFrac, jetTree->emFrac->at(ii) );
00409
00410 setVar(*jet, m_tileGap3, jetTree->tileGap3->at(ii) );
00411 setVar(*jet, m_bchCorrCell, jetTree->bChCorrCell->at(ii) );
00412
00413 setVar(*jet, m_isBadLoose, jetTree->jet_isBadLoose->at(ii) );
00414 setVar(*jet, m_isBadMedium,jetTree->jet_isBadMedium->at(ii) );
00415 setVar(*jet, m_isBadTight, jetTree->jet_isBadTight->at(ii) );
00416
00417 setVar(*jet, m_event, evt);
00418 (jetIt->second).push_back(jet);
00419 }
00420 return jetIt->second;
00421 }
00423 const TruthJetVector &D3PDConverter::loadTruthJets(){
00424
00425 m_truthJets.clear();
00426
00427 if(!m_truthJetTree || !m_treeFactory->checkTree(m_truthJetTree)){
00428 return m_truthJets;
00429 }
00430
00431 for(int ii=0; ii != m_truthJetTree->truthJet_n; ++ii){
00432 TruthJetPtr truthJet(new TruthJet());
00433
00434
00435
00436 setVar(*truthJet, m_E, m_truthJetTree->truthJet_E->at(ii) );
00437 setVar(*truthJet, m_PT, m_truthJetTree->truthJet_pt->at(ii) );
00438 setVar(*truthJet, m_eta, m_truthJetTree->truthJet_eta->at(ii) );
00439 setVar(*truthJet, m_phi, m_truthJetTree->truthJet_phi->at(ii) );
00440
00441 m_truthJets.push_back(truthJet);
00442
00443 }
00444 return m_truthJets;
00445 }
00447 EtMissPtr D3PDConverter::loadEtMiss(){
00448
00449 EtMiss *met = new EtMiss();
00450
00451 if(!m_etmissTree || !m_treeFactory->checkTree(m_etmissTree)){
00452 return EtMissPtr(met);
00453 }
00454
00455 setVar(*met, m_nocalSumEt, m_etmissTree->MET_Topo_sumet);
00456 setVar(*met, m_nocalMet, m_etmissTree->MET_Topo_et);
00457 setVar(*met, m_nocalMetx, m_etmissTree->MET_Topo_etx);
00458 setVar(*met, m_nocalMety, m_etmissTree->MET_Topo_ety);
00459
00460 setVar(*met, m_calibSumEt, m_etmissTree->MET_LocHadTopo_sumet);
00461 setVar(*met, m_calibMet, m_etmissTree->MET_LocHadTopo_et);
00462 setVar(*met, m_calibMetx, m_etmissTree->MET_LocHadTopo_etx);
00463 setVar(*met, m_calibMety, m_etmissTree->MET_LocHadTopo_ety);
00464
00465 setVar(*met, m_intTruthSumEt, m_etmissTree->MET_Truth_Int_sumet);
00466 setVar(*met, m_intTruthMet, m_etmissTree->MET_Truth_Int_et);
00467 setVar(*met, m_intTruthMetx, m_etmissTree->MET_Truth_Int_etx);
00468 setVar(*met, m_intTruthMety, m_etmissTree->MET_Truth_Int_ety);
00469
00470 setVar(*met, m_ninTruthSumEt, m_etmissTree->MET_Truth_NonInt_sumet);
00471 setVar(*met, m_ninTruthMet, m_etmissTree->MET_Truth_NonInt_et);
00472 setVar(*met, m_ninTruthMetx, m_etmissTree->MET_Truth_NonInt_etx);
00473 setVar(*met, m_ninTruthMety, m_etmissTree->MET_Truth_NonInt_ety);
00474
00475 return EtMissPtr(met);
00476
00477 }
00478
00480 const VertexVector &D3PDConverter::loadVertices(const Event *evt){
00481
00482 m_vertices.clear();
00483
00484 if(!m_vertexTree || !m_treeFactory->checkTree(m_vertexTree)) {
00485 return m_vertices;
00486 }
00487
00488 for(int ii=0; ii != m_vertexTree->n; ++ii){
00489 VertexPtr vertex(new Vertex());
00490 setVar(*vertex, m_x, m_vertexTree->x->at(ii));
00491 setVar(*vertex, m_y, m_vertexTree->y->at(ii));
00492 setVar(*vertex, m_z, m_vertexTree->z->at(ii));
00493 setVar(*vertex, m_nTracks, m_vertexTree->nTracks->at(ii));
00494 setVar(*vertex, m_type, Vertex::VertexType(m_vertexTree->type->at(ii)));
00495
00496 if(m_trackVtxTree && m_treeFactory->checkTree(m_trackVtxTree)){
00497 setVar(*vertex, m_haveTrackIDs, true);
00498 setVar(*vertex, m_event, evt);
00499 setVar(*vertex, m_trackIDs, m_trackVtxTree->trackIndices->at(ii));
00500 }
00501
00502 m_vertices.push_back(vertex);
00503 }
00504
00505 return m_vertices;
00506 }
00507
00509 TriggerDecisionPtr D3PDConverter::loadTriggerDecision(){
00510
00511 TriggerDecision *td = new TriggerDecision();
00512
00513 if(!m_trigDecisionTree || !m_treeFactory->checkTree(m_trigDecisionTree)){
00514 return TriggerDecisionPtr(td);
00515 }
00516
00517 setVar(*td, m_ctpBits, m_trigDecisionTree->L1_TAV);
00518 setVar(*td, m_efPassedPhysics, m_trigDecisionTree->EF_passedPhysics);
00519 setVar(*td, m_l2PassedPhysics, m_trigDecisionTree->L2_passedPhysics);
00520
00521 return TriggerDecisionPtr(td);
00522 }
00523
00525 L1TriggerBitPtr D3PDConverter::loadL1Trigger(){
00526 L1TriggerBit * l1 = new L1TriggerBit();
00527
00528
00529 if(!m_l1TriggerTree || !m_treeFactory->checkTree(m_l1TriggerTree)){
00530
00531 return L1TriggerBitPtr(l1);
00532 }
00533
00534 setVar(*l1, m_lvl1aBC, m_l1TriggerTree->RDO_lvl1aBC);
00535 setVar(*l1, m_rdo_TAV, m_l1TriggerTree->RDO_tav);
00536
00537 return L1TriggerBitPtr(l1);
00538 }
00539
00541 DetectorErrorsConstPtr D3PDConverter::loadDetectorErrors(){
00542
00543 if(!m_detectorErrorsTree || !m_treeFactory->checkTree(m_detectorErrorsTree)){
00544 return DetectorErrorsConstPtr((DetectorErrors*)0);
00545 }
00546
00547 DetectorErrorsConstPtr ers
00548 (new DetectorErrors(m_detectorErrorsTree->pixelError,
00549 m_detectorErrorsTree->sctError,
00550 m_detectorErrorsTree->trtError,
00551 m_detectorErrorsTree->larError,
00552 m_detectorErrorsTree->tileError,
00553 m_detectorErrorsTree->muonError,
00554 m_detectorErrorsTree->fwdError));
00555
00556 return ers;
00557 }
00558
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00588 L2SpacePointsConstPtr D3PDConverter::loadL2SpacePoints(){
00589 L2SpacePoints * l2sp = new L2SpacePoints();
00590
00591 if(!m_l2SpacePointsTree || !m_treeFactory->checkTree(m_l2SpacePointsTree)){
00592 return L2SpacePointsConstPtr(l2sp);
00593 }
00594
00595 setVar(*l2sp, m_sctEndCapA, m_l2SpacePointsTree->sctSpEndCapA);
00596 setVar(*l2sp, m_sctEndCapC, m_l2SpacePointsTree->sctSpEndCapC);
00597 setVar(*l2sp, m_sctBarrel, m_l2SpacePointsTree->sctSpBarrel);
00598
00599 return L2SpacePointsConstPtr(l2sp);
00600 }
00601
00603 const TriggerConfiguration &D3PDConverter::loadTriggerConfiguration(){
00604
00605 if(!m_dbKeysTree || !m_treeFactory->checkTree(m_dbKeysTree)){
00606 m_trigConfiguration.clear();
00607 return m_trigConfiguration;
00608 }
00609
00610 setVar(m_trigConfiguration, m_smk, m_dbKeysTree->DB_SMK);
00611 setVar(m_trigConfiguration, m_l1PSK, m_dbKeysTree->DB_L1PSK);
00612 setVar(m_trigConfiguration, m_hltPSK, m_dbKeysTree->DB_HLTPSK);
00613
00614 if(!m_trigConfTree){
00615
00616 setVar(m_trigConfiguration, m_status, TriggerConfiguration::EMPTY);
00617 return m_trigConfiguration;
00618 }
00619
00620 bool changed = m_trigConfTree->setKeys(m_dbKeysTree->DB_SMK, m_dbKeysTree->DB_L1PSK, m_dbKeysTree->DB_HLTPSK);
00621
00622 if(!m_treeFactory->checkTree(m_trigConfTree)){
00623 setVar(m_trigConfiguration, m_status, TriggerConfiguration::EMPTY);
00624 return m_trigConfiguration;
00625 }
00626
00627 if(!changed) return m_trigConfiguration;
00628
00629 std::cout<<"Filling m_trigConfiguration"<<std::endl;
00630
00631 m_trigConfiguration.resetChainNames();
00632
00633 setVar(m_trigConfiguration, m_l1Names, *(m_trigConfTree->lvl1NameMap));
00634 setVar(m_trigConfiguration, m_hltNames, *(m_trigConfTree->hltNameMap));
00635 setVar(m_trigConfiguration, m_hltPrescales, *(m_trigConfTree->hltPrescaleMap));
00636 setVar(m_trigConfiguration, m_l1Prescales, *(m_trigConfTree->lvl1PrescaleMap));
00637
00638 setVar(m_trigConfiguration, m_lowerChainNames, *(m_trigConfTree->hltLowerChainName));
00639 setVar(m_trigConfiguration, m_status, TriggerConfiguration::FILLED);
00640
00641 return m_trigConfiguration;
00642 }
00643
00645 const TruthParticleVector &D3PDConverter::loadTruthParticles(){
00646 m_truthParticles.clear();
00647
00648 if(!m_truthTree || !m_treeFactory->checkTree(m_truthTree)){
00649 return m_truthParticles;
00650 }
00651
00652 for(int ii=0; ii!= m_truthTree->n; ++ii){
00653 TruthParticlePtr particle(new TruthParticle());
00654 setVar(*particle, m_pdg, m_truthTree->pdg->at(ii));
00655 setVar(*particle, m_charge, m_truthTree->charge->at(ii));
00656 setVar(*particle, m_barcode, m_truthTree->barcode->at(ii));
00657 setVar(*particle, m_status, m_truthTree->status->at(ii));
00658
00659 setVar(*particle, m_eta, m_truthTree->gen_eta->at(ii));
00660 setVar(*particle, m_haveEta, true);
00661 setVar(*particle, m_phi, m_truthTree->gen_phi->at(ii));
00662 setVar(*particle, m_pt, m_truthTree->gen_pt->at(ii));
00663
00664 if(m_truthEnergyTree && m_treeFactory->checkTree(m_truthEnergyTree)){
00665 setVar(*particle, m_e, m_truthEnergyTree->gen_energy->at(ii));
00666 setVar(*particle, m_motherPdg, m_truthEnergyTree->mother_pdg->at(ii));
00667 setVar(*particle, m_haveE, true);
00668 setVar(*particle, m_haveMotherPdgId, true);
00669 }
00670
00671 if(m_truthMassTree && m_treeFactory->checkTree(m_truthMassTree)){
00672 setVar(*particle, m_mass, m_truthMassTree->gen_mass->at(ii));
00673 setVar(*particle, m_haveMass, true);
00674 }
00675
00676 m_truthParticles.push_back(particle);
00677 }
00678
00679 return m_truthParticles;
00680 }
00681
00683 const VertexVector &D3PDConverter::loadTruthVertices(){
00684 m_truthVertices.clear();
00685
00686 if(!m_truthVertexTree || !m_treeFactory->checkTree(m_truthVertexTree)){
00687 return m_truthVertices;
00688 }
00689
00690 for(int ii=0; ii != m_truthVertexTree->vx_n; ++ii){
00691 VertexPtr vertex(new Vertex());
00692 setVar(*vertex, m_x, m_truthVertexTree->vx_x->at(ii));
00693 setVar(*vertex, m_y, m_truthVertexTree->vx_y->at(ii));
00694 setVar(*vertex, m_z, m_truthVertexTree->vx_z->at(ii));
00695 setVar(*vertex, m_type, Vertex::TRUTH);
00696
00697 m_truthVertices.push_back(vertex);
00698 }
00699
00700
00701 return m_truthVertices;
00702 }
00703
00705 const Event &D3PDConverter::loadEvent(){
00706
00707 m_event.clear();
00708
00709 if(!m_eventTree || !m_treeFactory->checkTree(m_eventTree)){
00710 return m_event;
00711 }
00712
00713 setVar(m_event, m_runNumber, m_eventTree->RunNumber);
00714 setVar(m_event, m_eventNumber, m_eventTree->EventNumber);
00715 setVar(m_event, m_lumiBlock, m_eventTree->lbn);
00716 setVar(m_event, m_weight, 1.0);
00717
00718 if(m_goodRunsList.isEnabled() && !m_truthTree){
00719 setVar(m_event, m_goodRun, m_goodRunsList.checkRun(m_event));
00720 setVar(m_event, m_goodLumiBlock, m_goodRunsList.checkLBN(m_event));
00721 }
00722
00723
00724
00725
00726 return m_event;
00727 }
00728
00729 }