#include #include #include "TH1F.h" #include "TFile.h" #include "TStyle.h" #include "TGraph.h" #include "TLine.h" #include "MDrsCalibration.h" //#include "MLogManip.h" #include "MExtralgoSpline.h" #include "MSequence.h" #include "MStatusArray.h" #include "MHCamera.h" #include "MJob.h" #include "MWriteRootFile.h" #include "MHCamera.h" #include "MBadPixelsCam.h" #include "MBadPixelsPix.h" #include "MDirIter.h" #include "MTaskList.h" #include "MFDataPhrase.h" #include "MArrayF.h" #include "MBadPixelsTreat.h" #include "MCalibrateDrsTimes.h" #include "MHSectorVsTime.h" #include "MHCamEvent.h" #include "MExtractTimeAndChargeSpline.h" #include "MFillH.h" #include "MDrsCalibApply.h" #include "MGeomApply.h" #include "MContinue.h" #include "MRawFitsRead.h" #include "MEvtLoop.h" #include "MParList.h" #include "MStatusDisplay.h" #include "MDrsCalibrationTime.h" #include "MH3.h" #include "MGeomCamFACT.h" #include "MCalibrateFact.h" #include "MParameters.h" #include "MWriteAsciiFile.h" #include "MFMagicCuts.h" #include "MMuonSetup.h" #include "MReadMarsFile.h" #include "MHillasCalc.h" #include "MHn.h" #include "MMuonSearchParCalc.h" #include "MMuonCalibParCalc.h" #include "MBinning.h" #include "MImgCleanStd.h" using namespace std; int star( const char *mars_data_file_path = "/fhgfs/groups/app/callisto_star_test/callisto_for_mc_test_output/callisto.root", const char *root_output_file_path = "/fhgfs/groups/app/callisto_star_test/callisto_for_mc_test_output/star.root", const char *status_display_output_path = "/fhgfs/groups/app/callisto_star_test/callisto_for_mc_test_output/star_status_display.root", const char *status_display_title = "star_status_display_title", const char *hillas_txt_file_path = "/fhgfs/groups/app/callisto_star_test/star_hillas.txt", Double_t lvl1=4.0, Double_t lvl2=2.5, Double_t deltat = 17.5) { //Double_t lvl1=7.8, //Double_t lvl2=3.9, // lvl1 = 2.5; // lvl2 = 0.5; // ------------------------------------------------------ gLog.Separator("Star"); gLog << all << "Calculate image parameters of sequence "; gLog << endl; gLog << "mars_data_file_path: " << mars_data_file_path << endl; gLog << "root_output_file_path: " << root_output_file_path << endl; gLog << "status_display_output_path: " << status_display_output_path << endl; gLog << "status_display_title: " << status_display_title << endl; gLog << endl; gLog << "lvl1: " << lvl1 <150 && MNewImagePar.fConcCOG<0.1", "MuonPreCut"); // Filter to calculate further muon parameters // MFDataPhrase fmuon2("(MMuonSearchPar.fRadius*MGeomCam.fConvMm2Deg>0.6) && (MMuonSearchPar.fRadius*MGeomCam.fConvMm2Deg<1.35) &&" // "(MMuonSearchPar.fDeviation*MGeomCam.fConvMm2Deg<0.152)", "MuonSearchCut"); MFDataPhrase fmuon2("MMuonSearchPar.fDeviation*MGeomCam.fConvMm2Deg>0.015 &&" "MMuonSearchPar.fDeviation*MGeomCam.fConvMm2Deg>(MMuonSearchPar.fRadius*MGeomCam.fConvMm2Deg-0.1)*0.15/0.4", "MuonSearchCut"); // Filter to fill the MHMuonPar MFDataPhrase fmuon3("MMuonCalibPar.fArcPhi>190 && MMuonCalibPar.fRelTimeSigma<3.2", "MuonFinalCut"); // Filter to write Muons to Muon tree //MFDataMember fmuon4("MMuonCalibPar.fArcPhi", '>', -0.5, "MuonWriteCut"); // --------------------------------------------------------- MStatusDisplay *d = new MStatusDisplay; MTaskList tlist; MParList plist2; plist2.AddToList(&tlist); plist2.AddToList(&bins1); plist2.AddToList(&bins3); plist2.AddToList(&bins4); plist2.AddToList(&binsM1); plist2.AddToList(&binsM2); plist2.AddToList(&binsM3); plist2.AddToList(&binsM4); plist2.AddToList(&binsM5); plist2.AddToList(&binsM6); plist2.AddToList(&binsM7); plist2.AddToList(&binsM8); plist2.AddToList(&binsM9); MMuonSetup muonsetup; plist2.AddToList(&muonsetup); MEvtLoop loop; loop.SetDisplay(d); loop.SetParList(&plist2); MReadMarsFile read("Events"); read.DisableAutoScheme(); read.AddFile(mars_data_file_path); MContinue cont("MRawEvtHeader.GetTriggerID!=4", "SelectData"); MGeomApply apply; MImgCleanStd clean(lvl1, lvl2); clean.SetMethod(MImgCleanStd::kAbsolute); clean.SetTimeLvl1(deltat);//17.5/*1.3*/); clean.SetTimeLvl2(deltat);//17.5/*1.3*/); clean.SetPostCleanType(3); MHillasCalc hcalc; hcalc.Disable(MHillasCalc::kCalcConc); MH3 hrate("MRawRunHeader.GetFileID"/*, "MRawEvtHeader.GetTriggerID"*/); hrate.SetWeight("1./TMath::Max(MRawRunHeader.GetRunLength,1)"); hrate.SetName("Rate"); hrate.SetTitle("Event rate after cleaning;File Id;Event Rate [Hz];"); hrate.InitLabels(MH3::kLabelsX); hrate.GetHist().SetMinimum(0); MFillH fillR(&hrate, "", "FillRate"); // ------------------ Setup histograms and fill tasks ---------------- MHCamEvent evtC1(0, "Cleaned", "Average signal after Cleaning;;S [phe]"); MHCamEvent evtC2(0, "UsedPix", "Fraction of Events in which Pixels are used;;Fraction"); MHCamEvent evtC3(8, "PulsePos", "Pulse Position of signal after cleaning;;T [ns]"); evtC1.SetErrorSpread(kFALSE); evtC2.SetErrorSpread(kFALSE); evtC2.SetThreshold(0); MFillH fillC1(&evtC1, "MSignalCam", "FillSignalCam"); MFillH fillC2(&evtC2, "MSignalCam", "FillCntUsedPixels"); MFillH fillC3(&evtC3, "MSignalCam", "FillPulsePos"); MFillH fillD1("MHHillas", "MHillas", "FillHillas"); MFillH fillD2("MHHillasExt", "", "FillHillasExt"); MFillH fillD3("MHHillasSrc", "MHillasSrc", "FillHillasSrc"); MFillH fillD4("MHImagePar", "MImagePar", "FillImagePar"); MFillH fillD5("MHNewImagePar", "MNewImagePar", "FillNewImagePar"); MFillH fillD6("MHVsSize", "MHillasSrc", "FillVsSize"); MH3 halpha("MHillasSrc.fDist*MGeomCam.fConvMm2Deg", "fabs(MHillasSrc.fAlpha)"); halpha.SetName("AvsD;Dist;Alpha"); MFillH filla(&halpha); filla.SetNameTab("AvsD"); filla.SetDrawOption("colz"); // ----------------------- Muon Analysis ---------------------- //writem.SetFilter(&fmuon4); MHn mhn1; mhn1.AddHist("MMuonSearchPar.fRadius*MGeomCam.fConvMm2Deg"); mhn1.InitName("MuonRadius"); mhn1.InitTitle("MuonRadius"); mhn1.AddHist("MMuonSearchPar.fDeviation*MGeomCam.fConvMm2Deg"); mhn1.InitName("MuonDeviation"); mhn1.InitTitle("MuonDeviation"); mhn1.AddHist("MMuonSearchPar.fTime"); mhn1.InitName("MuonTime"); mhn1.InitTitle("MuonTime"); mhn1.AddHist("MMuonSearchPar.fTimeRms"); mhn1.InitName("MuonTimeRms"); mhn1.InitTitle("MuonTimeRms"); MHn mhn3; mhn3.AddHist("MMuonSearchPar.fRadius*MGeomCam.fConvMm2Deg","MMuonSearchPar.fDeviation*MGeomCam.fConvMm2Deg"); mhn3.InitName("MuonRadius;MuonRadius;MuonDeviation"); mhn3.InitTitle("MuonRadius"); mhn3.SetDrawOption("colz"); MHn mhn2; mhn2.AddHist("MMuonCalibPar.fArcPhi"); mhn2.InitName("MuonArcPhi"); mhn2.InitTitle("MuonArcPhi"); mhn2.AddHist("MMuonCalibPar.fArcWidth"); mhn2.InitName("MuonArcWidth"); mhn2.InitTitle("MuonArcWidth"); mhn2.AddHist("MMuonCalibPar.fMuonSize"); mhn2.InitName("MuonSize"); mhn2.InitTitle("MuonSize"); mhn2.AddHist("MMuonCalibPar.fRelTimeSigma"); mhn2.InitName("MuonRelTimeSigma"); mhn2.InitTitle("MuonRelTimeSigma"); MHn mhn4; mhn4.AddHist("MMuonCalibPar.fArcPhi","MMuonCalibPar.fArcWidth"); mhn4.InitName("MuonArcPhi;MuonArcPhi;MuonArcWidth"); mhn4.InitTitle("MuonArcPhi"); mhn4.SetDrawOption("colz"); MFillH fillmhn1(&mhn1, "", "FillMuonSearchPar"); MFillH fillmhn2(&mhn2, "", "FillMuonCalibPar"); MFillH fillmhn3(&mhn3, "", "FillMuonDevVsRadius"); MFillH fillmhn4(&mhn4, "", "FillMuonWidthVsPhi"); fillmhn1.SetNameTab("MuonS"); fillmhn3.SetNameTab("DevVsRad"); fillmhn2.SetNameTab("MuonC"); fillmhn4.SetNameTab("WidthVsPhi"); fillmhn2.SetFilter(&fmuon2); fillmhn4.SetFilter(&fmuon2); MMuonSearchParCalc muscalc; //muscalc.SetFilter(&fmuon1); MMuonCalibParCalc mcalc; mcalc.SetFilter(&fmuon2); MFillH fillmuon("MHSingleMuon", "", "FillMuon"); MFillH fillmpar("MHMuonPar", "", "FillMuonPar"); fillmuon.SetFilter(&fmuon2); fillmpar.SetFilter(&fmuon3); fillmuon.SetBit(MFillH::kDoNotDisplay); // --------------------------------------------------------------- MWriteAsciiFile write_ascii_hillas(hillas_txt_file_path, "MHillas"); write_ascii_hillas.AddColumns("MHillasExt"); write_ascii_hillas.AddColumns("MHillasSrc"); MWriteRootFile write(root_output_file_path, "RECREATE", "Image parameters", 2); write.AddContainer("MTime", "Events"); write.AddContainer("MHillas", "Events"); write.AddContainer("MHillasExt", "Events"); write.AddContainer("MHillasSrc", "Events"); write.AddContainer("MImagePar", "Events"); write.AddContainer("MNewImagePar", "Events"); write.AddContainer("MRawEvtHeader", "Events"); write.AddContainer("ThetaSquared", "Events"); write.AddContainer("Disp", "Events"); write.AddContainer("MRawRunHeader", "RunHeaders"); write.AddContainer("MGeomCam", "RunHeaders"); MFDataPhrase fmuonhn("MMuonCalibPar.fRelTimeSigma>=0", "MuonHistCut"); fillmhn2.SetFilter(&fmuonhn); TArrayD param(12); // Parametrization of Disp param[0] = 1.15136; // constant param[8] = 0.0681437; // slope param[9] = 2.62932; // leak param[10] = 1.51279; // size-offset param[11] = 0.0507821; // size-slope // Parametrization for sign of disp (m3long, slope) param[5] = -0.07; param[6] = 7.2; param[7] = 0.5; // ThetaSq-Cut param[1] = 0.11; // 0.215 // Area-Cut param[2] = 0.215468; param[3] = 5.63973; param[4] = 0.0836169; MFMagicCuts cuts; cuts.SetHadronnessCut(MFMagicCuts::kNoCut); cuts.SetVariables(param); tlist.AddToList(&read); tlist.AddToList(&cont); tlist.AddToList(&apply); tlist.AddToList(&clean); tlist.AddToList(&hcalc); tlist.AddToList(&cuts); tlist.AddToList(&fillC1); tlist.AddToList(&fillC2); tlist.AddToList(&fillC3); tlist.AddToList(&fillR); tlist.AddToList(&fillD1); tlist.AddToList(&fillD2); tlist.AddToList(&fillD3); tlist.AddToList(&fillD4); tlist.AddToList(&fillD5); tlist.AddToList(&fillD6); tlist.AddToList(&filla); //tlist.AddToList(&fmuon1); tlist.AddToList(&muscalc); tlist.AddToList(&fillmhn1); tlist.AddToList(&fillmhn3); tlist.AddToList(&fmuon2); tlist.AddToList(&fillmuon); tlist.AddToList(&mcalc); tlist.AddToList(&fmuonhn); tlist.AddToList(&fillmhn2); tlist.AddToList(&fillmhn4); tlist.AddToList(&fmuon3); tlist.AddToList(&fillmpar); //tlist.AddToList(&fmuon4); //tlist.AddToList(&writem); tlist.AddToList(&write); tlist.AddToList(&write_ascii_hillas); if (!loop.Eventloop()) return 3; if (!loop.GetDisplay()) return 4; d->SetTitle(status_display_title, kFALSE); d->SaveAs(status_display_output_path); return 0; }