// triglvl2.C // Macro to use the class MMcTriggerLvl2, which calculates the // 2nd level trigger (L2T) selection parameters. // Filters to select events using these parameter and // histograms with selection variables distributions are also created. // // Inputs: // - filename name of data file // - CompactNN number of NN to define a compact pixel // - fValue comparision value for the filter // // 23/04/2003 Added example of MFEnergySlope filter // // void triglvl2(char *filename = "Gamma.root") // USER: Data File Name ---^ { // // first we have to create our empty lists // MParList parlist; MTaskList tasklist; parlist.AddToList(&tasklist); // // Setup our tasks: // - First we have to read the events // - Then we can fill the efficiency histograms // MReadMarsFile reader("Events", filename); reader.DisableAutoScheme(); // reader.EnableBranch("fEnergy"); // reader.EnableBranch("fImpact"); reader.EnableBranch("fTimeFirst[4]"); // reader.EnableBranch("fPixelsFirst[73][4]"); tasklist.AddToList(&reader); MGeomCamMagic geocam; parlist.AddToList(&geocam); // MHillas hillas; // parlist.AddToList(&hillas); // An instance of the class MMcTriggerLvl2 is created and added to the // parameter list MMcTriggerLvl2 cell; parlist.AddToList(&cell); MMcEvt mevt; parlist.AddToList(&mevt); // Set the number of Next Neighbourhoods that define a compact pixel // cell.SetCompactNN(2); // USER: --^ // // A filter to select events using the L2T parameters is created // // MF lvl2filter("MMcTriggerLvl2.fPseudoSize > 25 && MMcTriggerLvl2.fPseudoSize < 31"); MF lvl2filter("MMcTriggerLvl2.fPseudoSize > 15"); // // A second filter is created using the class MFTriggerLvl2 // MFTriggerLvl2 fTrig("MMcTriggerLvl2", '>', 8); // USER: fValue to be compared --^ // // A selection on the number and energy of the events // MF energyfilter("MMcEvt.fEnergy > 100"); MFEventSelector selector; //selector.SetNumSelectEvts(4000); // Filter to select events according to a give slope MFEnergySlope eslope; eslope.SetMcMinEnergy(50.); eslope.SetMcMaxEnergy(400.); eslope.SetNewSlope(-.5); // A filter list is created; the filters created can be added to the list // MFilterList flist; //flist.AddToList(&energyfilter); //flist.AddToList(&lvl2filter); // flist.AddToList(&selector); // flist.AddToList(&eslope); // flist.AddToList(&fTrig); // // The task to calculate the L2T parameter is added to the task list // MMcTriggerLvl2Calc calcps("MMcTriggerLvl2","MMcTriggerLvl2"); tasklist.AddToList(&calcps); // // The filter list is added to the task list // tasklist.AddToList(&flist); // // Task to calculate and plot the effective area // MMcCollectionAreaCalc effi; tasklist.AddToList(&effi); // // The filter list selects events for the effective area calculation // effi.SetFilter(&flist); // // Filling of histos for MHMcTriggerLvl2 // MFillH hfill1("MHMcTriggerLvl2","MMcTriggerLvl2"); tasklist.AddToList(&hfill1); //hfill1.SetFilter(&flist); //MFillH hfill2("MHMcTriggerLvl2", &mevt, &cell); //tasklist.AddToList(&hfill2); //hfill2.SetFilter(&flist); // // set up the loop for the processing // MEvtLoop magic; magic.SetParList(&parlist); // // Start to loop over all events // MProgressBar bar; magic.SetProgressBar(&bar); if (!magic.Eventloop()) return; /* if (!magic.PreProcess()) return; while (tasklist.Process()) { cout<< mevt.GetEnergy()<FindObject("MMcEvt"); //if (!fMcEvt) //{ //cout << "MMcEvt not found... exit." << endl; //*fLog << err << dbginf << "MMcEvt not found... exit." << endl; // return kFALSE; //} // cout << "fMcEvt = " << fMcEvt << endl; //parlist.FindObject("MHMcTriggerLvl2")->Fill((Double_t) fMcEvt->GetEnergy(), cell); tasklist.PrintStatistics(); // // Now the histogram we wanted to get out of the data is // filled and can be displayd // parlist.FindObject("MHMcCollectionArea")->DrawClone(); parlist.FindObject("MHMcTriggerLvl2")->DrawClone("sbc"); parlist.FindObject("MHMcTriggerLvl2")->DrawClone("lps"); parlist.FindObject("MHMcTriggerLvl2")->DrawClone(); //parlist.FindObject("MHMcTriggerLvl2")->DrawClone("energy"); parlist.FindObject("MHMcTriggerLvl2")->DrawClone("size-energy"); // Returns histogram of the class MHMcTriggerLvl2 MHMcTriggerLvl2 *htrig = (MHMcTriggerLvl2 *)parlist.FindObject("MHMcTriggerLvl2"); TH1F *h1 = (TH1F *)htrig->GetHistByName("fHistPseudoSize"); TH2D *h2 = htrig->GetHistSizeBiggerCellEnergy(); TH2D *h3 = (TH2D *)htrig->GetHistByName("fHistLutPseudoSizeEnergy"); //csbce = new TCanvas(); //h2->DrawClone(); hfile = new TFile("HistFileLUT.root", "RECREATE"); h1->Write(); h2->Write(); h3->Write(); hfile->Close(); }