Commit 275fe770 authored by Valentina Fioretti's avatar Valentina Fioretti
Browse files

mongodb mt estension

parent c32bffea
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@
#include "THELGlobalMemory.hh"
#include "SQLliteOutput_XYZ.hh"
#include "FITSOutput_XYZ.hh"
#include "MongoOutput_XYZ.hh"

#if defined(GEANT4_11_1)
#include "G4SystemOfUnits.hh"
@@ -150,6 +151,13 @@ void CRunAction::EndOfRunAction(const G4Run* ) {
                gm.sqlite3_xyz->close();
            }
        #endif
        
        #ifdef MONGODB
        if(gm.enableWriteMONGODB && gm.enableWriteXYZ) {
           gm.mongodb_xyz->close();
        }
        #endif
        
    }
}

+0 −2
Original line number Diff line number Diff line
@@ -403,13 +403,11 @@ void CXYZSD::EndOfEvent(G4HCofThisEvent* HCE) {
	}
#endif

G4cout << MONGODB << G4endl;
#ifdef MONGODB
    if(gm.enableWriteMONGODB && gm.enableWriteXYZ) {
        if(NbHits > 0) {
            for (G4int i=0; i<NbHits; i++) {
                CXYZHit* hit = (*xyzhitCollection)[i];
                //gm.root_xyz->open();
                gm.mongodb_xyz->writeData(hit, i);
            }
        }
+17 −16
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <mongocxx/instance.hpp>
#include <mongocxx/uri.hpp>
#include <mongocxx/exception/exception.hpp>

#include <iomanip>
#include <sstream>
#include <string>
@@ -31,9 +32,8 @@ using bsoncxx::builder::basic::make_document;

#define G4_TYPE G4float

static mongocxx::instance instance{};

MongoOutput_XYZ::MongoOutput_XYZ() : client(mongocxx::uri("mongodb://localhost:27017")){
MongoOutput_XYZ::MongoOutput_XYZ(){
    //current_event_id = -1;
    lastevent = -1;
    nmaxevents = 0;
@@ -60,12 +60,6 @@ MongoOutput_XYZ::MongoOutput_XYZ() : client(mongocxx::uri("mongodb://localhost:2
    gm.config->readInto(removeWorldEvent, "IOXYZ.removeWorldEvent");
    cout << "IOXYZ.removeWorldEvent: " << removeWorldEvent << endl;
     
    //INIT
    outputXYZCollectionNameMongoDB_base = (char*)gm.GetOutputMongoXYZCollectionName().data();
    
    auto database = client[database_name];
    collection = database[outputXYZCollectionNameMongoDB_base];
     
    
    newfile = true;
    nrows_file = 0;
@@ -188,12 +182,16 @@ void MongoOutput_XYZ::writeData(CXYZHit* hitting, G4int i) {
        gtime_exit = time; //18

        // Construct MongoDB document from data
        //auto client = pool.acquire();  // Get thread-safe client
        //auto database = (*client)[database_name];
        outputXYZCollectionNameMongoDB_base = (char*)gm.GetOutputMongoXYZCollectionName().data();
        //collection = database[outputXYZCollectionNameMongoDB_base];
        
        /*
        vector<bsoncxx::document::value> documents;
        documents.push_back(make_document(kvp("EVT_ID", "prova1")));
        documents.push_back(make_document(kvp("TRK_ID", "prova2")));
        */
        //auto client = pool.acquire();
        //auto database = client[database_name];
        auto client = pool.acquire();  // Get thread-safe client
        auto database = (*client)[database_name];
        auto collection = database[outputXYZCollectionNameMongoDB_base];
        
        bsoncxx::builder::basic::document doc{};
        doc.append(kvp("EVT_ID", std::to_string(evtid)));
@@ -224,8 +222,11 @@ void MongoOutput_XYZ::writeData(CXYZHit* hitting, G4int i) {
        doc.append(kvp("PROCESS_ID", std::to_string(tproc)));
        doc.append(kvp("PROCESS_NAME", tprocname));

        if (!doc.view().empty()) {
          collection.insert_one(doc.view());
        
        } else {
            cerr << "Error: Empty BSON document" << endl;
        }
        nrows_file++;
         
    }
+9 −3
Original line number Diff line number Diff line
@@ -8,16 +8,16 @@
// MongoDB C++ driver headers
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/pool.hpp>
#include <mongocxx/uri.hpp>
#include <bsoncxx/json.hpp>

class MongoOutput_XYZ {

private:
    mongocxx::client client;
    mongocxx::collection collection;
    //mongocxx::client client;
    //mongocxx::collection collection;
    
    G4String database_name = "bogemms";
public:

    MongoOutput_XYZ();
@@ -32,6 +32,12 @@ public:

    G4String outputXYZCollectionNameMongoDB_base;
    
    G4String database_name = "bogemms";
    
    mongocxx::instance instance{};
    mongocxx::uri uri{"mongodb://localhost:27017/?minPoolSize=1&maxPoolSize=1000"};

    mongocxx::pool pool{uri};
    
protected: