@Wile_E_Coyote I have an additional question. This is the source code:
#include "time.h"
#include<stdlib.h>
#include<stdio.h>
#include <Riostream.h>
#include <TFile.h>
#include <TTree.h>
void analysis_miniarray_RUN4()
{
const char *nomeFile = "RUN4_2.log";
fstream file(nomeFile, ios::in);
TFile *f = new TFile("RUN4_2.root","RECREATE");
// Variables
Int_t mult, bit[35], nsat, day, month, year, hh, mm, ss, nanosec, first;
time_t seconds2007, time_trending;
Float_t x[35],y[35],z[35],eff[35];
Int_t nrun,ndet;
Float_t lat,longitudine;
Double_t pattern;
//tprev=409243060; // start RUN4_1 Ok
Int_t tprev=409484106; // start RUN4_2 Ok
//tprev=409835868; // start RUN4_3 Ok
//tprev=410345116 ; // start RUN4_4 Ok
//tprev=410772578; // start RUN4_5 Ok
//tprev=410959665; // start RUN4_6 OK
fstream in("RUN4_config.txt",ios::in);
in>>nrun>>ndet>>lat>>longitudine;
for(Int_t i=0;i<35;i++) {in>>x[i];}
for(Int_t i=0;i<35;i++) {in>>y[i];}
for(Int_t i=0;i<35;i++) {in>>z[i];}
for(Int_t i=0;i<35;i++) {
in>>eff[i];
cout<<i<<" "<<x[i]<<" "<<y[i]<<" "<<z[i]<<" "<<eff[i]<<endl;
}
string date, init, status, time;
Float_t rate[35], temp, press,weight;
Float_t rate0,rate1,rate2,rate3,rate4,rate5,rate6,rate7,rate8,rate9,rate10;
Float_t rate11,rate12,rate13,rate14,rate15,rate16,rate17,rate18,rate19,rate20;
Float_t rate21,rate22,rate23,rate24,rate25,rate26,rate27,rate28,rate29,rate30;
Float_t rate31,rate32,rate33,rate34;
bool D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15,D16,D17,D18;
bool D22,D23,D24,D25,D26,D27,D28,D29,D30,D31,D32,D33,D34;
string info = "INFO";
string info1= "FIX";
// Output tree
TTree *tree = new TTree("tree_arduino","Tree with arduino data");
tree->Branch("seconds2007",&seconds2007,"seconds2007/I");
tree->Branch("nanosec",&nanosec,"nanosec/I");
tree->Branch("mult",&mult,"mult/I");
tree->Branch("pattern",&pattern,"pattern/D");
tree->Branch("weight",&weight,"weight/F");
tree->Branch("first",&first,"first/I");
tree->Branch("D2",&D2,"D2/B");
tree->Branch("D3",&D3,"D3/B");
tree->Branch("D4",&D4,"D4/B");
tree->Branch("D5",&D5,"D5/B");
tree->Branch("D6",&D6,"D6/B");
tree->Branch("D7",&D7,"D7/B");
tree->Branch("D8",&D8,"D8/B");
tree->Branch("D9",&D9,"D9/B");
tree->Branch("D10",&D10,"D10/B");
tree->Branch("D11",&D11,"D11/B");
tree->Branch("D12",&D12,"D12/B");
tree->Branch("D13",&D13,"D13/B");
tree->Branch("D14",&D14,"D14/B");
tree->Branch("D15",&D15,"D15/B");
tree->Branch("D16",&D16,"D16/B");
tree->Branch("D17",&D17,"D17/B");
tree->Branch("D18",&D18,"D18/B");
tree->Branch("D22",&D22,"D22/B");
tree->Branch("D23",&D23,"D23/B");
tree->Branch("D24",&D24,"D24/B");
tree->Branch("D25",&D25,"D25/B");
tree->Branch("D26",&D26,"D26/B");
tree->Branch("D27",&D27,"D27/B");
tree->Branch("D28",&D28,"D28/B");
tree->Branch("D29",&D29,"D29/B");
tree->Branch("D30",&D30,"D30/B");
tree->Branch("D31",&D31,"D31/B");
tree->Branch("D32",&D32,"D32/B");
tree->Branch("D33",&D33,"D33/B");
tree->Branch("D34",&D34,"D34/B");
// Output tree
TTree *tree_trending = new TTree("tree_trending","tree_trending");
tree_trending->Branch("seconds2007",&seconds2007,"seconds2007/I");
tree_trending->Branch("temp",&temp,"temp/F");
tree_trending->Branch("press",&press,"press/F");
tree_trending->Branch("nsat",&nsat,"nsat/I");
tree_trending->Branch("rate2",&rate2,"rate2/F");
tree_trending->Branch("rate3",&rate3,"rate3/F");
tree_trending->Branch("rate4",&rate4,"rate4/F");
tree_trending->Branch("rate5",&rate5,"rate5/F");
tree_trending->Branch("rate6",&rate6,"rate6/F");
tree_trending->Branch("rate7",&rate7,"rate7/F");
tree_trending->Branch("rate8",&rate8,"rate8/F");
tree_trending->Branch("rate9",&rate9,"rate9/F");
tree_trending->Branch("rate10",&rate10,"rate10/F");
tree_trending->Branch("rate11",&rate11,"rate11/F");
tree_trending->Branch("rate12",&rate12,"rate12/F");
tree_trending->Branch("rate13",&rate13,"rate13/F");
tree_trending->Branch("rate14",&rate14,"rate14/F");
tree_trending->Branch("rate15",&rate15,"rate15/F");
tree_trending->Branch("rate16",&rate16,"rate16/F");
tree_trending->Branch("rate17",&rate17,"rate17/F");
tree_trending->Branch("rate18",&rate18,"rate18/F");
tree_trending->Branch("rate19",&rate19,"rate19/F");
tree_trending->Branch("rate20",&rate20,"rate20/F");
tree_trending->Branch("rate21",&rate21,"rate21/F");
tree_trending->Branch("rate22",&rate22,"rate22/F");
tree_trending->Branch("rate23",&rate23,"rate23/F");
tree_trending->Branch("rate24",&rate24,"rate24/F");
tree_trending->Branch("rate25",&rate25,"rate25/F");
tree_trending->Branch("rate26",&rate26,"rate26/F");
tree_trending->Branch("rate27",&rate27,"rate27/F");
tree_trending->Branch("rate28",&rate28,"rate28/F");
tree_trending->Branch("rate29",&rate29,"rate29/F");
tree_trending->Branch("rate30",&rate30,"rate30/F");
tree_trending->Branch("rate31",&rate31,"rate31/F");
tree_trending->Branch("rate32",&rate32,"rate32/F");
tree_trending->Branch("rate33",&rate33,"rate33/F");
tree_trending->Branch("rate34",&rate34,"rate34/F");
Int_t nevents=0;
string dummy;
for(int i=0; i<7; i++) {getline(file,dummy);cout << dummy << endl; //skip 7 lines
}
// Loop on the data
while (file>> init){
bool data = kFALSE;
// Reading info lines
if(init.compare(info)==0) {
file >> status >> nsat >> date >> time >> temp >> press >> rate[0] >> rate[1] >> rate[2]>>rate[3]>>rate[4]>>rate[5]>>rate[6]>>rate[7]>>rate[8]>>rate[9]>>rate[10]>>
rate[11]>>rate[12]>>rate[13]>>rate[14]>>rate[15]>>rate[16]>>rate[17]>>rate[18]>>rate[19]>>rate[20]>>
rate[21]>>rate[22]>>rate[23]>>rate[24]>>rate[25]>>rate[26]>>rate[27]>>rate[28]>>rate[29]>>rate[30]>>
rate[31]>>rate[32]>>rate[33]>>rate[34];
press=10.0*press; // pressure in mbar
}
else if(init.compare(info1)==0) {
file >> dummy >> dummy;
}
// Reading data lines
else {
data = kTRUE;
nevents++;
//if(nevents>1000) break;
mult = atoi(init.c_str());
file >> bit[0]>>bit[1] >> bit[2] >> bit[3] >> bit[4] >> bit[5] >> bit[6] >> bit[7] >> bit[8] >> bit[9] >> bit[10] >>
bit[11] >> bit[12] >> bit[13] >> bit[14] >> bit[15] >> bit[16] >> bit[17] >> bit[18] >> bit[19] >> bit[20]>>
bit[21] >> bit[22] >> bit[23] >> bit[24] >> bit[25] >> bit[26] >> bit[27] >> bit[28] >> bit[29] >> bit[30] >>
bit[31] >> bit[32] >> bit[33] >> bit[34] >> date >> time;
pattern=0;
for (Int_t k=0; k<=34; k++) pattern=pattern+bit[k]*TMath::Power(2.0,k);
D2=kFALSE; if(bit[2]>0) D2=kTRUE;
D3=kFALSE; if(bit[3]>0) D3=kTRUE;
D4=kFALSE; if(bit[4]>0) D4=kTRUE;
D5=kFALSE; if(bit[5]>0) D5=kTRUE;
D6=kFALSE; if(bit[6]>0) D6=kTRUE;
D7=kFALSE; if(bit[7]>0) D7=kTRUE;
D8=kFALSE; if(bit[8]>0) D8=kTRUE;
D9=kFALSE; if(bit[9]>0) D9=kTRUE;
D10=kFALSE; if(bit[10]>0) D10=kTRUE;
D11=kFALSE; if(bit[11]>0) D11=kTRUE;
D12=kFALSE; if(bit[12]>0) D12=kTRUE;
D13=kFALSE; if(bit[13]>0) D13=kTRUE;
D14=kFALSE; if(bit[14]>0) D14=kTRUE;
D15=kFALSE; if(bit[15]>0) D15=kTRUE;
D16=kFALSE; if(bit[16]>0) D16=kTRUE;
D17=kFALSE; if(bit[17]>0) D17=kTRUE;
D18=kFALSE; if(bit[18]>0) D18=kTRUE;
D22=kFALSE; if(bit[22]>0) D22=kTRUE;
D23=kFALSE; if(bit[23]>0) D23=kTRUE;
D24=kFALSE; if(bit[24]>0) D24=kTRUE;
D25=kFALSE; if(bit[25]>0) D25=kTRUE;
D26=kFALSE; if(bit[26]>0) D26=kTRUE;
D27=kFALSE; if(bit[27]>0) D27=kTRUE;
D28=kFALSE; if(bit[28]>0) D28=kTRUE;
D29=kFALSE; if(bit[29]>0) D29=kTRUE;
D30=kFALSE; if(bit[30]>0) D30=kTRUE;
D31=kFALSE; if(bit[31]>0) D31=kTRUE;
D32=kFALSE; if(bit[32]>0) D32=kTRUE;
D33=kFALSE; if(bit[33]>0) D33=kTRUE;
D34=kFALSE; if(bit[34]>0) D34=kTRUE;
// Evaluates the first hit channel
first=0;
Int_t found=0;
for (Int_t k=0; k<=34; k++) {
if(bit[k]>0 && found==0) first=k;
if(bit[k]>0) found=1;
}
}
// Extract day, month, year, hh, mm, ss
day = atoi(date.substr(0,2).c_str());
month = atoi(date.substr(2,2).c_str());
year = atoi(date.substr(4,2).c_str())+2000;
hh = atoi(time.substr(0,2).c_str());
mm = atoi(time.substr(2,2).c_str());
ss = atoi(time.substr(4,2).c_str());
// Calculate seconds from 01.01.2007 00:00
time_trending = calculate_seconds_between(2007,1,1,0,0,0,year,month,day,hh,mm,ss);
seconds2007 = time_trending;
rate0=rate[0];
rate1=rate[1];
rate2=rate[2];
rate3=rate[3];
rate4=rate[4];
rate5=rate[5];
rate6=rate[6];
rate7=rate[7];
rate8=rate[8];
rate9=rate[9];
rate10=rate[10];
rate11=rate[11];
rate12=rate[12];
rate13=rate[13];
rate14=rate[14];
rate15=rate[15];
rate16=rate[16];
rate17=rate[17];
rate18=rate[18];
rate19=rate[19];
rate20=rate[20];
rate21=rate[21];
rate22=rate[22];
rate23=rate[23];
rate24=rate[24];
rate25=rate[25];
rate26=rate[26];
rate27=rate[27];
rate28=rate[28];
rate29=rate[29];
rate30=rate[30];
rate31=rate[31];
rate32=rate[32];
rate33=rate[33];
rate34=rate[34];
if(temp*press>0. && !data && time_trending>tprev+1000 ) {
tree_trending->Fill();
tprev=time_trending;
cout<<"Fill"<<endl;
}
// if(temp*press>0. && !data) tree_trending->Fill();
if(data) { //nanosec info present only in data lines
if (!(nevents % 100)) cout << "\rEvents analyzed: " << nevents << flush;
nanosec = atoi(time.substr(7,7).c_str())*100;
weight=1.0;
for(Int_t j=2; j<=34; j++) {
if(j==19 || j==20 || j==21) continue;
if(bit[j]) weight=weight/eff[j];
}
tree->Fill();
}
}
tree->Write();
tree_trending->Write();
f->Close();
}
// Function to calculate seconds between 2 dates
time_t calculate_seconds_between(
const int Y1, const int M1, const int D1, const int H1, const int m1, const int S1, // YY/MM/DD HH:mm:SS
const int Y2, const int M2, const int D2, const int H2, const int m2, const int S2
)
{
time_t raw;
time(&raw);
struct tm t1 = *gmtime(&raw), t2 = t1;
t1.tm_year = Y1 - 1900;
t1.tm_mon = M1 - 1;
t1.tm_mday = D1;
t1.tm_hour = H1;
t1.tm_min = m1;
t1.tm_sec = S1;
t2.tm_year = Y2 - 1900;
t2.tm_mon = M2 - 1;
t2.tm_mday = D2;
t2.tm_hour = H2;
t2.tm_min = m2;
t2.tm_sec = S2;
time_t tt1, tt2;
tt1 = mktime(&t1);
tt2 = mktime(&t2);
return (tt2 - tt1);
}
The solution proposed by you don’t work for this case. I wanto to understand why i recive only this error:
error: use of undeclared identifier 'calculate_seconds_between'
time_trending = calculate_seconds_between(2007,1,1,0,0,0,year,month,day,hh,mm,ss);