From eed34ac469776e252900bf89b2e67974b413297c Mon Sep 17 00:00:00 2001 From: Petar Date: Wed, 4 Jul 2018 14:31:53 -0500 Subject: [PATCH] Making everything work properly with the old resolutions files for Edge and Big-pixel clusters --- .../interface/PixelResolutionHistograms.h | 10 +- .../python/TrackingRecHitProducer_cfi.py | 60 +++--- .../src/PixelResolutionHistograms.cc | 200 ++++++++++++------ .../src/PixelTemplateSmearerBase.cc | 41 ++-- 4 files changed, 195 insertions(+), 116 deletions(-) diff --git a/FastSimulation/TrackingRecHitProducer/interface/PixelResolutionHistograms.h b/FastSimulation/TrackingRecHitProducer/interface/PixelResolutionHistograms.h index 6f35077fa80e1..c873ae549721f 100644 --- a/FastSimulation/TrackingRecHitProducer/interface/PixelResolutionHistograms.h +++ b/FastSimulation/TrackingRecHitProducer/interface/PixelResolutionHistograms.h @@ -44,9 +44,13 @@ class PixelResolutionHistograms { // ROOT file, and we do *not* own them. But we do own the // generators. // - PixelResolutionHistograms( const char * filename, // ROOT file for histograms - const char * rootdir = "" ); // ROOT dir, "" if none - + PixelResolutionHistograms( const char * filename, // ROOT file for histograms + const char * rootdir = "", // ROOT dir, "" if none + int detType = -1, // default: read from ROOT file. + bool ignore_multi = false, // Forward Big is always single + bool ignore_single = false, // Edge does not need single pixels + bool ignore_qBin = false ); // qBin histograms not used right now (future expansion) + //--- Destructor (virtual, just in case) virtual ~PixelResolutionHistograms(); diff --git a/FastSimulation/TrackingRecHitProducer/python/TrackingRecHitProducer_cfi.py b/FastSimulation/TrackingRecHitProducer/python/TrackingRecHitProducer_cfi.py index 51b5d28aaccd9..57953621e1a1c 100644 --- a/FastSimulation/TrackingRecHitProducer/python/TrackingRecHitProducer_cfi.py +++ b/FastSimulation/TrackingRecHitProducer/python/TrackingRecHitProducer_cfi.py @@ -22,12 +22,10 @@ name = cms.string("pixelSmearerBarrelLayer1"), type = cms.string("PixelTemplateSmearerPlugin"), # templateId = cms.int32( 2403 ), - RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63207_2403.root'), + RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63207_2403_6.root'), + BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelBig2017.root'), + EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), # - BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63207_2403.root'), - EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63207_2403.root'), - ## BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), - ## EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), MergeHitsOn = cms.bool(False), MergingProbabilityFile = cms.string('FastSimulation/TrackingRecHitProducer/data/bmergeprob.root'), MergedPixelResolutionXFile = cms.string('FastSimulation/TrackingRecHitProducer/data/bxsmear.root'), @@ -46,12 +44,10 @@ name = cms.string("pixelSmearerBarrelLayer2"), type = cms.string("PixelTemplateSmearerPlugin"), # templateId = cms.int32( 2413 ), - RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63507_2413.root'), + RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63507_2413_6.root'), + BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelBig2017.root'), + EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), # - BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63507_2413.root'), - EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63507_2413.root'), - ## BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), - ## EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), MergeHitsOn = cms.bool(False), MergingProbabilityFile = cms.string('FastSimulation/TrackingRecHitProducer/data/bmergeprob.root'), MergedPixelResolutionXFile = cms.string('FastSimulation/TrackingRecHitProducer/data/bxsmear.root'), @@ -70,12 +66,10 @@ name = cms.string("pixelSmearerBarrelLayer3"), type = cms.string("PixelTemplateSmearerPlugin"), # templateId = cms.int32( 2413 ), - RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63807_2423.root'), + RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63807_2423_6.root'), + BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelBig2017.root'), + EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), # - BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63807_2423.root'), - EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos63807_2423.root'), - ## BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), - ## EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), MergeHitsOn = cms.bool(False), MergingProbabilityFile = cms.string('FastSimulation/TrackingRecHitProducer/data/bmergeprob.root'), MergedPixelResolutionXFile = cms.string('FastSimulation/TrackingRecHitProducer/data/bxsmear.root'), @@ -95,12 +89,10 @@ name = cms.string("pixelSmearerBarrelLayer4"), type = cms.string("PixelTemplateSmearerPlugin"), # templateId = cms.int32( 2413 ), - RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64107_2433.root'), + RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64107_2433_6.root'), + BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelBig2017.root'), + EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), # - BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64107_2433.root'), - EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64107_2433.root'), - ## BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), - ## EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), MergeHitsOn = cms.bool(False), MergingProbabilityFile = cms.string('FastSimulation/TrackingRecHitProducer/data/bmergeprob.root'), MergedPixelResolutionXFile = cms.string('FastSimulation/TrackingRecHitProducer/data/bxsmear.root'), @@ -127,10 +119,9 @@ type = cms.string("PixelTemplateSmearerPlugin"), # templateId = cms.int32( 2443 ), RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64237_2443.root'), - BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64237_2443.root'), - EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64237_2443.root'), - ## BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), - ## EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), + BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/ForwardBig2017.root'), + EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/ForwardEdge2017.root'), + # MergeHitsOn = cms.bool(False), MergingProbabilityFile = cms.string('FastSimulation/TrackingRecHitProducer/data/fmergeprob.root'), MergedPixelResolutionXFile = cms.string('FastSimulation/TrackingRecHitProducer/data/fxsmear.root'), @@ -150,10 +141,9 @@ type = cms.string("PixelTemplateSmearerPlugin"), # templateId = cms.int32( 2453 ), RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64367_2453.root'), - BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64367_2453.root'), - EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64367_2453.root'), - ## BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), - ## EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), + BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/ForwardBig2017.root'), + EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/ForwardEdge2017.root'), + # MergeHitsOn = cms.bool(False), MergingProbabilityFile = cms.string('FastSimulation/TrackingRecHitProducer/data/fmergeprob.root'), MergedPixelResolutionXFile = cms.string('FastSimulation/TrackingRecHitProducer/data/fxsmear.root'), @@ -172,10 +162,9 @@ type = cms.string("PixelTemplateSmearerPlugin"), # templateId = cms.int32( 2463 ), RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64497_2463.root'), - BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64497_2463.root'), - EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64497_2463.root'), - ## BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), - ## EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), + BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/ForwardBig2017.root'), + EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/ForwardEdge2017.root'), + # MergeHitsOn = cms.bool(False), MergingProbabilityFile = cms.string('FastSimulation/TrackingRecHitProducer/data/fmergeprob.root'), MergedPixelResolutionXFile = cms.string('FastSimulation/TrackingRecHitProducer/data/fxsmear.root'), @@ -193,10 +182,9 @@ type = cms.string("PixelTemplateSmearerPlugin"), # templateId = cms.int32( 2473 ), RegularPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64627_2473.root'), - BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64627_2473.root'), - EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/pixel_histos64627_2473.root'), - ## BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), - ## EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/BarrelEdge2017.root'), + BigPixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/ForwardBig2017.root'), + EdgePixelResolutionFile = cms.string('FastSimulation/TrackingRecHitProducer/data/ForwardEdge2017.root'), + # MergeHitsOn = cms.bool(False), MergingProbabilityFile = cms.string('FastSimulation/TrackingRecHitProducer/data/fmergeprob.root'), MergedPixelResolutionXFile = cms.string('FastSimulation/TrackingRecHitProducer/data/fxsmear.root'), diff --git a/FastSimulation/TrackingRecHitProducer/src/PixelResolutionHistograms.cc b/FastSimulation/TrackingRecHitProducer/src/PixelResolutionHistograms.cc index 4e5b3ddfb4ca1..fea88b0630df4 100644 --- a/FastSimulation/TrackingRecHitProducer/src/PixelResolutionHistograms.cc +++ b/FastSimulation/TrackingRecHitProducer/src/PixelResolutionHistograms.cc @@ -112,6 +112,8 @@ PixelResolutionHistograms( const char * filename, // ROOT file for histograms Char_t histo[200]; Char_t title[200]; // + //--- Histograms for clusters with multiple pixels hit in a given direction. + // for( int ii=0; ii( filename ,"READ"); if ( !file_ ) { status_ = 1; + std::cout << "PixelResolutionHistograms:: Error, file " << std::string(filename) << " not found." << std::endl; return; } @@ -215,11 +225,17 @@ PixelResolutionHistograms( const char * filename, binningHisto_ = (TH2F*) file_->Get( Form( "%s%s" , rootdir, "ResHistoBinning" ) ); if ( !binningHisto_ ) { status_ = 11; + std::cout << "PixelResolutionHistograms:: Error, binning histogrram ResHistoBinning not found." << std::endl; return; } - //--- Fish out detType from the underflow bin: - detType_ = binningHisto_->GetBinContent(0, 0); + if ( detType == -1 ) { + //--- Fish out detType from the underflow bin: + detType_ = binningHisto_->GetBinContent(0, 0); + } + else { + detType_ = detType; // constructor's argument overrides what's in ResHistoBinning histogram. + } //--- Now we fill the binning variables: cotbetaAxis_ = binningHisto_->GetXaxis(); @@ -230,109 +246,163 @@ PixelResolutionHistograms( const char * filename, cotalphaBinWidth_ = binningHisto_->GetYaxis()->GetBinWidth(1); // assume all same width; cotalphaLowEdge_ = binningHisto_->GetYaxis()->GetXmin(); // low edge of the first bin; cotalphaBins_ = binningHisto_->GetYaxis()->GetNbins(); - - - for( int ii=0; ii1 X", - cotbetaLowEdge_ + ii*cotbetaBinWidth_ , cotbetaLowEdge_ + (ii+1)*cotbetaBinWidth_, - cotalphaLowEdge_ +jj*cotalphaBinWidth_, cotalphaLowEdge_ +(jj+1)*cotalphaBinWidth_, - kk+1 ); - std::cout << "Debug: histo=" << std::string(histo) << " title=" << std::string(title) - << std::endl; - // - tmphist = (TH1F*) file_->Get( Form( "%s%s" , rootdir, histo ) ); - if ( !tmphist ) { - status_ = 2; - return; - } - std::cout << "Debug: found histo with title = " << std::string( tmphist->GetTitle() ) - << std::endl; - resMultiPixelXHist_ [ ii ][ jj ][ kk ] = tmphist; - resMultiPixelXGen_ [ ii ][ jj ][ kk ] = new SimpleHistogramGenerator( tmphist ); - - sprintf( histo, "hy%d1%02d%d%d", detType_, ii+1, jj+1, kk+1 ); - sprintf( title, "cotbeta %.1f-%.1f cotalpha %.2f-%.2f qbin %d npixel>1 Y", - cotbetaLowEdge_ + ii*cotbetaBinWidth_ , cotbetaLowEdge_ + (ii+1)*cotbetaBinWidth_, - cotalphaLowEdge_ +jj*cotalphaBinWidth_, cotalphaLowEdge_ +(jj+1)*cotalphaBinWidth_, - kk+1 ); - std::cout << "Debug: histo=" << std::string(histo) << " title=" << std::string(title) - << std::endl; - // - tmphist = (TH1F*) file_->Get( Form( "%s%s" , rootdir, histo ) ); - if ( !tmphist ) { - status_ = 3; - return; + //--- If verbose, print various info... + std::cout << std::endl + << "Debug: loading pixel resolution file = " << std::string(filename) << std::endl + << " cotBeta[" << cotbetaLowEdge_ <<","<< cotbetaBinWidth_ <<","<< cotbetaBins_ << "]" << std::endl + << " cotAlpha[" << cotalphaLowEdge_ <<","<< cotalphaBinWidth_ <<","<< cotalphaBins_ << "]" + << std::endl; + + + if ( !ignore_multi ) { + // + //--- Histograms for clusters with multiple pixels hit in a given direction. + // + for( int ii=0; ii1 X", + cotbetaLowEdge_ + ii*cotbetaBinWidth_ , cotbetaLowEdge_ + (ii+1)*cotbetaBinWidth_, + cotalphaLowEdge_ +jj*cotalphaBinWidth_, cotalphaLowEdge_ +(jj+1)*cotalphaBinWidth_, + kk+1 ); + std::cout << "Debug: histo = " << std::string(histo) << " title=" << std::string(title) + << std::endl; + // + tmphist = (TH1F*) file_->Get( Form( "%s%s" , rootdir, histo ) ); + if ( !tmphist ) { + status_ = 2; + std::cout << "Debug: failed to find histogram=" << std::string( histo ) << std::endl; + return; + } + std::cout << "Debug: found histo with title = " << std::string( tmphist->GetTitle() ) + << std::endl << std::endl; + resMultiPixelXHist_ [ ii ][ jj ][ kk ] = tmphist; + resMultiPixelXGen_ [ ii ][ jj ][ kk ] = new SimpleHistogramGenerator( tmphist ); + + + sprintf( histo, "hy%d1%02d%d%d", detType_, ii+1, jj+1, kk+1 ); + sprintf( title, "cotbeta %.1f-%.1f cotalpha %.2f-%.2f qbin %d npixel>1 Y", + cotbetaLowEdge_ + ii*cotbetaBinWidth_ , cotbetaLowEdge_ + (ii+1)*cotbetaBinWidth_, + cotalphaLowEdge_ +jj*cotalphaBinWidth_, cotalphaLowEdge_ +(jj+1)*cotalphaBinWidth_, + kk+1 ); + std::cout << "Debug: histo = " << std::string(histo) << " title=" << std::string(title) + << std::endl; + // + tmphist = (TH1F*) file_->Get( Form( "%s%s" , rootdir, histo ) ); + if ( !tmphist ) { + status_ = 3; + std::cout << "Debug: failed to find histogram=" << std::string( histo ) << std::endl; + return; + } + std::cout << "Debug: found histo with title = " << std::string( tmphist->GetTitle() ) + << std::endl << std::endl; + resMultiPixelYHist_ [ ii ][ jj ][ kk ] = tmphist; + resMultiPixelYGen_ [ ii ][ jj ][ kk ] = new SimpleHistogramGenerator( tmphist ); } - std::cout << "Debug: found histo with title = " << std::string( tmphist->GetTitle() ) - << std::endl; - resMultiPixelYHist_ [ ii ][ jj ][ kk ] = tmphist; - resMultiPixelYGen_ [ ii ][ jj ][ kk ] = new SimpleHistogramGenerator( tmphist ); } } - } - + // + } // if (not ignore multi) + + // + //--- Histograms for clusters where only a single pixel was hit in a given direction. + // for( int ii=0; ii ( "isBarrel" ); + int detType = (isBarrel) ? 1 : 0; // 1 for barrel, 0 for forward (or could we just promote bool into int...?) //--- Resolution file names. theBigPixelResolutionFileName = config.getParameter( "BigPixelResolutionFile" ); theEdgePixelResolutionFileName = config.getParameter( "EdgePixelResolutionFile" ); theRegularPixelResolutionFileName = config.getParameter( "RegularPixelResolutionFile" ); + //--- Create the resolution histogram objects, which will load the histograms // and initialize random number generators. - // &&& TODO: check status, throw exceptions here! // + int status = 0; theRegularPixelResolutions = std::make_shared( theRegularPixelResolutionFileName.c_str(), "" ); + if (( status = theRegularPixelResolutions->status()) != 0 ) { + throw cms::Exception("PixelTemplateSmearerBase:") + << " constructing PixelResolutionHistograms file " << theRegularPixelResolutionFileName + << " failed with status = " << status << std::endl; + } theBigPixelResolutions = - std::make_shared( theBigPixelResolutionFileName.c_str(), "" ); - // new PixelResolutionHistograms( theBigPixelResolutionFileName.c_str(), "" ); + std::make_shared( theBigPixelResolutionFileName.c_str(), "", detType, (!isBarrel), false, true ); // can miss qBin + if (( status = theBigPixelResolutions->status()) != 0 ) { + throw cms::Exception("PixelTemplateSmearerBase:") + << " constructing PixelResolutionHistograms file " << theBigPixelResolutionFileName + << " failed with status = " << status << std::endl; + } theEdgePixelResolutions = - std::make_shared( theEdgePixelResolutionFileName.c_str(), "" ); - // new PixelResolutionHistograms( theEdgePixelResolutionFileName.c_str(), "" ); + std::make_shared( theEdgePixelResolutionFileName.c_str(), "", detType, false, true, true ); // can miss both single & qBin + if (( status = theEdgePixelResolutions->status()) != 0 ) { + throw cms::Exception("PixelTemplateSmearerBase:") + << " constructing PixelResolutionHistograms file " << theEdgePixelResolutionFileName + << " failed with status = " << status << std::endl; + } + //--- Merging info. @@ -94,11 +110,10 @@ PixelTemplateSmearerBase::PixelTemplateSmearerBase( //--- Load template with ID=templateId from a local ascii file. templateId = config.getParameter ( "templateId" ); if ( templateId > 0 ) { - if ( !SiPixelTemplate::pushfile(templateId, thePixelTemp_) ) - { - throw cms::Exception("PixelTemplateSmearerPlugin:") - <<"SiPixel Template " << templateId << " Not Loaded Correctly!"<