00001
00002
00003
00004
00005
00006
00008
00009 #include "NueAna/ParticlePID/NueMiniPID.h"
00010 #include "NueAna/ParticlePID/NueMiniAnaPID.h"
00011
00012 #include "MessageService/MsgService.h"
00013 #include "TMath.h"
00014 #include "NueAna/NueRecord.h"
00015 #include "NueAna/NueStandard.h"
00016 #include "NueAna/ParticlePID/ParticleAna/PRecord.h"
00017 #include "NueAna/NueHeader.h"
00018
00019
00020 CVSID("$Id: NueMiniAnaPID.cxx,v 1.10 2009/09/21 14:32:26 scavan Exp $");
00021
00022
00023
00024 void NueMiniAnaPID::FillMini(NueRecord *nr, NueMiniPID *nm, int domrcc)
00025 {
00026 if(!nr){
00027 MSG("NueMiniAnaPID", Msg::kError) << "No NueRecord Passed"<<endl;
00028 return;
00029 }
00030
00031 if(nr->GetHeader().GetRelease() != nm->fRelease){
00032 MSG("NueMiniAnaPID", Msg::kError) << "ReleaseType MisMatch: "
00033 << nr->GetHeader().GetRelease()<<" != "<<nm->fRelease<<endl;
00034 }
00035 if(nr->GetHeader().GetBeamType() != nm->fBeam){
00036 MSG("NueMiniAnaPID", Msg::kError) << "BeamType MisMatch: "
00037 << nr->GetHeader().GetBeamType()<<" != "<<nm->fBeam<<endl;
00038 }
00039 if(nr->GetHeader().GetVldContext().GetDetector() != nm->fDet){
00040 MSG("NueMiniAnaPID", Msg::kError) << "Detector MisMatch: "
00041 << nr->GetHeader().GetVldContext().GetDetector()
00042 <<" != "<<nm->fDet<<endl;
00043 }
00044
00045 nm->evtRecoNueEnergy = nr->srevent.phNueGeV;
00046 nm->evtRecoMEUEnergy = nr->srevent.phMip;
00047
00048 int tP = 0; int tLP = 0; float trkECC = 0;
00049 if(nr->srtrack.phCCGeV > -10){
00050 trkECC = nr->srtrack.phCCGeV;
00051 tP = TMath::Abs(nr->srtrack.endPlane - nr->srtrack.begPlane);
00052 tLP = nr->srtrack.trklikePlanes;
00053 }
00054 nm->trkRecoCCEnergy = trkECC;
00055 nm->trkPlanes = tP;
00056 nm->trkEndPlane = nr->srtrack.endPlane;
00057 nm->trkBegPlane = nr->srtrack.begPlane;
00058 nm->trkLikePlanes = tLP;
00059 nm->nshower = nr->srevent.showers;
00060 nm->contPlanes = nr->shwfit.contPlaneCount050;
00061
00062
00063 if(nr->srshower.phCCGeV > -10)
00064 nm->shwRecoCCEnergy = nr->srshower.phCCGeV;
00065 else nm->shwRecoCCEnergy = 0;
00066
00067 nm->ann14 = nr->ann.pid;
00068 nm->ann30 = nr->ann.pid_30inp;
00069 nm->ann6 = nr->ann.pid_6inp;
00070 nm->ann2pe = nr->ann.pid_11inp;
00071 nm->ann2pe_daikon04 = nr->ann.pid_11inp_daikon04;
00072
00073 nm->ssPID = nr->subshowervars.pid;
00074 nm->cutPID = nr->treepid.fCutPID;
00075 nm->mcnnPID = nr->mcnnv.mcnn_var1;
00076 nm->mcnnMatch = nr->mcnnv.bestmatches;
00077
00078
00079 nm->shiEpi0 = nr->shi.epi0;
00080 nm->shiEmEnergy = nr->shi.emenergy;
00081 nm->nuEnergy = nr->mctrue.nuEnergy;
00082 nm->nuFlavor = nr->mctrue.nuFlavor;
00083 nm->nonOscNuFlavor = nr->mctrue.nonOscNuFlavor;
00084 nm->nueClass = nr->mctrue.fNueClass;
00085
00086 nm->nueOscProb = nr->mctrue.fOscProb;
00087 nm->interactionType = nr->mctrue.interactionType;
00088 nm->nuDCosX = nr->mctrue.nuDCosX;
00089 nm->nuDCosY = nr->mctrue.nuDCosY;
00090 nm->nuDCosZ = nr->mctrue.nuDCosZ;
00091 nm->hadronicY = nr->mctrue.hadronicY;
00092 nm->hadronicFinalState = nr->mctrue.hadronicFinalState;
00093 nm->w2 = nr->mctrue.w2;
00094 nm->q2 = nr->mctrue.q2;
00095 nm->bjorkenX = nr->mctrue.bjorkenX;
00096 nm->targetPX = nr->mctrue.targetPX;
00097 nm->targetPY = nr->mctrue.targetPY;
00098 nm->targetPZ = nr->mctrue.targetPZ;
00099 nm->targetEnergy = nr->mctrue.targetEnergy;
00100 nm->atomicNumber = nr->mctrue.atomicNumber;
00101 nm->atomicWeight = nr->mctrue.atomicWeight;
00102 nm->initialState = nr->mctrue.initialState;
00103 nm->resonanceCode = nr->mctrue.resonanceCode;
00104
00105 nm->skzpWeight = nr->fluxweights.totbeamweight;
00106 nm->MCWeight = NueStandard::GetMCWeights(nr);
00107
00108 nm->ntrack = nr->srevent.tracks;
00109 nm->trkPass = nr->srtrack.passedFit;
00110 nm->endPlaneU = nr->srtrack.endPlaneU;
00111 nm->endPlaneV = nr->srtrack.endPlaneV;
00112 nm->deltaUVVtx = nr->srtrack.deltaUVVtx;
00113 nm->abCCPID = nr->anainfo.abCCPID;
00114 nm->roCCPID = nr->anainfo.roCCPID;
00115
00116 nm->mri_roCCPID = nr->mri.orig_roCCPID;
00117 nm->mri_abCCPID = nr->mri.orig_abCCPID;
00118 nm->mri_trkPass = nr->mri.fitp;
00119 nm->gapPlanes = nr->srshower.gapPlanes;
00120 nm->neugenStdXsec = 1;
00121 nm->cosmicCut = (int) nr->eventq.passCosmicCut;
00122 nm->largestEvent = nr->srevent.largestEvent;
00123
00124 PRecord *pr = & nr->precord;
00125 if(domrcc)
00126 pr=& nr->precordMRCC;
00127
00128
00129 nm->longest_s=pr->particles.longest_s_particle_s;
00130 nm->event_length=pr->event.max_z-pr->event.min_z;
00131 nm->ntot=pr->particles.ntot;
00132 nm->infid=pr->event.inFiducial == 1;
00133 nm->contained=pr->event.contained == 1;
00134 nm->event_energy = pr->event.visenergy;
00135 nm->particle_energy = pr->particles.totvise;
00136
00137
00138 nm->pidA=pr->event.pidA;
00139 nm->pidB=pr->event.pidB;
00140 nm->pidC=pr->event.pidC;
00141 nm->pidD=pr->event.pidD;
00142 nm->pidE=pr->event.pidE;
00143 nm->pidF=pr->event.pidF;
00144
00145 if(domrcc)
00146 nm->mrcc_s = pr->mrccinfo.hasMRCC ? pr->mrccinfo.particle_s : 0;
00147
00148
00149
00150
00151
00152 bool pass=1;
00153
00154 if(pr->particles.longest_s_particle_s<0 || pr->particles.longest_s_particle_s>6)pass=0;
00155 if(pr->particles.longest_z<0 || pr->particles.longest_z>6)pass=0;
00156 if(pr->particles.ntot<0 || pr->particles.ntot>50)pass=0;
00157 if(pr->particles.rms_r<0 || pr->particles.rms_r>100)pass=0;
00158 if(pr->particles.prim_par_e0<0 || pr->particles.prim_par_e0>40e3)pass=0;
00159 if(pr->particles.prim_par_chisq<0 || pr->particles.prim_par_chisq>1000)pass=0;
00160 if(pr->particles.largest_particle_peakdiff<-200 || pr->particles.largest_particle_peakdiff>200)pass=0;
00161 if(nm->event_length<0 || nm->event_length>6)pass=0;
00162
00163 nm->pass_var_check=pass;
00164
00165 pass=1;
00166 double mstvar_combine = nr->mstvars.e4w+nr->mstvars.o4w;
00167 if(nr->shwfit.par_b<0 || nr->shwfit.par_b>6)pass=0;
00168 if(mstvar_combine<-1000 || mstvar_combine>1000)pass=0;
00169 if(nr->shwfit.LongE<0 || nr->shwfit.LongE>1200)pass=0;
00170 nm->pass_nvar_check=pass;
00171
00172
00173 double largest_frac=pr->particles.totvise ?
00174 pr->particles.largest_particle_e/pr->particles.totvise : 1;
00175 double prim_ae0=pr->particles.prim_par_e0 ?
00176 pr->particles.prim_par_a/pr->particles.prim_par_e0 : 0;
00177 double largest_cmp_chisqndf = pr->particles.largest_particle_cmp_ndf ?
00178 pr->particles.largest_particle_cmp_chisq /
00179 pr->particles.largest_particle_cmp_ndf : 0;
00180
00181
00182 int z=0;
00183 nm->pars[z++]=pr->particles.longest_s_particle_s;
00184 nm->pars[z++]=pr->particles.mol_rad_r;
00185 nm->pars[z++]=pr->particles.emfrac;
00186 nm->pars[z++]=pr->particles.ntot;
00187 nm->pars[z++]=pr->particles.weighted_phi;
00188 nm->pars[z++]=largest_frac;
00189 nm->pars[z++]=pr->particles.prim_par_b;
00190 nm->pars[z++]=pr->particles.prim_par_e0;
00191 nm->pars[z++]=pr->particles.prim_par_chisq;
00192 nm->pars[z++]=pr->particles.largest_particle_peakdiff;
00193 nm->pars[z++]=largest_cmp_chisqndf;
00194 nm->pars[z++]=pr->particles.prim_par_a;
00195 nm->pars[z++]=pr->event.nclusters;
00196 nm->pars[z++]=prim_ae0;
00197
00198
00199
00200 nm->vtxU=pr->event.vtx_u;
00201 nm->vtxV=pr->event.vtx_v;
00202 nm->vtxZ=pr->event.vtx_z;
00203
00204 nm->nueVtxX=nr->srevent.vtxX;
00205 nm->nueVtxY=nr->srevent.vtxY;
00206 nm->nueVtxZ=nr->srevent.vtxZ;
00207
00208
00209
00210
00211
00212 nm->run=nr->GetHeader().GetRun();
00213 nm->subrun=nr->GetHeader().GetSubRun();
00214 nm->event=nr->GetHeader().GetEventNo();
00215 nm->snarl=nr->GetHeader().GetSnarl();
00216
00217 nm->passes_NueStandard_PassesDataQuality=NueStandard::PassesDataQuality(nr);
00218 nm->passes_NueStandard_IsInFid=NueStandard::IsInFid(nr);
00219 nm->passes_NueStandard_PassesPOTStandards=NueStandard::PassesPOTStandards(nr);
00220 nm->passes_NueStandard_PassesCosmicCut=NueStandard::PassesCosmicCut(nr);
00221 nm->passes_NueStandard_PassesNonHEPreSelection=NueStandard::PassesNonHEPreSelection(nr);
00222 nm->passes_NueStandard_PassesPreSelection=NueStandard::PassesPreSelection(nr);
00223
00224 nm->passes_NueStandard_PassesMinPlaneCut=NueStandard::PassesMinPlaneCut(nr);
00225 nm->passes_NueStandard_PassesShowerCut=NueStandard::PassesShowerCut(nr);
00226 nm->passes_NueStandard_PassesTrackPlaneCut=NueStandard::PassesTrackPlaneCut(nr);
00227 nm->passes_NueStandard_PassesTrackLikePlaneCut=NueStandard::PassesTrackLikePlaneCut(nr);
00228 nm->passes_NueStandard_PassesLowEnergyCut=NueStandard::PassesLowEnergyCut(nr);
00229 nm->passes_NueStandard_PassesHighEnergyCut=NueStandard::PassesHighEnergyCut(nr);
00230
00231 nm->passes_NueStandard_PassesMRCCFiducial=NueStandard::PassesMRCCFiducial(nr);
00232 nm->passes_NueStandard_PassesMRCCPreSelection=NueStandard::PassesMRCCPreSelection(nr);
00233
00234
00235
00236 nm->timestamp = nr->GetHeader().GetVldContext().GetTimeStamp().GetSec();
00237
00238
00239 nm->mri_qp=nr->mri.qp;
00240 nm->mri_orig_cc_pid=nr->mri.orig_cc_pid;
00241 nm->mri_SigmaQP=nr->mri.SigmaQP;
00242
00243 nm->mri_best_complete=nr->mri.best_complete;
00244 nm->mri_fitp=nr->mri.fitp;
00245
00246
00247 }
00248
00249 void NueMiniAnaPID::FillRecord(NueRecord *nr, NueMiniPID *nm, int domrcc)
00250 {
00251 if(!nr || !nm){
00252 MSG("NueMiniPID", Msg::kError) << "No NueRecord Passed"<<endl;
00253 return;
00254 }
00255
00256 nr->srevent.phNueGeV = nm->evtRecoNueEnergy;
00257 nr->srevent.phMip = nm->evtRecoMEUEnergy;
00258 nr->srtrack.phCCGeV = nm->trkRecoCCEnergy;
00259 nr->srtrack.trklikePlanes = nm->trkLikePlanes;
00260 nr->srtrack.begPlane = nm->trkBegPlane;
00261 nr->srtrack.endPlane = nm->trkEndPlane;
00262 nr->srshower.phCCGeV = nm->shwRecoCCEnergy;
00263
00264 nr->srevent.showers = nm->nshower;
00265 nr->shwfit.contPlaneCount050 = nm->contPlanes;
00266
00267 nr->ann.pid= nm->ann14;
00268 nr->ann.pid_11inp = nm->ann2pe;
00269 nr->ann.pid_11inp_daikon04 = nm->ann2pe_daikon04;
00270 nr->ann.pid_30inp = nm->ann30;
00271 nr->ann.pid_6inp = nm->ann6;
00272 nr->subshowervars.pid = nm->ssPID;
00273 nr->treepid.fCutPID = nm->cutPID;
00274 nr->mcnnv.mcnn_var1 = nm->mcnnPID;
00275 nr->mcnnv.bestmatches = nm->mcnnMatch;
00276
00277
00278 nr->shi.epi0 = nm->shiEpi0;
00279 nr->shi.emenergy = nm->shiEmEnergy;
00280 nr->mctrue.nuEnergy = nm->nuEnergy;
00281 nr->mctrue.nuFlavor = nm->nuFlavor;
00282 nr->mctrue.nonOscNuFlavor = nm->nonOscNuFlavor;
00283 nr->mctrue.fNueClass = nm->nueClass;
00284
00285 nr->mctrue.fOscProb = nm->nueOscProb;
00286 nr->mctrue.interactionType = nm->interactionType;
00287 nr->mctrue.nuDCosX = nm->nuDCosX;
00288 nr->mctrue.nuDCosY = nm->nuDCosY;
00289 nr->mctrue.nuDCosZ = nm->nuDCosZ;
00290 nr->mctrue.hadronicY = nm->hadronicY;
00291 nr->mctrue.hadronicFinalState = nm->hadronicFinalState;
00292 nr->mctrue.w2 = nm->w2;
00293 nr->mctrue.q2 = nm->q2;
00294 nr->mctrue.bjorkenX = nm->bjorkenX;
00295 nr->mctrue.targetPX = nm->targetPX;
00296 nr->mctrue.targetPY = nm->targetPY;
00297 nr->mctrue.targetPZ = nm->targetPZ;
00298 nr->mctrue.targetEnergy = nm->targetEnergy;
00299 nr->mctrue.atomicNumber = nm->atomicNumber;
00300 nr->mctrue.atomicWeight = nm->atomicWeight;
00301 nr->mctrue.initialState = nm->initialState;
00302 nr->mctrue.resonanceCode = nm->resonanceCode;
00303
00304 nr->fluxweights.totbeamweight = nm->skzpWeight;
00305
00306 nr->srevent.tracks = nm->ntrack;
00307 nr->srtrack.passedFit = nm->trkPass;
00308 nr->srtrack.endPlaneU = nm->endPlaneU;
00309 nr->srtrack.endPlaneV = nm->endPlaneV;
00310 nr->srtrack.deltaUVVtx = nm->deltaUVVtx;
00311 nr->anainfo.abCCPID = nm->abCCPID;
00312 nr->anainfo.roCCPID = nm->roCCPID;
00313
00314 nr->mri.orig_roCCPID = nm->mri_roCCPID;
00315 nr->mri.orig_abCCPID = nm->mri_abCCPID;
00316 nr->mri.fitp = nm->mri_trkPass;
00317 nr->srshower.gapPlanes = nm->gapPlanes;
00318 nr->eventq.passCosmicCut = nm->cosmicCut;
00319 nr->srevent.largestEvent = nm->largestEvent;
00320
00321 PRecord *pr = & nr->precord;
00322 if(domrcc)
00323 pr=& nr->precordMRCC;
00324
00325
00326 pr->particles.longest_s_particle_s=nm->longest_s;
00327
00328
00329 pr->event.max_z=nm->event_length;
00330 pr->event.min_z=0;
00331
00332 pr->particles.ntot=nm->ntot;
00333 pr->event.inFiducial=nm->infid;
00334 pr->event.contained=nm->contained;
00335 pr->event.visenergy=nm->event_energy;
00336 pr->particles.totvise=nm->particle_energy;
00337
00338 pr->event.pidA=nm->pidA;
00339 pr->event.pidB=nm->pidB;
00340 pr->event.pidC=nm->pidC;
00341 pr->event.pidD=nm->pidD;
00342 pr->event.pidE=nm->pidE;
00343 pr->event.pidF=nm->pidF;
00344
00345 if(domrcc)
00346 pr->mrccinfo.particle_s = nm->mrcc_s;
00347
00348
00349
00350 pr->event.vtx_u=nm->vtxU;
00351 pr->event.vtx_v=nm->vtxV;
00352 pr->event.vtx_z=nm->vtxZ;
00353
00354 nr->srevent.vtxX=nm->nueVtxX;
00355 nr->srevent.vtxY=nm->nueVtxY;
00356 nr->srevent.vtxZ=nm->nueVtxZ;
00357
00358 NueHeader * nh = const_cast<NueHeader *> (&(nr->GetHeader()));
00359 nh->SetRun(nm->run);
00360 nh->SetSubRun(nm->subrun);
00361 nh->SetEventNo(nm->event);
00362 nh->SetSnarl(nm->snarl);
00363
00364
00365
00366 nr->mri.qp=nm->mri_qp;
00367 nr->mri.orig_cc_pid=nm->mri_orig_cc_pid;
00368 nr->mri.SigmaQP=nm->mri_SigmaQP;
00369
00370 nr->mri.best_complete=nm->mri_best_complete;
00371 nr->mri.fitp=nm->mri_fitp;
00372
00373 }
00374