CMS 3D CMS Logo

Public Member Functions | Private Attributes

MultiTrackValidator Class Reference

#include <MultiTrackValidator.h>

Inheritance diagram for MultiTrackValidator:
edm::EDAnalyzer MultiTrackValidatorBase

List of all members.

Public Member Functions

void analyze (const edm::Event &, const edm::EventSetup &)
 Method called once per event.
void beginRun (edm::Run const &, edm::EventSetup const &)
 Method called before the event loop.
void endRun (edm::Run const &, edm::EventSetup const &)
 Method called at the end of the event loop.
 MultiTrackValidator (const edm::ParameterSet &pset)
 Constructor.
virtual ~MultiTrackValidator ()
 Destructor.

Private Attributes

edm::InputTag associatormap
CosmicTrackingParticleSelector cosmictpSelector
std::string dirName_
MTVHistoProducerAlgohistoProducerAlgo_
bool runStandalone
TrackingParticleSelector tpSelector
bool UseAssociators
bool useGsf

Detailed Description

Class that prodecs histrograms to validate Track Reconstruction performances

Date:
2011/02/02 11:41:16
Revision:
1.51
Author:
cerati

Definition at line 17 of file MultiTrackValidator.h.


Constructor & Destructor Documentation

MultiTrackValidator::MultiTrackValidator ( const edm::ParameterSet pset)

Constructor.

Definition at line 42 of file MultiTrackValidator.cc.

References associatormap, MultiTrackValidatorBase::associators, cosmictpSelector, MultiTrackValidatorBase::dbe_, dirName_, reco::get(), edm::ParameterSet::getParameter(), histoProducerAlgo_, MultiTrackValidatorBase::m_dEdx1Tag, MultiTrackValidatorBase::m_dEdx2Tag, runStandalone, tpSelector, UseAssociators, and useGsf.

                                                                   :MultiTrackValidatorBase(pset){
  //theExtractor = IsoDepositExtractorFactory::get()->create( extractorName, extractorPSet);

  ParameterSet psetForHistoProducerAlgo = pset.getParameter<ParameterSet>("histoProducerAlgoBlock");
  string histoProducerAlgoName = psetForHistoProducerAlgo.getParameter<string>("ComponentName");
  histoProducerAlgo_ = MTVHistoProducerAlgoFactory::get()->create(histoProducerAlgoName ,psetForHistoProducerAlgo);
  histoProducerAlgo_->setDQMStore(dbe_);

  dirName_ = pset.getParameter<std::string>("dirName");
  associatormap = pset.getParameter< edm::InputTag >("associatormap");
  UseAssociators = pset.getParameter< bool >("UseAssociators");

  m_dEdx1Tag = pset.getParameter< edm::InputTag >("dEdx1Tag");
  m_dEdx2Tag = pset.getParameter< edm::InputTag >("dEdx2Tag");

  tpSelector = TrackingParticleSelector(pset.getParameter<double>("ptMinTP"),
                                        pset.getParameter<double>("minRapidityTP"),
                                        pset.getParameter<double>("maxRapidityTP"),
                                        pset.getParameter<double>("tipTP"),
                                        pset.getParameter<double>("lipTP"),
                                        pset.getParameter<int>("minHitTP"),
                                        pset.getParameter<bool>("signalOnlyTP"),
                                        pset.getParameter<bool>("chargedOnlyTP"),
                                        pset.getParameter<bool>("stableOnlyTP"),
                                        pset.getParameter<std::vector<int> >("pdgIdTP"));

  cosmictpSelector = CosmicTrackingParticleSelector(pset.getParameter<double>("ptMinTP"),
                                                    pset.getParameter<double>("minRapidityTP"),
                                                    pset.getParameter<double>("maxRapidityTP"),
                                                    pset.getParameter<double>("tipTP"),
                                                    pset.getParameter<double>("lipTP"),
                                                    pset.getParameter<int>("minHitTP"),
                                                    pset.getParameter<bool>("chargedOnlyTP"),
                                                    pset.getParameter<std::vector<int> >("pdgIdTP"));

  useGsf = pset.getParameter<bool>("useGsf");
  runStandalone = pset.getParameter<bool>("runStandalone");


    
  if (!UseAssociators) {
    associators.clear();
    associators.push_back(associatormap.label());
  }

}
MultiTrackValidator::~MultiTrackValidator ( ) [virtual]

Destructor.

Definition at line 90 of file MultiTrackValidator.cc.

References histoProducerAlgo_.


Member Function Documentation

void MultiTrackValidator::analyze ( const edm::Event event,
const edm::EventSetup setup 
) [virtual]

Method called once per event.

Implements edm::EDAnalyzer.

Definition at line 147 of file MultiTrackValidator.cc.

References MultiTrackValidatorBase::associator, associatormap, MultiTrackValidatorBase::associators, asciidump::at, MultiTrackValidatorBase::bsSrc, EncodedEventId::bunchCrossing(), edm::HandleBase::clear(), funct::cos(), cosmictpSelector, alignCSCRings::e, edm::AssociationMap< Tag >::end(), EncodedEventId::event(), TrackingParticle::eventId(), MTVHistoProducerAlgo::fill_dedx_recoTrack_histos(), MTVHistoProducerAlgo::fill_generic_recoTrack_histos(), MTVHistoProducerAlgo::fill_generic_simTrack_histos(), MTVHistoProducerAlgo::fill_recoAssociated_simTrack_histos(), MTVHistoProducerAlgo::fill_ResoAndPull_recoTrack_histos(), MTVHistoProducerAlgo::fill_simAssociated_recoTrack_histos(), MTVHistoProducerAlgo::fill_trackBased_histos(), edm::AssociationMap< Tag >::find(), first, edm::EventSetup::get(), edm::Ref< C, T, F >::get(), edm::Event::getByLabel(), histoProducerAlgo_, i, MultiTrackValidatorBase::ignoremissingtkcollection_, edm::InputTag::instance(), j, MultiTrackValidatorBase::label, edm::InputTag::label(), MultiTrackValidatorBase::label_pileupinfo, MultiTrackValidatorBase::label_tp_effic, MultiTrackValidatorBase::label_tp_fake, MultiTrackValidatorBase::label_tv, LogTrace, MultiTrackValidatorBase::m_dEdx1Tag, MultiTrackValidatorBase::m_dEdx2Tag, ParticleBase::momentum(), MultiTrackValidatorBase::parametersDefiner, edm::InputTag::process(), edm::Handle< T >::product(), dt_dqm_sourceclient_common_cff::reco, funct::sin(), findQualityFiles::size, mathSSE::sqrt(), tpSelector, DetId::Tracker, TrackingParticle::trackPSimHit(), UseAssociators, ParticleBase::vertex(), w(), and cms::Exception::what().

                                                                                  {
  using namespace reco;
  
  edm::LogInfo("TrackValidator") << "\n====================================================" << "\n"
                                 << "Analyzing new event" << "\n"
                                 << "====================================================\n" << "\n";
  edm::ESHandle<ParametersDefinerForTP> parametersDefinerTP; 
  setup.get<TrackAssociatorRecord>().get(parametersDefiner,parametersDefinerTP);    
  
  edm::Handle<TrackingParticleCollection>  TPCollectionHeff ;
  event.getByLabel(label_tp_effic,TPCollectionHeff);
  const TrackingParticleCollection tPCeff = *(TPCollectionHeff.product());
  
  edm::Handle<TrackingParticleCollection>  TPCollectionHfake ;
  event.getByLabel(label_tp_fake,TPCollectionHfake);
  const TrackingParticleCollection tPCfake = *(TPCollectionHfake.product());
  
  //if (tPCeff.size()==0) {edm::LogInfo("TrackValidator") 
  //<< "TP Collection for efficiency studies has size = 0! Skipping Event." ; return;}
  //if (tPCfake.size()==0) {edm::LogInfo("TrackValidator") 
  //<< "TP Collection for fake rate studies has size = 0! Skipping Event." ; return;}
  
  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
  event.getByLabel(bsSrc,recoBeamSpotHandle);
  reco::BeamSpot bs = *recoBeamSpotHandle;      
  
  edm::Handle< vector<PileupSummaryInfo> > puinfoH;
  event.getByLabel(label_pileupinfo,puinfoH);
  PileupSummaryInfo puinfo;      
  
  for (unsigned int puinfo_ite=0;puinfo_ite<(*puinfoH).size();++puinfo_ite){ 
    if ((*puinfoH)[puinfo_ite].getBunchCrossing()==0){
      puinfo=(*puinfoH)[puinfo_ite];
      break;
    }
  }

  edm::Handle<TrackingVertexCollection> tvH;
  event.getByLabel(label_tv,tvH);
  TrackingVertexCollection tv = *tvH;      
  
  int w=0; //counter counting the number of sets of histograms
  for (unsigned int ww=0;ww<associators.size();ww++){
    for (unsigned int www=0;www<label.size();www++){
      //
      //get collections from the event
      //
      edm::Handle<View<Track> >  trackCollection;
      if(!event.getByLabel(label[www], trackCollection)&&ignoremissingtkcollection_)continue;
      //if (trackCollection->size()==0) 
      //edm::LogInfo("TrackValidator") << "TrackCollection size = 0!" ; 
      //continue;
      //}
      reco::RecoToSimCollection recSimColl;
      reco::SimToRecoCollection simRecColl;
      //associate tracks
      if(UseAssociators){
        edm::LogVerbatim("TrackValidator") << "Analyzing " 
                                           << label[www].process()<<":"
                                           << label[www].label()<<":"
                                           << label[www].instance()<<" with "
                                           << associators[ww].c_str() <<"\n";
        
        LogTrace("TrackValidator") << "Calling associateRecoToSim method" << "\n";
        recSimColl=associator[ww]->associateRecoToSim(trackCollection,
                                                      TPCollectionHfake,
                                                      &event);
        LogTrace("TrackValidator") << "Calling associateSimToReco method" << "\n";
        simRecColl=associator[ww]->associateSimToReco(trackCollection,
                                                      TPCollectionHeff, 
                                                      &event);
      }
      else{
        edm::LogVerbatim("TrackValidator") << "Analyzing " 
                                           << label[www].process()<<":"
                                           << label[www].label()<<":"
                                           << label[www].instance()<<" with "
                                           << associatormap.process()<<":"
                                           << associatormap.label()<<":"
                                           << associatormap.instance()<<"\n";
        
        Handle<reco::SimToRecoCollection > simtorecoCollectionH;
        event.getByLabel(associatormap,simtorecoCollectionH);
        simRecColl= *(simtorecoCollectionH.product()); 
        
        Handle<reco::RecoToSimCollection > recotosimCollectionH;
        event.getByLabel(associatormap,recotosimCollectionH);
        recSimColl= *(recotosimCollectionH.product()); 
      }



      // ########################################################
      // fill simulation histograms (LOOP OVER TRACKINGPARTICLES)
      // ########################################################

      //compute number of tracks per eta interval
      //
      edm::LogVerbatim("TrackValidator") << "\n# of TrackingParticles: " << tPCeff.size() << "\n";
      int ats(0);         //This counter counts the number of simTracks that are "associated" to recoTracks
      int st(0);          //This counter counts the number of simulated tracks passing the MTV selection (i.e. tpSelector(tp) )
      unsigned sts(0);   //This counter counts the number of simTracks surviving the bunchcrossing cut 
      unsigned asts(0);  //This counter counts the number of simTracks that are "associated" to recoTracks surviving the bunchcrossing cut
      for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){ //loop over TPs collection for tracking efficiency
        TrackingParticleRef tpr(TPCollectionHeff, i);
        TrackingParticle* tp=const_cast<TrackingParticle*>(tpr.get());
        ParticleBase::Vector momentumTP; 
        ParticleBase::Point vertexTP;
        double dxySim(0);
        double dzSim(0);
        
        //---------- THIS PART HAS TO BE CLEANED UP. THE PARAMETER DEFINER WAS NOT MEANT TO BE USED IN THIS WAY ----------
        //If the TrackingParticle is collison like, get the momentum and vertex at production state
        if(parametersDefiner=="LhcParametersDefinerForTP")
          {
            if(! tpSelector(*tp)) continue;
            momentumTP = tp->momentum();
            vertexTP = tp->vertex();
            //Calcualte the impact parameters w.r.t. PCA
            ParticleBase::Vector momentum = parametersDefinerTP->momentum(event,setup,*tp);
            ParticleBase::Point vertex = parametersDefinerTP->vertex(event,setup,*tp);
            dxySim = (-vertex.x()*sin(momentum.phi())+vertex.y()*cos(momentum.phi()));
            dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y())/sqrt(momentum.perp2()) 
              * momentum.z()/sqrt(momentum.perp2());
          }
        //If the TrackingParticle is comics, get the momentum and vertex at PCA
        if(parametersDefiner=="CosmicParametersDefinerForTP")
          {
            if(! cosmictpSelector(*tp,&bs,event,setup)) continue;       
            momentumTP = parametersDefinerTP->momentum(event,setup,*tp);
            vertexTP = parametersDefinerTP->vertex(event,setup,*tp);
            dxySim = (-vertexTP.x()*sin(momentumTP.phi())+vertexTP.y()*cos(momentumTP.phi()));
            dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y())/sqrt(momentumTP.perp2()) 
              * momentumTP.z()/sqrt(momentumTP.perp2());
          }
        //---------- THE PART ABOVE HAS TO BE CLEANED UP. THE PARAMETER DEFINER WAS NOT MEANT TO BE USED IN THIS WAY ----------

        st++;   //This counter counts the number of simulated tracks passing the MTV selection (i.e. tpSelector(tp) )

        // in the coming lines, histos are filled using as input
        // - momentumTP 
        // - vertexTP 
        // - dxySim
        // - dzSim

        histoProducerAlgo_->fill_generic_simTrack_histos(w,momentumTP,vertexTP, tp->eventId().bunchCrossing());


        // ##############################################
        // fill RecoAssociated SimTracks' histograms
        // ##############################################
        // bool isRecoMatched(false); // UNUSED
        const reco::Track* matchedTrackPointer=0;
        std::vector<std::pair<RefToBase<Track>, double> > rt;
        if(simRecColl.find(tpr) != simRecColl.end()){
          rt = (std::vector<std::pair<RefToBase<Track>, double> >) simRecColl[tpr];
          if (rt.size()!=0) {
            ats++; //This counter counts the number of simTracks that have a recoTrack associated
            // isRecoMatched = true; // UNUSED
            matchedTrackPointer = rt.begin()->first.get();
            edm::LogVerbatim("TrackValidator") << "TrackingParticle #" << st 
                                               << " with pt=" << sqrt(momentumTP.perp2()) 
                                               << " associated with quality:" << rt.begin()->second <<"\n";
          }
        }else{
          edm::LogVerbatim("TrackValidator") 
            << "TrackingParticle #" << st
            << " with pt,eta,phi: " 
            << sqrt(momentumTP.perp2()) << " , "
            << momentumTP.eta() << " , "
            << momentumTP.phi() << " , "
            << " NOT associated to any reco::Track" << "\n";
        }
        

        

        std::vector<PSimHit> simhits=tp->trackPSimHit(DetId::Tracker);
        int nSimHits = simhits.end()-simhits.begin();

        double vtx_z_PU = vertexTP.z();
        for (size_t j = 0; j < tv.size(); j++) {
            if (tp->eventId().event() == tv[j].eventId().event()) {
                vtx_z_PU = tv[j].position().z();
                break;
            }
        }

          histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,*tp,momentumTP,vertexTP,dxySim,dzSim,nSimHits,matchedTrackPointer,puinfo.getPU_NumInteractions(), vtx_z_PU);
          sts++;
          if (matchedTrackPointer) asts++;




      } // End  for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){

      //if (st!=0) h_tracksSIM[w]->Fill(st);  // TO BE FIXED
      
      
      // ##############################################
      // fill recoTracks histograms (LOOP OVER TRACKS)
      // ##############################################
      edm::LogVerbatim("TrackValidator") << "\n# of reco::Tracks with "
                                         << label[www].process()<<":"
                                         << label[www].label()<<":"
                                         << label[www].instance()
                                         << ": " << trackCollection->size() << "\n";

      int sat(0); //This counter counts the number of recoTracks that are associated to SimTracks from Signal only
      int at(0); //This counter counts the number of recoTracks that are associated to SimTracks
      int rT(0); //This counter counts the number of recoTracks in general


      // dE/dx
      // at some point this could be generalized, with a vector of tags and a corresponding vector of Handles
      // I'm writing the interface such to take vectors of ValueMaps
      edm::Handle<edm::ValueMap<reco::DeDxData> > dEdx1Handle;
      edm::Handle<edm::ValueMap<reco::DeDxData> > dEdx2Handle;
      std::vector<edm::ValueMap<reco::DeDxData> > v_dEdx;
      v_dEdx.clear();
      //std::cout << "PIPPO: label is " << label[www] << std::endl;
      if (label[www].label()=="generalTracks") {
        try {
          event.getByLabel(m_dEdx1Tag, dEdx1Handle);
          const edm::ValueMap<reco::DeDxData> dEdx1 = *dEdx1Handle.product();
          event.getByLabel(m_dEdx2Tag, dEdx2Handle);
          const edm::ValueMap<reco::DeDxData> dEdx2 = *dEdx2Handle.product();
          v_dEdx.push_back(dEdx1);
          v_dEdx.push_back(dEdx2);
        } catch (cms::Exception e){
          LogTrace("TrackValidator") << "exception found: " << e.what() << "\n";
        }
      }
      //end dE/dx

      for(View<Track>::size_type i=0; i<trackCollection->size(); ++i){

        RefToBase<Track> track(trackCollection, i);
        rT++;
        
        bool isSigSimMatched(false);
        bool isSimMatched(false);
    bool isChargeMatched(true);
    int numAssocRecoTracks = 0;
        int tpbx = 0;
        int nSimHits = 0;
        double sharedFraction = 0.;
        std::vector<std::pair<TrackingParticleRef, double> > tp;
        if(recSimColl.find(track) != recSimColl.end()){
          tp = recSimColl[track];
          if (tp.size()!=0) {
            std::vector<PSimHit> simhits=tp[0].first->trackPSimHit(DetId::Tracker);
            nSimHits = simhits.end()-simhits.begin();
            sharedFraction = tp[0].second;
            isSimMatched = true;
        if (tp[0].first->charge() != track->charge()) isChargeMatched = false;
        if(simRecColl.find(tp[0].first) != simRecColl.end()) numAssocRecoTracks = simRecColl[tp[0].first].size();
        //std::cout << numAssocRecoTracks << std::endl;
            tpbx = tp[0].first->eventId().bunchCrossing();
            at++;
            for (unsigned int tp_ite=0;tp_ite<tp.size();++tp_ite){ 
              TrackingParticle trackpart = *(tp[tp_ite].first);
              if ((trackpart.eventId().event() == 0) && (trackpart.eventId().bunchCrossing() == 0)){
                isSigSimMatched = true;
                sat++;
                break;
              }
            }
            edm::LogVerbatim("TrackValidator") << "reco::Track #" << rT << " with pt=" << track->pt() 
                                               << " associated with quality:" << tp.begin()->second <<"\n";
          }
        } else {
          edm::LogVerbatim("TrackValidator") << "reco::Track #" << rT << " with pt=" << track->pt()
                                             << " NOT associated to any TrackingParticle" << "\n";                
        }
        

        histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(),isSimMatched,isSigSimMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), tpbx, nSimHits, sharedFraction);

        // dE/dx
        //      reco::TrackRef track2  = reco::TrackRef( trackCollection, i );
        if (v_dEdx.size() > 0) histoProducerAlgo_->fill_dedx_recoTrack_histos(w,track, v_dEdx);
        //if (v_dEdx.size() > 0) histoProducerAlgo_->fill_dedx_recoTrack_histos(track2, v_dEdx);


        //Fill other histos
        //try{ //Is this really necessary ????

        if (tp.size()==0) continue;     

        histoProducerAlgo_->fill_simAssociated_recoTrack_histos(w,*track);

        TrackingParticleRef tpr = tp.begin()->first;
        
        /* TO BE FIXED LATER
        if (associators[ww]=="TrackAssociatorByChi2"){
          //association chi2
          double assocChi2 = -tp.begin()->second;//in association map is stored -chi2
          h_assochi2[www]->Fill(assocChi2);
          h_assochi2_prob[www]->Fill(TMath::Prob((assocChi2)*5,5));
        }
        else if (associators[ww]=="TrackAssociatorByHits"){
          double fraction = tp.begin()->second;
          h_assocFraction[www]->Fill(fraction);
          h_assocSharedHit[www]->Fill(fraction*track->numberOfValidHits());
        }
        */

          
        //Get tracking particle parameters at point of closest approach to the beamline
        ParticleBase::Vector momentumTP = parametersDefinerTP->momentum(event,setup,*(tpr.get()));
        ParticleBase::Point vertexTP = parametersDefinerTP->vertex(event,setup,*(tpr.get()));                    
        int chargeTP = tpr->charge();

        histoProducerAlgo_->fill_ResoAndPull_recoTrack_histos(w,momentumTP,vertexTP,chargeTP,
                                                             *track,bs.position());
        
        
        //TO BE FIXED
        //std::vector<PSimHit> simhits=tpr.get()->trackPSimHit(DetId::Tracker);
        //nrecHit_vs_nsimHit_rec2sim[w]->Fill(track->numberOfValidHits(), (int)(simhits.end()-simhits.begin() ));
        
        /*
          } // End of try{
          catch (cms::Exception e){
          LogTrace("TrackValidator") << "exception found: " << e.what() << "\n";
          }
        */
        
      } // End of for(View<Track>::size_type i=0; i<trackCollection->size(); ++i){

      histoProducerAlgo_->fill_trackBased_histos(w,at,rT,st);

      edm::LogVerbatim("TrackValidator") << "Total Simulated: " << st << "\n"
                                         << "Total Associated (simToReco): " << ats << "\n"
                                         << "Total Reconstructed: " << rT << "\n"
                                         << "Total Associated (recoToSim): " << at << "\n"
                                         << "Total Fakes: " << rT-at << "\n";

      w++;
    } // End of  for (unsigned int www=0;www<label.size();www++){
  } //END of for (unsigned int ww=0;ww<associators.size();ww++){

}
void MultiTrackValidator::beginRun ( edm::Run const &  ,
edm::EventSetup const &  setup 
) [virtual]

Method called before the event loop.

Reimplemented from edm::EDAnalyzer.

Definition at line 92 of file MultiTrackValidator.cc.

References MultiTrackValidatorBase::associator, MultiTrackValidatorBase::associators, MTVHistoProducerAlgo::bookRecoHistos(), MTVHistoProducerAlgo::bookRecoHistosForStandaloneRunning(), MTVHistoProducerAlgo::bookSimHistos(), DQMStore::cd(), MultiTrackValidatorBase::dbe_, TrackerOfflineValidation_Dqm_cff::dirName, dirName_, edm::EventSetup::get(), DQMStore::goUp(), histoProducerAlgo_, MTVHistoProducerAlgo::initialize(), edm::InputTag::instance(), MultiTrackValidatorBase::label, edm::InputTag::label(), edm::InputTag::process(), edm::ESHandle< T >::product(), linker::replace(), runStandalone, DQMStore::setCurrentFolder(), UseAssociators, and w().

                                                                      {
  //  dbe_->showDirStructure();

  //int j=0;  //is This Necessary ???
  for (unsigned int ww=0;ww<associators.size();ww++){
    for (unsigned int www=0;www<label.size();www++){
      dbe_->cd();
      InputTag algo = label[www];
      string dirName=dirName_;
      if (algo.process()!="")
        dirName+=algo.process()+"_";
      if(algo.label()!="")
        dirName+=algo.label()+"_";
      if(algo.instance()!="")
        dirName+=algo.instance()+"_";      
      if (dirName.find("Tracks")<dirName.length()){
        dirName.replace(dirName.find("Tracks"),6,"");
      }
      string assoc= associators[ww];
      if (assoc.find("Track")<assoc.length()){
        assoc.replace(assoc.find("Track"),5,"");
      }
      dirName+=assoc;
      std::replace(dirName.begin(), dirName.end(), ':', '_');

      dbe_->setCurrentFolder(dirName.c_str());
      
      // vector of vector initialization
      histoProducerAlgo_->initialize(); //TO BE FIXED. I'D LIKE TO AVOID THIS CALL

      dbe_->goUp(); //Is this really necessary ???
      string subDirName = dirName + "/simulation";
      dbe_->setCurrentFolder(subDirName.c_str());

      //Booking histograms concerning with simulated tracks
      histoProducerAlgo_->bookSimHistos();

      dbe_->cd();
      dbe_->setCurrentFolder(dirName.c_str());

      //Booking histograms concerning with reconstructed tracks
      histoProducerAlgo_->bookRecoHistos();
      if (runStandalone) histoProducerAlgo_->bookRecoHistosForStandaloneRunning();

      if (UseAssociators) {
        edm::ESHandle<TrackAssociatorBase> theAssociator;
        for (unsigned int w=0;w<associators.size();w++) {
          setup.get<TrackAssociatorRecord>().get(associators[w],theAssociator);
          associator.push_back( theAssociator.product() );
        }//end loop w
      }
    }//end loop www
  }// end loop ww
}
void MultiTrackValidator::endRun ( edm::Run const &  ,
edm::EventSetup const &   
) [virtual]

Member Data Documentation

Definition at line 37 of file MultiTrackValidator.h.

Referenced by analyze(), and MultiTrackValidator().

Definition at line 48 of file MultiTrackValidator.h.

Referenced by analyze(), and MultiTrackValidator().

std::string MultiTrackValidator::dirName_ [private]

Definition at line 36 of file MultiTrackValidator.h.

Referenced by beginRun(), and MultiTrackValidator().

Definition at line 44 of file MultiTrackValidator.h.

Referenced by beginRun(), endRun(), and MultiTrackValidator().

Definition at line 47 of file MultiTrackValidator.h.

Referenced by analyze(), and MultiTrackValidator().

Definition at line 38 of file MultiTrackValidator.h.

Referenced by analyze(), beginRun(), and MultiTrackValidator().

Definition at line 43 of file MultiTrackValidator.h.

Referenced by MultiTrackValidator().