141 B2DEBUG(150, Form(
"Number of Track : %d",
m_tracks.getEntries()));
142 for (
int itrack = 0; itrack <
m_tracks.getEntries(); ++itrack) {
147 float thetaTarget = 0;
150 bool isFakeTrack =
false;
159 B2DEBUG(150,
"Skipping CDCTriggerTrack without relation to RecoTrack.");
166 bool foundValidRep =
false;
167 for (
unsigned irep = 0; irep < reps.size() && !foundValidRep; ++irep) {
175 genfit::MeasuredStateOnPlane state =
177 reps[irep]->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
181 state.setPosMom(state.getPos(), -state.getMom());
182 state.setChargeSign(-state.getCharge());
187 thetaTarget = state.getMom().Theta();
188 zTarget = state.getPos().Z();
189 PtTarget = state.getMom().Pt();
194 foundValidRep =
true;
196 if (!foundValidRep) {
197 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
208 B2DEBUG(150,
"Skipping CDCTriggerTrack without relation to MCParticle.");
222 float phi0 =
m_tracks[itrack]->getPhi0();
223 float invpt =
m_tracks[itrack]->getKappa(1.5);
224 float theta = atan2(1.,
m_tracks[itrack]->getCotTheta());
225 std::vector<int> sectors =
m_NeuroTrigger.selectMLPsTrain(phi0, invpt, theta);
226 if (sectors.size() == 0)
continue;
229 std::vector<float> targetRaw = {};
232 targetRaw.push_back(zTarget);
234 targetRaw.push_back(thetaTarget);
236 for (
unsigned i = 0; i < sectors.size(); ++i) {
237 int isector = sectors[i];
238 std::vector<float> target;
245 bool outOfRange =
false;
246 for (
unsigned itarget = 0; itarget < target.size(); ++itarget) {
247 if (fabs(target[itarget]) > 1.) {
249 target[itarget] /= fabs(target[itarget]);
263 unsigned long sectorPattern =
m_NeuroTrigger[isector].getSLpattern();
265 unsigned long sectorPatternMask =
m_NeuroTrigger[isector].getSLpatternMask();
266 B2DEBUG(250,
"hitPattern " << hitPattern <<
" sectorPattern " << sectorPattern);
268 if (!
m_singleUse && sectorPattern > 0 && (sectorPattern & hitPattern) != sectorPattern) {
269 B2DEBUG(250,
"hitPattern not matching " << (sectorPattern & hitPattern));
272 }
else if (
m_singleUse && sectorPattern > 0 && (sectorPattern) != (hitPattern & sectorPatternMask)) {
274 B2DEBUG(250,
"hitPattern not matching " << (sectorPatternMask & hitPattern));
281 unsigned axialPattern = hitPattern & 0b101010101;
282 while (axialPattern) {
283 count += axialPattern & 1;
287 B2DEBUG(250,
"Not enough axial hits (<4), skipping!");
291 std::vector<unsigned> hitIds;
299 evtmetadata->getExperiment(), evtmetadata->getRun(), evtmetadata->getSubrun(), evtmetadata->getEvent(), itrack, i,
300 m_tracks.getEntries(), 0, 0, 0, 0, phi0, theta, invpt, PtTarget);
303 if ((
m_trainSet)[isector].nSamples() % 1000 == 0) {
304 B2DEBUG(50,
m_trainSet[isector].nSamples() <<
" samples for training collected for sector " << isector);
306 std::ofstream gzipfile4(
m_filename, std::ios_base::app | std::ios_base::binary);
307 boost::iostreams::filtering_ostream outStream;
308 outStream.push(boost::iostreams::gzip_compressor());
309 outStream.push(gzipfile4);
311 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.