void replay_hms_scalers(Int_t RunNumber=0, Int_t MaxEvent=0) { // Get RunNumber and MaxEvent if not provided. if(RunNumber == 0) { cout << "Enter a Run Number (-1 to exit): "; cin >> RunNumber; if( RunNumber<=0 ) return; } if(MaxEvent == 0) { cout << "\nNumber of Events to analyze: "; cin >> MaxEvent; if(MaxEvent == 0) { cerr << "...Invalid entry\n"; exit; } } // Create file name patterns. const char* RunFileNamePattern = "hms_all_%05d.dat"; vector<TString> pathList; pathList.push_back("."); pathList.push_back("./raw"); pathList.push_back("./raw/../raw.copiedtotape"); pathList.push_back("./cache"); const char* ROOTFileNamePattern = "ROOTfiles/hms_replay_scalers_%d_%d.root"; // Load global parameters // Add variables to global list. gHcParms->Define("gen_run_number", "Run Number", RunNumber); gHcParms->AddString("g_ctp_database_filename", "DBASE/HMS/STD/standard.database"); // Load varibles from files to global list. gHcParms->Load(gHcParms->GetString("g_ctp_database_filename"), RunNumber); // g_ctp_parm_filename and g_decode_map_filename should now be defined. gHcParms->Load(gHcParms->GetString("g_ctp_kinematics_filename"), RunNumber); gHcParms->Load(gHcParms->GetString("g_ctp_parm_filename")); gHcParms->Load(gHcParms->GetString("g_ctp_calib_filename")); // Load params for HMS trigger configuration gHcParms->Load("PARAM/TRIG/thms.param"); // Load the Hall C style detector map gHcDetectorMap = new THcDetectorMap(); gHcDetectorMap->Load("MAPS/HMS/DETEC/STACK/hms_stack.map"); // Add trigger apparatus THaApparatus* TRG = new THcTrigApp("T", "TRG"); gHaApps->Add(TRG); // Add trigger detector to trigger apparatus THcTrigDet* hms = new THcTrigDet("hms", "HMS Trigger Information"); TRG->AddDetector(hms); // Add event handler for EPICS events THaEpicsEvtHandler *hcepics = new THaEpicsEvtHandler("epics", "HC EPICS event type 180"); gHaEvtHandlers->Add(hcepics); // Add event handler for scaler events THcScalerEvtHandler *hscaler = new THcScalerEvtHandler("H","Hall C scaler event type 129"); hscaler->AddEvtType(2); hscaler->AddEvtType(129); hscaler->SetDelayedType(129); hscaler->SetUseFirstEvent(kTRUE); gHaEvtHandlers->Add(hscaler); // Add event handler for DAQ configuration event THcConfigEvtHandler *hconfig = new THcConfigEvtHandler("hconfig", "Hall C configuration event handler"); gHaEvtHandlers->Add(hconfig); // Set up the analyzer - we use the standard one, // but this could be an experiment-specific one as well. // The Analyzer controls the reading of the data, executes // tests/cuts, loops over Acpparatus's and PhysicsModules, // and executes the output routines. THcAnalyzer* analyzer = new THcAnalyzer; // A simple event class to be output to the resulting tree. // Creating your own descendant of THaEvent is one way of // defining and controlling the output. THaEvent* event = new THaEvent; // Define the run(s) that we want to analyze. // We just set up one, but this could be many. //THaRun* run = new THaRun( pathList, Form(RunFileNamePattern, RunNumber) ); THcRun* run = new THcRun( pathList, Form(RunFileNamePattern, RunNumber) ); // Eventually need to learn to skip over, or properly analyze // the pedestal events run->SetEventRange(1, MaxEvent); // Physics Event number, does not // include scaler or control events. run->SetNscan(1); run->SetDataRequired(0x7); run->Print(); // Define the analysis parameters TString ROOTFileName = Form(ROOTFileNamePattern, RunNumber, MaxEvent); analyzer->SetCountMode(2); // 0 = counter is # of physics triggers // 1 = counter is # of all decode reads // 2 = counter is event number analyzer->SetEvent(event); // Set EPICS event type analyzer->SetEpicsEvtType(180); // Define crate map analyzer->SetCrateMapFileName("MAPS/db_cratemap.dat"); // Define output ROOT file analyzer->SetOutFile(ROOTFileName.Data()); // Define DEF-file analyzer->SetOdefFile("DEF-files/HMS/EPICS/epics_short.def"); // Define cuts file analyzer->SetCutFile("DEF-files/HMS/SCALERS/hscaler_cuts.def"); // optional // File to record accounting information for cuts analyzer->SetSummaryFile(Form("REPORT_OUTPUT/HMS/SCALERS/summary_scalers_%d_%d.report", RunNumber, MaxEvent)); // optional // Start the actual analysis. analyzer->Process(run); // Create report file from template analyzer->PrintReport("TEMPLATES/HMS/SCALERS/hscalers.template", Form("REPORT_OUTPUT/HMS/SCALERS/replay_hms_scalers_%d_%d.report", RunNumber, MaxEvent)); // optional }