//************************************************************************ // SiCtValidationModule.cc // --------------------- // AC++ module for validation of tracking results // // M Herndon // Johns Hopkins University // Sep 21 2003 //*************************************************************************/ //----------------------- // This Class's Header -- //----------------------- #include "TrackingMods/SiCtValidationModule.hh" //----------------------- // Colborating Headers -- //----------------------- #include "HepTuple/HepHBookFileManager.h" #include "TrackingObjects/Storable/CdfTrackView.hh" #include "TrackingSI/PathFinder/SiWaferIntersectionSet.hh" #include "TrackingSI/PathFinder/SmarterSiPathFinder.hh" #include "Alignment/SvxBeam.hh" #include "Alignment/CotBeam.hh" #include "VertexObjects/ZVertexColl.hh" #include "TrackingObjects/Tracks/CorCotTrack.hh" using std::cout; using std::endl; //---------------- // Constructors -- //---------------- SiCtValidationModule::SiCtValidationModule(const char* const theName, const char* const theDescription ) :HepHistModule( theName, theDescription ), _fillTrackInfo("FillTrackInfo",this,false), _passProcessNameToView( "PassProcessName", this, false ), _processNameForView( "ProcessName", this, "" ), _beamLineFromUsedSet("BeamLineFromUsedSet",this,true), _useSiExpected("UseSiExpected",this,true), _svxBeam(0),_cotBeam(0), _siExpected(0) { commands()->append(&_fillTrackInfo); commands()->append( &_passProcessNameToView ); commands()->append( &_processNameForView ); commands()->append( &_beamLineFromUsedSet ); commands()->append( &_useSiExpected ); _siExpected = new SiExpected(this); _siExpected->appendCommands( commands()); _fillTrackInfo.addDescription("\t Fill track information"); _passProcessNameToView.addDescription("\t Find views by process name: Needed for defTracks"); _processNameForView.addDescription("\t Process name that created the view"); _beamLineFromUsedSet.addDescription("\t Load beam line using the used set method: faster!"); _useSiExpected.addDescription("\t Use SiExpected"); } //-------------- // Destructor -- //-------------- SiCtValidationModule::~SiCtValidationModule( ) { } //-------------- // Operations -- //-------------- AppResult SiCtValidationModule::bookHistograms( void ) { // Show parameters // Initializations CdfDetector *cdfDetector=CdfDetector::instance(); const AbsSiDetectorNode *siDetector; siDetector = cdfDetector->getSiDetector(); _siPathFinder = new SmarterSiPathFinder(siDetector); // Book Histograms HepFileManager* _manager = fileManager(); assert (0 != _manager); _algo = &_manager->hist1D("Algo",32,0.5,32.5); _siEffPt = &_manager->histProf("SiEffVsPtProfile",100,0.0,10.0,0.0,1.0); _siEffPt_svxii = &_manager->histProf("SiSVXIIEffVsPtProfile",100,0.0,10.0,0.0,1.0); // Outside in _oIPt = &_manager->hist1D("OIPt",100,0.0,10.0); _oIPhi = &_manager->hist1D("OIPhi",100,0.0,6.29); _oIEta = &_manager->hist1D("OIEta",100,-2.5,2.5); _oID0C = &_manager->hist1D("OID0",100,-0.05,0.05); _oIZ0 = &_manager->hist1D("OIZ0",100,-100.0,100.0); _oIZ0C = &_manager->hist1D("OIZ0C",100,-0.5,0.5); _oIChi2 = &_manager->hist1D("OIChi2PerDOF",100,0.0,10.0); _oID0Pull = &_manager->hist1D("OID0Pull",100,-10.0,10.0); _oIZ0Pull = &_manager->hist1D("OIZ0CPull",100,-10.0,10.0); _oISiAHitFnd = &_manager->hist1D("OISiHitsAxial",9,-0.5,8.5); _oISiAHitMis = &_manager->hist1D("OISiHitsMissedAxial",9,-0.5,8.5); _oISiSHitFnd = &_manager->hist1D("OISiHitsStereo",9,-0.5,8.5); _oISiSHitMis = &_manager->hist1D("OISiHitsMissedStereo",9,-0.5,8.5); _oISiAHitFnd_svxii = &_manager->hist1D("OISiHitsSVXIIAxial",9,-0.5,8.5); _oISiAHitMis_svxii = &_manager->hist1D("OISiHitsSVXIIMissedAxial",9,-0.5,8.5); _oISiSHitFnd_svxii = &_manager->hist1D("OISiHitsSVXIIStereo",9,-0.5,8.5); _oISiSHitMis_svxii = &_manager->hist1D("OISiHitsSVXIIMissedStereo",9,-0.5,8.5); _oICtAHitFnd = &_manager->hist1D("OICTHitsAxial",49,-0.5,48.5); _oICtSHitFnd = &_manager->hist1D("OICTHitsStereo",49,-0.5,48.5); _oID0CPhi = &_manager->histProf("OID0VsPhiProfile",100,0.0,6.29,-0.02,0.02); // OI sepecials _oIZ0CWith90Z = &_manager->hist1D("OIZ0C90Z",100,-0.5,0.5); _oIZ0PullWith90Z = &_manager->hist1D("OIZ0With90ZPull",100,-10.0,10.0); // Inside out _iOPt = &_manager->hist1D("IOPt",100,0.0,10.0); _iOPhi = &_manager->hist1D("IOPhi",100,0.0,6.29); _iOEta = &_manager->hist1D("IOEta",100,-2.5,2.5); _iOD0C = &_manager->hist1D("IOD0",100,-0.05,0.05); _iOZ0 = &_manager->hist1D("IOZ0",100,-100.0,100.0); _iOZ0C = &_manager->hist1D("IOZ0C",100,-0.5,0.5); _iOChi2 = &_manager->hist1D("IOChi2PerDOF",100,0.0,10.0); _iOD0Pull = &_manager->hist1D("IOD0Pull",100,-10.0,10.0); _iOZ0Pull = &_manager->hist1D("IOZ0CPull",100,-10.0,10.0); _iOSiAHitFnd = &_manager->hist1D("IOSiHitsAxial",9,-0.5,8.5); _iOSiAHitMis = &_manager->hist1D("IOSiHitsMissedAxial",9,-0.5,8.5); _iOSiSHitFnd = &_manager->hist1D("IOSiHitsStereo",9,-0.5,8.5); _iOSiSHitMis = &_manager->hist1D("IOSiHitsMissedStereo",9,-0.5,8.5); _iOCtAHitFnd = &_manager->hist1D("IOCTHitsAxial",49,-0.5,48.5); _iOCtSHitFnd = &_manager->hist1D("IOCTHitsStereo",49,-0.5,48.5); _iOD0CPhi = &_manager->histProf("IOD0VsPhiProfile",100,0.0,6.29,-0.02,0.02); // IO sepecials _iOZ0CWith90Z = &_manager->hist1D("IOZ0C90Z",100,-0.5,0.5); _iOZ0PullWith90Z = &_manager->hist1D("IOZ0C90ZPull",100,-10.0,10.0); // COT _cTPt = &_manager->hist1D("CTPt",100,0.0,10.0); _cTPhi = &_manager->hist1D("CTPhi",100,0.0,6.29); _cTEta = &_manager->hist1D("CTEta",100,-2.5,2.5); _cTD0C = &_manager->hist1D("CTD0",100,-0.5,0.5); _cTZ0 = &_manager->hist1D("CTZ0",100,-100.0,100.0); _cTZ0C = &_manager->hist1D("CTZ0C",100,-5.0,5.0); _cTChi2 = &_manager->hist1D("CTChi2PerDOF",100,0.0,10.0); _cTD0Pull = &_manager->hist1D("CTD0Pull",100,-10.0,10.0); _cTZ0Pull = &_manager->hist1D("CTZ0CPull",100,-10.0,10.0); _cTSiAHitFnd = &_manager->hist1D("CTSiHitsAxial",9,-0.5,8.5); _cTSiAHitMis = &_manager->hist1D("CTSiHitsMissedAxial",9,-0.5,8.5); _cTSiSHitFnd = &_manager->hist1D("CTSiHitsStereo",9,-0.5,8.5); _cTSiSHitMis = &_manager->hist1D("CTSiHitsMissedStereo",9,-0.5,8.5); _cTCtAHitFnd = &_manager->hist1D("CTCTHitsAxial",49,-0.5,48.5); _cTCtSHitFnd = &_manager->hist1D("CTCTHitsStereo",49,-0.5,48.5); _cTD0CPhi = &_manager->histProf("CTD0VsPhiProfile",100,0.0,6.29,-0.2,0.2); // CT sepecials _cTSLD0C = &_manager->hist1D("CTD0SL",100,-0.5,0.5); _cTHLD0C = &_manager->hist1D("CTD0HL",100,-0.5,0.5); _cTSLD0Pull = &_manager->hist1D("CTD0PullSL",100,-10.0,10.0); _cTHLD0Pull = &_manager->hist1D("CTD0PullHL",100,-10.0,10.0); _cTCorZ0Pull = &_manager->hist1D("CTCorZ0CPull",100,-10.0,10.0); _cTCorD0Pull = &_manager->hist1D("CTCorD0Pull",100,-10.0,10.0); _cTSLCorD0Pull = &_manager->hist1D("CTCorD0PullSL",100,-10.0,10.0); _cTHLCorD0Pull = &_manager->hist1D("CTCorD0PullHL",100,-10.0,10.0); _cTSLD0CPhi = &_manager->histProf("CTD0VsPhiProfileSL",100,0.0,6.29,-0.2,0.2); _cTHLD0CPhi = &_manager->histProf("CTD0VsPhiProfileHL",100,0.0,6.29,-0.2,0.2); _cTSLCtAHitFnd = &_manager->hist1D("CTCTHitsAxialSL",49,-0.5,48.5); _cTSLCtSHitFnd = &_manager->hist1D("CTCTHitsStereoSL",49,-0.5,48.5); _cTHLCtAHitFnd = &_manager->hist1D("CTCTHitsAxialHL",49,-0.5,48.5); _cTHLCtSHitFnd = &_manager->hist1D("CTCTHitsStereoHL",49,-0.5,48.5); _cTCtA2HitFnd = &_manager->hist1D("CTCTHitsAxialSL2",13,-0.5,12.5); _cTCtA4HitFnd = &_manager->hist1D("CTCTHitsAxialSL4",13,-0.5,12.5); _cTCtA6HitFnd = &_manager->hist1D("CTCTHitsAxialSL6",13,-0.5,12.5); _cTCtA8HitFnd = &_manager->hist1D("CTCTHitsAxialSL8",13,-0.5,12.5); _cTCtS1HitFnd = &_manager->hist1D("CTCTHitsStereoSL1",13,-0.5,12.5); _cTCtS3HitFnd = &_manager->hist1D("CTCTHitsStereoSL3",13,-0.5,12.5); _cTCtS5HitFnd = &_manager->hist1D("CTCTHitsStereoSL5",13,-0.5,12.5); _cTCtS7HitFnd = &_manager->hist1D("CTCTHitsStereoSL7",13,-0.5,12.5); _cTCtASegFnd = &_manager->hist1D("CTCTSegmentsAxial",5,-0.5,4.5); _cTCtSSegFnd = &_manager->hist1D("CTCTSegmentsStereo",5,-0.5,4.5); _cTSLCtA2HitFnd = &_manager->hist1D("CTCTHitsAxialSL2SL",13,-0.5,12.5); _cTSLCtA4HitFnd = &_manager->hist1D("CTCTHitsAxialSL4SL",13,-0.5,12.5); _cTSLCtA6HitFnd = &_manager->hist1D("CTCTHitsAxialSL6SL",13,-0.5,12.5); _cTSLCtA8HitFnd = &_manager->hist1D("CTCTHitsAxialSL8SL",13,-0.5,12.5); _cTSLCtS1HitFnd = &_manager->hist1D("CTCTHitsStereoSL1SL",13,-0.5,12.5); _cTSLCtS3HitFnd = &_manager->hist1D("CTCTHitsStereoSL3SL",13,-0.5,12.5); _cTSLCtS5HitFnd = &_manager->hist1D("CTCTHitsStereoSL5SL",13,-0.5,12.5); _cTSLCtS7HitFnd = &_manager->hist1D("CTCTHitsStereoSL7SL",13,-0.5,12.5); _cTHLCtA2HitFnd = &_manager->hist1D("CTCTHitsAxialSL2HL",13,-0.5,12.5); _cTHLCtA4HitFnd = &_manager->hist1D("CTCTHitsAxialSL4HL",13,-0.5,12.5); _cTHLCtA6HitFnd = &_manager->hist1D("CTCTHitsAxialSL6HL",13,-0.5,12.5); _cTHLCtA8HitFnd = &_manager->hist1D("CTCTHitsAxialSL8HL",13,-0.5,12.5); _cTHLCtS1HitFnd = &_manager->hist1D("CTCTHitsStereoSL1HL",13,-0.5,12.5); _cTHLCtS3HitFnd = &_manager->hist1D("CTCTHitsStereoSL3HL",13,-0.5,12.5); _cTHLCtS5HitFnd = &_manager->hist1D("CTCTHitsStereoSL5HL",13,-0.5,12.5); _cTHLCtS7HitFnd = &_manager->hist1D("CTCTHitsStereoSL7HL",13,-0.5,12.5); _cTSLCtASegFnd = &_manager->hist1D("CTCTSegmentsAxialSL",5,-0.5,4.5); _cTSLCtSSegFnd = &_manager->hist1D("CTCTSegmentsStereoSL",5,-0.5,4.5); _cTHLCtASegFnd = &_manager->hist1D("CTCTSegmentsAxialHL",5,-0.5,4.5); _cTHLCtSSegFnd = &_manager->hist1D("CTCTSegmentsStereoHL",5,-0.5,4.5); // Silcion standalone _sAPt = &_manager->hist1D("SAPt",100,0.0,10.0); _sAPhi = &_manager->hist1D("SAPhi",100,0.0,6.29); _sAEta = &_manager->hist1D("SAEta",100,-2.5,2.5); _sAD0C = &_manager->hist1D("SAD0",100,-0.05,0.05); _sAZ0 = &_manager->hist1D("SAZ0",100,-100.0,100.0); _sAZ0C = &_manager->hist1D("SAZ0C",100,-0.5,0.5); _sAChi2 = &_manager->hist1D("SAChi2PerDOF",100,0.0,10.0); _sAD0Pull = &_manager->hist1D("SAD0Pull",100,-10.0,10.0); _sAZ0Pull = &_manager->hist1D("SAZ0CPull",100,-10.0,10.0); _sASiAHitFnd = &_manager->hist1D("SASiHitsAxial",9,-0.5,8.5); _sASiAHitMis = &_manager->hist1D("SASiHitsMissedAxial",9,-0.5,8.5); _sASiSHitFnd = &_manager->hist1D("SASiHitsStereo",9,-0.5,8.5); _sASiSHitMis = &_manager->hist1D("SASiHitsMissedStereo",9,-0.5,8.5); _sAD0CPhi = &_manager->histProf("SAD0VsPhiProfile",100,0.0,6.29,-0.02,0.02); // OI sepecials _sAZ0CWith90Z = &_manager->hist1D("SAZ0C90Z",100,-0.5,0.5); _sAZ0PullWith90Z = &_manager->hist1D("SAZ0C90ZPull",100,-10.0,10.0); return AppResult::OK; } AppResult SiCtValidationModule::beginRun( AbsEvent* aRun ) { if (_beamLineFromUsedSet.value()) { _svxBeam = new SvxBeam(); _cotBeam = new CotBeam(); } else { _svxBeam = new SvxBeam("default"); _cotBeam = new CotBeam("default"); } _svxBeam->loadRun(); _svxBeam->printAll(); _cotBeam->loadRun(); _cotBeam->printAll(); //Adding SiChipOn stuff here... for the lack of a better spot. if (_useSiExpected.value()) { bool getbeginrun = _siExpected->beginRun(); } return AppResult::OK; } AppResult SiCtValidationModule::fillHistograms( AbsEvent* anEvent ) { // Get Z vertex from ZVertexColl _goodSvxBeam = false; _vZ = -999.0; _vX = 0.0; _vY = 0.0; EventRecord::ConstIterator iterz(anEvent,"ZVertexColl","ZVertexColl"); if (iterz.is_valid()) { ConstHandle vertexSet(iterz); float sumPt = 0.0; for(ZVertexColl::const_iterator iZVertex=vertexSet->contents().begin();iZVertex!=vertexSet->contents().end(); iZVertex++) { if(iZVertex->getSumPt() > sumPt) { sumPt = iZVertex->getSumPt(); _vZ = iZVertex->zPosition(); } } } if (_svxBeam->isValid()) { HepPoint3D zVertex = _svxBeam->position(0.0); _vX = zVertex.x(); _vY = zVertex.y(); if (fabs(_vX) > 0.00001 || fabs(_vY) > 0.00001 ) _goodSvxBeam = true; } if (_vZ != -999.0) { if (_svxBeam->isValid()&&_goodSvxBeam) { HepPoint3D zVertex = _svxBeam->position(_vZ); _vX = zVertex.x(); _vY = zVertex.y(); } else if (_cotBeam->isValid()) { HepPoint3D zVertex = _cotBeam->position(_vZ); _vX = zVertex.x(); _vY = zVertex.y(); } else { _vX = 0.0; _vY = 0.0; } } CdfTrackView_h trackView; if ( _passProcessNameToView.value()) { CdfTrackView::defTracks( trackView, _processNameForView.value() ); } else { CdfTrackView::defTracks( trackView ); } CdfTrackView::iterator trackIter; CdfTrackView::CollType& tracks = trackView->contents(); // Loop over tracks and analyze and histogram them for (trackIter = tracks.begin(); trackIter != tracks.end(); ++trackIter) { _currentTrack = new CdfTrack(**trackIter); if (_currentTrack->numCTHitsAx()) { CdfTrack_clnk cotTrackL = CdfTrack_clnk(_currentTrack); if ( cotTrackL->parent().is_nonnull() ) { cotTrackL = cotTrackL->parent(); } _currentCotTrack = new CdfTrack(*cotTrackL); } else { _currentCotTrack = NULL; } _cotAlgo = 0; if (_currentCotTrack) _cotAlgo = _currentCotTrack->algorithm().CotParentAlgo(); if (_cotAlgo == 3) _cotAlgo=0; _algo->accumulate( _currentTrack->algorithm().value()); // Calculate d0 info if (_useSiExpected.value()) fillSiExpected(); // calculate information corrected d0 if (_svxBeam->isValid()&&_goodSvxBeam) { HepPoint3D POrigin = _svxBeam->position(_currentTrack->z0()); // hack to move 4.8.4 beamline to 5.1.0 beamline //POrigin.setX(POrigin.x()-0.0029 + _currentTrack->z0()*2.5e-05); //POrigin.setY(POrigin.y()-0.0055 - _currentTrack->z0()*1.7e-05); //_d0C = _currentTrack->d0WRT(_svxBeam->position(_currentTrack->z0())); _d0C = _currentTrack->d0WRT(POrigin); if (_currentCotTrack) _d0CCot = _currentCotTrack->d0WRT(POrigin); } else if (_cotBeam->isValid()) { HepPoint3D POrigin = _cotBeam->position(_currentTrack->z0()); // hack to move 4.8.4 beamline to 5.1.0 beamline //POrigin.setX(POrigin.x()-0.0029 + _currentTrack->z0()*2.5e-05); //POrigin.setY(POrigin.y()-0.0055 - _currentTrack->z0()*1.7e-05); //_d0C = _currentTrack->d0WRT(_svxBeam->position(_currentTrack->z0())); _d0C = _currentTrack->d0WRT(POrigin); if (_currentCotTrack) _d0CCot = _currentCotTrack->d0WRT(POrigin); } else { _d0CCot = -999.0; _d0C = -999.0; } // calculate information corrected z0 _d0 = _currentTrack->d0(); if ((_svxBeam->isValid()||_cotBeam->isValid())&&_vZ!=-999.0&&_d0 != 0) { double radius = fabs(_currentTrack->getTrajectory().getRadius()); HepPoint3D position = _currentTrack->getTrajectory().getPosition(0.0); double sinTheta = _currentTrack->getTrajectory().getSinTheta(); position.setZ(0); HepPoint3D newPrimary; newPrimary.setX(_vX); newPrimary.setY(_vY); newPrimary.setZ(0); Hep3Vector center = position; center.setMag(radius + _d0); if (_d0 < 0) center = -center; Hep3Vector deltaVector = center - newPrimary; double deltaMag = deltaVector.perp(); double centerMag = center.perp(); double sinAlpha = center.cross( deltaVector ).z() / (centerMag * deltaMag); double s = radius * sinAlpha / sinTheta; _z0C = _currentTrack->getTrajectory().getPosition(s).z() - _vZ; } else { _z0C = -999.0; } if (_currentCotTrack&&(_svxBeam->isValid()||_cotBeam->isValid())&&_vZ!=-999.0&&_d0 != 0) { double radius = fabs(_currentCotTrack->getTrajectory().getRadius()); HepPoint3D position = _currentCotTrack->getTrajectory().getPosition(0.0); double sinTheta = _currentCotTrack->getTrajectory().getSinTheta(); position.setZ(0); HepPoint3D newPrimary; newPrimary.setX(_vX); newPrimary.setY(_vY); newPrimary.setZ(0); Hep3Vector center = position; center.setMag(radius + _d0); if (_d0 < 0) center = -center; Hep3Vector deltaVector = center - newPrimary; double deltaMag = deltaVector.perp(); double centerMag = center.perp(); double sinAlpha = center.cross( deltaVector ).z() / (centerMag * deltaMag); double s = radius * sinAlpha / sinTheta; _z0CCot = _currentCotTrack->getTrajectory().getPosition(s).z() - _vZ; } else { _z0CCot = -999.0; } // OI tracks if (_currentTrack->numSIHits() > 0 && _currentTrack->numCTHitsAx() > 0 &&_currentTrack->algorithm().value()!= 3) { _oIPt->accumulate(_currentTrack->pt()); _oIPhi->accumulate(_currentTrack->phi0()); _oIEta->accumulate(_currentTrack->pseudoRapidity()); _oID0C->accumulate(_d0C); _oIZ0->accumulate(_currentTrack->z0()); _oIZ0C->accumulate(_z0C); if (_currentTrack->numDegreesOfFreedom()>0 ) _oIChi2->accumulate(_currentTrack->chi2SI()/_currentTrack->numDegreesOfFreedom()); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentTrack->sigmaD0()!= 0.0) _oID0Pull->accumulate(_d0C/_currentTrack->sigmaD0()); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]>0.0) if (_currentTrack->sigmaZ0()!= 0.0) _oIZ0Pull->accumulate(_z0C/_currentTrack->sigmaZ0()); _oISiAHitFnd->accumulate(_nalhit); _oISiAHitMis->accumulate(_nalmis); _oISiSHitFnd->accumulate(_nslhit); _oISiSHitMis->accumulate(_nslmis); _oISiAHitFnd_svxii->accumulate(_nalhit_svxii); _oISiAHitMis_svxii->accumulate(_nalmis_svxii); _oISiSHitFnd_svxii->accumulate(_nslhit_svxii); _oISiSHitMis_svxii->accumulate(_nslmis_svxii); _oICtAHitFnd->accumulate(_currentTrack->numCTHitsAx()); _oICtSHitFnd->accumulate(_currentTrack->numCTHitsSt()); _oID0CPhi->accumulate(_currentTrack->phi0(),_d0C); if(_currentTrack->numSIHitsZ()>1) _oIZ0CWith90Z->accumulate(_z0C); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]>0.0) if (_currentTrack->sigmaZ0()!= 0.0&&_currentTrack->numSIHitsZ()>1) _oIZ0PullWith90Z->accumulate(_z0C/_currentTrack->sigmaZ0()); } // IO tracks if (_currentTrack->numSIHits() > 0 && _currentTrack->algorithm().value()== 3) { _iOPt->accumulate(_currentTrack->pt()); _iOPhi->accumulate(_currentTrack->phi0()); _iOEta->accumulate(_currentTrack->pseudoRapidity()); _iOD0C->accumulate(_d0C); _iOZ0->accumulate(_currentTrack->z0()); _iOZ0C->accumulate(_z0C); if (_currentTrack->numDegreesOfFreedom()>0 ) _iOChi2->accumulate(_currentTrack->chi2SI()/_currentTrack->numDegreesOfFreedom()); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentTrack->sigmaD0()!= 0.0) _iOD0Pull->accumulate(_d0C/_currentTrack->sigmaD0()); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]>0.0) if (_currentTrack->sigmaZ0()!= 0.0) _iOZ0Pull->accumulate(_z0C/_currentTrack->sigmaZ0()); _iOSiAHitFnd->accumulate(_nalhit); _iOSiAHitMis->accumulate(_nalmis); _iOSiSHitFnd->accumulate(_nslhit); _iOSiSHitMis->accumulate(_nslmis); _iOCtAHitFnd->accumulate(_currentTrack->numCTHitsAx()); _iOCtSHitFnd->accumulate(_currentTrack->numCTHitsSt()); _iOD0CPhi->accumulate(_currentTrack->phi0(),_d0C); if(_currentTrack->numSIHitsZ()>1) _iOZ0CWith90Z->accumulate(_z0C); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]>0.0) if (_currentTrack->sigmaZ0()!= 0.0&&_currentTrack->numSIHitsZ()>1) _iOZ0PullWith90Z->accumulate(_z0C/_currentTrack->sigmaZ0()); } // COT tracks if (_currentCotTrack&&_currentTrack->algorithm().value()!= 3) { _cTPt->accumulate(_currentCotTrack->pt()); _cTPhi->accumulate(_currentCotTrack->phi0()); _cTEta->accumulate(_currentCotTrack->pseudoRapidity()); _cTD0C->accumulate(_d0CCot); _cTZ0->accumulate(_currentCotTrack->z0()); _cTZ0C->accumulate(_z0CCot); if (_currentCotTrack->numDegreesOfFreedom()>0 ) _cTChi2->accumulate(_currentCotTrack->chi2()/_currentCotTrack->numDegreesOfFreedom()); if (_currentCotTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentCotTrack->sigmaD0()!= 0.0) _cTD0Pull->accumulate(_d0CCot/_currentCotTrack->sigmaD0()); if (_currentCotTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]>0.0) if (_currentCotTrack->sigmaZ0()!= 0.0) _cTZ0Pull->accumulate(_z0CCot/_currentCotTrack->sigmaZ0()); _cTSiAHitFnd->accumulate(_nalhit); _cTSiAHitMis->accumulate(_nalmis); _cTSiSHitFnd->accumulate(_nslhit); _cTSiSHitMis->accumulate(_nslmis); _cTCtAHitFnd->accumulate(_currentCotTrack->numCTHitsAx()); _cTCtSHitFnd->accumulate(_currentCotTrack->numCTHitsSt()); _cTD0CPhi->accumulate(_currentCotTrack->phi0(),_d0CCot); _cTCtA2HitFnd->accumulate(_currentCotTrack->numCTHits(1)); _cTCtA4HitFnd->accumulate(_currentCotTrack->numCTHits(3)); _cTCtA6HitFnd->accumulate(_currentCotTrack->numCTHits(5)); _cTCtA8HitFnd->accumulate(_currentCotTrack->numCTHits(7)); _cTCtS1HitFnd->accumulate(_currentCotTrack->numCTHits(0)); _cTCtS3HitFnd->accumulate(_currentCotTrack->numCTHits(2)); _cTCtS5HitFnd->accumulate(_currentCotTrack->numCTHits(4)); _cTCtS7HitFnd->accumulate(_currentCotTrack->numCTHits(6)); int _numseg = 0; if (_currentCotTrack->numCTHits(1)>0) _numseg++; if (_currentCotTrack->numCTHits(3)>0) _numseg++; if (_currentCotTrack->numCTHits(5)>0) _numseg++; if (_currentCotTrack->numCTHits(7)>0) _numseg++; _cTCtASegFnd->accumulate(_numseg); if (_cotAlgo==1) _cTSLCtASegFnd->accumulate(_numseg); if (_cotAlgo==2) _cTHLCtASegFnd->accumulate(_numseg); _numseg = 0; if (_currentCotTrack->numCTHits(0)>0) _numseg++; if (_currentCotTrack->numCTHits(2)>0) _numseg++; if (_currentCotTrack->numCTHits(4)>0) _numseg++; if (_currentCotTrack->numCTHits(6)>0) _numseg++; _cTCtSSegFnd->accumulate(_numseg); if (_cotAlgo==1) _cTSLCtSSegFnd->accumulate(_numseg); if (_cotAlgo==2) _cTHLCtSSegFnd->accumulate(_numseg); if (_cotAlgo==1) { _cTSLD0C->accumulate(_d0CCot); if (_currentCotTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentCotTrack->sigmaD0()!= 0.0) _cTSLD0Pull->accumulate(_d0CCot/_currentCotTrack->sigmaD0()); _cTSLD0CPhi->accumulate(_currentCotTrack->phi0(),_d0CCot); _cTSLCtAHitFnd->accumulate(_currentCotTrack->numCTHitsAx()); _cTSLCtSHitFnd->accumulate(_currentCotTrack->numCTHitsSt()); _cTSLCtA2HitFnd->accumulate(_currentCotTrack->numCTHits(1)); _cTSLCtA4HitFnd->accumulate(_currentCotTrack->numCTHits(3)); _cTSLCtA6HitFnd->accumulate(_currentCotTrack->numCTHits(5)); _cTSLCtA8HitFnd->accumulate(_currentCotTrack->numCTHits(7)); _cTSLCtS1HitFnd->accumulate(_currentCotTrack->numCTHits(0)); _cTSLCtS3HitFnd->accumulate(_currentCotTrack->numCTHits(2)); _cTSLCtS5HitFnd->accumulate(_currentCotTrack->numCTHits(4)); _cTSLCtS7HitFnd->accumulate(_currentCotTrack->numCTHits(6)); } if (_cotAlgo==2) { _cTHLD0C->accumulate(_d0CCot); if (_currentCotTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentCotTrack->sigmaD0()!= 0.0) _cTHLD0Pull->accumulate(_d0CCot/_currentCotTrack->sigmaD0()); _cTHLD0CPhi->accumulate(_currentCotTrack->phi0(),_d0CCot); _cTHLCtAHitFnd->accumulate(_currentCotTrack->numCTHitsAx()); _cTHLCtSHitFnd->accumulate(_currentCotTrack->numCTHitsSt()); _cTHLCtA2HitFnd->accumulate(_currentCotTrack->numCTHits(1)); _cTHLCtA4HitFnd->accumulate(_currentCotTrack->numCTHits(3)); _cTHLCtA6HitFnd->accumulate(_currentCotTrack->numCTHits(5)); _cTHLCtA8HitFnd->accumulate(_currentCotTrack->numCTHits(7)); _cTHLCtS1HitFnd->accumulate(_currentCotTrack->numCTHits(0)); _cTHLCtS3HitFnd->accumulate(_currentCotTrack->numCTHits(2)); _cTHLCtS5HitFnd->accumulate(_currentCotTrack->numCTHits(4)); _cTHLCtS7HitFnd->accumulate(_currentCotTrack->numCTHits(6)); } if (_nalexp>2 && _nalhit>2)_siEffPt->accumulate(_currentCotTrack->pt(),1.0); if (_nalexp>2 && _nalhit<3)_siEffPt->accumulate(_currentCotTrack->pt(),0.0); if (_nalexp_svxii>2 && _nalhit_svxii>2)_siEffPt_svxii->accumulate(_currentCotTrack->pt(),1.0); if (_nalexp_svxii>2 && _nalhit_svxii<3)_siEffPt_svxii->accumulate(_currentCotTrack->pt(),0.0); CorCotTrack::CorStatus statcor = CorCotTrack::CorTrack(_currentCotTrack,true); if (_currentCotTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentCotTrack->sigmaD0()!= 0.0) _cTCorD0Pull->accumulate(_d0CCot/_currentCotTrack->sigmaD0()); if (_currentCotTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]>0.0) if (_currentCotTrack->sigmaZ0()!= 0.0) _cTCorZ0Pull->accumulate(_z0CCot/_currentCotTrack->sigmaZ0()); if (_cotAlgo==1) { if (_currentCotTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentCotTrack->sigmaD0()!= 0.0) _cTSLCorD0Pull->accumulate(_d0CCot/_currentCotTrack->sigmaD0()); } if (_cotAlgo==2) { if (_currentCotTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentCotTrack->sigmaD0()!= 0.0) _cTHLCorD0Pull->accumulate(_d0CCot/_currentCotTrack->sigmaD0()); } } // SA tracks if (_currentTrack->numCTHitsAx() == 0 ) { _sAPt->accumulate(_currentTrack->pt()); _sAPhi->accumulate(_currentTrack->phi0()); _sAEta->accumulate(_currentTrack->pseudoRapidity()); _sAD0C->accumulate(_d0C); _sAZ0->accumulate(_currentTrack->z0()); _sAZ0C->accumulate(_z0C); if (_currentTrack->numDegreesOfFreedom()>0 ) _sAChi2->accumulate(_currentTrack->chi2()/_currentTrack->numDegreesOfFreedom()); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]>0.0) if (_currentTrack->sigmaD0()!= 0.0) _sAD0Pull->accumulate(_d0C/_currentTrack->sigmaD0()); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]>0.0) if (_currentTrack->sigmaZ0()!= 0.0) _sAZ0Pull->accumulate(_z0C/_currentTrack->sigmaZ0()); _sASiAHitFnd->accumulate(_nalhit); _sASiAHitMis->accumulate(_nalmis); _sASiSHitFnd->accumulate(_nslhit); _sASiSHitMis->accumulate(_nslmis); _sAD0CPhi->accumulate(_currentTrack->phi0(),_d0C); if(_currentTrack->numSIHitsZ()>1) _sAZ0CWith90Z->accumulate(_z0C); if (_currentTrack->getHelixFit().getErrorMatrix()[SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]>0.0) if (_currentTrack->sigmaZ0()!= 0.0&&_currentTrack->numSIHitsZ()>1) _sAZ0PullWith90Z->accumulate(_z0C/_currentTrack->sigmaZ0()); } if (_currentTrack) _currentTrack->destroy(); if (_currentCotTrack) _currentCotTrack->destroy(); _currentTrack = NULL; _currentCotTrack = NULL; } return AppResult::OK; } AppModule* SiCtValidationModule::clone(const char* cloneName) { return new SiCtValidationModule(cloneName,"this is a clone SiCtValidationModule"); } void SiCtValidationModule::fillSiExpected() { std::vector exphits; exphits.clear(); // calculate information si expected _axhitmask = 0; _axexpmask = 0; _axmismask = 0; _sthitmask = 0; _stexpmask = 0; _stmismask = 0; _nalhit = 0; _nslhit = 0; _nalexp = 0; _nslexp = 0; _nalmis = 0; _nslmis = 0; _nalhit_svxii = 0; _nslhit_svxii = 0; _nalexp_svxii = 0; _nslexp_svxii = 0; _nalmis_svxii = 0; _nslmis_svxii = 0; int layer = 0; for(CdfTrack::SiHitIterator hitIter = _currentTrack->beginSIHits(); hitIter != _currentTrack->endSIHits(); ++hitIter) { layer = (*hitIter)->getHalfLad()->getDetectorCode().getLayer(); if ((*hitIter)->pSideHit()) _axhitmask |= (0x1<pSideHit()) _sthitmask |= (0x1<getHelixFit().getErrorMatrix(); double covz0 = covMatrix [SimpleReconstructedTrack::Z0][SimpleReconstructedTrack::Z0]; double covd0 = covMatrix [SimpleReconstructedTrack::D0][SimpleReconstructedTrack::D0]; if( ( covz0 < 0.0) || (covd0 < 0.0) ) { std::cout << "ERROR! Negative diagonal elements! " << " covz0 " << covz0 << " covd0 " << covd0 << " Skipping this track!" <findExpected( *_currentTrack, exphits ) ) { for ( std::vector::iterator expHitIter=exphits.begin(), expHitIterend = exphits.end() ; expHitIter != expHitIterend ; ++expHitIter ) { // Define some bools bool isPhi = (*expHitIter).isPhi; layer = (*expHitIter).digiCode.getLayer(); bool isInt = (*expHitIter).integrated; // fill the masks if (isPhi&&isInt) _axexpmask |= (0x1< 0 ) ) _axmismask |= (0x1< 0 ) ) _stmismask |= (0x1<