/** * PyhsEndRunToXML * author Nagni * version 2.0 - 14 February 2006 * * Description: Generate an XML file starting from a PAMELA unpacked file. * * Parameters: * base - the path where to find the PAMELA unpacked root file. * outDirectory - the path where to put the output file. * xslPath - the path where to find an XSL format for the output. * * version 1.0 - 03 March 2005 * First implementation * * version 2.0 - 14 February 2006 * Modified for new Yoda unpacking structure (one single file) */ #include #include #include #include #include #include #include #include #include #include void PhysEndRunToXML(TString base, TString outDirectory = "", TString xslPath = ""){ Int_t tmpSize; ofstream outputFile; stringstream oss; pamela::PhysEndRunEvent *pere = 0; pamela::CaloEndRun cer; pamela::TBEndRun ter; pamela::EventHeader *eh = 0; pamela::PscuHeader *ph = 0; TFile *rootFile = new TFile(base); if (rootFile->IsZombie()) printf("The %s file does not exist", base.Data()); TString fileName = ((TObjString*)base.Tokenize('\/')->Last())->GetString(); TString filePath = base; filePath.ReplaceAll(fileName, ""); fileName.ReplaceAll(".root", ""); oss.str(""); if (outDirectory == "") { oss << fileName.Data() << "PhysEndRun.xml"; } else { oss << outDirectory.Data() << fileName.Data() << "PhysEndRun.xml"; } const char* xmlFilePath = oss.str().c_str(); outputFile.open(xmlFilePath, ios::trunc); if (!outputFile.is_open()){ printf("Cannot open the file %s for the output", xmlFilePath); exit(0); } //Takes the tree of the header file TTree *tr = (TTree*)rootFile->Get("PhysEndRun"); Long64_t nevents = tr->GetEntries(); tr->SetBranchAddress("PhysEndRun", &pere); tr->SetBranchAddress("Header", &eh); outputFile << "\n"; outputFile << "\n"; outputFile << "\n"; outputFile << "\n"; // for (int i = 0; i < nevents; i++){ tr->GetEntry(i); ph = eh->GetPscuHeader(); outputFile << "\n"; outputFile << "\t" << dec << ph->GetOrbitalTime() << "\n"; outputFile << "\t" << ph->GetCounter() << "\n"; outputFile << "\t\n"; for (int j = 0; j < 4; j++){ cer = pere->CALO_ENDRUN[j]; outputFile << "\t\t\n"; outputFile << "\t\t\t" << (int)cer.CALO_BOARD_ID_HK << "\n"; outputFile << "\t\t\t" << (int)cer.CALO_BOARD_STATUS_HK << "\n"; outputFile << "\t\t\t\n"; for (int k = 0; k < 11; k++){ outputFile << "\t\t\t\t" << (int)cer.CALO_HK0[k] << "\n"; } outputFile << "\t\t\t\n"; outputFile << "\t\t\t\n"; for (int k = 0; k < 11; k++){ outputFile << "\t\t\t\t" << (int)cer.CALO_HK1[k] << "\n"; } outputFile << "\t\t\t\n"; outputFile << "\t\t\t" << (int)cer.CALO_BOARD_ID_REG << "\n"; outputFile << "\t\t\t" << (int)cer.CALO_BOARD_STATUS_REG << "\n"; outputFile << "\t\t\t\n"; for (int k = 0; k < 7; k++){ outputFile << "\t\t\t\t" << (int)cer.CALO_REG[k] << "\n"; } outputFile << "\t\t\t\n"; outputFile << "\t\t\n"; } outputFile << "\t\n"; outputFile << "\t\n"; ter = pere->TB_ENDRUN; outputFile << "\t\t" << (int)ter.TB_ALARM_MASK << "\n"; outputFile << "\t\t" << (int)ter.TB_PMT_MASK_S3 << "\n"; outputFile << "\t\t" << (int)ter.TB_PMT_MASK_S2 << "\n"; outputFile << "\t\t" << (int)ter.TB_PMT_MASK_S12 << "\n"; outputFile << "\t\t" << (int)ter.TB_PMT_MASK_S11 << "\n"; outputFile << "\t\t" << (int)ter.TB_S4_MASK << "\n"; outputFile << "\t\t" << (int)ter.TB_CALO_MASK << "\n"; outputFile << "\t\t" << (int)ter.TB_BUSY_MASK << "\n"; outputFile << "\t\t" << (int)ter.TB_CALIB_FLAG << "\n"; outputFile << "\t\t" << (int)ter.TB_S4_TRIG << "\n"; outputFile << "\t\t" << (int)ter.TB_CALO_TRIG << "\n"; outputFile << "\t\t" << (int)ter.TB_TOF_TRIG << "\n"; outputFile << "\t\n"; outputFile << "\n"; } outputFile << "\n"; outputFile.close(); } int main(int argc, char* argv[]){ TString outDir = ""; TString xslPath = ""; if (argc < 2){ printf("You have to insert at least the file to analyze \n"); printf("Try '--help' for more information. \n"); exit(1); } if (!strcmp(argv[1], "--help")){ printf( "Usage: PhysEndRunToXML FILE [OPTION] \n"); printf( "\t --help Print this help and exit \n"); printf( "\t -outDir[path] Path where to put the output [default ~/tmp] \n"); printf( "\t -xslPath[path] Set the path to a XSL file for formatting [default '']\n"); exit(1); } for (int i = 2; i < argc; i++){ if (!strcmp(argv[i], "-outDir")){ if (++i >= argc){ printf( "-outDir needs arguments. \n"); printf( "Try '--help' for more information. \n"); exit(1); } else { outDir = argv[i]; continue; } } if (!strcmp(argv[i], "-xslPath")) if (++i >= argc){ printf( "-xslPath needs arguments. \n"); printf( "Try '--help' for more information. \n"); exit(1); } else { xslPath = argv[i]; continue; } } PhysEndRunToXML(argv[1], outDir, xslPath); }