analyse.cpp 2.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
#include <fstream>

#include "TString.h"
#include "TFile.h"
#include "TError.h"
#include "TTree.h"
#include <stdio.h>
#include <stdlib.h>

#include "../dataClasses/RawEvent.h"
#include "../dataClasses/AEvent.h"

int main(int argc, char* argv[])
14
{
15 16 17 18 19 20 21 22 23 24 25 26 27 28
//	gSystem->Load("../libData.so");

	if (argc != 4) {
		// Tell the user how to run the program
		std::cerr << "Usage: " << argv[0] << " [list with input files] [outputfile] [number of points in one event (1000 of 1024)]" << std::endl;
		/* "Usage messages" are a conventional way of telling the user
		 * how to run a program if they enter the command incorrectly.
		 */
		return 1;
	}
	// Print the user's name:
	TString infiles = argv[1];
	TString ofile = argv[2];
	TString Asize = argv[3];		
29

30
	TFile *f = new TFile(infiles.Data());
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
	TTree *tr = (TTree*)f->Get("rtree");

	const Int_t noBranches = 4;
	const Double_t cfRatio = 0.5;
	const Int_t cfTD = 5;

	TString bName;
	RawEvent *revent[noBranches];	// pointer to the array (of RawEvent class) in which raw data for each channel will be put
	for (Int_t j = 0; j<noBranches; j++) {
		revent[j] = new RawEvent();	//each raw event element is of class RawEvent()
		bName.Form("ch%d.", j);
		tr->SetBranchAddress(bName.Data(), &revent[j]);	//read the tree tr with raw data and fill array revent with raw data
	}

//	tr->SetMakeClass(1);

47
	TFile *fw = new TFile(ofile.Data(), "RECREATE");	//create .root file with somehow analyzed data
48 49 50 51
	TTree *tw = new TTree("atree", "title of drs4 analysis tree");	//create analysis tree atree in it

	AEvent *wevent[noBranches];	// pointer to the array (of AEvent class) in which analyzed data for each channel will be put
	for (Int_t j = 0; j<noBranches; j++) {
52
		wevent[j] = new AEvent(atoi(Asize));
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
		bName.Form("Ach%d.", j);
		wevent[j]->SetInputEvent(&revent[j]);	//takes raw event from RawEvent
		wevent[j]->SetCFratio(cfRatio);
		wevent[j]->SetCFtimeDelay(cfTD);
		tw->Bronch(bName.Data(), "AEvent", &wevent[j]);	// create branches in atree to hold analyzed data
	}

//----event loop in tr input tree
	Long64_t nentries = tr->GetEntries();

	for(Long64_t i = 0; i < nentries; i++) {
		tr->GetEntry(i);
		if ( !(tr->GetEntry(i)%100) ) {
			printf("Found event #%d\n", tr->GetEntry(i));
		}

		for (Int_t j = 0; j<noBranches; j++) {
			wevent[j]->Reset();
			wevent[j]->ProcessEvent();	//here all the analysis is going on so far
		}

		tw->Fill();
	}

//----end of event loop

	tw->Write();
	fw->Close();

82
	return 1;
83
}