diff --git a/UserTools/EventSelector/EventSelector.cpp b/UserTools/EventSelector/EventSelector.cpp index 80c3dd5d3..2f353fee5 100644 --- a/UserTools/EventSelector/EventSelector.cpp +++ b/UserTools/EventSelector/EventSelector.cpp @@ -46,6 +46,7 @@ bool EventSelector::Initialise(std::string configfile, DataModel &data){ m_variables.Get("SaveStatusToStore", fSaveStatusToStore); m_variables.Get("IsMC",fIsMC); m_variables.Get("RecoPDG",fRecoPDG); + m_variables.Get("CutConfiguration",fCutConfigurationName); if (!fIsMC){fMCFVCut = false; fMCPMTVolCut = false; fMCMRDCut = false; fMCPiKCut = false; fMCIsMuonCut = false; fMCIsElectronCut = false; fMCIsSingleRingCut = false; fMCIsMultiRingCut = false; fMCProjectedMRDHit = false; fMCEnergyCut = false; fPromptTrigOnly = false;} @@ -69,6 +70,9 @@ bool EventSelector::Initialise(std::string configfile, DataModel &data){ m_data->CStore.Get("ChannelNumToTankPMTSPEChargeMap",ChannelNumToTankPMTSPEChargeMap); + m_data->CStore.Set("CutConfiguration",fCutConfigurationName); + + return true; } diff --git a/UserTools/EventSelector/EventSelector.h b/UserTools/EventSelector/EventSelector.h index cecbbc299..3e65cd47f 100644 --- a/UserTools/EventSelector/EventSelector.h +++ b/UserTools/EventSelector/EventSelector.h @@ -237,6 +237,7 @@ class EventSelector: public Tool { bool fIsMC; int fTriggerWord; int fRecoPDG; + std::string fCutConfigurationName; bool get_mrd = false; double pmt_time = 0; diff --git a/UserTools/Factory/Factory.cpp b/UserTools/Factory/Factory.cpp index 23bd35bef..706d3e4f1 100644 --- a/UserTools/Factory/Factory.cpp +++ b/UserTools/Factory/Factory.cpp @@ -156,6 +156,7 @@ if (tool=="LAPPDDataDecoder") ret=new LAPPDDataDecoder; if (tool=="PythonScript") ret=new PythonScript; if (tool=="ReweightEventsGenie") ret=new ReweightEventsGenie; if (tool=="FilterLAPPDEvents") ret=new FilterLAPPDEvents; +if (tool=="FilterEvents") ret=new FilterEvents; if (tool=="Stage1DataBuilder") ret=new Stage1DataBuilder; return ret; } diff --git a/UserTools/FilterEvents/FilterEvents.cpp b/UserTools/FilterEvents/FilterEvents.cpp new file mode 100644 index 000000000..3d3912524 --- /dev/null +++ b/UserTools/FilterEvents/FilterEvents.cpp @@ -0,0 +1,140 @@ +#include "FilterEvents.h" + +FilterEvents::FilterEvents():Tool(){} + + +bool FilterEvents::Initialise(std::string configfile, DataModel &data){ + + /////////////////// Useful header /////////////////////// + if(configfile!="") m_variables.Initialise(configfile); // loading config file + //m_variables.Print(); + + m_data= &data; //assigning transient data pointer + ///////////////////////////////////////////////////////////////// + + m_variables.Get("verbosity",verbosity); + m_variables.Get("FilteredFilesBasename",FilteredFilesBasename); + m_variables.Get("SavePath",SavePath); + + matched = 0; + + FilteredEvents = new BoostStore(false,2); + + std::string EventSelectorCutConfiguration; + m_data->CStore.Get("CutConfiguration",EventSelectorCutConfiguration); + FilterName = EventSelectorCutConfiguration; + + FilteredEvents->Header->Set("FilteredEvent",true); + FilteredEvents->Header->Set("FilterName",FilterName); + + return true; +} + + +bool FilterEvents::Execute(){ + + std::map dataStreams; + int runNumber, eventNumber, localEventNumber, partNumber; + m_data->Stores["ANNIEEvent"]->Get("DataStreams",dataStreams); + m_data->Stores["ANNIEEvent"]->Get("RunNumber",runNumber); + m_data->Stores["ANNIEEvent"]->Get("EventNumber",eventNumber); + m_data->Stores["ANNIEEvent"]->Get("LocalEventNumber",localEventNumber); + m_data->Stores["ANNIEEvent"]->Get("PartNumber",partNumber); + + + bool pass_filter = false; + m_data->Stores.at("RecoEvent")->Get("EventCutStatus", pass_filter); + + if (pass_filter){ + this->SetAndSaveEvent(); + matched++; + } + + return true; +} + + +bool FilterEvents::Finalise(){ + + FilteredEvents->Close(); + FilteredEvents->Delete(); + delete FilteredEvents; + std::cout<<"Number of matched run numbers, part numbers, and (local) event numbers: "< DataStreams; + std::string MRDTriggerType; + std::map MRDLoopbackTDC; + TriggerClass TriggerData; + BeamStatus BeamStatus; + std::map>* TDCData; + std::map> *Hits, *AuxHits; + std::map> RawAcqSize; + std::map>> RecoADCData, RecoAuxADCData; + PsecData LAPPDData; + + std::map> *NewTDCData = new std::map>; + std::map> *NewHits = new std::map>; + std::map> *NewAuxHits = new std::map>; + + // Get and Set all variables in the event to the new booststore + m_data->Stores["ANNIEEvent"]->Get("AuxHits",AuxHits); + for (auto&& entry : (*AuxHits)){ + NewAuxHits->emplace(entry.first,entry.second); + } + FilteredEvents->Set("AuxHits",NewAuxHits,true); + + m_data->Stores["ANNIEEvent"]->Get("BeamStatus",BeamStatus); FilteredEvents->Set("BeamStatus",BeamStatus); + m_data->Stores["ANNIEEvent"]->Get("CTCTimestamp",CTCTimestamp); FilteredEvents->Set("CTCTimestamp",CTCTimestamp); + m_data->Stores["ANNIEEvent"]->Get("DataStreams",DataStreams); FilteredEvents->Set("DataStreams",DataStreams); + m_data->Stores["ANNIEEvent"]->Get("EventNumber",EventNumber); FilteredEvents->Set("EventNumber",EventNumber); + m_data->Stores["ANNIEEvent"]->Get("EventTimeLAPPD",EventTimeLAPPD); FilteredEvents->Set("EventTimeLAPPD",EventTimeLAPPD); + m_data->Stores["ANNIEEvent"]->Get("EventTimeMRD",EventTimeMRD); FilteredEvents->Set("EventTimeMRD",EventTimeMRD); + m_data->Stores["ANNIEEvent"]->Get("EventTimeTank",EventTimeTank); FilteredEvents->Set("EventTimeTank",EventTimeTank); + m_data->Stores["ANNIEEvent"]->Get("Hits",Hits); + for (auto&& entry : (*Hits)){ + NewHits->emplace(entry.first,entry.second); + } + FilteredEvents->Set("Hits",NewHits,true); + +/* + m_data->Stores["ANNIEEvent"]->Get("LAPPDData",LAPPDData); FilteredEvents->Set("LAPPDData",LAPPDData); + m_data->Stores["ANNIEEvent"]->Get("LAPPDOffset",LAPPDOffset); FilteredEvents->Set("LAPPDOffset",LAPPDOffset); +*/ + m_data->Stores["ANNIEEvent"]->Get("LocalEventNumber",LocalEventNumber); FilteredEvents->Set("LocalEventNumber",LocalEventNumber); + m_data->Stores["ANNIEEvent"]->Get("MRDLoopbackTDC",MRDLoopbackTDC); FilteredEvents->Set("MRDLoopbackTDC",MRDLoopbackTDC); + m_data->Stores["ANNIEEvent"]->Get("MRDTriggerType",MRDTriggerType); FilteredEvents->Set("MRDTriggerType",MRDTriggerType); + m_data->Stores["ANNIEEvent"]->Get("PartNumber",PartNumber); FilteredEvents->Set("PartNumber",PartNumber); + m_data->Stores["ANNIEEvent"]->Get("RawAcqSize",RawAcqSize); FilteredEvents->Set("RawAcqSize",RawAcqSize); + m_data->Stores["ANNIEEvent"]->Get("RecoADCData",RecoADCData); FilteredEvents->Set("RecoADCData",RecoADCData); + m_data->Stores["ANNIEEvent"]->Get("RecoAuxADCData",RecoAuxADCData); FilteredEvents->Set("RecoAuxADCData",RecoAuxADCData); + m_data->Stores["ANNIEEvent"]->Get("RunNumber",RunNumber); FilteredEvents->Set("RunNumber",RunNumber); + m_data->Stores["ANNIEEvent"]->Get("RunStartTime",RunStartTime); FilteredEvents->Set("RunStartTime",RunStartTime); + m_data->Stores["ANNIEEvent"]->Get("RunType",RunType); FilteredEvents->Set("RunType",RunType); + m_data->Stores["ANNIEEvent"]->Get("SubrunNumber",SubrunNumber); FilteredEvents->Set("SubrunNumber",SubrunNumber); + m_data->Stores["ANNIEEvent"]->Get("TDCData",TDCData); + for (auto&& entry : (*TDCData)){ + NewTDCData->emplace(entry.first,entry.second); + } + + FilteredEvents->Set("TDCData",NewTDCData,true); + m_data->Stores["ANNIEEvent"]->Get("TriggerData",TriggerData); FilteredEvents->Set("TriggerData",TriggerData); + m_data->Stores["ANNIEEvent"]->Get("TriggerExtended",TriggerExtended); FilteredEvents->Set("TriggerExtended",TriggerExtended); + m_data->Stores["ANNIEEvent"]->Get("TriggerWord",TriggerWord); FilteredEvents->Set("TriggerWord",TriggerWord); + + std::string Filename = SavePath + "/" + FilteredFilesBasename + "_" + FilterName; + + if (verbosity>0) std::cout<<"Filename is "<Save(Filename); + FilteredEvents->Delete(); + +} diff --git a/UserTools/FilterEvents/FilterEvents.h b/UserTools/FilterEvents/FilterEvents.h new file mode 100644 index 000000000..4d88282c9 --- /dev/null +++ b/UserTools/FilterEvents/FilterEvents.h @@ -0,0 +1,52 @@ +#ifndef FilterEvents_H +#define FilterEvents_H + +#include +#include + +#include "Tool.h" + +#include "ADCPulse.h" +#include "PsecData.h" +#include "Hit.h" + +/** + * \class FilterEvents + * + * This is a blank template for a Tool used by the script to generate a new custom tool. Please fill out the description and author information. +* +* $Author: B.Richards $ +* $Date: 2019/05/28 10:44:00 $ +* Contact: b.richards@qmul.ac.uk +*/ +class FilterEvents: public Tool { + + + public: + + FilterEvents(); ///< Simple constructor + bool Initialise(std::string configfile,DataModel &data); ///< Initialise Function for setting up Tool resources. @param configfile The path and name of the dynamic configuration file to read in. @param data A reference to the transient data class used to pass information between Tools. + bool Execute(); ///< Execute function used to perform Tool purpose. + bool Finalise(); ///< Finalise function used to clean up resources. + + void SetAndSaveEvent(); + + private: + + std::string FilterName; + std::string FilteredFilesBasename; + std::string SavePath; + int verbosity; + BoostStore* FilteredEvents = nullptr; + int matched; + + int v_error = 0; + int v_warning = 1; + int v_message = 2; + int v_debug = 3; + int vv_debug = 4; + +}; + + +#endif diff --git a/UserTools/FilterEvents/README.md b/UserTools/FilterEvents/README.md new file mode 100644 index 000000000..626a17d5d --- /dev/null +++ b/UserTools/FilterEvents/README.md @@ -0,0 +1,26 @@ +# FilterEvents + +The `FilterEvents` tool reads in ANNIEEvent BoostStore files and saves them to a Filtered output BoostStore files in case selected cuts were passed for a given event. The cuts themselves are defined in the `EventSelector` tool and official filters should be defined in the `configfiles/Filters/` directory. + +## Data + +The `FilterEvents` tool reads in the complete `ANNIEEvent` BoostStore file and saves all the objects to a new, filtered output BoostStore file. + +* Input data: `ANNIEEvent` BoostStore (typically loaded with the `LoadANNIEEvent` tool) +* Output data: `ANNIEEvent` BoostStore, saved to a new file. Only events which passed the cuts specified in the `EventSelector` tool are saved to this output BoostStore file + +Within the output BoostStore file, a separate flag indicates that the events have been filtered. This flag is a Boolean and is called "FilteredEvent". In addition, the FilterName is also saved to the output BoostStore: + +* `FilteredEvent (bool)`: indicates whether the object is part of a filtered output BoostStore file +* `FilterName (string)`: The name of the applied filter in the `EventSelector` tool. + +## Configuration + +`FilterEvents` uses the following configuration variables: + +``` +verbosity 2 #how much logging output do you want? +FilteredFilesBasename FilteredEvents #base name of the BoostStore output files + #the name of the Filter will be appended automatically to this basename +SavePath /path/to/output/ #where should the output files be stored +``` diff --git a/UserTools/LoadANNIEEvent/LoadANNIEEvent.cpp b/UserTools/LoadANNIEEvent/LoadANNIEEvent.cpp index 44c12418a..c0185d63d 100644 --- a/UserTools/LoadANNIEEvent/LoadANNIEEvent.cpp +++ b/UserTools/LoadANNIEEvent/LoadANNIEEvent.cpp @@ -271,13 +271,15 @@ bool LoadANNIEEvent::Execute() { if ((int)current_entry_ != offset_evnum) m_data->Stores["ANNIEEvent"]->Delete(); //ensures that we can access pointers without problems m_data->Stores["ANNIEEvent"]->GetEntry(current_entry_); - if (!m_data->Stores["ANNIEEvent"]->Has("LocalEventNumber")){ m_data->Stores["ANNIEEvent"]->Set("LocalEventNumber",current_entry_); } + bool has_local = (m_data->Stores["ANNIEEvent"]->Has("LocalEventNumber")); + bool has_global = (m_data->Stores["ANNIEEvent"]->Has("EventNumber")); + if (!has_local){ m_data->Stores["ANNIEEvent"]->Set("LocalEventNumber",current_entry_);} ++current_entry_; - if (global_evnr && !m_data->Stores["ANNIEEvent"]->Has("LocalEventNumber")){ m_data->Stores["ANNIEEvent"]->Set("EventNumber",global_ev); } - global_ev++; + if (global_evnr && !has_local){ m_data->Stores["ANNIEEvent"]->Set("EventNumber",global_ev); } + global_ev++; if ( current_entry_ >= total_entries_in_file_ ) { ++current_file_; diff --git a/UserTools/Unity.h b/UserTools/Unity.h index 107493137..7fab6b155 100644 --- a/UserTools/Unity.h +++ b/UserTools/Unity.h @@ -164,4 +164,5 @@ #include "PythonScript.h" #include "ReweightEventsGenie.h" #include "FilterLAPPDEvents.h" +#include "FilterEvents.h" #include "Stage1DataBuilder.h" diff --git a/configfiles/BeamClusterAnalysis/PhaseIITreeMakerConfig b/configfiles/BeamClusterAnalysis/PhaseIITreeMakerConfig index 127319f9a..eee2e9cb4 100644 --- a/configfiles/BeamClusterAnalysis/PhaseIITreeMakerConfig +++ b/configfiles/BeamClusterAnalysis/PhaseIITreeMakerConfig @@ -13,4 +13,5 @@ MCTruth_fill 0 Reco_fill 0 RecoDebug_fill 0 muonTruthRecoDiff_fill 0 - +IsData 1 +HasGenie 0 diff --git a/configfiles/FilterEvents/ClusterClassifiersConfig b/configfiles/FilterEvents/ClusterClassifiersConfig new file mode 100644 index 000000000..752200268 --- /dev/null +++ b/configfiles/FilterEvents/ClusterClassifiersConfig @@ -0,0 +1 @@ +verbosity 0 diff --git a/configfiles/FilterEvents/ClusterFinderConfig b/configfiles/FilterEvents/ClusterFinderConfig new file mode 100644 index 000000000..337d7fc2e --- /dev/null +++ b/configfiles/FilterEvents/ClusterFinderConfig @@ -0,0 +1,12 @@ +# ClusterFinder Config File + +verbosity 0 +HitStore Hits #Either MCHits or Hits (accessed in ANNIEEvent store) +OutputFile BeamRun_ClusterFinder_DefaultOutput #Output root prefix name for the current run +ClusterFindingWindow 100 # in ns, size of the window used to "clusterize" +AcqTimeWindow 70000 # in ns, size of the acquisition window +ClusterIntegrationWindow 100 # in ns, all hits with +/- 1/2 of this window are considered in the cluster +MinHitsPerCluster 5 # group of hits are considered clusters above this amount of hits +end_of_window_time_cut 0.95 # from o to 1, length of the window you want to loop over with respect to acq. window (1 for full window, 0.95 for 95% from the start) +Plots2D 0 #Draw 2D charge-vs-time plots? +ChankeyToPMTIDMap ./configfiles/EventDisplay/Data-RecoEvent/Chankey_WCSimID.dat diff --git a/configfiles/FilterEvents/FilterEventsConfig b/configfiles/FilterEvents/FilterEventsConfig new file mode 100644 index 000000000..be8fd03a6 --- /dev/null +++ b/configfiles/FilterEvents/FilterEventsConfig @@ -0,0 +1,5 @@ +# FilterEvents config file + +verbosity 2 +FilteredFilesBasename FilteredEvents_R2630 +SavePath . diff --git a/configfiles/FilterEvents/FindMrdTracksConfig b/configfiles/FilterEvents/FindMrdTracksConfig new file mode 100644 index 000000000..5ba5e8f77 --- /dev/null +++ b/configfiles/FilterEvents/FindMrdTracksConfig @@ -0,0 +1,12 @@ +# FindMrdTracks Config File +# all variables retrieved with m_variables.Get() must be defined here! + +verbosity 0 +IsData 1 +OutputDirectory . +OutputFile STEC_MRDTracks_cluster40ns +DrawTruthTracks 0 # whether to add MC Truth track info for drawing in MrdPaddlePlot Tool + ## note you need to run that tool to actually view the tracks! +WriteTracksToFile 0 # should the track information be written to a ROOT-file? +SelectTriggerType 0 #should the loaded data be filtered by trigger type? +TriggerType Beam #options: Cosmic, Beam, No Loopback diff --git a/configfiles/FilterEvents/LoadANNIEEventConfig b/configfiles/FilterEvents/LoadANNIEEventConfig new file mode 100644 index 000000000..e156c4b29 --- /dev/null +++ b/configfiles/FilterEvents/LoadANNIEEventConfig @@ -0,0 +1,4 @@ +verbose 0 +FileForListOfInputs ./configfiles/FilterEvents/my_inputs.txt +EventOffset 0 +GlobalEvNr 1 diff --git a/configfiles/FilterEvents/README.md b/configfiles/FilterEvents/README.md new file mode 100644 index 000000000..d8fcaf99e --- /dev/null +++ b/configfiles/FilterEvents/README.md @@ -0,0 +1,38 @@ +# FilterEvents toolchain + +*********************** +# Description +********************** + +The `FilterEvents` toolchain uses cuts from the `EventSelector` tool to filter out events passing the selected cuts. The filtered events are then saved to a new dedicated output BoostStore that only contains the filtered events. The output BoostStore file will contain all the variables from the `ANNIEEvent` BoostStore and can be used in a toolchain like a regular processed data file. + +Filters that define the specific event selection cuts should be defined in the `configfiles/Filters/` directory. Currently the following filters are defined: + +* NeutrinoCandidate +* DirtCandidate +* Throughgoing +* BeamTrigger +* CosmicTrigger + +Each filter is defined by a unique name, which is passed on to the `FilterEvents` tool via the common `CStore`. The variable is then used as a part of the output BoostStore file. This guarantees that the output BoostStore will contain the name of the official Filter and it is easily recognizable which filter was used for a specific file. + +************************ +# ToolsConfig +************************ + +The following tools are in the `FilterEvents` toolchain: + +``` +myLoadANNIEEvent LoadANNIEEvent ./configfiles/FilterEvents/LoadANNIEEventConfig +myLoadGeometry LoadGeometry ./configfiles/LoadGeometry/LoadGeometryConfig +myTimeClustering TimeClustering configfiles/FilterEvents/TimeClusteringConfig +myFindMrdTracks FindMrdTracks configfiles/FilterEvents/FindMrdTracksConfig +myClusterFinder ClusterFinder ./configfiles/FilterEvents/ClusterFinderConfig +myClusterClassifiers ClusterClassifiers ./configfiles/FilterEvents/ClusterClassifiersConfig +myEventSelector EventSelector ./configfiles/Filters/NeutrinoCandidateFilter +myFilterEvents FilterEvents ./configfiles/FilterEvents/FilterEventsConfig +``` + +The `EventSelector` row can be adjusted if a different filter should be used. + +New filters can be defined in the `configfiles/Filters` directory. However, old filters should not be changed in any way to preserve the uniqueness of filters. If a filter needs to be updated, one should rather define a new filter with a unique name, e.g. `NeutrinoCandidate_v2` for updated neutrino candidate cuts. diff --git a/configfiles/FilterEvents/TimeClusteringConfig b/configfiles/FilterEvents/TimeClusteringConfig new file mode 100644 index 000000000..e778247fc --- /dev/null +++ b/configfiles/FilterEvents/TimeClusteringConfig @@ -0,0 +1,13 @@ +#TimeClustering config file + +verbosity 0 +MinDigitsForTrack 3 +MaxMrdSubEventDuration 30 +MinSubeventTimeSep 30 +MakeMrdDigitTimePlot 0 +LaunchTApplication 0 +IsData 1 +#OutputROOTFile TimeClustering_MRDTest28_cluster40ns +OutputROOTFile STEC_TimeClusteringOut +MapChankey_WCSimID ./configfiles/SimpleTankEnergyCalibrator/MRD_Chankey_WCSimID.dat + diff --git a/configfiles/FilterEvents/ToolChainConfig b/configfiles/FilterEvents/ToolChainConfig new file mode 100644 index 000000000..3914a3384 --- /dev/null +++ b/configfiles/FilterEvents/ToolChainConfig @@ -0,0 +1,26 @@ +#ToolChain dynamic setup file + +##### Runtime Parameters ##### +verbose 1 ## Verbosity level of ToolChain +error_level 0 # 0= do not exit, 1= exit on unhandled errors only, 2= exit on unhandled errors and handled errors +attempt_recover 1 ## 1= will attempt to finalise if an execute fails +remote_port 24002 +IO_Threads 1 ## Number of threads for network traffic (~ 1/Gbps) + +###### Logging ##### +log_mode Interactive # Interactive=cout , Remote= remote logging system "serservice_name Remote_Logging" , Local = local file log; +log_local_path ./log +log_service LogStore + + +###### Service discovery ##### Ignore these settings for local analysis +service_publish_sec -1 +service_kick_sec -1 + +##### Tools To Add ##### +Tools_File configfiles/FilterEvents/ToolsConfig ## list of tools to run and their config files + +##### Run Type ##### +Inline -1 ## number of Execute steps in program, -1 infinite loop that is ended by user +Interactive 0 ## set to 1 if you want to run the code interactively + diff --git a/configfiles/FilterEvents/ToolsConfig b/configfiles/FilterEvents/ToolsConfig new file mode 100644 index 000000000..fb87974e1 --- /dev/null +++ b/configfiles/FilterEvents/ToolsConfig @@ -0,0 +1,8 @@ +myLoadANNIEEvent LoadANNIEEvent ./configfiles/FilterEvents/LoadANNIEEventConfig +myLoadGeometry LoadGeometry ./configfiles/LoadGeometry/LoadGeometryConfig +myTimeClustering TimeClustering configfiles/FilterEvents/TimeClusteringConfig +myFindMrdTracks FindMrdTracks configfiles/FilterEvents/FindMrdTracksConfig +myClusterFinder ClusterFinder ./configfiles/FilterEvents/ClusterFinderConfig +myClusterClassifiers ClusterClassifiers ./configfiles/FilterEvents/ClusterClassifiersConfig +myEventSelector EventSelector ./configfiles/Filters/NeutrinoCandidateFilter +myFilterEvents FilterEvents ./configfiles/FilterEvents/FilterEventsConfig diff --git a/configfiles/FilterEvents/my_inputs.txt b/configfiles/FilterEvents/my_inputs.txt new file mode 100644 index 000000000..104d12651 --- /dev/null +++ b/configfiles/FilterEvents/my_inputs.txt @@ -0,0 +1,40 @@ +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p0 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p1 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p2 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p3 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p4 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p5 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p6 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p7 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p8 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p9 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p10 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p11 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p12 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p13 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p14 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p15 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p16 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p17 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p18 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p19 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p20 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p21 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p22 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p23 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p24 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p25 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p26 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p27 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p28 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p29 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p30 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p31 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p32 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p33 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p34 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p35 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p36 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p37 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p38 +/pnfs/annie/persistent/processed/processed_hits/R2630/ProcessedRawData_TankAndMRDAndCTC_R2630S0p39 diff --git a/configfiles/Filters/BeamTriggerFilter b/configfiles/Filters/BeamTriggerFilter new file mode 100644 index 000000000..c64479202 --- /dev/null +++ b/configfiles/Filters/BeamTriggerFilter @@ -0,0 +1,30 @@ +# EventSelector config file + +verbosity 0 +MCPMTVolCut 0 +MCFVCut 0 +MCMRDCut 0 +MCPiKCut 0 +MCIsMuonCut 0 +MCIsElectronCut 0 +MCIsSingleRingCut 0 +MCIsMultiRingCut 0 +MCProjectedMRDHit 0 +MCEnergyCut 0 +Emin 0 #Minimum energy in MeV +Emax 1000 #Maximum energy in MeV +MRDRecoCut 0 +RecoPMTVolCut 0 +RecoFVCut 0 +NHitCut 0 +NHitmin 4 #Minimum number of hit digits +PMTMRDCoincCut 0 +PMTMRDOffset 745 +PromptTrigOnly 0 +TriggerWord 5 +SaveStatusToStore 1 +NoVeto 0 +Veto 0 +ThroughGoing 0 +IsMC 0 #MC or Data? +CutConfiguration BeamTrigger diff --git a/configfiles/Filters/CosmicTriggerFilter b/configfiles/Filters/CosmicTriggerFilter new file mode 100644 index 000000000..b868f86bc --- /dev/null +++ b/configfiles/Filters/CosmicTriggerFilter @@ -0,0 +1,30 @@ +# EventSelector config file + +verbosity 0 +MCPMTVolCut 0 +MCFVCut 0 +MCMRDCut 0 +MCPiKCut 0 +MCIsMuonCut 0 +MCIsElectronCut 0 +MCIsSingleRingCut 0 +MCIsMultiRingCut 0 +MCProjectedMRDHit 0 +MCEnergyCut 0 +Emin 0 #Minimum energy in MeV +Emax 1000 #Maximum energy in MeV +MRDRecoCut 0 +RecoPMTVolCut 0 +RecoFVCut 0 +NHitCut 0 +NHitmin 4 #Minimum number of hit digits +PMTMRDCoincCut 0 +PMTMRDOffset 745 +PromptTrigOnly 0 +TriggerWord 36 +SaveStatusToStore 1 +NoVeto 0 +Veto 0 +ThroughGoing 0 +IsMC 0 #MC or Data? +CutConfiguration CosmicTrigger diff --git a/configfiles/Filters/DirtCandidateFilter b/configfiles/Filters/DirtCandidateFilter new file mode 100644 index 000000000..bf16f9a78 --- /dev/null +++ b/configfiles/Filters/DirtCandidateFilter @@ -0,0 +1,30 @@ +# EventSelector config file + +verbosity 0 +MCPMTVolCut 0 +MCFVCut 0 +MCMRDCut 0 +MCPiKCut 0 +MCIsMuonCut 0 +MCIsElectronCut 0 +MCIsSingleRingCut 0 +MCIsMultiRingCut 0 +MCProjectedMRDHit 0 +MCEnergyCut 0 +Emin 0 #Minimum energy in MeV +Emax 1000 #Maximum energy in MeV +MRDRecoCut 0 +RecoPMTVolCut 0 +RecoFVCut 0 +NHitCut 0 +NHitmin 4 #Minimum number of hit digits +PMTMRDCoincCut 1 +PMTMRDOffset 745 +PromptTrigOnly 0 +TriggerWord 5 +SaveStatusToStore 1 +NoVeto 0 +Veto 1 +ThroughGoing 0 +IsMC 0 #MC or Data? +CutConfiguration DirtCandidate diff --git a/configfiles/Filters/NeutrinoCandidateFilter b/configfiles/Filters/NeutrinoCandidateFilter new file mode 100644 index 000000000..ea56f2fbb --- /dev/null +++ b/configfiles/Filters/NeutrinoCandidateFilter @@ -0,0 +1,30 @@ +# EventSelector config file + +verbosity 0 +MCPMTVolCut 0 +MCFVCut 0 +MCMRDCut 0 +MCPiKCut 0 +MCIsMuonCut 0 +MCIsElectronCut 0 +MCIsSingleRingCut 0 +MCIsMultiRingCut 0 +MCProjectedMRDHit 0 +MCEnergyCut 0 +Emin 0 #Minimum energy in MeV +Emax 1000 #Maximum energy in MeV +MRDRecoCut 0 +RecoPMTVolCut 0 +RecoFVCut 0 +NHitCut 0 +NHitmin 4 #Minimum number of hit digits +PMTMRDCoincCut 1 +PMTMRDOffset 745 +PromptTrigOnly 0 +TriggerWord 5 +SaveStatusToStore 1 +NoVeto 1 +Veto 0 +ThroughGoing 0 +IsMC 0 #MC or Data? +CutConfiguration NeutrinoCandidate diff --git a/configfiles/Filters/ThroughgoingFilter b/configfiles/Filters/ThroughgoingFilter new file mode 100644 index 000000000..44d42c291 --- /dev/null +++ b/configfiles/Filters/ThroughgoingFilter @@ -0,0 +1,30 @@ +# EventSelector config file + +verbosity 0 +MCPMTVolCut 0 +MCFVCut 0 +MCMRDCut 0 +MCPiKCut 0 +MCIsMuonCut 0 +MCIsElectronCut 0 +MCIsSingleRingCut 0 +MCIsMultiRingCut 0 +MCProjectedMRDHit 0 +MCEnergyCut 0 +Emin 0 #Minimum energy in MeV +Emax 1000 #Maximum energy in MeV +MRDRecoCut 0 +RecoPMTVolCut 0 +RecoFVCut 0 +NHitCut 0 +NHitmin 4 #Minimum number of hit digits +PMTMRDCoincCut 1 +PMTMRDOffset 745 +PromptTrigOnly 0 +TriggerWord -1 +SaveStatusToStore 1 +NoVeto 0 +Veto 1 +ThroughGoing 1 +IsMC 0 #MC or Data? +CutConfiguration Throughgoing