#include "TFile.h" #include "stdio.h" #include "string.h" #include #include #define LINES_TO_READ 98267 #define RUN_LENGTH 43200 void CAENMonitorRootMaker(){ // struct caenstability_t { // double Voltage_Terminal[16]; // double Voltage_Keithley; // int line; // double KeithTime; // double SNMPTime; // double TotalTime; // double TimestampTimeFile; // }; // caenstability_t data; char timestamp[8]; char CharVoltage_Keithley[9],charTimestampKeith[18],charTotalTime[9],charSNMPTime[8],charKeithTime[8],charTimestampTimeFile[18]; double Voltage_Terminal[7][16],Voltage_Keithley=0,Subtract65=65,CAENVoltage[16],KeithTime,SNMPTime,TotalTime,TimestampTerm,TimestampSense,TimestampKeith,TimestampTimeFile; float tempVoltage[16]; char dummy; char header[77]; int MismatchFlagT=0,MismatchFlagS=0,MismatchFlagK=0,ignore_line=0,h=0; int line=0; FILE *tempCAEN = fopen("temp_CAENMTnew","r"); FILE *keith = fopen("temp_KeithMTnew","r"); FILE *timeFile = fopen("temp_TimeMTnew","r"); FILE *tempCAEN1 = fopen("temp_CAENMTnew1","r"); FILE *keith1 = fopen("temp_KeithMTnew1","r"); FILE *timeFile1 = fopen("temp_TimeMTnew1","r"); // FILE *term[8]={term0,term1,term2,term3,term4,term5,term6,term7}; // FILE *sense[8]={sense0,sense1,sense2,sense3,sense4,sense5,sense6,sense7}; TFile *fout = new TFile("SmallestCap.root","RECREATE"); //TNtuple *t1 = new TNtuple("CAEN1","CAEN1","VMon0:VMon1:VMon2:VMon3:VMon4:VMon5:VMon6:VMon7:VKeith:EventNumber"); //TNtuple *t2 = new TNtuple("CAEN2","CAEN2","VMon8:VMon9:VMon10:VMon11:VMon12:VMon13:VMon14:VMon15:VKeith:EventNumber"); TTree *tree = new TTree("Tree","CAEN Stability Data"); tree->Branch("EventNumber",&line,"EventNumber/I"); tree->Branch("Mon[7][16]",&Voltage_Terminal,"Mon[7][16]/D"); // tree->Branch("Mon[7][16]",&Voltage_Terminal,"Mon[7][16]/D"); // tree->Branch("Mon0[16]",&Voltage_Terminal[0],"Mon0[16]/D"); // tree->Branch("Mon1[16]",&Voltage_Terminal[1],"Mon1[16]/D"); // tree->Branch("Mon2[16]",&Voltage_Terminal[2],"Mon2[16]/D"); // tree->Branch("Mon3[16]",&Voltage_Terminal[3],"Mon3[16]/D"); // tree->Branch("Mon4[16]",&Voltage_Terminal[4],"Mon4[16]/D"); // tree->Branch("Mon5[16]",&Voltage_Terminal[5],"Mon5[16]/D"); // tree->Branch("Mon6[16]",&Voltage_Terminal[6],"Mon6[16]/D"); // tree->Branch("Mon0",&Voltage_Terminal[0],"Mon0/D"); // tree->Branch("Mon1",&Voltage_Terminal[1],"Mon1/D"); // tree->Branch("Mon2",&Voltage_Terminal[2],"Mon2/D"); // tree->Branch("Mon3",&Voltage_Terminal[3],"Mon3/D"); // tree->Branch("Mon4",&Voltage_Terminal[4],"Mon4/D"); // tree->Branch("Mon5",&Voltage_Terminal[5],"Mon5/D"); // tree->Branch("Mon6",&Voltage_Terminal[6],"Mon6/D"); // tree->Branch("Mon7",&Voltage_Terminal[7],"Mon7/D"); // tree->Branch("Mon8",&Voltage_Terminal[8],"Mon8/D"); // tree->Branch("Mon9",&Voltage_Terminal[9],"Mon9/D"); // tree->Branch("Mon10",&Voltage_Terminal[10],"Mon10/D"); // tree->Branch("Mon11",&Voltage_Terminal[11],"Mon11/D"); // tree->Branch("Mon12",&Voltage_Terminal[12],"Mon12/D"); // tree->Branch("Mon13",&Voltage_Terminal[13],"Mon13/D"); // tree->Branch("Mon14",&Voltage_Terminal[14],"Mon14/D"); // tree->Branch("Mon15",&Voltage_Terminal[15],"Mon15/D"); tree->Branch("V_K",&Voltage_Keithley,"V_K/D"); tree->Branch("KeithTime",&KeithTime,"KeithTime/D"); tree->Branch("CAENTime",&SNMPTime,"CAENTime/D"); tree->Branch("TotalTime",&TotalTime,"TotalTime/D"); tree->Branch("Timestamp",&TimestampTimeFile,"Timestamp/D"); // //tree->Branch("Data",&data.Voltage_Terminal[0],"Mon0/D:Mon1:Mon2:Mon3:Mon4:Mon5:Mon6:Mon7:Mon8:Mon9:Mon10:Mon11:Mon12:Mon13:Mon14:Mon15:V_K:EventNumber/I:KeithTime/D:CAENTime:TotalTime:TimestampTimeFile"); // //TNtuple* t[16]; // // for (int f=0;f<16;f++) { // // ostringstream tempNameStream; // // tempNameStream << "Channel_" << f; // // string tempName = tempNameStream.str(); // // // ostringstream tempDataStream; // // // //tempDataStream << "V_T" << f << ":V_S" << f << ":V_K" << f << ":EventNumber"; // // // tempDataStream << "V_K" << ":EventNumber"; // // // string tempData = tempDataStream.str(); // // // //string tempSense = "V_S" + f; // // // //string tempKeith = "V_K" + f; // // t[f] = new TNtuple(tempName.c_str(),tempName.c_str(),"VMon:V_K:EventNumber:Begin:After:TotalTime:Timestamp"); // } // TNtuple *t3 = new TNtuple("Keithley","Keithley","Reading:Channel"); // TNtuple *t4 = new TNtuple("Difference","Difference","Diff_K_T:Diff_K_S:Diff_Avg:Channel"); // TNtuple *t5 = new TNtuple("Alltogether","all","V_T:Keithley:Channel"); //int f = 1; //for (int f=0;f<8;f++) { //fread(header,1,78,fin[f]); //} while (line1) cout << "Off by more than 1V!" << line << " " << f << endl; for (int k=0;k<16;k++) {CAENVoltage[k]=tempVoltage[k]; //if (tempVoltage>=65) Voltage_Terminal[f][k] = CAENVoltage[k]-65; //if (tempVoltage<65) Voltage_Terminal[f]= 65 - tempVoltage; } } } //Read Keithley if (true) { fread(&dummy,1,1,keith); if (dummy=='E') { if (line%86400!=0) cout << "Houston, we have a problem. Extra/Missing lines" << endl; for (int j=0;j<13;j++) { fread(&dummy,1,1,keith); } } for (int j=0;j<4;j++) { fread(&dummy,1,1,keith); } fread(charTimestampKeith,1,18,keith); fread(&dummy,1,1,keith); // Skip the + fread(&dummy,1,1,keith); //Check first digit is right //if (f<2 && atoi(&dummy)!=5) cerr << "Mismatch1k!" << dummy << endl; if (atoi(&dummy)!=6) cerr << "Mismatch1k!" << line << endl; fread(&dummy,1,1,keith); if (dummy=='+') {for (int doublePrint=0;doublePrint<2;doublePrint++) {fread(&dummy,1,1,keith);}} if (dummy!='.') cerr << "Period not in right place" << endl; //fread(&dummy,1,1,keith); //Check second digit is right //if (atoi(&dummy)!=5) MismatchFlagK=1; fread(&CharVoltage_Keithley,1,9,keith); //Read the number Voltage_Keithley=strtod(CharVoltage_Keithley,"E"); Voltage_Keithley=Voltage_Keithley*pow(10,-7); Voltage_Keithley=Voltage_Keithley-5; //if (MismatchFlagK==1) Voltage_Keithley = Voltage_Keithley-1.0000000; MismatchFlagK=0; fread(&dummy,1,1,keith); //Ignore the + fread(&dummy,1,1,keith); //Check first number in exponent if (atoi(&dummy)!=0) {cerr << "Exponent1 Wrong!" << endl; ignore_line=1;} fread(&dummy,1,1,keith); //Check second number in exponent if (atoi(&dummy)!=1){ cerr << "Exponent2 Wrong!" << line << endl; ignore_line=1;} if (ignore_line==1){ Voltage_Keithley=-10; ignore_line=0;} fread(&dummy,1,1,keith); //Get the /n // while (dummy!='\n') { // fread(&dummy,1,1,keith); // if (MismatchFlagK==0) cout << line << endl; // MismatchFlagK=1; // } MismatchFlagK=0; } //Read Timestamp for (int j=0;j<12;j++){ fread(&dummy,1,1,timeFile); //cout << dummy; } fread(&charTimestampTimeFile,1,14,timeFile); TimestampTimeFile = strtod(charTimestampTimeFile," "); //Read KeithTime for (int j=0;j<6;j++) { fread(&dummy,1,1,timeFile); } fread(&dummy,1,1,timeFile); if (dummy=='-') fread(&dummy,1,1,timeFile); fread(&charKeithTime,1,8,timeFile); KeithTime = strtod(charKeithTime," "); //Read SNMPTime for (int j=0;j<5;j++) { fread(&dummy,1,1,timeFile); } fread(&charSNMPTime,1,8,timeFile); fread(&dummy,1,1,timeFile); if (dummy=='-') fread(&dummy,1,1,timeFile); SNMPTime = strtod(charSNMPTime," "); //Read TotalTime for (int j=0;j<6;j++) { fread(&dummy,1,1,timeFile); //cout << dummy; } //cout << endl; fread(&charTotalTime,1,9,timeFile); TotalTime = strtod(charTotalTime,"\n"); //if (TotalTime>10) cout << "High Time " << line << "Time" << TotalTime << charTotalTime << endl; // //Fill struct // for (int j=0;j<16;j++) { // data.Voltage_Terminal[j]=Voltage_Terminal[j]; // } // data.Voltage_Keithley=Voltage_Keithley; // data.line=line; // data.KeithTime=KeithTime; // data.SNMPTime=SNMPTime; // data.TotalTime=TotalTime; // data.TimestampTimeFile=TimestampTimeFile; tree->Fill(); // for (int j=0;j<16;j++) { // t[j]->Fill(Voltage_Terminal[j],Voltage_Keithley,line,KeithTime,SNMPTime,TotalTime,TimestampTimeFile); // } //Calculate differences and fill the NTuples // t1->Fill(Voltage_Terminal[0],Voltage_Terminal[1],Voltage_Terminal[2],Voltage_Terminal[3],Voltage_Terminal[4],Voltage_Terminal[5],Voltage_Terminal[6],Voltage_Terminal[7],Voltage_Keithley,line); // t2->Fill(Voltage_Terminal[8],Voltage_Terminal[9],Voltage_Terminal[10],Voltage_Terminal[11],Voltage_Terminal[12],Voltage_Terminal[13],Voltage_Terminal[14],Voltage_Terminal[15],Voltage_Keithley,line); //Voltage_Keithley-Voltage_Terminal[f],Voltage_Keithley-Voltage_Sense[f],Voltage_Keithley-(Voltage_Terminal[f]+Voltage_Sense[f])*0.5,f); line++; //cout << timestamp << endl; } for (int j=0;j<16;j++) { //t[j]->Write(); } tree->Write(); // t1->Write(); // t2->Write(); fout->Close(); fclose(tempCAEN); fclose(keith); fclose(timeFile); }