CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Private Attributes

DTAlbertoBenvenutiTask Class Reference

#include <DTAlbertoBenvenutiTask.h>

Inheritance diagram for DTAlbertoBenvenutiTask:
edm::EDAnalyzer

List of all members.

Public Member Functions

 DTAlbertoBenvenutiTask (const edm::ParameterSet &ps)
 Constructor.
virtual ~DTAlbertoBenvenutiTask ()
 Destructor.

Protected Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c)
 Analyze.
void beginJob ()
 BeginJob.
void beginRun (const edm::Run &, const edm::EventSetup &)
void bookHistos (const DTWireId dtWire)
 Book the ME.
void endJob ()
 Endjob.

Private Attributes

bool debug
float kFactor
edm::Handle< LTCDigiCollectionltcdigis
int maxTDCHits
edm::ESHandle< DTGeometrymuonGeom
int nevents
std::string outputFile
edm::ParameterSet parameters
edm::ESHandle< DTT0t0Map
std::map< DTWireId, TH1F * > TBMap
int tMax
 no needs to be precise. Value from PSets will always be used
float tTrig
 tTrig from the DB
edm::ESHandle< DTTtrigtTrigMap
float tTrigRMS

Detailed Description

Definition at line 39 of file DTAlbertoBenvenutiTask.h.


Constructor & Destructor Documentation

DTAlbertoBenvenutiTask::DTAlbertoBenvenutiTask ( const edm::ParameterSet ps)

Constructor.

Definition at line 49 of file DTAlbertoBenvenutiTask.cc.

References gather_cfg::cout, debug, edm::ParameterSet::getUntrackedParameter(), download_sqlite_cfg::outputFile, and Parameters::parameters.

                                                                       {
  
  debug = ps.getUntrackedParameter<bool>("debug", false);
  if(debug)
    cout<<"[DTAlbertoBenvenutiTask]: Constructor"<<endl;

  outputFile = ps.getUntrackedParameter<string>("outputFile", "DTDigiSources.root");
  maxTDCHits = ps.getUntrackedParameter<int>("maxTDCHits",1000);
  
  // tMax (not yet from the DB)
  tMax = parameters.getParameter<int>("defaultTmax");

  parameters = ps; 

}
DTAlbertoBenvenutiTask::~DTAlbertoBenvenutiTask ( ) [virtual]

Destructor.

Definition at line 66 of file DTAlbertoBenvenutiTask.cc.

References gather_cfg::cout, debug, and nevents.

                                               {

  if(debug)
    cout << "DTAlbertoBenvenutiTask: analyzed " << nevents << " events" << endl;

}

Member Function Documentation

void DTAlbertoBenvenutiTask::analyze ( const edm::Event e,
const edm::EventSetup c 
) [protected, virtual]

Analyze.

Implements edm::EDAnalyzer.

Definition at line 231 of file DTAlbertoBenvenutiTask.cc.

References bookHistos(), DTTimeUnits::counts, debug, edm::EventSetup::get(), edm::Event::getByLabel(), edm::Event::getByType(), nevents, Parameters::parameters, edm::second(), and crabStatusFromReport::statusMap.

                                                                             {
  
  nevents++;
  if (nevents%1000 == 0 && debug) {}
  
  edm::Handle<DTDigiCollection> dtdigis;
  e.getByLabel("dtunpacker", dtdigis);

  if ( !parameters.getUntrackedParameter<bool>("localrun", true) ) e.getByType(ltcdigis);

  bool checkNoisyChannels = parameters.getUntrackedParameter<bool>("checkNoisyChannels",false);
  ESHandle<DTStatusFlag> statusMap;
  if(checkNoisyChannels) {
    // Get the map of noisy channels
    c.get<DTStatusFlagRcd>().get(statusMap);
  }

  int tdcCount = 0;
  DTDigiCollection::DigiRangeIterator dtLayerId_It;
  for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); ++dtLayerId_It){
    for (DTDigiCollection::const_iterator digiIt = ((*dtLayerId_It).second).first;
         digiIt!=((*dtLayerId_It).second).second; ++digiIt){
      tdcCount++;
    }
  }

  bool isSyncNoisy = false;
  if (tdcCount > maxTDCHits) isSyncNoisy = true;
  
  for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); ++dtLayerId_It){
    for (DTDigiCollection::const_iterator digiIt = ((*dtLayerId_It).second).first;
         digiIt!=((*dtLayerId_It).second).second; ++digiIt){
      
      bool isNoisy = false;
      bool isFEMasked = false;
      bool isTDCMasked = false;
      bool isTrigMask = false;
      bool isDead = false;
      bool isNohv = false;
      const DTWireId wireId(((*dtLayerId_It).first), (*digiIt).wire());
      if(checkNoisyChannels) {
        statusMap->cellStatus(wireId, isNoisy, isFEMasked, isTDCMasked, isTrigMask, isDead, isNohv);
      }      
 
      // for clearness..
//      const  DTSuperLayerId dtSLId = ((*dtLayerId_It).first).superlayerId();
//       uint32_t indexSL = dtSLId.rawId();
//      const  DTChamberId dtChId = dtSLId.chamberId(); 
//       uint32_t indexCh = dtChId.rawId();
//       int layer_number=((*dtLayerId_It).first).layer();
//       int superlayer_number=dtSLId.superlayer();
//      const  DTLayerId dtLId = (*dtLayerId_It).first;
//       uint32_t indexL = dtLId.rawId();
      
      float t0; float t0RMS;
      int tdcTime = (*digiIt).countsTDC();

      if (parameters.getParameter<bool>("performPerWireT0Calibration")) {
        const DTWireId dtWireId(((*dtLayerId_It).first), (*digiIt).wire());
        t0Map->get(dtWireId, t0, t0RMS, DTTimeUnits::counts) ;
        tdcTime += int(round(t0));
      }
       
      // avoid to fill TB with noise
      if ((!isNoisy ) && (!isSyncNoisy)) {
        // TimeBoxes per wire
        if (TBMap.find(wireId) == TBMap.end()){
          bookHistos(wireId);
          TBMap[wireId]->Fill(tdcTime);
        }
        else
          TBMap[wireId]->Fill(tdcTime);
      }
    }
  }
}
void DTAlbertoBenvenutiTask::beginJob ( void  ) [protected, virtual]

BeginJob.

Reimplemented from edm::EDAnalyzer.

Definition at line 131 of file DTAlbertoBenvenutiTask.cc.

References gather_cfg::cout, debug, and nevents.

                                     {

  if(debug)
    cout<<"[DTAlbertoBenvenutiTask]: BeginJob"<<endl;

  nevents = 0;

}
void DTAlbertoBenvenutiTask::beginRun ( const edm::Run ,
const edm::EventSetup context 
) [protected, virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 142 of file DTAlbertoBenvenutiTask.cc.

References edm::EventSetup::get(), and Parameters::parameters.

                                                                                 {

  // Get the geometry
  context.get<MuonGeometryRecord>().get(muonGeom);

  // tTrig 
  if (parameters.getUntrackedParameter<bool>("readDB", true)) 
    context.get<DTTtrigRcd>().get(tTrigMap);

  // t0s 
  if (parameters.getParameter<bool>("performPerWireT0Calibration")) 
    context.get<DTT0Rcd>().get(t0Map);

}
void DTAlbertoBenvenutiTask::bookHistos ( const DTWireId  dtWire) [protected]

Book the ME.

Definition at line 158 of file DTAlbertoBenvenutiTask.cc.

References DTSuperLayerId::chamberId(), DTTimeUnits::counts, gather_cfg::cout, debug, DTLayerId::layer(), DTWireId::layerId(), Parameters::parameters, DTChamberId::sector(), relativeConstraints::station, DTChamberId::station(), DTSuperLayerId::superlayer(), DTLayerId::superlayerId(), and DTChamberId::wheel().

                                                             {

  if (debug) cout<<"[DTAlbertoBenvenutiTask]: booking"<<endl;

  stringstream wheel; wheel << dtWire.layerId().superlayerId().chamberId().wheel();     
  stringstream station; station << dtWire.layerId().superlayerId().chamberId().station();       
  stringstream sector; sector << dtWire.layerId().superlayerId().chamberId().sector();  
  
  // Loop over all the chambers
  vector<DTChamber*>::const_iterator ch_it = muonGeom->chambers().begin();
  vector<DTChamber*>::const_iterator ch_end = muonGeom->chambers().end();
  // Loop over the SLs
  for (; ch_it != ch_end; ++ch_it) {
    DTChamberId ch = (*ch_it)->id();
    if(ch == dtWire.layerId().superlayerId().chamberId()){
      vector<const DTSuperLayer*>::const_iterator sl_it = (*ch_it)->superLayers().begin(); 
      vector<const DTSuperLayer*>::const_iterator sl_end = (*ch_it)->superLayers().end();
      // Loop over the SLs
      for(; sl_it != sl_end; ++sl_it) {
        DTSuperLayerId sl = (*sl_it)->id();
        stringstream superLayer; superLayer << sl.superlayer();
        vector<const DTLayer*>::const_iterator l_it = (*sl_it)->layers().begin(); 
        vector<const DTLayer*>::const_iterator l_end = (*sl_it)->layers().end();
        // Loop over the Ls
        for(; l_it != l_end; ++l_it) {
          DTLayerId layerId = (*l_it)->id();
          stringstream layer; layer << layerId.layer();
          const int firstWire = muonGeom->layer(layerId)->specificTopology().firstChannel();
          const int lastWire = muonGeom->layer(layerId)->specificTopology().lastChannel();
          // Loop overt the wires
          for(int wr=firstWire; wr -lastWire <= 0; wr++) {

            stringstream wire; wire << wr;
            DTWireId wrId(layerId, wr);

            string histoTag = "TimeBox";
            string histoName = histoTag
              + "_W" + wheel.str() 
              + "_St" + station.str() 
              + "_Sec" + sector.str() 
              + "_SL" + superLayer.str()
              + "_L" + layer.str()
              + "_wire" + wire.str();

            if (debug) cout<<"[DTAlbertoBenvenutiTask]: histoName "<<histoName<<endl;

            if ( parameters.getUntrackedParameter<bool>("readDB", false) ) 
              // ttrig and rms are TDC counts
              tTrigMap->get(dtWire.layerId().superlayerId(), tTrig, tTrigRMS, kFactor,
                            DTTimeUnits::counts); 
            else tTrig = parameters.getParameter<int>("defaultTtrig");
  
            string histoTitle = histoName + " (TDC Counts)";
            int timeBoxGranularity = parameters.getUntrackedParameter<int>("timeBoxGranularity",4);
  
            if (!parameters.getUntrackedParameter<bool>("readDB", true)) {
              int maxTDCCounts = 6400 * parameters.getUntrackedParameter<int>("tdcRescale", 1);
              TH1F *TB = new TH1F(histoName.c_str(),histoTitle.c_str(), maxTDCCounts/timeBoxGranularity, 0, maxTDCCounts);
              TBMap[wrId] = TB;
            }    
            else {
              TH1F *TB = new TH1F(histoName.c_str(),histoTitle.c_str(), 2*tMax/timeBoxGranularity, tTrig-tMax, tTrig+2*tMax);
              TBMap[wrId] = TB;
            }

          } // loopover  wires
        } // loop over Ls
      } // loop over SLs
    } // if is the right chamber to book
  } // loop over chambers
}
void DTAlbertoBenvenutiTask::endJob ( void  ) [protected, virtual]

Endjob.

Reimplemented from edm::EDAnalyzer.

Definition at line 74 of file DTAlbertoBenvenutiTask.cc.

References alignmentValidation::c1, gather_cfg::cout, debug, convertXMLtoSQLite_cfg::fileName, and relativeConstraints::station.

                                   {

  if(debug)
    cout<<"[DTAlbertoBenvenutiTask] endjob called!"<<endl;

  map< DTChamberId, vector<TH1F*> > TBMap_perChamber;

  for(map<DTWireId, TH1F* >::const_iterator wHisto = TBMap.begin();
      wHisto != TBMap.end();
      wHisto++) {
    DTChamberId chId = (*wHisto).first.layerId().superlayerId().chamberId();
    TBMap_perChamber[chId].push_back((*wHisto).second);
  }
 
  
  for(map<DTChamberId, vector<TH1F*> >::const_iterator Histo = TBMap_perChamber.begin();
      Histo != TBMap_perChamber.end();
      Histo++) {
    stringstream station; station << (*Histo).first.station();
    stringstream sector; sector << (*Histo).first.sector();     
    stringstream wheel; wheel << (*Histo).first.wheel();
    
    string fileTag = "TimeBoxes";
    string fileName = fileTag
      + "_W" + wheel.str()
      + "_Sec" + sector.str()
      + "_St" + station.str() 
      + ".ps";

    TPostScript psFile(fileName.c_str(),111);
    psFile.Range(20,26);
    int counter = 0;
    TCanvas c1("c1","",600,780);
    c1.Divide(4,4);
    psFile.NewPage();
    
    cout<<"[DTAlbertoBenvenutiTask] filling the file: "<<fileName<<endl;
    for(vector<TH1F*>::const_iterator tbHisto = (*Histo).second.begin();
        tbHisto != (*Histo).second.end();
        tbHisto++) {
      counter++;
      c1.cd(counter);
      (*tbHisto)->Draw();      
       if(counter%16 == 0 && counter>=16){
         c1.Update();
         psFile.NewPage();
         c1.Clear();
         c1.Divide(4,4);
         counter=0;
       }
    } // loop over TB histos (divided per chamber)

  } //loop over the chambers

}

Member Data Documentation

Definition at line 67 of file DTAlbertoBenvenutiTask.h.

Definition at line 77 of file DTAlbertoBenvenutiTask.h.

Definition at line 79 of file DTAlbertoBenvenutiTask.h.

Definition at line 72 of file DTAlbertoBenvenutiTask.h.

Definition at line 83 of file DTAlbertoBenvenutiTask.h.

Definition at line 68 of file DTAlbertoBenvenutiTask.h.

std::string DTAlbertoBenvenutiTask::outputFile [private]

Definition at line 88 of file DTAlbertoBenvenutiTask.h.

Definition at line 81 of file DTAlbertoBenvenutiTask.h.

Definition at line 86 of file DTAlbertoBenvenutiTask.h.

std::map<DTWireId, TH1F*> DTAlbertoBenvenutiTask::TBMap [private]

Definition at line 90 of file DTAlbertoBenvenutiTask.h.

no needs to be precise. Value from PSets will always be used

Definition at line 71 of file DTAlbertoBenvenutiTask.h.

tTrig from the DB

Definition at line 75 of file DTAlbertoBenvenutiTask.h.

Definition at line 85 of file DTAlbertoBenvenutiTask.h.

Definition at line 76 of file DTAlbertoBenvenutiTask.h.