void runRecoFOPI_MC_mb_recl_noB(TString digifile, int field, TString gas, int gain, unsigned int smoothing = 1, unsigned int nEvents = 0, bool reclust=true, bool varstep=true, unsigned int fac = 4, unsigned int nEvStart = 0,unsigned int outnum=0) { // ======================================================================== // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug) Int_t iVerbose = 0; Int_t persistence=1; // 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",""); if (reclust) outFile.ReplaceAll(".root","_recl.root"); if (outnum>0) outFile.ReplaceAll(".root",Form("_%i.root",outnum)); outFile.ReplaceAll(".root",".reco.root"); // Number of events to process // Int_t nEvents = 0; // ---- Load libraries ------------------------------------------------- TString basedir = gSystem->Getenv("VMCWORKDIR"); 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: "<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); TpcDigiPar* tpcpar = FairRun::Instance()->GetRuntimeDb()->getContainer("TpcDigiPar"); tpcpar->setInputVersion(fRun->GetRunId(),1); tpcpar->setChanged(kTRUE); tpcpar->init(); Double_t taroff = -65; Double_t targetpos = taroff+41.; // possible materials: copper (default), lead, carbon TString targetmat = TString("carbon"); TString alignmentFileName = tpcpar->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); PndConstField *fMagField=new PndConstField(); fMagField->SetField(0., 0. , 0. ); // values are in kG fMagField->SetFieldRegion(-50, 50,-50, 50, -2000, 2000); // values are in cm fRun->SetField(fMagField); // fRun->SetField(fMagField); // ------- RECO procedure ------------------------------------------------ cout<<"Setting up Event Counter"<SetnEvts(nEvents); else evCount->SetStep(1000); fRun->AddTask(evCount); cout<<"Setting up ClusterFinderTAsk"<SetClusterBranchName("TpcPreCluster"); tpcCF->SetDigiPersistence(persistence); // keep reference to digis in clusters tpcCF->SetPersistence(persistence); // keep Clusters tpcCF->timeslice(6); //in samples //tpcCF->SetThreshold(1); tpcCF->SetSingleDigiClusterAmpCut(0.); tpcCF->SetClusterAmpCut(0.); // cut on mean digi amplitude tpcCF->SetErrorPars(600.,400.); tpcCF->SetSimpleClustering(); // use TpcClusterFinderSimple fRun->AddTask(tpcCF); cout<<"Setting up Rieman Task"<SetClusterBranchName("TpcPreCluster"); tpcSPR->SetRiemannTrackBranchName("RiemannTrack"); tpcSPR->SetRiemannHitBranchName("RiemannHit"); tpcSPR->SetPersistence(persistence); tpcSPR->SetSortingParameters(true,1,0); //tpcSPR->SetTrkFinderParameters(3,0.3,3,1.6); //tpcSPR->SetVerbose(1); fRun->AddTask(tpcSPR); if (reclust) { cout<<"Setting up TrackInitTask"<SetPersistence(persistence); trackInit->SetRiemannBranchName("RiemannTrack"); trackInit->SetTrackOutBranchName("TpcPreTrackPreFit"); trackInit->SetClusterBranchName("TpcPreCluster"); trackInit->SetRecoHitOutBranchName("TpcPreSPHit"); trackInit->SetCosmicSorting(); trackInit->SetVerbose(0); trackInit->SetPDG(211); if (smoothing==1) trackInit->SetSmoothing(true); fRun->AddTask(trackInit); cout<<"Setting up KalmanTask 1"<SetTpcClusterBranchName("TpcPreSPHit"); kalman1->SetTrackBranchName("TpcPreTrackPreFit"); kalman1->SetOutBranchName("TrackPrePostFit"); kalman1->SetPersistence(persistence); kalman1->SetNumIterations(1); // number of fitting iterations (back and forth) fRun->AddTask(kalman1); // cout<<"Setting up ResidualTask1"<SetPersistence(); // Res1->SetNumberOfTrackReps(1); // set to 2 if you use GeaneTrackrep (tpcSPR->useGeane();) // Res1->SetClusterBranchName("TpcPreCluster"); // Res1->SetTrackBranchName("TpcPreTrackPreFit"); // Res1->SetSPHitBranchName("TpcPreSPHit"); // Res1->SetOutBranchName("PreTrackFitStat"); // if (smoothing==1) // Res1->SetUnbiased(); //fRun->AddTask(Res1); cout<<"Setting up Reclusterizer"<SetTrackBranchName("TrackPrePostFit"); tpcReCl->SetClusterBranchName("TpcPreCluster"); tpcReCl->SetRecoHitBranchName("TpcPreSPHit"); tpcReCl->SetReClusterBranchName("TpcCluster"); if (!varstep) tpcReCl->SetStepSize(1); tpcReCl->SetMinClusterSize(5); //tpcReCl->SetVerbose(); tpcReCl->SetPersistence(persistence); tpcReCl->SetUseFirstDigiPos(); ////tpcReCl->SetUseChamberEdge(); //tpcReCl->SetVarStep(); //tpcReCl->SetStepOff(0.76565); //tpcReCl->SetStepSlope(-0.009673 ); if (varstep) { tpcReCl->SetVarStepSqrt(); tpcReCl->SetStepOff_sqrt(1.0); tpcReCl->SetFac(fac); //tpcReCl->SetStepSlope_sqrt(4*0.0257467); tpcReCl->SetStepOff_0_sqrt(-62.5); } tpcReCl->SetUseCosmics(); ////tpcReCl->SetUseAllDigis(); tpcReCl->SetTrackInit(); fRun->AddTask(tpcReCl); } else { cout<<"setting up TrackInit Task 2"<SetPersistence(persistence); trackInit2->SetTrackOutBranchName("TpcTrackPreFit"); trackInit2->SetClusterBranchName("TpcPreCluster"); trackInit2->SetRecoHitOutBranchName("TpcSPHit"); trackInit2->SetVerbose(0); trackInit2->SetPDG(211); trackInit2->SetCosmicSorting(); if (smoothing==1) trackInit2->SetSmoothing(true); fRun->AddTask(trackInit2); } cout<<"Setting up KalmanTask 2"<SetTpcClusterBranchName("TpcSPHit"); kalman2->SetTrackBranchName("TpcTrackPreFit"); kalman2->SetOutBranchName("TrackPostFit"); kalman2->SetPersistence(persistence); kalman2->SetNumIterations(3); // number of fitting iterations (back and forth) fRun->AddTask(kalman2); cout<<"Setting up CosmicTask 2"<SetTpcPointBranchName("TpcPoint"); if (reclust) Cos->SetClusterBranchName("TpcCluster"); else Cos->SetClusterBranchName("TpcPreCluster"); Cos->SetPersistence(); Cos->SetNumberOfTrackReps(1); // set to 2 if you use GeaneTrackrep (tpcSPR->useGeane();) //Cos->SetVerbose(1); if (smoothing==1) Cos->SetUnbiased(); fRun->AddTask(Cos); cout<<"Setting up ana Task\n"<SetCosmics(); tpcTrCl->SetThetaCut(40,140); tpcTrCl->SetClMeanCut(400); //tpcTrCl->SetPhiCut(70,110); //tpcTrCl->SetVerbose(); tpcTrCl->SetKeepDelTracks(); fRun->AddTask(tpcTrCl); //cout<<"Setting up ResidualTask 2"<SetPersistence(); //Cos->SetNumberOfTrackReps(1); // set to 2 if you use GeaneTrackrep (tpcSPR->useGeane();) //if (smoothing==1) //Cos->SetUnbiased(); //fRun->AddTask(Cos); // ----- 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: "<