1 #include "numuCCMultiPiAnalysis.hxx" 2 #include "Parameters.hxx" 3 #include "numuCCMultiPiFGD2Selection.hxx" 4 #include "oaAnalysisTreeConverter.hxx" 5 #include "CategoriesUtils.hxx" 6 #include "BasicUtils.hxx" 8 const bool DEBUG =
false;
10 const unsigned int NMAXTPCSEC = 20;
11 const unsigned int NMAXFGDSEC = 20;
12 const unsigned int NMAXTPC1 = 20;
33 if (!_numuCCAnalysis->Initialize())
return false;
39 _whichFGD = ND::params().
GetParameterI(
"numuCCMultiPiAnalysis.Selections.whichFGD");
41 std::cout <<
"----------------------------------------------------" << std::endl;
42 std::cout <<
"WARNING: only for events with accum_level > 5 the vars in the output microtree will surely refer to the muon candidate in that FGD" << std::endl;
43 std::cout <<
"----------------------------------------------------" << std::endl;
47 if (_whichFGD == 1) _fgdID = SubDetId::kFGD1;
48 if (_whichFGD == 2) _fgdID = SubDetId::kFGD2;
49 if (_whichFGD > 2) _fgdID = SubDetId::kFGD;
52 _addPionSIinfo = (bool)ND::params().
GetParameterI(
"numuCCMultiPiAnalysis.MicroTrees.AddPionSIinfo");
58 void numuCCMultiPiAnalysis::DefineSelections(){
64 else if (_whichFGD==2)
66 else if (_whichFGD==3) {
73 void numuCCMultiPiAnalysis::DefineMicroTrees(
bool addBase){
79 if (addBase) _numuCCAnalysis->DefineMicroTrees(addBase);
83 AddVarI(output(),MuonVertexId,
"");
84 AddVarI(output(),MuonIndex,
"");
87 AddVarVF(output(),NegPionMom,
"", NNegPion);
88 AddVarVF(output(),NegPionPidLik,
"", NNegPion);
89 AddVarVF(output(),NegPionElPidLik,
"", NNegPion);
90 AddVarVI(output(),NegPionTId,
"", NNegPion);
91 AddVarVI(output(),NegPionIndex,
"", NNegPion);
92 AddVarVI(output(),NegPionParentTId,
"", NNegPion);
93 AddVarVI(output(),NegPionGParentTId,
"",NNegPion);
94 AddVarVI(output(),NegPionVId,
"", NNegPion);
95 AddVarMF(output(),NegPionDir,
"", NNegPion,-NMAXTPCSEC,3);
96 AddVarMF(output(),NegPionPosStart,
"", NNegPion,-NMAXTPCSEC,3);
97 AddVarMF(output(),NegPionPosEnd,
"", NNegPion,-NMAXTPCSEC,3);
99 AddToyVarVF(output(),PosPionMom,
"", NPosPion);
100 AddToyVarVF(output(),PosPionTheta,
"", NPosPion);
101 AddVarVF(output(),PosPionPidLik,
"", NPosPion);
102 AddVarVF(output(),PosPionElPidLik,
"", NPosPion);
103 AddVarVI(output(),PosPionTId,
"", NPosPion);
104 AddVarVI(output(),PosPionIndex,
"", NPosPion);
105 AddVarVI(output(),PosPionParentTId,
"", NPosPion);
106 AddVarVI(output(),PosPionGParentTId,
"",NPosPion);
107 AddVarVI(output(),PosPionVId,
"", NPosPion);
108 AddVarMF(output(),PosPionDir,
"", NPosPion,-NMAXTPCSEC,3);
109 AddVarMF(output(),PosPionPosStart,
"", NPosPion,-NMAXTPCSEC,3);
110 AddVarMF(output(),PosPionPosEnd,
"", NPosPion,-NMAXTPCSEC,3);
113 AddVarVF(output(),Pi0ElMom,
"", NPi0El);
114 AddVarVF(output(),Pi0ElPull,
"", NPi0El);
115 AddVarVI(output(),Pi0ElTId,
"", NPi0El);
116 AddVarVI(output(),Pi0ElIndex,
"", NPi0El);
117 AddVarVI(output(),Pi0ElParentTId,
"", NPi0El);
118 AddVarVI(output(),Pi0ElGParentTId,
"",NPi0El);
119 AddVarVI(output(),Pi0ElVId,
"", NPi0El);
120 AddVarMF(output(),Pi0ElDir,
"", NPi0El,-NMAXTPCSEC,3);
121 AddVarMF(output(),Pi0ElPosStart,
"", NPi0El,-NMAXTPCSEC,3);
122 AddVarMF(output(),Pi0ElPosEnd,
"", NPi0El,-NMAXTPCSEC,3);
124 AddVarVF(output(),Pi0PosMom,
"", NPi0Pos);
125 AddVarVF(output(),Pi0PosPull,
"", NPi0Pos);
126 AddVarVI(output(),Pi0PosTId,
"", NPi0Pos);
127 AddVarVI(output(),Pi0PosIndex,
"", NPi0Pos);
128 AddVarVI(output(),Pi0PosParentTId,
"", NPi0Pos);
129 AddVarVI(output(),Pi0PosGParentTId,
"",NPi0Pos);
130 AddVarVI(output(),Pi0PosVId,
"", NPi0Pos);
131 AddVarMF(output(),Pi0PosDir,
"", NPi0Pos,-NMAXTPCSEC,3);
132 AddVarMF(output(),Pi0PosPosStart,
"", NPi0Pos,-NMAXTPCSEC,3);
133 AddVarMF(output(),Pi0PosPosEnd,
"", NPi0Pos,-NMAXTPCSEC,3);
136 AddVarVF(output(),TPCSecMom,
"", NTPCSec);
137 AddVarVF(output(),TPCSecMuPidLik,
"", NTPCSec);
138 AddVarVF(output(),TPCSecPiPidLik,
"", NTPCSec);
139 AddVarVF(output(),TPCSecPrPidLik,
"", NTPCSec);
140 AddVarVF(output(),TPCSecElPidLik,
"", NTPCSec);
141 AddVarVI(output(),TPCSecDetectors,
"", NTPCSec);
142 AddVarVI(output(),TPCSecQ,
"", NTPCSec);
143 AddVarVI(output(),TPCSecTId,
"", NTPCSec);
144 AddVarVI(output(),TPCSecIndex,
"", NTPCSec);
145 AddVarVI(output(),TPCSecParentTId,
"", NTPCSec);
146 AddVarVI(output(),TPCSecGParentTId,
"",NTPCSec);
147 AddVarMF(output(),TPCSecDir,
"", NTPCSec,-NMAXTPCSEC,3);
148 AddVarMF(output(),TPCSecPosStart,
"", NTPCSec,-NMAXTPCSEC,3);
149 AddVarMF(output(),TPCSecPosEnd,
"", NTPCSec,-NMAXTPCSEC,3);
152 AddVarVF(output(),FGDPiLength,
"", NFGDPi);
153 AddVarVF(output(),FGDPiPiPull,
"", NFGDPi);
154 AddVarVF(output(),FGDPiAvgTime,
"", NFGDPi);
155 AddVarVF(output(),FGDPiDistance,
"", NFGDPi);
156 AddVarVF(output(),FGDPiMuonangle,
"", NFGDPi);
157 AddVarVF(output(),FGDPiCosTheta,
"", NFGDPi);
158 AddVarVI(output(),FGDPiTId,
"", NFGDPi);
159 AddVarVI(output(),FGDPiIndex,
"", NFGDPi);
160 AddVarVI(output(),FGDPiParentTId,
"", NFGDPi);
161 AddVarVI(output(),FGDPiGParentTId,
"", NFGDPi);
162 AddVarVI(output(),FGDPiVId,
"", NFGDPi);
163 AddVarMF(output(),FGDPiDir,
"", NFGDPi,-NMAXTPCSEC,3);
164 AddVarMF(output(),FGDPiPosStart,
"", NFGDPi,-NMAXTPCSEC,3);
165 AddVarMF(output(),FGDPiPosEnd,
"", NFGDPi,-NMAXTPCSEC,3);
166 AddVarVF(output(),FGDPiTimeIni,
"", NFGDPi);
167 AddVarVF(output(),FGDPiTimeEnd,
"", NFGDPi);
168 AddVarVF(output(),FGDPiDeltaTimeIniSelMu,
"",NFGDPi);
169 AddVarVF(output(),FGDPiDeltaTimeEndSelMu,
"",NFGDPi);
172 AddVarVF(output(),FGDElLength,
"", NFGDEl);
173 AddVarVF(output(),FGDElPiPull,
"", NFGDEl);
174 AddVarVF(output(),FGDElAvgTime,
"", NFGDEl);
175 AddVarVI(output(),FGDElTId,
"", NFGDEl);
176 AddVarVI(output(),FGDElIndex,
"", NFGDEl);
177 AddVarVI(output(),FGDElParentTId,
"", NFGDEl);
178 AddVarVI(output(),FGDElGParentTId,
"", NFGDEl);
179 AddVarVI(output(),FGDElVId,
"", NFGDEl);
180 AddVarVF(output(),FGDElTimeIni,
"", NFGDEl);
181 AddVarVF(output(),FGDElTimeEnd,
"", NFGDEl);
182 AddVarVF(output(),FGDElDeltaTimeIniSelMu,
"",NFGDEl);
183 AddVarVF(output(),FGDElDeltaTimeEndSelMu,
"",NFGDEl);
184 AddVarVF(output(),FGDElDistance,
"", NFGDEl);
185 AddVarVF(output(),FGDElMuonangle,
"", NFGDEl);
186 AddVarVF(output(),FGDElCosTheta,
"", NFGDEl);
187 AddVarMF(output(),FGDElDir,
"", NFGDEl,-NMAXFGDSEC,3);
188 AddVarMF(output(),FGDElPosStart,
"", NFGDEl,-NMAXFGDSEC,3);
189 AddVarMF(output(),FGDElPosEnd,
"", NFGDEl,-NMAXFGDSEC,3);
193 AddVarVF(output(),FGDSecLength,
"", NFGDSec);
194 AddVarVF(output(),FGDSecPiPull,
"", NFGDSec);
195 AddVarVF(output(),FGDSecAvgTime,
"", NFGDSec);
196 AddVarVI(output(),FGDSecContained,
"", NFGDSec);
197 AddVarVI(output(),FGDSecTId,
"", NFGDSec);
198 AddVarVI(output(),FGDSecIndex,
"", NFGDSec);
199 AddVarVI(output(),FGDSecParentTId,
"", NFGDSec);
200 AddVarVI(output(),FGDSecGParentTId,
"", NFGDSec);
201 AddVarVF(output(),FGDSecTimeIni,
"", NFGDSec);
202 AddVarVF(output(),FGDSecTimeEnd,
"", NFGDSec);
203 AddVarVF(output(),FGDSecDeltaTimeIniSelMu,
"",NFGDSec);
204 AddVarVF(output(),FGDSecDeltaTimeEndSelMu,
"",NFGDSec);
205 AddVarVF(output(),FGDSecCosTheta,
"", NFGDSec);
206 AddVarMF(output(),FGDSecDir,
"", NFGDSec,-NMAXFGDSEC,3);
207 AddVarMF(output(),FGDSecPosStart,
"", NFGDSec,-NMAXFGDSEC,3);
208 AddVarMF(output(),FGDSecPosEnd,
"", NFGDSec,-NMAXFGDSEC,3);
212 AddVarVI(output(),MENHits,
"", NME);
213 AddVarVF(output(),MERawCharge,
"",NME);
214 AddVarVF(output(),MEMinTime,
"", NME);
215 AddVarVF(output(),MEMaxTime,
"", NME);
218 AddVarVF(output(),TPC1TrackMom,
"", NTPC1Track);
219 AddVarVF(output(),TPC1TrackCosTheta,
"", NTPC1Track);
220 AddVarVF(output(),TPC1TrackPhi,
"", NTPC1Track);
221 AddVarVI(output(),TPC1TrackVId,
"", NTPC1Track);
222 AddVarVI(output(),TPC1TrackTId,
"", NTPC1Track);
223 AddVarVI(output(),TPC1TrackParentTId,
"", NTPC1Track);
224 AddVarVI(output(),TPC1TrackGParentTId,
"",NTPC1Track);
225 AddVarMF(output(),TPC1TrackPosStart,
"", NTPC1Track,-NMAXTPC1,3);
226 AddVarMF(output(),TPC1TrackPosEnd,
"", NTPC1Track,-NMAXTPC1,3);
230 AddVarVI(output(),IntType,
"", NInts);
231 AddVarVI(output(),PionType,
"", NPions);
232 AddVarVF(output(),PionMom,
"", NPions);
236 AddVarF( output(), truepi_mom,
"true pion momentum");
237 AddVarF( output(), truepi_costheta,
"true pion cos(theta)");
238 AddVar3VF(output(), truepi_dir,
"true pion direction");
242 void numuCCMultiPiAnalysis::DefineTruthTree(){
246 _numuCCAnalysis->DefineTruthTree();
249 AddVarF( output(), truepi_mom,
"true pion momentum");
250 AddVarF( output(), truepi_costheta,
"true pion cos(theta)");
251 AddVar3VF(output(), truepi_dir,
"true pion direction");
260 if (addBase) _numuCCAnalysis->FillMicroTrees(addBase);
262 if (mybox().HMNtrack ) {
263 if( mybox().HMNtrack->TrueObject ){
264 output().
FillVar(MuonIndex,mybox().HMNtrack->TrueObject->ID);
265 if( mybox().HMNtrack->GetTrueParticle()->TrueVertex )
266 output().
FillVar(MuonVertexId,static_cast<AnaTrueVertex*>(mybox().HMNtrack->GetTrueParticle()->TrueVertex)->RooVtxIndex);
272 for( Int_t i = 0; i < mybox().nNegativePionTPCtracks; i++ ){
273 AnaTrackB *track = mybox().NegativePionTPCtracks[i];
289 output().IncrementCounter(NNegPion);
293 for( Int_t i = 0; i <mybox().nPositivePionTPCtracks; i++ ){
294 AnaTrackB *track = mybox().PositivePionTPCtracks[i];
311 output().
FillVar(truepi_costheta, (Float_t)cos(anaUtils::ArrayToTVector3(vtx->
PionDir).Angle(anaUtils::ArrayToTVector3(vtx->
NuDir))));
319 if (trk->
PDG == 211) {
321 output().
FillVar(truepi_costheta, (Float_t)cos(anaUtils::ArrayToTVector3(trk->
Direction).Angle(anaUtils::ArrayToTVector3(vtx->
NuDir))));
334 output().IncrementCounter(NPosPion);
338 for( Int_t i = 0; i < mybox().nElPi0TPCtracks; i++ ) {
339 AnaTrackB *track = mybox().ElPi0TPCtracks[i];
354 output().IncrementCounter(NPi0El);
358 for( Int_t i = 0; i < mybox().nPosPi0TPCtracks; i++ ) {
359 AnaTrackB *track = mybox().PosPi0TPCtracks[i];
374 output().IncrementCounter(NPi0Pos);
379 for( Int_t i = 0; i < mybox().nPositiveTPCtracks; i++ ) {
380 AnaTrackB *track = mybox().PositiveTPCtracks[i];
382 if( mybox().HMNtrack == track )
continue;
400 output().IncrementCounter(NTPCSec);
404 for( Int_t i = 0; i < mybox().nNegativeTPCtracks; i++ ) {
405 AnaTrackB *track = mybox().NegativeTPCtracks[i];
406 if( mybox().HMNtrack == track )
continue;
423 output().IncrementCounter(NTPCSec);
427 for (Int_t i=0;i < mybox().nIsoFGDPiontracks;i++){
428 AnaTrackB* track = mybox().IsoFGDPiontracks[i];
430 if( !fgdTrack )
continue;
455 if( mybox().HMNtrack ) {
456 Float_t deltainimuinipi = TMath::Abs(timeinipi-mybox().HMNtrack->PositionStart[3]);
457 Float_t deltaendmuinipi = TMath::Abs(timeendpi-mybox().HMNtrack->PositionStart[3]);
458 output().
FillVectorVar(FGDPiDeltaTimeIniSelMu,deltainimuinipi);
459 output().
FillVectorVar(FGDPiDeltaTimeEndSelMu,deltaendmuinipi);
461 Float_t dist1 = (anaUtils::ArrayToTVector3(fgdTrack->
PositionStart) - anaUtils::ArrayToTVector3(mybox().HMNtrack->PositionStart)).Mag();
462 Float_t dist2 = (anaUtils::ArrayToTVector3(fgdTrack->
PositionEnd) - anaUtils::ArrayToTVector3(mybox().HMNtrack->PositionStart)).Mag();
463 output().
FillVectorVar(FGDPiDistance,TMath::Min(dist1,dist2));
465 output().IncrementCounter(NFGDPi);
469 for (Int_t i=0;i < mybox().nIsoFGDElPi0tracks;i++){
470 AnaTrackB* track = mybox().IsoFGDElPi0tracks[i];
472 if( !fgdTrack )
continue;
483 if( mybox().HMNtrack ) {
484 Float_t deltainimuiniEl = TMath::Abs(timeiniEl-mybox().HMNtrack->PositionStart[3]);
485 Float_t deltaendmuiniEl = TMath::Abs(timeendEl-mybox().HMNtrack->PositionStart[3]);
486 Float_t dist1 = (anaUtils::ArrayToTVector3(fgdTrack->
PositionStart) - anaUtils::ArrayToTVector3(mybox().HMNtrack->PositionStart)).Mag();
487 Float_t dist2 = (anaUtils::ArrayToTVector3(fgdTrack->
PositionEnd) - anaUtils::ArrayToTVector3(mybox().HMNtrack->PositionStart)).Mag();
488 Float_t prodEl1 = anaUtils::ArrayToTVector3(fgdTrack->
DirectionStart)*anaUtils::ArrayToTVector3(mybox().HMNtrack->DirectionStart);
490 output().
FillVectorVar(FGDElDeltaTimeIniSelMu,deltainimuiniEl);
491 output().
FillVectorVar(FGDElDeltaTimeEndSelMu,deltaendmuiniEl);
492 output().
FillVectorVar(FGDElDistance,TMath::Min(dist1,dist2));
509 output().IncrementCounter(NFGDEl);
515 if (_fgdID == SubDetId::kFGD1){
516 nFGD =
_event->EventBoxes[EventBoxId::kEventBoxTracker]->
nRecObjectsInGroup[EventBoxTracker::kTracksWithFGD1AndNoTPC];
517 allFGDParticles =
_event->EventBoxes[EventBoxId::kEventBoxTracker]->RecObjectsInGroup[EventBoxTracker::kTracksWithFGD1AndNoTPC];
519 else if (_fgdID == SubDetId::kFGD2){
520 nFGD =
_event->EventBoxes[EventBoxId::kEventBoxTracker]->
nRecObjectsInGroup[EventBoxTracker::kTracksWithFGD2AndNoTPC];
521 allFGDParticles =
_event->EventBoxes[EventBoxId::kEventBoxTracker]->RecObjectsInGroup[EventBoxTracker::kTracksWithFGD2AndNoTPC];
523 for (Int_t i=0;i<nFGD;i++){
526 if( !fgdTrack )
continue;
540 if( mybox().HMNtrack ) {
541 Float_t deltainimuini = TMath::Abs(timeini-mybox().HMNtrack->PositionStart[3]);
542 Float_t deltaendmuini = TMath::Abs(timeend-mybox().HMNtrack->PositionStart[3]);
543 output().
FillVectorVar(FGDSecDeltaTimeIniSelMu,deltainimuini);
544 output().
FillVectorVar(FGDSecDeltaTimeEndSelMu,deltaendmuini);
557 output().IncrementCounter(NFGDSec);
566 for (Int_t i=0;i < EventBox->nFGDMichelElectrons[det] ;i++){
568 if( me->NHits[0] != 0 ) {
578 output().IncrementCounter(NME);
583 if (
box().DetectorFV == SubDetId::kFGD1) tpc = SubDetId::kTPC2;
586 anaUtils::CreateArray(TPCtracks, NMAXPARTICLES);
587 Int_t nTPCtracks = FindTPCTracks(mybox(), tpc, TPCtracks);
589 for( Int_t i = 0; i < nTPCtracks; i++ ) {
591 if( !track )
continue;
604 output().IncrementCounter(NTPC1Track);
612 for(
int ii = 0; ii < pionSI->nInteractions; ii++){
614 int intType = pionSI->typeInteraction[ii];
616 if (intType%10 == 0) mech = 0;
617 else if (intType%10 == 1) mech = 1;
618 else if (intType%10 == 4) mech = 2;
621 output().IncrementCounter(NInts);
623 for(
int ns = 0; ns < pionSI->nPions; ns++){
626 output().IncrementCounter(NPions);
639 Int_t nTPCtracks = 0;
641 for(
int i = 0; i < box.nPositiveTPCtracks; i++ ) {
644 TPCtracks[nTPCtracks++] = ptrack;
648 for(
int i = 0; i < box.nNegativeTPCtracks; i++ ) {
651 TPCtracks[nTPCtracks++] = ptrack;
659 void numuCCMultiPiAnalysis::FillToyVarsInMicroTrees(
bool addBase){
663 if (addBase) _numuCCAnalysis->FillToyVarsInMicroTrees(addBase);
666 for( Int_t i = 0; i <mybox().nPositivePionTPCtracks; i++ ){
667 AnaTrackB *track = mybox().PositivePionTPCtracks[i];
674 if(
box().MainTrack &&
box().MainTrack->TrueObject) {
692 bool numuCCMultiPiAnalysis::CheckFillTruthTree(
const AnaTrueVertex& vtx){
697 bool numuCCinFV = (anaUtils::GetReactionCC(vtx, _fgdID) == 1);
704 bool topoCCinFV = (topo == 0 || topo == 1 || topo == 2);
706 return (numuCCinFV || topoCCinFV);
710 void numuCCMultiPiAnalysis::FillTruthTree(
const AnaTrueVertex& vtx){
714 _numuCCAnalysis->FillTruthTree(vtx);
719 if (DEBUG) std::cout <<
"INFO: Pion info found: vtx.PionMom = " << vtx.
PionMom << std::endl;
721 output().
FillVar(truepi_costheta, (Float_t)cos(anaUtils::ArrayToTVector3(vtx.
PionDir).Angle(anaUtils::ArrayToTVector3(vtx.
NuDir))));
729 if (trk->
PDG == 211) {
730 if (DEBUG) std::cout <<
"INFO: No pion info (AnaTrueVertex::PionMom), but found pion (AnaTrueVertexB::TrueParticles) with trk->Momentum = " << trk->
Momentum << std::endl;
733 output().
FillVar(truepi_costheta, (Float_t)cos(anaUtils::ArrayToTVector3(trk->
Direction).Angle(anaUtils::ArrayToTVector3(vtx.
NuDir))));
751 output().
FillVar(true_signal, ts);
AnaTrueVertexB * TrueVertex
Pointer to the AnaTrueVertexB of the interaction that created this AnaTrueParticleB.
Float_t PositionStart[4]
The reconstructed start position of the particle.
void SetMinAccumCutLevelToSave(Int_t level)
Set the minimum accumulated cut level to save an event into the micro-tree.
int GetParameterI(std::string)
Get parameter. Value is returned as integer.
int nTrueParticles
How many true particles are associated with this vertex.
Int_t RooVtxIndex
The index of the associated RooTrackerVtx vertex from its position in the TClonesArray.
void AddPackage(const std::string &name, const std::string &version)
Add a package.
void FillVectorVar(Int_t index, Float_t var, Int_t indx=-1)
Fill a vector variable.
void FillToyVectorVar(Int_t index, Int_t var, Int_t comp)
Fill a vector analysis variable.
Int_t GParentPDG
The PDG code of this particle's grandparent, or 0 if there is no grandparent.
AnaTrackB * MainTrack
For storing the Main Track (The lepton candidate in geranal: HMN or HMP track)
Float_t Pullpi
Pion pull, according to FGD information.
AnaTrueObjectC * TrueObject
The link to the true oject that most likely generated this reconstructed object.
static bool GetDetectorUsed(unsigned long BitField, SubDetId::SubDetEnum det)
Method to see if a certain subdetector or subdetector system is used.
Float_t Momentum
The initial momentum of the true particle.
AnaTrueParticleB ** TrueParticles
The true particles associated with this vertex.
Float_t AvgTime
Average Time for the iso FGD hits.
void FillMatrixVarFromArray(Int_t index, const Double_t var[], Int_t indx1, UInt_t size)
Fill a matrix variable from array.
Int_t GetTopology(const AnaTrueVertex &trueVertex, const SubDetId::SubDetEnum det=SubDetId::kFGD1, bool IsAntinu=false)
Classify reaction topologies.
Int_t ID
The ID of the trueObj, which corresponds to the ID of the TTruthParticle that created it...
std::string GetSoftwareVersionFromPath(const std::string &path)
Get The software version from the path of the package.
Float_t GetPIDLikelihood(const AnaTrackB &track, Int_t hypo, bool prod5Cut=0)
Int_t nRecObjectsInGroup[NMAXRECOBJECTGROUPS]
----—— RecObjects and TrueRecObjects used in the selection and systematics ------------—— ...
Float_t Momentum
The reconstructed momentum of the particle, at the start position.
Representation of a true Monte Carlo vertex.
virtual const ToyBoxTracker & box(Int_t isel=-1) const
Returns the ToyBoxTracker.
AnaEventC * _event
The current event.
Representation of a true Monte Carlo trajectory/particle.
SubDetEnum
Enumeration of all detector systems and subdetectors.
Int_t PDG
The PDG code of this particle.
Int_t ParentPDG
The PDG code of this particle's immediate parent, or 0 if there is no parent.
AnaFgdTimeBinB ** FGDMichelElectrons[2]
----------— Michel Electron candidates -------------------------------—
AnaTrackB ** NegativeTPCtracks
For storing all negative tracks in the event with TPC information.
AnaEvent & GetEvent()
Get a casted AnaEventC to AnaEvent.
Representation of a global track.
void FillToyVar(Int_t index, Int_t var)
Fill a single analysis variable.
void FillMicroTrees(bool addBase=false)
void FillVar(Int_t index, Float_t var)
Fill a single variable.
Float_t DirectionStart[3]
The reconstructed start direction of the particle.
void AddSelection(const std::string &name, const std::string &title, SelectionBase *sel, Int_t presel=-1)
Add a user selection to the selection manager.
Float_t PionDir[3]
The direction of the primary outgoing pions listed first (likely the interacted one).
Int_t Containment
Containment flag required for proper PID analysis.
bool Initialize()
[AnalysisAlgorithm_mandatory]
AnaTrackB ** PositiveTPCtracks
For storing all positive tracks in the event with TPC information.
void UseAnalysis(AnalysisAlgorithm *ana)
Used a given analysis.
Float_t NuDir[3]
The true (unit) direction of the incoming neutrino.
AnaTrueParticleB * GetTrueParticle() const
Return a casted version of the AnaTrueObject associated.
Float_t Direction[3]
The initial direction of the true particle.
void FillVectorVarFromArray(Int_t index, const Double_t var[], UInt_t size)
Fill a vector variable from array.
AnaFGDParticleB * FGDSegments[NMAXFGDS]
The FGD segments that contributed to this global track.
Float_t PionMom
The momentum of the primary outgoing pions listed first (likely the interacted one).
Int_t NPrimaryParticles[Int_t(ParticleId::kLast)+1]
Array to count the outgoing primary particles of each type (.
Float_t PositionEnd[4]
The reconstructed end position of the particle.