//////////////////////////////////////////////////////////////////// // // File: MetVariables.cc // Authors: Peter Onyisi // Description: High level analysis met variables // Created: 7/24/02 // // Revision: 0.1 // //////////////////////////////////////////////////////////////////// #include "BaBar/Experiment.hh" #include "AbsEnv/AbsEnv.hh" #include "MetObjects/CdfMet.hh" #include "Calor/PhysicsTowerDataMaker.hh" #include "CalorObjects/PhysicsTowerData.hh" #include "CalorObjects/PhysicsTowerParams.hh" #include "Met/NaiveEtCalculator.hh" #include "Calor/PhysicsTowerDataMaker.hh" #include "ErrorLogger_i/gERRLOG.hh" namespace MetVariables { CdfMet_ch metRecomputeWithNewZ(const double zvertex) { // Lifted from TopEventModule! CdfMet_ch met_hndl; AbsEvent* event = AbsEnv::theEvent(); // PhysicsTowerParams -- from CalData, using MetCalculator, with 0.1 GeV // tower threshold PhysicsTowerParams* ptp = new PhysicsTowerParams(0, 2, 0.1, zvertex); // Create new PhysicsTowerDataMaker PhysicsTowerDataMaker* ptdm = new PhysicsTowerDataMaker(); // Create new PhysicsTowerData PhysicsTowerData_ch ptd_hndl = ptdm->create(event, *ptp, "CorrectedMetPTD"); if(!ptd_hndl || ptd_hndl->begin() == ptd_hndl->end()){ ERRLOG(ELinfo, "Revertexing failed") << "Failed to revertex CdfMet because of empty tower list." << endmsg; if (met_hndl.is_null()) { CdfMet_h newmet(new CdfMet(zvertex,1)); met_hndl = newmet; } return met_hndl; } else { // Create a new CdfMet Object and fill it using PhysicsTowerData with zVertex CdfMet_h newmet(new CdfMet(zvertex,1)); NaiveEtCalculator metCalculator; bool status = metCalculator.calculateMet(newmet,ptd_hndl); if (!status) { ERRLOG(ELerror, "Revertexing failed") << "Could not calculate CdfMet with NaiveEtCalculator" << endmsg; } met_hndl = newmet; } delete ptp; delete ptdm; return met_hndl; } CdfMet_ch metRecomputeWithNewZ(float vertex[3], float slope[2]) { // Lifted from Stntuple! CdfMet_ch met_hndl; AbsEvent* event = AbsEnv::theEvent(); // PhysicsTowerParams -- from CalData, using MetCalculator, with 0.1 GeV // tower threshold PhysicsTowerParams* ptp = new PhysicsTowerParams(0, 2, 0.1, vertex, slope); // Create new PhysicsTowerDataMaker PhysicsTowerDataMaker* ptdm = new PhysicsTowerDataMaker(); // Create new PhysicsTowerData PhysicsTowerData_ch ptd_hndl = ptdm->create(event, *ptp, "CorrectedMetPTD"); if(!ptd_hndl || ptd_hndl->begin() == ptd_hndl->end()){ ERRLOG(ELinfo, "Revertexing failed") << "Failed to revertex CdfMet because of empty tower list." << endmsg; if (met_hndl.is_null()) { CdfMet_h newmet(new CdfMet(vertex[2],1)); met_hndl = newmet; } return met_hndl; } else { // Create a new CdfMet Object and fill it using PhysicsTowerData with zVertex CdfMet_h newmet(new CdfMet(vertex, slope, 1)); NaiveEtCalculator metCalculator; bool status = metCalculator.calculateMet(newmet,ptd_hndl); if (!status) { ERRLOG(ELerror, "Revertexing failed") << "Could not calculate CdfMet with NaiveEtCalculator" << endmsg; } met_hndl = newmet; } delete ptp; delete ptdm; return met_hndl; } }