// ------------------ Here is the actual method ----------------------------------------- void doEvents(const Char_t *fileList, const Char_t *outputname) { Int_t nEvents = 1000; Int_t nfiles = 100; // // First load some shared libraries we need // if (gClassTable->GetID("TTable") < 0) { gSystem->Load("libStar"); gSystem->Load("libPhysics"); } gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C"); loadSharedLibraries(); gSystem->Load("StarMagField"); gSystem->Load("StMagF"); gSystem->Load("StTpcDb"); // gSystem->Load("StDbUtilities"); gSystem->Load("StDaqLib"); gSystem->Load("StDbBroker"); gSystem->Load("StDetectorDbMaker"); gSystem->Load("StDbUtilities"); gSystem->Load("St_db_Maker"); gSystem->Load("StEvent"); gSystem->Load("StEventMaker"); gSystem->Load("StarMagField"); gSystem->Load("StTofUtil"); gSystem->Load("StVpdAnalysisMaker"); // // Handling depends on whether file is a ROOT file or XDF file // chain = new StChain("StChain"); delete setFiles; setFiles =0; if (fileList) { //Normal case setFiles= new StFile(); } else { // return; } ifstream* inputStream = new ifstream; inputStream->open(fileList); if (!(inputStream)) { cout << "can not open list file" << endl; return; } cout<<"Open file list: --- "<<fileList<<endl; char line[512]; for (;inputStream->good();) { inputStream->getline(line,512); if ( inputStream->good() ) { //cout<<" root file "<<line<<endl; TFile *ftmp = new TFile(line); //---------- if (!(ftmp->IsOpen())) { cout<<line<<" open failed ! not chained"<<endl; continue; } if (ftmp->IsZombie()) { cout<<"sth. very wrong with "<<line<<", not chained "<<endl; continue; } if (ftmp->TestBit(1024)) { cout<<"revocer procedure applied to "<<line<<endl; continue; } //-------------------------- if( ftmp && ftmp->IsOpen() && ftmp->GetNkeys()) { cout << "add file " << line << endl; setFiles->AddFile(line); } else { cout << " cannot open file " << line << endl; } delete ftmp; } } StMuDstMaker* muDstMaker = new StMuDstMaker(0,0,"",fileList,"MuDst.root",nfiles); muDstMaker->SetStatus("*",0); muDstMaker->SetStatus("MuEvent",1); muDstMaker->SetStatus("TofRawData",1); cout<<endl<<"============ Data Base ========="<<endl; dbMk = new St_db_Maker("db","MySQL:StarDb","$STAR/StarDb","StarDb"); StVpdAnalysisMaker *vpdAna = new StVpdAnalysisMaker(); vpdAna->SetDebug(); // // Initialize chain // Int_t iInit = chain->Init(); if (iInit) chain->Fatal(iInit,"on init"); chain->PrintInfo(); // // Event loop // int istat = 0, i = 1; EventLoop: if (i <= nEvents && istat != 2) { cout << endl << "============================ Event " << i << " start ============================" << endl; chain->Clear(); istat = chain->Make(i); if (istat == 2) {cout << "Last event processed. Status = " << istat << endl;} if (istat == 3) {cout << "Error event processed. Status = " << istat << endl;} // gObjectTable->Print(); i++; goto EventLoop; } i--; cout<<endl<<"============================ Event "<<i<<" finish ============================"<<endl; // // Chain Finish // if (nEvents > 1) { chain->Finish(); } }
/** * 1. Data sample : pp200 W->e nu with pile-up corresponding to 1 MHz min. bias * events, 50 K event y2011, 10 K event y2012. * * 2. Proof of principal: no pile-up for both PPV and KFV * * a. Reconstructed primary track multiplicity versus corresponding MC * "reconstructable" (i.e. in n STAR acceptance,no. TPC MC hits >= 15) tracks * multiplicity. * * b. Corrected reconstructed primary track multiplicity (i.e. multiplied by * QA/100.) versus corresponding MC "reconstructable" (i.e. in n STAR * acceptance,no. TPC MC hits >= 15) tracks multiplicity. * * c. Efficiency primary vertex reconstruction versus MC "reconstructable" * tracks multiplicity. * * 3. With pileup. repeat above (a-c) with old ranking scheme for * * I. Any reconstructed primary vertex which is matched with MC trigger * vertex (MC = 1) * * II. The best (in sense of ranking) reconstructed primary vertex which is * matched with MC trigger vertex (MC = 1) * * III. The best (in sense of ranking) reconstructed primary vertex which is * not matched with MC trigger vertex (MC != 1) * * 4. With pileup. repeat above (a-c) with new ranking scheme for cases I-III */ void MuMcPrVKFV2012(Long64_t nevent, const char *file, const std::string& outFile, bool fillNtuple) { #ifdef __TMVA__ boost::replace_last(outFile, ".root", ""); outFile += ".TMVArank.root"; // create a set of variables and declare them to the reader // - the variable names must corresponds in name and type to // those given in the weight file(s) that you use TString separator(":"); TString Vnames(vnames); TObjArray *array = Vnames.Tokenize(separator); std::vector<std::string> inputVars; TIter next(array); TObjString *objs; while ((objs = (TObjString *) next())) { std::cout << objs->GetString() << std::endl; } inputVars.push_back("beam"); inputVars.push_back("postx"); inputVars.push_back("prompt"); inputVars.push_back("cross"); inputVars.push_back("tof"); inputVars.push_back("notof"); inputVars.push_back("EEMC"); inputVars.push_back("noEEMC"); inputVars.push_back("chi2"); std::vector<double> *inputVec = new std::vector<double>( inputVars.size() ); IClassifierReader *classReader = new ReadBDT( inputVars ); #endif /* __TMVA__ */ TFile *fOut = TFile::Open(outFile.c_str(), "recreate"); data_t data; // Book histograms const int nMcRecMult = 75; TArrayD xMult(nMcRecMult + 1); xMult[0] = -0.5; for (int i = 1; i <= nMcRecMult; i++) { if (xMult[i - 1] < 50) xMult[i] = xMult[i - 1] + 1; // 1 - 50 else if (xMult[i - 1] < 100) xMult[i] = xMult[i - 1] + 2; // 51 - 75 else if (xMult[i - 1] < 200) xMult[i] = xMult[i - 1] + 10; // 76 - 85 else xMult[i] = xMult[i - 1] + 100; // 86 -100 } TH1D *McRecMulT = new TH1D("McRecMulT", "Reconstructable multiplicity for trigger Mc Vertex", nMcRecMult, xMult.GetArray()); struct Name_t { const Char_t *Name; const Char_t *Title; }; const Name_t HCases[3] = { {"Any", "Any vertex matched with MC == 1"}, {"Good", "The best rank vertex with MC == 1"}, {"Bad", "The best rank vertex with MC != 1"} }; const Name_t Plots[4] = { {"Mult" , "the reconstructed (uncorrected) track multiplicity versus Reconstructable multiplicity"}, {"MultQA" , "the reconstructed (corrected for QA) track multiplicity versus Reconstructable multiplicity"}, {"McRecMul", "Reconstructable multiplicity"}, {"YvsX" , "Bad versus Good value"} }; /* h p */ TH1 *hists[3][4]; for (int h = 0; h < 3; h++) { for (int p = 0; p < 4; p++) { TString Name(Plots[p].Name); Name += HCases[h].Name; TString Title(Plots[p].Title); Title += " for "; Title += HCases[h].Title; Title += " vertex"; if (p < 2) hists[h][p] = new TH2D(Name, Title, nMcRecMult, xMult.GetArray(), nMcRecMult, xMult.GetArray()); else if (p == 2) hists[h][p] = new TH1D(Name, Title, nMcRecMult, xMult.GetArray()); } } TNtuple *VertexG = new TNtuple("VertexG", "good vertex & global params info", vnames); TNtuple *VertexB = new TNtuple("VertexB", "bad vertex & global params info", vnames); // ---------------------------------------------- StMuDstMaker *maker = new StMuDstMaker(0, 0, "", file, "st:MuDst.root", 1e9); // set up maker in read mode // 0,0 this mean read mode // dir read all files in this directory // file bla.lis real all file in this list, if (file!="") dir is ignored // filter apply filter to filenames, multiple filters are separated by ':' // 10 maximum number of file to read maker->SetStatus("*", 0); std::vector<std::string> activeBranchNames = { "MuEvent", "PrimaryVertices", "StStMuMcVertex", "StStMuMcTrack" }; // Set Active braches for (const auto& branchName : activeBranchNames) maker->SetStatus(branchName.c_str(), 1); TChain *tree = maker->chain(); Long64_t nentries = tree->GetEntries(); nevent = TMath::Min(nevent, nentries); std::cout << nentries << " events in chain " << nevent << " will be read." << std::endl; tree->SetCacheSize(-1); //by setting the read cache to -1 we set it to the AutoFlush value when writing tree->SetCacheLearnEntries(1); //one entry is sufficient to learn tree->SetCacheEntryRange(0, nevent); for (Long64_t ev = 0; ev < nevent; ev++) { if (maker->Make()) break; StMuDst *muDst = maker->muDst(); // get a pointer to the StMuDst class, the class that points to all the data StMuEvent *muEvent = muDst->event(); // get a pointer to the class holding event-wise information int referenceMultiplicity = muEvent->refMult(); // get the reference multiplicity TClonesArray *PrimaryVertices = muDst->primaryVertices(); int nPrimaryVertices = PrimaryVertices->GetEntriesFast(); TClonesArray *MuMcVertices = muDst->mcArray(0); int nMuMcVertices = MuMcVertices->GetEntriesFast(); TClonesArray *MuMcTracks = muDst->mcArray(1); int nMuMcTracks = MuMcTracks->GetEntriesFast(); if ( nevent >= 10 && ev % int(nevent*0.1) == 0 ) { std::cout << "Event #" << ev << "\tRun\t" << muEvent->runId() << "\tId: " << muEvent->eventId() << " refMult= " << referenceMultiplicity << "\tPrimaryVertices " << nPrimaryVertices << "\t" << " " << nMuMcVertices << "\t" << " " << nMuMcTracks << std::endl; } // const Double_t field = muEvent->magneticField()*kilogauss; if (! nMuMcVertices || ! nMuMcTracks || nPrimaryVertices <= 0) { std::cout << "Ev. " << ev << " has no MC information ==> skip it" << std::endl; std::cout << "OR no reconstructed verticies found" << std::endl; continue; } // Count number of MC tracks at a vertex with TPC reconstructable tracks std::multimap<int, int> Mc2McHitTracks; for (int m = 0; m < nMuMcTracks; m++) { StMuMcTrack *McTrack = (StMuMcTrack *) MuMcTracks->UncheckedAt(m); if (McTrack->No_tpc_hit() < 15) continue; Mc2McHitTracks.insert(std::pair<int, int>(McTrack->IdVx(), McTrack->Id())); } // This is the "reconstructable" track multiplicity int nMcTracksWithHits = Mc2McHitTracks.count(1); // Let's skip events in which we do not expect to reconstruct any tracks // (and thus vertex) from the primary vertex if (nMcTracksWithHits <= 0) continue; // This is our denominator histogram for efficiencies McRecMulT->Fill(nMcTracksWithHits); // ============= Build map between Rc and Mc vertices std::map<StMuPrimaryVertex *, StMuMcVertex *> reco2McVertices; TArrayF vertexRanks(nPrimaryVertices); int mcMatchedVertexIndex = -1; // any vertex with MC==1 and highest reconstrated multiplicity. int vertexMaxMultiplicity = -1; // First loop over all verticies in this event. There is at least one // must be available for (int recoVertexIndex = 0; recoVertexIndex < nPrimaryVertices; recoVertexIndex++) { vertexRanks[recoVertexIndex] = -1e10; StMuPrimaryVertex *recoVertex = (StMuPrimaryVertex *) PrimaryVertices->UncheckedAt(recoVertexIndex); if ( !AcceptVX(recoVertex) ) continue; // Check Mc if (recoVertex->idTruth() < 0 || recoVertex->idTruth() > nMuMcVertices) { std::cout << "ERROR: Illegal idTruth " << recoVertex->idTruth() << " The track is ignored" << std::endl; continue; } StMuMcVertex *mcVertex = (StMuMcVertex *) MuMcVertices->UncheckedAt(recoVertex->idTruth() - 1); if (mcVertex->Id() != recoVertex->idTruth()) { std::cout << "ERROR: Mismatched idTruth " << recoVertex->idTruth() << " and mcVertex Id " << mcVertex->Id() << " The vertex is ignored" << std::endl; continue; } reco2McVertices[recoVertex] = mcVertex; vertexRanks[recoVertexIndex] = recoVertex->ranking(); if (recoVertex->idTruth() == 1 && recoVertex->noTracks() > vertexMaxMultiplicity) { mcMatchedVertexIndex = recoVertexIndex; vertexMaxMultiplicity = recoVertex->noTracks(); } FillData(data, recoVertex); #ifdef __TMVA__ Float_t *dataArray = &data.beam; for (size_t j = 0; j < inputVec->size(); j++) (*inputVec)[j] = dataArray[j]; vertexRanks[recoVertexIndex] = classReader->GetMvaValue( *inputVec ); #endif } // If we reconstructed a vertex which matches the MC one we fill the // numerator of the "Any" efficiency histogram if (mcMatchedVertexIndex != -1) { StMuPrimaryVertex *recoVertexMatchedMc = (StMuPrimaryVertex*) PrimaryVertices->UncheckedAt(mcMatchedVertexIndex); double nTracks = recoVertexMatchedMc->noTracks(); double nTracksQA = nTracks * recoVertexMatchedMc->qaTruth() / 100.; hists[0][0]->Fill(nMcTracksWithHits, nTracks); hists[0][1]->Fill(nMcTracksWithHits, nTracksQA); hists[0][2]->Fill(nMcTracksWithHits); } // Now deal with the highest rank vertex int maxRankVertexIndex = TMath::LocMax(nPrimaryVertices, vertexRanks.GetArray()); StMuPrimaryVertex *recoVertexMaxRank = (StMuPrimaryVertex*) PrimaryVertices->UncheckedAt(maxRankVertexIndex); StMuMcVertex *mcVertex = reco2McVertices[recoVertexMaxRank]; double nTracks = recoVertexMaxRank->noTracks(); double nTracksQA = nTracks * recoVertexMaxRank->qaTruth() / 100.; // Fill numerator for "good" and "bad" efficiencies int h = ( mcVertex && mcVertex->Id() == 1) ? 1 : 2; hists[h][0]->Fill(nMcTracksWithHits, nTracks); hists[h][1]->Fill(nMcTracksWithHits, nTracksQA); hists[h][2]->Fill(nMcTracksWithHits); // Proceed with filling ntuple only if requested by the user if ( !fillNtuple ) continue; // Second loop over all verticies in this event for (int recoVertexIndex = 0; recoVertexIndex < nPrimaryVertices; recoVertexIndex++) { StMuPrimaryVertex *recoVertex = (StMuPrimaryVertex *) PrimaryVertices->UncheckedAt(recoVertexIndex); if ( !AcceptVX(recoVertex) ) continue; StMuMcVertex *mcVertex = reco2McVertices[recoVertex]; if ( !mcVertex ) { std::cout << "No Match from RC to MC" << std::endl; continue; } if (vtxeval::gDebugFlag) { std::cout << Form("Vx[%3i]", recoVertexIndex) << *recoVertex << " " << *mcVertex; int nMcTracksWithHitsatL = Mc2McHitTracks.count(recoVertex->idTruth()); std::cout << Form("Number of McTkHit %4i rank %8.3f", nMcTracksWithHitsatL, vertexRanks[recoVertexIndex]); } int IdPar = mcVertex->IdParTrk(); if (IdPar > 0 && IdPar <= nMuMcTracks) { StMuMcTrack *mcTrack = (StMuMcTrack *) MuMcTracks->UncheckedAt(IdPar - 1); if (mcTrack && vtxeval::gDebugFlag) std::cout << " " << mcTrack->GeName(); } FillData(data, recoVertex); double nTracks = recoVertex->noTracks(); if (mcVertex->Id() == 1 && nTracks == vertexMaxMultiplicity) {// good VertexG->Fill(&data.beam); } else { // bad VertexB->Fill(&data.beam); } } if ( !gROOT->IsBatch() ) { if (vtxeval::ask_user()) return; } else { vtxeval::gDebugFlag = false; } } fOut->Write(); }
void makePicoDst(const Int_t runnumber=999999, const Char_t *inputFile="/star/institutions/lbl_prod/mlomnitz/SSD_Simu/StEvent/hijing_**.MuDst.root", const Char_t *inputGeant="/star/institutions/lbl_prod/mlomnitz/SSD_Simu/StEvent/hijing_**.McEvent.root", TString outfilename="out", const bool creatingPhiWgt = kFALSE, const int prodMod = 0, const int emcMode=0, const bool createMcBranch = kTRUE ){ Int_t nEvents = 10000000; //Int_t nEvents = 50; //Load all the System libraries cout<<inputFile<<endl; gSystem->Load("libTable"); gSystem->Load("libPhysics"); gSystem->Load("St_base"); gSystem->Load("StChain"); gSystem->Load("St_Tables"); gSystem->Load("StUtilities"); // new addition 22jul99 gSystem->Load("StTreeMaker"); gSystem->Load("StIOMaker"); gSystem->Load("StarClassLibrary"); gSystem->Load("StTriggerDataMaker"); // new starting from April 2003 gSystem->Load("StBichsel"); gSystem->Load("StEvent"); gSystem->Load("StEventUtilities"); gSystem->Load("StDbLib"); gSystem->Load("StEmcUtil"); gSystem->Load("StTofUtil"); gSystem->Load("StPmdUtil"); gSystem->Load("StPreEclMaker"); gSystem->Load("StStrangeMuDstMaker"); gSystem->Load("StMuDSTMaker"); if( createMcBranch){ gSystem->Load("StMcEvent"); gSystem->Load("StAssociationMaker"); } if(!creatingPhiWgt&&emcMode) { gSystem->Load("StTpcDb"); gSystem->Load("StMcEvent"); gSystem->Load("StMcEventMaker"); gSystem->Load("StDaqLib"); gSystem->Load("libgen_Tables"); gSystem->Load("libsim_Tables"); gSystem->Load("libglobal_Tables"); gSystem->Load("StEmcTriggerMaker"); gSystem->Load("StEmcUtil");//mine gSystem->Load("StEmcRawMaker"); gSystem->Load("StEmcADCtoEMaker"); gSystem->Load("StPreEclMaker"); gSystem->Load("StEpcMaker"); gSystem->Load("StEmcSimulatorMaker"); gSystem->Load("StEmcUtil"); gSystem->Load("StDbBroker"); gSystem->Load("StDetectorDbMaker"); gSystem->Load("StDbUtilities"); gSystem->Load("StEEmcUtil"); gSystem->Load("StEEmcDbMaker"); gSystem->Load("St_db_Maker"); gSystem->Load("StTriggerUtilities"); } gSystem->Load("StPicoDstMaker"); chain = new StChain(); if( createMcBranch ){ StIOMaker* ioMaker = new StIOMaker("IO","r",inputGeant,"bfcTree"); ioMaker->SetDebug(); ioMaker->SetIOMode("r"); ioMaker->SetBranch("*",0,"0"); //deactivate all branches //ioMaker->SetBranch("geantBranch",0,"r"); //activate geant Branch ioMaker->SetBranch("McEventBranch",0,"r"); //activate geant Branch ioMaker->SetBranch("eventBranch",0,"r"); //activate geant Branch StAssociationMaker* associator = new StAssociationMaker; cout<<"created new StAssociationMaker"<<endl; associator->useInTracker(); } StMuDstMaker *MuDstMaker = new StMuDstMaker(0,0,"",inputFile,"MuDst",100); MuDstMaker->SetStatus("*",0); MuDstMaker->SetStatus("MuEvent",1); MuDstMaker->SetStatus("PrimaryVertices",1); MuDstMaker->SetStatus("PrimaryTracks",1); MuDstMaker->SetStatus("GlobalTracks",1); MuDstMaker->SetStatus("CovGlobTrack",1); //MuDstMaker->SetStatus("BTof*",1); //MuDstMaker->SetStatus("Emc*",1); if(!creatingPhiWgt&&emcMode) { St_db_Maker *dbMk = new St_db_Maker("db","MySQL:StarDb","$STAR/StarDb","StarDb"); // Endcap database StEEmcDbMaker* eemcDb = new StEEmcDbMaker; StEmcADCtoEMaker *adc2e = new StEmcADCtoEMaker(); adc2e->setPrint(false); //adc2e->setFillHisto(false); //adc2e->setDebug(false); //more histograms //adc2e->setSMDRmsCut(0,0); adc2e->saveAllStEvent(true); //adc2e->setRemoveGhostEvent(false); //adc2e->setTallyHist(mTally); //adc2e->setDbName("Calibrations/emc/y3"); StPreEclMaker *pre_ecl=new StPreEclMaker(); pre_ecl->setPrint(kFALSE); StEpcMaker *epc=new StEpcMaker(); epc->setPrint(kFALSE); #if 1 // Trigger simulator StTriggerSimuMaker* trigSimu = new StTriggerSimuMaker; trigSimu->setMC(false); trigSimu->useBemc(); trigSimu->useEemc(); trigSimu->useOnlineDB(); trigSimu->bemc->setConfig(StBemcTriggerSimu::kOffline); #endif } StPicoDstMaker *picoMaker = new StPicoDstMaker(1,Form("st_%i.picoDst.root",runnumber),"picoDst"); picoMaker->setRunNumber(runnumber); picoMaker->setEmcMode(emcMode); // 0-No EMC, 1-EMC ON picoMaker->setMcMode(createMcBranch); chain->Init(); cout<<"chain->Init();"<<endl; int total = 0; cout<<MuDstMaker->chain()->GetEntries()<<endl; if( nEvents > MuDstMaker->chain()->GetEntries() ) nEvents=MuDstMaker->chain()->GetEntries(); for (Int_t i=0; i<nEvents; i++){ if(i%100==0) cout << "Working on eventNumber " << i << endl; chain->Clear(); int iret = chain->Make(i); if (iret) { cout << "Bad return code!" << iret << endl; break;} total++; } cout << "****************************************** " << endl; cout << "Work done... now its time to close up shop!"<< endl; cout << "****************************************** " << endl; chain->Finish(); cout << "****************************************** " << endl; cout << "total number of events " << total << endl; cout << "****************************************** " << endl; delete chain; }
void dlMudst(/*string fileList*/){ string fileList = "./xml/schedB57622DD24C1A0ECDF3F996978585EA7_4.list"; // string fileList = "./xml/testlist.list"; gROOT->Macro("/star/u/klandry/ucladisk/2012IFF/StRoot/LoadLibs.C"); gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C"); loadSharedLibraries(); gSystem->Load("StarMagField"); gSystem->Load("StMagF"); gSystem->Load("StTpcDb"); // gSystem->Load("StDbUtilities"); gSystem->Load("StDaqLib"); gSystem->Load("StDbBroker"); gSystem->Load("StDetectorDbMaker"); gSystem->Load("StDbUtilities"); gSystem->Load("St_db_Maker"); gSystem->Load("StEvent"); gSystem->Load("StEventMaker"); gSystem->Load("StarMagField"); gSystem->Load("StTofUtil"); gSystem->Load("StTofMaker"); //gSystem->Load("libtpc_Tables"); gSystem->Load("libGeom"); gSystem->Load("St_g2t"); gSystem->Load("geometry"); gSystem->Load("St_geant_Maker"); gSystem->Load("StTofMuDstReader"); TFile* outfile = new TFile("/star/u/klandry/ucladisk/2012IFF/2012Mudstshort.root","Recreate"); char* outputname = "testout.root"; StChain* muChain = new StChain(); StMuDstMaker* muDstMaker = new StMuDstMaker(0,0,"",fileList.c_str(),"",100000,"MuDst"); muDstMaker->SetStatus("BTofHeader",1) ; // Turn on the global track data muDstMaker->SetStatus("TofRawData",1); muDstMaker->SetStatus("TofData",1); muDstMaker->SetStatus("TofHit",1); //StTofMuDstReader *tofMaker = new StTofMuDstReader("tofMaker",outputname,muDstMaker); StMuDst* muDst; TTree* tree = new TTree("mudst","mudst"); tree->Branch("muDst", &muDst); TH1D* hSigmaPiontof = new TH1D("tofsigmapion","tofsigmapion",100,-10,10); TH1D* hSigmaPiontpc = new TH1D("tpcsigmapion","tpcsigmapion",100,-10,10); int iEvent = 0; while (muChain->Make(iEvent) == kStOK) { muDst = muDstMaker->muDst(); cout << "number of TOF Hits " << muDst->numberOfTofHit() << endl; for (int iHit=0; iHit<muDst->numberOfTofHit(); iHit++) { StMuTofHit *tof = (StMuTofHit*)muDst->tofHit(iHit); //StMuBTofHit* bTofHit = muDst->btofHit(iHit); if (!muDst->tofHit(iHit)) { cout << "jdflksfjldsfjlsdjf" << endl; } //hSigmaPiontof->Fill(tofHit->sigmaPion()); //cout << "tofFilled" << endl; } for (int iTrack=0; iTrack<muDst->numberOfPrimaryTracks(); iTrack++) { StMuTrack* track = muDst->primaryTracks(iTrack); hSigmaPiontpc->Fill(track->nSigmaPion()); //cout << "tpcFilled" << endl; } //cout << muDstMaker->muDst()->event()->runId() << endl; //cout << muDst->event()->runId() << endl; tree->Fill(); iEvent++; if (iEvent%1000 == 0) { cout << iEvent << endl; //cout << muDst->event->runId() << endl; } if (iEvent == 1000){break;} } tree->Write(); hSigmaPiontof->Write(); hSigmaPiontpc->Write(); outfile->Write(); }