diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d31d932..a78db879 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required( VERSION 3.1 ) # Define the project cmake_policy( SET CMP0048 NEW ) # version in project() -project( locust_mc VERSION 2.7.2) +project( locust_mc VERSION 2.8.0) list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/Scarab/cmake ) diff --git a/Source/IO/LMCEvent.cc b/Source/IO/LMCEvent.cc index 337926c3..dd4be47b 100644 --- a/Source/IO/LMCEvent.cc +++ b/Source/IO/LMCEvent.cc @@ -24,6 +24,7 @@ namespace locust { fStartFrequencies.push_back( aTrack.StartFrequency ); fEndFrequencies.push_back( aTrack.EndFrequency ); + fAvgFrequencies.push_back( aTrack.AvgFrequency ); fTrackPowers.push_back( aTrack.TrackPower ); fStartTimes.push_back( aTrack.StartTime ); fTrackLengths.push_back( aTrack.TrackLength ); diff --git a/Source/IO/LMCEvent.hh b/Source/IO/LMCEvent.hh index 0cb9ffbb..afe16c27 100644 --- a/Source/IO/LMCEvent.hh +++ b/Source/IO/LMCEvent.hh @@ -35,6 +35,7 @@ namespace locust std::vector fStartFrequencies; std::vector fEndFrequencies; + std::vector fAvgFrequencies; std::vector fTrackPowers; std::vector fStartTimes; std::vector fEndTimes; diff --git a/Source/IO/LMCRootTreeWriter.cc b/Source/IO/LMCRootTreeWriter.cc index ca06ed52..5ad80b91 100644 --- a/Source/IO/LMCRootTreeWriter.cc +++ b/Source/IO/LMCRootTreeWriter.cc @@ -58,6 +58,7 @@ namespace locust aTree->Branch("ntracks", &anEvent->fNTracks, "ntracks/I"); aTree->Branch("StartFrequencies", "std::vector", &anEvent->fStartFrequencies); aTree->Branch("EndFrequencies", "std::vector", &anEvent->fEndFrequencies); + aTree->Branch("AvgFrequencies", "std::vector", &anEvent->fAvgFrequencies); aTree->Branch("StartTimes", "std::vector", &anEvent->fStartTimes); aTree->Branch("EndTimes", "std::vector", &anEvent->fEndTimes); aTree->Branch("TrackLengths", "std::vector", &anEvent->fTrackLengths); diff --git a/Source/IO/LMCTrack.hh b/Source/IO/LMCTrack.hh index 85d3bf2e..da4a450f 100644 --- a/Source/IO/LMCTrack.hh +++ b/Source/IO/LMCTrack.hh @@ -34,6 +34,7 @@ namespace locust double TrackLength = -99.; double StartFrequency = -99.; double EndFrequency = -99.; + double AvgFrequency = -99.; double LOFrequency = -99.; double TrackPower = -99.; double Slope = -99.; diff --git a/Source/Kassiopeia/LMCCyclotronRadiationExtractor.cc b/Source/Kassiopeia/LMCCyclotronRadiationExtractor.cc index a2fb853a..4b27c1bf 100644 --- a/Source/Kassiopeia/LMCCyclotronRadiationExtractor.cc +++ b/Source/Kassiopeia/LMCCyclotronRadiationExtractor.cc @@ -60,6 +60,7 @@ namespace locust #ifdef ROOT_FOUND if (bStart) { + fStartingIndex = index; fInterface->aTrack.StartTime = tTime; fInterface->aTrack.StartFrequency = aFinalParticle.GetCyclotronFrequency(); double tX = aFinalParticle.GetPosition().X(); @@ -72,6 +73,10 @@ namespace locust { fInterface->aTrack.EndTime = tTime; fInterface->aTrack.EndFrequency = aFinalParticle.GetCyclotronFrequency(); + unsigned nElapsedSamples = index - fStartingIndex; + fInterface->aTrack.AvgFrequency = ( fInterface->aTrack.AvgFrequency * nElapsedSamples + aFinalParticle.GetCyclotronFrequency() ) / ( nElapsedSamples + 1); + fInterface->aTrack.TrackLength = tTime - fInterface->aTrack.StartTime; + fInterface->aTrack.Slope = (fInterface->aTrack.EndFrequency - fInterface->aTrack.StartFrequency) / (fInterface->aTrack.TrackLength); } #endif diff --git a/Source/Kassiopeia/LMCCyclotronRadiationExtractor.hh b/Source/Kassiopeia/LMCCyclotronRadiationExtractor.hh index fad5a630..4fbf91c0 100644 --- a/Source/Kassiopeia/LMCCyclotronRadiationExtractor.hh +++ b/Source/Kassiopeia/LMCCyclotronRadiationExtractor.hh @@ -60,6 +60,7 @@ namespace locust FieldCalculator* fFieldCalculator; kl_interface_ptr_t fInterface; unsigned fSampleIndex; + unsigned fStartingIndex; }; diff --git a/Source/Kassiopeia/LMCEventHold.cc b/Source/Kassiopeia/LMCEventHold.cc index d98cc7d7..4beab0c2 100644 --- a/Source/Kassiopeia/LMCEventHold.cc +++ b/Source/Kassiopeia/LMCEventHold.cc @@ -16,12 +16,14 @@ namespace locust EventHold::EventHold() : fTruthOutputFilename("LocustEventProperties.root"), + fAccumulateTruthInfo( false ), fInterface( KLInterfaceBootstrapper::get_instance()->GetInterface() ) { } EventHold::EventHold( const EventHold& aOrig ) : KSComponent(), fTruthOutputFilename("LocustEventProperties.root"), + fAccumulateTruthInfo( false ), fInterface( aOrig.fInterface ) { } @@ -66,6 +68,10 @@ namespace locust { fTruthOutputFilename = aParam["truth-output-filename"]().as_string(); } + if ( aParam.has( "accumulate-truth-info" ) ) + { + fAccumulateTruthInfo = aParam["accumulate-truth-info"]().as_bool(); + } return true; @@ -94,7 +100,17 @@ namespace locust #ifdef ROOT_FOUND FileWriter* aRootTreeWriter = RootTreeWriter::get_instance(); aRootTreeWriter->SetFilename(sFileName); - aRootTreeWriter->OpenFile("RECREATE"); + if (fAccumulateTruthInfo) + { + // This option should be used when running pileup. We will need to + // figure out how to explicitly increment the event ID, given that the + // same (identical) simulation is being run multiple times in this case. + aRootTreeWriter->OpenFile("UPDATE"); + } + else + { + aRootTreeWriter->OpenFile("RECREATE"); + } fInterface->anEvent->AddTrack( fInterface->aTrack ); aRootTreeWriter->WriteEvent( fInterface->anEvent ); aRootTreeWriter->WriteRunParameters(fInterface->aRunParameter); diff --git a/Source/Kassiopeia/LMCEventHold.hh b/Source/Kassiopeia/LMCEventHold.hh index 3f02d4ff..88042d3f 100644 --- a/Source/Kassiopeia/LMCEventHold.hh +++ b/Source/Kassiopeia/LMCEventHold.hh @@ -35,6 +35,7 @@ namespace locust bool ConfigureByInterface(); bool Configure( const scarab::param_node& aParam ); std::string fTruthOutputFilename; + bool fAccumulateTruthInfo; public: