# Scratch Space
This is used for pasting things like code and messages that are good for reference but would bog down standard documentation
## Messages
Some error messages could go here
## Code Snippets
### Aws-sdk-s3 C++ operation minio for file upload and download
From [here](https://www.programmersought.com/article/2070542330/). Who knows, it could get taken down at any moment, the internet can be fleeting.
```C++
#pragma once
#include "TDPreDefine.h"
#include <aws/s3/S3Client.h>
#include <aws/core/Aws.h>
#include <aws/core/auth/AWSCredentialsProvider.h>
using namespace Aws::S3;
using namespace Aws::S3::Model;
class TDANALYSIS_EXPORT TDAWSOSSTools{
public:
TDAWSOSSTools()
{
Aws::InitAPI(m_options);
Aws::Client::ClientConfiguration cfg;
cfg.endpointOverride = "10.1.3.148:9000"; // S3 server address and port
cfg.scheme = Aws::Http::Scheme::HTTP;
cfg.verifySSL = false;
//Aws::Auth::AWSCredentials cred("RPW421T9GSIO4A45Y9ZR", "2owKYy9emSS90Q0pXuyqpX1OxBCyEDYodsiBemcq"); // Certified Key
m_client = new S3Client(Aws::Auth::AWSCredentials("RPW421T9GSIO4A45Y9ZR", "2owKYy9emSS90Q0pXuyqpX1OxBCyEDYodsiBemcq"), cfg, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Always,false);
}
~TDAWSOSSTools()
{
if (m_client != nullptr)
{
delete m_client;
m_client = NULL;
}
Aws::ShutdownAPI(m_options);
}
public:
bool uploadfile(std::string BucketName, std::string objectKey,std::string pathkey);
bool downloadfile(std::string BucketName, std::string objectKey, std::string pathkey);
private:
S3Client * m_client = { NULL };
Aws::SDKOptions m_options;
};
#include "TDAWSOSSTools.h"
#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/PutObjectRequest.h>
#include <aws/s3/model/GetObjectRequest.h>
#include <iostream>
#include <fstream>
bool TDAWSOSSTools::uploadfile(std::string BucketName,std::string objectKey, std::string pathkey)
{
PutObjectRequest putObjectRequest;
putObjectRequest.WithBucket(BucketName.c_str()).WithKey(objectKey.c_str());
auto input_data = Aws::MakeShared<Aws::FStream>("PutObjectInputStream",
pathkey.c_str(), std::ios_base::in | std::ios_base::binary);
putObjectRequest.SetBody(input_data);
auto putObjectResult = m_client->PutObject(putObjectRequest);
if (putObjectResult.IsSuccess())
{
std::cout << "Done!" << std::endl;
return true;
}
else
{
/*std::cout << "PutObject error: " <<
putObjectResult.GetError().GetExceptionName() << " " <<
putObjectResult.GetError().GetMessage() << std::endl;*/
return false;
}
}
bool TDAWSOSSTools::downloadfile(std::string BucketName, std::string objectKey, std::string pathkey)
{
Aws::S3::Model::GetObjectRequest object_request;
object_request.WithBucket(BucketName.c_str()).WithKey(objectKey.c_str());
auto get_object_outcome = m_client->GetObject(object_request);
if (get_object_outcome.IsSuccess())
{
Aws::OFStream local_file;
local_file.open(pathkey.c_str(), std::ios::out | std::ios::binary);
local_file << get_object_outcome.GetResult().GetBody().rdbuf();
std::cout << "Done!" << std::endl;
return true;
}
else
{
std::cout << "GetObject error: " <<
get_object_outcome.GetError().GetExceptionName() << " " <<
get_object_outcome.GetError().GetMessage() << std::endl;
return false;
}
}
```
root app code
```c=
std::string text = "{ \"first\": 1; \"second\": 2}";
if(!reader.parse(response_string, root)) {
std::cout << reader.getFormattedErrorMessages() << std::endl;
}
Runs basic ROOT app with the arguments given for main
TRint app("app", &argc, argv);
Testing. Makes some drawings on a TCanvas
TCanvas* c = new TCanvas("c", "Something", 0, 0, 800, 600);
TF1 *f1 = new TF1("f1","sin(x)", -5, 5);
f1->SetLineColor(kBlue+1);
f1->SetTitle("My graph;x; sin(x)");
f1->Draw();
c->Modified(); c->Update();
Run and finish with ROOT prompt
app.Run();
```
Code for fetching data buckets from minio
```c++
std::string BucketName = "345974d4-d2ec-49bb-bef2-6683b7e461d5";
Aws::SDKOptions m_options;
Aws::S3::S3Client* m_client = { NULL };
Aws::InitAPI(m_options);
Aws::Client::ClientConfiguration cfg;
cfg.endpointOverride = "cmsopendata-minio.servicex.ssl-hep.org";
cfg.scheme = Aws::Http::Scheme::HTTP;
cfg.verifySSL = false;
m_client = new Aws::S3::S3Client(Aws::Auth::AWSCredentials("miniouser", "leftfoot1"), cfg,
Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false);
std::string objectKey = "root:::eospublic.cern.ch::eos:opendata:cms:MonteCarlo2011:Summer11LegDR:SMHiggsToZZTo4L_M-125_7TeV-powheg15-JHUgenV3-pythia6:AODSIM:PU_S13_START53_LV6-v1:20000:08CD3ECC-4C92-E411-B001-0025907B4F20.root";
std::string pathkey = "temp";
Aws::S3::Model::PutObjectRequest putObjectRequest;
putObjectRequest.WithBucket(BucketName.c_str()).WithKey(objectKey.c_str());
Aws::S3::Model::ListObjectsRequest objRequest;
objRequest.WithBucket(BucketName);
auto outcome = m_client->ListObjects(objRequest);
if (outcome.IsSuccess()) {
std::cout << "Objects in bucket '" << BucketName << "':"
<< std::endl << std::endl;
Aws::Vector<Aws::S3::Model::Object> objects =
outcome.GetResult().GetContents();
for (Aws::S3::Model::Object& object : objects)
{
std::cout << object.GetKey() << std::endl;
}
}
else
{
std::cout << "Error: ListObjects: " <<
outcome.GetError().GetMessage() << std::endl;
}
// Get object
std::cout << "Getting object\n";
Aws::S3::Model::GetObjectRequest object_request;
object_request.SetBucket(BucketName);
object_request.SetKey(objectKey);
Aws::S3::Model::GetObjectOutcome get_object_outcome =
m_client->GetObject(object_request);
if (get_object_outcome.IsSuccess()) {
// auto& retrieved_file = get_object_outcome.GetResultWithOwnership().
// GetBody();
// std::cout << typeid(retrieved_file).name() << '\n';
// // Print a beginning portion of the text file.
// std::cout << "Beginning of file contents:\n";
// char file_data[255] = { 0 };
// retrieved_file.getline(file_data, 254);
// std::cout << file_data << std::endl;
std::cout << "attempting save\n";
// TFile *myFile = new TFile("myfile.root", "CREATE");
Aws::OFStream local_file;
local_file.open(objectKey.c_str(), std::ios::out | std::ios::binary);
local_file << get_object_outcome.GetResult().GetBody().rdbuf();
std::cout << "Done!" << std::endl;
// myFile-
// return true;
}
else {
auto err = get_object_outcome.GetError();
std::cout << "Error: GetObject: " <<
err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
// return false;
}
```