/////////////////////////////////////////////////////////////////////////////// /// \file fresnel.cc /// /// \brief Extracts the transmission factor versus angle /// /// \author P G Jones /// /// REVISION HISTORY:\n /// 2014-07-21 : P G Jones - Moved to rat-tools validation.\n /// 2016-10-19 : M Stringer - Changes to how MCTracks are accessed (PR #1508). // 2018-02-10 : R Lane - change to function arguments necessary for ROOT 6 compatibility /// /// \details The transmission factor versus angle is extracted /// /////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include void fresnel(std::string event_file, std::string outfile) { RAT::DU::DSReader* dsReader = new RAT::DU::DSReader(event_file); TFile *outtfile = new TFile(outfile.c_str(),"RECREATE"); TH1D* temp = new TH1D( "temp", "Temp", 180, -90.0, 90.0 ); TH1D* transmission = new TH1D( "transmission", "Transmission factor", 180, -90.0, 90.0 ); transmission->SetXTitle( "Incident angle [degrees]" ); transmission->SetYTitle( "Transmission factor" ); for( size_t iEntry = 0; iEntry < dsReader->GetEntryCount(); iEntry++ ) { const RAT::DS::Entry& rDS = dsReader->GetEntry( iEntry ); const RAT::DS::MC& rMC = rDS.GetMC(); std::vector mcTrackIDs = rMC.GetMCTrackIDs(); for( size_t iTrack = 0; iTrack < mcTrackIDs.size(); iTrack++ ) { const RAT::DS::MCTrack& rMCTrack = rMC.GetMCTrack( mcTrackIDs.at(iTrack) ); if( rMCTrack.GetPDGCode() != 0 ) continue; const double startDir = acos( rMCTrack.GetMCTrackStep( 0 ).GetMomentum().Unit().Dot( TVector3( 1.0, 0.0, 0.0 ) ) ) / 3.14 * 180.0; temp->Fill( startDir ); const RAT::DS::MCTrackStep& lastStep = rMCTrack.GetMCTrackStep( rMCTrack.GetMCTrackStepCount() - 1 ); if( lastStep.GetPosition().x() > 0.0 ) { const double endDir = acos( lastStep.GetMomentum().Unit().Dot( TVector3( 1.0, 0.0, 0.0 ) ) ) / 3.14 * 180.0; transmission->Fill( startDir ); } } } transmission->Divide( temp ); outtfile->cd(); transmission->Write(); outtfile->Close(); delete outtfile; delete dsReader; }