void runRecoCERN_TC(TString filename, TString outpath, unsigned int smoothing = 0, unsigned int nEvents = 0, unsigned int skipEvents = 0) { // ======================================================================== // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug) Int_t iVerbose = 0; TStopwatch timer; timer.Start(); // Load basic libraries in rootlogon gROOT->LoadMacro("$VMCWORKDIR/gconfig/rootlogon.C"); rootlogon(); TString basedir = gSystem->Getenv("VMCWORKDIR"); FairRunAna* fRun = new FairRunAna(); //FairRunSim* fSim = new FairRunSim(); TString jobdir = outpath; std::string jobname(filename.Data()); int last = jobname.rfind("/"); if(last>0) jobname = jobname.substr(last+1,jobname.size()+1); ///////////////////////////////////////////////// ?? // Create alignment manager // TpcAlignmentManager * align = TpcAlignmentManager::getInstance("macro/tpc/TestBench/COMPASS_alignment.txt"); TpcAlignmentManager::init("macro/tpc/TestBench/COMPASS_alignment.tpcAligned.txt"); TpcAlignmentManager * align = TpcAlignmentManager::getInstance(); ///////////////////////////////////////////////// ?? TString outName(jobname); if(outName.Contains("repaired.")) outName.ReplaceAll(".lmd_decoded_repaired.root",".reco.root"); if(outName.Contains("decoded.")) outName.ReplaceAll(".lmd_decoded.root",".reco.root"); if(smoothing) outName.ReplaceAll("reco.root", "smoothed_reco.root"); TString outFile = outpath+"/"; outFile += outName; TString PROutFile = outFile; PROutFile.ReplaceAll(".reco.root",".patternReco.root"); TFile test(PROutFile, "recreate"); if(!test.IsZombie()) { //delete file gSystem->Setenv("PROUTFILENAME", PROutFile.Data()); gROOT->ProcessLine(".! rm $PROUTFILENAME"); gSystem->Unsetenv("PROUTFILENAME"); } fRun->SetOutputFile(outFile); FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); FairParAsciiFileIo* parInput1 = new FairParAsciiFileIo(); TString tpcDigiFile = basedir; tpcDigiFile += "/tpc/parfiles/tpc.CERNtestChamber.par"; parInput1->open(tpcDigiFile.Data(),"in"); rtdb->setFirstInput(parInput1); rtdb->Print(); TString geoFile = basedir; geoFile+="/tpc/parfiles/FOPIGeo.root"; fRun->SetGeomFile(geoFile); PndConstField *fMagField=new PndConstField(); fMagField->SetField(0., 0. , 0.); // values are in kG // values are in cm fMagField->SetFieldRegion(-50, 50,-50, 50, -2000, 2000); fRun->SetField(fMagField); //extract number of entries in external data tree TFile testFile(filename); unsigned int numEvents = ((TTree*)testFile.Get("tpcEvent"))->GetEntries(); std::cout<<"Found "<numEvents) nEvents=numEvents; //--------------------SET UP TASKS ------------------------------ FairGeane *Geane = new FairGeane(); fRun->AddTask(Geane); TpcDataReaderTask* read = new TpcDataReaderTask(); read->SetPersistence(); read->SetDatafile(filename); read->SetSampleBranchName("TpcSample"); read->SetStartEvent(skipEvents); // read->SetCutSmallPad(); //read->SetMinSamples(1000); fRun->AddTask(read); CernDataReaderTask* readg = new CernDataReaderTask(); readg->SetPersistence(); readg->SetInputFile ("/nfs/hicran/project/panda/SIM/vandenbm/compassTBdata/hist/gemMonitor.017158110.root"); fRun->AddTask(readg); TBStripClusterTask* tbclu = new TBStripClusterTask(); tbclu->SetPersistence(); // tbclu->SetClusterGEMBranchName("TBStripCluster"); tbclu->SetHitBranchName("TBStripHit"); fRun->AddTask(tbclu); TBTrackInitTask* tbtra = new TBTrackInitTask(); tbtra->SetPersistence(); tbtra->SetSmoothing(); // tbtra->SetDebug(); tbtra->SetPDG(13);//muon fRun->AddTask(tbtra); TBKalmanTask * tbkal = new TBKalmanTask(); tbkal->SetPersistence(); tbkal->SetNumIterations(3); // number of fitting iterations (back and forth) fRun->AddTask(tbkal); TpcPSATask* tpsa = new TpcPSATask(); tpsa->SetPersistence(); //tpsa->SetSamplePersistence(); tpsa->SetSampleBranchName("TpcSample"); // Input of PSA fRun->AddTask(tpsa); TpcClusterFinderTask* tpcCF = new TpcClusterFinderTask(); tpcCF->SetDigiPersistence(); // keep Digis copys in clusters tpcCF->SetPersistence(); // keep Clusters tpcCF->timeslice(6); //in samples ---6--- tpcCF->SetSingleDigiClusterAmpCut(10); // ----10---- tpcCF->SetClusterAmpCut(7); // cut on mean digi amplitude ----- 7 ------ tpcCF->SetThreshold(350); // cut on mean digi amplitude -------350 -------- tpcCF->SetErrorPars(600,400); tpcCF->SetSimpleClustering(); // use TpcClusterFinderSimple tpcCF->SetUseAlManager(); // tpcCF->CutLargePads(); tpcCF->SetClusterBranchName("TpcCluster"); fRun->AddTask(tpcCF); //find TpcRiemannTracks in the TPC alone TpcRiemannTrackingTask* tpcSPR = new TpcRiemannTrackingTask(); tpcSPR->SetPersistence(); //tpcSPR->SetVerbose(1); tpcSPR->SetClusterBranchName("TpcCluster"); tpcSPR->SetRiemannScale(5.0); fRun->AddTask(tpcSPR); //build GFTracks from TpcRiemannTracks TpcTrackInitTask* trackInit=new TpcTrackInitTask(); trackInit->SetPersistence(); //trackInit->SetVerbose(1); //trackInit->SetMCPid(); // use ideal particle identification trackInit->SetPDG(13);//muon trackInit->SetClusterBranchName("TpcCluster"); //trackInit->SetNMaxTrack(10);//Home made cut to avoid crash......? //trackInit->useGeane(); // uses RKTrackrep and GeaneTrackrep trackInit->SetSmoothing(true);//save the track param for each steps fRun->AddTask(trackInit); KalmanTask* kalman =new KalmanTask(); kalman->SetPersistence(); kalman->SetNumIterations(3); // number of fitting iterations (back and forth) kalman->SetTpcClusterBranchName("TpcCluster"); fRun->AddTask(kalman); TpcRefGFTrkResCalc* resgft = new TpcRefGFTrkResCalc(); resgft->addBranchName("TpcCluster"); resgft->addBranchName("TBTrackPostFit"); TVector3 uu(1.,0.,0.); TVector3 vv(0.,1.,0.); TVector3 oo(0.,0.,105.);//plane in front of the TC resgft->setProjectionPlane(oo,uu,vv); resgft->setTrackRepId(0); TpcRefTrackResidualTask* res = new TpcRefTrackResidualTask(); res->SetResCalculator(resgft); res->SetOutBranch("TBTPCres"); res->SetPersistence(); fRun->AddTask(res); TpcRefGFTrkResCalc* resgft2 = new TpcRefGFTrkResCalc(); resgft2->addBranchName("TpcCluster"); resgft2->addBranchName("TrackPostFit"); resgft2->setTrackRepId(0); //the task: TpcRefTrackResidualTask* res2 = new TpcRefTrackResidualTask(); res2->SetResCalculator(resgft2); res2->SetPersistence(); res2->SetOutBranch("TPCTPCres"); fRun->AddTask(res2); // ----- Intialise and run -------------------------------------------- fRun->Init(); // fRun->Run(680,nEvents); int lol = nEvents; fRun->Run(0,lol); timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); printf("RealTime=%f seconds, CpuTime=%f seconds, %fs/event\n",rtime,ctime,rtime/nEvents); std::cout<<"OutputFile: "<