void runRecoFOPI_MC_mb(TString digifile, int field, TString gas, int gain, int bfield, unsigned int smoothing = 0, unsigned int nEvents = 5000, unsigned int nEvStart = 0,unsigned int outnum=0) { // ======================================================================== // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug) Int_t iVerbose = 0; // Input file TString inDigiFile = digifile; TString inSimFile = inDigiFile; inSimFile.ReplaceAll("raw.root", "mc.root"); // Parameter file TString parFile = inDigiFile; parFile.ReplaceAll("raw.root", "param.root"); // Output file TString outFile = inDigiFile; outFile.ReplaceAll("raw.root","reco.root"); if (outnum>0) outFile.ReplaceAll(".root",Form("_%i.root",outnum)) // Number of events to process // Int_t nEvents = 0; // ---- Load libraries ------------------------------------------------- TString basedir = gSystem->Getenv("VMCWORKDIR"); // ------------------------------------------------------------------------ // In general, the following parts need not be touched // ======================================================================== // ----- Timer -------------------------------------------------------- TStopwatch timer; timer.Start(); // ------------------------------------------------------------------------ // ----- Digitization run ------------------------------------------- FairRunAna *fRun= new FairRunAna(); fRun->SetInputFile(inDigiFile); cout<<"Set Input File: "<AddFriend(inSimFile); cout<<"Set Friend MC File: "<SetOutputFile(outFile); cout<<"Set Output File: "<AddTask(Geane); // ------------------------------------------------------------------------ // ----- Parameter database -------------------------------------------- //TString allDigiFile = sysFile+"/tpc/TestBench/tpc.TBtestChamber.par"; cout<<"Create FairRuntimeDb"<GetRuntimeDb(); FairParAsciiFileIo* parInput1 = new FairParAsciiFileIo(); TString tpcDigiFile = gSystem->Getenv("VMCWORKDIR"); tpcDigiFile += "/tpc/FOPI/par/tpc."; tpcDigiFile += field; tpcDigiFile += gas; tpcDigiFile += gain; tpcDigiFile +="MC.par"; parInput1->open(tpcDigiFile.Data(),"in"); rtdb->setFirstInput(parInput1); // cout<<"Setting Geo File"<Getenv("VMCWORKDIR"); // geoFile+="/geometry/tpc_prototype_ArCo2.root"; // fRun->SetGeomFile(geoFile); TpcDigiPar* par = (TpcDigiPar*) rtdb->getContainer("TpcDigiPar"); par->setInputVersion(fRun->GetRunId(),1); par->setChanged(kTRUE); par->init(); Double_t taroff = -65; Double_t targetpos = taroff+41.; // possible materials: copper (default), lead, carbon TString targetmat = TString("carbon"); TString alignmentFileName = par->getAlignmentFile(); TString geoFile; geoFile.Form("$FOPI2ROOT/fopigeometry/FopiGeom_s339%5.1f.root",targetpos); TString cmd; cmd.Form(".! root -b -q '$FOPI2ROOT/fopigeometry/FopiGeom.C(%f,\"%s\",\"%s\",\"%s\",kFALSE)'",targetpos,targetmat.Data(),alignmentFileName.Data(),geoFile.Data()); gROOT->ProcessLine(cmd); // add geometry file to fRun fRun->SetGeomFile(geoFile); cout<<"Setting Magnetic Field"<SetTargetOffset(taroff); fRun->SetField(fMagField); //PndGeoHandling* geoH = PndGeoHandling::Instance(); // ------- RECO procedure ------------------------------------------------ //TString alifile = gSystem->Getenv("VMCWORKDIR"); //alifile += "/tpc/FOPI/par/dummy_alignment.txt"; //cout<SetDigiPersistence(); // keep reference to digis in clusters tpcCF->SetPersistence(); // keep Clusters tpcCF->timeslice(6); //in samples //tpcCF->SetThreshold(1); tpcCF->SetSingleDigiClusterAmpCut(15); tpcCF->SetClusterAmpCut(9.1); // cut on mean digi amplitude tpcCF->SetErrorPars(600.,400.); tpcCF->SetSimpleClustering(); // use TpcClusterFinderSimple fRun->AddTask(tpcCF); cout<<"Setting up Rieman Task"<SetClusterBranchName("TpcCluster"); tpcSPR->SetPersistence(); tpcSPR->SetSortingParameters(true,3,0); //tpcSPR->SetTrkFinderParameters(10,0.4,3,1); //tpcSPR->SetVerbose(1); fRun->AddTask(tpcSPR); cout<<"Setting up TrackInitTask"<SetPersistence(); trackInit->SetTrackOutBranchName("TpcTrackPreFit"); trackInit->SetClusterBranchName("TpcCluster"); trackInit->SetRecoHitOutBranchName("TpcSPHit"); trackInit->SetCosmicSorting(); trackInit->SetVerbose(1); trackInit->SetPDG(211); if (smoothing==1) trackInit->SetSmoothing(true); fRun->AddTask(trackInit); cout<<"Setting up AlignmentTask"<SetRecoHitBranchName("TpcSPHit"); fRun->AddTask(align); cout<<"Setting up KalmanTask"<SetTpcClusterBranchName("TpcSPHit"); kalman->SetTrackBranchName("TpcTrackPreFit"); kalman->SetOutBranchName("TrackPostFit"); kalman->SetPersistence(); kalman->SetNumIterations(3); // number of fitting iterations (back and forth) fRun->AddTask(kalman); cout<<"Setting up ResidualTask"<SetPersistence(); Res->SetNumberOfTrackReps(1); // set to 2 if you use GeaneTrackrep (tpcSPR->useGeane();) if (smoothing==1) Res->SetUnbiased(); fRun->AddTask(Res); // ----- Intialise and run -------------------------------------------- cout<<"Initialising run"<Init(); // Initialize the Digimapper: TpcDigiPar* tpcpar = FairRun::Instance()->GetRuntimeDb()->getContainer("TpcDigiPar"); TpcDigiMapper::getInstance()->init(tpcpar); //TpcDigiMapper::getInstance()->forceManualDriftVel(forceDriftVel); TpcAlignmentManager::init(tpcpar->getAlignmentFile()); std::cout<<"Number of events to process:"<Run(nEvStart, nEvents); rtdb->saveOutput(); rtdb->print(); // ------------------------------------------------------------------------ // ----- Finish ------------------------------------------------------- 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 " << parFile << endl; cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl; cout << endl; // ------------------------------------------------------------------------ std::cout<<"OutputFile: "<