void runEvtMixReco(TString inFile, TString physFile, TString jobname="reco1" ){ // ======================================================================== // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug) Int_t iVerbose = 1; // ---- Load libraries ------------------------------------------------- gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C"); basiclibs(); TString PANDAMC=gSystem->Getenv("PANDAMC"); // Input file (Mixed tpc events) //TString inFile="TEST/evtmix1000DD/physics.DD.mixed.root"; // Input physics events with MVD and GEM //TString physFile="TEST/physics.DD.raw.root"; //TString jobname="reco1"; // TString mcFile="TEST/DPM.mc.root"; TString allDigiFile = "/nfs/nas/data/panda/tpc/SIM/evtmix/all.par"; //inFile.ReplaceAll("$PANDAMC",PANDAMC); //physFile.ReplaceAll("$PANDAMC",PANDAMC); TString inDir=inFile(0,inFile.Last('/')+1); // make new subdir TString jobDir=inDir; jobDir+=jobname; jobDir+="/"; TString cmd="mkdir "; cmd+=jobDir; if(gSystem->Exec(cmd)){ std::cout<<"Could not create Job-Directory "<SetInputFile(inFile); //mcFile.ReplaceAll("$PANDAMC","/afs/e18/data/panda/MC"); fRun->AddFriend(physFile); fRun->SetOutputFile(outFile); // ------------------------------------------------------------------------ // ----- Parameter database -------------------------------------------- FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo(); parIo1->open(allDigiFile.Data(),"in"); FairParRootFileIo* parInput2 = new FairParRootFileIo(); parInput2->open(paramIn2.Data()); rtdb->setFirstInput(parInput2); rtdb->setSecondInput(parIo1); PndGeoHandling* geoH = PndGeoHandling::Instance(); rtdb->print(); FairParRootFileIo* parOutput1 = new FairParRootFileIo(kTRUE); parOutput1->open(paramOut.Data()); rtdb->setOutput(parOutput1); rtdb->saveOutput(); //fRun->LoadGeometry(); // ------------------------------------------------------------------------ //FairGeane *Geane = new FairGeane(); //fRun->AddTask(Geane); //std::cout<<"\nGEANE initialised"<SetPersistence(); tpcSPR->useGeane(false); // use RKTrackrep and GeaneTrackrep //tpcSPR->SetMCPid(); // use ideal particle identification // the following lines only with MCCORR compiled code!!!!! //tpcSPR->SetTrkFinderParameters(5,200,5); //tpcSPR->SetTrkMergerParameters(200,200,200,200); //tpcSPR->SetMergeCurlers(); tpcSPR->SetPDG(211); fRun->AddTask(tpcSPR); PndTpcEvtDeconvTask* evtDeconv=new PndTpcEvtDeconvTask(); evtDeconv->SetPersistence(); evtDeconv->SetZCutBinning(50,0.25); evtDeconv->SetNExpectedTracks(4); evtDeconv->SetCuts(5.,3.5,3.5); evtDeconv->SetOutTrackBranchName("RiemannTrackTagged"); fRun->AddTask(evtDeconv); PndTpcTrackInitTask* trackInit=new PndTpcTrackInitTask(); trackInit->SetPersistence(); trackInit->SetVerbose(false); trackInit->SetRiemannBranchName("RiemannTrackTagged"); trackInit->SetOutBranchNames("TrackPreFitTagged", "PndTrackCandTagged", "PndTrackTpcTagged"); trackInit->useGeane(false); // uses RKTrackrep and GeaneTrackrep trackInit->SetSmoothing(true); fRun->AddTask(trackInit); KalmanTask* kalman =new KalmanTask(); //kalman->SetPersistence(); kalman->SetTrackBranchName("TrackPreFitTagged"); kalman->SetOutBranchName("TrackFitTagged"); kalman->SetNumIterations(3); // number of fitting iterations (back and forth) fRun->AddTask(kalman); // creates TrackPostFit branch //correlate fitted track with MVD pixels and strips PndTpcMVDCorrelatorTask* corr = new PndTpcMVDCorrelatorTask(); corr->SetMatchDistance(0.5); //cm corr->SetAngleCut(TMath::PiOver4()); // rad corr->SetMinMVDHits(1); corr->RequireMatch(true); corr->MergeHits(true); corr->SetTrackBranchName("TrackFitTagged"); corr->SetOutTrackBranchName("TrackPreFitTaggedMVD"); //corr->SetPersistence(true); fRun->AddTask(corr); //fit after MVD corr KalmanTask* kalman2 =new KalmanTask(); kalman2->SetPersistence(); kalman2->SetNumIterations(3); // number of fitting iterations (back and forth) kalman2->SetTrackBranchName("TrackPreFitTaggedMVD"); kalman2->SetOutBranchName("TrackFitTaggedMVD"); fRun->AddTask(kalman2); PrimSelector* prims=new PrimSelector(); prims->SetTrackBranchName("TrackFitTaggedMVD"); prims->SetNExpectedTracks(4); prims->SetPersistence(); fRun->AddTask(prims); // PndTpcGEMCorrelatorTask* corrG = new PndTpcGEMCorrelatorTask(); // corrG->SetMatchDistance(100.); //mutliple of GEM hit sigma // corrG->SetMinGEMHits(2); // //corrG->RequireMatch(true); // corrG->SetTrackBranchName("TrackFitTaggedMVD"); // corrG->SetOutTrackBranchName("TrackPreFitTaggedGEM"); // corrG->SetPersistence(true); // fRun->AddTask(corrG); // //final fit // KalmanTask* kalman3 =new KalmanTask(); // kalman3->SetPersistence(); // kalman3->SetNumIterations(1); // number of fitting iterations (back and forth) // kalman3->SetTrackBranchName("TrackPreFitTaggedGEM"); // kalman3->SetOutBranchName("TrackPostFitComplete"); // fRun->AddTask(kalman3); fRun->Init(); fRun->Run(0,0); // ----- Finish ------------------------------------------------------- corr->WriteHistograms("MvdCorr.root"); // tpcRMC->WriteHistograms(); // tpcSPR->WriteHistograms("RecoHistos.root"); //kalman->WriteHistograms("RecoHistos.root"); // //fitstat->WriteHistograms("RecoHistos.root"); // // dEdx->WriteHistograms("RecoHistos.root"); // //DebugLogger::Instance()->WriteFiles(); // //delete tpcSplitter; // rtdb->saveOutput(); // rtdb->print(); timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); cout << endl << endl; cout << "Macro finished succesfully." << endl; cout << "Output file is " << outFile << endl; cout << "Parameter file is " << paramOut << endl; cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl; cout << endl; // // ------------------------------------------------------------------------ }