//   triglvl2.C
//  Macro to use the class MMcTriggerLvl2, which calculates the 
//   2nd level trigger (L2T) selection parameters.
//  Filters to select events using these parameter are also created.
//
//   Inputs:
//      - filename      name of data file
//      - CompactNN     number of NN to define a compact pixel
//      - fValue        comparision value for the 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);

    // An instance of the class MMcTriggerLvl2 is created and added to the 
    //  parameter list
    MMcTriggerLvl2 cell;      
    parlist.AddToList(&cell);

    // Set the number of Next Neighbourhoods that define a compact pixel
    //
    cell.SetCompactNN(3);
    //  USER:       --^
    //
    //  A filter to select events using the L2T parameters is created
    //
    //    MF lvl2filter("MMcTriggerLvl2.fLutPseudoSize > 6");
    MF lvl2filter("MMcTriggerLvl2.fSizeBiggerCell > 16");
    //
    // A second filter is created using the class MFTriggerLvl2
    //
    MFTriggerLvl2 fTrig1("MMcTriggerLvl2", '>', 8);
    //      USER:       fValue to be compared --^

    //
    // A selection on the number and energy of the events 
    //
    MF energyfilter("MMcEvt.fEnergy > 10");
    MFEventSelector selector;
    selector.SetNumSelectEvts(4000);

    // 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(&fTrig1);

    // 
    // 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);

    //
    // The task to calculate the L2T parameter is added to the task list
    //
    MMcTriggerLvl2Calc fill("MMcTriggerLvl2","MMcTriggerLvl2");  
    tasklist.AddToList(&fill);

    //
    //  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);

    //
    // The filter list is added to the task list
    //
    tasklist.AddToList(&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.PreProcess())
      return;

    if (!magic.Eventloop())
      return;

    tasklist.PrintStatistics();
    //
    // Now the histogram we wanted to get out of the data is
    // filled and can be displayd
    //
    parlist.FindObject("MHMcCollectionArea")->DrawClone();

    magic.PostProcess();

}
