{////////////////////////////////////////////////////////// // This file has been automatically generated // (Wed Jun 2 18:07:43 2004 by ROOT version3.05/07) // from TTree AncSvx/SVX Ancestors // found on file: ancsvx_027.root ////////////////////////////////////////////////////////// // derived from Pat's Charm2.C Jun 04 HvH // Major changes: // - allow for tilted planes (see 'integerization' section) // - read in secondary vertex distribution from flat file // flat_xyz.out, which comes from Pythia. // 18 jun 04 switch to all_keep = .true. in pythia. ////////////////////////////////////////////////////////// //Reset ROOT and connect tree file gROOT->Reset(); TFile *f = new TFile("ancsvx_softlink.root"); // soft link to ancsvx_nnn.root //Declaration of leaves types //Declaration of leaves types Float_t TRACK; Float_t NFILE; Float_t PTOT; Float_t PTHETA; Float_t PPHI; Float_t R_VERTEX; Float_t Z_VERTEX; Float_t THET_VER; Float_t PHI_VER; Float_t ITPARENT; Float_t IDPARENT; Float_t IDPART; Float_t ITORIGIN; Float_t IDORIGIN; Float_t IHIT; Float_t LAYER; Float_t THETA; Float_t PHI; Float_t XGLOBAL; Float_t YGLOBAL; Float_t ZGLOBAL; Float_t PMOMX; Float_t PMOMY; Float_t PMOMZ; Float_t IPC123; Float_t PC1THETA; Float_t PC1PHI; Float_t PC1RDIST; Float_t PC1ZDIST; Float_t PC2THETA; Float_t PC2PHI; Float_t PC2RDIST; Float_t PC2ZDIST; Float_t PC3THETA; Float_t PC3PHI; Float_t PC3RDIST; Float_t PC3ZDIST; Float_t DELE; Float_t XLOCIN; Float_t YLOCIN; Float_t ZLOCIN; Float_t XLOCOUT; Float_t YLOCOUT; Float_t ZLOCOUT; Float_t HITVOL0; Float_t HITVOL1; Float_t HITVOL2; Float_t HITVOL3; Float_t HITVOL4; Float_t HITVOL5; Float_t NHIT; Float_t X0_EVENT; Float_t Y0_EVENT; Float_t Z0_EVENT; Float_t B_IMPACT; Float_t EVENT; // Set branch addresses. AncSvx->SetBranchAddress("TRACK",&TRACK); AncSvx->SetBranchAddress("NFILE",&NFILE); AncSvx->SetBranchAddress("PTOT",&PTOT); AncSvx->SetBranchAddress("PTHETA",&PTHETA); AncSvx->SetBranchAddress("PPHI",&PPHI); AncSvx->SetBranchAddress("R_VERTEX",&R_VERTEX); AncSvx->SetBranchAddress("Z_VERTEX",&Z_VERTEX); AncSvx->SetBranchAddress("THET_VER",&THET_VER); AncSvx->SetBranchAddress("PHI_VER",&PHI_VER); AncSvx->SetBranchAddress("ITPARENT",&ITPARENT); AncSvx->SetBranchAddress("IDPARENT",&IDPARENT); AncSvx->SetBranchAddress("IDPART",&IDPART); AncSvx->SetBranchAddress("ITORIGIN",&ITORIGIN); AncSvx->SetBranchAddress("IDORIGIN",&IDORIGIN); AncSvx->SetBranchAddress("IHIT",&IHIT); AncSvx->SetBranchAddress("LAYER",&LAYER); AncSvx->SetBranchAddress("THETA",&THETA); AncSvx->SetBranchAddress("PHI",&PHI); AncSvx->SetBranchAddress("XGLOBAL",&XGLOBAL); AncSvx->SetBranchAddress("YGLOBAL",&YGLOBAL); AncSvx->SetBranchAddress("ZGLOBAL",&ZGLOBAL); AncSvx->SetBranchAddress("PMOMX",&PMOMX); AncSvx->SetBranchAddress("PMOMY",&PMOMY); AncSvx->SetBranchAddress("PMOMZ",&PMOMZ); AncSvx->SetBranchAddress("IPC123",&IPC123); AncSvx->SetBranchAddress("PC1THETA",&PC1THETA); AncSvx->SetBranchAddress("PC1PHI",&PC1PHI); AncSvx->SetBranchAddress("PC1RDIST",&PC1RDIST); AncSvx->SetBranchAddress("PC1ZDIST",&PC1ZDIST); AncSvx->SetBranchAddress("PC2THETA",&PC2THETA); AncSvx->SetBranchAddress("PC2PHI",&PC2PHI); AncSvx->SetBranchAddress("PC2RDIST",&PC2RDIST); AncSvx->SetBranchAddress("PC2ZDIST",&PC2ZDIST); AncSvx->SetBranchAddress("PC3THETA",&PC3THETA); AncSvx->SetBranchAddress("PC3PHI",&PC3PHI); AncSvx->SetBranchAddress("PC3RDIST",&PC3RDIST); AncSvx->SetBranchAddress("PC3ZDIST",&PC3ZDIST); AncSvx->SetBranchAddress("DELE",&DELE); AncSvx->SetBranchAddress("XLOCIN",&XLOCIN); AncSvx->SetBranchAddress("YLOCIN",&YLOCIN); AncSvx->SetBranchAddress("ZLOCIN",&ZLOCIN); AncSvx->SetBranchAddress("XLOCOUT",&XLOCOUT); AncSvx->SetBranchAddress("YLOCOUT",&YLOCOUT); AncSvx->SetBranchAddress("ZLOCOUT",&ZLOCOUT); AncSvx->SetBranchAddress("HITVOL0",&HITVOL0); AncSvx->SetBranchAddress("HITVOL1",&HITVOL1); AncSvx->SetBranchAddress("HITVOL2",&HITVOL2); AncSvx->SetBranchAddress("HITVOL3",&HITVOL3); AncSvx->SetBranchAddress("HITVOL4",&HITVOL4); AncSvx->SetBranchAddress("HITVOL5",&HITVOL5); AncSvx->SetBranchAddress("NHIT",&NHIT); AncSvx->SetBranchAddress("X0_EVENT",&X0_EVENT); AncSvx->SetBranchAddress("Y0_EVENT",&Y0_EVENT); AncSvx->SetBranchAddress("Z0_EVENT",&Z0_EVENT); AncSvx->SetBranchAddress("B_IMPACT",&B_IMPACT); AncSvx->SetBranchAddress("EVENT",&EVENT); //This is the loop skeleton //To read only selected branches, Insert a statement like: // leafname->GetBranch()->GetEvent(i); instead of AncSvx->GetEvent(i); Int_t nentries = AncSvx->GetEntries(); cout <<" AncSvx nentries = "<GetEvent(i); event[i]=EVENT; // watch for new event number: if (EVENT>oldevent) { oldevent=EVENT; iev=EVENT; ievent[iev]=i; if (iev%1000==0) {cout <<"record "<8) { // mirror South into North arm xxx // layer[i] = layer[i] - 4; // 9-12 -> 5-8 // x[i] = -x[i]; y[i] = -y[i]; z[i] = -z[i]; // px[i] = -px[i]; py[i] = -py[i]; pz[i] = -pz[i]; // ptot[i] = // ptheta[i] = // pphi[i] = // theta[i] = // phi[i] = //} } // end loop to stuff arrays cout <<"Total records "<Fill(float(nhits)); if (ii%nmess == 0) {cout<<" event "<200) { // There are a few with huge if (iev<20) cout <<" number of hits on tracks "< skipped "<=200) { cout <<" Track " <Fill(float(id[i])); tracks[itrack][ilayer][1] = x[i]; tracks[itrack][ilayer][2] = y[i]; tracks[itrack][ilayer][3] = z[i]; tracks[itrack][ilayer][4] = px[i]; tracks[itrack][ilayer][5] = py[i]; tracks[itrack][ilayer][6] = pz[i]; // store vertex info pzvertex = ptot[i]*cos(ptheta[i]*degtorad); ptvertex = ptot[i]*sin(ptheta[i]*degtorad); pxvertex = ptvertex*cos(pphi[i]*degtorad); pyvertex = ptvertex*sin(pphi[i]*degtorad); //vertex[itrack][1] = vx[ii][6]; note vx,y,z are note defined //vertex[itrack][2] = vy[ii][6]; or set //vertex[itrack][3] = vz[ii][6]; vertex[itrack][4] = pxvertex; vertex[itrack][5] = pyvertex; vertex[itrack][6] = pzvertex; //printf("%d %d %d %d %6.1f = i,itrack,ilayer,idpart[i],z[i]\n",i,itrack,ilayer,idpart[i],z[i]); g31->Fill(layer[i],x[i]); g32->Fill(layer[i],y[i]); g33->Fill(layer[i],z[i]); g34->Fill(layer[i],sqrt(x[i]**2+y[i]**2)); g35->Fill(z[i],sqrt(x[i]**2+y[i]**2)); } // <200 track in the event } //-------------------------------------------------------------------------// Float_t xintercept[3]; Float_t yintercept[3]; Float_t xvtx = 0.; Float_t yvtx = 0.; Float_t xslope[3]; Float_t yslope[3]; Float_t etot[3]; // rseg also used for radius, pseg also used for phi*radius //Float_t rseg = 0.0075; // 75 microns -> cm Float_t rseg = 0.0050; // 50 microns for the ifvtx Float_t rsave; Float_t pseg = 0.02000; Float_t xmatch = 0.; Float_t ymatch = 0.; Float_t pzmatch = 0.; Float_t deltaphi = 0.; Float_t radius[5]; Float_t phidet[5]; Float_t rslope[3]; Float_t rintercept[3]; Float_t rvtx = 0.; Float_t rmatch = 0.; Float_t vtxslope = 0.; Int_t goodtrk[3]; Int_t xstrip = 0; Int_t ystrip = 0; Int_t rstrip = 0; Int_t phistrip = 0; Float_t fitx[4] = {13.0,21.0,29.0,37.0}; Float_t fity[4]; Float_t ex[4] = {.0001,.0001,.0001,.0001}; Float_t ey[4] = {.001,.001,.001,.001}; Int_t id_track = 0; // loop over tracks in each event for (Int_t i=1; i<=1;i++) { // one only! id_track = idpart[i]; g39->Fill(float(i),float(id_track)); // plot particle ID xslope[i]=0.; yslope[i]=0.; xintercept[i]=0.; yintercept[i]=0.; rintercept[i]=0.; rslope[i]=0.; goodtrk[i]=0; // require hits in layers 5, 6, 7, 8 (= Si N) and pz>2.5 GeV or // layers 9,10,11,12 (= Si S) and pz>2.5 GeV // if ((tracks[i][5][3]!=0. && tracks[i][ 6][3]!=0. && tracks[i][ 7][3]!=0. && // tracks[i][ 8][3]!=0. && vertex[i][6]>2.5) ){ if ((tracks[i][9][3]!=0. && tracks[i][10][3]!=0. && tracks[i][11][3]!=0. && tracks[i][12][3]!=0) ){ goodtrk[i]=1; cout<<"**** *** Track "<Fill(tracks[i][ 9][3],sqrt(tracks[i][ 9][2]**2+tracks[i][ 9][1]**2)); g36->Fill(tracks[i][10][3],sqrt(tracks[i][10][2]**2+tracks[i][10][1]**2)); g36->Fill(tracks[i][11][3],sqrt(tracks[i][11][2]**2+tracks[i][11][1]**2)); g36->Fill(tracks[i][12][3],sqrt(tracks[i][12][2]**2+tracks[i][12][1]**2)); // compute x and y projected vertex xxx note planes 3,4,5,6 -> 5,6,7,8 // calculate track slopes and intercepts at Z=0 // pick two planes a and b to limit the effects of multiple scattering // Variables pa and pb set above ouside the event loop if ((tracks[i][pb][3]-tracks[i][pa][3])!=0) xslope[i] = (tracks[i][pb][1]-tracks[i][pa][1]) / (tracks[i][pb][3]-tracks[i][pa][3]); xintercept[i] = tracks[i][pa][1] - xslope[i] * tracks[i][pa][3]; xvtx=-999.; if (xslope[i]!=0.) xvtx = -xintercept[i]/xslope[i]; if ((tracks[i][pb][3]-tracks[i][pa][3])!=0) yslope[i] = (tracks[i][pb][2]-tracks[i][pa][2]) / (tracks[i][pb][3]-tracks[i][pa][3]); yintercept[i] = tracks[i][pa][2] - yslope[i] * tracks[i][pa][3]; yvtx = -999.; if (yslope[i]!=0.) yvtx = -yintercept[i]/yslope[i]; if (goodtrk[1]==1 && goodtrk[2]==1) { g26->Fill(xintercept[1],yintercept[1]); g27->Fill(xintercept[2],yintercept[2]); } // radial quantities // use rseg as radial segmentation, pseg as phi if ((tracks[i][pb][3]-tracks[i][pa][3])!=0) { radius[1] = sqrt(tracks[i][09][1]**2 + tracks[i][09][2]**2); radius[2] = sqrt(tracks[i][10][1]**2 + tracks[i][10][2]**2); radius[3] = sqrt(tracks[i][11][1]**2 + tracks[i][11][2]**2); radius[4] = sqrt(tracks[i][12][1]**2 + tracks[i][12][2]**2); phidet[1] = atan(tracks[i][09][2]/tracks[i][09][1]); phidet[2] = atan(tracks[i][10][2]/tracks[i][10][1]); phidet[3] = atan(tracks[i][11][2]/tracks[i][11][1]); phidet[4] = atan(tracks[i][12][2]/tracks[i][12][1]); // integerize radius, and adjust z accordingly rstrip = (radius[1]/rseg + 0.5); // rstrip is Int rsave = radius[1]; radius[1] = rseg*rstrip; //cout<<"Layer 1 old, new r: "<Write(); g8->Write(); g16->Write(); g17->Write(); g18->Write(); g19->Write(); g20->Write(); g21->Write(); g22->Write(); g23->Write(); g24->Write(); g25->Write(); g26->Write(); g27->Write(); g31->Write(); g32->Write(); g33->Write(); g34->Write(); g35->Write(); g36->Write(); g37->Write(); g39->Write(); g40->Write(); g41->Write(); outfile ->Close(); // done }