/** * \file TrkProcess.cpp * \author Elena Vannuccini */ #include #include using namespace std; /** * Create TrkProcess object, initializing the tracker processing variables at default values */ TrkProcess::TrkProcess(){ idrun = 0; // DEBUG = false; // VERBOSE = false; dbg_mode.SetNone(); get1 = 0; get2 = 1; standalone = false; frame2 = "root"; frame1 = "hbook"; outdir = gSystem->WorkingDirectory(); pfolder = "/TrackerFolder"; if (!frame2.CompareTo("root", TString::kIgnoreCase)) ifroot2 = true; else if (!frame2.CompareTo("hbook", TString::kIgnoreCase)) ifroot2 = false; if (!frame1.CompareTo("root", TString::kIgnoreCase)) ifroot1 = true; else if (!frame1.CompareTo("hbook", TString::kIgnoreCase)) ifroot1 = false; file1 = ""; file2 = ""; ostatus = 0; }; /** * Create TrkProcess object, initializing the tracker processing variables according to input parameters. * @param run Run ID * @param f2 Pointer to output level2 file */ TrkProcess::TrkProcess(ULong64_t run, TFile *f2){ idrun = run; // DEBUG = false; // VERBOSE = false; dbg_mode.SetWarning(); get1 = 0; get2 = 1; standalone = false; frame2 = "root"; frame1 = "root"; // ifroot1 = false; // ifroot2 = true; pfolder = "/TrackerFolder"; file1 = ""; if(f2->IsOpen()){ file2 = f2->GetPath(); outdir = gSystem->DirName(gSystem->DirName(file2)); // check if the indicated output directory exists FileStat_t t; if( gSystem->GetPathInfo(outdir.Data(),t) )throw -12; }else{ file2 = ""; outdir = gSystem->WorkingDirectory(); }; if (!frame2.CompareTo("root", TString::kIgnoreCase)) ifroot2 = true; else if (!frame2.CompareTo("hbook", TString::kIgnoreCase)) ifroot2 =false; if (!frame1.CompareTo("root", TString::kIgnoreCase)) ifroot1 = true; else if (!frame1.CompareTo("hbook", TString::kIgnoreCase)) ifroot1 =false; ostatus = 0; }; /** * Set processing variables according to input custom parameters */ void TrkProcess::HandleCustomPar(int ncustom, char *vcustom[]){ for (int i=0; i< ncustom; i++){ // -----------------------------------------------------// if (!strcmp(vcustom[i], "-processFolder")){ if (++i >= ncustom) throw -3; pfolder = vcustom[i]; continue; } // -----------------------------------------------------// if (!strcmp(vcustom[i], "--get1")){ get1 = 1; continue; } // -----------------------------------------------------// if (!strcmp(vcustom[i], "--dontget2")){ get2 = 0; continue; } // -----------------------------------------------------// if (!strcmp(vcustom[i], "--standalone") || !strcmp(vcustom[i], "-s")){ standalone = true; continue; } // -----------------------------------------------------// if (!strcmp(vcustom[i], "-processFile1")){ if (++i >= ncustom) throw -3; get1 = 1; file1 = vcustom[i]; continue; } // -----------------------------------------------------// if (!strcmp(vcustom[i], "-frame1")){ if (++i >= ncustom)throw -3; get1 = 1; frame1 = vcustom[i]; continue; } // -----------------------------------------------------// if (!strcmp(vcustom[i], "-frame2")){ if (++i >= ncustom)throw -3; get2 = 1; frame2 = vcustom[i]; continue; } // -----------------------------------------------------// if (!strcmp(vcustom[i], "--verbose") || !strcmp(vcustom[i], "-v")){ // VERBOSE = true; this->SetVerboseMode(); continue; } // -----------------------------------------------------// else if (!strcmp(vcustom[i], "--debug") || !strcmp(vcustom[i], "-d")){ // DEBUG = true; this->SetDebugMode(); continue; }; } if (!frame2.CompareTo("root", TString::kIgnoreCase)) ifroot2 = true; else if (!frame2.CompareTo("hbook", TString::kIgnoreCase)) ifroot2 =false; else throw -201; if (!frame1.CompareTo("root", TString::kIgnoreCase)) ifroot1 = true; else if (!frame1.CompareTo("hbook", TString::kIgnoreCase)) ifroot1 =false; else throw -201; if(get1){ TString filety; if ( ifroot1) filety=".root"; else if (!ifroot1) filety=".rz"; else throw -200; // file1 = outdir + "/"+ gSystem->BaseName(pfolder) + "/" + file2(file2.Last('/')+1,file2.Last('.')) + ".Level1" + filety; TString base = file2; if(base.Contains(".Level2.root"))base = base(0,base.Index(".Level2.root")); else base = base(0,base.Index(".root")); base = gSystem->BaseName(base); file1 = outdir + "/"+ gSystem->BaseName(pfolder) + "/" + base +".Level1"+filety; // cout << "Requested Level1 output. "<< endl << "Level1 File: "<< file1 << endl; TString path = gSystem->DirName(file1); FileStat_t t; // check if processFolder directory exists, and possibly create it if( gSystem->GetPathInfo(path.Data(),t) ) { if( gSystem->MakeDirectory(path.Data()) == -1)throw -13; }; // if it does, open/create teh putput file }; ostatus = 0; }; /** * \brief Process Level0 event * @param l0_event Pointer to an object of the tracker level0 class * Starting from a Level0 object, this routine fills the level0 common, then calls * the fortran routines, which process the event and fill level1 and level2 commons. */ void TrkProcess::ProcessEvent(TrkLevel0 *l0_event){ // fill Level0 common from Level0 object l0_event->GetCommonVar(&level0event_); // process the event Level0->Level1->Level2 int F77err = 0; // reductionflight_(&F77err); if(F77err < 0)throw F77err; // else if(F77err > 0 && WarningMode())cout<<" WARNING ("< 0 && WarningMode())cout<<" WARNING ("<