32 FRACTION_TO_KEEP = 1.0;
33 DO_WIRE_BASED_TRACKING =
false;
34 DO_BCAL_CLUSTER =
false;
35 L1_TRIG_MASK = 0xffffffff;
36 L1_FP_TRIG_MASK = 0xffffffff;
41 gPARMS->SetDefaultParameter(
"L3:FRACTION_TO_KEEP", FRACTION_TO_KEEP ,
"Random Fraction of event L3 should keep. (Only used for debugging).");
42 gPARMS->SetDefaultParameter(
"L3:DO_WIRE_BASED_TRACKING", DO_WIRE_BASED_TRACKING ,
"Activate wire-based tracking for every event");
43 gPARMS->SetDefaultParameter(
"L3:DO_BCAL_CLUSTER", DO_BCAL_CLUSTER ,
"Activate BCAL clusters for every event");
44 gPARMS->SetDefaultParameter(
"L3:L1_TRIG_MASK", L1_TRIG_MASK ,
"Discard events that don't have one of these bits set in DL1Trigger::trig_mask (or in L1_FP_TRIG_MASK)");
45 gPARMS->SetDefaultParameter(
"L3:L1_FP_TRIG_MASK", L1_FP_TRIG_MASK ,
"Discard events that don't have one of these bits set in DL1Trigger::fp_trig_mask (or in L1_TRIG_MASK)");
46 gPARMS->SetDefaultParameter(
"L3:MVA_WEIGHTS", MVA_WEIGHTS ,
"TMVA weights file");
47 gPARMS->SetDefaultParameter(
"L3:MVA_CUT", MVA_CUT ,
"Cut on MVA response function. Event with values less than this are discarded.");
49 if(MVA_WEIGHTS !=
""){
51 mvareader =
new TMVA::Reader();
52 mvareader->AddVariable(
"Nstart_counter", &Nstart_counter);
53 mvareader->AddVariable(
"Ntof", &Ntof);
54 mvareader->AddVariable(
"Nbcal_points", &Nbcal_points);
55 mvareader->AddVariable(
"Nbcal_clusters", &Nbcal_clusters);
56 mvareader->AddVariable(
"Ebcal_points", &Ebcal_points);
57 mvareader->AddVariable(
"Ebcal_clusters", &Ebcal_clusters);
58 mvareader->AddVariable(
"Nfcal_clusters", &Nfcal_clusters);
59 mvareader->AddVariable(
"Efcal_clusters", &Efcal_clusters);
60 mvareader->AddVariable(
"Ntrack_candidates", &Ntrack_candidates);
61 mvareader->AddVariable(
"Ptot_candidates", &Ptot_candidates);
63 mvareader->BookMVA(
"MVA", MVA_WEIGHTS);
89 _data.push_back(l3trig);
91 if(FRACTION_TO_KEEP!=1.0){
92 double r = (double)random()/(double)RAND_MAX;
97 if( (L1_TRIG_MASK!=0xffffffff) || (L1_FP_TRIG_MASK!=0xffffffff) ){
99 vector<const DL1Trigger*> l1triggers;
100 loop->Get(l1triggers);
101 bool trig_bit_is_set =
false;
102 for(
auto t : l1triggers){
103 if( t->trig_mask&L1_TRIG_MASK ) trig_bit_is_set =
true;
104 if( t->fp_trig_mask&L1_FP_TRIG_MASK ) trig_bit_is_set =
true;
111 vector<const DSCDigiHit*> scdigihits;
112 vector<const DTOFDigiHit*> tofdigihits;
113 vector<const DBCALPoint*> bcalpoints;
114 vector<const DBCALCluster*> bcalclusters;
115 vector<const DFCALCluster*> fcalclusters;
116 vector<const DTrackCandidate*> trackcandidates;
117 loop->Get(scdigihits);
118 loop->Get(tofdigihits);
119 loop->Get(bcalpoints);
120 loop->Get(bcalclusters);
121 loop->Get(fcalclusters);
122 loop->Get(trackcandidates);
125 double Ebcal_points = 0.0;
126 double Ebcal_clusters = 0.0;
127 double Efcal_clusters = 0.0;
128 for(
auto bp : bcalpoints ) Ebcal_points += bp->E();
129 for(
auto bc : bcalclusters) Ebcal_clusters += bc->E();
130 for(
auto fc : fcalclusters) Efcal_clusters += fc->getEnergy();
133 double Ptot_candidates = 0.0;
134 for(
auto tc : trackcandidates) Ptot_candidates += tc->momentum().Mag();
136 Nstart_counter = scdigihits.size();
137 Ntof = tofdigihits.size();
138 Nbcal_points = bcalpoints.size();
139 Nbcal_clusters = bcalclusters.size();
140 Ebcal_points = Ebcal_points;
141 Ebcal_clusters = Ebcal_clusters;
142 Nfcal_clusters = fcalclusters.size();
143 Efcal_clusters = Efcal_clusters;
144 Ntrack_candidates = trackcandidates.size();
145 Ptot_candidates = Ptot_candidates;
153 if(DO_WIRE_BASED_TRACKING){
154 vector<const DTrackWireBased*> wbt;
159 vector<const DBCALCluster*> bcalclusters;
160 loop->Get(bcalclusters);
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t fini(void)
Called after last event of last event source has been processed.
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
L3_decision_t L3_decision
jerror_t init(void)
Called once at program start.