AlcapDAQ  1
TRawAnalysis.cpp
Go to the documentation of this file.
1 #include "TRawAnalysis.h"
2 
3 #include "TReadODB.h"
4 #include "TMucapData.h"
5 
6 #include "TCaenCompData.h"
7 #include "TStackedTDC400Data.h"
8 #include "TNeutronRaw.h"
9 #include "TWFDBankReader.h"
10 
11 #include <stdio.h>
12 #include <iostream>
13 using std::cout; using std::cerr; using std::endl;
14 #include <string>
15 using std::string;
16 #include <vector>
17 using std::vector;
18 
19 /******* global variables **********/
20 extern TMucapData *gData;
21 extern TReadODB *gODB;
22 extern TPC_PARAM tpc_parameters;
23 /******* end global variables **********/
24 
25 #ifdef STANDALONE
26 extern void MCaenCompProcessRaw_init(); // standalone
27 extern INT MCaenCompProcessRaw(EVENT_HEADER *pheader, void *pevent); // standalone
28 extern void MTDC400ProcessRaw_init(); // standalone
29 extern INT MTDC400ProcessRaw(EVENT_HEADER *pheader, void *pevent); // standalone
30 #endif
31 
32 TRawAnalysis::TRawAnalysis()
33 {
34  cout << "TRawAnalysis::TRawAnalysis()" << endl;
35 #ifdef STANDALONE
36  MCaenCompProcessRaw_init(); // standalone
37  MTDC400ProcessRaw_init(); // standalone
38 #endif
39 
40  // Create raw data objects
41  gData->CaenComp = new TCaenCompData;
42  gData->StackedTDC400 = new TStackedTDC400Data;
43  // Make a reader for each pad.
44  for(int ipad=0; ipad<tpc_parameters.kNPads; ipad++) {
45  int crate = tpc_parameters.GetWFDCrate(ipad);
46  int slot = tpc_parameters.GetWFDSlot(ipad);
47  int ch = tpc_parameters.GetWFDChannel(ipad);
48  // Could check Channel enabled here
49  int dbc = tpc_parameters.GetWFDDBC(crate,slot,ch);
50  int personality = tpc_parameters.GetWFDPersonality(crate,slot,ch);
51  string bankname = tpc_parameters.Pad2WFDBankName(ipad);
52  gData->fTPCWFDBanks.push_back(TWFDBankReader(dbc,personality,bankname));
53  }
54 
55  // Make the TTPCIslandManager. Don't fill anything yet.
56  // The constructor looks at the number of pads, so it's
57  // important that TParametersAnalysis has already been constructed.
58  gData->fTPCIslands = new TTPCIslandManager();
59 
60  // Make the Ge Det. bank readers
61  vector<TOctalFADCBankReader>& vGeFADCBanks = gData->fGeFADCBanks;
62  for(int i=0; i<8; i++){
63  char name[8];
64  sprintf(name,"N%cfe", 'a'+i);
65  vGeFADCBanks.push_back(TOctalFADCBankReader(name));
66  }
67 
68 #ifdef RUN9
69  gData->NeutronBank = new TNeutronRaw;
70 #endif
71 }
72 
73 TRawAnalysis::~TRawAnalysis()
74 {
75  printf("Destructor TRawAnalysis()\n");
76 
77  delete gData->StackedTDC400;
78  delete gData->CaenComp;
79  delete gData->fTPCIslands;
80 #ifdef RUN9
81  delete gData->NeutronBank;
82 #endif
83 }
84 
85 INT TRawAnalysis::ProcessEvent(EVENT_HEADER *pheader, void *pevent)
86 {
87 #ifdef STANDALONE
88  MCaenCompProcessRaw(pheader, pevent); // standalone
89  MTDC400ProcessRaw(pheader, pevent); // standalone
90 #endif
91  gData->CaenComp->ProcessEvent(pheader, pevent);
92  gData->StackedTDC400->ProcessEvent(pheader, pevent);
93 
94  // Each bank reader needs to process its bank
95  for(int ipad=0; ipad<tpc_parameters.kNPads; ipad++) {
96  gData->fTPCWFDBanks.at(ipad).ProcessEvent(pheader,pevent);
97  }
98 
99  //Now import islands into TTPCIslandManager, specializing them for the TPC
100  gData->fTPCIslands->ProcessEvent();
101 
102  // Process bank readers
103  for(int i=0; i<gData->fGeFADCBanks.size(); ++i){
104  gData->fGeFADCBanks[i].ProcessEvent(pheader, pevent);
105  }
106 
107  // Create GeDet Islands out of the neutron pulses
108 
109 
110 #ifdef RUN9
111 
112  gData->NeutronBank->Clear();
113 
114  gData->NeutronBank->ProcessEvent(pheader, pevent);
115 
116 #endif
117 
118  return SUCCESS;
119 }
120