Applying the analysis

The harpoanalysis program can run your analysis (if you created it with makeNewAnalysis.sh). You just need to add the analysis name in a configuration file:

# File myConfig.cfg

Analyses="HarpoAnalyseName HarpoAnalyseWriter";

@include "HarpoReconstruction.cfg"
The analyses in the list will be applied sequentially for each event.

You can then apply the list of analyses to data:

Raw data
(requires the environment $HARPO_DATA_DIR)

./runRawData harpoanalysis RUNNO -c myConfig.cfg

ROOT file

 harpoanalysis -c myConfig.cfg --root run.root

The analysis is applied to a dataset using the HarpoReader class. The Analysis and Reader are created and initialized:

  HarpoReader *rdr = new HarpoReader( cfg );
  rdr->Init(hSyncTime);
  HarpoAnalyseName1 *hana1 = new HarpoAnalyseName1();
  hana1-> Init();

hSyncTime indicates the method used for synchronising the different detectors.

Then the Analysis is associated to the Reader (several Analyses can be added sequentially):

  rdr->AddAnalyseFunction(hana1);

The reader then loops over the dataset:

  rdr->Loop();

And finally, the Analysis is finalized:

  hana1->Save();

A full program example.cxx will look as follows:

//
// Demo code for harpo analyse framework in C++ and Root 
//

#include <stdlib.h>
#include <stdio.h>

#include "HarpoConfig.h"
#include "HarpoReader.h"
#include "HarpoRunHeader.h"
#include "HarpoAnalyseName1.h"
#include "HarpoAnalyseName2.h"
#include "HarpoAnalyseName3.h"

int main(int argc, char **argv)
{
  Long_t processed = -1;  // Processed events counter , negative on error
  
  HarpoRunHeader *hdr;

  HarpoConfig *cfg = new HarpoConfig(argc,argv,0x03);
  cfg->Init();

  cfg->print();

  HarpoReader *rdr = new HarpoReader( cfg );
  // hNoCMPTime,  // Read without timestamp comparision
  // hFirstTime,  // return only plane with smaller timestamp
  // hSyncTime    // skip plane event with smaller timestamp, return only

  if ( rdr->Init(hSyncTime) ) {
    hdr = rdr->GetRunHeader();
    //hdr->print();
  } else {
    printf ("Int ERROR exiting ...\n");
    return 1;
  }

  HarpoAnalyseName1 *hana1 = new HarpoAnalyseName1();
  HarpoAnalyseName2 *hana2 = new HarpoAnalyseName2();
  HarpoAnalyseName3 *hana3 = new HarpoAnalyseName3();

  hana1-> Init(); 
  hana2-> Init(); 
  hana3-> Init(); 
  hana1->SetRunHeader(hdr);

  rdr->AddAnalyseFunction(hana1);
  rdr->AddAnalyseFunction(hana2);
  rdr->AddAnalyseFunction(hana3);

  processed = rdr->Loop();
  
  hana1->Save();
  hana2->Save();
  hana3->Save();

  delete hana1;
  delete hana2;
  delete hana3;
  delete rdr;
  delete cfg;
  printf("\n Done processed Events %li\n",processed);
  return 0;

To compile it, you must add the following line in Makefile:

$(eval $(call make_exec,example))



Philippe Gros 2015-06-19