CMS 3D CMS Logo

Public Member Functions | Private Types | Private Member Functions | Private Attributes

DTTTrigOffsetCalibration Class Reference

#include <DTTTrigOffsetCalibration.h>

Inheritance diagram for DTTTrigOffsetCalibration:
edm::EDAnalyzer

List of all members.

Public Member Functions

void analyze (const edm::Event &event, const edm::EventSetup &eventSetup)
void beginRun (const edm::Run &run, const edm::EventSetup &setup)
 DTTTrigOffsetCalibration (const edm::ParameterSet &pset)
void endJob ()
virtual ~DTTTrigOffsetCalibration ()

Private Types

typedef std::map< DTChamberId,
std::vector< TH1F * > > 
ChamberHistosMap

Private Member Functions

void bookHistos (DTChamberId)

Private Attributes

std::string dbLabel_
bool doTTrigCorrection_
TFile * rootFile_
DTSegmentSelector select_
std::string theCalibChamber_
edm::InputTag theRecHits4DLabel_
ChamberHistosMap theT0SegHistoMap_
const DTTtrigtTrigMap_

Detailed Description

No description available.

Date:
2010/11/16 19:06:59
Revision:
1.4
Author:
A. Vilela Pereira

Definition at line 29 of file DTTTrigOffsetCalibration.h.


Member Typedef Documentation

typedef std::map<DTChamberId, std::vector<TH1F*> > DTTTrigOffsetCalibration::ChamberHistosMap [private]

Definition at line 41 of file DTTTrigOffsetCalibration.h.


Constructor & Destructor Documentation

DTTTrigOffsetCalibration::DTTTrigOffsetCalibration ( const edm::ParameterSet pset)

Definition at line 39 of file DTTTrigOffsetCalibration.cc.

References edm::ParameterSet::getUntrackedParameter(), rootFile_, and dtTPAnalyzer_cfg::rootFileName.

                                                                          :
  select_(pset),
  theRecHits4DLabel_(pset.getParameter<InputTag>("recHits4DLabel")),
  doTTrigCorrection_(pset.getUntrackedParameter<bool>("doT0SegCorrection", false)),
  theCalibChamber_(pset.getUntrackedParameter<string>("calibChamber", "All")),
  dbLabel_(pset.getUntrackedParameter<string>("dbLabel", "")) {

  LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration] Constructor called!";

  // the root file which will contain the histos
  string rootFileName = pset.getUntrackedParameter<string>("rootFileName","DTT0SegHistos.root");
  rootFile_ = new TFile(rootFileName.c_str(), "RECREATE");
  rootFile_->cd();
}
DTTTrigOffsetCalibration::~DTTTrigOffsetCalibration ( ) [virtual]

Definition at line 63 of file DTTTrigOffsetCalibration.cc.

References rootFile_.

                                                   {
  rootFile_->Close();
  LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration] Destructor called!";
}

Member Function Documentation

void DTTTrigOffsetCalibration::analyze ( const edm::Event event,
const edm::EventSetup eventSetup 
) [virtual]

Implements edm::EDAnalyzer.

Definition at line 68 of file DTTTrigOffsetCalibration.cc.

References bookHistos(), DTChamberId, HcalObjRepresent::Fill(), edm::EventSetup::get(), LogTrace, rootFile_, select_, theCalibChamber_, theRecHits4DLabel_, theT0SegHistoMap_, and GeomDet::toGlobal().

                                                                                        {
  rootFile_->cd();
  DTChamberId chosenChamberId;

  if(theCalibChamber_ != "All") {
    stringstream linestr;
    int selWheel, selStation, selSector;
    linestr << theCalibChamber_;
    linestr >> selWheel >> selStation >> selSector;
    chosenChamberId = DTChamberId(selWheel, selStation, selSector);
    LogVerbatim("Calibration") << " chosen chamber " << chosenChamberId << endl;
  }

  // Get the DT Geometry
  ESHandle<DTGeometry> dtGeom;
  eventSetup.get<MuonGeometryRecord>().get(dtGeom);

  // Get the rechit collection from the event
  Handle<DTRecSegment4DCollection> all4DSegments;
  event.getByLabel(theRecHits4DLabel_, all4DSegments); 

  // Loop over segments by chamber
  DTRecSegment4DCollection::id_iterator chamberIdIt;
  for(chamberIdIt = all4DSegments->id_begin(); chamberIdIt != all4DSegments->id_end(); ++chamberIdIt){

    // Get the chamber from the setup
    const DTChamber* chamber = dtGeom->chamber(*chamberIdIt);
    LogTrace("Calibration") << "Chamber Id: " << *chamberIdIt;

    // Book histos
    if(theT0SegHistoMap_.find(*chamberIdIt) == theT0SegHistoMap_.end()){
      bookHistos(*chamberIdIt);
    }
   
    // Calibrate just the chosen chamber/s    
    if((theCalibChamber_ != "All") && ((*chamberIdIt) != chosenChamberId)) continue;

    // Get the range for the corresponding ChamberId
    DTRecSegment4DCollection::range range = all4DSegments->get((*chamberIdIt));

    // Loop over the rechits of this DetUnit
    for(DTRecSegment4DCollection::const_iterator segment  = range.first;
                                                 segment != range.second; ++segment){

      LogTrace("Calibration") << "Segment local pos (in chamber RF): " << (*segment).localPosition()
                              << "\nSegment global pos: " << chamber->toGlobal((*segment).localPosition());
      
      if( !select_(*segment, event, eventSetup) ) continue;

      // Fill t0-seg values
      if( (*segment).hasPhi() ) {
        //if( segment->phiSegment()->ist0Valid() ){ 
        if( (segment->phiSegment()->t0()) != 0.00 ){
          (theT0SegHistoMap_[*chamberIdIt])[0]->Fill(segment->phiSegment()->t0());
        }
      }
      if( (*segment).hasZed() ){
        //if( segment->zSegment()->ist0Valid() ){ 
        if( (segment->zSegment()->t0()) != 0.00 ){
          (theT0SegHistoMap_[*chamberIdIt])[1]->Fill(segment->zSegment()->t0());
        }
      }
    } // DTRecSegment4DCollection::const_iterator segment
  } // DTRecSegment4DCollection::id_iterator chamberIdIt
} // DTTTrigOffsetCalibration::analyze
void DTTTrigOffsetCalibration::beginRun ( const edm::Run run,
const edm::EventSetup setup 
) [virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 54 of file DTTTrigOffsetCalibration.cc.

References dbLabel_, doTTrigCorrection_, edm::EventSetup::get(), and tTrigMap_.

                                                                                     {
  if(doTTrigCorrection_){
    ESHandle<DTTtrig> tTrig;
    setup.get<DTTtrigRcd>().get(dbLabel_,tTrig);
    tTrigMap_ = &*tTrig;
    LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration]: TTrig version: " << tTrig->version() << endl; 
  }
}
void DTTTrigOffsetCalibration::bookHistos ( DTChamberId  chId) [private]

Definition at line 181 of file DTTTrigOffsetCalibration.cc.

References mergeVDriftHistosByStation::histos, LogTrace, DTChamberId::sector(), relativeConstraints::station, DTChamberId::station(), theT0SegHistoMap_, and DTChamberId::wheel().

Referenced by analyze().

                                                          {

  LogTrace("Calibration") << "   Booking histos for Chamber: " << chId;

  // Compose the chamber name
  stringstream wheel; wheel << chId.wheel();
  stringstream station; station << chId.station();
  stringstream sector; sector << chId.sector();

  string chHistoName =
    "_W" + wheel.str() +
    "_St" + station.str() +
    "_Sec" + sector.str();

  /*// Define the step
  stringstream Step; Step << step;

  string chHistoName =
    "_STEP" + Step.str() +
    "_W" + wheel.str() +
    "_St" + station.str() +
    "_Sec" + sector.str();

  theDbe->setCurrentFolder("DT/DTCalibValidation/Wheel" + wheel.str() +
                           "/Station" + station.str() +
                           "/Sector" + sector.str());
  // Create the monitor elements
  vector<MonitorElement *> histos;
  // Note hte order matters
  histos.push_back(theDbe->book1D("hRPhiSegT0"+chHistoName, "t0 from Phi segments", 200, -25., 25.));
  histos.push_back(theDbe->book1D("hRZSegT0"+chHistoName, "t0 from Z segments", 200, -25., 25.));*/

  vector<TH1F*> histos;
  // Note the order matters
  histos.push_back(new TH1F(("hRPhiSegT0"+chHistoName).c_str(), "t0 from Phi segments", 500, -60., 60.));
  if(chId.station() != 4) histos.push_back(new TH1F(("hRZSegT0"+chHistoName).c_str(), "t0 from Z segments", 500, -60., 60.));

  theT0SegHistoMap_[chId] = histos;
}
void DTTTrigOffsetCalibration::endJob ( void  ) [virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 134 of file DTTTrigOffsetCalibration.cc.

References doTTrigCorrection_, DTSuperLayerId, DTTtrig::get(), DTTimeUnits::ns, rootFile_, DTTtrig::set(), DTChamberId::station(), theT0SegHistoMap_, tTrigMap_, and DTCalibDBUtils::writeToDB().

                                      {
  rootFile_->cd();
  
  LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration] Writing histos to file!" << endl;

  for(ChamberHistosMap::const_iterator itChHistos = theT0SegHistoMap_.begin(); itChHistos != theT0SegHistoMap_.end(); ++itChHistos){
    for(vector<TH1F*>::const_iterator itHist = (*itChHistos).second.begin();
                                      itHist != (*itChHistos).second.end(); ++itHist) (*itHist)->Write();
  }

  if(doTTrigCorrection_){
    // Create the object to be written to DB
    DTTtrig* tTrig = new DTTtrig();

    for(ChamberHistosMap::const_iterator itChHistos = theT0SegHistoMap_.begin(); itChHistos != theT0SegHistoMap_.end(); ++itChHistos){
      DTChamberId chId = itChHistos->first;
      // Get SuperLayerId's for each ChamberId
      vector<DTSuperLayerId> slIds;
      slIds.push_back(DTSuperLayerId(chId,1));
      slIds.push_back(DTSuperLayerId(chId,3));
      if(chId.station() != 4) slIds.push_back(DTSuperLayerId(chId,2));

      for(vector<DTSuperLayerId>::const_iterator itSl = slIds.begin(); itSl != slIds.end(); ++itSl){      
        // Get old values from DB
        float ttrigMean = 0;
        float ttrigSigma = 0;
        float kFactor = 0;
        tTrigMap_->get(*itSl,ttrigMean,ttrigSigma,kFactor,DTTimeUnits::ns);
        //FIXME: verify if values make sense
        // Set new values
        float ttrigMeanNew = ttrigMean;
        float ttrigSigmaNew = ttrigSigma;
        float t0SegMean = (itSl->superLayer() != 2)?itChHistos->second[0]->GetMean():itChHistos->second[1]->GetMean();

        float kFactorNew = (kFactor*ttrigSigma+t0SegMean)/ttrigSigma;

        tTrig->set(*itSl,ttrigMeanNew,ttrigSigmaNew,kFactorNew,DTTimeUnits::ns);
      }
    }
    LogVerbatim("Calibration")<< "[DTTTrigOffsetCalibration] Writing ttrig object to DB!" << endl;
    // Write the object to DB
    string tTrigRecord = "DTTtrigRcd";
    DTCalibDBUtils::writeToDB(tTrigRecord, tTrig);
  } 
}

Member Data Documentation

std::string DTTTrigOffsetCalibration::dbLabel_ [private]

Definition at line 49 of file DTTTrigOffsetCalibration.h.

Referenced by beginRun().

Definition at line 47 of file DTTTrigOffsetCalibration.h.

Referenced by beginRun(), and endJob().

Definition at line 44 of file DTTTrigOffsetCalibration.h.

Referenced by analyze().

Definition at line 48 of file DTTTrigOffsetCalibration.h.

Referenced by analyze().

Definition at line 46 of file DTTTrigOffsetCalibration.h.

Referenced by analyze().

Definition at line 53 of file DTTTrigOffsetCalibration.h.

Referenced by analyze(), bookHistos(), and endJob().

Definition at line 52 of file DTTTrigOffsetCalibration.h.

Referenced by beginRun(), and endJob().