140 B2DEBUG(150, Form(
"Number of Track : %d",
m_tracks.getEntries()));
141 for (
int itrack = 0; itrack <
m_tracks.getEntries(); ++itrack) {
146 float thetaTarget = 0;
149 bool isFakeTrack =
false;
158 B2DEBUG(150,
"Skipping CDCTriggerTrack without relation to RecoTrack.");
165 bool foundValidRep =
false;
166 for (
unsigned irep = 0; irep < reps.size() && !foundValidRep; ++irep) {
174 genfit::MeasuredStateOnPlane state =
176 reps[irep]->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
180 state.setPosMom(state.getPos(), -state.getMom());
181 state.setChargeSign(-state.getCharge());
186 thetaTarget = state.getMom().Theta();
187 zTarget = state.getPos().Z();
188 PtTarget = state.getMom().Pt();
193 foundValidRep =
true;
195 if (!foundValidRep) {
196 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
207 B2DEBUG(150,
"Skipping CDCTriggerTrack without relation to MCParticle.");
221 float phi0 =
m_tracks[itrack]->getPhi0();
222 float invpt =
m_tracks[itrack]->getKappa(1.5);
223 float theta = atan2(1.,
m_tracks[itrack]->getCotTheta());
224 std::vector<int> sectors =
m_NeuroTrigger.selectMLPsTrain(phi0, invpt, theta);
225 if (sectors.size() == 0)
continue;
228 std::vector<float> targetRaw = {};
231 targetRaw.push_back(zTarget);
233 targetRaw.push_back(thetaTarget);
235 for (
unsigned i = 0; i < sectors.size(); ++i) {
236 int isector = sectors[i];
237 std::vector<float> target;
244 bool outOfRange =
false;
245 for (
unsigned itarget = 0; itarget < target.size(); ++itarget) {
246 if (fabs(target[itarget]) > 1.) {
248 target[itarget] /= fabs(target[itarget]);
262 unsigned long sectorPattern =
m_NeuroTrigger[isector].getSLpattern();
264 unsigned long sectorPatternMask =
m_NeuroTrigger[isector].getSLpatternMask();
265 B2DEBUG(250,
"hitPattern " << hitPattern <<
" sectorPattern " << sectorPattern);
267 if (!
m_singleUse && sectorPattern > 0 && (sectorPattern & hitPattern) != sectorPattern) {
268 B2DEBUG(250,
"hitPattern not matching " << (sectorPattern & hitPattern));
271 }
else if (
m_singleUse && sectorPattern > 0 && (sectorPattern) != (hitPattern & sectorPatternMask)) {
273 B2DEBUG(250,
"hitPattern not matching " << (sectorPatternMask & hitPattern));
280 unsigned axialPattern = hitPattern & 0b101010101;
281 while (axialPattern) {
282 count += axialPattern & 1;
286 B2DEBUG(250,
"Not enough axial hits (<4), skipping!");
290 std::vector<unsigned> hitIds;
298 evtmetadata->getExperiment(), evtmetadata->getRun(), evtmetadata->getSubrun(), evtmetadata->getEvent(), itrack, i,
299 m_tracks.getEntries(), 0, 0, 0, 0, phi0, theta, invpt, PtTarget);
302 if ((
m_trainSet)[isector].nSamples() % 1000 == 0) {
303 B2DEBUG(50,
m_trainSet[isector].nSamples() <<
" samples for training collected for sector " << isector);
305 std::ofstream gzipfile4(
m_filename, std::ios_base::app | std::ios_base::binary);
306 boost::iostreams::filtering_ostream outStream;
307 outStream.push(boost::iostreams::gzip_compressor());
308 outStream.push(gzipfile4);
310 outStream << sample << std::endl;
A Class to store the Monte Carlo particle information.
ROOT::Math::XYZVector getProductionVertex() const
Return production vertex position.
ROOT::Math::XYZVector getMomentum() const
Return momentum.