Exemplo n.º 1
0
 IOConfig::IOConfig( const GRIDSection& grid,
                     const RUNSPECSection& runspec,
                     bool nosim,
                     const std::string& input_path ) :
     m_write_INIT_file( grid.hasKeyword( "INIT" ) ),
     m_write_EGRID_file( write_egrid_file( grid ) ),
     m_UNIFIN( runspec.hasKeyword( "UNIFIN" ) ),
     m_UNIFOUT( runspec.hasKeyword( "UNIFOUT" ) ),
     m_FMTIN( runspec.hasKeyword( "FMTIN" ) ),
     m_FMTOUT( runspec.hasKeyword( "FMTOUT" ) ),
     m_deck_filename( input_path ),
     m_output_dir( outputdir( input_path ) ),
     m_base_name( basename( input_path ) ),
     m_nosim( nosim  )
 {}
Exemplo n.º 2
0
static void WriteFIDStructure(const char *odir, db::Database *thedb,
                              bool karma)
{
    fidmap[0x100] = 0x100;

    std::string outputdir(util::posix::Canonicalise(odir));

    // Allocate tunes first, to cause minimum pressure on dynamic data area
    PreAllocateFIDs(thedb, mediadb::TUNE);
    PreAllocateFIDs(thedb, mediadb::SPOKEN);
    printf("Highest tune fid: 0x%x\n", next_fid - 0x10);
    PreAllocateFIDs(thedb, mediadb::DIR);
    PreAllocateFIDs(thedb, mediadb::PLAYLIST);
    printf("Highest fid: 0x%x\n", next_fid - 0x10);

    uint64_t drivesize[2];
    drivesize[0] = 0;
    drivesize[1] = 0;

    karma::DBWriter kdbwriter;

    for (fidmap_t::const_iterator i = fidmap.begin(); i != fidmap.end(); ++i)
    {
	db::QueryPtr qp = thedb->CreateQuery();
	qp->Where(qp->Restrict(mediadb::ID, db::EQ, i->first));
	db::RecordsetPtr rs = qp->Execute();
	if (rs && !rs->IsEOF() && i->second)
	{
	    unsigned int destfid = i->second;
	    std::string s = outputdir;
	    char outputleaf[40];
	    unsigned int drive;
            std::string playlist;

            db::RecordsetPtr krs(db::FreeRecordset::Create());
            krs->SetInteger(mediadb::ID, destfid);

            if (karma) {
                drive = 0;
            } else {
                drive = (drivesize[0] > drivesize[1]) ? 1 : 0;
            }
	    sprintf(outputleaf, "/drive%u/_%05x/%03x", drive^1,
		    destfid/4096, destfid & 4095);
	    unlink((s+outputleaf).c_str());

	    sprintf(outputleaf, "/drive%u/_%05x/%03x", drive,
		    destfid/4096, destfid & 4095);
	    unlink((s+outputleaf).c_str());

	    util::MkdirParents((s+outputleaf).c_str());
	    
	    unsigned int type = rs->GetInteger(mediadb::TYPE);
	    unsigned int length;

	    if (type == mediadb::TUNE || type == mediadb::SPOKEN)
	    {   
		unsigned int highfid = rs->GetInteger(mediadb::IDHIGH);
		if (highfid)
		{
		    qp = thedb->CreateQuery();
		    qp->Where(qp->Restrict(mediadb::ID, db::EQ, highfid));
		    db::RecordsetPtr rs2 = qp->Execute();
		    if (rs2 && !rs2->IsEOF())
			rs = rs2;
		    else
			TRACE << "Highfid " << highfid << " failed ("
			      << rs->GetString(mediadb::IDHIGH) << ")\n";
		}
		util::posix::MakeRelativeLink(s+outputleaf,
					      rs->GetString(mediadb::PATH));
		drivesize[drive] += rs->GetInteger(mediadb::SIZEBYTES);
		length = rs->GetInteger(mediadb::SIZEBYTES);
	    }
	    else
	    {
		std::vector<unsigned int> children;
                if (karma) {
                    std::vector<unsigned int> rawChildren;
                    mediadb::ChildrenToVector(rs->GetString(mediadb::CHILDREN),
                                              &rawChildren);
                    children.reserve(rawChildren.size()*2 + 1);
                    children.push_back(0x2ff); // new-type-playlist marker
                    for (std::vector<unsigned int>::const_iterator j = rawChildren.begin();
                         j != rawChildren.end();
                         ++j) {
                        if (*j) {
                            unsigned lefid = fidmap[*j];
                            if (lefid) {
                                children.push_back(lefid);
                                children.push_back(1); // "fid generation"
                            }
                        }
                    }
                } else {
                    std::vector<unsigned int> rawChildren;
                    mediadb::ChildrenToVector(rs->GetString(mediadb::CHILDREN),
                                              &rawChildren);
                    children.reserve(rawChildren.size());
                    for (std::vector<unsigned int>::const_iterator j = rawChildren.begin();
                         j != rawChildren.end();
                         ++j) {
                        if (*j) {
                            unsigned lefid = fidmap[*j];
                            if (lefid) {
                                children.push_back(lefid);
                            }
                        }
                    }
                }

                /// @todo if (karma) write to krs too

		length = 0;
		FILE *f = fopen((s+outputleaf).c_str(), "w");
		if (f)
		{
		    for (unsigned int j=0; j<children.size(); ++j)
		    {
                        unsigned lefid = children[j];
                        length += (unsigned int)fwrite(&lefid, 1, 4, f);
		    }
		    fclose(f);
		}
	    }

	    destfid |= 1;
	    sprintf(outputleaf, "/drive%u/_%05x/%03x", drive^1,
		    destfid/4096, destfid & 4095);
	    unlink((s+outputleaf).c_str());

	    sprintf(outputleaf, "/drive%u/_%05x/%03x", drive,
		    destfid/4096, destfid & 4095);
	    unlink((s+outputleaf).c_str());

	    FILE *f = fopen((s+outputleaf).c_str(), "w");
	    if (f)
	    {
                /// @todo Write fields to krs too

                krs->SetString(mediadb::TITLE, rs->GetString(mediadb::TITLE));
                krs->SetString(mediadb::TYPE,  typemap[type]);
                krs->SetInteger(mediadb::SIZEBYTES, length);

		fprintf(f, "type=%s\n", typemap[type]);
		fprintf(f, "title=%s\n",
			rs->GetString(mediadb::TITLE).c_str());
		fprintf(f, "length=%u\n", length);
		if (type == mediadb::TUNE || type == mediadb::SPOKEN)
		{
		    unsigned int rate
			= rs->GetInteger(mediadb::BITSPERSEC)/1000;
		    std::string ebr =(boost::format("vs%u") % rate).str();
		    fprintf(f, "bitrate=%s\n", ebr.c_str());
		    fprintf(f, "codec=%s\n", 
			    codecmap[rs->GetInteger(mediadb::AUDIOCODEC)]);
		    fprintf(f, "duration=%u\n",
			    rs->GetInteger(mediadb::DURATIONMS));
		    fprintf(f, "samplerate=%u\n",
			    rs->GetInteger(mediadb::SAMPLERATE));
		    MaybeWriteString(f, rs, "artist", mediadb::ARTIST);
		    MaybeWriteString(f, rs, "genre",  mediadb::GENRE);
		    MaybeWriteString(f, rs, "source", mediadb::ALBUM);
		    MaybeWriteInt(f, rs, "tracknr", mediadb::TRACKNUMBER);
		    MaybeWriteInt(f, rs, "year",    mediadb::YEAR);
                    if (karma) {
                        MaybeWriteInt(f, rs, "ctime", mediadb::CTIME);
                        fprintf(f, "fid_generation=1\n");
                    }
                    krs->SetString(mediadb::ARTIST, rs->GetString(mediadb::ARTIST));
                    krs->SetString(mediadb::ALBUM, rs->GetString(mediadb::ALBUM));
                    krs->SetString(mediadb::GENRE, rs->GetString(mediadb::GENRE));
                    krs->SetString(mediadb::YEAR, rs->GetString(mediadb::YEAR));
                    krs->SetString(mediadb::BITSPERSEC, ebr.c_str());
		} else if (karma) {
                    fprintf(f, "fid_generation=1\n");
                }

		fclose(f);
	    }

            if (karma) {
                kdbwriter.addRecord(krs);
            }
	}
    }

    if (karma) {
        std::string smalldb(outputdir);
        smalldb += "/smalldb";
        std::unique_ptr<util::Stream> fs;
        unsigned rc = OpenFileStream(smalldb.c_str(), util::WRITE, &fs);
        if (rc) {
            perror("open smalldb");
        } else {
            rc = kdbwriter.write(fs.get());
            if (rc) {
                perror("write smalldb");
            }
        }
    }

    printf("Drive 0: %llu bytes used\n", (unsigned long long)drivesize[0]);
    printf("Drive 1: %llu bytes used\n", (unsigned long long)drivesize[1]);
}
Exemplo n.º 3
0
 IOConfig::IOConfig( const std::string& input_path ) :
     m_timemap( TimeMap{ Deck{} } ),
     m_deck_filename( input_path ),
     m_output_dir( outputdir( input_path ) ),
     m_base_name( basename( input_path ) )
 {}
Exemplo n.º 4
0
int main( int argc, char* argv[] ) {


  if( argc > 1 ) {
    energy = atoi(argv[1]);
  }

  setStyle();

  std::string dataDir(Form("../data_%dGeV", energy));
  if( cef3_thickness==3. ) 
    dataDir = std::string(Form("../data_3mm_%dGeV", energy));

  std::vector<DataFile> dataFiles; 

  dataFiles.push_back(DataFile("EEShash_LYSO_tung25_nLayers28.root", dataDir) );

  if( cef3_thickness==5. ) {
    dataFiles.push_back(DataFile("EEShash_CeF3_tung15_nLayers34.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung20_nLayers28.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung25_nLayers24.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung30_nLayers21.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung35_nLayers19.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung40_nLayers17.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung45_nLayers16.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung50_nLayers14.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung55_nLayers13.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung60_nLayers12.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung65_nLayers12.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung70_nLayers11.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung75_nLayers10.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung80_nLayers10.root", dataDir) );
  } else if( cef3_thickness==3. ) {
    dataFiles.push_back(DataFile("EEShash_CeF3_tung30_nLayers24.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung35_nLayers21.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung40_nLayers19.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung45_nLayers17.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung50_nLayers15.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung55_nLayers14.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung60_nLayers13.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung65_nLayers12.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung70_nLayers12.root", dataDir) );
    dataFiles.push_back(DataFile("EEShash_CeF3_tung75_nLayers11.root", dataDir) );
    //dataFiles.push_back(DataFile("EEShash_CeF3_tung80_nLayers10.root", dataDir) );
  }


  std::string outputdir(Form("Plots_CeF3_vs_LYSO_%dGeV", energy));
  if( cef3_thickness!=5. )
    outputdir = std::string(Form("Plots_CeF3_vs_LYSO_%dGeV_%.0fmm", energy, cef3_thickness));
  system( Form("mkdir -p %s", outputdir.c_str()) );


  TGraphErrors* gr_mol = getMoliereGraph( dataFiles );
  TGraphErrors* gr_vol = getVolumeGraph( dataFiles );
  std::pair<TGraphErrors*, TGraphErrors*> gr_resp_reso = getResponseGraphs( outputdir, dataFiles );

  std::vector< TGraphErrors* > graphs;
  graphs.push_back( gr_mol );
  graphs.push_back( gr_vol );
  graphs.push_back( gr_resp_reso.first );
  graphs.push_back( gr_resp_reso.second );


  for( unsigned i=0; i<graphs.size(); ++i ) 
    drawSingleGraph( outputdir, graphs[i] ); 

  drawCompareAll( outputdir, graphs );



  return 0;

}
Exemplo n.º 5
0
 IOConfig::IOConfig( const std::string& input_path ) :
     m_deck_filename( input_path ),
     m_output_dir( outputdir( input_path ) ),
     m_base_name( basename( input_path ) )
 {}
Exemplo n.º 6
0
 IOConfig::IOConfig( const std::string& input_path ) :
     m_deck_filename( input_path ),
     m_output_dir( outputdir( input_path ) )
 {
     this->setBaseName(basename(input_path));
 }