Acceptance.cc File Reference

#include <iostream>
#include <string>
#include <sstream>
#include <cassert>
#include <vector>
#include <fstream>
#include <stdio.h>
#include <iomanip>
#include <cstdlib>
#include "TRint.h"
#include "TROOT.h"
#include "TFile.h"
#include "TTree.h"
#include "TBranch.h"
#include "TRandom.h"
#include <TH1F.h>
#include <TH2F.h>
#include <TCanvas.h>
#include <TChain.h>
#include "MIPPEventSummary/MIPPEventSummary.h"
#include "MIPPEventSummary/MIPPMCSummary.h"
#include "DSTAnalysis/DSTUtil.h"
#include "NumericalMethods/NMRandom.h"

Go to the source code of this file.

Functions

int getPid (MIPPTPCSummary *itpc)
int getPidCkov (MIPPDCkovSummary *ickov)
int getPidToF (MIPPToFSummary *itof)
int getPidRICH (MIPPRICHSummary *iRICH)
int main (int argc, char **argv)


Function Documentation

int getPid ( MIPPTPCSummary itpc  ) 

Definition at line 32 of file Acceptance.cc.

References PIDDef::kNPID, and MIPPPIDSummary::LL.

Referenced by main().

00032                                  {
00033   
00034   int maxLikelyhoodIndex = 0;
00035   
00036   // checking for regular pids
00037   for (int iPart = 1; iPart < PIDDef::kNPID; iPart++){
00038     
00039     if (itpc->LL[iPart] >
00040     itpc->LL[maxLikelyhoodIndex]){
00041       
00042       maxLikelyhoodIndex = iPart;
00043     }
00044     else if (itpc->LL[iPart] == 
00045          itpc->LL[maxLikelyhoodIndex]){
00046       //printf("Two likelyhoods are identical...\n");  
00047     }
00048   }
00049   
00050   return maxLikelyhoodIndex;
00051 }

int getPidCkov ( MIPPDCkovSummary ickov  ) 

Definition at line 53 of file Acceptance.cc.

References PIDDef::kNPID, and MIPPPIDSummary::LL.

Referenced by main().

00053                                        {
00054   
00055   int maxLikelyhoodIndex = 0;
00056   
00057   // checking for regular pids
00058   for (int iPart = 1; iPart < PIDDef::kNPID; iPart++){
00059     
00060     if (ickov->LL[iPart] >
00061     ickov->LL[maxLikelyhoodIndex]){
00062       
00063       maxLikelyhoodIndex = iPart;
00064     }
00065     else if (ickov->LL[iPart] == 
00066          ickov->LL[maxLikelyhoodIndex]){
00067       
00068       //printf("Two likelyhoods are identical...\n");
00069     }
00070   }
00071   
00072   return maxLikelyhoodIndex;
00073 }

int getPidRICH ( MIPPRICHSummary iRICH  ) 

Definition at line 98 of file Acceptance.cc.

References PIDDef::kNPID, and MIPPPIDSummary::LL.

Referenced by main().

00098                                       {
00099   
00100   int maxLikelyhoodIndex = 0;
00101   
00102   // checking for regular pids
00103   for (int iPart = 1; iPart < PIDDef::kNPID; iPart++){
00104     
00105     if (iRICH->LL[iPart] > iRICH->LL[maxLikelyhoodIndex]){
00106       
00107       maxLikelyhoodIndex = iPart;
00108     }
00109     else if (iRICH->LL[iPart] == iRICH->LL[maxLikelyhoodIndex]){
00110       
00111       //printf("Two likelyhoods are identical...\n");  
00112     }
00113   }
00114   
00115   return maxLikelyhoodIndex;
00116 }

int getPidToF ( MIPPToFSummary itof  ) 

Definition at line 76 of file Acceptance.cc.

References PIDDef::kNPID, and MIPPToFSummary::LL.

Referenced by main().

00076                                    {
00077   
00078   int maxLikelyhoodIndex = 0;
00079   
00080   // checking for regular pids
00081   for (int iPart = 1; iPart < PIDDef::kNPID; iPart++){
00082     
00083     if (itof->LL[iPart] >
00084     itof->LL[maxLikelyhoodIndex]){
00085       
00086       maxLikelyhoodIndex = iPart;
00087     }
00088     else if (itof->LL[iPart] == 
00089          itof->LL[maxLikelyhoodIndex]){
00090       
00091       //printf("Two likelyhoods are identical...\n");
00092     }
00093   }
00094   
00095   return maxLikelyhoodIndex;
00096 }

int main ( int  argc,
char **  argv 
)

Definition at line 119 of file Acceptance.cc.

References MIPPTPCSummary::dedx, evtTree, f, fMC(), fout, MIPPEventSummary::GetDCkov(), DSTUtil::GetEvtTree(), DSTUtil::GetFileList(), getPid(), getPidCkov(), getPidRICH(), getPidToF(), MIPPEventSummary::GetRICH(), MIPPEventSummary::GetToF(), MIPPEventSummary::GetTPC(), MIPPEventSummary::GetTrk(), gStop, MIPPTrackSummary::idckov, MIPPTrackSummary::irich, MIPPTrackSummary::itof, MIPPTrackSummary::itpc, PIDDef::kKaon, PIDDef::kPion, PIDDef::kProton, MIPPEventSummary::NBTrk(), MIPPTrackSummary::ptot, and MIPPMCVertexSummary::x.

00119                                 {
00120   if (argc <2){
00121     cout << "Not Enough Arguments!" << endl;
00122     exit(-1);
00123   }
00124   // Extract file names from the command-line arguments
00125   vector<string> list;
00126   DSTUtil::GetFileList(argc,argv,list);
00127   if (list.empty()){
00128     cout << argv[0] << "Found NO files to work with!" << endl;
00129     return -1;
00130   }
00131   //...................................................................
00132   
00133   MIPPEventSummary* fEvt = new MIPPEventSummary;
00134   MIPPMCSummary* fMC = new MIPPMCSummary;
00135   
00136   TFile* fout = TFile::Open("dstAcceptance.root", "recreate");
00137   
00138   //...................................................................
00139   //Constants and arrays
00140   
00141   int const knybin = 6;
00142   int const knxbin = 21;
00143   double binsx[knxbin+1] = {0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.4, 1.9, 2.5, 3.2, 4.0, 4.9, 5.9, 7.0, 14.0, 22.0, 31.0, 41.0, 56.0};
00144   double binsy[knybin+1] = {0.7660444431, 0.8660254038, 0.9396926208, 0.9781476007, 0.9902680687, 0.9975640503, 1.0};//Angle Bins
00145   
00146   //---------------------------------------------------------------------------
00147   //Begin Histogram Definitions
00148   TH2F* hReco = new TH2F("ThetaMomReco","Theta vs Momentum for Reco",knxbin,0,knxbin,knybin,0,6.0); 
00149   hReco->Sumw2();
00150   TH2F* hReco2 = new TH2F("ThetaMomReco2","Theta vs Momentum for Reco2",knxbin,0,knxbin,knybin,0,6.0);
00151   hReco2->Sumw2();
00152   TH2F* hRecoPosPi = new TH2F("RecoPosPi","Theta vs Momentum for RecoPosPi",knxbin,0,knxbin,knybin,0,6.0);
00153   hRecoPosPi->Sumw2();
00154   TH2F* hRecoPosK = new TH2F("RecoPosK","Theta vs Momentum for RecoPosK",knxbin,0,knxbin,knybin,0,6.0);
00155   hRecoPosK->Sumw2();
00156   TH2F* hRecoPosP = new TH2F("RecoPosP","Theta vs Momentum for RecoPosP",knxbin,0,knxbin,knybin,0,6.0);
00157   hRecoPosP->Sumw2();
00158   TH2F* hRecoNegPi = new TH2F("RecoNegPi","Theta vs Momentum for RecoNegPi",knxbin,0,knxbin,knybin,0,6.0);
00159   hRecoNegPi->Sumw2();
00160   TH2F* hRecoNegK = new TH2F("RecoNegK","Theta vs Momentum for RecoNegK",knxbin,0,knxbin,knybin,0,6.0);
00161   hRecoNegK->Sumw2();
00162   TH2F* hRecoNegP = new TH2F("RecoNegP","Theta vs Momentum for RecoNegP",knxbin,0,knxbin,knybin,0,6.0);
00163   hRecoNegP->Sumw2();
00164   TH2F* hTruth = new TH2F("Truth","Theta vs Momentum for Truth",knxbin,0,knxbin,knybin,0,6.0); 
00165   hTruth->Sumw2();
00166   TH2F* hTruthPosPi = new TH2F("TruthPosPi","Theta vs Momentum for TruthPosPi",knxbin,0,knxbin,knybin,0,6.0); 
00167   hTruthPosPi->Sumw2();
00168   TH2F* hTruthPosK = new TH2F("TruthPosK","Theta vs Momentum for TruthPosK",knxbin,0,knxbin,knybin,0,6.0); 
00169   hTruthPosK->Sumw2();
00170   TH2F* hTruthPosP = new TH2F("TruthPosP","Theta vs Momentum for TruthPosP",knxbin,0,knxbin,knybin,0,6.0); 
00171   hTruthPosP->Sumw2();
00172   TH2F* hTruthNegPi = new TH2F("TruthNegPi","Theta vs Momentum for TruthNegPi",knxbin,0,knxbin,knybin,0,6.0); 
00173   hTruthNegPi->Sumw2();
00174   TH2F* hTruthNegK = new TH2F("TruthNegK","Theta vs Momentum for TruthNegK",knxbin,0,knxbin,knybin,0,6.0); 
00175   hTruthNegK->Sumw2();
00176   TH2F* hTruthNegP = new TH2F("TruthNegP","Theta vs Momentum for TruthNegP",knxbin,0,knxbin,knybin,0,6.0); 
00177   hTruthNegP->Sumw2();
00178   TH2F* hAcceptance = new TH2F("Accpt","Detector Acceptance",knxbin,0,knxbin,knybin,0,6.0);
00179   hAcceptance->Sumw2();
00180   TH2F* hAcceptPPi = new TH2F("AccptPPi","Detector AcceptancePPi",knxbin,0,knxbin,knybin,0,6.0);
00181   hAcceptPPi->Sumw2();
00182   TH2F* hAcceptPK = new TH2F("AccptPK","Detector AcceptancePK",knxbin,0,knxbin,knybin,0,6.0);
00183   hAcceptPK->Sumw2();
00184   TH2F* hAcceptPP = new TH2F("AccptPP","Detector AcceptancePP",knxbin,0,knxbin,knybin,0,6.0);
00185   hAcceptPP->Sumw2();
00186   TH2F* hAcceptNPi = new TH2F("AccptNPi","Detector AcceptanceNPi",knxbin,0,knxbin,knybin,0,6.0);
00187   hAcceptNPi->Sumw2();
00188   TH2F* hAcceptNK = new TH2F("AccptNK","Detector AcceptanceNK",knxbin,0,knxbin,knybin,0,6.0);
00189   hAcceptNK->Sumw2();
00190   TH2F* hAcceptNP = new TH2F("AccptNP","Detector AcceptanceNP",knxbin,0,knxbin,knybin,0,6.0);
00191   hAcceptNP->Sumw2();
00192   TH2F* hTrackPi = new TH2F("TrackPi","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00193   hTrackPi->Sumw2();
00194   TH2F* hTrackK = new TH2F("TrackK","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00195   hTrackK->Sumw2();
00196   TH2F* hTrackP = new TH2F("TrackP","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00197   hTrackP->Sumw2();
00198   TH2F* hTrackAPi = new TH2F("TrackAPi","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00199   hTrackAPi->Sumw2();
00200   TH2F* hTrackAK = new TH2F("TrackAK","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00201   hTrackAK->Sumw2();
00202   TH2F* hTrackAP = new TH2F("TrackAP","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00203   hTrackAP->Sumw2();
00204   TH2F* hTrackEffPi = new TH2F("TrackEffPi","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00205   hTrackEffPi->Sumw2();
00206   TH2F* hTrackEffK = new TH2F("TrackEffK","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00207   hTrackEffK->Sumw2();
00208   TH2F* hTrackEffP = new TH2F("TrackEffP","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00209   hTrackEffP->Sumw2();
00210   TH2F* hTrackEffAPi = new TH2F("TrackEffAPi","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00211   hTrackEffAPi->Sumw2();
00212   TH2F* hTrackEffAK = new TH2F("TrackEffAK","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00213   hTrackEffAK->Sumw2();
00214   TH2F* hTrackEffAP = new TH2F("TrackEffAP","Track Matched",knxbin,0,knxbin,knybin,0,6.0);
00215   hTrackEffAP->Sumw2();
00216 
00217   
00218   //  TH1F* hHistoCut = new TH1F("cuts", "Number of Events after Cuts", 5, -0.5, 4.5);
00219   TH1F* hHistoPZ = new TH1F("pZ", "Momentum Z",100, -100, 60);
00220   TH1F* hHistoPT = new TH1F("pT", "Transverse Momentum", 100, -0.5,1.5);
00221   TH1F* hHistoPtot = new TH1F("Ptot", "Momentum",500, -100, 100);
00222   TH1F* hHistotht = new TH1F("tht", "cos tht", 500, -1.5,1.5);
00223   TH1F* hHistoTgt = new TH1F("tgt", "Target Position", 10000,-835,-825);
00224   TH2F* hDedxMomPi = new TH2F("DedxMomPi","Energy Loss vs Momentum",100, 0, 1.2, 500, 0, 50);
00225   TH2F* hDedxMomK = new TH2F("DedxMomK","Energy Loss vs Momentum",100, 0, 1.2, 500, 0, 50);
00226   TH2F* hDedxMomP = new TH2F("DedxMomP","Energy Loss vs Momentum",100, 0, 1.2, 500, 0, 50);
00227   TH1F* hRecoPID = new TH1F("recopid","Reconstructed Particles", 8, -0.5, 7.5);
00228   TH1F* hRecoPIDAll = new TH1F("recopidall","Reconstructed Particles", 8, -0.5, 7.5);
00229   TH1F* hRecoPID1 = new TH1F("recopid1","Reconstructed Particles", 8, -0.5, 7.5);
00230   TH1F* hTruthPID = new TH1F("truthpid","Truth Particles", 8, -0.5, 7.5);
00231   TH1F* hTruthPID1 = new TH1F("truthpid1","Truth Particles", 8, -0.5, 7.5);
00232   //End  histogram definitions
00233   //--------------------------------------------------------------------------
00234   int binPtot, binTeta;// binPtotR, binTetaR;
00235   //------------------------------------------------------------------------- 
00236   // Loop over all files that were inserted into the file name list
00237   for (unsigned int ifi = 0; ifi <list.size() && !gStop; ++ifi) {
00238     TFile* f = TFile::Open(list[ifi].c_str());
00239     if (!f) {
00240       cout << "Couldn't open " << list[ifi] << endl;
00241       continue;
00242     }
00243     // Get event tree from the file
00244     TTree* evtTree = DSTUtil::GetEvtTree(f);
00245     if (!evtTree) {
00246       cout << "Couldn't find event tree in " << list[ifi] << endl;
00247       continue;
00248     }
00249     int nEnt = evtTree->GetEntries();
00250     
00251     cout << "DST " << ifi << "/" << list.size()
00252          << " with " << nEnt << " entries" << endl;
00253     
00254     evtTree->SetBranchAddress("fvtxconfit.", &fEvt);
00255     evtTree->SetBranchAddress("fMCTruth.", &fMC);
00256     fout->cd();
00257     
00258     //------------------------------------------------------------------------
00259     //Beginning of the for loop to process track counting both truth and reco.
00260     for (int ent = 0; ent < nEnt; ++ent){
00261       evtTree->GetEntry(ent);
00262       if(fEvt->NBTrk() != 1) continue;
00263       for(int i = 0; i < fMC->NTrk(); ++i){ 
00264     MIPPMCTrackSummary* mctrk = fMC->GetTrk(i);
00265     MIPPMCVertexSummary* v=fMC->GetVtx(mctrk->vtxindex);
00266     hHistoTgt->Fill(v->x[2]);
00267     if(!(mctrk->pid == PIDDef::kPion || mctrk->pid == PIDDef::kKaon || mctrk->pid == PIDDef::kProton))continue; // Select only pion kaon and proton
00268     if(v->x[2]<-829 || v->x[2]>-822) continue;// Target position cut
00269     
00270     float pX = mctrk->p[0];
00271     float pY = mctrk->p[1];
00272     float pZ = mctrk->p[2];
00273     hHistoPZ->Fill(pZ);
00274     float pT = sqrt(pX*pX+pY*pY);
00275     hHistoPT->Fill(pT);
00276     double Ptot = sqrt(pX*pX + pY*pY + pZ*pZ);
00277     
00278     if(pZ == 0) continue;// Cut for avoiding indefinite value for pT/fabs(pZ)
00279     double costeta = cos(atan(pT/fabs(pZ)));
00280     
00281     hHistoPtot->Fill(Ptot);
00282     hHistotht->Fill(costeta);
00283     
00284     // Get track ptot and find the appropriate bin
00285     binPtot = -1;
00286     for (int j = -1; j < knxbin; ++j){ 
00287       if (Ptot < binsx[j+1]) {
00288         binPtot = j; 
00289         break;
00290       }
00291     }
00292     // Get track cos(teta) and find the appropriate bin
00293     binTeta = -1;
00294     for (int j = -1; j < knybin; ++j){ 
00295       if (costeta < binsy[j+1]){
00296         binTeta = j; 
00297         break;
00298       }
00299     }
00300     hTruth->Fill(binPtot,binTeta);//Fills truth plot
00301     if(mctrk->q > 0) {
00302       if(mctrk->pid == 2) hTruthPosPi->Fill(binPtot,binTeta);
00303       if(mctrk->pid==3) hTruthPosK->Fill(binPtot,binTeta);
00304       if(mctrk->pid==4) hTruthPosP->Fill(binPtot,binTeta);
00305     }
00306     if(mctrk->q < 0){
00307       if(mctrk->pid == 2) hTruthNegPi->Fill(binPtot,binTeta);
00308       if(mctrk->pid==3) hTruthNegK->Fill(binPtot,binTeta);
00309       if(mctrk->pid==4) hTruthNegP->Fill(binPtot,binTeta);
00310     }
00311     
00312     //Now look at reco tracks
00313     int rcindex = mctrk->recoindex;
00314     int pidTPC = -1;
00315     
00316     if(rcindex>-1){
00317       MIPPTrackSummary* trk = fEvt->GetTrk(rcindex);
00318       MIPPRICHSummary* rich = fEvt->GetRICH(trk->irich);
00319       MIPPTPCSummary* tpc = fEvt->GetTPC(trk->itpc);
00320       MIPPToFSummary* tof = fEvt->GetToF(trk->itof[0]);
00321       MIPPDCkovSummary* ckov = fEvt->GetDCkov(trk->idckov);
00322       if(mctrk->pid ==2)hDedxMomPi->Fill(Ptot, tpc->dedx);
00323       if(mctrk->pid ==3)hDedxMomK->Fill(Ptot, tpc->dedx);
00324       if(mctrk->pid ==4)hDedxMomP->Fill(Ptot, tpc->dedx);
00325       double PTot = trk->ptot;
00326       
00327       if(PTot<=1) {
00328         if (tpc) pidTPC = getPid(tpc);
00329       }
00330       else if( PTot<=2.6 && PTot>1.0) {
00331         if(tof)  pidTPC = getPidToF(tof);
00332       }
00333       else if(Ptot<= 17.0 && Ptot>2.6) {
00334         if(ckov) pidTPC = getPidCkov(ckov);
00335       }
00336       else {
00337         if(rich) pidTPC = getPidRICH(rich);
00338       }
00339       if(mctrk->q > 0){
00340         if(mctrk->pid == 2 && (pidTPC == 2 || pidTPC == 1)) hRecoPosPi->Fill(binPtot,binTeta);
00341         if(mctrk->pid == 3 && pidTPC == 3) hRecoPosK->Fill(binPtot,binTeta);
00342         if(mctrk->pid == 4 && pidTPC == 4 ) hRecoPosP->Fill(binPtot,binTeta);
00343         if(mctrk->pid == 2) hTrackPi->Fill(binPtot,binTeta);
00344         if(mctrk->pid == 3) hTrackK->Fill(binPtot,binTeta);
00345         if(mctrk->pid == 4) hTrackP->Fill(binPtot,binTeta);
00346       }
00347       if(mctrk->q < 0){
00348         if(mctrk->pid == 2 && (pidTPC == 2 || pidTPC == 1)) hRecoNegPi->Fill(binPtot,binTeta);
00349         if(mctrk->pid == 3 && pidTPC == 3) hRecoNegK->Fill(binPtot,binTeta);
00350         if(mctrk->pid == 4 && pidTPC == 4) hRecoNegP->Fill(binPtot,binTeta);
00351         if(mctrk->pid == 2) hTrackAPi->Fill(binPtot,binTeta);
00352         if(mctrk->pid == 3) hTrackAK->Fill(binPtot,binTeta);
00353         if(mctrk->pid == 4) hTrackAP->Fill(binPtot,binTeta);
00354       }
00355       hReco->Fill(binPtot,binTeta);//Fills reco plot
00356       if(mctrk->q > 0){
00357         if(binPtot ==0 && mctrk->pid ==4) hRecoPID->Fill(pidTPC);
00358         if(binPtot ==1 && mctrk->pid ==4) hRecoPID1->Fill(pidTPC);
00359         if(binPtot ==0 && mctrk->pid ==4) hTruthPID->Fill(mctrk->pid);
00360         if(binPtot ==1 && mctrk->pid ==4) hTruthPID1->Fill(mctrk->pid);
00361         if(mctrk->pid ==4) hRecoPIDAll->Fill(pidTPC);
00362         
00363       }
00364     }
00365 
00366       }
00367       //End of the for loop to process track counting for both truth and reco.   
00368       hTrackEffPi->Divide(hTrackPi,hTruthPosPi,1,1);
00369       hTrackEffK->Divide(hTrackK,hTruthPosK,1,1);
00370       hTrackEffP->Divide(hTrackP,hTruthPosP,1,1);
00371       hTrackEffAPi->Divide(hTrackAPi,hTruthNegPi,1,1);
00372       hTrackEffAK->Divide(hTrackAK,hTruthNegK,1,1);
00373       hTrackEffAP->Divide(hTrackAP,hTruthNegP,1,1);
00374       hAcceptance->Divide(hReco,hTruth,1,1);//Fills acceptance plot
00375       hAcceptPPi->Divide(hRecoPosPi,hTruthPosPi,1,1);
00376       hAcceptPK->Divide(hRecoPosK,hTruthPosK,1,1);
00377       hAcceptPP->Divide(hRecoPosP,hTruthPosP,1,1);
00378       hAcceptNPi->Divide(hRecoNegPi,hTruthNegPi,1,1);
00379       hAcceptNK->Divide(hRecoNegK,hTruthNegK,1,1);
00380       hAcceptNP->Divide(hRecoNegP,hTruthNegP,1,1);
00381       
00382     }
00383     //End of the entries loop
00384     f->Close(); 
00385   }
00386   //End of the all files loop
00387   fout->Write();
00388   delete fout;
00389   return 0;
00390 }


Generated on Mon Nov 23 08:02:29 2009 for MIPP(E907) by  doxygen 1.4.7